LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBBcmFiaWMgKE1vcm9jY28pCiAqCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZCBmb3IgQ29kZXdlYXZlcnMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKI3ByYWdtYSBjb2RlX3BhZ2UoMTI1NikKClNUUklOR1RBQkxFIExBTkdVQUdFIExBTkdfQVJBQklDLCBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPCnsKICBMT0NBTEVfRk9OVFNJR05BVFVSRSBMIlx4NjBhZlx4ODAwMFx4Mzg0OFx4MTAwMFx4MDAwOFx4MDAwMFx4MDAwMFx4MDgwMFx4MDA0MFx4MDAwMFx4MDAwMFx4MjAwMFx4MDA0MFx4MDAwMFx4MDAwMFx4MjAwOCIKICBMT0NBTEVfSUNBTEVOREFSVFlQRSAiMSIKICBMT0NBTEVfSUNFTlRVUlkgIjEiCiAgTE9DQUxFX0lDT1VOVFJZICIyMTIiCiAgTE9DQUxFX0lDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JQ1VSUkVOQ1kgIjIiCiAgTE9DQUxFX0lEQVRFICIxIgogIExPQ0FMRV9JREFZTFpFUk8gIjEiCiAgTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFICIxMjU2IgogIExPQ0FMRV9JREVGQVVMVENPREVQQUdFICI3MjAiCiAgTE9DQUxFX0lERUZBVUxUQ09VTlRSWSAiMjEyIgogIExPQ0FMRV9JREVGQVVMVEVCQ0RJQ0NPREVQQUdFICIyMDQyMCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMTgwMSIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMDQiCiAgTE9DQUxFX0lESUdJVFMgIjIiCiAgTE9DQUxFX0lESUdJVFNVQlNUSVRVVElPTiAiMCIKICBMT0NBTEVfSUZJUlNUREFZT0ZXRUVLICIwIgogIExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSICIwIgogIExPQ0FMRV9JSU5UTENVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lMQU5HVUFHRSAiMTgwMSIKICBMT0NBTEVfSUxEQVRFICIxIgogIExPQ0FMRV9JTFpFUk8gIjEiCiAgTE9DQUxFX0lNRUFTVVJFICIwIgogIExPQ0FMRV9JTU9OTFpFUk8gIjEiCiAgTE9DQUxFX0lORUdDVVJSICIzIgogIExPQ0FMRV9JTkVHTlVNQkVSICIzIgogIExPQ0FMRV9JTkVHU0VQQllTUEFDRSAiMCIKICBMT0NBTEVfSU5FR1NJR05QT1NOICIyIgogIExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMgIjEiCiAgTE9DQUxFX0lPUFRJT05BTENBTEVOREFSICI2IgogIExPQ0FMRV9JUEFQRVJTSVpFICI5IgogIExPQ0FMRV9JUE9TU0VQQllTUEFDRSAiMSIKICBMT0NBTEVfSVBPU1NJR05QT1NOICIyIgogIExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMgIjEiCiAgTE9DQUxFX0lUSU1FICIxIgogIExPQ0FMRV9JVElNRU1BUktQT1NOICIwIgogIExPQ0FMRV9JVExaRVJPICIwIgogIExPQ0FMRV9TMTE1OSAi1SIKICBMT0NBTEVfUzIzNTkgIuMiCiAgTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSAiTUFSIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTEgIsfhx8vk7eQiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiAix+HL4cfLx8EiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMyAix+HH0cjax8EiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCAix+HO4+3TIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTUgIsfhzOPaySIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU2ICLH4dPIyiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICLH4cfNzyIKICBMT0NBTEVfU0FCQlJFVkxBTkdOQU1FICJBUk0iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxICLMx+Td7e3lIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiAi3e3d0e3t5SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMgIuPH0dMiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0ICLD3dHt4SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUgIuPH7SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYgIszmx+QiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICLM5u3t5SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggIsPm5soiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5ICLTyMrH48jRIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAgIsPfyubI0SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExICLk5t3jyNEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiAiz+3T48jRIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU0NPVU5UUlkgIk1vcm9jY28iCiAgTE9DQUxFX1NDVVJSRU5DWSAizy7jLv4iCiAgTE9DQUxFX1NEQVRFICItIgogIExPQ0FMRV9TREFZTkFNRTEgIsfhx8vk7eQiCiAgTE9DQUxFX1NEQVlOQU1FMiAix+HL4cfLx8EiCiAgTE9DQUxFX1NEQVlOQU1FMyAix+HH0cjax8EiCiAgTE9DQUxFX1NEQVlOQU1FNCAix+HO4+3TIgogIExPQ0FMRV9TREFZTkFNRTUgIsfhzOPaySIKICBMT0NBTEVfU0RBWU5BTUU2ICLH4dPIyiIKICBMT0NBTEVfU0RBWU5BTUU3ICLH4cfNzyIKICBMT0NBTEVfU0RFQ0lNQUwgIi4iCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJNb3JvY2NvIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIk1vcm9jY2FuIERpcmhhbSIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJBcmFiaWMiCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiTUFEIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJNQSIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJhciIKICBMT0NBTEVfU0xBTkdVQUdFICJBcmFiaWMgKE1vcm9jY28pIgogIExPQ0FMRV9TTElTVCAiOyIKICBMT0NBTEVfU0xPTkdEQVRFICJkZCBNTU1NLCB5eXl5IgogIExPQ0FMRV9TTU9OREVDSU1BTFNFUCAiLiIKICBMT0NBTEVfU01PTkdST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NNT05USE5BTUUxICLMx+Td7e3lIgogIExPQ0FMRV9TTU9OVEhOQU1FMiAi3e3d0e3t5SIKICBMT0NBTEVfU01PTlRITkFNRTMgIuPH0dMiCiAgTE9DQUxFX1NNT05USE5BTUU0ICLD3dHt4SIKICBMT0NBTEVfU01PTlRITkFNRTUgIuPH7SIKICBMT0NBTEVfU01PTlRITkFNRTYgIszmx+QiCiAgTE9DQUxFX1NNT05USE5BTUU3ICLM5u3t5SIKICBMT0NBTEVfU01PTlRITkFNRTggIsPm5soiCiAgTE9DQUxFX1NNT05USE5BTUU5ICLTyMrH48jRIgogIExPQ0FMRV9TTU9OVEhOQU1FMTAgIsPfyubI0SIKICBMT0NBTEVfU01PTlRITkFNRTExICLk5t3jyNEiCiAgTE9DQUxFX1NNT05USE5BTUUxMiAiz+3T48jRIgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICIsIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgIsfh4+Ph38kgx+Hj29HI7ckiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAiz9Hl46Dj29HI7SIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRUxBTkdOQU1FICLH4drRyO3JIgogIExPQ0FMRV9TTkVHQVRJVkVTSUdOICItIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTSE9SVERBVEUgImRkLU1NLXl5eXkiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICIsIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgIkg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0sIHl5eXkiCn0K