LyoKICogUG9saXNoIHJlc291cmNlcyBmb3Igb2xlYWNjCiAqCiAqIENvcHlyaWdodCAyMDA5IKN1a2FzeiBXb2puabNvd2ljegogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAib2xlYWNjLmgiCgpMQU5HVUFHRSBMQU5HX1BPTElTSCwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAwICJ1bmtub3duIG9iamVjdCIgLyogdW5kb2N1bWVudGVkICovCiAgICBST0xFX1NZU1RFTV9USVRMRUJBUiAgICAicGFzZWsgdHl0dbN1IgogICAgUk9MRV9TWVNURU1fTUVOVUJBUiAgICAgInBhc2VrIG1lbnUiCiAgICBST0xFX1NZU1RFTV9TQ1JPTExCQVIgICAicGFzZWsgcHJ6ZXdpamFuaWEiCiAgICBST0xFX1NZU1RFTV9HUklQICAgICAgICAiZ3JpcCIKICAgIFJPTEVfU1lTVEVNX1NPVU5EICAgICAgICJkn3dp6msiCiAgICBST0xFX1NZU1RFTV9DVVJTT1IgICAgICAia3Vyc29yIgogICAgUk9MRV9TWVNURU1fQ0FSRVQgICAgICAgImRhc3playIKICAgIFJPTEVfU1lTVEVNX0FMRVJUICAgICAgICJvc3RyemW/ZW5pZSIKICAgIFJPTEVfU1lTVEVNX1dJTkRPVyAgICAgICJva25vIgogICAgUk9MRV9TWVNURU1fQ0xJRU5UICAgICAgImtsaWVudCIKICAgIFJPTEVfU1lTVEVNX01FTlVQT1BVUCAgICJtZW51IHJvendpamFuZSIKICAgIFJPTEVfU1lTVEVNX01FTlVJVEVNICAgICJlbGVtZW50IG1lbnUiCiAgICBST0xFX1NZU1RFTV9UT09MVElQICAgICAicG9kcG93aWVknyIKICAgIFJPTEVfU1lTVEVNX0FQUExJQ0FUSU9OICJhcGxpa2FjamEiCiAgICBST0xFX1NZU1RFTV9ET0NVTUVOVCAgICAiZG9rdW1lbnQiCiAgICBST0xFX1NZU1RFTV9QQU5FICAgICAgICAicGFuZSIKICAgIFJPTEVfU1lTVEVNX0NIQVJUICAgICAgICJ3eWtyZXMiCiAgICBST0xFX1NZU1RFTV9ESUFMT0cgICAgICAiZGlhbG9nIgogICAgUk9MRV9TWVNURU1fQk9SREVSICAgICAgIm9icmFtb3dhbmllIgogICAgUk9MRV9TWVNURU1fR1JPVVBJTkcgICAgImdydXBvd2FuaWUiCiAgICBST0xFX1NZU1RFTV9TRVBBUkFUT1IgICAic2VwYXJhdG9yIgogICAgUk9MRV9TWVNURU1fVE9PTEJBUiAgICAgInBhc2VrIG5hcnrqZHppIgogICAgUk9MRV9TWVNURU1fU1RBVFVTQkFSICAgInBhc2VrIHN0YW51IgogICAgUk9MRV9TWVNURU1fVEFCTEUgICAgICAgICJ0YWJlbGEiCiAgICBST0xFX1NZU1RFTV9DT0xVTU5IRUFERVIgIm5hZ7Pzd2VrIGtvbHVtbnkiCiAgICBST0xFX1NZU1RFTV9ST1dIRUFERVIgICAgIm5hZ7Pzd2VrIHdpZXJzemEiCiAgICBST0xFX1NZU1RFTV9DT0xVTU4gICAgICAgImtvbHVtbmEiCiAgICBST0xFX1NZU1RFTV9ST1cgICAgICAgICAgIndpZXJzeiIKICAgIFJPTEVfU1lTVEVNX0NFTEwgICAgICAgICAia29t83JrYSIKICAgIFJPTEVfU1lTVEVNX0xJTksgICAgICAgICAibGluayIKICAgIFJPTEVfU1lTVEVNX0hFTFBCQUxMT09OICAiZHltZWsgcG9tb2N5IgogICAgUk9MRV9TWVNURU1fQ0hBUkFDVEVSICAgICJ6bmFrIgogICAgUk9MRV9TWVNURU1fTElTVCAgICAgICAgICJsaXN0YSIKICAgIFJPTEVfU1lTVEVNX0xJU1RJVEVNICAgICAiZWxlbWVudCBsaXN0eSIKICAgIFJPTEVfU1lTVEVNX09VVExJTkUgICAgICAiemFyeXMiCiAgICBST0xFX1NZU1RFTV9PVVRMSU5FSVRFTSAgImVsZW1lbnQgemFyeXN1IgogICAgUk9MRV9TWVNURU1fUEFHRVRBQiAgICAgICJwYWdlIHRhYiIKICAgIFJPTEVfU1lTVEVNX1BST1BFUlRZUEFHRSAic3Ryb25hIHezYZxjaXdvnGNpIgogICAgUk9MRV9TWVNURU1fSU5ESUNBVE9SICAgICJ3c2thn25payIKICAgIFJPTEVfU1lTVEVNX0dSQVBISUMgICAgICAiZ3JhZmlrYSIKICAgIFJPTEVfU1lTVEVNX1NUQVRJQ1RFWFQgICAidGVrc3Qgc3RhdHljem55IgogICAgUk9MRV9TWVNURU1fVEVYVCAgICAgICAgICJ0ZWtzdCIKICAgIFJPTEVfU1lTVEVNX1BVU0hCVVRUT04gICAicHJ6eWNpc2siCiAgICBST0xFX1NZU1RFTV9DSEVDS0JVVFRPTiAgInByenljaXNrIHphem5hY3phbnkiCiAgICBST0xFX1NZU1RFTV9SQURJT0JVVFRPTiAgInByenljaXNrIG9wY2ppIgogICAgUk9MRV9TWVNURU1fQ09NQk9CT1ggICAgICJwb2xlIGtvbWJpIgogICAgUk9MRV9TWVNURU1fRFJPUExJU1QgICAgICJsaXN0YSByb3p3aWphbmEiCiAgICBST0xFX1NZU1RFTV9QUk9HUkVTU0JBUiAgInBhc2VrIHBvc3TqcHUiCiAgICBST0xFX1NZU1RFTV9ESUFMICAgICAgICAgImRpYWwiCiAgICBST0xFX1NZU1RFTV9IT1RLRVlGSUVMRCAgImhvdCBrZXkgZmllbGQiCiAgICBST0xFX1NZU1RFTV9TTElERVIgICAgICAgInN1d2FrIgogICAgUk9MRV9TWVNURU1fU1BJTkJVVFRPTiAgICJzcGluIGJveCIKICAgIFJPTEVfU1lTVEVNX0RJQUdSQU0gICAgICAiZGlhZ3JhbSIKICAgIFJPTEVfU1lTVEVNX0FOSU1BVElPTiAgICAiYW5pbWFjamEiCiAgICBST0xFX1NZU1RFTV9FUVVBVElPTiAgICAgInLzd25hbmllIgogICAgUk9MRV9TWVNURU1fQlVUVE9ORFJPUERPV04gInByenljaXNrIHJvendpamFueSIKICAgIFJPTEVfU1lTVEVNX0JVVFRPTk1FTlUgICAicHJ6eWNpc2sgbWVudSIKICAgIFJPTEVfU1lTVEVNX0JVVFRPTkRST1BET1dOR1JJRCAic2lhdGthIHByenljaXNr83cgcm96d2lqYW55Y2giCiAgICBST0xFX1NZU1RFTV9XSElURVNQQUNFICAgImJpYbNhIHNwYWNqYSIKICAgIFJPTEVfU1lTVEVNX1BBR0VUQUJMSVNUICAicGFnZSB0YWIgbGlzdCIKICAgIFJPTEVfU1lTVEVNX0NMT0NLICAgICAgICAiemVnYXIiCiAgICBST0xFX1NZU1RFTV9TUExJVEJVVFRPTiAgInByenljaXNrIHJvemR6aWVsYW5pYSIKICAgIFJPTEVfU1lTVEVNX0lQQUREUkVTUyAgICAiYWRyZXMgSVAiCiAgICBST0xFX1NZU1RFTV9PVVRMSU5FQlVUVE9OICJwcnp5Y2lzayB6YXJ5c3UiCn0K