LyoKICogQ29weXJpZ2h0IDIwMDMgT3ZlIEvldmVuLCBUcmFuc0dhbWluZyBUZWNobm9sb2dpZXMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKLyogc2VlIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9tc2ovMDM5OC9kY29tLmh0bSAqLwovKiBhbmQgdGhlIG9mZmljaWFsIERDT00gc3BlY2lmaWNhdGlvbgogKiAodGhlcmUncyBhIGNvcHkgYXQgaHR0cDovL3d3dy5ncmltZXMuZGVtb24uY28udWsvRENPTS9EQ09NU3BlYy5odG0pICovCgppbXBvcnQgInVua253bi5pZGwiOwoKWwogIHV1aWQoOTlmY2ZlNjAtNTI2MC0xMDFiLWJiY2ItMDBhYTAwMjEzNDdhKSwKICBwb2ludGVyX2RlZmF1bHQodW5pcXVlKQpdCmludGVyZmFjZSBPYmplY3RScGNCYXNlVHlwZXMKewogIHR5cGVkZWYgdW5zaWduZWQgaHlwZXIgSUQ7CiAgdHlwZWRlZiBJRCBNSUQ7CiAgdHlwZWRlZiBJRCBPWElEOwogIHR5cGVkZWYgSUQgT0lEOwogIHR5cGVkZWYgSUQgU0VUSUQ7CiAgdHlwZWRlZiBHVUlEIElQSUQ7CiAgdHlwZWRlZiBHVUlEIENJRDsKICB0eXBlZGVmIFJFRkdVSUQgUkVGSVBJRDsKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09NX01JTk9SX1ZFUlNJT05fMSA9IDE7CiAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09NX01JTk9SX1ZFUlNJT05fMiA9IDI7CgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTV9NQUpPUl9WRVJTSU9OID0gNTsKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT01fTUlOT1JfVkVSU0lPTiA9IDM7CgogIHR5cGVkZWYgc3RydWN0IHRhZ0NPTVZFUlNJT04gewogICAgdW5zaWduZWQgc2hvcnQgTWFqb3JWZXJzaW9uOwogICAgdW5zaWduZWQgc2hvcnQgTWlub3JWZXJzaW9uOwogIH0gQ09NVkVSU0lPTjsKCiAgY29uc3QgdW5zaWduZWQgbG9uZyBPUlBDRl9OVUxMID0gMDsKICBjb25zdCB1bnNpZ25lZCBsb25nIE9SUENGX0xPQ0FMID0gMTsKICBjb25zdCB1bnNpZ25lZCBsb25nIE9SUENGX1JFU0VSVkVEMSA9IDI7CiAgY29uc3QgdW5zaWduZWQgbG9uZyBPUlBDRl9SRVNFUlZFRDIgPSA0OwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgT1JQQ0ZfUkVTRVJWRUQzID0gODsKICBjb25zdCB1bnNpZ25lZCBsb25nIE9SUENGX1JFU0VSVkVENCA9IDE2OwoKICB0eXBlZGVmIHN0cnVjdCB0YWdPUlBDX0VYVEVOVCB7CiAgICBHVUlEIGlkOwogICAgdW5zaWduZWQgbG9uZyBzaXplOwogICAgW3NpemVfaXMoKHNpemUrNykmfjcpXSBieXRlIGRhdGFbXTsKICB9IE9SUENfRVhURU5UOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdPUlBDX0VYVEVOVF9BUlJBWSB7CiAgICB1bnNpZ25lZCBsb25nIHNpemU7CiAgICB1bnNpZ25lZCBsb25nIHJlc2VydmVkOwogICAgW3NpemVfaXMoKHNpemUrMSkmfjEsKSwgdW5pcXVlXSBPUlBDX0VYVEVOVCAqKmV4dGVudDsKICB9IE9SUENfRVhURU5UX0FSUkFZOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdPUlBDVEhJUyB7CiAgICBDT01WRVJTSU9OIHZlcnNpb247CiAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDE7CiAgICBDSUQgY2lkOwogICAgW3VuaXF1ZV0gT1JQQ19FWFRFTlRfQVJSQVkgKmV4dGVuc2lvbnM7CiAgfSBPUlBDVEhJUzsKCiAgdHlwZWRlZiBzdHJ1Y3QgdGFnT1JQQ1RIQVQgewogICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgIFt1bmlxdWVdIE9SUENfRVhURU5UX0FSUkFZICpleHRlbnNpb25zOwogIH0gT1JQQ1RIQVQ7CgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5DQURHX0lQX1VEUCA9IDB4MDg7CiAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkNBQ05fSVBfVENQID0gMHgwNzsKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOQ0FER19JUFggPSAweDBFOwogIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5DQUNOX1NQWCA9IDB4MEM7CiAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkNBQ05fTkJfTkIgPSAweDEyOwogIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5DQUNOX05CX0lQWCA9IDB4MEQ7CiAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkNBQ05fRE5FVF9OU1AgPSAweDA0OwogIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5DQUNOX0hUVFAgPSAweDFGOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdTVFJJTkdCSU5ESU5HIHsKICAgIHVuc2lnbmVkIHNob3J0IHdUb3dlcklkOwogICAgW3N0cmluZ10gdW5zaWduZWQgc2hvcnQgYU5ldHdvcmtBZGRyW107CiAgfSBTVFJJTkdCSU5ESU5HOwoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT01fQ19BVVRIWl9OT05FID0gMHhmZmZmOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdTRUNVUklUWUJJTkRJTkcgewogICAgdW5zaWduZWQgc2hvcnQgd0F1dGhuU3ZjOwogICAgdW5zaWduZWQgc2hvcnQgd0F1dGh6U3ZjOwogICAgW3N0cmluZ10gdW5zaWduZWQgc2hvcnQgYVByaW5jTmFtZVtdOwogIH0gU0VDVVJJVFlCSU5ESU5HOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdEVUFMU1RSSU5HQVJSQVkgewogICAgdW5zaWduZWQgc2hvcnQgd051bUVudHJpZXM7CiAgICB1bnNpZ25lZCBzaG9ydCB3U2VjdXJpdHlPZmZzZXQ7CiAgICBbc2l6ZV9pcyh3TnVtRW50cmllcyldIHVuc2lnbmVkIHNob3J0IGFTdHJpbmdBcnJheVtdOwogIH0gRFVBTFNUUklOR0FSUkFZOwoKICBjb25zdCB1bnNpZ25lZCBsb25nIE9CSlJFRl9TSUdOQVRVUkUgPSAweDU3NGY0NTRkOyAvKiAiTUVPVyIgKi8KICBjb25zdCB1bnNpZ25lZCBsb25nIE9CSlJFRl9TVEFOREFSRCA9IDB4MTsKICBjb25zdCB1bnNpZ25lZCBsb25nIE9CSlJFRl9IQU5ETEVSID0gMHgyOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgT0JKUkVGX0NVU1RPTSA9IDB4NDsKICBjb25zdCB1bnNpZ25lZCBsb25nIFNPUkZfT1hSRVMxID0gMHgxOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzIgPSAweDIwOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzMgPSAweDQwOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzQgPSAweDgwOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzUgPSAweDEwMDsKICBjb25zdCB1bnNpZ25lZCBsb25nIFNPUkZfT1hSRVM2ID0gMHgyMDA7CiAgY29uc3QgdW5zaWduZWQgbG9uZyBTT1JGX09YUkVTNyA9IDB4NDAwOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcgU09SRl9PWFJFUzggPSAweDgwMDsKICBjb25zdCB1bnNpZ25lZCBsb25nIFNPUkZfTlVMTCA9IDB4MDsKICBjb25zdCB1bnNpZ25lZCBsb25nIFNPUkZfTk9QSU5HID0gMHgxMDAwOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdTVERPQkpSRUYgewogICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgIHVuc2lnbmVkIGxvbmcgY1B1YmxpY1JlZnM7CiAgICBPWElEIG94aWQ7CiAgICBPSUQgb2lkOwogICAgSVBJRCBpcGlkOwogIH0gU1RET0JKUkVGOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdPQkpSRUYgewogICAgdW5zaWduZWQgbG9uZyBzaWduYXR1cmU7CiAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgR1VJRCBpaWQ7CiAgICBbc3dpdGNoX2lzKGZsYWdzKV0gdW5pb24gewogICAgW2Nhc2UoT0JKUkVGX1NUQU5EQVJEKV0gc3RydWN0IE9SX1NUQU5EQVJEIHsKICAgICAgICBTVERPQkpSRUYgc3RkOwogICAgICAgIERVQUxTVFJJTkdBUlJBWSBzYVJlc0FkZHI7CiAgICAgIH0gdV9zdGFuZGFyZDsKICAgIFtjYXNlKE9CSlJFRl9IQU5ETEVSKV0gc3RydWN0IE9SX0hBTkRMRVIgewogICAgICAgIFNURE9CSlJFRiBzdGQ7CiAgICAgICAgQ0xTSUQgY2xzaWQ7CiAgICAgICAgRFVBTFNUUklOR0FSUkFZIHNhUmVzQWRkcjsKICAgICAgfSB1X2hhbmRsZXI7CiAgICBbY2FzZShPQkpSRUZfQ1VTVE9NKV0gc3RydWN0IE9SX0NVU1RPTSB7CiAgICAgICAgQ0xTSUQgY2xzaWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjYkV4dGVuc2lvbjsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpemU7CiAgICAgICAgW3NpemVfaXMoc2l6ZSksIHJlZl0gYnl0ZSAqcERhdGE7CiAgICAgIH0gdV9jdXN0b207CiAgICB9IHVfb2JqcmVmOwogIH0gT0JKUkVGOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdNSW50ZXJmYWNlUG9pbnRlciB7CiAgICBVTE9ORyB1bENudERhdGE7CiAgICBbc2l6ZV9pcyh1bENudERhdGEpXSBCWVRFIGFiRGF0YVtdOwogIH0gTUludGVyZmFjZVBvaW50ZXI7CgogIHR5cGVkZWYgW3VuaXF1ZV0gTUludGVyZmFjZVBvaW50ZXIgKlBNSW50ZXJmYWNlUG9pbnRlcjsKCn0gLyogaW50ZXJmYWNlIE9iamVjdFJwY0Jhc2VUeXBlcyAqLwoKWwogIG9iamVjdCwKICB1dWlkKDAwMDAwMTMxLTAwMDAtMDAwMC1DMDAwLTAwMDAwMDAwMDA0NikKXQppbnRlcmZhY2UgSVJlbVVua25vd24gOiBJVW5rbm93bgp7CiAgdHlwZWRlZiBbdW5pcXVlXSBJUmVtVW5rbm93biAqTFBSRU1VTktOT1dOOwoKICB0eXBlZGVmIHN0cnVjdCB0YWdSRU1RSVJFU1VMVCB7CiAgICBIUkVTVUxUIGhSZXN1bHQ7CiAgICBTVERPQkpSRUYgc3RkOwogIH0gUkVNUUlSRVNVTFQ7CgogIHR5cGVkZWYgc3RydWN0IHRhZ1JFTUlOVEVSRkFDRVJFRiB7CiAgICBJUElEIGlwaWQ7CiAgICB1bnNpZ25lZCBsb25nIGNQdWJsaWNSZWZzOwogICAgdW5zaWduZWQgbG9uZyBjUHJpdmF0ZVJlZnM7CiAgfSBSRU1JTlRFUkZBQ0VSRUY7IAoKICBIUkVTVUxUIFJlbVF1ZXJ5SW50ZXJmYWNlKAogICAgW2luXSBSRUZJUElEIHJpcGlkLAogICAgW2luXSB1bnNpZ25lZCBsb25nIGNSZWZzLAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBjSWlkcywKICAgIFtpbiwgc2l6ZV9pcyhjSWlkcyldIElJRCAqaWlkcywKICAgIFtvdXQsIHNpemVfaXMoLGNJaWRzKV0gUkVNUUlSRVNVTFQgKipwcFFJUmVzdWx0cyk7CgogIEhSRVNVTFQgUmVtQWRkUmVmKAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBjSW50ZXJmYWNlUmVmcywKICAgIFtpbiwgc2l6ZV9pcyhjSW50ZXJmYWNlUmVmcyldIFJFTUlOVEVSRkFDRVJFRiogSW50ZXJmYWNlUmVmcywKICAgIFtvdXQsIHNpemVfaXMoY0ludGVyZmFjZVJlZnMpXSBIUkVTVUxUICpwUmVzdWx0cyk7CgogIEhSRVNVTFQgUmVtUmVsZWFzZSgKICAgIFtpbl0gdW5zaWduZWQgc2hvcnQgY0ludGVyZmFjZVJlZnMsCiAgICBbaW4sIHNpemVfaXMoY0ludGVyZmFjZVJlZnMpXSBSRU1JTlRFUkZBQ0VSRUYqIEludGVyZmFjZVJlZnMpOwp9CgpbCiAgb2JqZWN0LAogIHV1aWQoMDAwMDAxNDItMDAwMC0wMDAwLUMwMDAtMDAwMDAwMDAwMDQ2KQpdCmludGVyZmFjZSBJUmVtVW5rbm93bjIgOiBJUmVtVW5rbm93bgp7CiAgdHlwZWRlZiBbdW5pcXVlXSBJUmVtVW5rbm93bjIgKkxQUkVNVU5LTk9XTjI7CgogIEhSRVNVTFQgUmVtUXVlcnlJbnRlcmZhY2UyKAogICAgW2luXSBSRUZJUElEIHJpcGlkLAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBjSWlkcywKICAgIFtpbiwgc2l6ZV9pcyhjSWlkcyldIElJRCAqaWlkcywKICAgIFtvdXQsIHNpemVfaXMoY0lpZHMpXSBIUkVTVUxUICpwaHIsCiAgICBbb3V0LCBzaXplX2lzKGNJaWRzKV0gTUludGVyZmFjZVBvaW50ZXIgKipwcE1JRik7Cn0KCmNwcF9xdW90ZSgiI2lmIDAiKQpbCiAgdXVpZCg5OWZjZmVjNC01MjYwLTEwMWItYmJjYi0wMGFhMDAyMTM0N2EpLAogIHBvaW50ZXJfZGVmYXVsdCh1bmlxdWUpCl0KaW50ZXJmYWNlIElPWElEUmVzb2x2ZXIKewogIFtpZGVtcG90ZW50XSBlcnJvcl9zdGF0dXNfdCBSZXNvbHZlT3hpZCgKICAgIFtpbl0gaGFuZGxlX3QgaFJwYywKICAgIFtpbl0gT1hJRCAqcE94aWQsCiAgICBbaW5dIHVuc2lnbmVkIHNob3J0IGNSZXF1ZXN0ZWRQcm90c2VxcywKICAgIFtpbiwgcmVmLCBzaXplX2lzKGNSZXF1ZXN0ZWRQcm90c2VxcyldIHVuc2lnbmVkIHNob3J0IGFyUmVxdWVzdGVkUHJvdHNlcXNbXSwKICAgIFtvdXQsIHJlZl0gRFVBTFNUUklOR0FSUkFZICoqcHBkc2FPeGlkQmluZGluZ3MsCiAgICBbb3V0LCByZWZdIElQSUQgKnBpcGlkUmVtVW5rbm93biwKICAgIFtvdXQsIHJlZl0gRFdPUkQgKnBBdXRobkhpbnQpOwoKICBbaWRlbXBvdGVudF0gZXJyb3Jfc3RhdHVzX3QgU2ltcGxlUGluZygKICAgIFtpbl0gaGFuZGxlX3QgaFJwYywKICAgIFtpbl0gU0VUSUQgKnBTZXRJZCk7CgogIFtpZGVtcG90ZW50XSBlcnJvcl9zdGF0dXNfdCBDb21wbGV4UGluZygKICAgIFtpbl0gaGFuZGxlX3QgaFJwYywKICAgIFtpbiwgb3V0XSBTRVRJRCAqcFNldElkLAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBTZXF1ZW5jZU51bSwKICAgIFtpbl0gdW5zaWduZWQgc2hvcnQgY0FkZFRvU2V0LAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBjRGVsRnJvbVNldCwKICAgIFtpbiwgdW5pcXVlLCBzaXplX2lzKGNBZGRUb1NldCldIE9JRCBBZGRUb1NldFtdLAogICAgW2luLCB1bmlxdWUsIHNpemVfaXMoY0RlbEZyb21TZXQpXSBPSUQgRGVsRnJvbVNldFtdLAogICAgW291dF0gdW5zaWduZWQgc2hvcnQgKnBQaW5nQmFja29mZkZhY3Rvcik7CgogIFtpZGVtcG90ZW50XSBlcnJvcl9zdGF0dXNfdCBTZXJ2ZXJBbGl2ZSgKICAgIFtpbl0gaGFuZGxlX3QgaFJwYyk7CgogIFtpZGVtcG90ZW50XSBlcnJvcl9zdGF0dXNfdCBSZXNvbHZlT3hpZDIoCiAgICBbaW5dIGhhbmRsZV90IGhScGMsCiAgICBbaW5dIE9YSUQgKnBPeGlkLAogICAgW2luXSB1bnNpZ25lZCBzaG9ydCBjUmVxdWVzdGVkUHJvdHNlcXMsCiAgICBbaW4sIHJlZiwgc2l6ZV9pcyhjUmVxdWVzdGVkUHJvdHNlcXMpXSB1bnNpZ25lZCBzaG9ydCBhclJlcXVlc3RlZFByb3RzZXFzW10sCiAgICBbb3V0LCByZWZdIERVQUxTVFJJTkdBUlJBWSAqKnBwZHNhT3hpZEJpbmRpbmdzLAogICAgW291dCwgcmVmXSBJUElEICpwaXBpZFJlbVVua25vd24sCiAgICBbb3V0LCByZWZdIERXT1JEICpwQXV0aG5IaW50LAogICAgW291dCwgcmVmXSBDT01WRVJTSU9OICpwQ29tVmVyc2lvbik7IAp9CgpbCiAgdXVpZCg0ZDlmNGFiOC03ZDFjLTExY2YtODYxZS0wMDIwYWY2ZTdjNTcpLAogIHBvaW50ZXJfZGVmYXVsdCh1bmlxdWUpCl0KaW50ZXJmYWNlIElSZW1vdGVBY3RpdmF0aW9uCnsKICBjb25zdCB1bnNpZ25lZCBsb25nIE1PREVfR0VUX0NMQVNTX09CSkVDVCA9IDB4ZmZmZmZmZmY7CgogIEhSRVNVTFQgUmVtb3RlQWN0aXZhdGlvbigKICAgIFtpbl0gaGFuZGxlX3QgaFJwYywKICAgIFtpbl0gT1JQQ1RISVMgKk9SUEN0aGlzLAogICAgW291dF0gT1JQQ1RIQVQgKk9SUEN0aGF0LAogICAgW2luXSBHVUlEICpDbHNpZCwKICAgIFtpbiwgc3RyaW5nLCB1bmlxdWVdIFdDSEFSICpwd3N6T2JqZWN0TmFtZSwKICAgIFtpbiwgdW5pcXVlXSBNSW50ZXJmYWNlUG9pbnRlciAqcE9iamVjdFN0b3JhZ2UsCiAgICBbaW5dIERXT1JEIENsaWVudEltcExldmVsLAogICAgW2luXSBEV09SRCBNb2RlLAogICAgW2luXSBEV09SRCBJbnRlcmZhY2VzLAogICAgW2luLCB1bmlxdWUsIHNpemVfaXMoSW50ZXJmYWNlcyldIElJRCAqcElJRHMsCiAgICBbaW5dIHVuc2lnbmVkIHNob3J0IGNSZXF1ZXN0ZWRQcm90c2VxcywKICAgIFtpbiwgc2l6ZV9pcyhjUmVxdWVzdGVkUHJvdHNlcXMpXSB1bnNpZ25lZCBzaG9ydCBSZXF1ZXN0ZWRQcm90c2Vxc1tdLAogICAgW291dF0gT1hJRCAqcE94aWQsCiAgICBbb3V0XSBEVUFMU1RSSU5HQVJSQVkgKipwcGRzYU94aWRCaW5kaW5ncywKICAgIFtvdXRdIElQSUQgKnBpcGlkUmVtVW5rbm93biwKICAgIFtvdXRdIERXT1JEICpwQXV0aG5IaW50LAogICAgW291dF0gQ09NVkVSU0lPTiAqcFNlcnZlclZlcnNpb24sCiAgICBbb3V0XSBIUkVTVUxUICpwaHIsCiAgICBbb3V0LHNpemVfaXMoSW50ZXJmYWNlcyldIE1JbnRlcmZhY2VQb2ludGVyICoqcHBJbnRlcmZhY2VEYXRhLAogICAgW291dCxzaXplX2lzKEludGVyZmFjZXMpXSBIUkVTVUxUICpwUmVzdWx0cyk7Cn0KY3BwX3F1b3RlKCIjZW5kaWYiKQo=