LyoKICogV2luZUZpbGUKICogSHVuZ2FyaWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwMiBab2x5IE5hZ3kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfREVGQVVMVAoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKICAgIFBPUFVQICImRuFqbCIgIHsKICAgICAgICBNRU5VSVRFTSAiJk1lZ3luaXThc1x0RW50ZXIiLCAgICAgICAgICAgSURfQUNUSVZBVEUKICAgICAgICBNRU5VSVRFTSAiwXQmaGVseWV66XMuLi5cdEY3IiwgICAgICAgICAgSURfRklMRV9NT1ZFCiAgICAgICAgTUVOVUlURU0gIiZN4XNvbOFzLi4uXHRGOCIsICAgICAgICAgICAgIElEX0ZJTEVfQ09QWQogICAgICAgIE1FTlVJVEVNICImVuFn82xhcG9uLi4uXHRGOSIsICAgICAgICAgICAxMTgKICAgICAgICBNRU5VSVRFTSAiJlT2cmzpc1x0RGVsIiwgICAgICAgICAgICAgICAgSURfRklMRV9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiwXQmbmV2ZXrpcy4uLiIsICAgICAgICAgICAgICAgMTA5CiAgICAgICAgTUVOVUlURU0gIlQmdWxhamRvbnPhZ29rLi4uXHRBbHQrRW50ZXIiLCBJRF9FRElUX1BST1BFUlRJRVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkJlY3NvbWFnb2zhcy4uLiIsICAgICAgICAgICAgMTE5CiAgICAgICAgTUVOVUlURU0gIksmaWNzb21hZ29s4XMuLi4iLCAgICAgICAgICAgIDEyMAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRnV0dGF04XMuLi4iLCAgICAgICAgICAgICAgICBJRF9FWEVDVVRFCiAgICAgICAgTUVOVUlURU0gIiZOeW9tdGF04XMuLi4iLCAgICAgICAgICAgICAgIDEwMgogICAgICAgIE1FTlVJVEVNICJU4XJz7XThcy4uLiIsICAgICAgICAgICAgICAgICAxMDMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAi2mogJm1hcHBhLi4uIiwgICAgICAgICAgICAgICAgMTExCiAgICAgICAgTUVOVUlURU0gIktlcmUmc+lzLi4uIiwgICAgICAgICAgICAgICAgIDEwNAogICAgICAgIE1FTlVJVEVNICJG4Wpsb2sga2kmduFsYXN6dOFzYS4uLiIsICAgICAxMTYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICImS2ls6XDpc1x0QWx0K1giLCAgICAgICAgICAgICBJRF9GSUxFX0VYSVQKI2Vsc2UKICAgICAgICBNRU5VSVRFTSAiJktpbOlw6XMiLCAgICAgICAgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbmRpZgogICAgfQoKICAgIFBPUFVQICImTGVtZXoiICB7CiAgICAgICAgTUVOVUlURU0gIkxlbWV6ICZt4XNvbOFzYS4uLiIsICAgICAgICAgIDIwMQogICAgICAgIE1FTlVJVEVNICImTGVtZXpjaW1rZS4uLiIsICAgICAgICAgICAgICAyMDIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZvcm1hdOFs4XMuLi4iLCAgICAgICAgICAgICAgSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQogICAgICAgIE1FTlVJVEVNICImUmVuZHN6ZXJsZW1leiBr6XN67XTpc2UuLi4iLCAtMSAgLypUT0RPKi8KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZI4WzzemF0aSBtZWdoYWp08yBjc2F0bGFrb3p0YXThc2EiLElEX0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNICJI4WzzemF0aSBtZWdoYWp08yBsZXbhbGFzenThc2EiLElEX0RJU0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJNZWdvc3p04XMuLi4iLCAgICAgICAgICAgICAgICAyNTQKICAgICAgICBNRU5VSVRFTSAiTWVnb3N6dOFzICZtZWdzevxudGV06XNlLi4uIiwgMjU1CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIk1lZ2hhanTzIGtpJnbhbGFzenThc2EuLi4iLCAgIDI1MQogICAgfQoKICAgIFBPUFVQICImTWFwcOFrIiAgewogICAgICAgIE1FTlVJVEVNICImS/Z2ZXRrZXr1IHN6aW50XHQrIiwgICAgICAgICAzMDEKICAgICAgICBNRU5VSVRFTSAiJkZhIGtpbnlpdOFzYVx0KiIsICAgICAgICAgICAgMzAyCiAgICAgICAgTUVOVUlURU0gIiZNaW5kZW4ga2lueWl04XNhXHRTdHJnKyoiLCAgIDMwMwogICAgICAgIE1FTlVJVEVNICJGYSAmYmVjc3Vr4XNhXHQtIiwgICAgICAgICAgICAzMDQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkd5ZXJtZWtlayBraWplbPZs6XNlIiwgICAgICAgNTA1CiAgICB9CgogICAgUE9QVVAgIiZO6XpldCIgIHsKICAgICAgICBNRU5VSVRFTSAiJlRlbGplcyIsICAgICAgICAgICAgICAgICAgICAgNDEzCiAgICAgICAgTUVOVUlURU0gIiZL9m55dnThcmZhIiwgICAgICAgICAgICAgICAgIDQxMQogICAgICAgIE1FTlVJVEVNICImQ3NhayBtYXBw4WsiLCAgICAgICAgICAgICAgICA0MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZlbG9zenThcyIsICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTul2IiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX05BTUUKICAgICAgICBNRU5VSVRFTSAiJk1pbmRlbiBy6XN6bGV0IiwgICAgICAgICAgICAgSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImRWd5ZWRpLi4uIiwgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlJlbmRleulzIG7pdiBzemVyaW50IiwgICAgICAgSURfVklFV19TT1JUX05BTUUKICAgICAgICBNRU5VSVRFTSAiUmVuZGV66XMgayZpdGVyamVzenTpcyBzemVyaW50IixJRF9WSUVXX1NPUlRfVFlQRQogICAgICAgIE1FTlVJVEVNICJSZW5kZXrpcyAmbelyZXQgc3plcmludCIsICAgICBJRF9WSUVXX1NPUlRfU0laRQogICAgICAgIE1FTlVJVEVNICJSZW5kZXrpcyAmZOF0dW0gc3plcmludCIsICAgICBJRF9WSUVXX1NPUlRfREFURQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJFZ3llZGkgcmVuZGV66XMgJi4uLiIsICAgICAgICBJRF9WSUVXX0ZJTFRFUgogICAgfQoKICAgIFBPUFVQICImQmXhbGztdOFzb2siICB7CiAgICAgICAgTUVOVUlURU0gIiZNZWdlcvVz7XTpcy4uLiIsICAgICAgICAgICAgIDUwMQogICAgICAgIE1FTlVJVEVNICImQmV0+2vpc3psZXQuLi4iLCAgICAgICAgICAgICBJRF9TRUxFQ1RfRk9OVAogICAgICAgIE1FTlVJVEVNICJFJmd5ZWRpIGVzemv2enThci4uLiIsICAgICAgICA1MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkVzemv2enThciIsICAgICAgICAgICAgICAgICAgSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImTGVtZXp04XIiLCAgICAgICAgICAgICAgICAgICBJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImwWxsYXBvdHNvciIsICAgICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIiZUZWxqZXMga+lwZXJuefVzXHRDdHJsK1NoaWZ0K1MiLElEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiUHJvZ3JhbWZ1dHRhdOFzIHV04W5pICZzemltYvNsdW0iLDUwNAogICAgICAgIE1FTlVJVEVNICJNZWdzevxudGV06XMgYSB04XJvbOFzIHbpZ+luIiw1MTEKICAgIH0KCgogICAgUE9QVVAgIiZCaXp0b25z4WciICB7CiAgICAgICAgTUVOVUlURU0gIiZIb3p64WbpculzLi4uIiwgICAgICAgICAgICAgIDYwNQogICAgICAgIE1FTlVJVEVNICImTmFwbPN64XMuLi4iLCAgICAgICAgICAgICAgICA2MDYKICAgICAgICBNRU5VSVRFTSAiJlR1bGFqZG9ub3MuLi4iLCAgICAgICAgICAgICAgNjA3CiAgICB9CgogICAgUE9QVVAgIiZBYmxha29rIiAgewogICAgICAgIE1FTlVJVEVNICLaaiBhJmJsYWsiLCAgICAgICAgICAgICAgICAgICBJRF9XSU5ET1dfTkVXCiAgICAgICAgTUVOVUlURU0gIkzpcGNz9XpldGVzIGVscmVuZGV66XNcdEN0cmwrRjUiLElEX1dJTkRPV19DQVNDQURFCiAgICAgICAgTUVOVUlURU0gIk1vemFpa3N6ZXL7IGVscmVuZGV66XMgJnbtenN6aW50ZXNlbiIsSURfV0lORE9XX1RJTEVfSE9SWgogICAgICAgIE1FTlVJVEVNICJNb3phaWtzemVy+yBlbHJlbmRleulzIGb8Jmdn9WxlZ2VzZW5cdEN0cmwrRjQiLElEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJBdXRvbWF0aWt1cyBlbHJlbmRleulzIiwgICAgICBJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCiAgICAgICAgTUVOVUlURU0gIiZTemltYvNsdW0gZWxyZW5kZXrpcyIsICAgICAgIElEX1dJTkRPV19BUlJBTkdFCiAgICAgICAgTUVOVUlURU0gIiZGcmlzc+106XNcdEY1IiwgICAgICAgICAgICAgIElEX1JFRlJFU0gKICAgIH0KCiAgICBQT1BVUCAiJj8iICB7CiAgICAgICAgTUVOVUlURU0gIiZT+mfzIHTpbWFr9nL2a1x0RjEiLCAgICAgICAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiU/pn8yAma2VyZXPpcy4uLlx0RjEiLCAgICAgICAgSURfSEVMUAogICAgICAgIE1FTlVJVEVNICImSGFzem7hbGF0XHRGMSIsICAgICAgICAgICAgICBJRF9IRUxQX1VTSU5HCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZXaW5lZmlsZS1y82wuLi4iLCAgICAgICAgICAgIElEX0FCT1VUCiNpZmRlZiBfX1dJTkVfXwogICAgICAgIE1FTlVJVEVNICJXJmluZS1y82wuLi4iLCAgICAgICAgICAgICAgICBJRF9BQk9VVF9XSU5FCiNlbmRpZgogICAgfQp9CgoKSUREX0VYRUNVVEUgRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRnV0dGF04XMiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJlBhcmFuY3M6IiwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAogICAgRURJVFRFWFQgICAgICAgIDIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCiAgICBDT05UUk9MICAgICAgICAgIiZTemltYvNsdW1r6W50IiwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIk3pZ3NlIiwgMiwgMTU4LCAyMywgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZT+mfzIiwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQo=