LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQovKiAgZnRkZWJ1Zy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi8qICAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgZm9yIGFtaWdhIChib2R5KS4gICAgICAgICAgICAgICAgICAgICovDQovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuICAgICAgICovDQovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8NCi8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovDQovKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLw0KLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8NCi8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KDQogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgLyogVGhpcyBjb21wb25lbnQgY29udGFpbnMgdmFyaW91cyBtYWNyb3MgYW5kIGZ1bmN0aW9ucyB1c2VkIHRvIGVhc2UgdGhlICovDQogIC8qIGRlYnVnZ2luZyBvZiB0aGUgRnJlZVR5cGUgZW5naW5lLiAgSXRzIG1haW4gcHVycG9zZSBpcyBpbiBhc3NlcnRpb24gICAqLw0KICAvKiBjaGVja2luZywgdHJhY2luZywgYW5kIGVycm9yIGRldGVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qIFRoZXJlIGFyZSBub3cgdGhyZWUgZGVidWdnaW5nIG1vZGVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgLyogLSB0cmFjZSBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiAgIEVycm9yIGFuZCB0cmFjZSBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgbG9nIGZpbGUgKHdoaWNoIGNhbiBiZSB0aGUgKi8NCiAgLyogICBzdGFuZGFyZCBlcnJvciBvdXRwdXQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiAtIGVycm9yIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICAgT25seSBlcnJvciBtZXNzYWdlcyBhcmUgZ2VuZXJhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgLyogLSByZWxlYXNlIG1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiAgIE5vIGVycm9yIG1lc3NhZ2UgaXMgc2VudCBvciBnZW5lcmF0ZWQuICBUaGUgY29kZSBpcyBmcmVlIGZyb20gYW55ICAgKi8NCiAgLyogICBkZWJ1Z2dpbmcgcGFydHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KDQogIC8qDQogICAqIEJhc2VkIG9uIHRoZSBkZWZhdWx0IGZ0ZGVidWcuYywNCiAgICogcmVwbGFjZWQgdnByaW50ZigpIHdpdGggS1ZQcmludEYoKSwNCiAgICogY29tbWVudGVkIG91dCBleGl0KCksDQogICAqIHJlcGxhY2VkIGdldGVudigpIHdpdGggR2V0VmFyKCkuDQogICAqLw0KDQojaW5jbHVkZSA8ZXhlYy90eXBlcy5oPg0KI2luY2x1ZGUgPHV0aWxpdHkvdGFnaXRlbS5oPg0KI2luY2x1ZGUgPGRvcy9leGFsbC5oPg0KI2luY2x1ZGUgPGRvcy92YXIuaD4NCiNkZWZpbmUgX19OT0xJQkJBU0VfXw0KI2RlZmluZSBfX05PTE9CQUxJRkFDRV9fDQojZGVmaW5lIF9fVVNFX0lOTElORV9fDQojaW5jbHVkZSA8cHJvdG8vZG9zLmg+DQojaW5jbHVkZSA8Y2xpYi9kZWJ1Z19wcm90b3MuaD4NCg0KI2lmbmRlZiBfX2FtaWdhb3M0X18NCiAgZXh0ZXJuIHN0cnVjdCBMaWJyYXJ5ICpET1NCYXNlOw0KI2Vsc2UNCiAgZXh0ZXJuIHN0cnVjdCBET1NJRmFjZSAqSURPUzsNCiNlbmRpZg0KDQoNCiNpbmNsdWRlIDxmdDJidWlsZC5oPg0KI2luY2x1ZGUgRlRfRlJFRVRZUEVfSA0KI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSA0KDQoNCiNpZiBkZWZpbmVkKCBGVF9ERUJVR19MRVZFTF9FUlJPUiApDQoNCiAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8NCg0KICBGVF9CQVNFX0RFRiggdm9pZCApDQogIEZUX01lc3NhZ2UoIGNvbnN0IGNoYXIqICBmbXQsDQogICAgICAgICAgICAgIC4uLiApDQogIHsNCiAgICB2YV9saXN0ICBhcDsNCg0KDQogICAgdmFfc3RhcnQoIGFwLCBmbXQgKTsNCiAgICBLVlByaW50RiggZm10LCBhcCApOw0KICAgIHZhX2VuZCggYXAgKTsNCiAgfQ0KDQoNCiAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8NCg0KICBGVF9CQVNFX0RFRiggdm9pZCApDQogIEZUX1BhbmljKCBjb25zdCBjaGFyKiAgZm10LA0KICAgICAgICAgICAgLi4uICkNCiAgew0KICAgIHZhX2xpc3QgIGFwOw0KDQoNCiAgICB2YV9zdGFydCggYXAsIGZtdCApOw0KICAgIEtWUHJpbnRGKCBmbXQsIGFwICk7DQogICAgdmFfZW5kKCBhcCApOw0KDQovKiAgZXhpdCggRVhJVF9GQUlMVVJFICk7ICovDQogIH0NCg0KDQogIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRkZWJ1Zy5oICovDQoNCiAgRlRfQkFTRV9ERUYoIGludCApDQogIEZUX1Rocm93KCBGVF9FcnJvciAgICAgZXJyb3IsDQogICAgICAgICAgICBpbnQgICAgICAgICAgbGluZSwNCiAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlICkNCiAgew0KICAgIEZUX1VOVVNFRCggZXJyb3IgKTsNCiAgICBGVF9VTlVTRUQoIGxpbmUgKTsNCiAgICBGVF9VTlVTRUQoIGZpbGUgKTsNCg0KICAgIHJldHVybiAwOw0KICB9DQoNCiNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9FUlJPUiAqLw0KDQoNCg0KI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFDQoNCiAgLyogYXJyYXkgb2YgdHJhY2UgbGV2ZWxzLCBpbml0aWFsaXplZCB0byAwICovDQogIGludCAgZnRfdHJhY2VfbGV2ZWxzW3RyYWNlX2NvdW50XTsNCg0KDQogIC8qIGRlZmluZSBhcnJheSBvZiB0cmFjZSB0b2dnbGUgbmFtZXMgKi8NCiNkZWZpbmUgRlRfVFJBQ0VfREVGKCB4ICkgICN4ICwNCg0KICBzdGF0aWMgY29uc3QgY2hhciogIGZ0X3RyYWNlX3RvZ2dsZXNbdHJhY2VfY291bnQgKyAxXSA9DQogIHsNCiNpbmNsdWRlIEZUX0lOVEVSTkFMX1RSQUNFX0gNCiAgICBOVUxMDQogIH07DQoNCiN1bmRlZiBGVF9UUkFDRV9ERUYNCg0KDQogIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRkZWJ1Zy5oICovDQoNCiAgRlRfQkFTRV9ERUYoIEZUX0ludCApDQogIEZUX1RyYWNlX0dldF9Db3VudCggdm9pZCApDQogIHsNCiAgICByZXR1cm4gdHJhY2VfY291bnQ7DQogIH0NCg0KDQogIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRkZWJ1Zy5oICovDQoNCiAgRlRfQkFTRV9ERUYoIGNvbnN0IGNoYXIgKiApDQogIEZUX1RyYWNlX0dldF9OYW1lKCBGVF9JbnQgIGlkeCApDQogIHsNCiAgICBpbnQgIG1heCA9IEZUX1RyYWNlX0dldF9Db3VudCgpOw0KDQoNCiAgICBpZiAoIGlkeCA8IG1heCApDQogICAgICByZXR1cm4gZnRfdHJhY2VfdG9nZ2xlc1tpZHhdOw0KICAgIGVsc2UNCiAgICAgIHJldHVybiBOVUxMOw0KICB9DQoNCg0KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qIEluaXRpYWxpemUgdGhlIHRyYWNpbmcgc3ViLXN5c3RlbS4gIFRoaXMgaXMgZG9uZSBieSByZXRyaWV2aW5nIHRoZSAgICAqLw0KICAvKiB2YWx1ZSBvZiB0aGUgYEZUMl9ERUJVRycgZW52aXJvbm1lbnQgdmFyaWFibGUuICBJdCBtdXN0IGJlIGEgbGlzdCBvZiAgKi8NCiAgLyogdG9nZ2xlcywgc2VwYXJhdGVkIGJ5IHNwYWNlcywgYDsnLCBvciBgLCcuICBFeGFtcGxlOiAgICAgICAgICAgICAgICAgICovDQogIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiAgICBleHBvcnQgRlQyX0RFQlVHPSJhbnk6MyBtZW1vcnk6NyBzdHJlYW06NSIgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qIFRoaXMgcmVxdWVzdHMgdGhhdCBhbGwgbGV2ZWxzIGJlIHNldCB0byAzLCBleGNlcHQgdGhlIHRyYWNlIGxldmVsIGZvciAqLw0KICAvKiB0aGUgbWVtb3J5IGFuZCBzdHJlYW0gY29tcG9uZW50cyB3aGljaCBhcmUgc2V0IHRvIDcgYW5kIDUsICAgICAgICAgICAgKi8NCiAgLyogcmVzcGVjdGl2ZWx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiBTZWUgdGhlIGZpbGUgYGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oJyBmb3IgZGV0YWlscyBvZiB0aGUgKi8NCiAgLyogYXZhaWxhYmxlIHRvZ2dsZSBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiBUaGUgbGV2ZWwgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDc7IDAgbWVhbnMgcXVpZXQgKGV4Y2VwdCBmb3Igc2VyaW91cyAgKi8NCiAgLyogcnVudGltZSBlcnJvcnMpLCBhbmQgNyBtZWFucyBfdmVyeV8gdmVyYm9zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICBGVF9CQVNFX0RFRiggdm9pZCApDQogIGZ0X2RlYnVnX2luaXQoIHZvaWQgKQ0KICB7DQovKiAgY29uc3QgY2hhciogIGZ0Ml9kZWJ1ZyA9IGdldGVudiggIkZUMl9ERUJVRyIgKTsgKi8NCiAgICBjaGFyICAgICAgICAgYnVmWzI1Nl07DQogICAgY29uc3QgY2hhciogIGZ0Ml9kZWJ1ZyA9ICZidWZbMF07DQoNCg0KLyogIGlmICggZnQyX2RlYnVnICkgKi8NCiAgICBpZiAoIEdldFZhciggIkZUMl9ERUJVRyIsIChTVFJQVFIpZnQyX2RlYnVnLCAyNTYsIExWX1ZBUiApID4gMCApDQogICAgew0KICAgICAgY29uc3QgY2hhciogIHAgPSBmdDJfZGVidWc7DQogICAgICBjb25zdCBjaGFyKiAgcTsNCg0KDQogICAgICBmb3IgKCA7ICpwOyBwKysgKQ0KICAgICAgew0KICAgICAgICAvKiBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgc2VwYXJhdG9ycyAqLw0KICAgICAgICBpZiAoICpwID09ICcgJyB8fCAqcCA9PSAnXHQnIHx8ICpwID09ICcsJyB8fCAqcCA9PSAnOycgfHwgKnAgPT0gJz0nICkNCiAgICAgICAgICBjb250aW51ZTsNCg0KICAgICAgICAvKiByZWFkIHRvZ2dsZSBuYW1lLCBmb2xsb3dlZCBieSAnOicgKi8NCiAgICAgICAgcSA9IHA7DQogICAgICAgIHdoaWxlICggKnAgJiYgKnAgIT0gJzonICkNCiAgICAgICAgICBwKys7DQoNCiAgICAgICAgaWYgKCAhKnAgKQ0KICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgIGlmICggKnAgPT0gJzonICYmIHAgPiBxICkNCiAgICAgICAgew0KICAgICAgICAgIEZUX0ludCAgbiwgaSwgbGVuID0gKEZUX0ludCkoIHAgLSBxICk7DQogICAgICAgICAgRlRfSW50ICBsZXZlbCA9IC0xLCBmb3VuZCA9IC0xOw0KDQoNCiAgICAgICAgICBmb3IgKCBuID0gMDsgbiA8IHRyYWNlX2NvdW50OyBuKysgKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGNvbnN0IGNoYXIqICB0b2dnbGUgPSBmdF90cmFjZV90b2dnbGVzW25dOw0KDQoNCiAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoIHRvZ2dsZVtpXSAhPSBxW2ldICkNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKCBpID09IGxlbiAmJiB0b2dnbGVbaV0gPT0gMCApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGZvdW5kID0gbjsNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KDQogICAgICAgICAgLyogcmVhZCBsZXZlbCAqLw0KICAgICAgICAgIHArKzsNCiAgICAgICAgICBpZiAoICpwICkNCiAgICAgICAgICB7DQogICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOw0KICAgICAgICAgICAgaWYgKCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA3ICkNCiAgICAgICAgICAgICAgbGV2ZWwgPSAtMTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICBpZiAoIGZvdW5kID49IDAgJiYgbGV2ZWwgPj0gMCApDQogICAgICAgICAgew0KICAgICAgICAgICAgaWYgKCBmb3VuZCA9PSB0cmFjZV9hbnkgKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAvKiBzcGVjaWFsIGNhc2UgZm9yIGBhbnknICovDQogICAgICAgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgdHJhY2VfY291bnQ7IG4rKyApDQogICAgICAgICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzW25dID0gbGV2ZWw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIGZ0X3RyYWNlX2xldmVsc1tmb3VuZF0gPSBsZXZlbDsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogIH0NCg0KDQojZWxzZSAgLyogIUZUX0RFQlVHX0xFVkVMX1RSQUNFICovDQoNCg0KICBGVF9CQVNFX0RFRiggdm9pZCApDQogIGZ0X2RlYnVnX2luaXQoIHZvaWQgKQ0KICB7DQogICAgLyogbm90aGluZyAqLw0KICB9DQoNCg0KICBGVF9CQVNFX0RFRiggRlRfSW50ICkNCiAgRlRfVHJhY2VfR2V0X0NvdW50KCB2b2lkICkNCiAgew0KICAgIHJldHVybiAwOw0KICB9DQoNCg0KICBGVF9CQVNFX0RFRiggY29uc3QgY2hhciAqICkNCiAgRlRfVHJhY2VfR2V0X05hbWUoIEZUX0ludCAgaWR4ICkNCiAgew0KICAgIEZUX1VOVVNFRCggaWR4ICk7DQoNCiAgICByZXR1cm4gTlVMTDsNCiAgfQ0KDQoNCiNlbmRpZiAvKiAhRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8NCg0KLyoNCkxvY2FsIFZhcmlhYmxlczoNCmNvZGluZzogbGF0aW4tMQ0KRW5kOg0KKi8NCi8qIEVORCAqLw0K