PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPkRldmVsb3BtZW50PC90aXRsZT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+CjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXKgMS6gQm9vc3QuT3B0aW9uYWwiPgo8bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlcqAxLqBCb29zdC5PcHRpb25hbCI+CjxsaW5rIHJlbD0icHJldiIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXKgMS6gQm9vc3QuT3B0aW9uYWwiPgo8bGluayByZWw9Im5leHQiIGhyZWY9InN5bm9wc2lzLmh0bWwiIHRpdGxlPSJTeW5vcHNpcyI+CjwvaGVhZD4KPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgo8dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Cjx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgo8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgo8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Cjx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cjx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Cjx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgo8L3RyPjwvdGFibGU+Cjxocj4KPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJzeW5vcHNpcy5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KPC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iIHRpdGxlPSJEZXZlbG9wbWVudCI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+CjxhIG5hbWU9ImJvb3N0X29wdGlvbmFsLmRldmVsb3BtZW50Ij48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImRldmVsb3BtZW50Lmh0bWwiIHRpdGxlPSJEZXZlbG9wbWVudCI+RGV2ZWxvcG1lbnQ8L2E+CjwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9InRvYyI+PGRsPgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImRldmVsb3BtZW50Lmh0bWwjYm9vc3Rfb3B0aW9uYWwuZGV2ZWxvcG1lbnQudGhlX21vZGVscyI+VGhlIG1vZGVsczwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJkZXZlbG9wbWVudC5odG1sI2Jvb3N0X29wdGlvbmFsLmRldmVsb3BtZW50LnRoZV9zZW1hbnRpY3MiPlRoZSBzZW1hbnRpY3M8L2E+PC9zcGFuPjwvZHQ+CjxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZGV2ZWxvcG1lbnQuaHRtbCNib29zdF9vcHRpb25hbC5kZXZlbG9wbWVudC50aGVfaW50ZXJmYWNlIj5UaGUgSW50ZXJmYWNlPC9hPjwvc3Bhbj48L2R0Pgo8L2RsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIiB0aXRsZT0iVGhlIG1vZGVscyI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJib29zdF9vcHRpb25hbC5kZXZlbG9wbWVudC50aGVfbW9kZWxzIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImRldmVsb3BtZW50Lmh0bWwjYm9vc3Rfb3B0aW9uYWwuZGV2ZWxvcG1lbnQudGhlX21vZGVscyIgdGl0bGU9IlRoZSBtb2RlbHMiPlRoZSBtb2RlbHM8L2E+CjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+CjxwPgogICAgICAgIEluIEMrKywgd2UgY2FuIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmRlY2xhcmU8L2VtPjwvc3Bhbj4gYW4gb2JqZWN0IChhIHZhcmlhYmxlKSBvZiB0eXBlCiAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+LCBhbmQgd2UgY2FuIGdpdmUgdGhpcyB2YXJpYWJsZQogICAgICAgIGFuIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmluaXRpYWwgdmFsdWU8L2VtPjwvc3Bhbj4gKHRocm91Z2ggYW4gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+aW5pdGlhbGl6ZXI8L2VtPjwvc3Bhbj4uCiAgICAgICAgKGMuZi4gOC41KSkuIFdoZW4gYSBkZWNsYXJhdGlvbiBpbmNsdWRlcyBhIG5vbi1lbXB0eSBpbml0aWFsaXplciAoYW4gaW5pdGlhbAogICAgICAgIHZhbHVlIGlzIGdpdmVuKSwgaXQgaXMgc2FpZCB0aGF0IHRoZSBvYmplY3QgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIElmIHRoZQogICAgICAgIGRlY2xhcmF0aW9uIHVzZXMgYW4gZW1wdHkgaW5pdGlhbGl6ZXIgKG5vIGluaXRpYWwgdmFsdWUgaXMgZ2l2ZW4pLCBhbmQgbmVpdGhlcgogICAgICAgIGRlZmF1bHQgbm9yIHZhbHVlIGluaXRpYWxpemF0aW9uIGFwcGxpZXMsIGl0IGlzIHNhaWQgdGhhdCB0aGUgb2JqZWN0IGlzCiAgICAgICAgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+dW5pbml0aWFsaXplZDwvc3Ryb25nPjwvc3Bhbj4uIEl0cyBhY3R1YWwgdmFsdWUgZXhpc3QgYnV0CiAgICAgICAgaGFzIGFuIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmluZGV0ZXJtaW5hdGUgaW5pdGlhbCB2YWx1ZTwvZW0+PC9zcGFuPiAoYy5mLiA4LjUuOSkuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm9wdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4gaW50ZW5kcwogICAgICAgIHRvIGZvcm1hbGl6ZSB0aGUgbm90aW9uIG9mIGluaXRpYWxpemF0aW9uIChvciBsYWNrIG9mIGl0KSBhbGxvd2luZyBhIHByb2dyYW0KICAgICAgICB0byB0ZXN0IHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZCBzdGF0aW5nIHRoYXQgYWNjZXNzIHRvCiAgICAgICAgdGhlIHZhbHVlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgb2JqZWN0IGlzIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhhdCBpcywgd2hlbgogICAgICAgIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgYXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3B0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPgogICAgICAgIGFuZCBubyBpbml0aWFsIHZhbHVlIGlzIGdpdmVuLCB0aGUgdmFyaWFibGUgaXMgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Zm9ybWFsbHk8L2VtPjwvc3Bhbj4KICAgICAgICB1bmluaXRpYWxpemVkLiBBIGZvcm1hbGx5IHVuaW5pdGlhbGl6ZWQgb3B0aW9uYWwgb2JqZWN0IGhhcyBjb25jZXB0dWFsbHkKICAgICAgICBubyB2YWx1ZSBhdCBhbGwgYW5kIHRoaXMgc2l0dWF0aW9uIGNhbiBiZSB0ZXN0ZWQgYXQgcnVudGltZS4gSXQgaXMgZm9ybWFsbHkKICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT51bmRlZmluZWQgYmVoYXZpb3I8L2VtPjwvc3Bhbj4gdG8gdHJ5IHRvIGFjY2VzcyB0aGUgdmFsdWUgb2YgYW4KICAgICAgICB1bmluaXRpYWxpemVkIG9wdGlvbmFsLiBBbiB1bmluaXRpYWxpemVkIG9wdGlvbmFsIGNhbiBiZSBhc3NpZ25lZCBhIHZhbHVlLAogICAgICAgIGluIHdoaWNoIGNhc2UgaXRzIGluaXRpYWxpemF0aW9uIHN0YXRlIGNoYW5nZXMgdG8gaW5pdGlhbGl6ZWQuIEZ1cnRoZXJtb3JlLAogICAgICAgIGdpdmVuIHRoZSBmb3JtYWwgdHJlYXRtZW50IG9mIGluaXRpYWxpemF0aW9uIHN0YXRlcyBpbiBvcHRpb25hbCBvYmplY3RzLAogICAgICAgIGl0IGlzIGV2ZW4gcG9zc2libGUgdG8gcmVzZXQgYW4gb3B0aW9uYWwgdG8gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dW5pbml0aWFsaXplZDwvZW0+PC9zcGFuPi4KICAgICAgPC9wPgo8cD4KICAgICAgICBJbiBDKysgdGhlcmUgaXMgbm8gZm9ybWFsIG5vdGlvbiBvZiB1bmluaXRpYWxpemVkIG9iamVjdHMsIHdoaWNoIG1lYW5zIHRoYXQKICAgICAgICBvYmplY3RzIGFsd2F5cyBoYXZlIGFuIGluaXRpYWwgdmFsdWUgZXZlbiBpZiBpbmRldGVybWluYXRlLiBBcyBkaXNjdXNzZWQKICAgICAgICBvbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgdGhpcyBoYXMgYSBkcmF3YmFjayBiZWNhdXNlIHlvdSBuZWVkIGFkZGl0aW9uYWwKICAgICAgICBpbmZvcm1hdGlvbiB0byB0ZWxsIGlmIGFuIG9iamVjdCBoYXMgYmVlbiBlZmZlY3RpdmVseSBpbml0aWFsaXplZC4gT25lIG9mCiAgICAgICAgdGhlIHR5cGljYWwgd2F5cyBpbiB3aGljaCB0aGlzIGhhcyBiZWVuIGhpc3RvcmljYWxseSBkZWFsdCB3aXRoIGlzIHZpYSBhCiAgICAgICAgc3BlY2lhbCB2YWx1ZTogPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RU9GPC9zcGFuPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm5wb3M8L3NwYW4+PC9jb2RlPiwgLTEsIGV0Yy4uLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KICAgICAgICBhZGRpbmcgdGhlIHNwZWNpYWwgdmFsdWUgdG8gdGhlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMgb2YgYSBnaXZlbiB0eXBlLiBUaGlzCiAgICAgICAgc3VwZXIgc2V0IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPiBwbHVzIHNvbWUKICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5uaWxfdDwvZW0+PC9zcGFuPiYjODIxMjt3ZXJlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm5pbF90PC9zcGFuPjwvY29kZT4KICAgICAgICBpcyBzb21lIHN0YXRlbGVzcyBQT0QtY2FuIGJlIG1vZGVsZWQgaW4gbW9kZXJuIGxhbmd1YWdlcyBhcyBhIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmRpc2NyaW1pbmF0ZWQKICAgICAgICB1bmlvbjwvc3Ryb25nPjwvc3Bhbj4gb2YgVCBhbmQgbmlsX3QuIERpc2NyaW1pbmF0ZWQgdW5pb25zIGFyZSBvZnRlbiBjYWxsZWQgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dmFyaWFudHM8L2VtPjwvc3Bhbj4uCiAgICAgICAgQSB2YXJpYW50IGhhcyBhIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmN1cnJlbnQgdHlwZTwvZW0+PC9zcGFuPiwgd2hpY2ggaW4gb3VyIGNhc2UgaXMgZWl0aGVyCiAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+IG9yIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm5pbF90PC9zcGFuPjwvY29kZT4uCiAgICAgICAgVXNpbmcgdGhlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL3ZhcmlhbnQvaW5kZXguaHRtbCIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5WYXJpYW50PC9hPgogICAgICAgIGxpYnJhcnksIHRoaXMgbW9kZWwgY2FuIGJlIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFyaWFudDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bmlsX3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPi4KICAgICAgICBUaGVyZSBpcyBwcmVjZWRlbnQgZm9yIGEgZGlzY3JpbWluYXRlZCB1bmlvbiBhcyBhIG1vZGVsIGZvciBhbiBvcHRpb25hbCB2YWx1ZToKICAgICAgICB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5oYXNrZWxsLm9yZy8iIHRhcmdldD0iX3RvcCI+SGFza2VsbDwvYT4gPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+TWF5YmU8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgYnVpbHQtaW4gdHlwZSBjb25zdHJ1Y3Rvci4gVGh1cywgYSBkaXNjcmltaW5hdGVkIHVuaW9uIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPis8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm5pbF90PC9zcGFuPjwvY29kZT4KICAgICAgICBzZXJ2ZXMgYXMgYSBjb25jZXB0dWFsIGZvdW5kYXRpb24uCiAgICAgIDwvcD4KPHA+CiAgICAgICAgQSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YXJpYW50PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5uaWxfdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+IGZvbGxvd3MgbmF0dXJhbGx5IGZyb20gdGhlIHRyYWRpdGlvbmFsCiAgICAgICAgaWRpb20gb2YgZXh0ZW5kaW5nIHRoZSByYW5nZSBvZiBwb3NzaWJsZSB2YWx1ZXMgYWRkaW5nIGFuIGFkZGl0aW9uYWwgc2VudGluZWwKICAgICAgICB2YWx1ZSB3aXRoIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Tm90aGluZzwvZW0+PC9zcGFuPi4gSG93ZXZlciwKICAgICAgICB0aGlzIGFkZGl0aW9uYWwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Tm90aGluZzwvZW0+PC9zcGFuPiB2YWx1ZSBpcyBsYXJnZWx5IGlycmVsZXZhbnQKICAgICAgICBmb3Igb3VyIHB1cnBvc2Ugc2luY2Ugb3VyIGdvYWwgaXMgdG8gZm9ybWFsaXplIHRoZSBub3Rpb24gb2YgdW5pbml0aWFsaXplZAogICAgICAgIG9iamVjdHMgYW5kLCB3aGlsZSBhIHNwZWNpYWwgZXh0ZW5kZWQgdmFsdWUgY2FuIGJlIHVzZWQgdG8gY29udmV5IHRoYXQgbWVhbmluZywKICAgICAgICBpdCBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGRvIHNvLgogICAgICA8L3A+CjxwPgogICAgICAgIFRoZSBvYnNlcnZhdGlvbiBtYWRlIGluIHRoZSBsYXN0IHBhcmFncmFwaCBhYm91dCB0aGUgaXJyZWxldmFudCBuYXR1cmUgb2YKICAgICAgICB0aGUgYWRkaXRpb25hbCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5uaWxfdDwvc3Bhbj48L2NvZGU+IHdpdGgKICAgICAgICByZXNwZWN0IHRvIDxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPnB1cnBvc2U8L3NwYW4+IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm9wdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4gc3VnZ2VzdHMKICAgICAgICBhbiBhbHRlcm5hdGl2ZSBtb2RlbDogYSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5jb250YWluZXI8L2VtPjwvc3Bhbj4gdGhhdCBlaXRoZXIgaGFzIGEKICAgICAgICB2YWx1ZSBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4gb3Igbm90aGluZy4KICAgICAgPC9wPgo8cD4KICAgICAgICBBcyBvZiB0aGlzIHdyaXRpbmcgSSBkb24ndCBrbm93IG9mIGFueSBwcmVjZWRlbmNlIGZvciBhIHZhcmlhYmxlLXNpemUgZml4ZWQtY2FwYWNpdHkKICAgICAgICAob2YgMSkgc3RhY2stYmFzZWQgY29udGFpbmVyIG1vZGVsIGZvciBvcHRpb25hbCB2YWx1ZXMsIHlldCBJIGJlbGlldmUgdGhpcwogICAgICAgIGlzIHRoZSBjb25zZXF1ZW5jZSBvZiB0aGUgbGFjayBvZiBwcmFjdGljYWwgaW1wbGVtZW50YXRpb25zIG9mIHN1Y2ggYSBjb250YWluZXIKICAgICAgICByYXRoZXIgdGhhbiBhbiBpbmhlcmVudCBzaG9ydGNvbWluZyBvZiB0aGUgY29udGFpbmVyIG1vZGVsLgogICAgICA8L3A+CjxwPgogICAgICAgIEluIGFueSBldmVudCwgYm90aCB0aGUgZGlzY3JpbWluYXRlZC11bmlvbiBvciB0aGUgc2luZ2xlLWVsZW1lbnQgY29udGFpbmVyCiAgICAgICAgbW9kZWxzIHNlcnZlIGFzIGEgY29uY2VwdHVhbCBncm91bmQgZm9yIGEgY2xhc3MgcmVwcmVzZW50aW5nIG9wdGlvbmFsJiM4MjEyO2kuZS4KICAgICAgICBwb3NzaWJseSB1bmluaXRpYWxpemVkJiM4MjEyO29iamVjdHMuIEZvciBpbnN0YW5jZSwgdGhlc2UgbW9kZWxzIHNob3cgdGhlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmV4YWN0PC9lbT48L3NwYW4+CiAgICAgICAgc2VtYW50aWNzIHJlcXVpcmVkIGZvciBhIHdyYXBwZXIgb2Ygb3B0aW9uYWwgdmFsdWVzOgogICAgICA8L3A+CjxwPgogICAgICAgIERpc2NyaW1pbmF0ZWQtdW5pb246CiAgICAgIDwvcD4KPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5kZWVwLWNvcHk8L3N0cm9uZz48L3NwYW4+IHNlbWFudGljczogY29waWVzIG9mIHRoZSB2YXJpYW50CiAgICAgICAgICBpbXBsaWVzIGNvcGllcyBvZiB0aGUgdmFsdWUuCiAgICAgICAgPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmRlZXAtcmVsYXRpb25hbDwvc3Ryb25nPjwvc3Bhbj4gc2VtYW50aWNzOiBjb21wYXJpc29ucwogICAgICAgICAgYmV0d2VlbiB2YXJpYW50cyBtYXRjaGVzIGJvdGggY3VycmVudCB0eXBlcyBhbmQgdmFsdWVzCiAgICAgICAgPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CiAgICAgICAgICBJZiB0aGUgdmFyaWFudCdzIGN1cnJlbnQgdHlwZSBpcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4sCiAgICAgICAgICBpdCBpcyBtb2RlbGluZyBhbiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5pbml0aWFsaXplZDwvZW0+PC9zcGFuPiBvcHRpb25hbC4KICAgICAgICA8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KICAgICAgICAgIElmIHRoZSB2YXJpYW50J3MgY3VycmVudCB0eXBlIGlzIG5vdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4sCiAgICAgICAgICBpdCBpcyBtb2RlbGluZyBhbiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT51bmluaXRpYWxpemVkPC9lbT48L3NwYW4+IG9wdGlvbmFsLgogICAgICAgIDwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgogICAgICAgICAgVGVzdGluZyBpZiB0aGUgdmFyaWFudCdzIGN1cnJlbnQgdHlwZSBpcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4KICAgICAgICAgIG1vZGVscyB0ZXN0aW5nIGlmIHRoZSBvcHRpb25hbCBpcyBpbml0aWFsaXplZAogICAgICAgIDwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgogICAgICAgICAgVHJ5aW5nIHRvIGV4dHJhY3QgYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4gZnJvbQogICAgICAgICAgYSB2YXJpYW50IHdoZW4gaXRzIGN1cnJlbnQgdHlwZSBpcyBub3QgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+LAogICAgICAgICAgbW9kZWxzIHRoZSB1bmRlZmluZWQgYmVoYXZpb3Igb2YgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgdmFsdWUgb2YgYW4gdW5pbml0aWFsaXplZAogICAgICAgICAgb3B0aW9uYWwKICAgICAgICA8L2xpPgo8L3VsPjwvZGl2Pgo8cD4KICAgICAgICBTaW5nbGUtZWxlbWVudCBjb250YWluZXI6CiAgICAgIDwvcD4KPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5kZWVwLWNvcHk8L3N0cm9uZz48L3NwYW4+IHNlbWFudGljczogY29waWVzIG9mIHRoZSBjb250YWluZXIKICAgICAgICAgIGltcGxpZXMgY29waWVzIG9mIHRoZSB2YWx1ZS4KICAgICAgICA8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+ZGVlcC1yZWxhdGlvbmFsPC9zdHJvbmc+PC9zcGFuPiBzZW1hbnRpY3M6IGNvbXBhcmlzb25zCiAgICAgICAgICBiZXR3ZWVuIGNvbnRhaW5lcnMgY29tcGFyZSBjb250YWluZXIgc2l6ZSBhbmQgaWYgbWF0Y2gsIGNvbnRhaW5lZCB2YWx1ZQogICAgICAgIDwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgogICAgICAgICAgSWYgdGhlIGNvbnRhaW5lciBpcyBub3QgZW1wdHkgKGNvbnRhaW5zIGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPiksIGl0IGlzIG1vZGVsaW5nIGFuIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmluaXRpYWxpemVkPC9lbT48L3NwYW4+CiAgICAgICAgICBvcHRpb25hbC4KICAgICAgICA8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KICAgICAgICAgIElmIHRoZSBjb250YWluZXIgaXMgZW1wdHksIGl0IGlzIG1vZGVsaW5nIGFuIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnVuaW5pdGlhbGl6ZWQ8L2VtPjwvc3Bhbj4KICAgICAgICAgIG9wdGlvbmFsLgogICAgICAgIDwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgogICAgICAgICAgVGVzdGluZyBpZiB0aGUgY29udGFpbmVyIGlzIGVtcHR5IG1vZGVscyB0ZXN0aW5nIGlmIHRoZSBvcHRpb25hbCBpcyBpbml0aWFsaXplZAogICAgICAgIDwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgogICAgICAgICAgVHJ5aW5nIHRvIGV4dHJhY3QgYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4gZnJvbQogICAgICAgICAgYW4gZW1wdHkgY29udGFpbmVyIG1vZGVscyB0aGUgdW5kZWZpbmVkIGJlaGF2aW9yIG9mIHRyeWluZyB0byBhY2Nlc3MgdGhlCiAgICAgICAgICB2YWx1ZSBvZiBhbiB1bmluaXRpYWxpemVkIG9wdGlvbmFsCiAgICAgICAgPC9saT4KPC91bD48L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iIHRpdGxlPSJUaGUgc2VtYW50aWNzIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9ImJvb3N0X29wdGlvbmFsLmRldmVsb3BtZW50LnRoZV9zZW1hbnRpY3MiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iZGV2ZWxvcG1lbnQuaHRtbCNib29zdF9vcHRpb25hbC5kZXZlbG9wbWVudC50aGVfc2VtYW50aWNzIiB0aXRsZT0iVGhlIHNlbWFudGljcyI+VGhlIHNlbWFudGljczwvYT4KPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+CiAgICAgICAgT2JqZWN0cyBvZiB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm9wdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4KICAgICAgICBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBwbGFjZXMgd2hlcmUgb2JqZWN0cyBvZiB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPgogICAgICAgIHdvdWxkIGJ1dCB3aGljaCBtaWdodCBiZSB1bmluaXRpYWxpemVkLiBIZW5jZSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3B0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPidzCiAgICAgICAgcHVycG9zZSBpcyB0byBmb3JtYWxpemUgdGhlIGFkZGl0aW9uYWwgcG9zc2libHkgdW5pbml0aWFsaXplZCBzdGF0ZS4gRnJvbQogICAgICAgIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGlzIHJvbGUsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm9wdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4KICAgICAgICBjYW4gaGF2ZSB0aGUgc2FtZSBvcGVyYXRpb25hbCBzZW1hbnRpY3Mgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+CiAgICAgICAgcGx1cyB0aGUgYWRkaXRpb25hbCBzZW1hbnRpY3MgY29ycmVzcG9uZGluZyB0byB0aGlzIHNwZWNpYWwgc3RhdGUuIEFzIHN1Y2gsCiAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3B0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPiBjb3VsZAogICAgICAgIGJlIHRob3VnaHQgb2YgYXMgYSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5zdXBlcnR5cGU8L2VtPjwvc3Bhbj4gb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+LgogICAgICAgIE9mIGNvdXJzZSwgd2UgY2FuJ3QgZG8gdGhhdCBpbiBDKyssIHNvIHdlIG5lZWQgdG8gY29tcG9zZSB0aGUgZGVzaXJlZCBzZW1hbnRpY3MKICAgICAgICB1c2luZyBhIGRpZmZlcmVudCBtZWNoYW5pc20uIERvaW5nIGl0IHRoZSBvdGhlciB3YXkgYXJvdW5kLCB0aGF0IGlzLCBtYWtpbmcKICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vcHRpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+IGEKICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5zdWJ0eXBlPC9lbT48L3NwYW4+IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPgogICAgICAgIGlzIG5vdCBvbmx5IGNvbmNlcHR1YWxseSB3cm9uZyBidXQgYWxzbyBpbXByYWN0aWNhbDogaXQgaXMgbm90IGFsbG93ZWQgdG8KICAgICAgICBkZXJpdmUgZnJvbSBhIG5vbi1jbGFzcyB0eXBlLCBzdWNoIGFzIGEgYnVpbHQtaW4gdHlwZS4KICAgICAgPC9wPgo8cD4KICAgICAgICBXZSBjYW4gZHJhdyBmcm9tIHRoZSBwdXJwb3NlIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm9wdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4KICAgICAgICB0aGUgcmVxdWlyZWQgYmFzaWMgc2VtYW50aWNzOgogICAgICA8L3A+CjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+RGVmYXVsdCBDb25zdHJ1Y3Rpb246PC9zdHJvbmc+PC9zcGFuPiBUbyBpbnRyb2R1Y2UgYSBmb3JtYWxseQogICAgICAgICAgdW5pbml0aWFsaXplZCB3cmFwcGVkIG9iamVjdC4KICAgICAgICA8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+RGlyZWN0IFZhbHVlIENvbnN0cnVjdGlvbiB2aWEgY29weTo8L3N0cm9uZz48L3NwYW4+IFRvCiAgICAgICAgICBpbnRyb2R1Y2UgYSBmb3JtYWxseSBpbml0aWFsaXplZCB3cmFwcGVkIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyBvYnRhaW5lZAogICAgICAgICAgYXMgYSBjb3B5IG9mIHNvbWUgb2JqZWN0LgogICAgICAgIDwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5EZWVwIENvcHkgQ29uc3RydWN0aW9uOjwvc3Ryb25nPjwvc3Bhbj4gVG8gb2J0YWluIGEgbmV3CiAgICAgICAgICB5ZXQgZXF1aXZhbGVudCB3cmFwcGVkIG9iamVjdC4KICAgICAgICA8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+RGlyZWN0IFZhbHVlIEFzc2lnbm1lbnQgKHVwb24gaW5pdGlhbGl6ZWQpOjwvc3Ryb25nPjwvc3Bhbj4KICAgICAgICAgIFRvIGFzc2lnbiBhIHZhbHVlIHRvIHRoZSB3cmFwcGVkIG9iamVjdC4KICAgICAgICA8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+RGlyZWN0IFZhbHVlIEFzc2lnbm1lbnQgKHVwb24gdW5pbml0aWFsaXplZCk6PC9zdHJvbmc+PC9zcGFuPgogICAgICAgICAgVG8gaW5pdGlhbGl6ZSB0aGUgd3JhcHBlZCBvYmplY3Qgd2l0aCBhIHZhbHVlIG9idGFpbmVkIGFzIGEgY29weSBvZiBzb21lCiAgICAgICAgICBvYmplY3QuCiAgICAgICAgPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPkFzc2lnbm1lbnQgKHVwb24gaW5pdGlhbGl6ZWQpOjwvc3Ryb25nPjwvc3Bhbj4gVG8gYXNzaWduCiAgICAgICAgICB0byB0aGUgd3JhcHBlZCBvYmplY3QgdGhlIHZhbHVlIG9mIGFub3RoZXIgd3JhcHBlZCBvYmplY3QuCiAgICAgICAgPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPkFzc2lnbm1lbnQgKHVwb24gdW5pbml0aWFsaXplZCk6PC9zdHJvbmc+PC9zcGFuPiBUbyBpbml0aWFsaXplCiAgICAgICAgICB0aGUgd3JhcHBlZCBvYmplY3Qgd2l0aCB2YWx1ZSBvZiBhbm90aGVyIHdyYXBwZWQgb2JqZWN0LgogICAgICAgIDwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5EZWVwIFJlbGF0aW9uYWwgT3BlcmF0aW9ucyAod2hlbiBzdXBwb3J0ZWQgYnkgdGhlCiAgICAgICAgICB0eXBlIFQpOjwvc3Ryb25nPjwvc3Bhbj4gVG8gY29tcGFyZSB3cmFwcGVkIG9iamVjdCB2YWx1ZXMgdGFraW5nIGludG8gYWNjb3VudAogICAgICAgICAgdGhlIHByZXNlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RhdGVzLgogICAgICAgIDwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5WYWx1ZSBhY2Nlc3M6PC9zdHJvbmc+PC9zcGFuPiBUbyB1bndyYXAgdGhlIHdyYXBwZWQgb2JqZWN0LgogICAgICAgIDwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5Jbml0aWFsaXphdGlvbiBzdGF0ZSBxdWVyeTo8L3N0cm9uZz48L3NwYW4+IFRvIGRldGVybWluZQogICAgICAgICAgaWYgdGhlIG9iamVjdCBpcyBmb3JtYWxseSBpbml0aWFsaXplZCBvciBub3QuCiAgICAgICAgPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPlN3YXA6PC9zdHJvbmc+PC9zcGFuPiBUbyBleGNoYW5nZSB3cmFwcGVkIG9iamVjdHMuICh3aXRoCiAgICAgICAgICB3aGF0ZXZlciBleGNlcHRpb24gc2FmZXR5IGd1YXJhbnRlZXMgYXJlIHByb3ZpZGVkIGJ5IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPidzCiAgICAgICAgICBzd2FwKS4KICAgICAgICA8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+RGUtaW5pdGlhbGl6YXRpb246PC9zdHJvbmc+PC9zcGFuPiBUbyByZWxlYXNlIHRoZSB3cmFwcGVkCiAgICAgICAgICBvYmplY3QgKGlmIGFueSkgYW5kIGxlYXZlIHRoZSB3cmFwcGVyIGluIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlLgogICAgICAgIDwvbGk+CjwvdWw+PC9kaXY+CjxwPgogICAgICAgIEFkZGl0aW9uYWwgb3BlcmF0aW9ucyBhcmUgdXNlZnVsLCBzdWNoIGFzIGNvbnZlcnRpbmcgY29uc3RydWN0b3JzIGFuZCBjb252ZXJ0aW5nCiAgICAgICAgYXNzaWdubWVudHMsIGluLXBsYWNlIGNvbnN0cnVjdGlvbiBhbmQgYXNzaWdubWVudCwgYW5kIHNhZmUgdmFsdWUgYWNjZXNzCiAgICAgICAgdmlhIGEgcG9pbnRlciB0byB0aGUgd3JhcHBlZCBvYmplY3Qgb3IgbnVsbC4KICAgICAgPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiIgdGl0bGU9IlRoZSBJbnRlcmZhY2UiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0iYm9vc3Rfb3B0aW9uYWwuZGV2ZWxvcG1lbnQudGhlX2ludGVyZmFjZSI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJkZXZlbG9wbWVudC5odG1sI2Jvb3N0X29wdGlvbmFsLmRldmVsb3BtZW50LnRoZV9pbnRlcmZhY2UiIHRpdGxlPSJUaGUgSW50ZXJmYWNlIj5UaGUgSW50ZXJmYWNlPC9hPgo8L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pgo8cD4KICAgICAgICBTaW5jZSB0aGUgcHVycG9zZSBvZiBvcHRpb25hbCBpcyB0byBhbGxvdyB1cyB0byB1c2Ugb2JqZWN0cyB3aXRoIGEgZm9ybWFsCiAgICAgICAgdW5pbml0aWFsaXplZCBhZGRpdGlvbmFsIHN0YXRlLCB0aGUgaW50ZXJmYWNlIGNvdWxkIHRyeSB0byBmb2xsb3cgdGhlIGludGVyZmFjZQogICAgICAgIG9mIHRoZSB1bmRlcmx5aW5nIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPiB0eXBlCiAgICAgICAgYXMgbXVjaCBhcyBwb3NzaWJsZS4gSW4gb3JkZXIgdG8gY2hvb3NlIHRoZSBwcm9wZXIgZGVncmVlIG9mIGFkb3B0aW9uIG9mCiAgICAgICAgdGhlIG5hdGl2ZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4gaW50ZXJmYWNlLCB0aGUKICAgICAgICBmb2xsb3dpbmcgbXVzdCBiZSBub3RlZDogRXZlbiBpZiBhbGwgdGhlIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGJ5IGFuIGluc3RhbmNlCiAgICAgICAgb2YgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4gYXJlIGRlZmluZWQgZm9yCiAgICAgICAgdGhlIGVudGlyZSByYW5nZSBvZiB2YWx1ZXMgZm9yIHN1Y2ggYSB0eXBlLCBhbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vcHRpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+CiAgICAgICAgZXh0ZW5kcyBzdWNoIGEgc2V0IG9mIHZhbHVlcyB3aXRoIGEgbmV3IHZhbHVlIGZvciB3aGljaCBtb3N0IChvdGhlcndpc2UgdmFsaWQpCiAgICAgICAgb3BlcmF0aW9ucyBhcmUgbm90IGRlZmluZWQgaW4gdGVybXMgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+LgogICAgICA8L3A+CjxwPgogICAgICAgIEZ1cnRoZXJtb3JlLCBzaW5jZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vcHRpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+CiAgICAgICAgaXRzZWxmIGlzIG1lcmVseSBhIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPiB3cmFwcGVyCiAgICAgICAgKG1vZGVsaW5nIGEgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+IHN1cGVydHlwZSksCiAgICAgICAgYW55IGF0dGVtcHQgdG8gZGVmaW5lIHN1Y2ggb3BlcmF0aW9ucyB1cG9uIHVuaW5pdGlhbGl6ZWQgb3B0aW9uYWxzIHdpbGwgYmUKICAgICAgICB0b3RhbGx5IGFydGlmaWNpYWwgdy5yLnQuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPi4KICAgICAgPC9wPgo8cD4KICAgICAgICBUaGlzIGxpYnJhcnkgY2hvb3NlcyBhbiBpbnRlcmZhY2Ugd2hpY2ggZm9sbG93cyBmcm9tIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPidzCiAgICAgICAgaW50ZXJmYWNlIG9ubHkgZm9yIHRob3NlIG9wZXJhdGlvbnMgd2hpY2ggYXJlIHdlbGwgZGVmaW5lZCAody5yLnQgdGhlIHR5cGUKICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4pIGV2ZW4gaWYgYW55IG9mIHRoZSBvcGVyYW5kcwogICAgICAgIGFyZSB1bmluaXRpYWxpemVkLiBUaGVzZSBvcGVyYXRpb25zIGluY2x1ZGU6IGNvbnN0cnVjdGlvbiwgY29weS1jb25zdHJ1Y3Rpb24sCiAgICAgICAgYXNzaWdubWVudCwgc3dhcCBhbmQgcmVsYXRpb25hbCBvcGVyYXRpb25zLgogICAgICA8L3A+CjxwPgogICAgICAgIEZvciB0aGUgdmFsdWUgYWNjZXNzIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSB1bmRlZmluZWQgKHcuci50IHRoZSB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPikgd2hlbiB0aGUgb3BlcmFuZCBpcyB1bmluaXRpYWxpemVkLCBhCiAgICAgICAgZGlmZmVyZW50IGludGVyZmFjZSBpcyBjaG9zZW4gKHdoaWNoIHdpbGwgYmUgZXhwbGFpbmVkIG5leHQpLgogICAgICA8L3A+CjxwPgogICAgICAgIEFsc28sIHRoZSBwcmVzZW5jZSBvZiB0aGUgcG9zc2libHkgdW5pbml0aWFsaXplZCBzdGF0ZSByZXF1aXJlcyBhZGRpdGlvbmFsCiAgICAgICAgb3BlcmF0aW9ucyBub3QgcHJvdmlkZWQgYnkgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+CiAgICAgICAgaXRzZWxmIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYnkgYSBzcGVjaWFsIGludGVyZmFjZS4KICAgICAgPC9wPgo8YSBuYW1lPSJib29zdF9vcHRpb25hbC5kZXZlbG9wbWVudC50aGVfaW50ZXJmYWNlLmxleGljYWxseV9oaW50ZWRfdmFsdWVfYWNjZXNzX2luX3RoZV9wcmVzZW5jZV9vZl9wb3NzaWJseV91bnRpdGlhbGl6ZWRfb3B0aW9uYWxfb2JqZWN0c19fdGhlX29wZXJhdG9yc19fX2FuZF9fX2d0XyI+PC9hPjxoNT4KPGEgbmFtZT0iaWQ1NTU1NjkiPjwvYT4KICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZGV2ZWxvcG1lbnQuaHRtbCNib29zdF9vcHRpb25hbC5kZXZlbG9wbWVudC50aGVfaW50ZXJmYWNlLmxleGljYWxseV9oaW50ZWRfdmFsdWVfYWNjZXNzX2luX3RoZV9wcmVzZW5jZV9vZl9wb3NzaWJseV91bnRpdGlhbGl6ZWRfb3B0aW9uYWxfb2JqZWN0c19fdGhlX29wZXJhdG9yc19fX2FuZF9fX2d0XyI+TGV4aWNhbGx5LWhpbnRlZAogICAgICAgIFZhbHVlIEFjY2VzcyBpbiB0aGUgcHJlc2VuY2Ugb2YgcG9zc2libHkgdW50aXRpYWxpemVkIG9wdGlvbmFsIG9iamVjdHM6IFRoZQogICAgICAgIG9wZXJhdG9ycyAqIGFuZCAtJmd0OzwvYT4KICAgICAgPC9oNT4KPHA+CiAgICAgICAgQSByZWxldmFudCBmZWF0dXJlIG9mIGEgcG9pbnRlciBpcyB0aGF0IGl0IGNhbiBoYXZlIGEgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+bnVsbAogICAgICAgIHBvaW50ZXIgdmFsdWU8L3N0cm9uZz48L3NwYW4+LiBUaGlzIGlzIGEgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+c3BlY2lhbDwvZW0+PC9zcGFuPiB2YWx1ZSB3aGljaAogICAgICAgIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcG9pbnRlciBpcyBub3QgcmVmZXJyaW5nIHRvIGFueSBvYmplY3QgYXQgYWxsLgogICAgICAgIEluIG90aGVyIHdvcmRzLCBudWxsIHBvaW50ZXIgdmFsdWVzIGNvbnZleSB0aGUgbm90aW9uIG9mIGluZXhpc3RlbnQgb2JqZWN0cy4KICAgICAgPC9wPgo8cD4KICAgICAgICBUaGlzIG1lYW5pbmcgb2YgdGhlIG51bGwgcG9pbnRlciB2YWx1ZSBhbGxvd2VkIHBvaW50ZXJzIHRvIGJlY2FtZSBhIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmRlCiAgICAgICAgZmFjdG88L2VtPjwvc3Bhbj4gc3RhbmRhcmQgZm9yIGhhbmRsaW5nIG9wdGlvbmFsIG9iamVjdHMgYmVjYXVzZSBhbGwgeW91IGhhdmUKICAgICAgICB0byBkbyB0byByZWZlciB0byBhIHZhbHVlIHdoaWNoIHlvdSBkb24ndCByZWFsbHkgaGF2ZSBpcyB0byB1c2UgYSBudWxsIHBvaW50ZXIKICAgICAgICB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4gUG9pbnRlcnMgaGF2ZSBiZWVuIHVzZWQgZm9yIGRlY2FkZXMmIzgyMTI7ZnJvbQogICAgICAgIHRoZSBkYXlzIG9mIEMgQVBJcyB0byBtb2Rlcm4gQysrIGxpYnJhcmllcyYjODIxMjt0byA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yZWZlcjwvZW0+PC9zcGFuPgogICAgICAgIHRvIG9wdGlvbmFsICh0aGF0IGlzLCBwb3NzaWJseSBpbmV4aXN0ZW50KSBvYmplY3RzOyBwYXJ0aWN1bGFybHkgYXMgb3B0aW9uYWwKICAgICAgICBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYnV0IGFsc28gcXVpdGUgb2Z0ZW4gYXMgb3B0aW9uYWwgZGF0YSBtZW1iZXJzLgogICAgICA8L3A+CjxwPgogICAgICAgIFRoZSBwb3NzaWJsZSBwcmVzZW5jZSBvZiBhIG51bGwgcG9pbnRlciB2YWx1ZSBtYWtlcyB0aGUgb3BlcmF0aW9ucyB0aGF0IGFjY2VzcwogICAgICAgIHRoZSBwb2ludGVlJ3MgdmFsdWUgcG9zc2libHkgdW5kZWZpbmVkLCB0aGVyZWZvcmUsIGV4cHJlc3Npb25zIHdoaWNoIHVzZQogICAgICAgIGRlcmVmZXJlbmNlIGFuZCBhY2Nlc3Mgb3BlcmF0b3JzLCBzdWNoIGFzOiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5wPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+Mjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgogICAgICAgIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LSZndDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZvbzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4sIGltcGxpY2l0bHkKICAgICAgICBjb252ZXkgdGhlIG5vdGlvbiBvZiBvcHRpb25hbGl0eSwgYW5kIHRoaXMgaW5mb3JtYXRpb24gaXMgdGllZCB0byB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+c3ludGF4PC9lbT48L3NwYW4+CiAgICAgICAgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGF0IGlzLCB0aGUgcHJlc2VuY2Ugb2Ygb3BlcmF0b3JzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPio8L3NwYW4+PC9jb2RlPgogICAgICAgIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4tJmd0Ozwvc3Bhbj48L2NvZGU+IHRlbGwgYnkgdGhlbXNlbHZlcwogICAgICAgICYjODIxMjt3aXRob3V0IGFueSBhZGRpdGlvbmFsIGNvbnRleHQmIzgyMTI7IHRoYXQgdGhlIGV4cHJlc3Npb24gd2lsbCBiZSB1bmRlZmluZWQKICAgICAgICB1bmxlc3MgdGhlIGltcGxpZWQgcG9pbnRlZSBhY3R1YWxseSBleGlzdC4KICAgICAgPC9wPgo8cD4KICAgICAgICBTdWNoIGEgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZGUgZmFjdG88L2VtPjwvc3Bhbj4gaWRpb20gZm9yIHJlZmVycmluZyB0byBvcHRpb25hbCBvYmplY3RzCiAgICAgICAgY2FuIGJlIGZvcm1hbGl6ZWQgaW4gdGhlIGZvcm0gb2YgYSBjb25jZXB0OiB0aGUgPGEgaHJlZj0iLi4vLi4vLi4vLi4vdXRpbGl0eS9PcHRpb25hbFBvaW50ZWUuaHRtbCIgdGFyZ2V0PSJfdG9wIj5PcHRpb25hbFBvaW50ZWU8L2E+CiAgICAgICAgY29uY2VwdC4gVGhpcyBjb25jZXB0IGNhcHR1cmVzIHRoZSBzeW50YWN0aWMgdXNhZ2Ugb2Ygb3BlcmF0b3JzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPio8L3NwYW4+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LSZndDs8L3NwYW4+PC9jb2RlPgogICAgICAgIGFuZCBjb252ZXJzaW9uIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmJvb2w8L3NwYW4+PC9jb2RlPiB0byBjb252ZXkKICAgICAgICB0aGUgbm90aW9uIG9mIG9wdGlvbmFsaXR5LgogICAgICA8L3A+CjxwPgogICAgICAgIEhvd2V2ZXIsIHBvaW50ZXJzIGFyZSBnb29kIHRvIDxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPnJlZmVyPC9zcGFuPgogICAgICAgIHRvIG9wdGlvbmFsIG9iamVjdHMsIGJ1dCBub3QgcGFydGljdWxhcmx5IGdvb2QgdG8gaGFuZGxlIHRoZSBvcHRpb25hbCBvYmplY3RzCiAgICAgICAgaW4gYWxsIG90aGVyIHJlc3BlY3RzLCBzdWNoIGFzIGluaXRpYWxpemluZyBvciBtb3ZpbmcvY29weWluZyB0aGVtLiBUaGUgcHJvYmxlbQogICAgICAgIHJlc2lkZXMgaW4gdGhlIHNoYWxsb3ctY29weSBvZiBwb2ludGVyIHNlbWFudGljczogaWYgeW91IG5lZWQgdG8gZWZmZWN0aXZlbHkKICAgICAgICBtb3ZlIG9yIGNvcHkgdGhlIG9iamVjdCwgcG9pbnRlcnMgYWxvbmUgYXJlIG5vdCBlbm91Z2guIFRoZSBwcm9ibGVtIGlzIHRoYXQKICAgICAgICBjb3BpZXMgb2YgcG9pbnRlcnMgZG8gbm90IGltcGx5IGNvcGllcyBvZiBwb2ludGVlcy4gRm9yIGV4YW1wbGUsIGFzIHdhcyBkaXNjdXNzZWQKICAgICAgICBpbiB0aGUgbW90aXZhdGlvbiwgcG9pbnRlcnMgYWxvbmUgY2Fubm90IGJlIHVzZWQgdG8gcmV0dXJuIG9wdGlvbmFsIG9iamVjdHMKICAgICAgICBmcm9tIGEgZnVuY3Rpb24gYmVjYXVzZSB0aGUgb2JqZWN0IG11c3QgbW92ZSBvdXRzaWRlIGZyb20gdGhlIGZ1bmN0aW9uIGFuZAogICAgICAgIGludG8gdGhlIGNhbGxlcidzIGNvbnRleHQuCiAgICAgIDwvcD4KPHA+CiAgICAgICAgQSBzb2x1dGlvbiB0byB0aGUgc2hhbGxvdy1jb3B5IHByb2JsZW0gdGhhdCBpcyBvZnRlbiB1c2VkIGlzIHRvIHJlc29ydCB0bwogICAgICAgIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgdXNlIGEgc21hcnQgcG9pbnRlciB0byBhdXRvbWF0aWNhbGx5IGhhbmRsZSB0aGUgZGV0YWlscwogICAgICAgIG9mIHRoaXMuIEZvciBleGFtcGxlLCBpZiBhIGZ1bmN0aW9uIGlzIHRvIG9wdGlvbmFsbHkgcmV0dXJuIGFuIG9iamVjdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5YPC9zcGFuPjwvY29kZT4sIGl0IGNhbiB1c2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c2hhcmVkX3B0cjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+WDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+CiAgICAgICAgYXMgdGhlIHJldHVybiB2YWx1ZS4gSG93ZXZlciwgdGhpcyByZXF1aXJlcyBkeW5hbWljIGFsbG9jYXRpb24gb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+WDwvc3Bhbj48L2NvZGU+LiBJZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5YPC9zcGFuPjwvY29kZT4KICAgICAgICBpcyBhIGJ1aWx0LWluIG9yIHNtYWxsIFBPRCwgdGhpcyB0ZWNobmlxdWUgaXMgdmVyeSBwb29yIGluIHRlcm1zIG9mIHJlcXVpcmVkCiAgICAgICAgcmVzb3VyY2VzLiBPcHRpb25hbCBvYmplY3RzIGFyZSBlc3NlbnRpYWxseSB2YWx1ZXMgc28gaXQgaXMgdmVyeSBjb252ZW5pZW50CiAgICAgICAgdG8gYmUgYWJsZSB0byB1c2UgYXV0b21hdGljIHN0b3JhZ2UgYW5kIGRlZXAtY29weSBzZW1hbnRpY3MgdG8gbWFuaXB1bGF0ZQogICAgICAgIG9wdGlvbmFsIHZhbHVlcyBqdXN0IGFzIHdlIGRvIHdpdGggb3JkaW5hcnkgdmFsdWVzLiBQb2ludGVycyBkbyBub3QgaGF2ZQogICAgICAgIHRoaXMgc2VtYW50aWNzLCBzbyBhcmUgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0cmFuc3BvcnQKICAgICAgICBvZiBvcHRpb25hbCB2YWx1ZXMsIHlldCBhcmUgcXVpdGUgY29udmVuaWVudCBmb3IgaGFuZGxpbmcgdGhlIGFjY2VzcyB0byB0aGUKICAgICAgICBwb3NzaWJsZSB1bmRlZmluZWQgdmFsdWUgYmVjYXVzZSBvZiB0aGUgaWRpb21hdGljIGFpZCBwcmVzZW50IGluIHRoZSA8YSBocmVmPSIuLi8uLi8uLi8uLi91dGlsaXR5L09wdGlvbmFsUG9pbnRlZS5odG1sIiB0YXJnZXQ9Il90b3AiPk9wdGlvbmFsUG9pbnRlZTwvYT4gY29uY2VwdAogICAgICAgIGluY2FybmF0ZWQgYnkgcG9pbnRlcnMuCiAgICAgIDwvcD4KPGEgbmFtZT0iYm9vc3Rfb3B0aW9uYWwuZGV2ZWxvcG1lbnQudGhlX2ludGVyZmFjZS5vcHRpb25hbF9sdF90X2d0X19hc19hX21vZGVsX29mX29wdGlvbmFscG9pbnRlZSI+PC9hPjxoNT4KPGEgbmFtZT0iaWQ1NTU4MzEiPjwvYT4KICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZGV2ZWxvcG1lbnQuaHRtbCNib29zdF9vcHRpb25hbC5kZXZlbG9wbWVudC50aGVfaW50ZXJmYWNlLm9wdGlvbmFsX2x0X3RfZ3RfX2FzX2FfbW9kZWxfb2Zfb3B0aW9uYWxwb2ludGVlIj5PcHRpb25hbCZsdDtUJmd0OwogICAgICAgIGFzIGEgbW9kZWwgb2YgT3B0aW9uYWxQb2ludGVlPC9hPgogICAgICA8L2g1Pgo8cD4KICAgICAgICBGb3IgdmFsdWUgYWNjZXNzIG9wZXJhdGlvbnMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3B0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDsmZ3Q7PC9zcGFuPjwvY29kZT4gdXNlcyBvcGVyYXRvcnMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kjwvc3Bhbj48L2NvZGU+CiAgICAgICAgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi0mZ3Q7PC9zcGFuPjwvY29kZT4gdG8gbGV4aWNhbGx5IHdhcm4KICAgICAgICBhYm91dCB0aGUgcG9zc2libHkgdW5pbml0aWFsaXplZCBzdGF0ZSBhcHBlYWxpbmcgdG8gdGhlIGZhbWlsaWFyIHBvaW50ZXIKICAgICAgICBzZW1hbnRpY3Mgdy5yLnQuIHRvIG51bGwgcG9pbnRlcnMuCiAgICAgIDwvcD4KPGRpdiBjbGFzcz0id2FybmluZyIgdGl0bGU9Ildhcm5pbmciPjx0YWJsZSBib3JkZXI9IjAiIHN1bW1hcnk9Ildhcm5pbmciPgo8dHI+Cjx0ZCByb3dzcGFuPSIyIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjI1Ij48aW1nIGFsdD0iW1dhcm5pbmddIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy93YXJuaW5nLnBuZyI+PC90ZD4KPHRoIGFsaWduPSJsZWZ0Ij5XYXJuaW5nPC90aD4KPC90cj4KPHRyPjx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjxwPgogICAgICAgICAgSG93ZXZlciwgaXQgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB0byBub3RlIHRoYXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3B0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDsmZ3Q7PC9zcGFuPjwvY29kZT4gb2JqZWN0cyBhcmUgbm90IHBvaW50ZXJzLiA8c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vcHRpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0OyZndDs8L3NwYW4+PC9jb2RlPiBpcyBub3QsIGFuZCBkb2VzIG5vdCBtb2RlbCwgYSBwb2ludGVyPC9zcGFuPi4KICAgICAgICA8L3A+PC90ZD48L3RyPgo8L3RhYmxlPjwvZGl2Pgo8cD4KICAgICAgICBGb3IgaW5zdGFuY2UsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm9wdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7Jmd0Ozwvc3Bhbj48L2NvZGU+CiAgICAgICAgZG9lcyBub3QgaGF2ZSBzaGFsbG93LWNvcHkgc28gZG9lcyBub3QgYWxpYXM6IHR3byBkaWZmZXJlbnQgb3B0aW9uYWxzIG5ldmVyCiAgICAgICAgcmVmZXIgdG8gdGhlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnNhbWU8L2VtPjwvc3Bhbj4gdmFsdWUgdW5sZXNzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPgogICAgICAgIGl0c2VsZiBpcyBhIHJlZmVyZW5jZSAoYnV0IG1heSBoYXZlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmVxdWl2YWxlbnQ8L2VtPjwvc3Bhbj4gdmFsdWVzKS4KICAgICAgICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm9wdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4KICAgICAgICBhbmQgYSBwb2ludGVyIG11c3QgYmUga2VwdCBpbiBtaW5kLCBwYXJ0aWN1bGFybHkgYmVjYXVzZSB0aGUgc2VtYW50aWNzIG9mCiAgICAgICAgcmVsYXRpb25hbCBvcGVyYXRvcnMgYXJlIGRpZmZlcmVudDogc2luY2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3B0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPgogICAgICAgIGlzIGEgdmFsdWUtd3JhcHBlciwgcmVsYXRpb25hbCBvcGVyYXRvcnMgYXJlIGRlZXA6IHRoZXkgY29tcGFyZSBvcHRpb25hbAogICAgICAgIHZhbHVlczsgYnV0IHJlbGF0aW9uYWwgb3BlcmF0b3JzIGZvciBwb2ludGVycyBhcmUgc2hhbGxvdzogdGhleSBkbyBub3QgY29tcGFyZQogICAgICAgIHBvaW50ZWUgdmFsdWVzLiBBcyBhIHJlc3VsdCwgeW91IG1pZ2h0IGJlIGFibGUgdG8gcmVwbGFjZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vcHRpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+CiAgICAgICAgYnkgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kjwvc3Bhbj48L2NvZGU+CiAgICAgICAgb24gc29tZSBzaXR1YXRpb25zIGJ1dCBub3QgYWx3YXlzLiBTcGVjaWZpY2FsbHksIG9uIGdlbmVyaWMgY29kZSB3cml0dGVuCiAgICAgICAgZm9yIGJvdGgsIHlvdSBjYW5ub3QgdXNlIHJlbGF0aW9uYWwgb3BlcmF0b3JzIGRpcmVjdGx5LCBhbmQgbXVzdCB1c2UgdGhlCiAgICAgICAgdGVtcGxhdGUgZnVuY3Rpb25zIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL3V0aWxpdHkvT3B0aW9uYWxQb2ludGVlLmh0bWwjZXF1YWwiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZXF1YWxfcG9pbnRlZXM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPjwvY29kZT48L2E+CiAgICAgICAgYW5kIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL3V0aWxpdHkvT3B0aW9uYWxQb2ludGVlLmh0bWwjbGVzcyIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5sZXNzX3BvaW50ZWVzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj48L2NvZGU+PC9hPgogICAgICAgIGluc3RlYWQuCiAgICAgIDwvcD4KPC9kaXY+CjwvZGl2Pgo8dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Cjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0IKkgMjAwMyAtMjAwNyBGZXJuYW5kbyBMdWlzIENhY2Npb2xhIENhcmJhbGxhbDxwPgogICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQogICAgICA8L3A+CjwvZGl2PjwvdGQ+CjwvdHI+PC90YWJsZT4KPGhyPgo8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KPGEgYWNjZXNza2V5PSJwIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9InN5bm9wc2lzLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgo8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==