PGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KPHRpdGxlPlBvbHlnb24gVXNhZ2U8L3RpdGxlPgo8L2hlYWQ+Cgo8Ym9keT4KCjxoMT5NaW5rb3dza2kgU3VtIFR1dG9yaWFsPC9oMT4gCjxwPkluIHRoaXMgdHV0b3JpYWwgd2Ugd2lsbCBpbXBsZW1lbnQgYW4gYWxnb3JpdGhtIHRvIGNvbXB1dGUgdGhlIE1pbmtvd3NraSBzdW0gCm9mIHR3byBwb2x5Z29uIHNldHMuJm5ic3A7IFRoZSBNaW5rb3dza2kgc3VtIG9mIHR3byBwb2x5Z29uIHNldHMgaXMgdGhlIApjb252b2x1dGlvbiBvZiB0aGUgdHdvIHBvbHlnb24gc2V0cyBhbmQgaXMgZGVmaW5lZCBhcyB0aGUgc2V0IG9mIHBvaW50cyB3aGljaCBpcyAKcHJvZHVjZWQgaWYgeW91IHN1bSBhbGwgcGFpcnMgb2YgcG9pbnRzIGluIHRoZSB0d28gcG9seWdvbiBzZXRzLiZuYnNwOyBUaGUgc3VtIApvZiB0d28gcG9pbnRzIGlzIGltcGxlbWVudGVkIGluIEJvb3N0LlBvbHlnb24gYnkgdGhlIDxmb250IGZhY2U9IkNvdXJpZXIgTmV3Ij4KY29udm9sdmU8L2ZvbnQ+IGZ1bmN0aW9uIGZvciA8YSBocmVmPSJndGxfcG9pbnRfY29uY2VwdC5odG0iPnBvaW50X2NvbmNlcHQ8L2E+LiZuYnNwOyAKU2ltaWxhcmx5IHRoZXJlIGlzIGEgPGZvbnQgZmFjZT0iQ291cmllciBOZXciPgpjb252b2x2ZTwvZm9udD4gZnVuY3Rpb24gZm9yIDxhIGhyZWY9Imd0bF9yZWN0YW5nbGVfY29uY2VwdC5odG0iPnJlY3RhbmdsZV9jb25jZXB0PC9hPi4mbmJzcDsgClRoZSBjb252b2x1dGlvbiBvZiB0d28gcG9seWdvbiBzZXRzIHByb2R1Y2VzIGEgcG9seWdvbiBzZXQgYXMgaXRzIG91dHB1dC4mbmJzcDsgCkFuIGV4YW1wbGUgb2YgdGhlIGNvbnZvbHV0aW9uIG9mIHR3byBwb2x5Z29ucyBpcyBzaG93biBiZWxvdy4mbmJzcDsgVGhlIGNlbnRlciAKcG9pbnQgb2YgdGhlIGdyZWVuIApzdGFyIGNhbiBiZSBpbWFnaW5lZCB0byBzbGlkZSBhcm91bmQgZnJlZWx5IGluc2lkZSB0aGUgYmx1ZSBwaWN0dXJlIGZyYW1lIHNoYXBlIApwYWludGluZyB0aGUgYXJlYSB0aGUgc3RhciB0b3VjaGVzIHRvIHByb2R1Y2UgdGhlIHJlZCBibG9hdGVkIHBpY3R1cmUgZnJhbWUuPC9wPgo8cD4mbmJzcDs8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWFnZXMvY29udm9sdXRpb24xLlBORyIgd2lkdGg9IjQzOCIgaGVpZ2h0PSI0MDQiPjwvcD4KPHA+VGhlIGFib3ZlIGltYWdlIHdhcyBwcm9kdWNlZCB1c2luZyB0aGUgY29kZSBwcmVzZW50ZWQgaW4gdGhpcyB0dXRvcmlhbC4mbmJzcDsgCldlIGNhbiBzZWUgdGhhdCB0aGUgYWxnb3JpdGhtIGZvciBNaW5rb3dza2kgc3VtIHNob3VsZCBzdXBwb3J0IG5vbi1jb252ZXggCnBvbHlnb25zIHRoYXQgbWF5IHBvdGVudGlhbGx5IGhhdmUgaG9sZXMuJm5ic3A7IEl0IHNob3VsZCBhbHNvIHN1cHBvcnQgZGlzam9pbnQgCnBvbHlnb25zIGluIGJvdGggaW5wdXQgcG9seWdvbiBzZXRzLiZuYnNwOyBTaG93biBiZWxvdyBpcyB3aGF0IGhhcHBlbnMgd2hlbiAKbXVsdGlwbGUgcG9seWdvbnMgYXJlIHByZXNlbnQgaW4gZWFjaCBpbnB1dCBwb2x5Z29uIHNldC48L3A+CjxwPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltYWdlcy9jb252b2x1dGlvbjIuUE5HIiB3aWR0aD0iNTQ3IiBoZWlnaHQ9IjQzMiI+PC9wPgo8cD5JbiBlYWNoIG9mIHRoZXNlIGV4YW1wbGVzIHRoZSBvcmlnaW4gb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGluIHRoZSBsb3dlciAKbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlIGFuZCB0aGUgc3VtIG9mIHRoZSB4IGFuZCB5IGxvY2F0aW9ucyBvZiB0aGUgaW5wdXQgCnBvbHlnb25zIHBsYWNlcyB0aGUgcmVzdWx0IGluIHRoZSB1cHBlciByaWdodCBoYW5kIGNvcm5lciBvZiB0aGUgaW1hZ2VzLiZuYnNwOyAKSW4gdGhlIGV4YW1wbGUgYWJvdmUgdGhlIGxvd2VyIGxlZnQgcmVkIHRyaWFuZ2xlIGlzIHRoZSBjb252b2x1dGlvbiBvZiB0aGUgc21hbGwgCmJsdWUgdHJpYW5nbGUgd2l0aCB0aGUgc21hbGwgZ3JlZW4gdHJpYW5nbGUuJm5ic3A7IFRoZSB1cHBlciByaWdodCByZWQgdHJpYW5nbGUgCmlzIHRoZSBjb252b2x1dGlvbiBvZiB0aGUgbGFyZ2UgYmx1ZSBhbmQgbGFyZ2UgZ3JlZW4gdHJpYW5nbGUuJm5ic3A7IFRoZSB0d28gCm1lZGl1bSBzaXplZCByZWQgcG9seWdvbnMgYXJlIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZvbHV0aW9uIG9mIHRoZSBzbWFsbCB3aXRoIApsYXJnZSBhbmQgbGFyZ2Ugd2l0aCBzbWFsbCBibHVlIGFuZCBncmVlbiB0cmlhbmdsZXMuJm5ic3A7IFRoZSB0ZXN0IGNhc2Ugd2FzIApjYXJlZnVsbHkgY29udHJpdmVkIHRvIHByZXZlbnQgdGhlIHJlc3VsdCBmcm9tIG1lcmdpbmcgdG9nZXRoZXIsIHRob3VnaCB0aGF0IApjb3VsZCBjZXJ0YWlubHkgaGFwcGVuLjwvcD4KPHA+VGhlIGFsZ29yaXRobSBpbXBsZW1lbnRlZCBmb3IgTWlua293c2tpIHN1bSBpbiB0aGlzIHR1dG9yaWFsIGlzIHZlcnkgc2ltcGxlLiZuYnNwOyAKSXQgaXMgYmFzZWQgb24gdGhlIGNvbnZvbHV0aW9uIG9mIHBvbHlnb24gZWRnZXMuJm5ic3A7IFRoZSBjb252b2x1dGlvbiBvZiB0d28gCmVkZ2VzIGlzIHZlcnkgZWFzeSB0byBjb21wdXRlIGFuZCBpcyBpbiBnZW5lcmFsIGEgcGFyYWxsZWxvZ3JhbS4mbmJzcDsgQW4gCmV4YW1wbGUgb2YgdHdvIGVkZ2VzIGJlaW5nIGNvbnZvbHZlZCB0byBwcm9kdWNlIGEgcGFyYWxsZWxvZ3JhbSBpcyBzaG93biBiZWxvdy48L3A+CjxwPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltYWdlcy9jb252b2x2ZV9lZGdlcy5QTkciIHdpZHRoPSI0OTEiIGhlaWdodD0iNDYxIj48L3A+CjxwPk5vdyB0aGF0IHdlIGtub3cgd2hhdCB3ZSBuZWVkIGZyb20gYSBmdW5jdGlvbiB0byBjb252b2x2ZSB0d28gZWRnZXMsIGxldCdzIAppbXBsZW1lbnQgb25lIG5vdy4mbmJzcDsgQmVsb3cgd2Ugc2hvdyB0aGUgY29kZSBmb3IgY29udm9sdmluZyB0d28gZWRnZXMgYWxvbmcgCndpdGggc29tZSB0eXBlIGRlZmluaXRpb25zIHdlIHdpbGwgYmUgdXNpbmcgdGhyb3VnaG91dCB0aGUgdHV0b3JpYWwuJm5ic3A7IFRoZSAKY29kZSBmb3IgdGhpcyB0dXRvcmlhbCBpcyBhdmFpbGFibGUgaW4gPGEgaHJlZj0idHV0b3JpYWwvbWlua293c2tpLmNwcCI+Cm1pbmtvd3NraS5jcHA8L2E+LjwvcD4KPHA+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9IjIiPnR5cGVkZWYgYm9vc3Q6OnBvbHlnb246OnBvaW50X2RhdGEmbHQ7aW50Jmd0OyAKcG9pbnQ7PGJyPgp0eXBlZGVmIGJvb3N0Ojpwb2x5Z29uOjpwb2x5Z29uX3NldF9kYXRhJmx0O2ludCZndDsgcG9seWdvbl9zZXQ7PGJyPgp0eXBlZGVmIGJvb3N0Ojpwb2x5Z29uOjpwb2x5Z29uX3dpdGhfaG9sZXNfZGF0YSZsdDtpbnQmZ3Q7IHBvbHlnb247PGJyPgp0eXBlZGVmIHN0ZDo6cGFpciZsdDtwb2ludCwgcG9pbnQmZ3Q7IGVkZ2U7PGJyPgp1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnBvbHlnb246Om9wZXJhdG9yczs8YnI+Cjxicj4Kdm9pZCBjb252b2x2ZV90d29fc2VnbWVudHMoc3RkOjp2ZWN0b3ImbHQ7cG9pbnQmZ3Q7JmFtcDsgZmlndXJlLCBjb25zdCBlZGdlJmFtcDsgYSwgY29uc3QgCmVkZ2UmYW1wOyBiKSB7PGJyPgombmJzcDsgdXNpbmcgbmFtZXNwYWNlIGJvb3N0Ojpwb2x5Z29uOzxicj4KJm5ic3A7IGZpZ3VyZS5jbGVhcigpOzxicj4KJm5ic3A7IGZpZ3VyZS5wdXNoX2JhY2socG9pbnQoYS5maXJzdCkpOzxicj4KJm5ic3A7IGZpZ3VyZS5wdXNoX2JhY2socG9pbnQoYS5maXJzdCkpOzxicj4KJm5ic3A7IGZpZ3VyZS5wdXNoX2JhY2socG9pbnQoYS5zZWNvbmQpKTs8YnI+CiZuYnNwOyBmaWd1cmUucHVzaF9iYWNrKHBvaW50KGEuc2Vjb25kKSk7PGJyPgombmJzcDsgY29udm9sdmUoZmlndXJlWzBdLCBiLnNlY29uZCk7PGJyPgombmJzcDsgY29udm9sdmUoZmlndXJlWzFdLCBiLmZpcnN0KTs8YnI+CiZuYnNwOyBjb252b2x2ZShmaWd1cmVbMl0sIGIuZmlyc3QpOzxicj4KJm5ic3A7IGNvbnZvbHZlKGZpZ3VyZVszXSwgYi5zZWNvbmQpOzxicj4KfTwvZm9udD48L3A+CjxwPlRoaXMgZnVuY3Rpb24gZm9yIGNvbnZvbHZpbmcgdHdvIGxpbmUgc2VnbWVudHMganVzdCBjb252b2x2ZXMgdGhlIGVuZCBwb2ludHMgCm9mIHRoZSB0d28gbGluZSBzZWdtZW50cyBpbiBhbGwgY29tYmluYXRpb25zIHRvIHByb2R1Y2UgdGhlIGZvdXIgcG9pbnRzIG9mIGEgCnBhcmFsbGVsb2dyYW0gYW5kIHBvcHVsYXRlcyBhIHZlY3RvciBvZiBwb2ludHMgd2l0aCB0aGVtIGluIHRoZSBjb3JyZWN0IG9yZGVyLiZuYnNwOyAKV2UgYXJlIHVzaW5nIHRoZSBCb29zdC5Qb2x5Z29uIGxpYnJhcnkgZnVuY3Rpb24gZm9yIGNvbnZvbHZpbmcgdHdvIHBvaW50cyBhbmQgCnRoZSBsaWJyYXJ5IHBvaW50IGRhdGEgc3RydWN0dXJlLjwvcD4KPHA+VG8gY29tcHV0ZSB0aGUgY29udm9sdXRpb24gb2YgdHdvIHBvbHlnb24gc2V0cyB3ZSBzdGFydCBieSB0YWtpbmcgdGhlIHVuaW9uIApvZiB0aGUgY29udm9sdXRpb24gb2YgYWxsIHBhaXJzIG9mIGVkZ2VzIGJldHdlZW4gdGhlIHR3byBwb2x5Z29uIHNldHMuJm5ic3A7IApHaXZlbiBhbiBvcGVyYXRpb24gZm9yIGNvbnZvbHZpbmcgdHdvIGVkZ2VzIGl0IGlzIHByZXR0eSBlYXN5IHRvIGNvbnZvbHZlIGFsbCAKcGFpcnMgb2YgZWRnZXMgb2YgdHdvIHBvbHlnb24gc2V0cy4mbmJzcDsgVGhlIHJlc3VsdCBpcyB0aGUgY29udm9sdXRpb24gdGhlIApwZXJpbWV0ZXJzIG9mIHRoZSBwb2x5Z29uIHNldHMsIGJ1dCBkb2Vzbid0IGhhbmRsZSB0aGUgY29udm9sdXRpb24gb2YgdGhlaXIgCmludGVyaW9ycy4mbmJzcDsgVG8gaWxsdXN0cmF0ZSB0aGlzIHdlIHNob3cgd2hhdCBoYXBwZW5zIHdoZW4gb25lIG9mIHRoZSBhYm92ZSAKZXhhbXBsZXMgaXMgY29tcHV0ZWQgdXNpbmcganVzdCB0aGUgYWxsIHBhaXJzIG9mIGVkZ2VzIGNvbnZvbHV0aW9uLjwvcD4KPHA+Jm5ic3A7IDxpbWcgYm9yZGVyPSIwIiBzcmM9ImltYWdlcy9wZXJpbWV0ZXJfY29udm9sdmUuUE5HIiB3aWR0aD0iNTQ2IiBoZWlnaHQ9IjQzMiI+PC9wPgo8cD5BcyB3ZSBjYW4gc2VlLCB0aGUgcmVzdWx0IGlzIGFzIGlmIHRoZSBzbWFsbCB0cmlhbmdsZXMgd2VyZSBzbGlkIGFyb3VuZCB0aGUgCnBlcmltZXRlciBvZiB0aGUgbGFyZ2UgdHJpYW5nbGVzIGxlYXZpbmcgYSBob2xlIGluIHRoZSBjZW50ZXIgdGhhdCBzaG91bGQgYmUgCmZpbGxlZCBpbiBpZiB0aGUgc21hbGwgdHJpYW5nbGUgd2VyZSBhbGxvd2VkIHRvIHNsaWRlIGZyZWVseSB3aXRoaW4gdGhlIGxhcmdlIAp0cmlhbmdsZS4mbmJzcDsgQWxzbyBhdmFpbGFibGUgaW4gQm9vc3QuUG9seWdvbiBpcyB0aGUgPGZvbnQgZmFjZT0iQ291cmllciBOZXciPgpjb252b2x2ZTwvZm9udD4gZnVuY3Rpb24gZm9yIDxhIGhyZWY9Imd0bF9wb2x5Z29uX2NvbmNlcHQuaHRtIj5wb2x5Z29uX2NvbmNlcHQ8L2E+IAp0aGF0IGNvbnZvbHZlcyBhIHBvbHlnb24gb3ZlciBhIHBvaW50LiZuYnNwOyBBbGwgdGhpcyBkb2VzIGlzIHRyYW5zbGF0ZSB0aGUgCnBvbHlnb24gYnkgdGhlIHggYW5kIHkgdmFsdWUgb2YgdGhlIHBvaW50LiZuYnNwOyBUbyBmaWxsIGluIHRoZSBpbnRlcmlvciByZWdpb25zIApvZiB0aGUgcmVzdWx0IG9mIHRoZSBjb252b2x1dGlvbiBvZiB0d28gcG9seWdvbiBzZXRzIHdlIHBlcmZvcm0gYW4gYWxsIHBhaXJzIG9mIApwb2x5Z29uIGNvbnZvbHV0aW9uIHRvIHRoZSBmaXJzdCB2ZXJ0ZXggb2YgdGhlIG90aGVyIHBvbHlnb24gYW5kIG1lcmdlIHRoYXQgaW50byAKdGhlIHVuaW9uIG9mIGVkZ2UgY29udm9sdXRpb25zLjwvcD4KPHA+TGV0J3MgaW1wbGVtZW50IHRoZSByZXN0IG9mIE1pbmtvd3NraSBzdW0gb2YgdHdvIHBvbHlnb24gc2V0cyBhcyB0aGUgdW5pb24gb2YgCmFsbCBwYWlycyBlZGdlcyBjb252b2x1dGlvbnMgYW5kIHRoZSBhbGwgcGFpcnMgb2YgcG9seWdvbnMgdG8gcG9pbnQgCmNvbnZvbHV0aW9ucy4mbmJzcDsgRmlyc3Qgd2UgaW1wbGVtZW50IGEgZnVuY3Rpb24gdGhhdCBjb252b2x2ZXMgYWxsIHBhaXJzIG9mIAplZGdlcyByZXByZXNlbnRlZCBieSBpdGVyYXRvciBwYWlycyBvdmVyIHBvaW50cy4mbmJzcDsgV2UgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IApwb2ludCBpcyBlcXVhbCB0byB0aGUgbGFzdCBwb2ludCBpbiBlYWNoIHNlcXVlbmNlIGJlY2F1c2Ugd2Uga25vdyB0aGUgcG9seWdvbnMgCnRoYXQgZ2F2ZSByaXNlIHRvIHRoZSBpdGVyYXRvcnMgd2VyZSBwcm9kdWNlZCBieSB0aGUgQm9vc3QuUG9seWdvbiBhbGdvcml0aG0gZm9yIApnZW5lcmFsIHBvbHlnb24gZm9ybWF0aW9uLjwvcD4KPHA+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9IjIiPnRlbXBsYXRlICZsdDt0eXBlbmFtZSBpdHJUMSwgdHlwZW5hbWUgaXRyVDImZ3Q7PGJyPgp2b2lkIGNvbnZvbHZlX3R3b19wb2ludF9zZXF1ZW5jZXMocG9seWdvbl9zZXQmYW1wOyByZXN1bHQsIGl0clQxIGFiLCBpdHJUMSBhZSwgaXRyVDIgCmJiLCBpdHJUMiBiZSkgezxicj4KJm5ic3A7IHVzaW5nIG5hbWVzcGFjZSBib29zdDo6cG9seWdvbjs8YnI+CiZuYnNwOyBpZihhYiA9PSBhZSB8fCBiYiA9PSBiZSk8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm47PGJyPgombmJzcDsgcG9pbnQgcHJldl9hID0gKmFiOzxicj4KJm5ic3A7IHN0ZDo6dmVjdG9yJmx0O3BvaW50Jmd0OyB2ZWM7PGJyPgombmJzcDsgcG9seWdvbiBwb2x5Ozxicj4KJm5ic3A7ICsrYWI7PGJyPgombmJzcDsgZm9yKCA7IGFiICE9IGFlOyArK2FiKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgcG9pbnQgcHJldl9iID0gKmJiOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGl0clQyIHRtcGIgPSBiYjs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyArK3RtcGI7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgZm9yKCA7IHRtcGIgIT0gYmU7ICsrdG1wYikgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnZvbHZlX3R3b19zZWdtZW50cyh2ZWMsIHN0ZDo6bWFrZV9wYWlyKHByZXZfYiwgCip0bXBiKSwgc3RkOjptYWtlX3BhaXIocHJldl9hLCAqYWIpKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzZXRfcG9pbnRzKHBvbHksIHZlYy5iZWdpbigpLCB2ZWMuZW5kKCkpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJlc3VsdC5pbnNlcnQocG9seSk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcHJldl9iID0gKnRtcGI7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHByZXZfYSA9ICphYjs8YnI+CiZuYnNwOyB9PGJyPgp9PC9mb250PjwvcD4KPHA+VXNpbmcgdGhlIGZ1bmN0aW9uIGRlZmluZWQgYWJvdmUgd2UgY2FuIGltcGxlbWVudCBhIGZ1bmN0aW9uIGZvciBjb21wdXRpbmcgCnRoZSBjb252b2x1dGlvbiBvZiBhbGwgcGFpcnMgb2YgZWRnZXMgcmVwcmVzZW50ZWQgYnkgYW4gaXRlcmF0b3IgcGFpciBvdmVyIApwb2ludHMgYW5kIGVkZ2VzIGluIGEgY29sbGVjdGlvbiBvZiBwb2x5Z29ucy4mbmJzcDsgV2UganVzdCBjYWxsIHRoZSAKY29udm9sdmVfdHdvX3BvaW50X3NlcXVlbmNlcyBmb3IgdGhlIGlucHV0IHBvaW50IHNlcXVlbmNlIGFuZCBhbGwgb3V0ZXIgc2hlbGwgCmFuZCBob2xlIHBvaW50IHNlcXVlbmNlcyBmcm9tIHRoZSBjb250YWluZXIgb2YgcG9seWdvbnMuPC9wPgo8cD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+dGVtcGxhdGUgJmx0O3R5cGVuYW1lIGl0clQmZ3Q7PGJyPgp2b2lkIGNvbnZvbHZlX3BvaW50X3NlcXVlbmNlX3dpdGhfcG9seWdvbnMocG9seWdvbl9zZXQmYW1wOyByZXN1bHQsIGl0clQgYiwgaXRyVCBlLCAKY29uc3Qgc3RkOjp2ZWN0b3ImbHQ7cG9seWdvbiZndDsmYW1wOyBwb2x5Z29ucykgezxicj4KJm5ic3A7IHVzaW5nIG5hbWVzcGFjZSBib29zdDo6cG9seWdvbjs8YnI+CiZuYnNwOyBmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgJmx0OyBwb2x5Z29ucy5zaXplKCk7ICsraSkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnZvbHZlX3R3b19wb2ludF9zZXF1ZW5jZXMocmVzdWx0LCBiLCBlLCAKYmVnaW5fcG9pbnRzKHBvbHlnb25zW2ldKSwgZW5kX3BvaW50cyhwb2x5Z29uc1tpXSkpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGZvcihwb2x5Z29uX3dpdGhfaG9sZXNfdHJhaXRzJmx0O3BvbHlnb24mZ3Q7OjppdGVyYXRvcl9ob2xlc190eXBlIAppdHJoID0gYmVnaW5faG9sZXMocG9seWdvbnNbaV0pOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGl0cmggIT0gZW5kX2hvbGVzKHBvbHlnb25zW2ldKTsgKytpdHJoKSAKezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnZvbHZlX3R3b19wb2ludF9zZXF1ZW5jZXMocmVzdWx0LCBiLCBlLCAKYmVnaW5fcG9pbnRzKCppdHJoKSwgZW5kX3BvaW50cygqaXRyaCkpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyB9PGJyPgp9PC9mb250PjwvcD4KPHA+VXNpbmcgdGhlIGZ1bmN0aW9uIGRlZmluZWQgYWJvdmUgd2UgY2FuIGltcGxlbWVudCBhIGZ1bmN0aW9uIGZvciBjb21wdXRpbmcgCnRoZSBjb252b2x1dGlvbiBvZiBhbGwgcGFpcnMgb2YgZWRnZXMgZnJvbSBwb2x5Z29ucyBjb250YWluZWQgd2l0aGluIHR3byBwb2x5Z29uIApzZXRzLiZuYnNwOyBXZSBhbHNvIGNvbnZvbHZlIGVhY2ggcG9seWdvbiB3aXRoIHRoZSBmaXJzdCB2ZXJ0ZXggb2YgZXZlcnkgcG9seWdvbiAKZnJvbSB0aGUgb3RoZXIgc2V0IHRvIGZpbGwgaW4gdGhlIGludGVyaW9ycyBvZiB0aGUgcmVzdWx0LjwvcD4KPHA+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9IjIiPnZvaWQgY29udm9sdmVfdHdvX3BvbHlnb25fc2V0cyhwb2x5Z29uX3NldCZhbXA7IApyZXN1bHQsIGNvbnN0IHBvbHlnb25fc2V0JmFtcDsgYSwgY29uc3QgcG9seWdvbl9zZXQmYW1wOyBiKSB7PGJyPgombmJzcDsgdXNpbmcgbmFtZXNwYWNlIGJvb3N0Ojpwb2x5Z29uOzxicj4KJm5ic3A7IHJlc3VsdC5jbGVhcigpOzxicj4KJm5ic3A7IHN0ZDo6dmVjdG9yJmx0O3BvbHlnb24mZ3Q7IGFfcG9seWdvbnM7PGJyPgombmJzcDsgc3RkOjp2ZWN0b3ImbHQ7cG9seWdvbiZndDsgYl9wb2x5Z29uczs8YnI+CiZuYnNwOyBhLmdldChhX3BvbHlnb25zKTs8YnI+CiZuYnNwOyBiLmdldChiX3BvbHlnb25zKTs8YnI+CiZuYnNwOyBmb3Ioc3RkOjpzaXplX3QgYWkgPSAwOyBhaSAmbHQ7IGFfcG9seWdvbnMuc2l6ZSgpOyArK2FpKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgY29udm9sdmVfcG9pbnRfc2VxdWVuY2Vfd2l0aF9wb2x5Z29ucyhyZXN1bHQsIApiZWdpbl9wb2ludHMoYV9wb2x5Z29uc1thaV0pLCA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAKZW5kX3BvaW50cyhhX3BvbHlnb25zW2FpXSksIGJfcG9seWdvbnMpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGZvcihwb2x5Z29uX3dpdGhfaG9sZXNfdHJhaXRzJmx0O3BvbHlnb24mZ3Q7OjppdGVyYXRvcl9ob2xlc190eXBlIAppdHJoID0gYmVnaW5faG9sZXMoYV9wb2x5Z29uc1thaV0pOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGl0cmggIT0gZW5kX2hvbGVzKGFfcG9seWdvbnNbYWldKTsgKytpdHJoKSAKezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnZvbHZlX3BvaW50X3NlcXVlbmNlX3dpdGhfcG9seWdvbnMocmVzdWx0LCAKYmVnaW5fcG9pbnRzKCppdHJoKSwgPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgCmVuZF9wb2ludHMoKml0cmgpLCBiX3BvbHlnb25zKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgZm9yKHN0ZDo6c2l6ZV90IGJpID0gMDsgYmkgJmx0OyBiX3BvbHlnb25zLnNpemUoKTsgKytiaSkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHBvbHlnb24gdG1wX3BvbHkgPSBhX3BvbHlnb25zW2FpXTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXN1bHQuaW5zZXJ0KGNvbnZvbHZlKHRtcF9wb2x5LCAqKGJlZ2luX3BvaW50cyhiX3BvbHlnb25zW2JpXSkpKSk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdG1wX3BvbHkgPSBiX3BvbHlnb25zW2JpXTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXN1bHQuaW5zZXJ0KGNvbnZvbHZlKHRtcF9wb2x5LCAqKGJlZ2luX3BvaW50cyhhX3BvbHlnb25zW2FpXSkpKSk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KJm5ic3A7IH08YnI+Cn08L2ZvbnQ+PC9wPgo8cD5XZSB0ZXN0IHRoZSBjb252b2x1dGlvbiBvZiB0d28gcG9seWdvbiBzZXRzIHdpdGggdGhlIGNvZGUgc2hvd24gYmVsb3cgdGhhdCAKcHJvZHVjZXMgdGhlIGZpcnN0IGV4YW1wbGUgc2hvd24gaW4gdGhpcyB0dXRvcmlhbC48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+CjwvZm9udD48L3A+CjxwPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPSIyIj5wb2x5Z29uX3NldCBhLCBiLCBjOzxicj4KYSArPSBib29zdDo6cG9seWdvbjo6cmVjdGFuZ2xlX2RhdGEmbHQ7aW50Jmd0OygwKzMwMCwgMCwgMjAwKzMwMCwgMjAwKTs8YnI+CmEgLT0gYm9vc3Q6OnBvbHlnb246OnJlY3RhbmdsZV9kYXRhJmx0O2ludCZndDsoNTArMzAwLCA1MCwgMTUwKzMwMCwgMTUwKTs8YnI+CnN0ZDo6dmVjdG9yJmx0O3BvbHlnb24mZ3Q7IHBvbHlzOzxicj4Kc3RkOjp2ZWN0b3ImbHQ7cG9pbnQmZ3Q7IHB0czs8YnI+CnB0cy5wdXNoX2JhY2socG9pbnQoLTQwLCAwKzMwMCkpOzxicj4KcHRzLnB1c2hfYmFjayhwb2ludCgtMTAsIDEwKzMwMCkpOzxicj4KcHRzLnB1c2hfYmFjayhwb2ludCgwLCA0MCszMDApKTs8YnI+CnB0cy5wdXNoX2JhY2socG9pbnQoMTAsIDEwKzMwMCkpOzxicj4KcHRzLnB1c2hfYmFjayhwb2ludCg0MCwgMCszMDApKTs8YnI+CnB0cy5wdXNoX2JhY2socG9pbnQoMTAsIC0xMCszMDApKTs8YnI+CnB0cy5wdXNoX2JhY2socG9pbnQoMCwgLTQwKzMwMCkpOzxicj4KcHRzLnB1c2hfYmFjayhwb2ludCgtMTAsIC0xMCszMDApKTs8YnI+CnB0cy5wdXNoX2JhY2socG9pbnQoLTQwLCAwKzMwMCkpOzxicj4KcG9seWdvbiBwb2x5Ozxicj4KYm9vc3Q6OnBvbHlnb246OnNldF9wb2ludHMocG9seSwgcHRzLmJlZ2luKCksIHB0cy5lbmQoKSk7PGJyPgpiKz1wb2x5Ozxicj4KY29udm9sdmVfdHdvX3BvbHlnb25fc2V0cyhjLCBhLCBiKTs8L2ZvbnQ+PC9wPgo8cD5PdXRwdXQgKGEgaXMgYmx1ZSwgYiBpcyBncmVlbiBhbmQgYyBpcyByZWQpOjwvcD4KPHA+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1hZ2VzL2NvbnZvbHV0aW9uMS5QTkciIHdpZHRoPSI0MzgiIGhlaWdodD0iNDA0Ij48L3A+CjxwPlRoaXMgY29uY2x1ZGVzIG91ciB0dXRvcmlhbCBvbiBob3cgdG8gaW1wbGVtZW50IE1pbmtvd3NraSBzdW0gb2YgcG9seWdvbnMgYXMgCnRoZSBjb252b2x1dGlvbiBvZiBwb2x5Z29uIHNldHMgYmFzZWQgb24gdGhlIEJvb2xlYW4gT1Igb3BlcmF0aW9uIG9mIGdlb21ldHJ5IApwcm9kdWNlZCBieSBzaW1wbGVyIGNvbnZvbHV0aW9uIGZlYXR1cmVzIHByb3ZpZGVkIGJ5IHRoZSBCb29zdC5Qb2x5Z29uIGxpYnJhcnkuPC9wPgoKCjx0YWJsZSBjbGFzcz0iZG9jaW5mbyIgcnVsZXM9Im5vbmUiIGZyYW1lPSJ2b2lkIiBpZD0idGFibGUxIj4KCTxjb2xncm91cD4KCQk8Y29sIGNsYXNzPSJkb2NpbmZvLW5hbWUiPjxjb2wgY2xhc3M9ImRvY2luZm8tY29udGVudCI+Cgk8L2NvbGdyb3VwPgoJPHRib2R5IHZBbGlnbj0idG9wIj4KCQk8dHI+CgkJCTx0aCBjbGFzcz0iZG9jaW5mby1uYW1lIj5Db3B5cmlnaHQ6PC90aD4KCQkJPHRkPkNvcHlyaWdodCCpIEludGVsIENvcnBvcmF0aW9uIDIwMDgtMjAxMC48L3RkPgoJCTwvdHI+CgkJPHRyIGNsYXNzPSJmaWVsZCI+CgkJCTx0aCBjbGFzcz0iZG9jaW5mby1uYW1lIj5MaWNlbnNlOjwvdGg+CgkJCTx0ZCBjbGFzcz0iZmllbGQtYm9keSI+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIAoJCQlWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSA8dHQgY2xhc3M9ImxpdGVyYWwiPgoJCQk8c3BhbiBjbGFzcz0icHJlIj5MSUNFTlNFXzFfMC50eHQ8L3NwYW4+PC90dD4gb3IgY29weSBhdAoJCQk8YSBjbGFzcz0icmVmZXJlbmNlIiB0YXJnZXQ9Il90b3AiIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+CgkJCWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC90ZD4KCQk8L3RyPgo8L3RhYmxlPgoKPC9ib2R5PgoKPC9odG1sPg==