LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBTY290cyBHYWVsaWMKICoKICogQ29weXJpZ2h0IDE5OTggTWFyY2VsIEJhdXIKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19HQUVMSUMsIFNVQkxBTkdfR0FFTElDX1NDT1RUSVNICnsKICBMT0NBTEVfRk9OVFNJR05BVFVSRSBMIlx4MDAyZlx4ODAwMFx4MzgwOFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMVx4MDAwMFx4MDAwMFx4NDAwMFx4MDFmZlx4MDAzZlx4ODAwMFx4ZmZmZiIKICBMT0NBTEVfSUNBTEVOREFSVFlQRSAiMSIKICBMT0NBTEVfSUNFTlRVUlkgIjAiCiAgTE9DQUxFX0lDT1VOVFJZICI0NCIKICBMT0NBTEVfSUNVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lDVVJSRU5DWSAiMCIKICBMT0NBTEVfSURBVEUgIjEiCiAgTE9DQUxFX0lEQVlMWkVSTyAiMSIKICBMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UgIjEyNTIiCiAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgIjg1MCIKICBMT0NBTEVfSURFRkFVTFRDT1VOVFJZICI0NCIKICBMT0NBTEVfSURFRkFVTFRFQkNESUNDT0RFUEFHRSAiMjAyODUiCiAgTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UgIjA0M2MiCiAgTE9DQUxFX0lERUZBVUxUTUFDQ09ERVBBR0UgIjEwMDAwIgogIExPQ0FMRV9JREVGQVVMVFVOSVhDT0RFUEFHRSAiMjg2MDUiCiAgTE9DQUxFX0lESUdJVFMgIjIiCiAgTE9DQUxFX0lESUdJVFNVQlNUSVRVVElPTiAiMSIKICBMT0NBTEVfSUZJUlNUREFZT0ZXRUVLICIwIgogIExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSICIwIgogIExPQ0FMRV9JSU5UTENVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lMQU5HVUFHRSAiMDgzYyIKICBMT0NBTEVfSUxEQVRFICIxIgogIExPQ0FMRV9JTFpFUk8gIjEiCiAgTE9DQUxFX0lNRUFTVVJFICIwIgogIExPQ0FMRV9JTU9OTFpFUk8gIjEiCiAgTE9DQUxFX0lORUdDVVJSICIxIgogIExPQ0FMRV9JTkVHTlVNQkVSICIxIgogIExPQ0FMRV9JTkVHU0VQQllTUEFDRSAiMCIKICBMT0NBTEVfSU5FR1NJR05QT1NOICIzIgogIExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMgIjEiCiAgTE9DQUxFX0lORVVUUkFMICIwIgogIExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUiAiMCIKICBMT0NBTEVfSVBBUEVSU0laRSAiOSIKICBMT0NBTEVfSVBPU1NFUEJZU1BBQ0UgIjAiCiAgTE9DQUxFX0lQT1NTSUdOUE9TTiAiMyIKICBMT0NBTEVfSVBPU1NZTVBSRUNFREVTICIxIgogIExPQ0FMRV9JUkVBRElOR0xBWU9VVCAiMCIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjEiCiAgTE9DQUxFX1MxMTU5ICJBTSIKICBMT0NBTEVfUzIzNTkgIlBNIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIkdCUiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICJEaWx1IgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTIgIkRpbeAiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMyAiRGljYSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICJEaWFyIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTUgIkRpaGEiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiAiRGlzYSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICJEaWTyIgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIkdESCIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIkZhbyIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIgIkdlYSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMgIk3gciIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQgIkdpYiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUgIk1o4CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYgIk9nTSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcgIkx1YyIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggIkz5biIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgIlN1bCIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwICJEYW0iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAiU2FtIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIgIkT5YiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJCcmVhdGFpbm4gTWjyciIKICBMT0NBTEVfU0NVUlJFTkNZICKjIgogIExPQ0FMRV9TREFURSAiLyIKICBMT0NBTEVfU0RBWU5BTUUxICJEaWx1YWluIgogIExPQ0FMRV9TREFZTkFNRTIgIkRpbeBpcnQiCiAgTE9DQUxFX1NEQVlOQU1FMyAiRGljaWFkYWluIgogIExPQ0FMRV9TREFZTkFNRTQgIkRpYXJkYW9pbiIKICBMT0NBTEVfU0RBWU5BTUU1ICJEaWhhb2luZSIKICBMT0NBTEVfU0RBWU5BTUU2ICJEaXNhdGhhaXJuZSIKICBMT0NBTEVfU0RBWU5BTUU3ICJEaWTybWhuYWljaCIKICBMT0NBTEVfU0RFQ0lNQUwgIi4iCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJVbml0ZWQgS2luZ2RvbSIKICBMT0NBTEVfU0VOR0NVUlJOQU1FICJVSyBQb3VuZCBTdGVybGluZyIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJTY290cyBHYWVsaWMiCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiR0JQIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJHQiIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJnZCIKICBMT0NBTEVfU0xBTkdVQUdFICJHYWlkaGxpZyAoQnJlYXRhaW5uIE1o8nIpIgogIExPQ0FMRV9TTElTVCAiLCIKICBMT0NBTEVfU0xPTkdEQVRFICJkZCBNTU1NIHl5eXkiCiAgTE9DQUxFX1NNT05ERUNJTUFMU0VQICIuIgogIExPQ0FMRV9TTU9OR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU01PTlRITkFNRTEgIkFtIEZhb2lsdGVhY2giCiAgTE9DQUxFX1NNT05USE5BTUUyICJBbiBHZWFyYW5uIgogIExPQ0FMRV9TTU9OVEhOQU1FMyAiQW0gTeBydCIKICBMT0NBTEVfU01PTlRITkFNRTQgIkFuIEdpYmxlYW4iCiAgTE9DQUxFX1NNT05USE5BTUU1ICJBJ01o4GlnaCIKICBMT0NBTEVfU01PTlRITkFNRTYgIkFuIHQtT2cgTWjsb3MiCiAgTE9DQUxFX1NNT05USE5BTUU3ICJBbiB0LWx1Y2hhciIKICBMT0NBTEVfU01PTlRITkFNRTggIkFuIEz5bmFzZGFsIgogIExPQ0FMRV9TTU9OVEhOQU1FOSAiQW4gdC1TdWx0YWluIgogIExPQ0FMRV9TTU9OVEhOQU1FMTAgIkFuIERhbWhhaXIiCiAgTE9DQUxFX1NNT05USE5BTUUxMSAiQW4gdC1TYW1oYWluIgogIExPQ0FMRV9TTU9OVEhOQU1FMTIgIkFuIET5YmhsYWNoZCIKICBMT0NBTEVfU01PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NNT05USE9VU0FORFNFUCAiLCIKICBMT0NBTEVfU05BTUUgImdkLUdCIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgIkJyZWF0YWlubiBNaPJyIgogIExPQ0FMRV9TTkFUSVZFQ1VSUk5BTUUgIlB1dW5kIFNhc2FubmFjaCIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRURJU1BMQVlOQU1FICJHYWlkaGxpZyAoQnJlYXRhaW5uIE1o8nIpIgogIExPQ0FMRV9TTkFUSVZFTEFOR05BTUUgIkdhaWRobGlnIgogIExPQ0FMRV9TTkVHQVRJVkVTSUdOICItIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTQ1JJUFRTICJMYXRuOyIKICBMT0NBTEVfU1NIT1JUREFURSAiZGQvTU0veXkiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICIsIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgIkhIOm1tOnNzIgogIExPQ0FMRV9TWUVBUk1PTlRIICJNTU1NIHl5eXkiCgogIExHUlBJRF9XRVNURVJOX0VVUk9QRStMR1JQSURfUkVTX0JBU0UgIldlc3Rlcm4gRXVyb3BlIGFuZCBVbml0ZWQgU3RhdGVzIgogIExHUlBJRF9DRU5UUkFMX0VVUk9QRStMR1JQSURfUkVTX0JBU0UgIkNlbnRyYWwgRXVyb3BlIgogIExHUlBJRF9CQUxUSUMrTEdSUElEX1JFU19CQVNFICJCYWx0aWMiCiAgTEdSUElEX0dSRUVLK0xHUlBJRF9SRVNfQkFTRSAiR3JlZWsiCiAgTEdSUElEX0NZUklMTElDK0xHUlBJRF9SRVNfQkFTRSAiQ3lyaWxsaWMiCiAgTEdSUElEX1RVUktJU0grTEdSUElEX1JFU19CQVNFICJUdXJraWMiCiAgTEdSUElEX0pBUEFORVNFK0xHUlBJRF9SRVNfQkFTRSAiSmFwYW5lc2UiCiAgTEdSUElEX0tPUkVBTitMR1JQSURfUkVTX0JBU0UgIktvcmVhbiIKICBMR1JQSURfVFJBRElUSU9OQUxfQ0hJTkVTRStMR1JQSURfUkVTX0JBU0UgIlRyYWRpdGlvbmFsIENoaW5lc2UiCiAgTEdSUElEX1NJTVBMSUZJRURfQ0hJTkVTRStMR1JQSURfUkVTX0JBU0UgIlNpbXBsaWZpZWQgQ2hpbmVzZSIKICBMR1JQSURfVEhBSStMR1JQSURfUkVTX0JBU0UgIlRoYWkiCiAgTEdSUElEX0hFQlJFVytMR1JQSURfUkVTX0JBU0UgIkhlYnJldyIKICBMR1JQSURfQVJBQklDK0xHUlBJRF9SRVNfQkFTRSAiQXJhYmljIiAKICBMR1JQSURfVklFVE5BTUVTRStMR1JQSURfUkVTX0JBU0UgIlZpZXRuYW1lc2UiCiAgTEdSUElEX0lORElDK0xHUlBJRF9SRVNfQkFTRSAiSW5kaWMiCiAgTEdSUElEX0dFT1JHSUFOK0xHUlBJRF9SRVNfQkFTRSAiR2VvcmdpYW4iCiAgTEdSUElEX0FSTUVOSUFOK0xHUlBJRF9SRVNfQkFTRSAiQXJtZW5pYW4iCn0K