LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDYgSm9uYXRoYW4gRXJuc3QKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiySZkaXRpb24iCklEU19ERUZBVUxULAkJIlBhciAmZOlmYXV0IgpJRFNfUFJPUEVSVElFUywJCSImUHJvcHJp6XTpcyIKSURTX01BUkssCQkiJk1hcnF1ZXIiCklEU19DT1BZLAkJIiZDb3BpZXIiCklEU19QQVNURSwJCSJDJm9sbGVyIgpJRFNfU0VMRUNUQUxMLAkJIiZT6WxlY3Rpb25uZXIgdG91dCIKSURTX1NDUk9MTCwJCSImROlmaWxlciIKSURTX1NFQVJDSCwJCSJDJmhlcmNoZXIiCklEU19GTlRfRElTUExBWSwJIkNoYXF1ZSBjYXJhY3TocmUgYSAlbGQgcG9pbnRzIGVuIGxhcmdldXIgZXQgJWxkIHBvaW50cyBlbiBoYXV0ZXVyIgpJRFNfRk5UX1BSRVZJRVdfMSwJIkNlY2kgZXN0IHVuIHRlc3QiCklEU19GTlRfUFJFVklFV18yLAki6ejg9OsiCklEU19ETEdfVElUX0RFRkFVTFQsICAgICJDb25maWd1cmF0aW9uIHBhciBk6WZhdXQiCklEU19ETEdfVElUX0NVUlJFTlQsICAgICJDb25maWd1cmF0aW9uIGNvdXJhbnRlIgpJRFNfRExHX1RJVF9FUlJPUiwJIkVycmV1ciBkZSBjb25maWd1cmF0aW9uIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsCSJMYSB0YWlsbGUgZHUgdGFtcG9uIOljcmFuIGRvaXQg6nRyZSBwbHVzIGdyYW5kZSBxdWUgY2VsbGUgZGUgbGEgZmVu6nRyZSIKCklEU19DTURfSU5WQUxJRF9FVkVOVF9JRCAgICJ3aW5lY29uc29sZSA6IEltcG9zc2libGUgZCdhbmFseXNlciBsJ+l26W5lbWVudFxuIgpJRFNfQ01EX0lOVkFMSURfQkFDS0VORCAgICAid2luZWNvbnNvbGUgOiBNb3RldXIgaW52YWxpZGVcbiIKSURTX0NNRF9JTlZBTElEX09QVElPTiAgICAgIndpbmVjb25zb2xlIDogT3B0aW9uIGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlIG5vbiByZWNvbm51ZVxuIgpJRFNfQ01EX0FCT1VUICAgICAgICAgICAgICAiROltYXJyZSB1biBwcm9ncmFtbWUgZGFucyB1bmUgY29uc29sZSBXaW5lXG4iCklEU19DTURfTEFVTkNIX0ZBSUxFRCAgICAgICJ3aW5lY29uc29sZSA6IMljaGVjIGxvcnMgZHUgZOltYXJyYWdlIGR1IHByb2dyYW1tZSAlcy5cbiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYSBjb21tYW5kZSBlc3QgaW52YWxpZGUuXG4iCgpJRFNfVVNBR0VfSEVBREVSICAgICAgICAgICAiXG5Vc2FnZSA6XG4gIHdpbmVjb25zb2xlIFtvcHRpb25zXSA8Y29tbWFuZGU+XG5cbk9wdGlvbnMgOlxuIgpJRFNfVVNBR0VfQkFDS0VORCAgICAgICAgICAiICAtLWJhY2tlbmQ9e3VzZXJ8bmN1cnNlc30gIEVuIGNob2lzaXNzYW50IKsgdXNlciC7IHVuZSBub3V2ZWxsZSBmZW7qdHJlIHNlcmEgY3Lp6WUsIKsgbmN1cnNlcyC7XG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzc2FpZXJhIGRlIGNvbnZlcnRpciBsZSB0ZXJtaW5hbCBjb3VyYW50IGVuIGNvbnNvbGUgV2luZVxuIgpJRFNfVVNBR0VfQ09NTUFORCAgICAgICAgICAiICA8Y29tbWFuZD4gICAgICAgICAgICAgICAgIExlIHByb2dyYW1tZSBXaW5lIOAgZXjpY3V0ZXIgZGFucyBsYSBjb25zb2xlXG4iCklEU19VU0FHRV9GT09URVIgICAgICAgICAgICJcbkV4ZW1wbGUgOlxuICB3aW5lY29uc29sZSBjbWRcbkTpbWFycmUgbCdpbnRlcnBy6XRldXIgZGUgY29tbWFuZGVzIGRlIFdpbmUgZGFucyB1bmUgY29uc29sZSBXaW5lXG5cbiIKCkVORAoKSUREX09QVElPTiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBPcHRpb25zICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiVGFpbGxlIGR1IGN1cnNldXIiLCAtMSwgMTAsIDExLCA2MCwgNDQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIiZQZXRpdCIsIElEQ19PUFRfQ1VSU09SX1NNQUxMLCAxNCwgMjMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImTW95ZW4iLCBJRENfT1BUX0NVUlNPUl9NRURJVU0sIDE0LCAzMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIiZHcmFuZCIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJDb250cvRsZSIsIC0xLCA3NSwgMTEsIDEyNSwgNDQsIEJTX0dST1VQQk9YCglMVEVYVCAiUG9wdXAgbWVudSIsIC0xLCA3OSwgMjMsIDUwLCAxMAoJQVVUT0NIRUNLQk9YICImQ29udHJvbCIsIElEQ19PUFRfQ09ORl9DVFJMLCAxMjksIDIzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9DSEVDS0JPWCAiUyZoaWZ0IiwgSURDX09QVF9DT05GX1NISUZULCAxMjksIDMzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUxURVhUICLJZGl0aW9uIHJhcGlkZSIsIC0xLCA3OSwgNDMsIDUwLCAxMAoJQVVUT0NIRUNLQk9YICImYWN0aXZlciIsIElEQ19PUFRfUVVJQ0tfRURJVCwgMTI5LCA0MywgNjAsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIkhpc3RvcmlxdWUgZGVzIGNvbW1hbmRlcyIsIC0xLCAxMCwgNTcsIDE5MCwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAiJlRhaWxsZSBkZSBsYSBt6W1vaXJlIHRhbXBvbiA6IiwgLTEsIDE0LCA2NywgNzgsIDE4CglFRElUVEVYVCBJRENfT1BUX0hJU1RfU0laRSwgOTIsIDY5LCAzMSwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX09QVF9ISVNUX1NJWkVfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJQVVUT0NIRUNLQk9YICImU3VwcHJpbWVyIGxlcyBkb3VibG9ucyIsIElEQ19PUFRfSElTVF9OT0RPVUJMRSwgMTMwLCA2NywgNjAsIDE4LCBXU19UQUJTVE9QfEJTX01VTFRJTElORQp9CgpJRERfRk9OVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBQb2xpY2UgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUxURVhUICImUG9saWNlIiwgLTEsIDUsIDUsIDI0LCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9GT05ULCA1LCAxOCwgOTAsIDQyLCBMQlNfU09SVHxXU19WU0NST0xMCglMVEVYVCAiJkNvdWxldXIiLCAtMSwgMTAwLCA1LCA1MCwgOAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9GRywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCAxOCwgNDgsIDE2CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0JLLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDQwLCA0OCwgMTYKCUxURVhUICImVGFpbGxlIiwgLTEsIDE1OCwgNSwgNDAsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX1NJWkUsIDE1OCwgMTgsIDQwLCA2MCwgV1NfVlNDUk9MTAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9QUkVWSUVXLCAiV2luZUNvbkZvbnRQcmV2aWV3IiwgMEwsIDUsIDYwLCAxMDksIDQwCglMVEVYVCAiIiwgSURDX0ZOVF9GT05UX0lORk8sIDEyOCwgNzYsIDgwLCAxOAp9CgpJRERfQ09ORklHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIENvbmZpZ3VyYXRpb24gIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICJUYWlsbGUgbeltb2lyZSB0YW1wb24g6WNyYW4iLCAtMSwgMTAsIDExLCAxMDAsIDQyLCBCU19HUk9VUEJPWAoJTFRFWFQgIiZMYXJnZXVyIDoiLCAtMSwgMTQsIDI1LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9XSURUSCwgNjgsIDIzLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiSGEmdXRldXIgOiIsIC0xLCAxNCwgMzksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX0hFSUdIVCwgNjgsIDM3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICJUYWlsbGUgZGUgbGEgZmVu6nRyZSIsIC0xLCAxMCwgNTUsIDEwMCwgNDIKCUxURVhUICJMYSZyZ2V1ciA6IiwgLTEsIDE0LCA2OSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX1dJRFRILCA2OCwgNjcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiSGF1JnRldXIgOiIsIC0xLCAxNCwgODMsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9IRUlHSFQsIDY4LCA4MSwgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIkZpbiBkdSBwcm9ncmFtbWUiLCAtMSwgMTE1LCAxMSwgODAsIDQyLCBCU19HUk9VUEJPWAoJQVVUT0NIRUNLQk9YICImRmVybWVyIGxhIGNvbnNvbGUiLCBJRENfQ05GX0NMT1NFX0VYSVQsIDExOSwgMjUsIDc1LCAyMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICLJZGl0aW9uIiwgLTEsIDExNSwgNTUsIDgwLCA0MgoJQ09NQk9CT1ggSURDX0NORl9FRElUSU9OX01PREUsIDExOSwgNjksIDc1LCAyMCwgQ0JTX0RST1BET1dOTElTVHxXU19WU0NST0xMfFdTX1RBQlNUT1AKfQoKSUREX1NBVkVfU0VUVElOR1MgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMjAsIDIwLCAyMDAsIDYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04KQ0FQVElPTiAiUGFyYW3odHJlcyBkZSBsYSBjb25zb2xlIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICIiLCAtMSwgMTAsIDEwLCAxODAsIDMxLCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICJTYXV2ZXIgbGVzIHBhcmFt6HRyZXMgcG91ciBsZXMgcHJvY2hhaW5lcyBzZXNzaW9ucyIsIElEQ19TQVZfU0FWRSwgMTQsIDE1LCAxNzAsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIkFwcGxpcXVlciB1bmlxdWVtZW50IOAgbGEgc2Vzc2lvbiBjb3VyYW50ZSIsIElEQ19TQVZfU0VTU0lPTiwgMTQsIDI3LCAxNzAsIDEwLCBXU19UQUJTVE9QCgoJUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA1MCwgNDUsIDM1LCAxMgoJUFVTSEJVVFRPTiAiQW5udWxlciIsIElEQ0FOQ0VMLCAxMTUsIDQ1LCAzNSwgMTIKfQo=