LyoKICogT2xlVmlldyAoS28ucmMpCiAqIEtvcmVhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA2IFBpb3RyIENhYmFuCiAqIENvcHlyaWdodCAyMDA2IFl1blNvbmcgSHdhbmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ERUZBVUxUCgpJRE1fTUVOVSBNRU5VCnsKICAgIFBPUFVQICLGxMDPKCZGKSIKICAgIHsKICAgICAgICBNRU5VSVRFTSAixsTAz7+hIL+ssOEoJkIpLi4uIiwgICAgSURNX0JJTkQKICAgICAgICBNRU5VSVRFTSAixbjA1CC288DMuuq3r7iuILq4seIoJlYpLi4uIiwgICAgSURNX1RZUEVMSUIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAivcO9usXbILyzwaQoJlMpLi4uIiwgICAgSURNX1NZU0NPTkYKICAgICAgICBNRU5VSVRFTSAit7nB9r26xq64riDG7cH9seIgvcfH4CgmUikiLCAgICBJRE1fUkVHRURJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKzqrChseIoJlgpIiwgICAgSURNX0VYSVQKICAgIH0KICAgIFBPUFVQICIgsLTDvCgmTykiCiAgICB7CiAgICAgICAgUE9QVVAgIiZDb0NyZWF0ZUluc3RhbmNlIMfDt6Gx1yIKICAgICAgICB7CiAgICAgICAgICAgIE1FTlVJVEVNICJDTFNDVFhfJklOUFJPQ19TRVJWRVIiLCAgICBJRE1fRkxBR19JTlNFUlYsQ0hFQ0tFRAogICAgICAgICAgICBNRU5VSVRFTSAiQ0xTQ1RYX0lOUFJPQ18mSEFORExFUiIsICAgIElETV9GTEFHX0lOSEFOREwKICAgICAgICAgICAgTUVOVUlURU0gIkNMU0NUWF8mTE9DQUxfU0VSVkVSIiwgICAgICAgIElETV9GTEFHX0xPQ1NFUlYsQ0hFQ0tFRAogICAgICAgICAgICBNRU5VSVRFTSAiQ0xTQ1RYXyZSRU1PVEVfU0VSVkVSIiwgICAgSURNX0ZMQUdfUkVNU0VSVgogICAgICAgIH0KICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAixbjA1CDBpLq4ILq4seIoJlQpIiwgICAgSURNX1RZUEVJTkZPLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiwM69usXPvboguLi16bHiKCZJKSIsICAgIElETV9DUkVBVEVJTlNULCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiwM69usXPxq4gv8IoSW5zdGFuY2UgJk9uKSC4uLXpseIuLi4iLCAgICBJRE1fQ1JFQVRFSU5TVE9OLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiwM69usXPxq4gx9jBpsfPseIoJlIpIiwgICAgSURNX1JFTEVBU0VJTlNULCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiQyZMU0lEuKYgxay4s7q4teW3ziC6ubvnIiwgICAgSURNX0NPUFlDTFNJRCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIiZIVE1MILC0w7wgxcKx17imIMWsuLO6uLXlt84gurm75yIsIElETV9IVE1MVEFHLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiurix4igmVikuLi4iLCAgICBJRE1fVklFVywgR1JBWUVECiAgICB9CiAgICBQT1BVUCAiurix4igmVikiCiAgICB7CiAgICAgICAgTUVOVUlURU0gIsD8ua6woSC48LXlKCZFKSIsICAgIElETV9FWFBFUlQsQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLExMb3s83GriC60Lf5ILz7seKx4igmSCkiLCAgICBJRE1fSElEREVOLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAitbWxuLnZKCZUKSIsICAgIElETV9UT09MQkFSLENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiu/PFwrnZKCZTKSIsICAgIElETV9TVEFUVVNCQVIsQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICK79bfOILDtxKcoJlIpXHRGNSIsICAgIElETV9SRUZSRVNICiAgICB9CiAgICBQT1BVUCAitbW/8ri7KCZIKSIKICAgIHsKICAgICAgICBNRU5VSVRFTSAiT2xlVmlldyDBpLq4KCZBKSIsICAgIElETV9BQk9VVAogICAgfQp9CgpJRE1fVFlQRUxJQiBNRU5VCnsKIAlQT1BVUCAixsTAzygmRikiCgl7CgkJTUVOVUlURU0gIrTZuKUgwMy4p8C4t84gwPrA5SgmUykuLi4iLCAgICBJRE1fU0FWRUFTCgkJTUVOVUlURU0gIrTdseIoJkMpIiwgIElETV9DTE9TRQoJfQoJUE9QVVAgIrq4seIoJlYpIgoJewoJCU1FTlVJVEVNICLFuMDUIMG+t/m/oSC1+7bzILG4utAoJkcpIiwgSURNX0dST1VQCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIrW1sbi52SgmVCkiLCAgICBJRE1fVE9PTEJBUgoJCU1FTlVJVEVNICK788XCudkoJlMpIiwgSURNX1NUQVRVU0JBUixDSEVDS0VECgl9Cn0KCgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfQVBQTkFNRSAgICAgICAgICAgICJPbGVWaWV3IgogICAgSURTX0FQUFRJVExFICAgICAgICAgICAiT2xlVmlldyIKICAgIElEU19SRUFEWSAgICAgICAgICAgICAgIsHYuvEiCiAgICBJRFNfQUJPVVQgICAgICAgICAgICAgICJPbGVWaWV3IC0gT0xFL0NPTSCwtMO8ILrkvu4iCiAgICBJRFNfQUJPVVRWRVIgICAgICAgICAgICK59sGvIDEuMCIKICAgIElEU19UWVBFTElCVElUTEUgICAgICAgIklUeXBlTGliILrkvu4iCiAgICBJRFNfT1BFTiAgICAgICAgICAgICAgICK/rbHiIgogICAgSURTX09QRU5fVFlQRUxJQl9GSUxURVIgIlR5cGVMaWIgxsTAzyAoKi50bGI7Ki5vbGI7Ki5kbGw7Ki5vY3g7Ki5leGUpXDAqLnRsYjsqLm9sYjsqLmRsbDsqLm9jeDsqLmV4ZVwwQWxsIEZpbGVzICgqLiopXDAqLipcMFwwIgoKICAgIElETV9CSU5ELCAgICAgICAgICAgICAgIsbEwM8gurC47cC4t84gxsTAzyC/rLDhIgogICAgSURNX1RZUEVMSUIsICAgICAgICAgICAixbjA1CC288DMuuq3r7iuIMbEwM/AuyC/rbDtILO7v+sgurix4iIKICAgIElETV9TWVNDT05GLCAgICAgICAgICAgIrjTvcUgwPzDvMDHIERDT028s8GkILnZstmx4iIKICAgIElETV9SRUdFRElULCAgICAgICAgICAgIldpbmUgt7nB9r26xq64riDG7cH9seIgvcfH4CIKICAgIElETV9FWElULCAgICAgICAgICAgICAgIrnZsu8gsM3AuyDA+sDlx9LB9iC5sL7uuriw7SDHwbfOsde3pSCzobO7seIiCiAgICBJRE1fQ1JFQVRFSU5TVCwgICAgICAgICK8scXDtcggsLTDvMDHIMDOvbrFz8auILi4temx4iIKICAgIElETV9DUkVBVEVJTlNUT04sICAgICAgIsH2waS1yCC4073FwMcgvLHFw7XIILC0w7zAxyDAzr26xc/GriC4uLXpseIiCiAgICBJRE1fUkVMRUFTRUlOU1QsICAgICAgICLH9sDnILyxxcO1yCCwtMO8IMDOvbrFz8auIMfYwabHz7HiIgogICAgSURNX0NPUFlDTFNJRCwgICAgICAgICAix/bA5yC8scXDtcggx9e48cDHIEdVSUS4piDFrLizuri15bfOILq5u+ciCiAgICBJRE1fVklFVywgICAgICAgICAgICAgICK8scXDtcggx9e48cDHILrkvu4gurix4iIKICAgIElETV9GTEFHX0lOU0VSViwgICAgICAgIkNvR2V0Q2xhc3NPYmplY3TAzCDIo8PitckgtqcgVXNlIENMU0NUWF9JTlBST0NfU0VSVkVSILvnv+siCiAgICBJRE1fRkxBR19JTkhBTkRMLCAgICAgICJDb0dldENsYXNzT2JqZWN0wMwgyKPD4rXJILanIFVzZSBDTFNDVFhfSU5QUk9DX0hBTkRMRVIgu+e/6yIKICAgIElETV9GTEFHX0xPQ1NFUlYsICAgICAgIkNvR2V0Q2xhc3NPYmplY3TAzCDIo8PitckgtqcgQ0xTQ1RYX0xPQ0FMX1NFUlZFUiC757/rIgogICAgSURNX0ZMQUdfUkVNU0VSViwgICAgICAiQ29HZXRDbGFzc09iamVjdMDMIMijw+K1ySC2pyBDTFNDVFhfUkVNT1RFX1NFUlZFUiAgu+e/6yIKICAgIElETV9FWFBFUlQsICAgICAgICAgICAgIsD8ua6wob/NIMPKurjA2iC48LXlIMD8yK9lIgogICAgSURNX0hJRERFTiwgICAgICAgICAgICAixMTG97PNxq4guPG3zyC6uLHiKLq4wMzB9iC+yrT1tvO1tSkiCiAgICBJRE1fVE9PTEJBUiwgICAgICAgICAgICK1tbG4udkgurix4i+8+7HiseIiCiAgICBJRE1fU1RBVFVTQkFSLCAgICAgICAgICK788XCudkgurix4i+8+7HiseIiCiAgICBJRE1fUkVGUkVTSCwgICAgICAgICAgICK48LXnILjxt88gu/W3ziCw7cSnIgogICAgSURNX0FCT1VULCAgICAgICAgICAgICAix8G3zrHXt6UgwaS6uCwgufbBrywgwPrA27HHILq4v6nB1rHiIgoKICAgIElETV9TQVZFQVMsICAgICAgICAgICAgIi5JREwgwMyzqiAuSCBmaWxlt84gwPrA5SIKICAgIElETV9DTE9TRSwgICAgICAgICAgICAgIsOiILTdseIiCiAgICBJRE1fR1JPVVAsICAgICAgICAgICAgICLFuMDUwaS6uLimIMW4wNS/oSC1+7bzILrQt/kiCgogICAgSURTX1RSRUVfT0MsICAgICAgICAgICAiT2JqZWN0Q2xhc3NlcyIKICAgIElEU19UUkVFX0dCQ0MsICAgICAgICAgIsTExvfFz8auILrQt/kiCiAgICBJRFNfVFJFRV9PMU8sICAgICAgICAgICJPTEUgMS4wILC0w7wiCiAgICBJRFNfVFJFRV9DTE8sICAgICAgICAgICJDT00gtvPAzLrqt6+4riCwtMO8IgogICAgSURTX1RSRUVfQU8sICAgICAgICAgICAiuPC15yCwtMO8IgogICAgSURTX1RSRUVfQUlELCAgICAgICAgICAix8G3zrHXt6UgSURzIgogICAgSURTX1RSRUVfVEwsICAgICAgICAgICAixbjA1CC288DMuuq3r7iuIgogICAgSURTX1RMX1ZFUiwgICAgICAgICAgICAidmVyLiIKICAgIElEU19UUkVFX0ksICAgICAgICAgICAgIsDOxc3G5MDMvboiCgogICAgSURTX1RBQl9SRUcsICAgICAgICAgICAiUmVnaXN0cnkiCiAgICBJRFNfVEFCX0lNUEwsICAgICAgICAgICJJbXBsZW1lbnRhdGlvbiIKICAgIElEU19UQUJfQUNUSVYsICAgICAgICAgIkFjdGl2YXRpb24iCgogICAgSURTX0NHQ09GQUlMLCAgICAgICAgICAiQ29HZXRDbGFzc09iamVjdCC9x8bQLiIKICAgIElEU19FUlJPUl9VTktOLCAgICAgICAgIr7LvPYgvvi0wiC/obevIgogICAgSURTX1RSVUUsICAgICAgICAgICAgICAiwvwiCiAgICBJRFNfRkFMU0UsICAgICAgICAgICAgICKwxcH+IgogICAgSURTX0JZVEVTLCAgICAgICAgICAgICAiudnAzMauIgoKICAgIElEU19FUlJPUl9MT0FEVFlQRUxJQiwgIkxvYWRUeXBlTGliKCAlcyApIL3HxtAgKCQleCkiCiAgICBJRFNfSU5IRVJJVElOVEVSRkFDRVMsICJJbmhlcml0ZWQgSW50ZXJmYWNlcyIKfQoKRExHX0NSRUFURUlOU1RPTiBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjUwLCA0MQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAitNm4pSC4073FKG1hY2hpbmUpv6EgwaK80yIKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBMVEVYVCAgICK4073FKCZNYWNoaW5lKSDAzLinOiIsIC0xLCA1LCA2LCAxOTAsIDgKICAgIEVESVRURVhUICAgIElEQ19NQUNISU5FLCA1LCAxNiwgMTkwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IEVTX0FVVE9IU0NST0xMCiAgICBERUZQVVNIQlVUVE9OICAgIsiuwM4oJk8pIiwgSURPSywgMjAwLCA1LCA0NSwgMTQKICAgIFBVU0hCVVRUT04gICLD67zSKCZDKSIsIElEQ0FOQ0VMLCAyMDAsIDIyLCA0NSwgMTQKfQoKRExHX1NZU0NPTkYgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDE3MCwgMTAwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICK9w726xdsgvLPBpCIKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBMVEVYVCAgICK9w726xdsgvMLGwyIsIC0xLCA1LCA2LCAxNjAsIDgKICAgIENIRUNLQk9YICAgICJEQ09NIMfjv+soJkUpIiwgSURDX0VOQUJMRURDT00sIDUsIDIwLCAxNjAsIDEwLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBCU19BVVRPQ0hFQ0tCT1gKICAgIENIRUNLQk9YICAgICK/+LDdIL+ssOEgx+O/6ygmUikgKFdpbjk1uLggx9i05ykiLCBJRENfRU5BQkxFUkVNT1RFLCA1LCAzNSwgMTYwLCAxMCwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgQlNfQVVUT0NIRUNLQk9YCiAgICBMVEVYVCAgICLAzCC8wsbDwLogv8DB9yC3ucH2vbrGrriuILCquLggudmy37TPtNkuXG5XSW5lwMcgvLq0yb+htMIgvsa5qyC/tcfiwLsgvsgguczEqLTPtNkuIiwgLTEsIDUsIDUwLCAxNjAsIDQwCiAgICBERUZQVVNIQlVUVE9OICAgIsiuwM4oJk8pIiwgSURPSywgNzAsIDgwLCA0NSwgMTQKICAgIFBVU0hCVVRUT04gICLD67zSKCZDKSIsIElEQ0FOQ0VMLCAxMjAsIDgwLCA0NSwgMTQKfQoKRExHX0RFRkFVTFRfSVYgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI4MCwgNTAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIrHiursgwM7FzcbkwMy9uiC6uLHiIgpGT05UIDksICJNUyBTaGVsbCBEbGciCnsKICBMVEVYVCAgICLAzsXNxuTAzL26IiwgLTEsIDUsIDYsIDUwLCA4CiAgTFRFWFQgICAiIiwgSURDX0xBQkVMLCA2MCwgNiwgMTQ1LCA4CiAgTFRFWFQgICAiSUlEOiIsIC0xLCA1LCAxNiwgNTAsIDgKICBMVEVYVCAgICIiLCBJRENfSURFTlRJRklFUiwgNjAsIDE2LCAxNjUsIDgKICBERUZQVVNIQlVUVE9OICAgIrTdseIoJkMpIiwgSURDQU5DRUwsIDIzMCwgNiwgNDUsIDE0CiAgUFVTSEJVVFRPTiAgIsW4wNQgwaS6uCC6uLHiKCZWKSIsIElEQ19WSUVXVFlQRUlORk8sIDYsIDMxLCA3MCwgMTQsIFdTX0RJU0FCTEVECn0KCkRMR19JUEVSU0lTVF9JViBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjgwLCAyOQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiSVBlcnNpc3QgwM7FzcbkwMy9uiC6uLHiIgpGT05UIDksICJNUyBTaGVsbCBEbGciCnsKICBMVEVYVCAgICLFrLehvbogwMy4pzoiLCAtMSwgNSwgNiwgNTAsIDgKICBMVEVYVCAgICIiLCBJRENfTEFCRUwsIDYwLCA2LCAxNDUsIDgKICBMVEVYVCAgICJDTFNJRDoiLCAtMSwgNSwgMTYsIDUwLCA4CiAgTFRFWFQgICAiIiwgSURDX0lERU5USUZJRVIsIDYwLCAxNiwgMTY1LCA4CiAgREVGUFVTSEJVVFRPTiAgICK03bHiKCZDKSIsIElEQ0FOQ0VMLCAyMzAsIDYsIDQ1LCAxNAp9CgpETEdfSVBFUlNJU1RTVFJFQU1fSVYgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI4MCwgNjgKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIklQZXJzaXN0U3RyZWFtIMDOxc3G5MDMvbogurix4iIKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgp7CiAgTFRFWFQgICAixay3ob26IMDMuKc6IiwgLTEsIDUsIDYsIDUwLCA4CiAgTFRFWFQgICAiIiwgSURDX0xBQkVMLCA2MCwgNiwgMTQ1LCA4CiAgTFRFWFQgICAiQ0xTSUQ6IiwgLTEsIDUsIDE2LCA1MCwgOAogIExURVhUICAgIiIsIElEQ19JREVOVElGSUVSLCA2MCwgMTYsIDE2NSwgOAogIERFRlBVU0hCVVRUT04gICAitN2x4igmQykiLCBJRENBTkNFTCwgMjMwLCA2LCA0NSwgMTQKICBQVVNIQlVUVE9OICAiJklzRGlydHkiLCBJRENfSVNESVJUWV9CVVRUT04sIDYsIDMxLCA1MCwgMTQKICBMVEVYVCAgICI/Pz8iLCBJRENfSVNESVJUWSwgNjAsIDM0LCAxNDUsIDgKICBQVVNIQlVUVE9OICAiJkdldFNpemVNYXgiLCBJRENfR0VUU0laRU1BWF9CVVRUT04sIDYsIDQ5LCA1MCwgMTQKICBMVEVYVCAgICI/Pz8iLCBJRENfR0VUU0laRU1BWCwgNjAsIDUyLCAxNDUsIDgKfQo=