LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDQgUGlvdHIgQ2FiYW4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19QT0xJU0gsIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiJkVkeXR1aiIKSURTX0RFRkFVTFQsCQkiVXN0YXcgJmRvbXmcbG5lIgpJRFNfUFJPUEVSVElFUywJCSImVXN0YXdpZW5pYSIKSURTX01BUkssCQkiJlphem5hY3oiCklEU19DT1BZLAkJIiZLb3BpdWoiCklEU19QQVNURSwJCSImV2tsZWoiCklEU19TRUxFQ1RBTEwsCQkiWiZhem5hY3ogd3N6eXN0a28iCklEU19TQ1JPTEwsCQkiJlByemV3aWphaiIKSURTX1NFQVJDSCwJCSJTeiZ1a2FqIgpJRFNfRk5UX0RJU1BMQVksCSJLYb9keSB6bmFrIG1hIHN6ZXJva2+c5iAlbGQgaSB3eXNva2+c5iAlbGQgcHVua3TzdyIKSURTX0ZOVF9QUkVWSUVXXzEsCSJUbyBqZXN0IHRlc3QiCklEU19GTlRfUFJFVklFV18yLAkiIgpJRFNfRExHX1RJVF9ERUZBVUxULCAgICAiU2V0dXAgLSBEb215nGxuZSB1c3Rhd2llbmlhIgpJRFNfRExHX1RJVF9DVVJSRU5ULCAgICAiU2V0dXAgLSBXeWJyYW5lIHVzdGF3aWVuaWEiCklEU19ETEdfVElUX0VSUk9SLAkiQrO5ZCBrb25maWd1cmFjamkiCklEU19ETEdfRVJSX1NCV0lOU0laRSwJIldpZWxrb5zmIGJ1Zm9yYSBla3JhbnUgbXVzaSBieeYgd2nqa3N6YSBuab8gd2llbGtvnOYgYnVmb3JhIG9rbmEuIgoKSURTX0NNRF9JTlZBTElEX0VWRU5UX0lEICAgIndpbmVjb25zb2xlOiBas3kgZm9ybWF0ICdldmVudCBpZCdcbiIKSURTX0NNRF9JTlZBTElEX0JBQ0tFTkQgICAgIndpbmVjb25zb2xlOiBOaWV3s2GcY2l3YSB3YXJ0b5zmIG9wY2ppICdiYWNrZW5kJ1xuIgpJRFNfQ01EX0lOVkFMSURfT1BUSU9OICAgICAid2luZWNvbnNvbGU6IE5pZXpuYW5hIG9wY2phIG5hIGxpbmlpIHBvbGVjZfFcbiIKSURTX0NNRF9BQk9VVCAgICAgICAgICAgICAgIlVydWNoYW1pYSBwcm9ncmFtIHcga29uc29saSBXaW5lXG4iCklEU19DTURfTEFVTkNIX0ZBSUxFRCAgICAgICJ3aW5lY29uc29sZTogTmllIHVkYbNvIHNp6iB1cnVjaG9taeYgcHJvZ3JhbXUgJXMuXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUG9sZWNlbmllIGplc3Qgbmlld7NhnGNpd2UuXG4iCgpJRFNfVVNBR0VfSEVBREVSICAgICAgICAgICAiXG5Vv3ljaWU6XG4gIHdpbmVjb25zb2xlIFtvcGNqZV0gPHBvbGVjZW5pZT5cblxuT3BjamU6XG4iCklEU19VU0FHRV9CQUNLRU5EICAgICAgICAgICIgIC0tYmFja2VuZD17dXNlcnxjdXJzZXN9ICBXeWLzciAndXNlcicgc3Bvd29kdWplIHd5nHdpZXRsZW5pZSBub3dlZ28gb2tuYSwgJ2N1cnNlcydcbiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3By82J1amUgcHJ6ZXJvYmnmIGFrdHVhbG5pZSB1v3l3YW55IHRlcm1pbmFsIG5hIGtvbnNvbOogV2luZVxuIgpJRFNfVVNBR0VfQ09NTUFORCAgICAgICAgICAiICA8cG9sZWNlbmllPiAgICAgICAgICAgICAgIFByb2dyYW0gV2luZSBrdPNyeSBuYWxlv3kgdXJ1Y2hvbWnmXG4iCklEU19VU0FHRV9GT09URVIgICAgICAgICAgICJcblByenlrs2FkOlxuICB3aW5lY29uc29sZSBjbWRcblVydWNoYW1pYSB3aWVyc3ogcG9sZWNl8SBXaW5lIHcga29uc29saSBXaW5lXG5cbiIKCkVORAoKSUREX09QVElPTiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTExClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBPcGNqZSAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIldpZWxrb5zmIGt1cnNvcmEiLCAtMSwgMTAsIDExLCA2MCwgNTAsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIiZNYbNhIiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE3LCAyMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIowmcmVkbmlhIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNywgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImRHW/YSIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNywgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJLb250cm9sYSIsIC0xLCA3NSwgMTEsIDEyNSwgNTAsIEJTX0dST1VQQk9YCglMVEVYVCAiTWVudSBrb250ZWtzdG93ZSIsIC0xLCA3OSwgMjMsIDQ1LCAyMAoJQVVUT0NIRUNLQk9YICImQ29udHJvbCIsIElEQ19PUFRfQ09ORl9DVFJMLCAxMjksIDIzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9DSEVDS0JPWCAiUyZoaWZ0IiwgSURDX09QVF9DT05GX1NISUZULCAxMjksIDMzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUxURVhUICJTenlia2EgZWR5Y2phIiwgLTEsIDc4LCA0OSwgNTAsIDEwCglBVVRPQ0hFQ0tCT1ggIiZVZG9zdOpwbmlqIiwgSURDX09QVF9RVUlDS19FRElULCAxMjgsIDQ5LCA2MCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiSGlzdG9yaWEgcG9sZWNl8SIsIC0xLCAxMCwgNjMsIDE5MCwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAiJklsb5zmIHBvbGVjZfEsIGt083JlIG1vv25hIHByenl3b7Nh5joiLCAtMSwgMTQsIDczLCA2OCwgMTgKCUVESVRURVhUIElEQ19PUFRfSElTVF9TSVpFLCA4MiwgNzcsIDMxLCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfT1BUX0hJU1RfU0laRV9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglBVVRPQ0hFQ0tCT1ggIiZVc3XxIHBvd3TzcmtpIiwgSURDX09QVF9ISVNUX05PRE9VQkxFLCAxMzAsIDczLCA2MCwgMTgsIFdTX1RBQlNUT1B8QlNfTVVMVElMSU5FCn0KCklERF9GT05UIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIEN6Y2lvbmthICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglMVEVYVCAiJkN6Y2lvbmthIiwgLTEsIDUsIDUsIDI0LCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9GT05ULCA1LCAxOCwgOTAsIDQyLCBMQlNfU09SVHxXU19WU0NST0xMCglMVEVYVCAiJktvbG9yIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAiJldpZWxrb5zmIiwgLTEsIDE1OCwgNSwgNDAsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX1NJWkUsIDE1OCwgMTgsIDQwLCA2MCwgV1NfVlNDUk9MTAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9QUkVWSUVXLCAiV2luZUNvbkZvbnRQcmV2aWV3IiwgMEwsIDUsIDYwLCAxMDksIDQwCglMVEVYVCAiIiwgSURDX0ZOVF9GT05UX0lORk8sIDEyOCwgNzYsIDgwLCAxOAp9CgpJRERfQ09ORklHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIEtvbmZpZ3VyYWNqYSAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIktvbmZpZ3VyYWNqYSBidWZvcvN3IiAtMSwgMTAsIDExLCAxMDAsIDQyLCBCU19HUk9VUEJPWAoJTFRFWFQgIiZTemVyb2tvnOYgOiIsIC0xLCAxNCwgMjUsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX1dJRFRILCA2OCwgMjMsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICImV3lzb2tvnOYgOiIsIC0xLCAxNCwgMzksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX0hFSUdIVCwgNjgsIDM3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICJXaWVsa2+c5iBva25hIiwgLTEsIDEwLCA1NSwgMTAwLCA0MgoJTFRFWFQgIlMmemVyb2tvnOYgOiIsIC0xLCAxNCwgNjksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9XSURUSCwgNjgsIDY3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIlcmeXNva2+c5iA6IiwgLTEsIDE0LCA4MywgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX0hFSUdIVCwgNjgsIDgxLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiTmEgemFrb/FjemVuaWUgcHJhY3kiLCAtMSwgMTE1LCAxMSwgODAsIDQyLCBCU19HUk9VUEJPWAoJQVVUT0NIRUNLQk9YICImWmFta25paiBrb25zb2zqIiwgSURDX0NORl9DTE9TRV9FWElULCAxMTksIDI1LCA3MiwgMjAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiRWR5Y2phIiwgLTEsIDExNSwgNTUsIDgwLCA0MgoJQ09NQk9CT1ggSURDX0NORl9FRElUSU9OX01PREUsIDExOSwgNjksIDcyLCAyMCwgQ0JTX0RST1BET1dOTElTVHxXU19WU0NST0xMfFdTX1RBQlNUT1AKfQoKSUREX1NBVkVfU0VUVElOR1MgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMjAsIDIwLCAxNDAsIDYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04KQ0FQVElPTiAiUGFyYW1ldHJ5IGtvbnNvbGkiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIiIsIC0xLCAxMCwgMTAsIDEyMCwgMzEsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIlphY2hvd2FqIHVzdGF3aWVuaWEiLCBJRENfU0FWX1NBVkUsIDE0LCAxNSwgMTEwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICJVv3lqIHR5bGtvIHcgYmllv7ljZWogc2VzamkiLCBJRENfU0FWX1NFU1NJT04sIDE0LCAyNywgMTEwLCAxMCwgV1NfVEFCU1RPUAoKCVBVU0hCVVRUT04gIk9LIiwgSURPSywgMjAsIDQ1LCAzNSwgMTIKCVBVU0hCVVRUT04gIkFudWx1aiIsIElEQ0FOQ0VMLCA2NSwgNDUsIDM1LCAxMgp9Cg==