LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBGWVJPIE1hY2Vkb25pYW4KICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjUxKQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19NQUNFRE9OSUFOLCBTVUJMQU5HX0RFRkFVTFQKewogIExPQ0FMRV9GT05UU0lHTkFUVVJFIEwiXHgwMjAzXHg4MDAwXHgzODQ4XHgwMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwMDA0XHgwMDAwXHgwMDAwXHgwMDAyXHgwMDA0XHgwMDAwXHgwMDAwXHgwMjAyIgogIExPQ0FMRV9JQ0FMRU5EQVJUWVBFICIxIgogIExPQ0FMRV9JQ0VOVFVSWSAiMSIKICBMT0NBTEVfSUNPVU5UUlkgIjM4OSIKICBMT0NBTEVfSUNVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lDVVJSRU5DWSAiMyIKICBMT0NBTEVfSURBVEUgIjEiCiAgTE9DQUxFX0lEQVlMWkVSTyAiMSIKICBMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UgIjEyNTEiCiAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgIjg2NiIKICBMT0NBTEVfSURFRkFVTFRDT1VOVFJZICIzODkiCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjUwMCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMDQyZiIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMDciCiAgTE9DQUxFX0lERUZBVUxUVU5JWENPREVQQUdFICIyODU5NSIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjAiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjIiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDJmIgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMSIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjgiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjEiCiAgTE9DQUxFX1MxMTU5ICIiCiAgTE9DQUxFX1MyMzU5ICIiCiAgTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSAiTUtEIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTEgIu/u7SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICLi8vAiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMyAi8fDkIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQgIvfl8iIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU1ICLv5fIiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiAi8eDhIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIu3l5CIKICBMT0NBTEVfU0FCQlJFVkxBTkdOQU1FICJNS0kiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxICK84O0iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyICL05eIiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICLs4PAiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0ICLg7/AiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICLs4LwiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICK88+0iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICK88+siCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4ICLg4uMiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5ICLx5e8iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCAi7uryIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgIu3u5SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICLk5eoiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TQ09VTlRSWSAiRm9ybWVyIFl1Z29zbGF2IFJlcHVibGljIG9mIE1hY2Vkb25pYSIKICBMT0NBTEVfU0NVUlJFTkNZICLk5e0uIgogIExPQ0FMRV9TREFURSAiLiIKICBMT0NBTEVfU0RBWU5BTUUxICLv7u3l5OXr7ejqIgogIExPQ0FMRV9TREFZTkFNRTIgIuLy7vDt6OoiCiAgTE9DQUxFX1NEQVlOQU1FMyAi8fDl5OAiCiAgTE9DQUxFX1NEQVlOQU1FNCAi9+Xy4vDy7uoiCiAgTE9DQUxFX1NEQVlOQU1FNSAi7+Xy7uoiCiAgTE9DQUxFX1NEQVlOQU1FNiAi8eDh7vLgIgogIExPQ0FMRV9TREFZTkFNRTcgIu3l5OXr4CIKICBMT0NBTEVfU0RFQ0lNQUwgIiwiCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJGb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YgTWFjZWRvbmlhIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIk1hY2Vkb25pYW4gRGVuYXIiCiAgTE9DQUxFX1NFTkdMQU5HVUFHRSAiRllSTyBNYWNlZG9uaWFuIgogIExPQ0FMRV9TR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU0lOVExTWU1CT0wgIk1LRCIKICBMT0NBTEVfU0lTTzMxNjZDVFJZTkFNRSAiTUsiCiAgTE9DQUxFX1NJU082MzlMQU5HTkFNRSAibWsiCiAgTE9DQUxFX1NMQU5HVUFHRSAiRllSTyBNYWNlZG9uaWFuIgogIExPQ0FMRV9TTElTVCAiOyIKICBMT0NBTEVfU0xPTkdEQVRFICJkZGRkLCBkZCBNTU1NIHl5eXkiCiAgTE9DQUxFX1NNT05ERUNJTUFMU0VQICIsIgogIExPQ0FMRV9TTU9OR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU01PTlRITkFNRTEgIrzg7fPg8OgiCiAgTE9DQUxFX1NNT05USE5BTUUyICL05eLw8+Dw6CIKICBMT0NBTEVfU01PTlRITkFNRTMgIuzg8PIiCiAgTE9DQUxFX1NNT05USE5BTUU0ICLg7/Do6yIKICBMT0NBTEVfU01PTlRITkFNRTUgIuzgvCIKICBMT0NBTEVfU01PTlRITkFNRTYgIrzz7egiCiAgTE9DQUxFX1NNT05USE5BTUU3ICK88+voIgogIExPQ0FMRV9TTU9OVEhOQU1FOCAi4OLj8/HyIgogIExPQ0FMRV9TTU9OVEhOQU1FOSAi8eXv8uXs4vDoIgogIExPQ0FMRV9TTU9OVEhOQU1FMTAgIu7q8u7s4vDoIgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgIu3u5ezi8OgiCiAgTE9DQUxFX1NNT05USE5BTUUxMiAi5OXq5ezi8OgiCiAgTE9DQUxFX1NNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAgIi4iCiAgTE9DQUxFX1NOQU1FICJtay1NSyIKICBMT0NBTEVfU05BVElWRUNUUllOQU1FICLM4Orl5O7t6LzgIgogIExPQ0FMRV9TTkFUSVZFQ1VSUk5BTUUgIuTl7eDwIgogIExPQ0FMRV9TTkFUSVZFRElHSVRTICIwMTIzNDU2Nzg5IgogIExPQ0FMRV9TTkFUSVZFTEFOR05BTUUgIuzg6uXk7u3x6uggvODn6OoiCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NQT1NJVElWRVNJR04gIiIKICBMT0NBTEVfU1NIT1JUREFURSAiZGQuTU0ueXl5eSIKICBMT0NBTEVfU1NPUlROQU1FICJEZWZhdWx0IgogIExPQ0FMRV9TVEhPVVNBTkQgIi4iCiAgTE9DQUxFX1NUSU1FICI6IgogIExPQ0FMRV9TVElNRUZPUk1BVCAiSEg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0geXl5eSIKCiAgTEdSUElEX1dFU1RFUk5fRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiV2VzdGVybiBFdXJvcGUgYW5kIFVuaXRlZCBTdGF0ZXMiCiAgTEdSUElEX0NFTlRSQUxfRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiQ2VudHJhbCBFdXJvcGUiCiAgTEdSUElEX0JBTFRJQytMR1JQSURfUkVTX0JBU0UgIkJhbHRpYyIKICBMR1JQSURfR1JFRUsrTEdSUElEX1JFU19CQVNFICJHcmVlayIKICBMR1JQSURfQ1lSSUxMSUMrTEdSUElEX1JFU19CQVNFICJDeXJpbGxpYyIKICBMR1JQSURfVFVSS0lTSCtMR1JQSURfUkVTX0JBU0UgIlR1cmtpYyIKICBMR1JQSURfSkFQQU5FU0UrTEdSUElEX1JFU19CQVNFICJKYXBhbmVzZSIKICBMR1JQSURfS09SRUFOK0xHUlBJRF9SRVNfQkFTRSAiS29yZWFuIgogIExHUlBJRF9UUkFESVRJT05BTF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiVHJhZGl0aW9uYWwgQ2hpbmVzZSIKICBMR1JQSURfU0lNUExJRklFRF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiU2ltcGxpZmllZCBDaGluZXNlIgogIExHUlBJRF9USEFJK0xHUlBJRF9SRVNfQkFTRSAiVGhhaSIKICBMR1JQSURfSEVCUkVXK0xHUlBJRF9SRVNfQkFTRSAiSGVicmV3IgogIExHUlBJRF9BUkFCSUMrTEdSUElEX1JFU19CQVNFICJBcmFiaWMiIAogIExHUlBJRF9WSUVUTkFNRVNFK0xHUlBJRF9SRVNfQkFTRSAiVmlldG5hbWVzZSIKICBMR1JQSURfSU5ESUMrTEdSUElEX1JFU19CQVNFICJJbmRpYyIKICBMR1JQSURfR0VPUkdJQU4rTEdSUElEX1JFU19CQVNFICJHZW9yZ2lhbiIKICBMR1JQSURfQVJNRU5JQU4rTEdSUElEX1JFU19CQVNFICJBcm1lbmlhbiIKfQo=