LyoKICogV2luZUNmZyByZXNvdXJjZXMKICogUG9ydHVndWVzZSBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIE1hcmNlbG8gRHVhcnRlCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKgogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ERUZBVUxUCgpJRERfR0VORVJBTENGRyBESUFMT0dFWCAwLCAwLCAyNjAsIDI1MApTVFlMRSBXU19DSElMRApGT05UIDgsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogICAgQ09NQk9CT1ggICAgICAgIElEQ19XSU5WRVIsODMsMTUzLDE1OCw1NixDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIENPTUJPQk9YICAgICAgICBJRENfRE9TVkVSLDgzLDE3MiwxNTgsNTYsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICBDT01CT0JPWCAgICAgICAgSURDX1dJTkVMT09LLDgzLDE5MCwxNTgsNTYsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICBMVEVYVCAgICAgICAgICAgIlZlcnPjbyBkbyBXaW5lOiIsSURDX1NUQVRJQywxMTksMTcsNDUsOAogICAgTFRFWFQgICAgICAgICAgICJDVlMiLElEQ19XSU5FVkVSLDE2OSwxNyw1Niw4CiAgICBMVEVYVCAgICAgICAgICAgIlZlcnPjbyBkbyBXaW5kb3dzOiIsSURDX1NUQVRJQywxNywxNTUsNTgsOAogICAgTFRFWFQgICAgICAgICAgICJBcGFy6m5jaWEgZG8gV2luZG93czoiLElEQ19TVEFUSUMsMTcsMTkzLDU4LDgKICAgIExURVhUICAgICAgICAgICAiVmVyc+NvIGRvIERPUzoiLElEQ19TVEFUSUMsMTcsMTczLDU3LDgKICAgIENPTlRST0wgICAgICAgICBJREJfV0lORSxJRENfU1RBVElDLCJTdGF0aWMiLFNTX0JJVE1BUCB8IFNTX0NFTlRFUklNQUdFIHwgCiAgICAgICAgICAgICAgICAgICAgU1NfUkVBTFNJWkVJTUFHRSB8IFdTX0JPUkRFUiwxNSwxNywxNTcsMTExLCBXU19FWF9UUkFOU1BBUkVOVAogICAgTFRFWFQgICAgICAgICAgICJodHRwOi8vd3d3LndpbmVocS5jb20vIixJRENfU1RBVElDLDExOSwzMSwxMDYsOAogICAgR1JPVVBCT1ggICAgICAgICJDb21wb3J0YW1lbnRvIHBhZHLjbyIsSURDX1NUQVRJQyw4LDExNSwyNDQsOTcKICAgIExURVhUICAgICAgICAgICAiV2luZSBwcm92aWRlbmNpYSBhIGFwbGljYef1ZXMgV2luZG93cywgYSBoYWJpbGlkYWRlIGRlIHNlIHBhcmVjZXIgYSB24XJpYXMgdmVyc/VlcyBlIGVzdGlsb3MgZGUgV2luZG93cyIsCiAgICAgICAgICAgICAgICAgICAgSURDX1NUQVRJQywxNSwxMjgsMjI3LDIwCiAgICBHUk9VUEJPWCAgICAgICAgIkluZm9ybWHn428iLElEQ19TVEFUSUMsOCw0LDI0NCwxMDYKICAgIENURVhUICAgICAgICAgICAiVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4iLAogICAgICAgICAgICAgICAgICAgIElEQ19TVEFUSUMsMTE5LDQ0LDEyNCw1OQpFTkQKCklERF9BUFBDRkcgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDI1MApTVFlMRSBXU19DSElMRCB8IFdTX0RJU0FCTEVECkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBDT05UUk9MICAgICAgICAgIkxpc3QyIixJRENfTElTVF9BUFBTLCJTeXNMaXN0VmlldzMyIixMVlNfTElTVCB8IAogICAgICAgICAgICAgICAgICAgIExWU19OT0xBQkVMV1JBUCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsMTYsMzksMjI2LDEwOAogICAgR1JPVVBCT1ggICAgICAgICJDb25maWd1cmHn9WVzIGVzcGVjaWZpY2FzIGRhIGFwbGljYefjbyIsSURDX1NUQVRJQyw4LDQsMjQ0LDE1MQogICAgTFRFWFQgICAgICAgICAgICJFc3RhcyBjb25maWd1cmHn9WVzIHBlcm1pdGVtIGEgdm9j6iBzb2JyZWVzY3JldmVyIGFzIGNvbmZpZ3VyYef1ZXMgcGFkcvVlcyBkbyBXaW5lIChjb21vIGVzcGVjaWZpY2FkbyBlbSBvdXRyYXMgZ3VpYXMgZGUgY29uZmlndXJh5+NvKSBudW1hIGJhc2UgcG9yIGFwbGljYefjby4iLAogICAgICAgICAgICAgICAgICAgIElEQ19TVEFUSUMsMTUsMTcsMjI4LDIwCkVORAoKSUREX1gxMURSVkNGRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxEIHwgV1NfRElTQUJMRUQKRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIEVESVRURVhUICAgICAgICBJRENfU1lTQ09MT1JTLDEwMCw0MSw0MCwxNCxFU19BVVRPSFNDUk9MTCB8IEVTX05VTUJFUgogICAgQ09OVFJPTCAgICAgICAgICJVc2FyIHVtYSBtYXBhIHByaXZhZG8gZGUgY29yZXMiLElEQ19QUklWQVRFTUFQLCJCdXR0b24iLAogICAgICAgICAgICAgICAgICAgIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsMTcsNjIsOTEsMTAKICAgIENPTlRST0wgICAgICAgICAiRmF2b3JlY2VyIHBlcmZlaefjbyBzb2JyZSB2ZWxvY2lkYWRlIixJRENfUEVSRkVDVEdSQVBILCJCdXR0b24iLAogICAgICAgICAgICAgICAgICAgIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsMTcsNzYsMTE3LDEwCiAgICBDT05UUk9MICAgICAgICAgIlVzYXIgZXh0ZW7n428gWEZyZWUgREdBIixJRENfWERHQSwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QLDE0MSw2Miw5NywxMAogICAgQ09OVFJPTCAgICAgICAgICJVc2FyIGV4dGVu5+NvIFhGcmVlIFNobSIsSURDX1hTSE0sIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCwxNDEsNzYsOTYsMTAKICAgIENPTlRST0wgICAgICAgICAiSGFiaWxpdGFyICdXaW5lIGRlc2t0b3AnIixJRENfTUFOQUdFRCwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QLDE3LDE0Myw4NCwxMAogICAgRURJVFRFWFQgICAgICAgIElEQ19ERVNLVE9QX1dJRFRILDY0LDE1OSw0MCwxNCxFU19BVVRPSFNDUk9MTCB8IEVTX05VTUJFUiB8IFdTX0RJU0FCTEVECiAgICBFRElUVEVYVCAgICAgICAgSURDX0RFU0tUT1BfSEVJR0hULDExNywxNTksNDAsMTQsRVNfQVVUT0hTQ1JPTEwgfCBFU19OVU1CRVIgfCBXU19ESVNBQkxFRAogICAgR1JPVVBCT1ggICAgICAgICJDb25maWd1cmHn9WVzIGRlIHJlbmRlcml6YefjbyIsSURDX1NUQVRJQyw4LDQsMjQ0LDkwCiAgICBMVEVYVCAgICAgICAgICAgIkFzIGNvbmZpZ3VyYef1ZXMgZG8gZHJpdmVyIGRlIGNvcmVzIGUgcmVuZGVyaXph5+NvIHPjbyB1c2Fkb3MgcGFyYSBvdGltaXphciBhIGZvcm1hIGVtIHF1ZSBhcyBjb3JlcyBlIGFwbGljYef1ZXMgc+NvIG1vc3RyYWRhcy4iLAogICAgICAgICAgICAgICAgICAgIElEQ19TVEFUSUMsMTUsMTcsMjI4LDIyCiAgICBMVEVYVCAgICAgICAgICAgIkFsb2NhciBjb3JlcyBkbyBzaXN0ZW1hOiIsSURDX1NUQVRJQywxNyw0Myw3Niw4CiAgICBHUk9VUEJPWCAgICAgICAgIldpbmUgRGVza3RvcCIsSURDX1NUQVRJQyw4LDk5LDI0NCw4MwogICAgTFRFWFQgICAgICAgICAgICJXaW5lIHBvZGUgc2VyIGNvbmZpZ3VyYWRvIGEgZW11bGFyIGEg4XJlYSBkZSB0cmFiYWxobyBkbyB3aW5kb3dzLCBvdSBwb2RlIHNlciBleGVjdXRhZG8gbm8gbW9kbyAiIk1hbmFnZWQiIiAocGFkcuNvKSBvbmRlIG8gZ2VyZW5jaWFkb3IvYW1iaWVudGUgZGUgamFuZWxhcyBwYWRy428gZG8gWDExIOkgcmVzcG9uc+F2ZWwgcGVsYSBtYW5pcHVsYefjbyBkYXMgamFuZWxhcy4iLAogICAgICAgICAgICAgICAgICAgIElEQ19TVEFUSUMsMTUsMTEyLDIyOCwyOAogICAgTFRFWFQgICAgICAgICAgICJUYW1hbmhvIGRhIOFyZWEgZGUgdHJhYmFsaG86IixJRENfREVTS1RPUF9TSVpFLDE3LDE2MSw0NCw4LFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIlgiLElEQ19ERVNLVE9QX0JZLDEwOCwxNjEsOCw4LFdTX0RJU0FCTEVECkVORAoKSUREX0RMTENGRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxEIHwgV1NfRElTQUJMRUQKRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIEdST1VQQk9YICAgICAgICAiU3RhdGljIixJRENfU1RBVElDLDgsNCwyNDQsMTU3CiAgICBDT05UUk9MICAgICAgICAgIkJ1aWx0aW4gKFdpbmUpIixJRENfUkFEX0JVSUxUSU4sIkJ1dHRvbiIsIEJTX0FVVE9SQURJT0JVVFRPTiB8IFdTX0dST1VQLDU5LDE0NCw1NywxMAogICAgQ09OVFJPTCAgICAgICAgICJOYXRpdmUgKFdpbmRvd3MpIixJRENfUkFEX05BVElWRSwiQnV0dG9uIiwgQlNfQVVUT1JBRElPQlVUVE9OLDEyMSwxNDQsNzIsMTAKICAgIExURVhUICAgICAgICAgICAiQmlibGlvdGVjYXMgcG9kZW0gc2VyIGVzcGVjaWZpY2FkYXMgaW5kaXZpZHVhbG1lbnRlIGEgc2VyIGJ1aWx0aW4gb3UgbmF0aXZlLiBVbWEgZW50cmFkYSBkZSBETEwgZXNwZWNpZmljYWRhIGNvbW8gIiIqIiIgZGVmaW5lIHRvZGFzIGFzIERMTHMgbuNvIGVzcGVjaWZpY2FkYXMgZXhwbGljaXRhbWVudGUuIiwKICAgICAgICAgICAgICAgICAgICBJRENfU1RBVElDLDE1LDE3LDIyOCwyNwogICAgQ09OVFJPTCAgICAgICAgICJMaXN0MyIsSURDX0xJU1RfRExMUywiU3lzTGlzdFZpZXczMiIsTFZTX0xJU1QgfCAKICAgICAgICAgICAgICAgICAgICBMVlNfU0lOR0xFU0VMIHwgTFZTX1NIT1dTRUxBTFdBWVMgfCBXU19CT1JERVIgfCAKICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QLDE1LDQ3LDIyNyw5MAogICAgTFRFWFQgICAgICAgICAgICJPcmRlbSBkZSBjYXJnYToiLElEQ19TVEFUSUMsMTYsMTQ0LDM3LDgKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKQkVHSU4KICAgIElEU19XSU5FX1ZFUlNJT04gICAgICAgICJDVlMiCiAgICBJRFNfVEFCX0dFTkVSQUwgICAgICAgICAiR2VyYWwiCiAgICBJRFNfVEFCX0RMTFMgICAgICAgICAgICAiQmlibGlvdGVjYXMiCiAgICBJRFNfVEFCX0RSSVZFUyAgICAgICAgICAiVW5pZGFkZXMiCkVORAo=