LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRyYWNlYWx5emVyIHYyLjYuMCBSZWNvcmRlciBMaWJyYXJ5DQogKiBQZXJjZXBpbyBBQiwgd3d3LnBlcmNlcGlvLmNvbQ0KICoNCiAqIHRyY1VzZXIuaA0KICogVGhlIHB1YmxpYyBBUEkgb2YgdGhlIHRyYWNlIHJlY29yZGVyIGxpYnJhcnkuDQogKg0KICogVGVybXMgb2YgVXNlDQogKiBUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodCBQZXJjZXBpbyBBQi4gVGhlIHJlY29yZGVyIGxpYnJhcnkgaXMgZnJlZSBmb3INCiAqIHVzZSB0b2dldGhlciB3aXRoIFBlcmNlcGlvIHByb2R1Y3RzLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHJlY29yZGVyIGxpYnJhcnkNCiAqIGluIGl0cyBvcmlnaW5hbCBmb3JtLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucyBpbiB0cmNIYXJkd2FyZVBvcnQuYy8uaA0KICogZ2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb24gYXJlIGNsZWFybHkgbWFya2VkIGFzIHlvdXIgb3duIG1vZGlmaWNhdGlvbnMNCiAqIGFuZCBkb2N1bWVudGVkIGluIHRoZSBpbml0aWFsIGNvbW1lbnQgc2VjdGlvbiBvZiB0aGVzZSBzb3VyY2UgZmlsZXMuDQogKiBUaGlzIHNvZnR3YXJlIGlzIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgUGVyY2VwaW8gQUIgYW5kIG1heSBub3QgYmUNCiAqIHNvbGQgb3IgaW4gb3RoZXIgd2F5cyBjb21tZXJjaWFsbHkgcmVkaXN0cmlidXRlZCB3aXRob3V0IGV4cGxpY2l0IHdyaXR0ZW4NCiAqIHBlcm1pc3Npb24gYnkgUGVyY2VwaW8gQUIuDQogKg0KICogRGlzY2xhaW1lcg0KICogVGhlIHRyYWNlIHRvb2wgYW5kIHJlY29yZGVyIGxpYnJhcnkgaXMgYmVpbmcgZGVsaXZlcmVkIHRvIHlvdSBBUyBJUyBhbmQNCiAqIFBlcmNlcGlvIEFCIG1ha2VzIG5vIHdhcnJhbnR5IGFzIHRvIGl0cyB1c2Ugb3IgcGVyZm9ybWFuY2UuIFBlcmNlcGlvIEFCIGRvZXMNCiAqIG5vdCBhbmQgY2Fubm90IHdhcnJhbnQgdGhlIHBlcmZvcm1hbmNlIG9yIHJlc3VsdHMgeW91IG1heSBvYnRhaW4gYnkgdXNpbmcgdGhlDQogKiBzb2Z0d2FyZSBvciBkb2N1bWVudGF0aW9uLiBQZXJjZXBpbyBBQiBtYWtlIG5vIHdhcnJhbnRpZXMsIGV4cHJlc3Mgb3INCiAqIGltcGxpZWQsIGFzIHRvIG5vbmluZnJpbmdlbWVudCBvZiB0aGlyZCBwYXJ0eSByaWdodHMsIG1lcmNoYW50YWJpbGl0eSwgb3INCiAqIGZpdG5lc3MgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UuIEluIG5vIGV2ZW50IHdpbGwgUGVyY2VwaW8gQUIsIGl0cw0KICogdGVjaG5vbG9neSBwYXJ0bmVycywgb3IgZGlzdHJpYnV0b3JzIGJlIGxpYWJsZSB0byB5b3UgZm9yIGFueSBjb25zZXF1ZW50aWFsLA0KICogaW5jaWRlbnRhbCBvciBzcGVjaWFsIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgbG9zdCBwcm9maXRzIG9yIGxvc3Qgc2F2aW5ncywNCiAqIGV2ZW4gaWYgYSByZXByZXNlbnRhdGl2ZSBvZiBQZXJjZXBpbyBBQiBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eQ0KICogb2Ygc3VjaCBkYW1hZ2VzLCBvciBmb3IgYW55IGNsYWltIGJ5IGFueSB0aGlyZCBwYXJ0eS4gU29tZSBqdXJpc2RpY3Rpb25zIGRvDQogKiBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwsIGNvbnNlcXVlbnRpYWwgb3Igc3BlY2lhbA0KICogZGFtYWdlcywgb3IgdGhlIGV4Y2x1c2lvbiBvZiBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgbGltaXRhdGlvbnMgb24gaG93IGxvbmcgYW4NCiAqIGltcGxpZWQgd2FycmFudHkgbWF5IGxhc3QsIHNvIHRoZSBhYm92ZSBsaW1pdGF0aW9ucyBtYXkgbm90IGFwcGx5IHRvIHlvdS4NCiAqDQogKiBDb3B5cmlnaHQgUGVyY2VwaW8gQUIsIDIwMTMuDQogKiB3d3cucGVyY2VwaW8uY29tDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQojaWZuZGVmIFRSQ1VTRVJfSA0KI2RlZmluZSBUUkNVU0VSX0gNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiIHsNCiNlbmRpZg0KDQojaW5jbHVkZSAidHJjS2VybmVsUG9ydC5oIg0KDQojaWYgKFVTRV9UUkFDRUFMWVpFUl9SRUNPUkRFUiA9PSAxKQ0KDQojaWZuZGVmIFVTRV9TRVBBUkFURV9VU0VSX0VWRU5UX0JVRkZFUg0KI2RlZmluZSBVU0VfU0VQQVJBVEVfVVNFUl9FVkVOVF9CVUZGRVIgMA0KI2VuZGlmDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBUUkFDRV9TVE9QX0hPT0sgLSBIb29rIFBvaW50ZXIgRGF0YSBUeXBlDQogKg0KICogRGVjbGFyZXMgYSBkYXRhIHR5cGUgZm9yIGEgY2FsbCBiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIHdoZW5ldmVyDQogKiB0aGUgcmVjb3JkZXIgaXMgc3RvcHBlZC4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp0eXBlZGVmIHZvaWQgKCpUUkFDRV9TVE9QX0hPT0spKHZvaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlU3RvcEhvb2tQdHINCiAqDQogKiBQb2ludHMgdG8gYSBjYWxsIGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZnJvbSB2VHJhY2VTdG9wKCkuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIFRSQUNFX1NUT1BfSE9PSyB2VHJhY2VTdG9wSG9va1B0cjsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZUluaXRUcmFjZURhdGENCiAqDQogKiBBbGxvY2F0ZXMsIGlmIG5lY2Vzc2FyeSwgYW5kIGluaXRpYWxpemVzIHRoZSByZWNvcmRlciBkYXRhIHN0cnVjdHVyZSwgYmFzZWQNCiAqIG9uIHRoZSBjb25zdGFudHMgaW4gdHJjQ29uZmlnLmguDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VJbml0VHJhY2VEYXRhKHZvaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlU2V0UmVjb3JkZXJEYXRhDQogKg0KICogSWYgY3VzdG9tIGFsbG9jYXRpb24gaXMgdXNlZCwgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBzbyB0aGUgcmVjb3JkZXINCiAqIGxpYnJhcnkga25vd3Mgd2hlcmUgdG8gc2F2ZSB0aGUgdHJhY2UgZGF0YS4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQojaWYgKFRSQUNFX0RBVEFfQUxMT0NBVElPTiA9PSBUUkFDRV9EQVRBX0FMTE9DQVRJT05fQ1VTVE9NKQ0Kdm9pZCB2VHJhY2VTZXRSZWNvcmRlckRhdGEodm9pZCogcFJlY29yZGVyRGF0YSk7DQojZW5kaWYNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHVpVHJhY2VTdGFydA0KICoNCiAqIFN0YXJ0cyB0aGUgcmVjb3JkZXIuIFRoZSByZWNvcmRlciB3aWxsIG5vdCBiZSBzdGFydGVkIGlmIGFuIGVycm9yIGhhcyBiZWVuDQogKiBpbmRpY2F0ZWQgdXNpbmcgdlRyYWNlRXJyb3IsIGUuZy4gaWYgYW55IG9mIHRoZSBOeCBjb25zdGFudHMgaW4gdHJjQ29uZmlnLmgNCiAqIGhhcyBhIHRvbyBzbWFsbCB2YWx1ZSAoTlRBU0ssIE5RVUVVRSwgZXRjKS4NCiAqDQogKiBSZXR1cm5zIDEgaWYgdGhlIHJlY29yZGVyIHdhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseS4NCiAqIFJldHVybnMgMCBpZiB0aGUgcmVjb3JkZXIgc3RhcnQgd2FzIHByZXZlbnRlZCBkdWUgdG8gYSBwcmV2aW91cyBpbnRlcm5hbA0KICogZXJyb3IuIEluIHRoYXQgY2FzZSwgY2hlY2sgdlRyYWNlR2V0TGFzdEVycm9yIHRvIGdldCB0aGUgZXJyb3IgbWVzc2FnZS4NCiAqIEFueSBlcnJvciBtZXNzYWdlIGlzIGFsc28gcHJlc2VudGVkIHdoZW4gb3BlbmluZyBhIHRyYWNlIGZpbGUuDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnVpbnQzMl90IHVpVHJhY2VTdGFydCh2b2lkKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVN0YXJ0DQogKg0KICogU3RhcnRzIHRoZSByZWNvcmRlci4gVGhlIHJlY29yZGVyIHdpbGwgbm90IGJlIHN0YXJ0ZWQgaWYgYW4gZXJyb3IgaGFzIGJlZW4NCiAqIGluZGljYXRlZCB1c2luZyB2VHJhY2VFcnJvciwgZS5nLiBpZiBhbnkgb2YgdGhlIE54IGNvbnN0YW50cyBpbiB0cmNDb25maWcuaA0KICogaGFzIGEgdG9vIHNtYWxsIHZhbHVlIChOVEFTSywgTlFVRVVFLCBldGMpLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gaXMgb2Jzb2xldGUsIGJ1dCBoYXMgYmVlbiBzYXZlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuDQogKiBXZSByZWNvbW1lbmQgdXNpbmcgdWlUcmFjZVN0YXJ0IGluc3RlYWQuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VTdGFydCh2b2lkKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVN0b3ANCiAqDQogKiBTdG9wcyB0aGUgcmVjb3JkZXIuIFRoZSByZWNvcmRpbmcgY2FuIGJlIHJlc3VtZWQgYnkgY2FsbGluZyB2VHJhY2VTdGFydC4NCiAqIFRoaXMgZG9lcyBub3QgcmVzZXQgdGhlIHJlY29yZGVyLiBVc2UgdlRyYWNlQ2xlYXIgaXMgdGhhdCBpcyBkZXNpcmVkLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlU3RvcCh2b2lkKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHhUcmFjZUdldExhc3RFcnJvcg0KICoNCiAqIEdpdmVzIHRoZSBsYXN0IGVycm9yIG1lc3NhZ2UsIGlmIGFueS4gTlVMTCBpZiBubyBlcnJvciBtZXNzYWdlIGlzIHN0b3JlZC4NCiAqIEFueSBlcnJvciBtZXNzYWdlIGlzIGFsc28gcHJlc2VudGVkIHdoZW4gb3BlbmluZyBhIHRyYWNlIGZpbGUuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KY2hhciogeFRyYWNlR2V0TGFzdEVycm9yKHZvaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlQ2xlYXINCiAqDQogKiBSZXNldHMgdGhlIHJlY29yZGVyLiBPbmx5IG5lY2Vzc2FyeSBpZiBhIHJlc3RhcnQgaXMgZGVzaXJlZCAtIHRoaXMgaXMgbm90DQogKiBuZWVkZWQgaW4gdGhlIHN0YXJ0dXAgaW5pdGlhbGl6YXRpb24uDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VDbGVhcih2b2lkKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogdlRyYWNlQ2xlYXJFcnJvcg0KKg0KKiBSZW1vdmVzIGFueSBwcmV2aW91cyBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBieSByZWNvcmRlciBjYWxsaW5nIHZUcmFjZUVycm9yLg0KKiBCeSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGl0IG1heSBiZSBwb3NzaWJsZSB0byBzdGFydC9yZXN0YXJ0IHRoZSB0cmFjZQ0KKiBkZXNwaXRlIGVycm9ycyBpbiB0aGUgcmVjb3JkZXIsIGJ1dCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgdHJhY2UNCiogcmVjb3JkZXIgd2lsbCB3b3JrIGNvcnJlY3RseSBpbiB0aGF0IGNhc2UsIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBlcnJvci4NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlQ2xlYXJFcnJvcihpbnQgcmVzZXRFcnJvck1lc3NhZ2UpOw0KDQojaWYgKElOQ0xVREVfSVNSX1RSQUNJTkcgPT0gMSkNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVNldElTUlByb3BlcnRpZXMNCiAqDQogKiBSZWdpc3RlcnMgYW4gSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZSBpbiB0aGUgcmVjb3JkZXIgbGlicmFyeSwgVGhpcyBtdXN0IGJlDQogKiBjYWxsZWQgYmVmb3JlIHVzaW5nIHZUcmFjZVN0b3JlSVNSQmVnaW4gdG8gc3RvcmUgSVNSIGV2ZW50cy4gVGhpcyBpcw0KICogdHlwaWNhbGx5IGNhbGxlZCBpbiB0aGUgc3RhcnR1cCBvZiB0aGUgc3lzdGVtLCBiZWZvcmUgdGhlIHNjaGVkdWxlciBpcw0KICogc3RhcnRlZC4NCiAqDQogKiBFeGFtcGxlOg0KICogICAgICNkZWZpbmUgSURfSVNSX1RJTUVSMSAxICAgICAgIC8vIGxvd2VzdCB2YWxpZCBJRCBpcyAxDQogKiAgICAgI2RlZmluZSBQUklPX09GX0lTUl9USU1FUjEgMyAgLy8gdGhlIGhhcmR3YXJlIHByaW9yaXR5IG9mIHRoZSBpbnRlcnJ1cHQNCiAqICAgICAuLi4NCiAqICAgICB2VHJhY2VTZXRJU1JQcm9wZXJ0aWVzKElEX0lTUl9USU1FUjEsICJJU1JUaW1lcjEiLCBQUklPX09GX0lTUl9USU1FUjEpOw0KICogICAgIC4uLg0KICogICAgIHZvaWQgSVNSX2hhbmRsZXIoKQ0KICogICAgIHsNCiAqICAgICAgICAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7IC8vIFJlcXVpcmVkIGlmIG5lc3RlZCBJU1JzIGFyZSBhbGxvd2VkDQogKiAgICAgICAgIHZUcmFjZVN0b3JlSVNSQmVnaW4oSURfT0ZfSVNSX1RJTUVSMSk7DQogKiAgICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMKCk7DQogKiAgICAgICAgIC4uLg0KICogICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsgLy8gUmVxdWlyZWQgaWYgbmVzdGVkIElTUnMgYXJlIGFsbG93ZWQNCiAqICAgICAgICAgdlRyYWNlU3RvcmVJU1JFbmQoKTsNCiAqICAgICAgICAgcG9ydEVYSVRfQ1JJVElDQUwoKTsNCiAqICAgICB9DQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VTZXRJU1JQcm9wZXJ0aWVzKG9iamVjdEhhbmRsZVR5cGUgaGFuZGxlLCBjb25zdCBjaGFyKiBuYW1lLCBjaGFyIHByaW9yaXR5KTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVN0b3JlSVNSQmVnaW4NCiAqDQogKiBSZWdpc3RlcnMgdGhlIGJlZ2lubmluZyBvZiBhbiBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lLg0KICogSWYgYWxsb3dpbmcgbmVzdGVkIElTUnMsIHRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLg0KICoNCiAqIEV4YW1wbGU6DQogKiAgICAgI2RlZmluZSBJRF9JU1JfVElNRVIxIDEgICAgICAgLy8gbG93ZXN0IHZhbGlkIElEIGlzIDENCiAqICAgICAjZGVmaW5lIFBSSU9fT0ZfSVNSX1RJTUVSMSAzICAvLyB0aGUgaGFyZHdhcmUgcHJpb3JpdHkgb2YgdGhlIGludGVycnVwdA0KICogICAgIC4uLg0KICogICAgIHZUcmFjZVNldElTUlByb3BlcnRpZXMoSURfSVNSX1RJTUVSMSwgIklTUlRpbWVyMSIsIFBSSU9fT0ZfSVNSX1RJTUVSMSk7DQogKiAgICAgLi4uDQogKiAgICAgdm9pZCBJU1JfaGFuZGxlcigpDQogKiAgICAgew0KICogICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsgLy8gUmVxdWlyZWQgaWYgbmVzdGVkIElTUnMgYXJlIGFsbG93ZWQNCiAqICAgICAgICAgdlRyYWNlU3RvcmVJU1JCZWdpbihJRF9PRl9JU1JfVElNRVIxKTsNCiAqICAgICAgICAgcG9ydEVYSVRfQ1JJVElDQUwoKTsNCiAqICAgICAgICAgLi4uDQogKiAgICAgICAgIHBvcnRFTlRFUl9DUklUSUNBTCgpOyAvLyBSZXF1aXJlZCBpZiBuZXN0ZWQgSVNScyBhcmUgYWxsb3dlZA0KICogICAgICAgICB2VHJhY2VTdG9yZUlTUkVuZCgpOw0KICogICAgICAgICBwb3J0RVhJVF9DUklUSUNBTCgpOw0KICogICAgIH0NCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VTdG9yZUlTUkJlZ2luKG9iamVjdEhhbmRsZVR5cGUgaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlU3RvcmVJU1JFbmQNCiAqDQogKiBSZWdpc3RlcnMgdGhlIGVuZCBvZiBhbiBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lLg0KICoNCiAqIElmIGFsbG93aW5nIG5lc3RlZCBJU1JzLCB0aGlzIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4NCiAqDQogKiBFeGFtcGxlOg0KICogICAgICNkZWZpbmUgSURfSVNSX1RJTUVSMSAxICAgICAgIC8vIGxvd2VzdCB2YWxpZCBJRCBpcyAxDQogKiAgICAgI2RlZmluZSBQUklPX09GX0lTUl9USU1FUjEgMyAgLy8gdGhlIGhhcmR3YXJlIHByaW9yaXR5IG9mIHRoZSBpbnRlcnJ1cHQNCiAqICAgICAuLi4NCiAqICAgICB2VHJhY2VTZXRJU1JQcm9wZXJ0aWVzKElEX0lTUl9USU1FUjEsICJJU1JUaW1lcjEiLCBQUklPX09GX0lTUl9USU1FUjEpOw0KICogICAgIC4uLg0KICogICAgIHZvaWQgSVNSX2hhbmRsZXIoKQ0KICogICAgIHsNCiAqICAgICAgICAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7IC8vIFJlcXVpcmVkIGlmIG5lc3RlZCBJU1JzIGFyZSBhbGxvd2VkDQogKiAgICAgICAgIHZUcmFjZVN0b3JlSVNSQmVnaW4oSURfT0ZfSVNSX1RJTUVSMSk7DQogKiAgICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMKCk7DQogKiAgICAgICAgIC4uLg0KICogICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsgLy8gUmVxdWlyZWQgaWYgbmVzdGVkIElTUnMgYXJlIGFsbG93ZWQNCiAqICAgICAgICAgdlRyYWNlU3RvcmVJU1JFbmQoKTsNCiAqICAgICAgICAgcG9ydEVYSVRfQ1JJVElDQUwoKTsNCiAqICAgICB9DQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlU3RvcmVJU1JFbmQodm9pZCk7DQoNCiNlbHNlDQogICAvKiBJZiBub3QgaW5jbHVkaW5nIHRoZSBJU1IgcmVjb3JkaW5nICovDQoNCnZvaWQgdlRyYWNlSW5jcmVhc2VJU1JBY3RpdmUodm9pZCk7DQoNCnZvaWQgdlRyYWNlRGVjcmVhc2VJU1JBY3RpdmUodm9pZCk7DQoNCiNkZWZpbmUgdlRyYWNlU2V0SVNSUHJvcGVydGllcyhoYW5kbGUsIG5hbWUsIHByaW9yaXR5KQ0KI2RlZmluZSB2VHJhY2VTdG9yZUlTUkJlZ2luKGlkKSB2VHJhY2VJbmNyZWFzZUlTUkFjdGl2ZSgpDQojZGVmaW5lIHZUcmFjZVN0b3JlSVNSRW5kKCkgdlRyYWNlRGVjcmVhc2VJU1JBY3RpdmUoKQ0KDQojZW5kaWYNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZ2VHJhY2VUYXNrU2tpcERlZmF1bHRJbnN0YW5jZUZpbmlzaGVkRXZlbnRzDQogKg0KICogVGhpcyBpcyB1c2VmdWwgaWYgdGhlcmUgYXJlIGltcGxpY2l0IEluc3RhbmNlIEZpbmlzaCBFdmVudHMsIHN1Y2ggYXMNCiAqIHZUYXNrRGVsYXlVbnRpbCBvciB4UXVldWVSZWNlaXZlLCBpbiBhIHRhc2sgd2hlcmUgYW4gZXhwbGljaXQgSW5zdGFuY2UgRmluaXNoDQogKiBFdmVudCBoYXMgYmVlbiBkZWZpbmVkLiBUaGlzIGZ1bmN0aW9uIHRlbGxzIHRoZSByZWNvcmRlciB0aGF0IG9ubHkgdGhlDQogKiBleHBsaWNpdGx5IGRlZmluZWQgZnVuY3Rpb25zICh1c2luZyB2VHJhY2VUYXNrSW5zdGFuY2VJc0ZpbmlzaGVkKSBzaG91bGQgYmUNCiAqIHRyZWF0ZWQgYXMgSW5zdGFuY2UgRmluaXNoIEV2ZW50cyBmb3IgdGhpcyB0YXNrLiBUaGUgaW1wbGljaXQgSW5zdGFuY2UgRmluaXNoDQogKiBFdmVudHMgYXJlIHRodXMgZGlzcmVnYXJkZWQgZm9yIHRoaXMgdGFzay4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIHZUcmFjZVRhc2tTa2lwRGVmYXVsdEluc3RhbmNlRmluaXNoZWRFdmVudHModm9pZCk7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiB2VHJhY2VUYXNrSW5zdGFuY2VJc0ZpbmlzaGVkDQogKg0KICogVGhpcyBkZWZpbmVzIGFuIGV4cGxpY2l0IEluc3RhbmNlIEZpbmlzaCBFdmVudCBmb3IgdGhlIGN1cnJlbnQgdGFzay4gSXQgdGVsbHMNCiAqIHRoZSByZWNvcmRlciB0aGF0IHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoaXMgdGFzayBpcyBmaW5pc2hlZCBhdCB0aGUgbmV4dA0KICoga2VybmVsIGNhbGwgb2YgdGhlIHRhc2ssIGUuZy4sIGEgdGFza0RlbGF5IG9yIGEgcXVldWUgcmVjZWl2ZS4gVGhpcyBmdW5jdGlvbg0KICogc2hvdWxkIGJlIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGFwaSBmdW5jdGlvbiBjYWxsIGNvbnNpZGVyZWQgdG8gYmUgdGhlIGVuZA0KICogb2YgdGhlIHRhc2sgaW5zdGFtY2UsIGkuZS4sIHRoZSBJbnN0YW5jZSBGaW5pc2ggRXZlbnQuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VUYXNrSW5zdGFuY2VJc0ZpbmlzaGVkKHZvaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlR2V0VHJhY2VCdWZmZXINCiAqDQogKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcmVjb3JkZXIgZGF0YSBzdHJ1Y3R1cmUuIFVzZSB0aGlzIHRvZ2V0aGVyIHdpdGgNCiAqIHVpVHJhY2VHZXRUcmFjZUJ1ZmZlclNpemUgaWYgeW91IHdpc2ggdG8gaW1wbGVtZW50IGFuIG93biBzdG9yZS91cGxvYWQNCiAqIHNvbHV0aW9uLCBlLmcuLCBpbiBjYXNlIGEgZGVidWdnZXIgY29ubmVjdGlvbiBpcyBub3QgYXZhaWxhYmxlIGZvciB1cGxvYWRpbmcNCiAqIHRoZSBkYXRhLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQqIHZUcmFjZUdldFRyYWNlQnVmZmVyKHZvaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdWlUcmFjZUdldFRyYWNlQnVmZmVyU2l6ZQ0KICoNCiAqIEdldHMgdGhlIHNpemUgb2YgdGhlIHJlY29yZGVyIGRhdGEgc3RydWN0dXJlLiBGb3IgdXNlIHRvZ2V0aGVyIHdpdGgNCiAqIHZUcmFjZUdldFRyYWNlQnVmZmVyIGlmIHlvdSB3aXNoIHRvIGltcGxlbWVudCBhbiBvd24gc3RvcmUvdXBsb2FkIHNvbHV0aW9uLA0KICogZS5nLiwgaW4gY2FzZSBhIGRlYnVnZ2VyIGNvbm5lY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBmb3IgdXBsb2FkaW5nIHRoZSBkYXRhLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnVpbnQzMl90IHVpVHJhY2VHZXRUcmFjZUJ1ZmZlclNpemUodm9pZCk7DQoNCiNpZiAoSU5DTFVERV9VU0VSX0VWRU5UUyA9PSAxKQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogeFRyYWNlT3BlbkxhYmVsDQogKg0KICogQ3JlYXRlcyB1c2VyIGV2ZW50IGxhYmVscyBmb3IgdXNlciBldmVudCBjaGFubmVscyBvciBmb3IgaW5kaXZpZHVhbCBldmVudHMuDQogKiBVc2VyIGV2ZW50cyBjYW4gYmUgdXNlZCB0byBsb2cgYXBwbGljYXRpb24gZXZlbnRzIGFuZCBkYXRhIGZvciBkaXNwbGF5IGluDQogKiB0aGUgdmlzdWFsaXphdGlvbiB0b29sLiBBIHVzZXIgZXZlbnQgaXMgaWRlbnRpZmllZCBieSBhIGxhYmVsLCBpLmUuLCBhIHN0cmluZywNCiAqIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUgcmVjb3JkZXIncyBzeW1ib2wgdGFibGUuDQogKiBXaGVuIGxvZ2dpbmcgYSB1c2VyIGV2ZW50LCBhIG51bWVyaWMgaGFuZGxlIChyZWZlcmVuY2UpIHRvIHRoaXMgc3RyaW5nIGlzDQogKiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBldmVudC4gVGhpcyBpcyBvYnRhaW5lZCBieSBjYWxsaW5nDQogKg0KICogICAgIHhUcmFjZU9wZW5MYWJlbCgpDQogKg0KICogd2hpaGMgYWRkcyB0aGUgc3RyaW5nIHRvIHRoZSBzeW1ib2wgdGFibGUgKGlmIG5vdCBhbHJlYWR5IHByZXNlbnQpDQogKiBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBoYW5kbGUuDQogKg0KICogVGhpcyBjYW4gYmUgdXNlZCBpbiB0d28gd2F5czoNCiAqDQogKiAxLiBUaGUgaGFuZGxlIGlzIGxvb2tlZCB1cCBldmVyeSB0aW1lLCB3aGVuIHN0b3JpbmcgdGhlIHVzZXIgZXZlbnQuDQogKg0KICogRXhhbXBsZToNCiAqICAgICB2VHJhY2VVc2VyRXZlbnQoeFRyYWNlT3BlbkxhYmVsKCJNeVVzZXJFdmVudCIpKTsNCiAqDQogKiAyLiBUaGUgbGFiZWwgaXMgcmVnaXN0ZXJlZCBqdXN0IG9uY2UsIHdpdGggdGhlIGhhbmRsZSBzdG9yZWQgaW4gYW4NCiAqICBhcHBsaWNhdGlvbiB2YXJpYWJsZSAtIG11Y2ggbGlrZSB1c2luZyBhIGZpbGUgaGFuZGxlLg0KICoNCiAqIEV4YW1wbGU6DQogKiAgICAgbXlFdmVudEhhbmRsZSA9IHhUcmFjZU9wZW5MYWJlbCgiTXlVc2VyRXZlbnQiKTsNCiAqICAgICAuLi4NCiAqICAgICB2VHJhY2VVc2VyRXZlbnQobXlFdmVudEhhbmRsZSk7DQogKg0KICogVGhlIHNlY29uZCBvcHRpb24gaXMgZmFzdGVyIHNpbmNlIG5vIGxvb2t1cCBpcyByZXF1aXJlZCBvbiBlYWNoIGV2ZW50LCBhbmQNCiAqIHRoZXJlZm9yZSByZWNvbW1lbmRlZCBmb3IgdXNlciBldmVudHMgdGhhdCBhcmUgZnJlcXVlbnRseQ0KICogZXhlY3V0ZWQgYW5kL29yIGxvY2F0ZWQgaW4gdGltZS1jcml0aWNhbCBjb2RlLiBUaGUgbG9va3VwIG9wZXJhdGlvbiBpcw0KICogaG93ZXZlciBmYWlybHkgZmFzdCBkdWUgdG8gdGhlIGRlc2lnbiBvZiB0aGUgc3ltYm9sIHRhYmxlLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnRyYWNlTGFiZWwgeFRyYWNlT3BlbkxhYmVsKGNvbnN0IGNoYXIqIGxhYmVsKTsNCg0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVVzZXJFdmVudA0KICoNCiAqIEJhc2ljIHVzZXIgZXZlbnQgKFN0YW5kYXJkIGFuZCBQcm9mZXNzaW9uYWwgRWRpdGlvbiBvbmx5KQ0KICoNCiAqIEdlbmVyYXRlcyBhIFVzZXIgRXZlbnQgd2l0aCBhIHRleHQgbGFiZWwuIFRoZSBsYWJlbCBpcyBjcmVhdGVkL2xvb2tlZCB1cA0KICogaW4gdGhlIHN5bWJvbCB0YWJsZSB1c2luZyB4VHJhY2VPcGVuTGFiZWwuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VVc2VyRXZlbnQodHJhY2VMYWJlbCBldmVudExhYmVsKTsNCg0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVByaW50Rg0KICoNCiAqIEFkdmFuY2VkIHVzZXIgZXZlbnRzIChQcm9mZXNzaW9uYWwgRWRpdGlvbiBvbmx5KQ0KICoNCiAqIEdlbmVyYXRlcyBVc2VyIEV2ZW50IHdpdGggZm9ybWF0dGVkIHRleHQgYW5kIGRhdGEsIHNpbWlsYXIgdG8gYSAicHJpbnRmIi4NCiAqIEl0IGlzIHZlcnkgZmFzdCBjb21wYXJlZCB0byBhIG5vcm1hbCAicHJpbnRmIiBzaW5jZSB0aGlzIGZ1bmN0aW9uIG9ubHkNCiAqIHN0b3JlcyB0aGUgYXJndW1lbnRzLiBUaGUgYWN0dWFsIGZvcm1hdHRpbmcgaXMgZG9uZQ0KICogb24gdGhlIGhvc3QgUEMgd2hlbiB0aGUgdHJhY2UgaXMgZGlzcGxheWVkIGluIHRoZSB2aWV3ZXIgdG9vbC4NCiAqDQogKiBVc2VyIEV2ZW50IGxhYmVscyBhcmUgY3JlYXRlZCB1c2luZyB4VHJhY2VPcGVuTGFiZWwuDQogKiBFeGFtcGxlOg0KICoNCiAqICAgICB0cmFjZUxhYmVsIGFkY191ZWNoYW5uZWwgPSB4VHJhY2VPcGVuTGFiZWwoIkFEQyBVc2VyIEV2ZW50cyIpOw0KICogICAgIC4uLg0KICogICAgIHZUcmFjZVByaW50KGFkY191ZWNoYW5uZWwsDQogKiAgICAgICAgICAgICAgICAgIkFEQyBjaGFubmVsICVkOiAlbGYgdm9sdHMiLA0KICogICAgICAgICAgICAgICAgIGNoLCAoZG91YmxlKWFkY19yZWFkaW5nLyhkb3VibGUpc2NhbGUpOw0KICoNCiAqIFRoaXMgY2FuIGJlIGNvbWJpbmVkIGludG8gb25lIGxpbmUsIGlmIGRlc2lyZWQsIGJ1dCB0aGlzIGlzIHNsb3dlcjoNCiAqDQogKiAgICAgdlRyYWNlUHJpbnQoeFRyYWNlT3BlbkxhYmVsKCJBREMgVXNlciBFdmVudHMiKSwNCiAqICAgICAgICAgICAgICAgICAiQURDIGNoYW5uZWwgJWQ6ICVsZiB2b2x0cyIsDQogKiAgICAgICAgICAgICAgICAgY2gsIChkb3VibGUpYWRjX3JlYWRpbmcvKGRvdWJsZSlzY2FsZSk7DQogKg0KICogQ2FsbGluZyB4VHJhY2VPcGVuTGFiZWwgbXVsdGlwbGUgdGltZXMgd2lsbCBub3QgY3JlYXRlIGR1cGxpY2F0ZSBlbnRyaWVzLCBidXQNCiAqIGl0IGlzIG9mIGNvdXJzZSBmYXN0ZXIgdG8ganVzdCBkbyBpdCBvbmNlLCBhbmQgdGhlbiBrZWVwIHRoZSBoYW5kbGUgZm9yIGxhdGVyDQogKiB1c2UuIElmIHlvdSBkb260dCBoYXZlIGFueSBkYXRhIGFyZ3VtZW50cywgb25seSBhIHRleHQgbGFiZWwvc3RyaW5nLCBpdCBpcw0KICogYmV0dGVyIHRvIHVzZSB2VHJhY2VVc2VyRXZlbnQgLSBpdCBpcyBmYXN0ZXIuDQogKg0KICogRm9ybWF0IHNwZWNpZmllcnMgc3VwcG9ydGVkOg0KICogICVkIC0gMzIgYml0IHNpZ25lZCBpbnRlZ2VyDQogKiAgJXUgLSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlcg0KICogICVmIC0gMzIgYml0IGZsb2F0DQogKiAgJXMgLSBzdHJpbmcgKGlzIGNvcGllZCB0byB0aGUgcmVjb3JkZXIgc3ltYm9sIHRhYmxlKQ0KICogICVoZCAtIDE2IGJpdCBzaWduZWQgaW50ZWdlcg0KICogICVodSAtIDE2IGJpdCB1bnNpZ25lZCBpbnRlZ2VyDQogKiAgJWJkIC0gOCBiaXQgc2lnbmVkIGludGVnZXINCiAqICAlYnUgLSA4IGJpdCB1bnNpZ25lZCBpbnRlZ2VyDQogKiAgJWxmIC0gZG91YmxlLXByZWNpc2lvbiBmbG9hdCAoTm90ZSEgU2VlIGJlbG93Li4uKQ0KICoNCiAqIFVwIHRvIDE1IGRhdGEgYXJndW1lbnRzIGFyZSBhbGxvd2VkLCB3aXRoIGEgdG90YWwgc2l6ZSBvZiBtYXhpbXVtIDMyIGJ5dGUuDQogKiBJbiBjYXNlIHRoaXMgaXMgZXhjZWVkZWQsIHRoZSB1c2VyIGV2ZW50IGlzIGNoYW5nZWQgaW50byBhbiBlcnJvciBtZXNzYWdlLg0KICoNCiAqIFRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0cmFjZSBidWZmZXIsIGFuZCBpcyBwYWNrZWQgdG8gYWxsb3cgc3RvcmluZyBtdWx0aXBsZQ0KICogc21hbGxlciBkYXRhIGVudHJpZXMgaW4gdGhlIHNhbWUgNC1ieXRlIHJlY29yZCwgZS5nLiwgZm91ciA4LWJpdCB2YWx1ZXMuDQogKiBBIHN0cmluZyByZXF1aXJlcyB0d28gYnl0ZXMsIGFzIHRoZSBzeW1ib2wgdGFibGUgaXMgbGltaXRlZCB0byA2NEsuIFN0b3JpbmcNCiAqIGEgZG91YmxlICglbGYpIHVzZXMgdHdvIHJlY29yZHMsIHNvIHRoaXMgaXMgcXVpdGUgY29zdGx5LiBVc2UgZmxvYXQgKCVmKQ0KICogdW5sZXNzIHRoZSBoaWdoZXIgcHJlY2lzaW9uIGlzIHJlYWxseSBuZWNlc3NhcnkuDQogKg0KICogTm90ZSB0aGF0IHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0ICglbGYpIGFzc3VtZXMgYSA2NCBiaXQgZG91YmxlDQogKiByZXByZXNlbnRhdGlvbi4gVGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIHRoZSBjYXNlIG9uIGUuZy4gUElDMjRGLg0KICogQmVmb3JlIHVzaW5nIGEgJWxmIGFyZ3VtZW50IG9uIGEgMTYtYml0IE1DVSwgcGxlYXNlIHZlcmlmeSB0aGF0DQogKiAic2l6ZW9mKGRvdWJsZSkiIGFjdHVhbGx5IGdpdmVzIDggYXMgZXhwZWN0ZWQuIElmIG5vdCwgdXNlICVmIGluc3RlYWQuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VQcmludEYodHJhY2VMYWJlbCBldmVudExhYmVsLCBjb25zdCBjaGFyKiBmb3JtYXRTdHIsIC4uLik7DQoNCiNpZiAoVVNFX1NFUEFSQVRFX1VTRVJfRVZFTlRfQlVGRkVSID09IDEpDQpVc2VyRXZlbnRDaGFubmVsIHhUcmFjZVJlZ2lzdGVyQ2hhbm5lbEZvcm1hdCh0cmFjZUxhYmVsIGNoYW5uZWwsIHRyYWNlTGFiZWwgZm9ybWF0U3RyKTsNCnZvaWQgdlRyYWNlQ2hhbm5lbFByaW50RihVc2VyRXZlbnRDaGFubmVsIGNoYW5uZWwsIC4uLik7DQp2b2lkIHZUcmFjZUNoYW5uZWxVc2VyRXZlbnQoVXNlckV2ZW50Q2hhbm5lbCBjaGFubmVsKTsNCiNlbmRpZg0KDQojZWxzZQ0KDQojZGVmaW5lIHZUcmFjZVByaW50RihldmVudExhYmVsLCBmb3JtYXRTdHIsIC4uLik7DQojZGVmaW5lIHhUcmFjZU9wZW5MYWJlbChsYWJlbCkgMA0KI2RlZmluZSB2VHJhY2VVc2VyRXZlbnQoZXZlbnRMYWJlbCkNCg0KI2VuZGlmDQoNCiNlbHNlDQoNCi8qIEVtcHR5IGRlZmluZXMgZm9yIHVzZXIgZnVuY3Rpb25zIHRvIGF2b2lkIGNvbXBpbGVyIGVycm9ycyBpZiB0cmFjZSBpcyBub3QgdG8gYmUgdXNlZCAqLw0KDQojZGVmaW5lIHZUcmFjZUluaXRUcmFjZURhdGEoKQ0KI2RlZmluZSB1aVRyYWNlU3RhcnQoKSAoMSkgLy8gRmFrZSAic3VjY2VzcyIsIGlmIHVzZWQgd2hlbiByZWNvcmRlciBpcyBleGNsdWRlZCBmcm9tIGJ1aWxkDQojZGVmaW5lIHZUcmFjZVN0YXJ0KCkNCiNkZWZpbmUgdlRyYWNlU3RvcCgpDQojZGVmaW5lIHZUcmFjZUNsZWFyKCkNCiNkZWZpbmUgdlRyYWNlU3RhcnRTdGF0dXNNb25pdG9yKCkNCiNkZWZpbmUgdlRyYWNlR2V0VHJhY2VCdWZmZXIoKSAoKHZvaWQqKTApDQojZGVmaW5lIHVpVHJhY2VHZXRUcmFjZUJ1ZmZlclNpemUoKSAwDQojZGVmaW5lIHhUcmFjZU9wZW5MYWJlbChsYWJlbCkgMA0KI2RlZmluZSB2VHJhY2VVc2VyRXZlbnQoZXZlbnRMYWJlbCkNCiNkZWZpbmUgdlRyYWNlUHJpbnRGKGV2ZW50TGFiZWwsZm9ybWF0U3RyLC4uLikNCiNkZWZpbmUgdlRyYWNlRXhjbHVkZVRhc2tGcm9tU2NoZWR1bGluZ1RyYWNlKG5hbWUpDQoNCiNkZWZpbmUgdlRyYWNlVGFza1NraXBEZWZhdWx0SW5zdGFuY2VGaW5pc2hlZEV2ZW50cygpDQojZGVmaW5lIHZUcmFjZVNldElTUlByb3BlcnRpZXMoaGFuZGxlLCBuYW1lLCBwcmlvcml0eSkNCiNkZWZpbmUgdlRyYWNlU3RvcmVJU1JCZWdpbihpZCkNCiNkZWZpbmUgdlRyYWNlU3RvcmVJU1JFbmQoKQ0KI2RlZmluZSB2VHJhY2VFeGNsdWRlVGFza0Zyb21UcmFjZShoYW5kbGUpDQojZGVmaW5lIHZUcmFjZVNldFF1ZXVlTmFtZShhLCBiKQ0KI2RlZmluZSB2VHJhY2VTZXRNdXRleE5hbWUoYSwgYikNCiNkZWZpbmUgdlRyYWNlU2V0U2VtYXBob3JlTmFtZShhLCBiKQ0KI2RlZmluZSB2VHJhY2VTZXRFdmVudEdyb3VwTmFtZShhLCBiKQ0KDQojZW5kaWYNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQp9DQojZW5kaWYNCg0KI2VuZGlmDQo=