LyoKICogQ29weXJpZ2h0IDIwMDYgYnkgSGVubmluZyBHZXJoYXJkdAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ERUZBVUxUCgpNQUlOTUVOVSBNRU5VIERJU0NBUkRBQkxFIApCRUdJTgogICAgUE9QVVAgIiZEYXRlaSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZOZXUiLCAgICAgICAgICBJRF9GSUxFX05FVwogICAgICAgIE1FTlVJVEVNICIm1mZmbmVuIiwgICAgICAgSURfRklMRV9PUEVOCiAgICAgICAgTUVOVUlURU0gIiZTcGVpY2hlcm4iLCAgICBJRF9GSUxFX1NBVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkJlZW5kZW4iLCAgICAgIElEX0ZJTEVfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJkJlYXJiZWl0ZW4iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImUvxja2fkbmdpZ1x0Q3RybCtaIiwgICAgICAgICBJRF9FRElUX1VORE8KICAgICAgICBNRU5VSVRFTSAiJldpZWRlcmhvbGVuXHRDdHJsK1kiLCAgICAgICAgSURfRURJVF9SRURPCiAgICAgICAgTUVOVUlURU0gIiZBbGxlcyBtYXJraWVyZW5cdEN0cmwrQSIsICAgIElEX0VESVRfU0VMRUNUQUxMCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkF1cyZzY2huZWlkZW5cdEN0cmwrWCIsICAgICAgIElEX0VESVRfQ1VUCiAgICAgICAgTUVOVUlURU0gIiZLb3BpZXJlblx0Q3RybCtDIiwgICAgICAgICAgIElEX0VESVRfQ09QWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTY2hyZWliZ2VzY2j8JnR6dCIsICAgICAgICAgICBJRF9FRElUX1JFQURPTkxZCiAgICAgICAgTUVOVUlURU0gIiZHZeRuZGVydCIsICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZJRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiJkV4dHJhcyIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiTWFya2llcnVuZ3MmaW5mb3JtYXRpb24iLCAgICAgSURfRURJVF9TRUxFQ1RJT05JTkZPCiAgICAgICAgICAgIE1FTlVJVEVNICJaZWljaGVuJmZvcm1hdCIsICAgICAgICAgICAgICBJRF9FRElUX0NIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIiZTdGFuZGFyZHplaWNoZW5mb3JtYXQiLCAgICAgIElEX0VESVRfREVGQ0hBUkZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiJkFic2F0emZvcm1hdCIsICAgICAgICAgICAgICAgSURfRURJVF9QQVJBRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICImR2V0IHRleHQiLCAgICAgICAgICAgICAgICAgICBJRF9FRElUX0dFVFRFWFQKICAgICAgICBFTkQKICAgIEVORAogICAgUE9QVVAgIkYmb3JtYXQiCiAgICBCRUdJTgogICAgICAgIFBPUFVQICImSGludGVyZ3J1bmQiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZTeXN0ZW1cdEN0cmwrMSIsICAgICAgICAgSURfQkFDS18xCiAgICAgICAgICAgIE1FTlVJVEVNICImUG9zdEl0LU5vdGl6XHRDdHJsKzIiLCAgICAgICAgICAgSURfQkFDS18yCiAgICAgICAgRU5ECiAgICAgICAgUE9QVVAgIiZBdXNyaWNodHVuZyIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiJkxpbmtzXHRDdHJsK0wiLCAgICAgICAgSURfQUxJR05fTEVGVAogICAgICAgICAgICBNRU5VSVRFTSAiJlplbnRyaWVydFx0Q3RybCtFIiwgICAgSURfQUxJR05fQ0VOVEVSCiAgICAgICAgICAgIE1FTlVJVEVNICImUmVjaHRzXHRDdHJsK1IiLCAgICAgICBJRF9BTElHTl9SSUdIVAogICAgICAgIEVORAogICAgRU5ECkVORAo=