LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA2IFZpdGFsaXkgTWFyZ29sZW4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIE1FTlVJVEVNICImwe7r/Pjo5SDn7eD36ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgogICAgTUVOVUlURU0gIibM5evq6OUg5+3g9+roIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgogICAgTUVOVUlURU0gIibR7+jx7uoiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCiAgICBNRU5VSVRFTSAiJs/u5PDu4e3uIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiIgogICAgQkVHSU4KICAgICAgICBQT1BVUCAiJs/w7vHs7vLwIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImwe7r/Pjo5SDn7eD36ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgogICAgICAgICAgICBNRU5VSVRFTSAiJszl6+ro5SDn7eD36ugiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCiAgICAgICAgICAgIE1FTlVJVEVNICIm0e/o8e7qIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwogICAgICAgICAgICBNRU5VSVRFTSAiJs/u5PDu4e3uIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAi0+/u8P/k7vfo8vwgJuft4Pfq6CIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiz+4gJujs5e3oIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwogICAgICAgICAgICBNRU5VSVRFTSAiz+4gJvLo7/MiLAkweDMyCS8qIGNvbHVtbiAyICovCiAgICAgICAgICAgIE1FTlVJVEVNICLP7iAm8ODn7OXw8yIsCTB4MzEJLyogLi4uICovCiAgICAgICAgICAgIE1FTlVJVEVNICLP7iAm5ODy5SIsCTB4MzMKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICImwOLy7uzg8uj35fHq6CIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNICLCJvvw7uLt//L8IOft4Pfq6CIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIs4m4e3u4ujy/CIsCQlGQ0lETV9TSFZJRVdfUkVGUkVTSAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImwvHy4OLo8vwiLAkJRkNJRE1fU0hWSUVXX0lOU0VSVAogICAgICAgIE1FTlVJVEVNICLC8fLg4ujy/CAm//Dr++oiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICLR7ufk4PL8IgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImz+Dv6uAiLAkJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgogICAgICAgICAgICBNRU5VSVRFTSAiJt/w6/vqIiwJCUZDSURNX1NIVklFV19ORVdMSU5LCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLR4u4m6fHy4uAiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKICAgIEVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIiIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZTZWxlY3QiCQlGQ0lETV9TSFZJRVdfT1BFTgogICAgICAgIE1FTlVJVEVNICImz/Du4u7k7ejqIiwJCUZDSURNX1NIVklFV19FWFBMT1JFCiAgICAgICAgTUVOVUlURU0gIibO8urw+/L8IiwJCUZDSURNX1NIVklFV19PUEVOCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibC+/Dl5+Dy/CIsCQlGQ0lETV9TSFZJRVdfQ1VUCiAgICAgICAgTUVOVUlURU0gIibK7u/o8O7i4PL8IiwJCUZDSURNX1NIVklFV19DT1BZCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gItHu5+Tg8vwgJv/w6/vqIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKICAgICAgICBNRU5VSVRFTSAiJtPk4Ovs8vwiLAkJRkNJRE1fU0hWSUVXX0RFTEVURQogICAgICAgIE1FTlVJVEVNICLP5fDl6Cbs5e3u4uDy/CIsCUZDSURNX1NIVklFV19SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAi0eLuJunx8uLgIiwJCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCiAgICBFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICLO4efu8CIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBERUZQVVNIQlVUVE9OICLE4CIsIDEsIDgwLCAxNzYsIDUwLCAxMiwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAizvLs5e3o8vwiLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKICAgIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogICAgQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCgkgICAgICAgIFRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCSAgICAgICAgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCSAgICAgICAgNCwgNDAsIDE4MCwgMTIwCn0KClNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxMCwgMTUyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLOICVzIgpGT05UIDEwLCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDE1MywgMTMzLCA1MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTAsIDEwLCAxNCwgMTYKIExURVhUICIiLCAxMDAsIDMwLCAxMCwgMTM3LCAxMAogTFRFWFQgIiIsIDEwMSwgMzAsIDIyLCAxMzcsIDEwCiBMVEVYVCAi0ODn8ODh7vL36OroIFdpbmU6IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiwuLl5Ojy5SDo7P8g7/Du4/Dg7Oz7LCDv4O/q6Cwg5O7q8+zl7fLgIOjr6CDw5fHz8PEgyO3y5fDt5fLgLCDoIFdpbmUg7vLq8O7l8iDo9S4iLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CiBMVEVYVCAiJs7y6vD78vw6IiwgMTIzMDUsIDcsIDM5LCAyNCwgMTAKIENPTlRST0wgIiIsIDEyMjk4LCAiQ09NQk9CT1giLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgV1NfVklTSUJMRSB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfRFJPUERPV04sIDM2LCAzNywgMTgzLCAxMDAKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgNjIsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIs7y7OXt4CIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIs7hJufu8C4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgLyogY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3ICovCiAgICBJRFNfU0hWX0NPTFVNTjEJCSLI7P8iCiAgICBJRFNfU0hWX0NPTFVNTjIJCSLQ4Ofs5fAiCiAgICBJRFNfU0hWX0NPTFVNTjMJCSLS6O8iCiAgICBJRFNfU0hWX0NPTFVNTjQJCSLI5+zl7bjtIgogICAgSURTX1NIVl9DT0xVTU41CQkiwPLw6OHz8vsiCiAgICBJRFNfU0hWX0NPTFVNTjYJCSLP7uvt++kg7uH6uOwiCiAgICBJRFNfU0hWX0NPTFVNTjcJCSLR4u7h7uTt7iIKICAgIElEU19TSFZfQ09MVU1OOAkJIsjs/yIKICAgIElEU19TSFZfQ09MVU1OOQkJIsru7Ozl7fLg8OjpIgogICAgSURTX1NIVl9DT0xVTU4xMAkJIsLr4OTl6+X2IgogICAgSURTX1NIVl9DT0xVTU4xMQkJIsPw8+/v4CIKCiAgICAvKiBzcGVjaWFsIGZvbGRlcnMgKi8KICAgIElEU19ERVNLVE9QCQkJItDg4e736Okg8fLu6yIKICAgIElEU19NWUNPTVBVVEVSCQkizO7pIOru7O/8/vLl8CIKCiAgICAvKiBjb250ZXh0IG1lbnVzICovCiAgICBJRFNfVklFV19MQVJHRQkJIibB7uv8+OjlIOft4Pfq6CIKICAgIElEU19WSUVXX1NNQUxMCQkiJszl6+ro5SDn7eD36ugiCiAgICBJRFNfVklFV19MSVNUCQkiJtHv6PHu6iIKICAgIElEU19WSUVXX0RFVEFJTFMJCSImz+7k8O7h7e4iCiAgICBJRFNfU0VMRUNUCQkJIibC++Hw4PL8IgogICAgSURTX09QRU4JCQkiJs7y6vD78vwiCgogICAgSURTX0NSRUFURUZPTERFUl9ERU5JRUQJIs3l4u7n7O7m7e4g8e7n5ODy/CDv4O/q8yAtIO3l8iDv7uvt7uzu9+jpLiIKICAgIElEU19DUkVBVEVGT0xERVJfQ0FQVElPTgkizvjo4ergIOLuIOLw5ez/IPHu5+Tg7ej/IO/g7+roIgogICAgSURTX0RFTEVURUlURU1fQ0FQVElPTgkiz+7k8uLl8Obk5e3o5SDz5ODr5e3o/yD04Onr4CIKICAgIElEU19ERUxFVEVGT0xERVJfQ0FQVElPTgkiz+7k8uLl8Obk5e3o5SDz5ODr5e3o/yDv4O/q6CIKICAgIElEU19ERUxFVEVJVEVNX1RFWFQJCSLT5ODr6PL8ICclMSc/IgogICAgSURTX0RFTEVURU1VTFRJUExFX1RFWFQJItPk4Ovo8vwg/fLoIO7h/OXq8vsgKCUxPyIKICAgIElEU19PVkVSV1JJVEVGSUxFX1RFWFQgIlRoaXMgZm9sZGVyIGFscmVhZHkgY29udGFpbnMgYSBmaWxlIGNhbGxlZCAnJTEnLlxuXG5EbyB5b3Ugd2FudCB0byByZXBsYWNlIGl0PyIKICAgIElEU19PVkVSV1JJVEVGSUxFX0NBUFRJT04JIs/u5PLi5fDm5OXt6OUg5+Ds5e37IPTg6evgIgogICAgSURTX09WRVJXUklURUZPTERFUl9URVhUICJUaGlzIGZvbGRlciBhbHJlYWR5IGNvbnRhaW5zIGEgZm9sZGVyIG5hbWVkICclMScuXG5cbiJcCgkgICAgIklmIHRoZSBmaWxlcyBpbiB0aGUgZGVzdGluYXRpb24gZm9sZGVyIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgZmlsZXMgaW4gdGhlXG4iXAoJICAgICJzZWxlY3RlZCBmb2xkZXIgdGhleSB3aWxsIGJlIHJlcGxhY2VkLiBEbyB5b3Ugc3RpbGwgd2FudCB0byBtb3ZlIG9yIGNvcHlcbiJcCgkgICAgInRoZSBmb2xkZXI/IgoKICAgIC8qIG1lc3NhZ2UgYm94IHN0cmluZ3MgKi8KICAgIElEU19SRVNUQVJUX1RJVExFCQkiz+Xw5efg4/Dz5+jy/CIKICAgIElEU19SRVNUQVJUX1BST01QVAkJIsL7IPXu8ujy5SDx6Ozz6+jw7uLg8vwg7+Xw5efg7/Px6iBXaW5kb3dzPyIKICAgIElEU19TSFVURE9XTl9USVRMRQkJIsL76uv+9+jy/CDv6PLg7ejlIgogICAgSURTX1NIVVRET1dOX1BST01QVAkJIsfg6u7t9+jy/CDw4OHu8vMg8SBXaW5lPyIKCiAgICAvKiBzaGVsbCBmb2xkZXIgcGF0aCBkZWZhdWx0IHZhbHVlcyAqLwogICAgSURTX1BST0dSQU1TICAgICAgICAgICAgICAgICLD6+Di7e7lIOzl7f5cXM/w7uPw4Ozs+yIKICAgIElEU19QRVJTT05BTCAgICAgICAgICAgICAgICAizO7oIOTu6vPs5e3y+yIKICAgIElEU19GQVZPUklURVMgICAgICAgICAgICAgICAiyOfh8ODt7e7lIgogICAgSURTX1NUQVJUVVAgICAgICAgICAgICAgICAgICLD6+Di7e7lIOzl7f5cXM/w7uPw4Ozs+1xcwOLy7ufg4/Dz5+rgIgogICAgSURTX1JFQ0VOVCAgICAgICAgICAgICAgICAgICLN5eTg4u3l5SIKICAgIElEU19TRU5EVE8gICAgICAgICAgICAgICAgICAizvLv8ODi6PL8IgogICAgSURTX1NUQVJUTUVOVSAgICAgICAgICAgICAgICLD6+Di7e7lIOzl7f4iCiAgICBJRFNfTVlNVVNJQyAgICAgICAgICAgICAgICAgIszu/yDs8+f76uAiCiAgICBJRFNfTVlWSURFTyAgICAgICAgICAgICAgICAgIszu6CD06Ov87PsiCiAgICBJRFNfREVTS1RPUERJUkVDVE9SWSAgICAgICAgItDg4e736Okg8fLu6yIKICAgIElEU19ORVRIT09EICAgICAgICAgICAgICAgICAi0eXy5eLu5SDu6vDz5uXt6OUiCiAgICBJRFNfVEVNUExBVEVTICAgICAgICAgICAgICAgItjg4evu7fsiCiAgICBJRFNfQVBQREFUQSAgICAgICAgICAgICAgICAgIkFwcGxpY2F0aW9uIERhdGEiCiAgICBJRFNfUFJJTlRIT09EICAgICAgICAgICAgICAgIs/w6O3y5fD7IgogICAgSURTX0xPQ0FMX0FQUERBVEEgICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcQXBwbGljYXRpb24gRGF0YSIKICAgIElEU19JTlRFUk5FVF9DQUNIRSAgICAgICAgICAiTG9jYWwgU2V0dGluZ3NcXFRlbXBvcmFyeSBJbnRlcm5ldCBGaWxlcyIKICAgIElEU19DT09LSUVTICAgICAgICAgICAgICAgICAiQ29va2llcyIKICAgIElEU19ISVNUT1JZICAgICAgICAgICAgICAgICAiTG9jYWwgU2V0dGluZ3NcXEhpc3RvcnkiCiAgICBJRFNfUFJPR1JBTV9GSUxFUyAgICAgICAgICAgIlByb2dyYW0gRmlsZXMiCiAgICBJRFNfTVlQSUNUVVJFUyAgICAgICAgICAgICAgIszu6CDw6PHz7eroIgogICAgSURTX1BST0dSQU1fRklMRVNfQ09NTU9OICAgICJQcm9ncmFtIEZpbGVzXFxDb21tb24gRmlsZXMiCiAgICBJRFNfQ09NTU9OX0RPQ1VNRU5UUyAgICAgICAgIs7h+ejlIOTu6vPs5e3y+yIKICAgIElEU19BRE1JTlRPT0xTICAgICAgICAgICAgICAiw+vg4u3u5SDs5e3+XFzP8O7j8ODs7PtcXEFkbWluaXN0cmF0aXZlIFRvb2xzIgogICAgSURTX0NPTU1PTl9NVVNJQyAgICAgICAgICAgICLO4fno5SDk7urz7OXt8vtcXMzu/yDs8+f76uAiCiAgICBJRFNfQ09NTU9OX1BJQ1RVUkVTICAgICAgICAgIs7h+ejlIOTu6vPs5e3y+1xczO7oIPDo8fPt6ugiCiAgICBJRFNfQ09NTU9OX1ZJREVPICAgICAgICAgICAgIs7h+ejlIOTu6vPs5e3y+1xczO7oIPTo6/zs+yIKICAgIElEU19DREJVUk5fQVJFQSAgICAgICAgICAgICAiTG9jYWwgU2V0dGluZ3NcXEFwcGxpY2F0aW9uIERhdGFcXE1pY3Jvc29mdFxcQ0QgQnVybmluZyIKCiAgICBJRFNfTkVXRk9MREVSCQkiTmV3IEZvbGRlciIKfQo=