LyoKICogRnJlbmNoIHJlc291cmNlcyBmb3IgV0xEQVAzMgogKgogKiBDb3B5cmlnaHQgMjAwNSBKb25hdGhhbiBFcm5zdAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAwICJTdWNj6HMiCiAgICAxICJFcnJldXIgZCdvcOlyYXRpb24iCiAgICAyICJFcnJldXIgZGUgcHJvdG9jb2xlIgogICAgMyAiTGltaXRlIGRlIHRlbXBzIGTpcGFzc+llIgogICAgNCAiTGltaXRlIGRlIHRhaWxsZSBk6XBhc3PpZSIKICAgIDUgIkNvbXBhcmFpc29uIEZhdXNzZSIKICAgIDYgIkNvbXBhcmFpc29uIFZyYWllIgogICAgNyAiTel0aG9kZSBkJ2F1dGhlbnRpZmljYXRpb24gbm9uIHN1cHBvcnTpZSIKICAgIDggIkF1dGhlbnRpZmljYXRpb24gZm9ydGUgcmVxdWlzZSIKICAgIDkgIlLpZulyYW50ICh2MikiCiAgICAxMCAiUulm6XJhbnQiCiAgICAxMSAiTGltaXRlIGFkbWluaXN0cmF0aXZlIGTpcGFzc+llIgogICAgMTIgIkV4dGVuc2lvbiBjcml0aXF1ZSBpbmRpc3BvbmlibGUiCiAgICAxMyAiQ29uZmlkZW50aWFsaXTpIHJlcXVpc2UiCiAgICAxNCAiIgogICAgMTUgIiIKICAgIDE2ICJBdHRyaWJ1dCBpbmNvbm51IgogICAgMTcgIlR5cGUgaW5k6WZpbmkiCiAgICAxOCAiSW5hcHByb3ByaWF0ZSBNYXRjaGluZyIKICAgIDE5ICJWaW9sYXRpb24gZGUgY29udHJhaW50ZSIKICAgIDIwICJBdHRyaWJ1dCBvdSB2YWxldXIgZXhpc3RhbnQiCiAgICAyMSAiU3ludGF4ZSBpbnZhbGlkZSIKICAgIDIyICIiCiAgICAyMyAiIgogICAgMjQgIiIKICAgIDI1ICIiCiAgICAyNiAiIgogICAgMjcgIiIKICAgIDI4ICIiCiAgICAyOSAiIgogICAgMzAgIiIKICAgIDMxICIiCiAgICAzMiAiT2JqZXQgaW5jb25udSIKICAgIDMzICJQcm9ibOhtZSBkJ2FsaWFzIgogICAgMzQgIlN5bmF0eGUgRE4gaW52YWxpZGUiCiAgICAzNSAiRXN0IHVuZSBmZXVpbGxlIgogICAgMzYgIlByb2Js6G1lIGRlIGTpculm6XJlbmNlbWVudCBkJ2FsaWFzIgogICAgMzcgIiIKICAgIDM4ICIiCiAgICAzOSAiIgogICAgNDAgIiIKICAgIDQxICIiCiAgICA0MiAiIgogICAgNDMgIiIKICAgIDQ0ICIiCiAgICA0NSAiIgogICAgNDYgIiIKICAgIDQ3ICIiCiAgICA0OCAiQXV0aGVudGlmaWNhdGlvbiBpbmFwcHJvcHJp6WUiCiAgICA0OSAiRHJvaXRzIGludmFsaWRlcyIKICAgIDUwICJEcm9pdHMgaW5zdWZmaXNhbnRzIgogICAgNTEgIk9jY3Vw6SIKICAgIDUyICJJbmRpc3BvbmlibGUiCiAgICA1MyAiTmUgc291aGFpdGUgcGFzIHMnZXjpY3V0ZXIiCiAgICA1NCAiQm91Y2xlIGTpdGVjdOllIgogICAgNTUgIiIKICAgIDU2ICIiCiAgICA1NyAiIgogICAgNTggIiIKICAgIDU5ICIiCiAgICA2MCAiQ29udHL0bGUgZGUgdHJpIG1hbnF1YW50IgogICAgNjEgIkVycmV1ciBkJ2ludGVydmFsbGUgZCdpbmRleCIKICAgIDYyICIiCiAgICA2MyAiIgogICAgNjQgIlZpb2xhdGlvbiBkZSBub21lbmNsYXR1cmUiCiAgICA2NSAiVmlvbGF0aW9uIGRlIGNsYXNzZSBkJ29iamV0IgogICAgNjYgIkludGVyZGl0IHN1ciBkZXMgbm9uLWZldWlsbGVzIgogICAgNjcgIkludGVyZGl0IHN1ciBSRE4iCiAgICA2OCAiRXhpc3RlIGTpauAiCiAgICA2OSAiUGFzIGRlIE1vZHMgZGUgY2xhc3NlIGQnb2JqZXQiCiAgICA3MCAiUulzdWx0YXQgdHJvcCBncmFuZCIKICAgIDcxICJBZmZlY3RlIGRlIG11bHRpcGxlIERTQXMiCiAgICA3MiAiIgogICAgNzMgIiIKICAgIDc0ICIiCiAgICA3NSAiIgogICAgNzYgIiIKICAgIDc3ICIiCiAgICA3OCAiIgogICAgNzkgIiIKICAgIDgwICJBdXRyZSIKICAgIDgxICJTZXJ2ZXVyIGluZGlzcG9uaWJsZSIKICAgIDgyICJFcnJldXIgbG9jYWxlIgogICAgODMgIkVycmV1ciBkJ2VuY29kYWdlIgogICAgODQgIkVycmV1ciBkZSBk6WNvZGFnZSIKICAgIDg1ICJE6WxhaSBkJ2F0dGVudGUgZOlwYXNz6SIKICAgIDg2ICJBdXRoIGluY29ubnVlIgogICAgODcgIkVycmV1ciBkZSBmaWx0cmUiCiAgICA4OCAiQW5udWxhdGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIgogICAgODkgIkVycmV1ciBkZSBwYXJhbeh0cmUiCiAgICA5MCAiUGFzIGRlIG3pbW9pcmUiCiAgICA5MSAiSW1wb3NzaWJsZSBkZSBzZSBjb25uZWN0ZXIgYXUgc2VydmV1ciBMREFQIgogICAgOTIgIk9w6XJhdGlvbiBub24gc3VwcG9ydOllIHBhciBjZXR0ZSB2ZXJzaW9uIGR1IHByb3RvY29sZSBMREFQIgogICAgOTMgIkxlIGNvbnRy9GxlIHNw6WNpZmnpIG4nYSBwYXMg6XTpIHRyb3V26SBkYW5zIGxlIG1lc3NhZ2UiCiAgICA5NCAiUGFzIGRlIHLpc3VsdGF0IGRhbnMgbGUgbWVzc2FnZSIKICAgIDk1ICJQbHVzZGUgculzdWx0YXRzIHJldG91cm7pcyIKICAgIDk2ICJCb3VjbGUgbG9ycyBkdSB0cmFpdGVtZW50IGRlcyBy6WbpcmFudHMiCiAgICA5NyAiTGltaXRlIGR1IG5vbWJyZSBkZSBy6WbpcmVudHMgZOlwYXNz6WUiCn0K