LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBBcmFiaWMgKEt1d2FpdCkKICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjU2KQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19BUkFCSUMsIFNVQkxBTkdfQVJBQklDX0tVV0FJVAp7CiAgTE9DQUxFX0ZPTlRTSUdOQVRVUkUgTCJceDYwYWZceDgwMDBceDM4NDhceDEwMDBceDAwMDhceDAwMDBceDAwMDBceDA4MDBceDAwNDBceDAwMDBceDAwMDBceDIwMDBceDAwNDBceDAwMDBceDAwMDBceDIwMDgiCiAgTE9DQUxFX0lDQUxFTkRBUlRZUEUgIjEiCiAgTE9DQUxFX0lDRU5UVVJZICIxIgogIExPQ0FMRV9JQ09VTlRSWSAiOTY1IgogIExPQ0FMRV9JQ1VSUkRJR0lUUyAiMyIKICBMT0NBTEVfSUNVUlJFTkNZICIyIgogIExPQ0FMRV9JREFURSAiMSIKICBMT0NBTEVfSURBWUxaRVJPICIxIgogIExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSAiMTI1NiIKICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSAiNzIwIgogIExPQ0FMRV9JREVGQVVMVENPVU5UUlkgIjk2NSIKICBMT0NBTEVfSURFRkFVTFRFQkNESUNDT0RFUEFHRSAiMjA0MjAiCiAgTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UgIjM0MDEiCiAgTE9DQUxFX0lERUZBVUxUTUFDQ09ERVBBR0UgIjEwMDA0IgogIExPQ0FMRV9JREVGQVVMVFVOSVhDT0RFUEFHRSAiMjg1OTYiCiAgTE9DQUxFX0lESUdJVFMgIjMiCiAgTE9DQUxFX0lESUdJVFNVQlNUSVRVVElPTiAiMCIKICBMT0NBTEVfSUZJUlNUREFZT0ZXRUVLICI1IgogIExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSICIwIgogIExPQ0FMRV9JSU5UTENVUlJESUdJVFMgIjMiCiAgTE9DQUxFX0lMQU5HVUFHRSAiMzQwMSIKICBMT0NBTEVfSUxEQVRFICIxIgogIExPQ0FMRV9JTFpFUk8gIjEiCiAgTE9DQUxFX0lNRUFTVVJFICIwIgogIExPQ0FMRV9JTU9OTFpFUk8gIjEiCiAgTE9DQUxFX0lORUdDVVJSICIzIgogIExPQ0FMRV9JTkVHTlVNQkVSICIzIgogIExPQ0FMRV9JTkVHU0VQQllTUEFDRSAiMCIKICBMT0NBTEVfSU5FR1NJR05QT1NOICIyIgogIExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMgIjEiCiAgTE9DQUxFX0lORVVUUkFMICIwIgogIExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUiAiNiIKICBMT0NBTEVfSVBBUEVSU0laRSAiOSIKICBMT0NBTEVfSVBPU1NFUEJZU1BBQ0UgIjEiCiAgTE9DQUxFX0lQT1NTSUdOUE9TTiAiMiIKICBMT0NBTEVfSVBPU1NZTVBSRUNFREVTICIxIgogIExPQ0FMRV9JUkVBRElOR0xBWU9VVCAiMSIKICBMT0NBTEVfSVRJTUUgIjAiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjEiCiAgTE9DQUxFX1MxMTU5ICLVIgogIExPQ0FMRV9TMjM1OSAi4yIKICBMT0NBTEVfU0FCQlJFVkNUUllOQU1FICJLV1QiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSAix+HHy+Tt5CIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICLH4cvhx8vHwSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUzICLH4cfRyNrHwSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICLH4c7j7dMiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSAix+HM49rJIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTYgIsfh08jKIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIsfhx83PIgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIkFSSyIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIu3kx+3RIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiAi3cjRx+3RIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMyAi48fR0yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQgIsfI0e3hIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSAi48ft5iIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYgIu3m5O3mIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAi7ebh7eYiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4ICLH29PY0yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgItPIyuPI0SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwICLH38rmyNEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAi5Obd48jRIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIgIs/t0+PI0SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJLdXdhaXQiCiAgTE9DQUxFX1NDVVJSRU5DWSAizy7fLv4iCiAgTE9DQUxFX1NEQVRFICIvIgogIExPQ0FMRV9TREFZTkFNRTEgIsfhx8vk7eQiCiAgTE9DQUxFX1NEQVlOQU1FMiAix+HL4cfLx8EiCiAgTE9DQUxFX1NEQVlOQU1FMyAix+HH0cjax8EiCiAgTE9DQUxFX1NEQVlOQU1FNCAix+HO4+3TIgogIExPQ0FMRV9TREFZTkFNRTUgIsfhzOPaySIKICBMT0NBTEVfU0RBWU5BTUU2ICLH4dPIyiIKICBMT0NBTEVfU0RBWU5BTUU3ICLH4cfNzyIKICBMT0NBTEVfU0RFQ0lNQUwgIi4iCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJLdXdhaXQiCiAgTE9DQUxFX1NFTkdDVVJSTkFNRSAiS3V3YWl0aSBEaW5hciIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJBcmFiaWMiCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiS1dEIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJLVyIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJhciIKICBMT0NBTEVfU0xBTkdVQUdFICJBcmFiaWMgKEt1d2FpdCkiCiAgTE9DQUxFX1NMSVNUICI7IgogIExPQ0FMRV9TTE9OR0RBVEUgImRkIE1NTU0sIHl5eXkiCiAgTE9DQUxFX1NNT05ERUNJTUFMU0VQICIuIgogIExPQ0FMRV9TTU9OR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU01PTlRITkFNRTEgIu3kx+3RIgogIExPQ0FMRV9TTU9OVEhOQU1FMiAi3cjRx+3RIgogIExPQ0FMRV9TTU9OVEhOQU1FMyAi48fR0yIKICBMT0NBTEVfU01PTlRITkFNRTQgIsfI0e3hIgogIExPQ0FMRV9TTU9OVEhOQU1FNSAi48ft5iIKICBMT0NBTEVfU01PTlRITkFNRTYgIu3m5O3mIgogIExPQ0FMRV9TTU9OVEhOQU1FNyAi7ebh7eYiCiAgTE9DQUxFX1NNT05USE5BTUU4ICLH29PY0yIKICBMT0NBTEVfU01PTlRITkFNRTkgItPIyuPI0SIKICBMT0NBTEVfU01PTlRITkFNRTEwICLH38rmyNEiCiAgTE9DQUxFX1NNT05USE5BTUUxMSAi5Obd48jRIgogIExPQ0FMRV9TTU9OVEhOQU1FMTIgIs/t0+PI0SIKICBMT0NBTEVfU01PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NNT05USE9VU0FORFNFUCAiLCIKICBMT0NBTEVfU05BTUUgImFyLUtXIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgIsfh3+btyiIKICBMT0NBTEVfU05BVElWRUNVUlJOQU1FICLP7eTH0aDf5u3K7SIKICBMT0NBTEVfU05BVElWRURJR0lUUyBMIlx4MDY2MFx4MDY2MVx4MDY2Mlx4MDY2M1x4MDY2NFx4MDY2NVx4MDY2Nlx4MDY2N1x4MDY2OFx4MDY2OSIKICBMT0NBTEVfU05BVElWRURJU1BMQVlOQU1FICLH4drRyO3JICjH4d/m7copIgogIExPQ0FMRV9TTkFUSVZFTEFOR05BTUUgIsfh2tHI7ckiCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NPUEVOVFlQRUxBTkdVQUdFVEFHICJBUkEgIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTQ1JJUFRTICJBcmFiOyIKICBMT0NBTEVfU1NIT1JUREFURSAiZGQvTU0veXl5eSIKICBMT0NBTEVfU1NIT1JUVElNRSAiaGg6bW0gdHQiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICIsIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgImhoOm1tOnNzIHR0IgogIExPQ0FMRV9TWUVBUk1PTlRIICJNTU1NLCB5eXl5IgoKICBMR1JQSURfV0VTVEVSTl9FVVJPUEUrTEdSUElEX1JFU19CQVNFICJXZXN0ZXJuIEV1cm9wZSBhbmQgVW5pdGVkIFN0YXRlcyIKICBMR1JQSURfQ0VOVFJBTF9FVVJPUEUrTEdSUElEX1JFU19CQVNFICJDZW50cmFsIEV1cm9wZSIKICBMR1JQSURfQkFMVElDK0xHUlBJRF9SRVNfQkFTRSAiQmFsdGljIgogIExHUlBJRF9HUkVFSytMR1JQSURfUkVTX0JBU0UgIkdyZWVrIgogIExHUlBJRF9DWVJJTExJQytMR1JQSURfUkVTX0JBU0UgIkN5cmlsbGljIgogIExHUlBJRF9UVVJLSVNIK0xHUlBJRF9SRVNfQkFTRSAiVHVya2ljIgogIExHUlBJRF9KQVBBTkVTRStMR1JQSURfUkVTX0JBU0UgIkphcGFuZXNlIgogIExHUlBJRF9LT1JFQU4rTEdSUElEX1JFU19CQVNFICJLb3JlYW4iCiAgTEdSUElEX1RSQURJVElPTkFMX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICJUcmFkaXRpb25hbCBDaGluZXNlIgogIExHUlBJRF9TSU1QTElGSUVEX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICJTaW1wbGlmaWVkIENoaW5lc2UiCiAgTEdSUElEX1RIQUkrTEdSUElEX1JFU19CQVNFICJUaGFpIgogIExHUlBJRF9IRUJSRVcrTEdSUElEX1JFU19CQVNFICJIZWJyZXciCiAgTEdSUElEX0FSQUJJQytMR1JQSURfUkVTX0JBU0UgIkFyYWJpYyIgCiAgTEdSUElEX1ZJRVROQU1FU0UrTEdSUElEX1JFU19CQVNFICJWaWV0bmFtZXNlIgogIExHUlBJRF9JTkRJQytMR1JQSURfUkVTX0JBU0UgIkluZGljIgogIExHUlBJRF9HRU9SR0lBTitMR1JQSURfUkVTX0JBU0UgIkdlb3JnaWFuIgogIExHUlBJRF9BUk1FTklBTitMR1JQSURfUkVTX0JBU0UgIkFybWVuaWFuIgp9Cg==