LyoKICogT2xlVmlldyAoS28ucmMpCiAqIEtvcmVhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA2IFBpb3RyIENhYmFuCiAqIENvcHlyaWdodCAyMDA2IFl1blNvbmcgSHdhbmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfTkVVVFJBTAoKSURNX01FTlUgTUVOVQp7CiAgICBQT1BVUCAixsTAzygmRikiCiAgICB7CiAgICAgICAgTUVOVUlURU0gIsbEwM+/oSC/rLDhKCZCKS4uLiIsICAgIElETV9CSU5ECiAgICAgICAgTUVOVUlURU0gIsW4wNQgtvPAzLrqt6+4riC6uLHiKCZWKS4uLiIsICAgIElETV9UWVBFTElCCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIr3DvbrF2yC8s8GkKCZTKSIsICAgIElETV9TWVNDT05GCiAgICAgICAgTUVOVUlURU0gIre5wfa9usauuK4gxu3B/bHiIL3Hx+AoJlIpIiwgICAgSURNX1JFR0VESVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAis6qwobHiKCZYKSIsICAgIElETV9FWElUCiAgICB9CiAgICBQT1BVUCAiILC0w7woJk8pIgogICAgewogICAgICAgIFBPUFVQICImQ29DcmVhdGVJbnN0YW5jZSDHw7ehsdciCiAgICAgICAgewogICAgICAgICAgICBNRU5VSVRFTSAiQ0xTQ1RYXyZJTlBST0NfU0VSVkVSIiwgICAgSURNX0ZMQUdfSU5TRVJWLENIRUNLRUQKICAgICAgICAgICAgTUVOVUlURU0gIkNMU0NUWF9JTlBST0NfJkhBTkRMRVIiLCAgICBJRE1fRkxBR19JTkhBTkRMCiAgICAgICAgICAgIE1FTlVJVEVNICJDTFNDVFhfJkxPQ0FMX1NFUlZFUiIsICAgICAgICBJRE1fRkxBR19MT0NTRVJWLENIRUNLRUQKICAgICAgICAgICAgTUVOVUlURU0gIkNMU0NUWF8mUkVNT1RFX1NFUlZFUiIsICAgIElETV9GTEFHX1JFTVNFUlYKICAgICAgICB9CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsW4wNQgwaS6uCC6uLHiKCZUKSIsICAgIElETV9UWVBFSU5GTywgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsDOvbrFz726ILi4temx4igmSSkiLCAgICBJRE1fQ1JFQVRFSU5TVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIsDOvbrFz8auIL/CKEluc3RhbmNlICZPbikguLi16bHiIiwgICAgSURNX0NSRUFURUlOU1RPTiwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIsDOvbrFz8auIMfYwabHz7HiKCZSKSIsICAgIElETV9SRUxFQVNFSU5TVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkMmTFNJRLimIMWsuLO6uLXlt84gurm75yIsICAgIElETV9DT1BZQ0xTSUQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICImSFRNTCCwtMO8IMXCsde4piDFrLizuri15bfOILq5u+ciLCBJRE1fSFRNTFRBRywgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIrq4seIoJlYpLi4uIiwgICAgSURNX1ZJRVcsIEdSQVlFRAogICAgfQogICAgUE9QVVAgIrq4seIoJlYpIgogICAgewogICAgICAgIE1FTlVJVEVNICLA/LmusKEguPC15SgmRSkiLCAgICBJRE1fRVhQRVJULENIRUNLRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAixMTG97PNxq4gutC3+SC8+7HiseIoJkgpIiwgICAgSURNX0hJRERFTiwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIrW1sbi52SgmVCkiLCAgICBJRE1fVE9PTEJBUixDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIrvzxcK52SgmUykiLCAgICBJRE1fU1RBVFVTQkFSLENIRUNLRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiu/W3ziCw7cSnKCZSKVx0RjUiLCAgICBJRE1fUkVGUkVTSAogICAgfQogICAgUE9QVVAgIrW1v/K4uygmSCkiCiAgICB7CiAgICAgICAgTUVOVUlURU0gIk9sZVZpZXcgwaS6uCgmQSkiLCAgICBJRE1fQUJPVVQKICAgIH0KfQoKSURNX1RZUEVMSUIgTUVOVQp7CiAJUE9QVVAgIsbEwM8oJkYpIgoJewoJCU1FTlVJVEVNICK02bilIMDMuKfAuLfOIMD6wOUoJlMpIiwgICAgSURNX1NBVkVBUwoJCU1FTlVJVEVNICK03bHiKCZDKSIsICBJRE1fQ0xPU0UKCX0KCVBPUFVQICK6uLHiKCZWKSIKCXsKCQlNRU5VSVRFTSAixbjA1CDBvrf5v6Egtfu28yCxuLrQKCZHKSIsIElETV9HUk9VUAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICK1tbG4udkoJlQpIiwgICAgSURNX1RPT0xCQVIKCQlNRU5VSVRFTSAiu/PFwrnZKCZTKSIsIElETV9TVEFUVVNCQVIsQ0hFQ0tFRAoJfQp9CgoKU1RSSU5HVEFCTEUKewogICAgSURTX0FQUE5BTUUgICAgICAgICAgICAiT2xlVmlldyIKICAgIElEU19BUFBUSVRMRSAgICAgICAgICAgIk9sZVZpZXciCiAgICBJRFNfUkVBRFkgICAgICAgICAgICAgICLB2LrxIgogICAgSURTX0FCT1VUICAgICAgICAgICAgICAiT2xlVmlldyAtIE9MRS9DT00gsLTDvCC65L7uIgogICAgSURTX0FCT1VUVkVSICAgICAgICAgICAiufbBryAxLjAiCiAgICBJRFNfVFlQRUxJQlRJVExFICAgICAgICJJVHlwZUxpYiC65L7uIgogICAgSURTX09QRU4gICAgICAgICAgICAgICAiv62x4iIKCiAgICBJRE1fQklORCwgICAgICAgICAgICAgICLGxMDPILqwuO3AuLfOIMbEwM8gv6yw4SIKICAgIElETV9UWVBFTElCLCAgICAgICAgICAgIsW4wNQgtvPAzLrqt6+4riDGxMDPwLsgv62w7SCzu7/rILq4seIiCiAgICBJRE1fU1lTQ09ORiwgICAgICAgICAgICK4073FIMD8w7zAxyBEQ09NvLPBpCC52bLZseIiCiAgICBJRE1fUkVHRURJVCwgICAgICAgICAgICJXaW5lILe5wfa9usauuK4gxu3B/bHiIL3Hx+AiCiAgICBJRE1fRVhJVCwgICAgICAgICAgICAgICK52bLvILDNwLsgwPrA5cfSwfYgubC+7rq4sO0gx8G3zrHXt6Ugs6Gzu7HiIgogICAgSURNX0NSRUFURUlOU1QsICAgICAgICAivLHFw7XIILC0w7zAxyDAzr26xc/GriC4uLXpseIiCiAgICBJRE1fQ1JFQVRFSU5TVE9OLCAgICAgICLB9sGktcgguNO9xcDHILyxxcO1yCCwtMO8wMcgwM69usXPxq4guLi16bHiIgogICAgSURNX1JFTEVBU0VJTlNULCAgICAgICAix/bA5yC8scXDtcggsLTDvCDAzr26xc/GriDH2MGmx8+x4iIKICAgIElETV9DT1BZQ0xTSUQsICAgICAgICAgIsf2wOcgvLHFw7XIIMfXuPHAxyBHVUlEuKYgxay4s7q4teW3ziC6ubvnIgogICAgSURNX1ZJRVcsICAgICAgICAgICAgICAivLHFw7XIIMfXuPHAxyC65L7uILq4seIiCiAgICBJRE1fRkxBR19JTlNFUlYsICAgICAgICJDb0dldENsYXNzT2JqZWN0wMwgyKPD4rXJILanIFVzZSBDTFNDVFhfSU5QUk9DX1NFUlZFUiC757/rIgogICAgSURNX0ZMQUdfSU5IQU5ETCwgICAgICAiQ29HZXRDbGFzc09iamVjdMDMIMijw+K1ySC2pyBVc2UgQ0xTQ1RYX0lOUFJPQ19IQU5ETEVSILvnv+siCiAgICBJRE1fRkxBR19MT0NTRVJWLCAgICAgICJDb0dldENsYXNzT2JqZWN0wMwgyKPD4rXJILanIENMU0NUWF9MT0NBTF9TRVJWRVIgu+e/6yIKICAgIElETV9GTEFHX1JFTVNFUlYsICAgICAgIkNvR2V0Q2xhc3NPYmplY3TAzCDIo8PitckgtqcgQ0xTQ1RYX1JFTU9URV9TRVJWRVIgILvnv+siCiAgICBJRE1fRVhQRVJULCAgICAgICAgICAgICLA/LmusKG/zSDDyrq4wNoguPC15SDA/MivZSIKICAgIElETV9ISURERU4sICAgICAgICAgICAgIsTExvezzcauILjxt88gurix4ii6uMDMwfYgvsq09bbztbUpIgogICAgSURNX1RPT0xCQVIsICAgICAgICAgICAitbWxuLnZILq4seIvvPux4rHiIgogICAgSURNX1NUQVRVU0JBUiwgICAgICAgICAiu/PFwrnZILq4seIvvPux4rHiIgogICAgSURNX1JFRlJFU0gsICAgICAgICAgICAiuPC15yC48bfPILv1t84gsO3EpyIKICAgIElETV9BQk9VVCwgICAgICAgICAgICAgIsfBt86x17elIMGkurgsILn2wa8sIMD6wNuxxyC6uL+pwdax4iIKCiAgICBJRE1fU0FWRUFTLCAgICAgICAgICAgICIuSURMIMDMs6ogLkggZmlsZbfOIMD6wOUiCiAgICBJRE1fQ0xPU0UsICAgICAgICAgICAgICLDoiC03bHiIgogICAgSURNX0dST1VQLCAgICAgICAgICAgICAixbjA1MGkuri4piDFuMDUv6Egtfu28yC60Lf5IgoKICAgIElEU19UUkVFX09DLCAgICAgICAgICAgIk9iamVjdENsYXNzZXMiCiAgICBJRFNfVFJFRV9HQkNDLCAgICAgICAgICLExMb3xc/GriC60Lf5IgogICAgSURTX1RSRUVfTzFPLCAgICAgICAgICAiT0xFIDEuMCCwtMO8IgogICAgSURTX1RSRUVfQ0xPLCAgICAgICAgICAiQ09NILbzwMy66revuK4gsLTDvCIKICAgIElEU19UUkVFX0FPLCAgICAgICAgICAgIrjwtecgsLTDvCIKICAgIElEU19UUkVFX0FJRCwgICAgICAgICAgIsfBt86x17elIElEcyIKICAgIElEU19UUkVFX1RMLCAgICAgICAgICAgIsW4wNQgtvPAzLrqt6+4riIKICAgIElEU19UTF9WRVIsICAgICAgICAgICAgInZlci4iCiAgICBJRFNfVFJFRV9JLCAgICAgICAgICAgICLAzsXNxuTAzL26IgoKICAgIElEU19UQUJfUkVHLCAgICAgICAgICAgIlJlZ2lzdHJ5IgogICAgSURTX1RBQl9JTVBMLCAgICAgICAgICAiSW1wbGVtZW50YXRpb24iCiAgICBJRFNfVEFCX0FDVElWLCAgICAgICAgICJBY3RpdmF0aW9uIgoKICAgIElEU19DR0NPRkFJTCwgICAgICAgICAgIkNvR2V0Q2xhc3NPYmplY3QgvcfG0C4iCiAgICBJRFNfRVJST1JfVU5LTiwgICAgICAgICK+y7z2IL74tMIgv6G3ryIKICAgIElEU19UUlVFLCAgICAgICAgICAgICAgIsL8IgogICAgSURTX0ZBTFNFLCAgICAgICAgICAgICAisMXB/iIKICAgIElEU19CWVRFUywgICAgICAgICAgICAgIrnZwMzGriIKCiAgICBJRFNfRVJST1JfTE9BRFRZUEVMSUIsICJMb2FkVHlwZUxpYiggJXMgKSC9x8bQICgkJXgpIgogICAgSURTX0lOSEVSSVRJTlRFUkZBQ0VTLCAiSW5oZXJpdGVkIEludGVyZmFjZXMiCn0KCkRMR19DUkVBVEVJTlNUT04gRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI1MCwgNDEKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIrTZuKUguNO9xShtYWNoaW5lKb+hIMGivNMiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgTFRFWFQgICAiuNO9xSgmTWFjaGluZSkgwMy4pzoiLCBJRElHTk9SRSwgNSwgNiwgMTkwLCA4CiAgICBFRElUVEVYVCAgICBJRENfTUFDSElORSwgNSwgMTYsIDE5MCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICLIrsDOKCZPKSIsIElET0ssIDIwMCwgNSwgNDUsIDE0CiAgICBQVVNIQlVUVE9OICAiw+u80igmQykiLCBJRENBTkNFTCwgMjAwLCAyMiwgNDUsIDE0Cn0KCkRMR19TWVNDT05GIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAxNzAsIDEwMApTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAivcO9usXbILyzwaQiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgTFRFWFQgICAivcO9usXbILzCxsMiLCBJRElHTk9SRSwgNSwgNiwgMTYwLCA4CiAgICBDSEVDS0JPWCAgICAiRENPTSDH47/rKCZFKSIsIElEQ19FTkFCTEVEQ09NLCA1LCAyMCwgMTYwLCAxMCwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgQlNfQVVUT0NIRUNLQk9YCiAgICBDSEVDS0JPWCAgICAiv/iw3SC/rLDhIMfjv+soJlIpIChXaW45Nbi4IMfYtOcpIiwgSURDX0VOQUJMRVJFTU9URSwgNSwgMzUsIDE2MCwgMTAsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IEJTX0FVVE9DSEVDS0JPWAogICAgTFRFWFQgICAiwMwgvMLGw8C6IL/Awfcgt7nB9r26xq64riCwqri4ILnZst+0z7TZLlxuV0luZcDHILy6tMm/obTCIL7Guasgv7XH4sC7IL7IILnMxKi0z7TZLiIsIElESUdOT1JFLCA1LCA1MCwgMTYwLCA0MAogICAgREVGUFVTSEJVVFRPTiAgICLIrsDOKCZPKSIsIElET0ssIDcwLCA4MCwgNDUsIDE0CiAgICBQVVNIQlVUVE9OICAiw+u80igmQykiLCBJRENBTkNFTCwgMTIwLCA4MCwgNDUsIDE0Cn0KCkRMR19ERUZBVUxUX0lWIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAyODAsIDUwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICKx4rq7IMDOxc3G5MDMvbogurix4iIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgTFRFWFQgICAiwM7FzcbkwMy9uiIsIElESUdOT1JFLCA1LCA2LCA1MCwgOAogIExURVhUICAgIiIsIElEQ19MQUJFTCwgNjAsIDYsIDE0NSwgOAogIExURVhUICAgIklJRDoiLCBJRElHTk9SRSwgNSwgMTYsIDUwLCA4CiAgTFRFWFQgICAiIiwgSURDX0lERU5USUZJRVIsIDYwLCAxNiwgMTY1LCA4CiAgREVGUFVTSEJVVFRPTiAgICK03bHiKCZDKSIsIElEQ0FOQ0VMLCAyMzAsIDYsIDQ1LCAxNAogIFBVU0hCVVRUT04gICLFuMDUIMGkurggurix4igmVikiLCBJRENfVklFV1RZUEVJTkZPLCA2LCAzMSwgNzAsIDE0LCBXU19ESVNBQkxFRAp9CgpETEdfSVBFUlNJU1RfSVYgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI4MCwgMjkKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIklQZXJzaXN0IMDOxc3G5MDMvbogurix4iIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgTFRFWFQgICAixay3ob26IMDMuKc6IiwgSURJR05PUkUsIDUsIDYsIDUwLCA4CiAgTFRFWFQgICAiIiwgSURDX0xBQkVMLCA2MCwgNiwgMTQ1LCA4CiAgTFRFWFQgICAiQ0xTSUQ6IiwgSURJR05PUkUsIDUsIDE2LCA1MCwgOAogIExURVhUICAgIiIsIElEQ19JREVOVElGSUVSLCA2MCwgMTYsIDE2NSwgOAogIERFRlBVU0hCVVRUT04gICAitN2x4igmQykiLCBJRENBTkNFTCwgMjMwLCA2LCA0NSwgMTQKfQoKRExHX0lQRVJTSVNUU1RSRUFNX0lWIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAyODAsIDY4ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJJUGVyc2lzdFN0cmVhbSDAzsXNxuTAzL26ILq4seIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogIExURVhUICAgIsWst6G9uiDAzLinOiIsIElESUdOT1JFLCA1LCA2LCA1MCwgOAogIExURVhUICAgIiIsIElEQ19MQUJFTCwgNjAsIDYsIDE0NSwgOAogIExURVhUICAgIkNMU0lEOiIsIElESUdOT1JFLCA1LCAxNiwgNTAsIDgKICBMVEVYVCAgICIiLCBJRENfSURFTlRJRklFUiwgNjAsIDE2LCAxNjUsIDgKICBERUZQVVNIQlVUVE9OICAgIrTdseIoJkMpIiwgSURDQU5DRUwsIDIzMCwgNiwgNDUsIDE0CiAgUFVTSEJVVFRPTiAgIiZJc0RpcnR5IiwgSURDX0lTRElSVFlfQlVUVE9OLCA2LCAzMSwgNTAsIDE0CiAgTFRFWFQgICAiPz8/IiwgSURDX0lTRElSVFksIDYwLCAzNCwgMTQ1LCA4CiAgUFVTSEJVVFRPTiAgIiZHZXRTaXplTWF4IiwgSURDX0dFVFNJWkVNQVhfQlVUVE9OLCA2LCA0OSwgNTAsIDE0CiAgTFRFWFQgICAiPz8/IiwgSURDX0dFVFNJWkVNQVgsIDYwLCA1MiwgMTQ1LCA4Cn0K