PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+CjxodG1sPgoJPGhlYWQ+CgkJPHRpdGxlPnBvaW50ZXJfdG9fb3RoZXIuaHBwPC90aXRsZT4KCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KCTwvaGVhZD4KCTxib2R5IGJnY29sb3I9IiNmZmZmZmYiIHRleHQ9IiMwMDAwMDAiPgoJCTxoMT48aW1nIHNyYz0iLi4vLi4vYm9vc3QucG5nIiBhbHQ9ImJvb3N0LnBuZyAoNjg5NyBieXRlcykiIGFsaWduPSJtaWRkbGUiIFdJRFRIPSIyNzciIEhFSUdIVD0iODYiPkhlYWRlcgoJCQk8YSBocmVmPSIuLi8uLi9ib29zdC9wb2ludGVyX3RvX290aGVyLmhwcCI+Ym9vc3QvcG9pbnRlcl90b19vdGhlci5ocHA8L2E+PC9oMT4KCQk8cD4KCQkJVGhlIHBvaW50ZXIgdG8gb3RoZXIgdXRpbGl0eSBwcm92aWRlcyBhIHdheSwgZ2l2ZW4gYSBzb3VyY2UgcG9pbnRlciB0eXBlLCAKCQkJdG8gb2J0YWluIGEgcG9pbnRlciBvZiB0aGUgc2FtZSB0eXBlIHRvIGFub3RoZXIgcG9pbnRlZSB0eXBlLiBUaGUgdXRpbGl0eSBpcyAKCQkJZGVmaW5lZCBpbiA8Y2l0ZT48YSBocmVmPSIuLi8uLi9ib29zdC9wb2ludGVyX3RvX290aGVyLmhwcCI+Ym9vc3QvcG9pbnRlcl90b19vdGhlci5ocHA8L2E+LjwvY2l0ZT48L3A+CgkJPHA+VGhlcmUgaXMgdGVzdC9leGFtcGxlIGNvZGUgaW4gPGNpdGU+PGEgaHJlZj0idGVzdC9wb2ludGVyX3RvX290aGVyX3Rlc3QuY3BwIj5wb2ludGVyX3RvX290aGVyX3Rlc3QuY3BwPC9hPjwvY2l0ZT4uPC9wPgoJCTxoMj48YSBuYW1lPSJjb250ZW50cyI+Q29udGVudHM8L2E+PC9oMj4KCQk8dWw+CgkJCTxsaT4KCQkJCTxhIGhyZWY9IiNyYXRpb25hbGUiPlJhdGlvbmFsZTwvYT4KCQkJPGxpPgoJCQkJPGEgaHJlZj0iI3N5bm9wc2lzIj5TeW5vcHNpczwvYT4KCQkJPGxpPgoJCQkJPGEgaHJlZj0iI2V4YW1wbGUiPkV4YW1wbGU8L2E+PC9saT4KCQk8L3VsPgoJCTxoMj48YSBuYW1lPSJyYXRpb25hbGUiPlJhdGlvbmFsZTwvYT48L2gyPgoJCTxwPldoZW4gYnVpbGRpbmcgcG9pbnRlciBpbmRlcGVuZGVudCBjbGFzc2VzLCBsaWtlIG1lbW9yeSBtYW5hZ2VycywgYWxsb2NhdG9ycywgb3IgCgkJCWNvbnRhaW5lcnMsIHRoZXJlIGlzIG9mdGVuIGEgbmVlZCB0byBkZWZpbmUgcG9pbnRlcnMgZ2VuZXJpY2FsbHksIHNvIHRoYXQgaWYgYSAKCQkJdGVtcGxhdGUgcGFyYW1ldGVyIHJlcHJlc2VudHMgYSBwb2ludGVyIChmb3IgZXhhbXBsZSwgYSByYXcgb3Igc21hcnQgcG9pbnRlciB0byAKCQkJYW4gaW50KSwgd2UgY2FuIGRlZmluZSBhbm90aGVyIHBvaW50ZXIgb2YgdGhlIHNhbWUgdHlwZSB0byBhbm90aGVyIHBvaW50ZWUgKGEgCgkJCXJhdyBvciBzbWFydCBwb2ludGVyIHRvIGEgZmxvYXQuKTwvcD4KCQk8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBJbnRQdHImZ3Q7CmNsYXNzIEZsb2F0UG9pbnRlckhvbGRlcgp7ICAgCiAgIDxlbT4vLyBMZXQncyBkZWZpbmUgYSBwb2ludGVyIHRvIGEgZmxvYXQ8L2VtPgogICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0Ojpwb2ludGVyX3RvX290aGVyCiAgICAgICZsdDtJbnRQdHIsIGZsb2F0Jmd0Ozo6dHlwZSBmbG9hdF9wdHJfdDsKICAgZmxvYXRfcHRyX3QgZmxvYXRfcHRyOwp9OzwvcHJlPgoJCTxoMj48YSBuYW1lPSJzeW5vcHNpcyI+U3lub3BzaXM8L2E+PC9oMj4KCQk8cHJlPgpuYW1lc3BhY2UgYm9vc3QgewoKdGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgVSZndDsKICAgc3RydWN0IHBvaW50ZXJfdG9fb3RoZXI7Cgp0ZW1wbGF0ZSZsdDtjbGFzcyBULCBjbGFzcyBVLCB0ZW1wbGF0ZSAmbHQ7Y2xhc3MmZ3Q7IGNsYXNzIFNwJmd0OwogICBzdHJ1Y3QgcG9pbnRlcl90b19vdGhlciZsdDsgU3AmbHQ7VCZndDssIFUgJmd0Owp7CiAgIHR5cGVkZWYgU3AmbHQ7VSZndDsgdHlwZTsKfTsKCnRlbXBsYXRlJmx0O2NsYXNzIFQsIGNsYXNzIFQyLCBjbGFzcyBVLAogICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcywgY2xhc3MmZ3Q7IGNsYXNzIFNwJmd0OwogICBzdHJ1Y3QgcG9pbnRlcl90b19vdGhlciZsdDsgU3AmbHQ7VCwgVDImZ3Q7LCBVICZndDsKewogICB0eXBlZGVmIFNwJmx0O1UsIFQyJmd0OyB0eXBlOwp9OwoKdGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBVLAogICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcywgY2xhc3MsIGNsYXNzJmd0OyBjbGFzcyBTcCZndDsKc3RydWN0IHBvaW50ZXJfdG9fb3RoZXImbHQ7IFNwJmx0O1QsIFQyLCBUMyZndDssIFUgJmd0Owp7CiAgIHR5cGVkZWYgU3AmbHQ7VSwgVDIsIFQzJmd0OyB0eXBlOwp9OwoKdGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgVSZndDsKc3RydWN0IHBvaW50ZXJfdG9fb3RoZXImbHQ7IFQqLCBVICZndDsgCnsKICAgdHlwZWRlZiBVKiB0eXBlOwp9OwoKfSA8ZW0+Ly8gbmFtZXNwYWNlIGJvb3N0PC9lbT48L3ByZT4KCQk8cD5JZiB0aGVzZSBkZWZpbml0aW9ucyBhcmUgbm90IGNvcnJlY3QgZm9yIGEgc3BlY2lmaWMgc21hcnQgcG9pbnRlciwgd2UgY2FuIGRlZmluZSAKCQkJYSBzcGVjaWFsaXphdGlvbiBvZiBwb2ludGVyX3RvX290aGVyLjwvcD4KCQk8aDI+PGEgbmFtZT0iZXhhbXBsZSI+RXhhbXBsZTwvYT48L2gyPgoJCTxwcmU+PGVtPi8vIExldCdzIGRlZmluZSBhIG1lbW9yeSBhbGxvY2F0b3IgdGhhdCBjYW4KLy8gd29yayB3aXRoIHJhdyBhbmQgc21hcnQgcG9pbnRlcnM8L2VtPgoKI2luY2x1ZGUgJmx0O2Jvb3N0L3BvaW50ZXJfdG9fb3RoZXIuaHBwJmd0OwoKdGVtcGxhdGUgJmx0O2NsYXNzIFZvaWRQdHImZ3Q7CmNsYXNzIG1lbW9yeV9hbGxvY2F0b3IKezxlbT4KICAgLy8gUHJlZGVmaW5lIGEgbWVtb3J5X2Jsb2NrIDwvZW0+CiAgIHN0cnVjdCBibG9jazs8ZW0+CgogICAvLyBEZWZpbmUgYSBwb2ludGVyIHRvIGEgbWVtb3J5X2Jsb2NrIGZyb20gYSB2b2lkIHBvaW50ZXIKICAgLy8gSWYgVm9pZFB0ciBpcyB2b2lkICosIGJsb2NrX3B0cl90IGlzIGJsb2NrKgogICAvLyBJZiBWb2lkUHRyIGlzIHNtYXJ0X3B0ciZsdDt2b2lkJmd0OywgYmxvY2tfcHRyX3QgaXMgc21hcnRfcHRyJmx0O2Jsb2NrJmd0OzwvZW0+CiAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OnBvaW50ZXJfdG9fb3RoZXIgICAgICAKICAgICAgICAgICAgJmx0O1ZvaWRQdHIsIGJsb2NrJmd0Ozo6dHlwZSBibG9ja19wdHJfdDsKICAgICAgICAgICAgCiAgIHN0cnVjdCBibG9jawogICB7CiAgICAgIHN0ZDo6c2l6ZV90IHNpemU7CiAgICAgIGJsb2NrX3B0cl90IG5leHRfYmxvY2s7CiAgIH07CgogICBibG9ja19wdHJfdCBmcmVlX2Jsb2NrczsKfTs8L3ByZT4KCQk8cD5BcyB3ZSBjYW4gc2VlLCB1c2luZyBwb2ludGVyX3RvX290aGVyIHdlIGNhbiBjcmVhdGUgcG9pbnRlciBpbmRlcGVuZGVudCBjb2RlLjwvcD4KCQk8aHI+CgkJPHA+TGFzdCByZXZpc2VkOiAkRGF0ZTogMjAwNi0wMy0xOCAxMDo1ODoyMCAtMDQwMCAoU2F0LCAxOCBNYXIgMjAwNikgJDwvcD4KCQk8cD48c21hbGw+Q29weXJpZ2h0IDIwMDUsIDIwMDYgSW9uIEdhenRh8WFnYSBhbmQgUGV0ZXIgRGltb3YuIFVzZSwgbW9kaWZpY2F0aW9uLCAKCQkJCWFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLjxicj4KCQkJCShTZWUgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vTElDRU5TRV8xXzAudHh0Ij5MSUNFTlNFXzFfMC50eHQ8L2E+IG9yIGEgCgkJCQljb3B5IGF0ICZsdDsgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+Jmd0Oy4pPC9zbWFsbD48L3A+Cgk8L2JvZHk+CjwvaHRtbD4K