LyoKICogU3RhcnQKICogUG9saXNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDMgRGFuIEtlZ2VsCiAqIENvcHlyaWdodCAyMDA3IE1pa29sYWogWmFsZXdza2kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlcy5oIgoKTEFOR1VBR0UgTEFOR19QT0xJU0gsIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXJ1Y2hhbWlhIHByb2dyYW0gbHViIG90d2llcmEgZG9rdW1lbnQgdyBwcm9ncmFtaWUga3TzcnkgamVzdCB6d3lrbGUgdb95d2FueSBkbGEgdGVnbyByb3pzemVyemVuaWEuXG5cClW/eWNpZTpcblwKc3RhcnQgW29wY2plXSBuYXp3YV9wcm9ncmFtdSBbLi4uXVxuXApzdGFydCBbb3BjamVdIG5hendhX2Rva3VtZW50dVxuXApcblwKT3BjamU6XG5cCi9NW2luaW1pemVkXSBVcnVjaGFtaWEgcHJvZ3JhbSB6bWluaW1hbGl6b3dhbnkuXG5cCi9NQVhbaW1pemVkXSBVcnVjaGFtaWEgcHJvZ3JhbSB6bWFrc3ltYWxpem93YW55LlxuXAovUltlc3RvcmVkXSAgVXJ1Y2hhbWlhIHByb2dyYW0gbm9ybWFsbmllIChiZXogbWluaW1hbGl6YWNqaSBhbmkgbWFrc3ltYWxpemFjamkpLlxuXAovV1thaXRdICAgICAgWmFjemVrYWogYb8gcHJvZ3JhbSB6YWtv8WN6eSBkemlhs2FuaWUgKGkgemFrb/FjelxuXApcdCAgICAga29kZW0gd3lqnGNpYSBwcm9ncmFtdSkuXG5cCi9Qcm9nSURPcGVuICBPcGVuIGEgZG9jdW1lbnQgdXNpbmcgdGhlIGZvbGxvd2luZyBwcm9nSUQuXG5cCi9MICAgICAgICAgICBQb2thvyBsaWNlbmNq6iB1v3l0a293bmlrYS5cblwKXG5cCnN0YXJ0LmV4ZSB3ZXJzamEgMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsXG5cClN0YXJ0IGplc3QgZG9zdGFyY3phbnkgQkVaIK9BRE5FSiBHV0FSQU5DSkk7IHN6Y3plZ/OzeSB3IG9wY2ppIC9MLlxuXApUbyBqZXN0IHdvbG5lIG9wcm9ncmFtb3dhbmllIGkgbW+/ZXN6IGplIHJvenBvd3N6ZWNobmlh5iAocG9kIHBld255bWlcblwKd2FydW5rYW1pKTsgdXJ1Y2hvbSAnc3RhcnQgL0wnIGFieSBwb3puYeYgc3pjemVn87N5LlxuXAoiCgpTVFJJTkdfTElDRU5TRSwgInN0YXJ0LmV4ZSB3ZXNqYSAwLjIgQ29weXJpZ2h0IChDKSAyMDAzLCBEYW4gS2VnZWxcblwKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuXAptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlXG5cCmFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjFcblwKb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cClxuXApUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcblwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcblwKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuXApHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cClxuXApZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlXG5cCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG5cCkZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuXG5cClxuXApTZWUgdGhlIENPUFlJTkcuTElCIGZpbGUgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cCiIKClNUUklOR19FWEVDRkFJTCAiTmllIHVkYbNvIHNp6iB1cnVjaG9taeYgYXBsaWthY2ppIGx1YiBuaWUgbWEgYXBsaWthY2ppIHNrb2phcnpvbmVqIHogZGFueW0gcGxpa2llbS5cblNoZWxsRXhlY3V0ZUV4IG5pZSBwb3dpb2SzbyBzaeoiCgpTVFJJTkdfVU5JWEZBSUwgIk5pZSBkYSBzaeogcHJ6ZXSzdW1hY3p55iBkYW5laiCcY2llv2tpIFVuaXggbmEgnGNpZb9r6iBET1MuIgp9Cg==