LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIndpbmhlbHBfcmVzLmgiCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICLGxMDPKCZGKSIgewogIE1FTlVJVEVNICK/rbHiKCZPKS4uLiIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIsDOvOIoJlApIiwgTU5JRF9GSUxFX1BSSU5UCiAgTUVOVUlURU0gIsfBuLDFzSC8s8GkKCZTKS4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiwb634SgmRSkiLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIsbtwf0oJkUpIiB7CiAgIE1FTlVJVEVNICK6ubvnKCZDKS4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiwda8rigmQSkuLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICLDpbClx8coJkIpIiB7CiAgIE1FTlVJVEVNICLBpMDHKCZEKS4uLiIsIE1OSURfQktNS19ERUZJTkUKIH0KIFBPUFVQICK/ybzHKCZPKSIgewogICBQT1BVUAkisKG0ycfRILW1v/K4uyC6uMDMseIiCiAgIEJFR0lOCiAgICAgTUVOVUlURU0gIrHiursiLAlNTklEX09QVFNfSEVMUF9ERUZBVUxUCiAgICAgTUVOVUlURU0gIrq4wMyx4iIsCU1OSURfT1BUU19IRUxQX1ZJU0lCTEUKICAgICBNRU5VSVRFTSAiuri/qcHWwfYgvsqx4iIsCU1OSURfT1BUU19IRUxQX05PTlZJU0lCTEUKICBFTkQKICBNRU5VSVRFTSAiseK3zyIsCQlNTklEX09QVFNfSElTVE9SWQogIFBPUFVQICAgICKx27LDIgogIEJFR0lOCiAgICBNRU5VSVRFTSAiwNuw1CIsCQlNTklEX09QVFNfRk9OVFNfU01BTEwKICAgIE1FTlVJVEVNICK6uMXrIiwgICAgCU1OSURfT1BUU19GT05UU19OT1JNQUwKICAgIE1FTlVJVEVNICLFqbDUIiwgICAgIAlNTklEX09QVFNfRk9OVFNfTEFSR0UKICBFTkQKICBNRU5VSVRFTSAivcO9usXbILv2u/Mgu+e/6yIsCU1OSURfT1BUU19TWVNURU1fQ09MT1JTCiB9CiBQT1BVUCAitbW/8ri7KCZIKSIgewogICBNRU5VSVRFTSAitbW/8ri7ILvnv+u5/SgmTykiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICLH17vzIMCnKCZUKSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiwaS6uCgmSSkuLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIldpbmW/oSCw/MfPv6koJkEpIiwgTU5JRF9IRUxQX1dJTkUKI2VuZGlmCiB9Cn0KCgpJRERfSU5ERVggRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDIwMCwgMTkwIExBTkdVQUdFIExBTkdfS09SRUFOLCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOSwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiwM61pr26Igp7CiAgICBMSVNUQk9YIElEQ19JTkRFWExJU1QsIDEwLCAxMCwgMTgwLCAxNTAsIExCU19OT0lOVEVHUkFMSEVJR0hUIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgp9CgpJRERfU0VBUkNIIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAyMDAsIDE5MCBMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ERUZBVUxUClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDksICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIsOjseIiCnsKICAgIExURVhUICAivsbB9yCxuMf2tcfB9iC+ysC9IiwgLTEsIDEwLCAxMCwgMTgwLCAxNTAKfQoKLyogU3RyaW5ncyAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAp7ClNUSURfV0lORV9IRUxQLCAJIldpbmUgtbW/8ri7IgpTVElEX1dIRVJST1IsIAkJIr+ht68iClNUSURfV0FSTklORywgIAkJIrDmsO0iClNUSURfSU5GTywgIAkJIsGkurgiClNUSURfTk9UX0lNUExFTUVOVEVELCAJIrG4x/a1x8H2IL7KvtLAvSIKU1RJRF9ITFBGSUxFX0VSUk9SX3MsIAkitbW/8ri7IMbEwM8gYCVzJ7imIMDQtMIgtbXB3yC/wLf5ILnfu/0iClNUSURfSU5ERVgsIAkJIrjxwvcoJkMpIgpTVElEX0NPTlRFTlRTLAkJIr/kvuAiClNUSURfQkFDSywgCQkitdq3zigmQikiClNUSURfQUxMX0ZJTEVTLCAJIrjwtecgxsTAzyAoKi4qKSIKU1RJRF9IRUxQX0ZJTEVTX0hMUCwgCSK1tb/yuLsgxsTAzyAoKi5obHApIgpTVElEX0ZJTEVfTk9UX0ZPVU5EX3MJIiVzwLsgw6PAuyC89iC++L3AtM+02ScuIMDMIMbEwM/AuyDB98GiIMOjsNq9wLTPse4/IgpTVElEX05PX1JJQ0hFRElUCSJyaWNoZWRpdCAgsbjH9sC7IMOjwLu89iC+973AtM+02S4uIMPrvNLB3yIKU1RJRF9QU0hfSU5ERVgsCQkitbW/8ri7ILjxwvc6ICIKfQoKQ09OVEVYVF9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVApCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkJTUVOVUlURU0gIsHWvK4uLi4iLCAgICAgICBNTklEX0NUWFRfQU5OT1RBVEUKCQlNRU5VSVRFTSAiurm75yIsICAgICAgICAgICAgICAgIE1OSURfQ1RYVF9DT1BZCgkJTUVOVUlURU0gIsDOvOIuLi4iLCAgICAgICAgICAgIE1OSURfQ1RYVF9QUklOVAoJCVBPUFVQICAgICKx27LDIgoJCUJFR0lOCgkJCU1FTlVJVEVNICLBvLDUIiwgICAgICAgTU5JRF9DVFhUX0ZPTlRTX1NNQUxMCgkJCU1FTlVJVEVNICK6uMXrIiwgICAgICBNTklEX0NUWFRfRk9OVFNfTk9STUFMCgkJCU1FTlVJVEVNICKz0LDUIiwgICAgICAgTU5JRF9DVFhUX0ZPTlRTX0xBUkdFCgkJRU5ECgkJUE9QVVAgICAitbW/8ri7ICDH17vzILq4wMyx4iIKCQlCRUdJTgoJCQlNRU5VSVRFTSAiseK6uyIsICAgICBNTklEX0NUWFRfSEVMUF9ERUZBVUxUCgkJCU1FTlVJVEVNICK6uMDMseIiLCAgICAgTU5JRF9DVFhUX0hFTFBfVklTSUJMRQoJCQlNRU5VSVRFTSAivsggurjAzLHiIiwgTU5JRF9DVFhUX0hFTFBfTk9OVklTSUJMRQoJCUVORAoJCU1FTlVJVEVNICK9w726xdsgu/a78yC757/rIiwgICBNTklEX0NUWFRfU1lTVEVNX0NPTE9SUwoJRU5ECkVORAo=