LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBBcmFiaWMgKFNhdWRpIEFyYWJpYSkKICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjU2KQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19BUkFCSUMsIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQQp7CiAgTE9DQUxFX0ZPTlRTSUdOQVRVUkUgTCJceDYwYWZceDgwMDBceDM4NDhceDEwMDBceDAwMDhceDAwMDBceDAwMDBceDA4MDBceDAwNDBceDAwMDBceDAwMDBceDIwMDBceDAwNDBceDAwMDBceDAwMDBceDIwMDgiCiAgTE9DQUxFX0lDQUxFTkRBUlRZUEUgIjYiCiAgTE9DQUxFX0lDRU5UVVJZICIxIgogIExPQ0FMRV9JQ09VTlRSWSAiOTY2IgogIExPQ0FMRV9JQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUNVUlJFTkNZICIyIgogIExPQ0FMRV9JREFURSAiMSIKICBMT0NBTEVfSURBWUxaRVJPICIxIgogIExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSAiMTI1NiIKICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSAiNzIwIgogIExPQ0FMRV9JREVGQVVMVENPVU5UUlkgIjk2NiIKICBMT0NBTEVfSURFRkFVTFRFQkNESUNDT0RFUEFHRSAiMjA0MjAiCiAgTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UgIjA0MDEiCiAgTE9DQUxFX0lERUZBVUxUTUFDQ09ERVBBR0UgIjEwMDA0IgogIExPQ0FMRV9JREVGQVVMVFVOSVhDT0RFUEFHRSAiMjg1OTYiCiAgTE9DQUxFX0lESUdJVFMgIjIiCiAgTE9DQUxFX0lESUdJVFNVQlNUSVRVVElPTiAiMCIKICBMT0NBTEVfSUZJUlNUREFZT0ZXRUVLICI1IgogIExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSICIwIgogIExPQ0FMRV9JSU5UTENVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lMQU5HVUFHRSAiMDQwMSIKICBMT0NBTEVfSUxEQVRFICIxIgogIExPQ0FMRV9JTFpFUk8gIjEiCiAgTE9DQUxFX0lNRUFTVVJFICIwIgogIExPQ0FMRV9JTU9OTFpFUk8gIjEiCiAgTE9DQUxFX0lORUdDVVJSICIzIgogIExPQ0FMRV9JTkVHTlVNQkVSICIzIgogIExPQ0FMRV9JTkVHU0VQQllTUEFDRSAiMCIKICBMT0NBTEVfSU5FR1NJR05QT1NOICIyIgogIExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMgIjEiCiAgTE9DQUxFX0lORVVUUkFMICIwIgogIExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUiAiNiIKICBMT0NBTEVfSVBBUEVSU0laRSAiOSIKICBMT0NBTEVfSVBPU1NFUEJZU1BBQ0UgIjEiCiAgTE9DQUxFX0lQT1NTSUdOUE9TTiAiMiIKICBMT0NBTEVfSVBPU1NZTVBSRUNFREVTICIxIgogIExPQ0FMRV9JUkVBRElOR0xBWU9VVCAiMSIKICBMT0NBTEVfSVRJTUUgIjAiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjEiCiAgTE9DQUxFX1MxMTU5ICLVIgogIExPQ0FMRV9TMjM1OSAi4yIKICBMT0NBTEVfU0FCQlJFVkNUUllOQU1FICJTQVUiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSAix+HHy+Tt5CIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICLH4cvhx8vHwSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUzICLH4cfRyNrHwSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICLH4c7j7dMiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSAix+HM49rJIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTYgIsfh08jKIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIsfhx83PIgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIkFSQSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIu3kx+3RIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiAi3cjRx+3RIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMyAi48fR0yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQgIsfI0e3hIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSAi48ft5iIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYgIu3m5O3mIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAi7ebh7eYiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4ICLH29PY0yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgItPIyuPI0SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwICLH38rmyNEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAi5Obd48jRIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIgIs/t0+PI0SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJTYXVkaSBBcmFiaWEiCiAgTE9DQUxFX1NDVVJSRU5DWSAi0S7TLv4iCiAgTE9DQUxFX1NEQVRFICIvIgogIExPQ0FMRV9TREFZTkFNRTEgIsfhx8vk7eQiCiAgTE9DQUxFX1NEQVlOQU1FMiAix+HL4cfLx8EiCiAgTE9DQUxFX1NEQVlOQU1FMyAix+HH0cjax8EiCiAgTE9DQUxFX1NEQVlOQU1FNCAix+HO4+3TIgogIExPQ0FMRV9TREFZTkFNRTUgIsfhzOPaySIKICBMT0NBTEVfU0RBWU5BTUU2ICLH4dPIyiIKICBMT0NBTEVfU0RBWU5BTUU3ICLH4cfNzyIKICBMT0NBTEVfU0RFQ0lNQUwgIi4iCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJTYXVkaSBBcmFiaWEiCiAgTE9DQUxFX1NFTkdDVVJSTkFNRSAiU2F1ZGkgUml5YWwiCiAgTE9DQUxFX1NFTkdMQU5HVUFHRSAiQXJhYmljIgogIExPQ0FMRV9TR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU0lOVExTWU1CT0wgIlNBUiIKICBMT0NBTEVfU0lTTzMxNjZDVFJZTkFNRSAiU0EiCiAgTE9DQUxFX1NJU082MzlMQU5HTkFNRSAiYXIiCiAgTE9DQUxFX1NMQU5HVUFHRSAiQXJhYmljIChTYXVkaSBBcmFiaWEpIgogIExPQ0FMRV9TTElTVCAiOyIKICBMT0NBTEVfU0xPTkdEQVRFICJkZCBNTU1NLCB5eXl5IgogIExPQ0FMRV9TTU9OREVDSU1BTFNFUCAiLiIKICBMT0NBTEVfU01PTkdST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NNT05USE5BTUUxICLt5Mft0SIKICBMT0NBTEVfU01PTlRITkFNRTIgIt3I0cft0SIKICBMT0NBTEVfU01PTlRITkFNRTMgIuPH0dMiCiAgTE9DQUxFX1NNT05USE5BTUU0ICLHyNHt4SIKICBMT0NBTEVfU01PTlRITkFNRTUgIuPH7eYiCiAgTE9DQUxFX1NNT05USE5BTUU2ICLt5uTt5iIKICBMT0NBTEVfU01PTlRITkFNRTcgIu3m4e3mIgogIExPQ0FMRV9TTU9OVEhOQU1FOCAix9vT2NMiCiAgTE9DQUxFX1NNT05USE5BTUU5ICLTyMrjyNEiCiAgTE9DQUxFX1NNT05USE5BTUUxMCAix9/K5sjRIgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgIuTm3ePI0SIKICBMT0NBTEVfU01PTlRITkFNRTEyICLP7dPjyNEiCiAgTE9DQUxFX1NNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAgIiwiCiAgTE9DQUxFX1NOQU1FICJhci1TQSIKICBMT0NBTEVfU05BVElWRUNUUllOQU1FICLH4ePj4d/JIMfh2tHI7ckgx+HT2ubP7ckiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAi0e3H4aDT2ubP7SIKICBMT0NBTEVfU05BVElWRURJR0lUUyBMIlx4MDY2MFx4MDY2MVx4MDY2Mlx4MDY2M1x4MDY2NFx4MDY2NVx4MDY2Nlx4MDY2N1x4MDY2OFx4MDY2OSIKICBMT0NBTEVfU05BVElWRURJU1BMQVlOQU1FICLH4drRyO3JICjH4ePj4d/JIMfh2tHI7ckgx+HT2ubP7ckpIgogIExPQ0FMRV9TTkFUSVZFTEFOR05BTUUgIsfh2tHI7ckiCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NPUEVOVFlQRUxBTkdVQUdFVEFHICJBUkEgIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTQ1JJUFRTICJBcmFiOyIKICBMT0NBTEVfU1NIT1JUREFURSAiZGQvTU0veXl5eSIKICBMT0NBTEVfU1NIT1JUVElNRSAiaGg6bW0gdHQiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICIsIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgImhoOm1tOnNzIHR0IgogIExPQ0FMRV9TWUVBUk1PTlRIICJNTU1NLCB5eXl5IgoKICBMR1JQSURfV0VTVEVSTl9FVVJPUEUrTEdSUElEX1JFU19CQVNFICJXZXN0ZXJuIEV1cm9wZSBhbmQgVW5pdGVkIFN0YXRlcyIKICBMR1JQSURfQ0VOVFJBTF9FVVJPUEUrTEdSUElEX1JFU19CQVNFICJDZW50cmFsIEV1cm9wZSIKICBMR1JQSURfQkFMVElDK0xHUlBJRF9SRVNfQkFTRSAiQmFsdGljIgogIExHUlBJRF9HUkVFSytMR1JQSURfUkVTX0JBU0UgIkdyZWVrIgogIExHUlBJRF9DWVJJTExJQytMR1JQSURfUkVTX0JBU0UgIkN5cmlsbGljIgogIExHUlBJRF9UVVJLSVNIK0xHUlBJRF9SRVNfQkFTRSAiVHVya2ljIgogIExHUlBJRF9KQVBBTkVTRStMR1JQSURfUkVTX0JBU0UgIkphcGFuZXNlIgogIExHUlBJRF9LT1JFQU4rTEdSUElEX1JFU19CQVNFICJLb3JlYW4iCiAgTEdSUElEX1RSQURJVElPTkFMX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICJUcmFkaXRpb25hbCBDaGluZXNlIgogIExHUlBJRF9TSU1QTElGSUVEX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICJTaW1wbGlmaWVkIENoaW5lc2UiCiAgTEdSUElEX1RIQUkrTEdSUElEX1JFU19CQVNFICJUaGFpIgogIExHUlBJRF9IRUJSRVcrTEdSUElEX1JFU19CQVNFICJIZWJyZXciCiAgTEdSUElEX0FSQUJJQytMR1JQSURfUkVTX0JBU0UgIkFyYWJpYyIgCiAgTEdSUElEX1ZJRVROQU1FU0UrTEdSUElEX1JFU19CQVNFICJWaWV0bmFtZXNlIgogIExHUlBJRF9JTkRJQytMR1JQSURfUkVTX0JBU0UgIkluZGljIgogIExHUlBJRF9HRU9SR0lBTitMR1JQSURfUkVTX0JBU0UgIkdlb3JnaWFuIgogIExHUlBJRF9BUk1FTklBTitMR1JQSURfUkVTX0JBU0UgIkFybWVuaWFuIgp9Cg==