LyoKICogT2xlVmlldyAoS28ucmMpCiAqIEtvcmVhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA2IFBpb3RyIENhYmFuCiAqIENvcHlyaWdodCAyMDA2IFl1blNvbmcgSHdhbmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfTkVVVFJBTAoKSURNX01FTlUgTUVOVQp7CiAgICBQT1BVUCAixsTAzygmRikiCiAgICB7CiAgICAgICAgTUVOVUlURU0gIsbEwM+/oSC/rLDhKCZCKS4uLiIsICAgIElETV9CSU5ECiAgICAgICAgTUVOVUlURU0gIsW4wNQgtvPAzLrqt6+4riC6uLHiKCZWKS4uLiIsICAgIElETV9UWVBFTElCCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIr3DvbrF2yC8s8GkKCZTKS4uLiIsICAgIElETV9TWVNDT05GCiAgICAgICAgTUVOVUlURU0gIre5wfa9usauuK4gxu3B/bHiIL3Hx+AoJlIpIiwgICAgSURNX1JFR0VESVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAis6qwobHiKCZYKSIsICAgIElETV9FWElUCiAgICB9CiAgICBQT1BVUCAiILC0w7woJk8pIgogICAgewogICAgICAgIFBPUFVQICImQ29DcmVhdGVJbnN0YW5jZSDHw7ehsdciCiAgICAgICAgewogICAgICAgICAgICBNRU5VSVRFTSAiQ0xTQ1RYXyZJTlBST0NfU0VSVkVSIiwgICAgSURNX0ZMQUdfSU5TRVJWLENIRUNLRUQKICAgICAgICAgICAgTUVOVUlURU0gIkNMU0NUWF9JTlBST0NfJkhBTkRMRVIiLCAgICBJRE1fRkxBR19JTkhBTkRMCiAgICAgICAgICAgIE1FTlVJVEVNICJDTFNDVFhfJkxPQ0FMX1NFUlZFUiIsICAgICAgICBJRE1fRkxBR19MT0NTRVJWLENIRUNLRUQKICAgICAgICAgICAgTUVOVUlURU0gIkNMU0NUWF8mUkVNT1RFX1NFUlZFUiIsICAgIElETV9GTEFHX1JFTVNFUlYKICAgICAgICB9CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsW4wNQgwaS6uCC6uLHiKCZUKSIsICAgIElETV9UWVBFSU5GTywgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsDOvbrFz726ILi4temx4igmSSkiLCAgICBJRE1fQ1JFQVRFSU5TVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIsDOvbrFz8auIL/CKEluc3RhbmNlICZPbikguLi16bHiLi4uIiwgICAgSURNX0NSRUFURUlOU1RPTiwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIsDOvbrFz8auIMfYwabHz7HiKCZSKSIsICAgIElETV9SRUxFQVNFSU5TVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkMmTFNJRLimIMWsuLO6uLXlt84gurm75yIsICAgIElETV9DT1BZQ0xTSUQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICImSFRNTCCwtMO8IMXCsde4piDFrLizuri15bfOILq5u+ciLCBJRE1fSFRNTFRBRywgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIrq4seIoJlYpLi4uIiwgICAgSURNX1ZJRVcsIEdSQVlFRAogICAgfQogICAgUE9QVVAgIrq4seIoJlYpIgogICAgewogICAgICAgIE1FTlVJVEVNICLA/LmusKEguPC15SgmRSkiLCAgICBJRE1fRVhQRVJULENIRUNLRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAixMTG97PNxq4gutC3+SC8+7HiseIoJkgpIiwgICAgSURNX0hJRERFTiwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIrW1sbi52SgmVCkiLCAgICBJRE1fVE9PTEJBUixDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIrvzxcK52SgmUykiLCAgICBJRE1fU1RBVFVTQkFSLENIRUNLRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiu/W3ziCw7cSnKCZSKVx0RjUiLCAgICBJRE1fUkVGUkVTSAogICAgfQogICAgUE9QVVAgIrW1v/K4uygmSCkiCiAgICB7CiAgICAgICAgTUVOVUlURU0gIk9sZVZpZXcgwaS6uCgmQSkiLCAgICBJRE1fQUJPVVQKICAgIH0KfQoKSURNX1RZUEVMSUIgTUVOVQp7CiAJUE9QVVAgIsbEwM8oJkYpIgoJewoJCU1FTlVJVEVNICK02bilIMDMuKfAuLfOIMD6wOUoJlMpLi4uIiwgICAgSURNX1NBVkVBUwoJCU1FTlVJVEVNICK03bHiKCZDKSIsICBJRE1fQ0xPU0UKCX0KCVBPUFVQICK6uLHiKCZWKSIKCXsKCQlNRU5VSVRFTSAixbjA1CDBvrf5v6Egtfu28yCxuLrQKCZHKSIsIElETV9HUk9VUAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICK1tbG4udkoJlQpIiwgICAgSURNX1RPT0xCQVIKCQlNRU5VSVRFTSAiu/PFwrnZKCZTKSIsIElETV9TVEFUVVNCQVIsQ0hFQ0tFRAoJfQp9CgoKU1RSSU5HVEFCTEUKewogICAgSURTX0FQUE5BTUUgICAgICAgICAgICAiT2xlVmlldyIKICAgIElEU19BUFBUSVRMRSAgICAgICAgICAgIk9sZVZpZXciCiAgICBJRFNfUkVBRFkgICAgICAgICAgICAgICLB2LrxIgogICAgSURTX0FCT1VUICAgICAgICAgICAgICAiT2xlVmlldyAtIE9MRS9DT00gsLTDvCC65L7uIgogICAgSURTX0FCT1VUVkVSICAgICAgICAgICAiufbBryAxLjAiCiAgICBJRFNfVFlQRUxJQlRJVExFICAgICAgICJJVHlwZUxpYiC65L7uIgogICAgSURTX09QRU4gICAgICAgICAgICAgICAiv62x4iIKICAgIElEU19PUEVOX1RZUEVMSUJfRklMVEVSICJUeXBlTGliIEZpbGVzICgqLnRsYjsqLm9sYjsqLmRsbDsqLm9jeDsqLmV4ZSlcMCoudGxiOyoub2xiOyouZGxsOyoub2N4OyouZXhlXDBBbGwgRmlsZXMgKCouKilcMCouKlwwXDAiCgogICAgSURNX0JJTkQsICAgICAgICAgICAgICAixsTAzyC6sLjtwLi3ziDGxMDPIL+ssOEiCiAgICBJRE1fVFlQRUxJQiwgICAgICAgICAgICLFuMDUILbzwMy66revuK4gxsTAz8C7IL+tsO0gs7u/6yC6uLHiIgogICAgSURNX1NZU0NPTkYsICAgICAgICAgICAiuNO9xSDA/MO8wMcgRENPTbyzwaQgudmy2bHiIgogICAgSURNX1JFR0VESVQsICAgICAgICAgICAiV2luZSC3ucH2vbrGrriuIMbtwf2x4iC9x8fgIgogICAgSURNX0VYSVQsICAgICAgICAgICAgICAiudmy7yCwzcC7IMD6wOXH0sH2ILmwvu66uLDtIMfBt86x17elILOhs7ux4iIKICAgIElETV9DUkVBVEVJTlNULCAgICAgICAgIryxxcO1yCCwtMO8wMcgwM69usXPxq4guLi16bHiIgogICAgSURNX0NSRUFURUlOU1RPTiwgICAgICAiwfbBpLXIILjTvcXAxyC8scXDtcggsLTDvMDHIMDOvbrFz8auILi4temx4iIKICAgIElETV9SRUxFQVNFSU5TVCwgICAgICAgIsf2wOcgvLHFw7XIILC0w7wgwM69usXPxq4gx9jBpsfPseIiCiAgICBJRE1fQ09QWUNMU0lELCAgICAgICAgICLH9sDnILyxxcO1yCDH17jxwMcgR1VJRLimIMWsuLO6uLXlt84gurm75yIKICAgIElETV9WSUVXLCAgICAgICAgICAgICAgIryxxcO1yCDH17jxwMcguuS+7iC6uLHiIgogICAgSURNX0ZMQUdfSU5TRVJWLCAgICAgICAiQ29HZXRDbGFzc09iamVjdMDMIMijw+K1ySC2pyBVc2UgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIgu+e/6yIKICAgIElETV9GTEFHX0lOSEFOREwsICAgICAgIkNvR2V0Q2xhc3NPYmplY3TAzCDIo8PitckgtqcgVXNlIENMU0NUWF9JTlBST0NfSEFORExFUiC757/rIgogICAgSURNX0ZMQUdfTE9DU0VSViwgICAgICAiQ29HZXRDbGFzc09iamVjdMDMIMijw+K1ySC2pyBDTFNDVFhfTE9DQUxfU0VSVkVSILvnv+siCiAgICBJRE1fRkxBR19SRU1TRVJWLCAgICAgICJDb0dldENsYXNzT2JqZWN0wMwgyKPD4rXJILanIENMU0NUWF9SRU1PVEVfU0VSVkVSICC757/rIgogICAgSURNX0VYUEVSVCwgICAgICAgICAgICAiwPy5rrChv80gw8q6uMDaILjwteUgwPzIr2UiCiAgICBJRE1fSElEREVOLCAgICAgICAgICAgICLExMb3s83GriC48bfPILq4seIourjAzMH2IL7KtPW287W1KSIKICAgIElETV9UT09MQkFSLCAgICAgICAgICAgIrW1sbi52SC6uLHiL7z7seKx4iIKICAgIElETV9TVEFUVVNCQVIsICAgICAgICAgIrvzxcK52SC6uLHiL7z7seKx4iIKICAgIElETV9SRUZSRVNILCAgICAgICAgICAgIrjwtecguPG3zyC79bfOILDtxKciCiAgICBJRE1fQUJPVVQsICAgICAgICAgICAgICLHwbfOsde3pSDBpLq4LCC59sGvLCDA+sDbsccguri/qcHWseIiCgogICAgSURNX1NBVkVBUywgICAgICAgICAgICAiLklETCDAzLOqIC5IIGZpbGW3ziDA+sDlIgogICAgSURNX0NMT1NFLCAgICAgICAgICAgICAiw6IgtN2x4iIKICAgIElETV9HUk9VUCwgICAgICAgICAgICAgIsW4wNTBpLq4uKYgxbjA1L+hILX7tvMgutC3+SIKCiAgICBJRFNfVFJFRV9PQywgICAgICAgICAgICJPYmplY3RDbGFzc2VzIgogICAgSURTX1RSRUVfR0JDQywgICAgICAgICAixMTG98XPxq4gutC3+SIKICAgIElEU19UUkVFX08xTywgICAgICAgICAgIk9MRSAxLjAgsLTDvCIKICAgIElEU19UUkVFX0NMTywgICAgICAgICAgIkNPTSC288DMuuq3r7iuILC0w7wiCiAgICBJRFNfVFJFRV9BTywgICAgICAgICAgICK48LXnILC0w7wiCiAgICBJRFNfVFJFRV9BSUQsICAgICAgICAgICLHwbfOsde3pSBJRHMiCiAgICBJRFNfVFJFRV9UTCwgICAgICAgICAgICLFuMDUILbzwMy66revuK4iCiAgICBJRFNfVExfVkVSLCAgICAgICAgICAgICJ2ZXIuIgogICAgSURTX1RSRUVfSSwgICAgICAgICAgICAiwM7FzcbkwMy9uiIKCiAgICBJRFNfVEFCX1JFRywgICAgICAgICAgICJSZWdpc3RyeSIKICAgIElEU19UQUJfSU1QTCwgICAgICAgICAgIkltcGxlbWVudGF0aW9uIgogICAgSURTX1RBQl9BQ1RJViwgICAgICAgICAiQWN0aXZhdGlvbiIKCiAgICBJRFNfQ0dDT0ZBSUwsICAgICAgICAgICJDb0dldENsYXNzT2JqZWN0IL3HxtAuIgogICAgSURTX0VSUk9SX1VOS04sICAgICAgICAivsu89iC++LTCIL+ht68iCiAgICBJRFNfVFJVRSwgICAgICAgICAgICAgICLC/CIKICAgIElEU19GQUxTRSwgICAgICAgICAgICAgIrDFwf4iCiAgICBJRFNfQllURVMsICAgICAgICAgICAgICK52cDMxq4iCgogICAgSURTX0VSUk9SX0xPQURUWVBFTElCLCAiTG9hZFR5cGVMaWIoICVzICkgvcfG0CAoJCV4KSIKICAgIElEU19JTkhFUklUSU5URVJGQUNFUywgIkluaGVyaXRlZCBJbnRlcmZhY2VzIgp9CgpETEdfQ1JFQVRFSU5TVE9OIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAyNTAsIDQxClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICK02bilILjTvcUobWFjaGluZSm/oSDBorzTIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIExURVhUICAgIrjTvcUoJk1hY2hpbmUpIMDMuKc6IiwgSURJR05PUkUsIDUsIDYsIDE5MCwgOAogICAgRURJVFRFWFQgICAgSURDX01BQ0hJTkUsIDUsIDE2LCAxOTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiyK7AzigmTykiLCBJRE9LLCAyMDAsIDUsIDQ1LCAxNAogICAgUFVTSEJVVFRPTiAgIsPrvNIoJkMpIiwgSURDQU5DRUwsIDIwMCwgMjIsIDQ1LCAxNAp9CgpETEdfU1lTQ09ORiBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMTcwLCAxMDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIr3DvbrF2yC8s8GkIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIExURVhUICAgIr3DvbrF2yC8wsbDIiwgSURJR05PUkUsIDUsIDYsIDE2MCwgOAogICAgQ0hFQ0tCT1ggICAgIkRDT00gx+O/6ygmRSkiLCBJRENfRU5BQkxFRENPTSwgNSwgMjAsIDE2MCwgMTAsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IEJTX0FVVE9DSEVDS0JPWAogICAgQ0hFQ0tCT1ggICAgIr/4sN0gv6yw4SDH47/rKCZSKSAoV2luOTW4uCDH2LTnKSIsIElEQ19FTkFCTEVSRU1PVEUsIDUsIDM1LCAxNjAsIDEwLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBCU19BVVRPQ0hFQ0tCT1gKICAgIExURVhUICAgIsDMILzCxsPAuiC/wMH3ILe5wfa9usauuK4gsKq4uCC52bLftM+02S5cbldJbmXAxyC8urTJv6G0wiC+xrmrIL+1x+LAuyC+yCC5zMSotM+02S4iLCBJRElHTk9SRSwgNSwgNTAsIDE2MCwgNDAKICAgIERFRlBVU0hCVVRUT04gICAiyK7AzigmTykiLCBJRE9LLCA3MCwgODAsIDQ1LCAxNAogICAgUFVTSEJVVFRPTiAgIsPrvNIoJkMpIiwgSURDQU5DRUwsIDEyMCwgODAsIDQ1LCAxNAp9CgpETEdfREVGQVVMVF9JViBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjgwLCA1MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiseK6uyDAzsXNxuTAzL26ILq4seIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogIExURVhUICAgIsDOxc3G5MDMvboiLCBJRElHTk9SRSwgNSwgNiwgNTAsIDgKICBMVEVYVCAgICIiLCBJRENfTEFCRUwsIDYwLCA2LCAxNDUsIDgKICBMVEVYVCAgICJJSUQ6IiwgSURJR05PUkUsIDUsIDE2LCA1MCwgOAogIExURVhUICAgIiIsIElEQ19JREVOVElGSUVSLCA2MCwgMTYsIDE2NSwgOAogIERFRlBVU0hCVVRUT04gICAitN2x4igmQykiLCBJRENBTkNFTCwgMjMwLCA2LCA0NSwgMTQKICBQVVNIQlVUVE9OICAixbjA1CDBpLq4ILq4seIoJlYpIiwgSURDX1ZJRVdUWVBFSU5GTywgNiwgMzEsIDcwLCAxNCwgV1NfRElTQUJMRUQKfQoKRExHX0lQRVJTSVNUX0lWIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAyODAsIDI5ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJJUGVyc2lzdCDAzsXNxuTAzL26ILq4seIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogIExURVhUICAgIsWst6G9uiDAzLinOiIsIElESUdOT1JFLCA1LCA2LCA1MCwgOAogIExURVhUICAgIiIsIElEQ19MQUJFTCwgNjAsIDYsIDE0NSwgOAogIExURVhUICAgIkNMU0lEOiIsIElESUdOT1JFLCA1LCAxNiwgNTAsIDgKICBMVEVYVCAgICIiLCBJRENfSURFTlRJRklFUiwgNjAsIDE2LCAxNjUsIDgKICBERUZQVVNIQlVUVE9OICAgIrTdseIoJkMpIiwgSURDQU5DRUwsIDIzMCwgNiwgNDUsIDE0Cn0KCkRMR19JUEVSU0lTVFNUUkVBTV9JViBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjgwLCA2OApTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiSVBlcnNpc3RTdHJlYW0gwM7FzcbkwMy9uiC6uLHiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICBMVEVYVCAgICLFrLehvbogwMy4pzoiLCBJRElHTk9SRSwgNSwgNiwgNTAsIDgKICBMVEVYVCAgICIiLCBJRENfTEFCRUwsIDYwLCA2LCAxNDUsIDgKICBMVEVYVCAgICJDTFNJRDoiLCBJRElHTk9SRSwgNSwgMTYsIDUwLCA4CiAgTFRFWFQgICAiIiwgSURDX0lERU5USUZJRVIsIDYwLCAxNiwgMTY1LCA4CiAgREVGUFVTSEJVVFRPTiAgICK03bHiKCZDKSIsIElEQ0FOQ0VMLCAyMzAsIDYsIDQ1LCAxNAogIFBVU0hCVVRUT04gICImSXNEaXJ0eSIsIElEQ19JU0RJUlRZX0JVVFRPTiwgNiwgMzEsIDUwLCAxNAogIExURVhUICAgIj8/PyIsIElEQ19JU0RJUlRZLCA2MCwgMzQsIDE0NSwgOAogIFBVU0hCVVRUT04gICImR2V0U2l6ZU1heCIsIElEQ19HRVRTSVpFTUFYX0JVVFRPTiwgNiwgNDksIDUwLCAxNAogIExURVhUICAgIj8/PyIsIElEQ19HRVRTSVpFTUFYLCA2MCwgNTIsIDE0NSwgOAp9Cg==