LyoKICogQ29weXJpZ2h0IDIwMDQgSWx5YSBLb3JuaXlrbwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1VLUkFJTklBTiwgU1VCTEFOR19ERUZBVUxUCgpNRU5VXzAwMSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglNRU5VSVRFTSAiJsLl6+jqsyCy6u7t6ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIibM4OuzILLq7u3q6CIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICIm0e/o8e7qIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIibP7uTw7uHo9rMiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCIiCglCRUdJTgoJICBQT1BVUCAiJsLo4+v/5CIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiJsLl6+jqsyCy6u7t6ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICImzODrsyCy6u7t6ugiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIibR7+jx7uoiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIibP7uTw7uHo9rMiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICLC7+7w/+Tq8+Lg8uggJrLq7u3q6CIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAix+AgJs3g5+Lu/iIsCTB4MzAJLyogY29sdW1uIDAgKi8KCSAgICBNRU5VSVRFTSAix+AgJtLo7+7sIiwJMHgzMgkvKiBjb2x1bW4gMiAqLwoJICAgIE1FTlVJVEVNICLH4CAm0O7n7LPw7uwiLAkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICLH4CAmxODy7v4iLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIibA4vLu7ODy6Pft7iIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQoJICBFTkQKCSAgTUVOVUlURU0gIsLo8LPi7f/y6CCy6u7t6ugiLAlGQ0lETV9TSFZJRVdfU05BUFRPR1JJRAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIs7t7uLo8ugiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICLC8fLg4ujy6CIsCQlGQ0lETV9TSFZJRVdfSU5TRVJUCgkgIE1FTlVJVEVNICLC8fLg4ujy6CDP7vHo6+Dt7f8iLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgItHy4u7w6PLoIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICLN7uLgICbS5ergIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICLN7uLlICbP7vHo6+Dt7f8iLAlGQ0lETV9TSFZJRVdfTkVXTElOSwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICLC6+Dx8uji7vHysyIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgovKgogc2hlbGx2aWV3IGl0ZW0gbWVudQoqLwpNRU5VX1NIVl9GSUxFIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQIiIKCUJFR0lOCgkgIE1FTlVJVEVNICImz/Du4rPk7ejqIiwJCUZDSURNX1NIVklFV19FWFBMT1JFCgkgIE1FTlVJVEVNICImwrPk6vDo8ugiLAkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICLC6Cbws+fg8ugiLAkJRkNJRE1fU0hWSUVXX0NVVAoJICBNRU5VSVRFTSAiJsru77P/IiwJCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJtHy4u7w6PLoIM/u8ejr4O3t/yIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCgkgIE1FTlVJVEVNICLC6Cbk4Ovo8ugiLAkJRkNJRE1fU0hWSUVXX0RFTEVURQoJICBNRU5VSVRFTSAiz+Xw5Sbp7OXt8+Lg8ugiLAkJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIibC6+Dx8uji7vHysyIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICLO4+v/5CDk7iDy5eroIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICLCs+Tss+3gIiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogCVRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCVdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgk0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIs/w7iAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAxNTMsIDEzMCwgNTAsIDEyLCBXU19UQUJTVE9QCiBMSVNUQk9YIDk5LCA4LCA2NSwgMTM3LCA4MiwgTEJTX05PVElGWSB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKIElDT04gIiIsIDEwODgsIDE4OSwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgOCwgMTAsIDEzNywgMzMKIExURVhUICLQ7ufw7uHt6OroIFdpbmU6IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiwuLl5LPy/CCz7Cf/IO/w7uPw4OzoLCDy5eroLCDk7urz7OXt8vMg9+gg8OXx8/DxILLt8uXw7eXy8ywgsyBXaW5lIOKz5Orw6Logv/UuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIibCs+Tq8Ojy6DoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiwrPk7LPt4CIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIibO4+v/5C4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJItHys+v87ej2/yIKCUlEU19NWUNPTVBVVEVSCQkizLPpIMru7O8n/vLl8CIKfQoKLyoKCWNvbnRleHQgbWVudXMKKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX1ZJRVdfTEFSR0UJCSImwuXr6OqzILLq7u3q6CIKCUlEU19WSUVXX1NNQUxMCQkiJszg67Mgsuru7eroIgoJSURTX1ZJRVdfTElTVAkJIibR7+jx7uoiCglJRFNfVklFV19ERVRBSUxTCSImz+7k8O7h6PazIgoJSURTX1NFTEVDVAkJIsLoJuHw4PLoIgoJSURTX09QRU4JCSLCsybk6vDo8ugiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19DUkVBVEVGT0xERVJfREVOSUVEICLN5SDi5ODr7vH/IPHy4u7w6PLoIO3u4vMg8uXq8zogwrPk7O7i4CDzIOTu8fLz77MuIgoJSURTX0NSRUFURUZPTERFUl9DQVBUSU9OICLP7uzo6+rgIO/w6CDx8uLu8OXt7bMg7e7i7r8g8uXq6CIKCUlEU19ERUxFVEVJVEVNX0NBUFRJT04gIs+z5PLi5fDk5uXt7f8g4ujr8/fl7e3/IPTg6evzIgoJSURTX0RFTEVURUZPTERFUl9DQVBUSU9OICLPs+Ty4uXw5Obl7e3/IOLo6/P35e3t/yDy5eroIgoJSURTX0RFTEVURUlURU1fVEVYVCAiwugg4u/l4u3l7bMsIPnuIPXu9+Xy5SDi6Ovz9+jy6CAnJTEnPyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICLC6CDi7+Xi7eXtsywg+e4g9e735fLlIOLo6/P36PLoIPazICUxIOXr5ezl7fLoKLPiKT8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICLP5fDl7+jx4PLoINTg6esgJTE/IgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiz7Pk8uLl8OTm5e3t/yDP5fDl5+Dv6PHzINTg6evzIgp9CgovKgljb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcJKi8KU1RSSU5HVEFCTEUKQkVHSU4KCUlEU19TSFZfQ09MVU1OMQkJItTg6esiCglJRFNfU0hWX0NPTFVNTjIJCSLQ7ufss/AiCglJRFNfU0hWX0NPTFVNTjMJCSLS6O8iCglJRFNfU0hWX0NPTFVNTjQJCSLH7LPt5e3uIgoJSURTX1NIVl9DT0xVTU41CQkiwPLw6OHz8ugiCglJRFNfU0hWX0NPTFVNTjYJCSLQ7ufss/AiCglJRFNfU0hWX0NPTFVNTjcJCSLCs+v87ejpINDu5+yz8CIKRU5ECg==