LyoKICogQ29weXJpZ2h0IDIwMDUgTWlsa28gS3JhY2hvdW5vdgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0JVTEdBUklBTiwgU1VCTEFOR19ERUZBVUxUCgpTWVNNRU5VIE1FTlUgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRQp7CiBNRU5VSVRFTSAiJsL65/Hy4O3u4ugiLCA2MTcyOAogTUVOVUlURU0gIibP8OXs5fHy6CIsIDYxNDU2CiBNRU5VSVRFTSAiJtDg5+zl8CIsIDYxNDQwCiBNRU5VSVRFTSAiJs3g7ODr6CIsIDYxNDcyCiBNRU5VSVRFTSAiJtPi5evo9+giLCA2MTQ4OAogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAiJsfg8uLu8OhcdEFsdC1GNCIsIDYxNTM2CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICLP8OXiJurr/vfoIO3gIC4uLlx0Q3RybC1Fc2MiLCA2MTc0NAogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAiJs7y7e7x7e4gV0lORSAuLi4iLCA2MTc2MQogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAizvIm4eXr5eboIOIg5O3l4u3o6uAg5+Ag7vLx8vDg7f/i4O3lIO3gIOPw5fjq6CIsIDYxNzYyCn0KCkVESVRNRU5VIE1FTlUgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRQp7CglQT1BVUCAiIgoJQkVHSU4KCQlNRU5VSVRFTSAiJs7y7OXt6CIsIEVNX1VORE8KCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJsjn8OXm6CIsIFdNX0NVVAoJCU1FTlVJVEVNICImyu7v6PDg6SIsIFdNX0NPUFkKCQlNRU5VSVRFTSAiJsLs+urt6CIsIFdNX1BBU1RFCgkJTUVOVUlURU0gIsjnJvLw6OkiLCBXTV9DTEVBUgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImzODw6ujw4Okg4vHo9+ruIiwgRU1fU0VUU0VMCglFTkQKfQoKTVNHQk9YIERJQUxPRyAxMDAsIDgwLCAyMTYsIDE2OApTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQkVHSU4KICAgICAgICBJQ09OICIiLCAxMDg4LCA4LCAyMCwgMTYsIDE2LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUKICAgICAgICBMVEVYVCAiIiwgMTAwLCAzMiwgNCwgMTc2LCA0OCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAgfCBTU19OT1BSRUZJWAogICAgICAgIFBVU0hCVVRUT04gIiZPSyIsIDEsIDE2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAizvIm7OXt6CIsIDIsIDY0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiz/DlJurw4PLoIiwgMywgMTEyLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAizvIm7e7i7iIsIDQsIDE2MCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIibP8O7v8/Ht6CIsIDUsIDIwOCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIibE4CIsIDYsIDI1NiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIibN5SIsIDcsIDMwNCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUApFTkQKCk1ESV9NT1JFV0lORE9XUyBESUFMT0cgRklYRUQgSU1QVVJFIDIwLCAyMCwgMjMyLCAxMjIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiU2VsZWN0IFdpbmRvdyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTElTVEJPWCAgICAgICAgIE1ESV9JRENfTElTVEJPWCwgNSwgNywgMjIyLCA5MCwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgLyogZGVmaW5lZCBpbiBtZGkuaCAqLwogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIElET0ssIDc1LCAxMDAsIDM1LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICLO8uzl7egiLCBJRENBTkNFTCwgMTIwLCAxMDAsIDM1LCAxNApFTkQKCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfRVJST1IgIsPw5fjq4CIKICAgIElEU19NRElfTU9SRVdJTkRPV1MgIibO+eUg7/Du5+7w9uguLi4iCn0K