LyoKICogQ29weXJpZ2h0IDIwMDAgSnVuaWNoaSBLdWNoaW5pc2hpCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfSkFQQU5FU0UsIFNVQkxBTkdfREVGQVVMVAoKU1lTTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewogTUVOVUlURU0gIoyzgsyDVINDg1mCyZbfgrcoJlIpIiwgNjE3MjgKIE1FTlVJVEVNICKI2pOuKCZNKSIsIDYxNDU2CiBNRU5VSVRFTSAig1SDQ4NZlc+NWCgmUykiLCA2MTQ0MAogTUVOVUlURU0gIoNBg0ODUoOTibsoJk4pIiwgNjE0NzIKIE1FTlVJVEVNICKNxZHllVxcjqYoJlgpIiwgNjE0ODgKIE1FTlVJVEVNIFNFUEFSQVRPUgogTUVOVUlURU0gIpXCgraC6SgmQylcdEFsdC1GNCIsIDYxNTM2CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICKDQYN2g4qDUIFbg1aDh4OTgsyQ2ILokdaCpigmVykuLi5cdEN0cmwtRXNjIiwgNjE3NDQKIE1FTlVJVEVNIFNFUEFSQVRPUgogTUVOVUlURU0gIldpbmWCyYLCgqKCxCgmQSkgLi4uIiwgNjE3NjEKIE1FTlVJVEVNICKDjYNPgsmO6IKqgqmC6ILwjmOCtygmUCkiLCA2MTc2Mgp9CgpFRElUTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewogICAgICAgIFBPUFVQICIiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgICAgIE1FTlVJVEVNICKMs4LJlt+CtygmVSkiLCBFTV9VTkRPCiAgICAgICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgICAgIE1FTlVJVEVNICKQ2ILojuaC6CgmVCkiLCBXTV9DVVQKICAgICAgICAgICAgICAgIE1FTlVJVEVNICKDUoNzgVsoJkMpIiwgV01fQ09QWQogICAgICAgICAgICAgICAgTUVOVUlURU0gIpNcXILolXSCrygmUCkiLCBXTV9QQVNURQogICAgICAgICAgICAgICAgTUVOVUlURU0gIo3tj5woJkQpIiwgV01fQ0xFQVIKICAgICAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgICAgICAgICAgTUVOVUlURU0gIpFJkfAoJkEpIiwgRU1fU0VUU0VMCiAgICAgICAgRU5ECn0KCk1TR0JPWCBESUFMT0cgMTAwLCA4MCwgMjE2LCAxNjgKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOSwgIk1TIFVJIEdvdGhpYyIKQkVHSU4KICAgICAgICBJQ09OICIiLCAxMDg4LCA4LCAyMCwgMTYsIDE2LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUKICAgICAgICBMVEVYVCAiIiwgMTAwLCAzMiwgNCwgMTc2LCA0OCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKICAgICAgICBQVVNIQlVUVE9OICJPSyIsIDEsIDE2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAit6zdvtkiLCAyLCA2NCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIpKGjn4oJkEpIiwgMywgMTEyLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAijcSOjo1zKCZSKSIsIDQsIDE2MCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIpazjosoJkkpIiwgNSwgMjA4LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAigs2CoigmWSkiLCA2LCAyNTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICKCooKigqYoJk4pIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCkVORAo=