LyoKICogIE5vdGVwYWQgKEJ1bGdhcmlhbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMjAwNSBNaWxrbyBLcmFjaG91bm92CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfQlVMR0FSSUFOLCBTVUJMQU5HX0RFRkFVTFQKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICIm1ODp6yIgewogIE1FTlVJVEVNICImze7iLi4uXHRDdHJsK04iLCAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICImzvLi7vDoXHRDdHJsK08iLCAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJtH69fDg7ehcdEN0cmwrUyIsICAgICBDTURfU0FWRQogIE1FTlVJVEVNICLR+vXw4O3oICbq4PLuLi4uIiwgICAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJs/l9+DyXHRDdHJsK1AiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICLN4PHyJvDu6eroIO3gIPHy8ODt6Pbg8uAuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICLN4PHy8O4m6eroIO3gIO/l9+Dy4O3l8u4uLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImyOf17uQiLCAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJtDl5ODq8ujw4O3lIiB7CiAgTUVOVUlURU0gIibO8uzl7ehcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImyOfw5eboXHRDdHJsK1giLCAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiJsru7+jw4OlcdEN0cmwrQyIsICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImwuz66u3oXHRDdHJsK1YiLCAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiyOcm8vDo6Vx0RGVsIiwgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIszg8Oro8ODpICbi8ej36u5cdEN0cmwrQSIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIsLw5ezlLybE4PLgXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJs/w5e3g8f/pIOT66+PoIPDl5O7i5SIsICBDTURfV1JBUAogIE1FTlVJVEVNICIm2PDo9PIuLi4iLCAgICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJtL68PHl7eUiIHsKICBNRU5VSVRFTSAiJtL68PHoXHRDdHJsK0YiLCAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAizeDs5fDoICbx6+Xk4uD5XHRGMyIsICBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIibP7uzu+SIgewogIE1FTlVJVEVNICIm0frk+vDm4O3o5SIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJtL68PHoLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImz+7s7vkg5+Ag7+7s7vny4CIsICAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIibI7fTu8Ozg9uj/Li4uIiB7CiAgIE1FTlVJVEVNICImy+j25e3nIiwgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAiJsHFxyDDwNDAzdbI3yIsICAgICBDTURfTk9fV0FSUkFOVFkKICAgTUVOVUlURU0gIibO8u3u8e3uIFdpbmUiLCAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIs3g8fLw7unq6CDt4CDx8vDg7ej24PLgIgp7CkxURVhUICAgICImw+7w5e0g6u7r7u3y6PLz6zoiLCAgMHgxNDAsICAgMTAsIDA3LCA2NSwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEsICAgICAgIDgwLCAwNSw5MCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIibE7uvl7SDq7uvu7fLo8vPrOiIsICAweDE0MiwgICAxMCwgMjQsIDY1LCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgODAsIDIyLDkwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIibD8ODt6PboOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAixO4m6+3gOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwqLyAgIDB4MTQ3LCAgICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICLD7ibw7eA6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIsT/JvHt4DoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiy/8m4uA6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAizvLs5e3oIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImz+7s7vkiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiUGFnZSAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgICAgICAgICAgIjIwIOzsIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgICAiMjAg7OwiICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgICAgICAgICAgIjI1IOzsIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgICAiMjUg7OwiICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIsHl6+Xm7ejqIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw9DF2MrAIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiz9DFxNPP0MXGxMXNyN8iClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLI7fTu8Ozg9uj/IgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIijt5e7n4OPr4OLl7SkiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiwvHo9+roIPTg6evu4uUgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAi0uXq8fLu4ugg9ODp6+7i5SAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgItTg6ev68iAnJXMnIOUg7/Dl6uDr5e3uIOPu6//sLCDn4CDk4CDh+uTlIO7y4u7w5e0uXG4gXArI5+/u6+fi4Ony5SDk8PPjIPDl5ODq8u7wLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIs3lIPHy5SDi+uLl6+gg7ejq4Or64iDy5erx8i4gXApcbs3g7+j45fLlIO3l+e4g6CDu7+jy4Ony5SDu8u3u4u4uIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAi1ODp6/ryICclcydcbu3lIPH6+eXx8uLz4uBcblxuIFwKyPHq4PLlIOvoIOTgIPH65+Tg5OXy5SDt7uIg9ODp6z8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLU4Onr+vIgJyVzJ1xu5SDh6Osg7/Du7OXt5e1cblxuIFwKyPHq4PLlIOvoIOTgIPH69fDg7ejy5SDv8O7s5e3o8uU/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIO3lIOzu5uUg5OAg4frk5SDt4Ozl8OXtLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICLN/+zgIOTu8fLg8vr37e4g7+Ds5fIg5+Ag5+Di+vD44uDt5SDt4CDy4OfoIFwK5+Dk4PfgLiBcbsfg8uLu8OXy5SDt/+ru6+ruIO/w6Ovu5uXt6P8sIOfgIOTgIPPi5evo9+jy5SDw4Ofs5fDgIO3gIPHi7uHu5O3g8uAg7+Ds5fIuIgoKfQo=