LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBNb25nb2xpYW4gKEN5cmlsbGljKQogKgogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQgZm9yIENvZGVXZWF2ZXJzCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCiNwcmFnbWEgY29kZV9wYWdlKDEyNTEpCgpTVFJJTkdUQUJMRSBMQU5HVUFHRSBMQU5HX01PTkdPTElBTiwgU1VCTEFOR19ERUZBVUxUCnsKICBMT0NBTEVfRk9OVFNJR05BVFVSRSBMIlx4MDIwM1x4ODAwMFx4Mzg0OFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwNFx4MDAwMFx4MDAwMFx4MDAwMlx4MDAwNFx4MDAwMFx4MDAwMFx4MDIwMiIKICBMT0NBTEVfSUNBTEVOREFSVFlQRSAiMSIKICBMT0NBTEVfSUNFTlRVUlkgIjAiCiAgTE9DQUxFX0lDT1VOVFJZICI5NzYiCiAgTE9DQUxFX0lDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JQ1VSUkVOQ1kgIjEiCiAgTE9DQUxFX0lEQVRFICIyIgogIExPQ0FMRV9JREFZTFpFUk8gIjEiCiAgTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFICIxMjUxIgogIExPQ0FMRV9JREVGQVVMVENPREVQQUdFICI4NjYiCiAgTE9DQUxFX0lERUZBVUxUQ09VTlRSWSAiOTc2IgogIExPQ0FMRV9JREVGQVVMVEVCQ0RJQ0NPREVQQUdFICIyMDg4MCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiNDUwIgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDAwNyIKICBMT0NBTEVfSURFRkFVTFRVTklYQ09ERVBBR0UgIjI4NTk1IgogIExPQ0FMRV9JRElHSVRTICIyIgogIExPQ0FMRV9JRElHSVRTVUJTVElUVVRJT04gIjAiCiAgTE9DQUxFX0lGSVJTVERBWU9GV0VFSyAiMCIKICBMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiAiMCIKICBMT0NBTEVfSUlOVExDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JTEFOR1VBR0UgIjA0NTAiCiAgTE9DQUxFX0lMREFURSAiMiIKICBMT0NBTEVfSUxaRVJPICIxIgogIExPQ0FMRV9JTUVBU1VSRSAiMCIKICBMT0NBTEVfSU1PTkxaRVJPICIxIgogIExPQ0FMRV9JTkVHQ1VSUiAiNSIKICBMT0NBTEVfSU5FR05VTUJFUiAiMSIKICBMT0NBTEVfSU5FR1NFUEJZU1BBQ0UgIjAiCiAgTE9DQUxFX0lORUdTSUdOUE9TTiAiMSIKICBMT0NBTEVfSU5FR1NZTVBSRUNFREVTICIwIgogIExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUiAiMCIKICBMT0NBTEVfSVBBUEVSU0laRSAiOSIKICBMT0NBTEVfSVBPU1NFUEJZU1BBQ0UgIjAiCiAgTE9DQUxFX0lQT1NTSUdOUE9TTiAiMSIKICBMT0NBTEVfSVBPU1NZTVBSRUNFREVTICIwIgogIExPQ0FMRV9JVElNRSAiMSIKICBMT0NBTEVfSVRJTUVNQVJLUE9TTiAiMCIKICBMT0NBTEVfSVRMWkVSTyAiMCIKICBMT0NBTEVfUzExNTkgIiIKICBMT0NBTEVfUzIzNTkgIiIKICBMT0NBTEVfU0FCQlJFVkNUUllOQU1FICJNTkciCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSAixOAiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiAizP8iCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMyAiy/UiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCBMIlx4MDQxZlx4MDRhZiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU1ICLB4CIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU2ICLB/yIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICLN/yIKICBMT0NBTEVfU0FCQlJFVkxBTkdOQU1FICJNT04iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxICJJIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiAiSUkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICJJSUkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0ICJJViIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUgIlYiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICJWSSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcgIlZJSSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggIlbYIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSAiSVgiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCAiWCIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExICJYSSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICJYSUkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TQ09VTlRSWSAiTW9uZ29saWEiCiAgTE9DQUxFX1NDVVJSRU5DWSBMIlx4MjBhZSIKICBMT0NBTEVfU0RBVEUgIi4iCiAgTE9DQUxFX1NEQVlOQU1FMSAixODi4OAiCiAgTE9DQUxFX1NEQVlOQU1FMiAizP/j7ODwIgogIExPQ0FMRV9TREFZTkFNRTMgIsv14OPi4CIKICBMT0NBTEVfU0RBWU5BTUU0IEwiXHgwNDFmXHgwNGFmXHgwNDQwXHgwNDRkXHgwNDMyIgogIExPQ0FMRV9TREFZTkFNRTUgIsHg4PHg7SIKICBMT0NBTEVfU0RBWU5BTUU2ICLB/+zh4CIKICBMT0NBTEVfU0RBWU5BTUU3ICLN/+wiCiAgTE9DQUxFX1NERUNJTUFMICIsIgogIExPQ0FMRV9TRU5HQ09VTlRSWSAiTW9uZ29saWEiCiAgTE9DQUxFX1NFTkdDVVJSTkFNRSAiVHVncmlrIgogIExPQ0FMRV9TRU5HTEFOR1VBR0UgIk1vbmdvbGlhbiIKICBMT0NBTEVfU0dST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NJTlRMU1lNQk9MICJNTlQiCiAgTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUgIk1OIgogIExPQ0FMRV9TSVNPNjM5TEFOR05BTUUgIm1uIgogIExPQ0FMRV9TTEFOR1VBR0UgIk1vbmdvbGlhbiAoQ3lyaWxsaWMpIgogIExPQ0FMRV9TTElTVCAiOyIKICBMT0NBTEVfU0xPTkdEQVRFICJ5eXl5ICfu7fsnIE1NTU0gZCIKICBMT0NBTEVfU01PTkRFQ0lNQUxTRVAgIiwiCiAgTE9DQUxFX1NNT05HUk9VUElORyAiMzswIgogIExPQ0FMRV9TTU9OVEhOQU1FMSBMIjFceDAwYTBceDA0MzRceDA0YWZceDA0MzNceDA0NGRceDA0NGRceDA0NDBceDAwYTBceDA0NDFceDA0MzBceDA0NDAiCiAgTE9DQUxFX1NNT05USE5BTUUyICIyoOTz4+Dg8KDx4PAiCiAgTE9DQUxFX1NNT05USE5BTUUzICIzoOTz4+Dg8KDx4PAiCiAgTE9DQUxFX1NNT05USE5BTUU0IEwiNFx4MDBhMFx4MDQzNFx4MDRhZlx4MDQzM1x4MDQ0ZFx4MDQ0ZFx4MDQ0MFx4MDBhMFx4MDQ0MVx4MDQzMFx4MDQ0MCIKICBMT0NBTEVfU01PTlRITkFNRTUgIjWg5PPj4ODwoPHg8CIKICBMT0NBTEVfU01PTlRITkFNRTYgIjag5PPj4ODwoPHg8CIKICBMT0NBTEVfU01PTlRITkFNRTcgIjeg5PPj4ODwoPHg8CIKICBMT0NBTEVfU01PTlRITkFNRTggIjig5PPj4ODwoPHg8CIKICBMT0NBTEVfU01PTlRITkFNRTkgTCI5XHgwMGEwXHgwNDM0XHgwNGFmXHgwNDMzXHgwNDRkXHgwNDRkXHgwNDQwXHgwMGEwXHgwNDQxXHgwNDMwXHgwNDQwIgogIExPQ0FMRV9TTU9OVEhOQU1FMTAgIjEwoOTz4+Dg8KDx4PAiCiAgTE9DQUxFX1NNT05USE5BTUUxMSBMIjExXHgwMGEwXHgwNDM0XHgwNGFmXHgwNDMzXHgwNDRkXHgwNDRkXHgwNDQwXHgwMGEwXHgwNDQxXHgwNDMwXHgwNDQwIgogIExPQ0FMRV9TTU9OVEhOQU1FMTIgIjEyoOTz4+Dg8KDx4PAiCiAgTE9DQUxFX1NNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAgIqAiCiAgTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSAizO7t4+7roPPr8SIKICBMT0NBTEVfU05BVElWRUNVUlJOQU1FIEwiXHgwNDIyXHgwNGU5XHgwNDMzXHgwNDQwXHgwNGU5XHgwNDMzIgogIExPQ0FMRV9TTkFUSVZFRElHSVRTICIwMTIzNDU2Nzg5IgogIExPQ0FMRV9TTkFUSVZFTEFOR05BTUUgIszu7ePu66D1/esiCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NQT1NJVElWRVNJR04gIiIKICBMT0NBTEVfU1NIT1JUREFURSAieXkuTU0uZGQiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICKgIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgIkg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggInl5eXkgJ+7tJyBNTU1NIgoKICBMR1JQSURfV0VTVEVSTl9FVVJPUEUrTEdSUElEX1JFU19CQVNFICJXZXN0ZXJuIEV1cm9wZSBhbmQgVW5pdGVkIFN0YXRlcyIKICBMR1JQSURfQ0VOVFJBTF9FVVJPUEUrTEdSUElEX1JFU19CQVNFICJDZW50cmFsIEV1cm9wZSIKICBMR1JQSURfQkFMVElDK0xHUlBJRF9SRVNfQkFTRSAiQmFsdGljIgogIExHUlBJRF9HUkVFSytMR1JQSURfUkVTX0JBU0UgIkdyZWVrIgogIExHUlBJRF9DWVJJTExJQytMR1JQSURfUkVTX0JBU0UgIkN5cmlsbGljIgogIExHUlBJRF9UVVJLSVNIK0xHUlBJRF9SRVNfQkFTRSAiVHVya2ljIgogIExHUlBJRF9KQVBBTkVTRStMR1JQSURfUkVTX0JBU0UgIkphcGFuZXNlIgogIExHUlBJRF9LT1JFQU4rTEdSUElEX1JFU19CQVNFICJLb3JlYW4iCiAgTEdSUElEX1RSQURJVElPTkFMX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICJUcmFkaXRpb25hbCBDaGluZXNlIgogIExHUlBJRF9TSU1QTElGSUVEX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICJTaW1wbGlmaWVkIENoaW5lc2UiCiAgTEdSUElEX1RIQUkrTEdSUElEX1JFU19CQVNFICJUaGFpIgogIExHUlBJRF9IRUJSRVcrTEdSUElEX1JFU19CQVNFICJIZWJyZXciCiAgTEdSUElEX0FSQUJJQytMR1JQSURfUkVTX0JBU0UgIkFyYWJpYyIgCiAgTEdSUElEX1ZJRVROQU1FU0UrTEdSUElEX1JFU19CQVNFICJWaWV0bmFtZXNlIgogIExHUlBJRF9JTkRJQytMR1JQSURfUkVTX0JBU0UgIkluZGljIgogIExHUlBJRF9HRU9SR0lBTitMR1JQSURfUkVTX0JBU0UgIkdlb3JnaWFuIgogIExHUlBJRF9BUk1FTklBTitMR1JQSURfUkVTX0JBU0UgIkFybWVuaWFuIgp9Cg==