LyoKICogQ29weXJpZ2h0IDIwMDQgSWx5YSBLb3JuaXlrbwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1VLUkFJTklBTiwgU1VCTEFOR19ERUZBVUxUCgpNRU5VXzAwMSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglNRU5VSVRFTSAiJsLl6+jqsyCy6u7t6ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIibM4OuzILLq7u3q6CIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICIm0e/o8e7qIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIibP7uTw7uHo9rMiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgUE9QVVAgIibC6OPr/+QiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIibC5evo6rMgsuru7eroIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiJszg67Mgsuru7eroIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJICAgIE1FTlVJVEVNICIm0e/o8e7qIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJICAgIE1FTlVJVEVNICImz+7k8O7h6PazIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBQT1BVUCAiwu/u8P/k6vPi4PLoICay6u7t6ugiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIsfgICbN4Ofi7v4iLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIsfgICbS6O/u7CIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAix+AgJtDu5+yz8O7sIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAix+AgJsTg8u7+IiwJMHgzMwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICAgIE1FTlVJVEVNICImwOLy7uzg8uj37e4iLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICLC6PCz4u3/8uggsuru7eroIiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICLO7e7i6PLoIiwJCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiwvHy4OLo8ugiLAkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiwvHy4OLo8uggz+7x6Ovg7e3/IiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICLR8uLu8Ojy6CIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAize7i4CAm0uXq4CIsCUZDSURNX1NIVklFV19ORVdGT0xERVIKCSAgICBNRU5VSVRFTSAize7i5SAmz+7x6Ovg7e3/IiwJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiwuvg8fLo4u7x8rMiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKLyoKIHNoZWxsdmlldyBpdGVtIG1lbnUKKi8KTUVOVV9TSFZfRklMRSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIibP8O7is+Tt6OoiLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIibCs+Tq8Ojy6CIsCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIsLoJvCz5+Dy6CIsCQlGQ0lETV9TSFZJRVdfQ1VUCgkgIE1FTlVJVEVNICImyu7vs/8iLAkJRkNJRE1fU0hWSUVXX0NPUFkKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICIm0fLi7vDo8uggz+7x6Ovg7e3/IiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIsLoJuTg6+jy6CIsCQlGQ0lETV9TSFZJRVdfREVMRVRFCgkgIE1FTlVJVEVNICLP5fDlJuns5e3z4uDy6CIsCQlGQ0lETV9TSFZJRVdfUkVOQU1FCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJsLr4PHy6OLu8fKzIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIs7j6//kIOTuIPLl6ugiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIsKz5Oyz7eAiLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAJVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCTQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiz/DuICVzIgpGT05UIDEwLCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDE1MywgMTMzLCA1MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTAsIDEwLCAxNCwgMTYKIExURVhUICIiLCAxMDAsIDMwLCAxMCwgMTM3LCAxMAogTFRFWFQgIiIsIDEwMSwgMzAsIDIyLCAxMzcsIDEwCiBMVEVYVCAi0O7n8O7h7ejq6CBXaW5lOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIsLi5eSz8vwgs+wn/yDv8O7j8ODs6Cwg8uXq6Cwg5O7q8+zl7fLzIPfoIPDl8fPw8SCy7fLl8O3l8vMsILMgV2luZSDis+Tq8Oi6IL/1LiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICImwrPk6vDo8ug6IiwgMTIzMDUsIDcsIDM5LCAyNCwgMTAKIENPTlRST0wgIiIsIDEyMjk4LCAiQ09NQk9CT1giLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgV1NfVklTSUJMRSB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfRFJPUERPV04sIDM2LCAzNywgMTgzLCAxMDAKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgNjIsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIsKz5Oyz7eAiLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICImzuPr/+QuLi4iLCAxMjI4OCwgMTcwLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCn0KCi8qCglzcGVjaWFsIGZvbGRlcnMKKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX0RFU0tUT1AJCSLR8rPr/O3o9v8iCglJRFNfTVlDT01QVVRFUgkJIsyz6SDK7uzvJ/7y5fAiCn0KCi8qCgljb250ZXh0IG1lbnVzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19WSUVXX0xBUkdFCQkiJsLl6+jqsyCy6u7t6ugiCglJRFNfVklFV19TTUFMTAkJIibM4OuzILLq7u3q6CIKCUlEU19WSUVXX0xJU1QJCSIm0e/o8e7qIgoJSURTX1ZJRVdfREVUQUlMUwkiJs/u5PDu4ej2syIKCUlEU19TRUxFQ1QJCSLC6Cbh8ODy6CIKCUlEU19PUEVOCQkiwrMm5Orw6PLoIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfQ1JFQVRFRk9MREVSX0RFTklFRCAizeUg4uTg6+7x/yDx8uLu8Ojy6CDt7uLzIPLl6vM6IMKz5Ozu4uAg8yDk7vHy8++zLiIKCUlEU19DUkVBVEVGT0xERVJfQ0FQVElPTiAiz+7s6Ovq4CDv8Ogg8fLi7vDl7e2zIO3u4u6/IPLl6ugiCglJRFNfREVMRVRFSVRFTV9DQVBUSU9OICLPs+Ty4uXw5Obl7e3/IOLo6/P35e3t/yD04Onr8yIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiz7Pk8uLl8OTm5e3t/yDi6Ovz9+Xt7f8g8uXq6CIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIsLoIOLv5eLt5e2zLCD57iD17vfl8uUg4ujr8/fo8uggJyUxJz8iCglJRFNfREVMRVRFTVVMVElQTEVfVEVYVCAiwugg4u/l4u3l7bMsIPnuIPXu9+Xy5SDi6Ovz9+jy6CD2syAlMSDl6+Xs5e3y6Ciz4ik/IgoJSURTX09WRVJXUklURUZJTEVfVEVYVCAiz+Xw5e/o8eDy6CDU4OnrICUxPyIKCUlEU19PVkVSV1JJVEVGSUxFX0NBUFRJT04gIs+z5PLi5fDk5uXt7f8gz+Xw5efg7+jx8yDU4Onr8yIKfQoKLyoJY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3CSovClNUUklOR1RBQkxFCkJFR0lOCglJRFNfU0hWX0NPTFVNTjEJCSLU4OnrIgoJSURTX1NIVl9DT0xVTU4yCQki0O7n7LPwIgoJSURTX1NIVl9DT0xVTU4zCQki0ujvIgoJSURTX1NIVl9DT0xVTU40CQkix+yz7eXt7iIKCUlEU19TSFZfQ09MVU1ONQkJIsDy8Ojh8/LoIgoJSURTX1NIVl9DT0xVTU42CQki0O7n7LPwIgoJSURTX1NIVl9DT0xVTU43CQkiwrPr/O3o6SDQ7ufss/AiCkVORAo=