LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA2IEFudG9uaW8gQ29kYXp6aQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0VTUEVSQU5UTywgU1VCTEFOR19ERUZBVUxUCgovKiBDeGFwZWxpdGFqIGxpdGVyb2ogZXN0YXMgZW4gTGF0aW4tMyBpc284ODk1LTMgKi8KCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCU1FTlVJVEVNICImR3JhbmRhaiBJa29ub2oiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIk1hbGdyYW5kYWogSWtvbm9qIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJTUVOVUlURU0gIiZMaXN0byIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCU1FTlVJVEVNICImRGV0YWxlIiwJCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCkVORAoKLyoKIHNoZWxsdmlldyBiYWNrZ3JvdW5kIG1lbnUKKi8KTUVOVV8wMDIgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIFBPUFVQICImVmlkbyIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiJkdyYW5kYWogSWtvbm9qIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiTWFsZ3JhbmRhaiBJa29ub2oiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0byIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJkRldGFsZSIsCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIkFyYW74dSAmSWtvbm9qbiIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiTGH9rSAmTm9tbyIsCTB4MzAJLyogY29sdW1uIDAgKi8KCSAgICBNRU5VSVRFTSAiTGH9rSAmVGlwbyIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAiTGH9rSBHcmFuZGVjbyIsCTB4MzEJLyogLi4uICovCgkgICAgTUVOVUlURU0gIkxh/a0gJkRhdG8iLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIiZBcmFu+HUgQf10b21hdGUiLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICJWaWNpZ3UgSWtvbm9qbiIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiUmVsZWd1IiwJCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiRW5tZXR1IiwJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIkVubWV0dSBraWVsIExpZ28iLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk5vdmEiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIk5vdmEgJkRvc2llcnVqbyIsCUZDSURNX1NIVklFV19ORVdGT0xERVIKCSAgICBNRU5VSVRFTSAiTm92YSAmTGlnbyIsCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkVjb2oiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKLyoKIHNoZWxsdmlldyBpdGVtIG1lbnUKKi8KTUVOVV9TSFZfRklMRSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIkUmc3Bsb3J1IiwJCUZDSURNX1NIVklFV19FWFBMT1JFCgkgIE1FTlVJVEVNICJNYWxmZXJtdSIsCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkVubWV0dSIsCQlGQ0lETV9TSFZJRVdfQ1VUCgkgIE1FTlVJVEVNICJLb3BpdSIsCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIktyZXUgTGlnb24iLAlGQ0lETV9TSFZJRVdfQ1JFQVRFTElOSwoJICBNRU5VSVRFTSAiRm9yaWd1IiwJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIkFsaW5vbXUiLAkJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkVjb2oiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKU0hCUlNGT1JGT0xERVJfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMTg4LCAxOTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBEU18zRExPT0sKQ0FQVElPTiAiRm9saXUgRG9zaWVydWpvbiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJCb25lIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJSZXppZ25pIiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogCVRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCVdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgk0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlByaSAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiQm9uZSIsIDEsIDE1MywgMTMwLCA1MCwgMTIKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTg5LCAxMCwgMTQsIDE2CiBMVEVYVCAiIiwgMTAwLCA4LCAxMCwgMTM3LCAzMwogTFRFWFQgIldpbmUgZXN0YXMgZGlzcG9uZWJsYSBkYW5rJ2FsOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIlNrcmlidSBub21vbiBkZSBwcm9ncmFtbywgZGUgZG9zaWVydWpvLCBkZSBkb2N1bWVudG8gYf0gZGUgSW50ZXJyZXRhIGZvbnRvLCBrYWogV2luZSBtYWxmZXJtb3Mg+GluLiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICJNYWxmZXJtdToiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiQm9uZSIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJSZXppZ25pIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiRm9saXUuLi4iLCAxMjI4OCwgMTcwLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCn0KCi8qCglzcGVjaWFsIGZvbGRlcnMKKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX0RFU0tUT1AJCSJEZXNrdG9wIgoJSURTX01ZQ09NUFVURVIJCSJNZWEgS29tcHV0ZXJvIgp9CgovKgoJY29udGV4dCBtZW51cwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfVklFV19MQVJHRQkJIiZHcmFuZGFqIElrb25vaiIKCUlEU19WSUVXX1NNQUxMCQkiTWFsZ3JhbmRhaiBJa29ub2oiCglJRFNfVklFV19MSVNUCQkiJkxpc3RvIgoJSURTX1ZJRVdfREVUQUlMUwkiJkRldGFsZSIKCUlEU19TRUxFQ1QJCSJFbGVrdHUiCglJRFNfT1BFTgkJIk1hbGZlcm11Igp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfQ1JFQVRFRk9MREVSX0RFTklFRCAiTWkgbmUgcG92YXMgY3JlaSBub3ZhbiBEb3NpZXJ1am9uOiBBbGlybyByaWZ1eml0YS4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIkVyYXJvIGR1bSBrcmVp+G8gZGUgZG9zaWVydWpvIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiS29uZmlybXUgZm9yaWdvbiBkZSBkb3NpZXJvIgoJSURTX0RFTEVURUZPTERFUl9DQVBUSU9OICJLb25maXJtdSBmb3JpZ29uIGRlIGRvc2llcnVqbyIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIsZ1IHZpIGVzdGFzIGNlcnRhIHByaSBmb3JpZ28gZGUgJyUxJz8iCglJRFNfREVMRVRFTVVMVElQTEVfVEVYVCAixnUgdmkgZXN0YXMgY2VydGEgcHJpIGZvcmlnbyBkZSDmaSB0aXVqICUxIGtvbXBvbmFudG9qPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIsZ1IHZpIHN1cHJlc2tyaWJhcyBsYSBkb3NpZXJvbiAlMT8iCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICJLb25maXJtdSBzdXByZXNrcmliaXRvbiBkZSBkb3NpZXJvbiIKfQoKLyoJY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3CSovClNUUklOR1RBQkxFCkJFR0lOCglJRFNfU0hWX0NPTFVNTjEJCSJEb3NpZXJvIgoJSURTX1NIVl9DT0xVTU4yCQkiR2FuZGVjbyIKCUlEU19TSFZfQ09MVU1OMwkJIlRpcG8iCglJRFNfU0hWX0NPTFVNTjQJCSJNb2RpZml0YSIKCUlEU19TSFZfQ09MVU1ONQkJIkF0cmlidXRvaiIKCUlEU19TSFZfQ09MVU1ONgkJIlNwYWNvIgoJSURTX1NIVl9DT0xVTU43CQkiRGlzcG9uZWJsYSBTcGFjbyIKCUlEU19TSFZfQ09MVU1OOAkJIk5vbW8iCglJRFNfU0hWX0NPTFVNTjkJCSJLb21lbnRhcmlvIgpFTkQKCgovKiBtZXNzYWdlIGJveCBzdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgICAgIElEU19SRVNUQVJUX1RJVExFICAgICAgICJSZXN0YXJ0aWd1IgogICAgICAgSURTX1JFU1RBUlRfUFJPTVBUICAgICAgIsZ1IHZpIHZvbGFzIHNpbXVsaSBWaW5kb3phbiByZXN0YXJ0aWdvbj8iCiAgICAgICBJRFNfU0hVVERPV05fVElUTEUgICAgICAiQWRpYf11IgogICAgICAgSURTX1NIVVRET1dOX1BST01QVCAgICAgIsZ1IHZpIHZvbGFzIGFkaWH9aSBXaW5lPyIKfQoKLyogc2hlbGwgZm9sZGVyIHBhdGggZGVmYXVsdCB2YWx1ZXMgKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX1BST0dSQU1TICAgICAgICAgICAgICAgICJTdGFydCBNZW51XFxQcm9ncmFtcyIKCUlEU19QRVJTT05BTCAgICAgICAgICAgICAgICAiTWlhaiBEb2t1bWVudG9qIgoJSURTX0ZBVk9SSVRFUyAgICAgICAgICAgICAgICJGYXZvcml0ZXMiCglJRFNfU1RBUlRVUCAgICAgICAgICAgICAgICAgIlN0YXJ0IE1lbnVcXFByb2dyYW1zXFxTdGFydFVwIgoJSURTX1JFQ0VOVCAgICAgICAgICAgICAgICAgICJSZWNlbnQiCglJRFNfU0VORFRPICAgICAgICAgICAgICAgICAgIlNlbmRUbyIKCUlEU19TVEFSVE1FTlUgICAgICAgICAgICAgICAiU3RhcnQgTWVudSIKCUlEU19NWU1VU0lDICAgICAgICAgICAgICAgICAiTWlhaiBEb2t1bWVudG9qXFxNdXppa28iCglJRFNfTVlWSURFTyAgICAgICAgICAgICAgICAgIk1pYWkgRG9rdW1lbnRvalxcVmlkZW8iCglJRFNfREVTS1RPUERJUkVDVE9SWSAgICAgICAgIkRlc2t0b3AiCglJRFNfTkVUSE9PRCAgICAgICAgICAgICAgICAgIk5ldEhvb2QiCglJRFNfVEVNUExBVEVTICAgICAgICAgICAgICAgIlRlbXBsYXRlcyIKCUlEU19BUFBEQVRBICAgICAgICAgICAgICAgICAiQXBwbGljYXRpb24gRGF0YSIKCUlEU19QUklOVEhPT0QgICAgICAgICAgICAgICAiUHJpbnRIb29kIgoJSURTX0xPQ0FMX0FQUERBVEEgICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcQXBwbGljYXRpb24gRGF0YSIKCUlEU19JTlRFUk5FVF9DQUNIRSAgICAgICAgICAiVGVtcG9yYXJ5IEludGVybmV0IEZpbGVzIgoJSURTX0NPT0tJRVMgICAgICAgICAgICAgICAgICJDb29raWVzIgoJSURTX0hJU1RPUlkgICAgICAgICAgICAgICAgICJIaXN0b3J5IgoJSURTX1BST0dSQU1fRklMRVMgICAgICAgICAgICJQcm9ncmFtIEZpbGVzIgoJSURTX01ZUElDVFVSRVMgICAgICAgICAgICAgICJNYWogRG9jdW1lbnRvalxcQmlsZG9qIgoJSURTX1BST0dSQU1fRklMRVNfQ09NTU9OICAgICJQcm9ncmFtIEZpbGVzXFxDb21tb24gRmlsZXMiCglJRFNfQ09NTU9OX0RPQ1VNRU5UUyAgICAgICAgIkRvY3VtZW50cyIKCUlEU19BRE1JTlRPT0xTICAgICAgICAgICAgICAiU3RhcnQgTWVudVxcUHJvZ3JhbXNcXEFkbWluaXN0cmF0aXZlIFRvb2xzIgoJSURTX0NPTU1PTl9NVVNJQyAgICAgICAgICAgICJEb2N1bWVudHNcXE11c2lrbyIKCUlEU19DT01NT05fUElDVFVSRVMgICAgICAgICAiRG9jdW1lbnRzXFxCaWxkb2oiCglJRFNfQ09NTU9OX1ZJREVPICAgICAgICAgICAgIkRvY3VtZW50c1xcVmlkZW8iCglJRFNfQ0RCVVJOX0FSRUEgICAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxBcHBsaWNhdGlvbiBEYXRhXFxNaWNyb3NvZnRcXENEIEJ1cm5pbmciCn0KCg==