LyoKICogRW5nbGlzaCByZXNvdXJjZXMgZm9yIG9sZWFjYwogKgogKiBDb3B5cmlnaHQgMjAwOCBOaWtvbGF5IFNpdm92CiAqIENvcHlyaWdodCAyMDA4IFl1blNvbmcgSHdhbmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIm9sZWFjYy5oIgoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgMCAivssgvPYgvvi0wiCwtMO8IiAvKiB1bmRvY3VtZW50ZWQgKi8KICAgIFJPTEVfU1lTVEVNX1RJVExFQkFSICAgICLBprjxudkiCiAgICBST0xFX1NZU1RFTV9NRU5VQkFSICAgICAiuN60urnZIgogICAgUk9MRV9TWVNURU1fU0NST0xMQkFSICAgIr26xam30bnZIgogICAgUk9MRV9TWVNURU1fR1JJUCAgICAgICAgIrHXuLMiCiAgICBST0xFX1NZU1RFTV9TT1VORCAgICAgICAiu+e/7rXlIgogICAgUk9MRV9TWVNURU1fQ1VSU09SICAgICAgIsS/vK0iCiAgICBST0xFX1NZU1RFTV9DQVJFVCAgICAgICAiu/DA1LHiyKMiCiAgICBST0xFX1NZU1RFTV9BTEVSVCAgICAgICAisOaw7SIKICAgIFJPTEVfU1lTVEVNX1dJTkRPVyAgICAgICLDoiIKICAgIFJPTEVfU1lTVEVNX0NMSUVOVCAgICAgICLFrLbzwMy+8MauIgogICAgUk9MRV9TWVNURU1fTUVOVVBPUFVQICAgIsbLvvcguN60uiIKICAgIFJPTEVfU1lTVEVNX01FTlVJVEVNICAgICK43rS6IL7GwMzF2yIKICAgIFJPTEVfU1lTVEVNX1RPT0xUSVAgICAgICK1tbG4IMbBIgogICAgUk9MRV9TWVNURU1fQVBQTElDQVRJT04gIsfBt86x17elIgogICAgUk9MRV9TWVNURU1fRE9DVU1FTlQgICAgIrmuvK0iCiAgICBST0xFX1NZU1RFTV9QQU5FICAgICAgICAixrIocGFuZSkiCiAgICBST0xFX1NZU1RFTV9DSEFSVCAgICAgICAiwvfGriIKICAgIFJPTEVfU1lTVEVNX0RJQUxPRyAgICAgICK068itu/PA2iIKICAgIFJPTEVfU1lTVEVNX0JPUkRFUiAgICAgICKwocDlwNq4riIKICAgIFJPTEVfU1lTVEVNX0dST1VQSU5HICAgICLB/bTcyK0iCiAgICBST0xFX1NZU1RFTV9TRVBBUkFUT1IgICAiutC4rsDaIgogICAgUk9MRV9TWVNURU1fVE9PTEJBUiAgICAgIrW1sbi52SIKICAgIFJPTEVfU1lTVEVNX1NUQVRVU0JBUiAgICK788XCudkiCiAgICBST0xFX1NZU1RFTV9UQUJMRSAgICAgICAgIsXXwMy67SIKICAgIFJPTEVfU1lTVEVNX0NPTFVNTkhFQURFUiAivLy3zsHZIMfstPUiCiAgICBST0xFX1NZU1RFTV9ST1dIRUFERVIgICAgIrCht87B2SDH7LT1IgogICAgUk9MRV9TWVNURU1fQ09MVU1OICAgICAgICK/rSIKICAgIFJPTEVfU1lTVEVNX1JPVyAgICAgICAgICAisKG3zsHZIgogICAgUk9MRV9TWVNURU1fQ0VMTCAgICAgICAgICK8vyIKICAgIFJPTEVfU1lTVEVNX0xJTksgICAgICAgICAiuLXFqSIKICAgIFJPTEVfU1lTVEVNX0hFTFBCQUxMT09OICAix7O8sSC1tb/yuLsiCiAgICBST0xFX1NZU1RFTV9DSEFSQUNURVIgICAgIrmuwNoiCiAgICBST0xFX1NZU1RFTV9MSVNUICAgICAgICAgIrjxt88iCiAgICBST0xFX1NZU1RFTV9MSVNUSVRFTSAgICAgIrjxt88gvsbAzMXbIgogICAgUk9MRV9TWVNURU1fT1VUTElORSAgICAgICK/3LD7vLEiCiAgICBST0xFX1NZU1RFTV9PVVRMSU5FSVRFTSAgIr/csPu8sSC+xsDMxdsiCiAgICBST0xFX1NZU1RFTV9QQUdFVEFCICAgICAgIsbkwMzB9iDFxyIKICAgIFJPTEVfU1lTVEVNX1BST1BFUlRZUEFHRSAivNO8uiDG5MDMwfYiCiAgICBST0xFX1NZU1RFTV9JTkRJQ0FUT1IgICAgIsH2vcPA2iIKICAgIFJPTEVfU1lTVEVNX0dSQVBISUMgICAgICAisde4siIKICAgIFJPTEVfU1lTVEVNX1NUQVRJQ1RFWFQgICAiwaTA+yC5rsDaIgogICAgUk9MRV9TWVNURU1fVEVYVCAgICAgICAgICK5rsDaIgogICAgUk9MRV9TWVNURU1fUFVTSEJVVFRPTiAgICK0qbijseIgufbGsCIKICAgIFJPTEVfU1lTVEVNX0NIRUNLQlVUVE9OICAiw7zFqSC59sawIgogICAgUk9MRV9TWVNURU1fUkFESU9CVVRUT04gICK287Xwv8AgufbGsCIKICAgIFJPTEVfU1lTVEVNX0NPTUJPQk9YICAgICAixN66uCAgu/PA2iIKICAgIFJPTEVfU1lTVEVNX0RST1BMSVNUICAgICAiteW37CC02b/uIgogICAgUk9MRV9TWVNURU1fUFJPR1JFU1NCQVIgICLB+MfgudkiCiAgICBST0xFX1NZU1RFTV9ESUFMICAgICAgICAgIrTZwMy+8yIKICAgIFJPTEVfU1lTVEVNX0hPVEtFWUZJRUxEICAitNzD4MWwILjwwL0iCiAgICBST0xFX1NZU1RFTV9TTElERVIgICAgICAgIr29tvPAzLT1IgogICAgUk9MRV9TWVNURU1fU1BJTkJVVFRPTiAgICK9usfJILvzwNoiCiAgICBST0xFX1NZU1RFTV9ESUFHUkFNICAgICAgIrW1x/wiCiAgICBST0xFX1NZU1RFTV9BTklNQVRJT04gICAgIr7WtM+4xcDMvMciCiAgICBST0xFX1NZU1RFTV9FUVVBVElPTiAgICAgIrz2vcQiCiAgICBST0xFX1NZU1RFTV9CVVRUT05EUk9QRE9XTiAiteW37CC02b/uILn2xrAiCiAgICBST0xFX1NZU1RFTV9CVVRUT05NRU5VICAgIrjetLogufbGsCIKICAgIFJPTEVfU1lTVEVNX0JVVFRPTkRST1BET1dOR1JJRCAisde4syC15bfsILTZv+4gtNzD3yIKICAgIFJPTEVfU1lTVEVNX1dISVRFU1BBQ0UgICAiuvMgsPiwoyIKICAgIFJPTEVfU1lTVEVNX1BBR0VUQUJMSVNUICAixuTAzMH2IMXHILjxt88iCiAgICBST0xFX1NZU1RFTV9DTE9DSyAgICAgICAgIr3DsOgiCiAgICBST0xFX1NZU1RFTV9TUExJVEJVVFRPTiAgIrOqtKmx4iC03MPfIgogICAgUk9MRV9TWVNURU1fSVBBRERSRVNTICAgICJJUCDB1rzSIgogICAgUk9MRV9TWVNURU1fT1VUTElORUJVVFRPTiAiv9yw+7yxILTcw98iCn0K