UHLpdm9pciBkZXMgY29tbWFuZGVzIGVuIHBsdXNpZXVycyBtb3RzIGNs6XMuClBhciBleGVtcGxlIDoKCiAgdGltZW91dCBjb25uZWN0aW9uIFhYWAogIGNvbm5lY3Rpb24gc2NhbGUgWFhYCgpPbiBkb2l0IGF1c3NpIGFjY2VwdGVyIGxlcyBwculmaXhlcyA6CgogIHRpbSBjbyBYWFgKICBjbyBzY2EgWFhYCgpQcul2b2lyIGRlIHJhbmdlciBsZXMgY29tYmluYWlzb25zIGRhbnMgdW4gdGFibGVhdS4gT24gZG9pdCBt6m1lCnBvdXZvaXIgZWZmZWN0dWVyIHVuIG1hcHBpbmcgc2ltcGxpZmlhbnQgbGUgcGFyc2V1ci4KCgpQb3VyIGxlcyBmaWx0cmVzIDoKCgogICAgPGRpcmVjdGlvbj4gPHdoZXJlPiA8d2hhdD4gPG9wZXJhdG9yPiA8cGF0dGVybj4gPGFjdGlvbj4gWyA8YXJncz4qIF0KCiAgICA8ZGlyZWN0aW9uPiA9IFsgcmVxIHwgcnNwIF0KICAgIDx3aGVyZT4gICAgID0gWyBpbiB8IG91dCBdCiAgICA8d2hhdD4gICAgICA9IFsgbGluZSB8IExJTkUgfCBNRVRIIHwgVVJJIHwgaChoZHIpIHwgSChoZHIpIHwgYyhjb29raWUpIHwgQyhjb29raWUpIF0KICAgIDxvcGVyYXRvcj4gID0gWyA9PSB8ID1+IHwgPSogfCA9XiB8ID0vIHwgIT0gfCAhfiB8ICEqIHwgIV4gfCAhLyBdCiAgICA8cGF0dGVybj4gICA9ICI8c3RyaW5nPiIKICAgIDxhY3Rpb24+ICAgID0gWyBhbGxvdyB8IHBlcm1pdCB8IGRlbnkgfCBkZWxldGUgfCByZXBsYWNlIHwgc3dpdGNoIHwgYWRkIHwgc2V0IHwgcmVkaXIgXQogICAgPGFyZ3M+ICAgICAgPSBvcHRpb25uYWwgYWN0aW9uIGFyZ3MKCiAgICBleGVtcGxlczoKCiAgICAgICAgcmVxIGluIFVSSSAgICAgPV4gIi9pbWFnZXMiIHN3aXRjaCBpbWFnZXMKICAgICAgICByZXEgaW4gaChob3N0KSA9KiAiLm15ZG9tYWluLmNvbSIgc3dpdGNoIG15ZG9tYWluCiAgICAgICAgcmVxIGluIGgoaG9zdCkgPX4gImxvY2FsaG9zdCguKikiIHJlcGxhY2UgInd3d1wxIgoKICAgIGFsdGVybmF0aXZlIDoKCiAgICA8ZGlyZWN0aW9uPiA8d2hlcmU+IDxhY3Rpb24+IFtub3RdIDx3aGF0PiBbPG9wZXJhdG9yPiA8cGF0dGVybj4gWyA8YXJncz4qIF1dCgogICAgICAgIHJlcSBpbiAgc3dpdGNoICAgVVJJICAgICA9XiAiL2ltYWdlcyIgaW1hZ2VzCiAgICAgICAgcmVxIGluICBzd2l0Y2ggICBoKGhvc3QpID0qICIubXlkb21haW4uY29tIiBteWRvbWFpbgogICAgICAgIHJlcSBpbiAgcmVwbGFjZSAgaChob3N0KSA9fiAibG9jYWxob3N0KC4qKSIgInd3d1wxIgogICAgICAgIHJlcSBpbiAgZGVsZXRlICAgaChDb25uZWN0aW9uKQogICAgICAgIHJlcSBpbiAgZGVueSBub3QgbGluZSA9fiAiKChHRVR8SEVBRHxQT1NUfE9QVElPTlMpIC8pfChPUFRJT05TICopIgogICAgICAgIHJlcSBvdXQgc2V0ICAgICAgaChDb25uZWN0aW9uKSAiY2xvc2UiCiAgICAgICAgcmVxIG91dCBhZGQgICAgICBsaW5lICJTZXJ2ZXI6IHRydWMiCgoKICAgIDxkaXJlY3Rpb24+IDxhY3Rpb24+IDx3aGVyZT4gW25vdF0gPHdoYXQ+IFs8b3BlcmF0b3I+IDxwYXR0ZXJuPiBbIDxhcmdzPiogXV0gJzsnIDxhY3Rpb24yPiA8d2hhdDI+CgogICAgICAgIHJlcSBpbiAgc3dpdGNoICAgVVJJICAgICA9XiAiL2ltYWdlcy8iIGltYWdlcyA7IHJlcGxhY2UgIi8iCiAgICAgICAgcmVxIGluICBzd2l0Y2ggICBoKGhvc3QpID0qICIubXlkb21haW4uY29tIiBteWRvbWFpbgogICAgICAgIHJlcSBpbiAgcmVwbGFjZSAgaChob3N0KSA9fiAibG9jYWxob3N0KC4qKSIgInd3d1wxIgogICAgICAgIHJlcSBpbiAgZGVsZXRlICAgaChDb25uZWN0aW9uKQogICAgICAgIHJlcSBpbiAgZGVueSBub3QgbGluZSA9fiAiKChHRVR8SEVBRHxQT1NUfE9QVElPTlMpIC8pfChPUFRJT05TICopIgogICAgICAgIHJlcSBvdXQgc2V0ICAgICAgaChDb25uZWN0aW9uKSAiY2xvc2UiCiAgICAgICAgcmVxIG91dCBhZGQgICAgICBsaW5lID09ICJTZXJ2ZXI6IHRydWMiCgoKRXh0ZW5zaW9uIGF2ZWMgZGVzIEFDTCA6CgogICAgICAgIHJlcSBpbiBhY2wobWV0aF92YWxpZCkgICBNRVRIID1+ICIoR0VUfFBPU1R8SEVBRHxPUFRJT05TKSIgIAogICAgICAgIHJlcSBpbiBhY2wobWV0aF9vcHRpb25zKSBNRVRIID09ICJPUFRJT05TIiAKICAgICAgICByZXEgaW4gYWNsKHVyaV9zbGFzaCkgICAgVVJJICA9XiAiLyIgCiAgICAgICAgcmVxIGluIGFjbCh1cmlfc3RhcikgICAgIFVSSSAgPT0gIioiIAoKICAgICAgICByZXEgaW4gZGVueSBhY2wgIShtZXRoX29wdGlvbnMgJiYgdXJpX3N0YXIgfHwgbWV0aF92YWxpZCAmJiB1cmlfc2xhc2gpCgpQZXV0Lep0cmUgcGx1cyBzaW1wbGVtZW50IDoKCiAgICAgICAgYWNsIG1ldGhfdmFsaWQgICBNRVRIID1+ICIoR0VUfFBPU1R8SEVBRHxPUFRJT05TKSIgIAogICAgICAgIGFjbCBtZXRoX29wdGlvbnMgTUVUSCA9PSAiT1BUSU9OUyIgCiAgICAgICAgYWNsIHVyaV9zbGFzaCAgICBVUkkgID1eICIvIiAKICAgICAgICBhY2wgdXJpX3N0YXIgICAgIFVSSSAgPT0gIioiIAoKICAgICAgICByZXEgaW4gIGRlbnkgbm90IGFjbChtZXRoX29wdGlvbnMgdXJpX3N0YXIsIG1ldGhfdmFsaWQgdXJpX3NsYXNoKQoKICAgICAgICByZXEgaW4gIHN3aXRjaCAgIFVSSSAgICAgPV4gIi9pbWFnZXMvIiBpbWFnZXMgOyByZXBsYWNlICIvIgogICAgICAgIHJlcSBpbiAgc3dpdGNoICAgaChob3N0KSA9KiAiLm15ZG9tYWluLmNvbSIgbXlkb21haW4KICAgICAgICByZXEgaW4gIHJlcGxhY2UgIGgoaG9zdCkgPX4gImxvY2FsaG9zdCguKikiICJ3d3dcMSIKICAgICAgICByZXEgaW4gIGRlbGV0ZSAgIGgoQ29ubmVjdGlvbikKICAgICAgICByZXEgaW4gIGRlbnkgbm90IGxpbmUgPX4gIigoR0VUfEhFQUR8UE9TVHxPUFRJT05TKSAvKXwoT1BUSU9OUyAqKSIKICAgICAgICByZXEgb3V0IHNldCAgICAgIGgoQ29ubmVjdGlvbikgImNsb3NlIgogICAgICAgIHJlcSBvdXQgYWRkICAgICAgbGluZSA9PSAiU2VydmVyOiB0cnVjIgoKUHLpdm9pciBsZSBjYXMgZHUgImlmIiBwb3VyIGV46WN1dGVyIHBsdXNpZXVycyBhY3Rpb25zIDoKCiAgICAgICAgcmVxIGluICBpZiBVUkkgPV4gIi9pbWFnZXMvIiB0aGVuIHJlcGxhY2UgIi8iIDsgc3dpdGNoIGltYWdlcwoKVXRpbGlzZXIgbGVzIG5vbXMgZW4gbWFqdXNjdWxlcy9taW51c2N1bGVzIHBvdXIgaW5kaXF1ZXIgc2kgb24gdmV1dCBwcmVuZHJlCmVuIGNvbXB0ZSBsYSBjYXNzZSBvdSBub24gOgoKICAgICAgICBpZiB1cmkgID1eICIvd2F0Y2gvIiAgICAgICBzZXRiZSB3YXRjaCAgIHJlYmFzZSAiL3dhdGNoLyIgIi8iCiAgICAgICAgaWYgdXJpICA9KiAiLmpwZyIgICAgICAgICAgc2V0YmUgaW1hZ2VzCiAgICAgICAgaWYgdXJpICA9fiAiLipkbGwuKiIgICAgICAgZGVueQogICAgICAgIGlmIEhPU1QgPSogIi5teWRvbWFpbi5jb20iIHNldGJlIG15ZG9tYWluCiAgICAgICAgZXRjLi4uCgpBbm90aGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGhhdmUgYSBkZWRpY2F0ZWQga2V5d29yZCB0byBVUkkgcmVtYXBwaW5nLiBJdAp3b3VsZCBib3RoIHJld3JpdGUgdGhlIFVSSSBhbmQgb3B0aW9uYWxseSBzd2l0Y2ggdG8gYW5vdGhlciBiYWNrZW5kLgoKICAgICAgICB1cmlyZW1hcCAiL3dhdGNoLyIgICIvIiAgICAgICB3YXRjaAogICAgICAgIHVyaXJlbWFwICIvY2hhdC8iICAgIi8iICAgICAgIGNoYXQKICAgICAgICB1cmlyZW1hcCAiL2V2ZW50LyIgICIvZXZlbnQvIiBldmVudAoKT3IgYmV0dGVyIDoKCiAgICAgICAgdXJpcmVtYXAgIi93YXRjaC8iICB3YXRjaCAgIi8iCiAgICAgICAgdXJpcmVtYXAgIi9jaGF0LyIgICBjaGF0ICAgIi8iCiAgICAgICAgdXJpcmVtYXAgIi9ldmVudC8iICBldmVudAoKRm9yIHRoZSBVUkksIHVzaW5nIGEgcmVnZXggaXMgc29tZXRpbWVzIHVzZWZ1bCAoZWc6IHByb3ZpZGluZyBhIHNldCBvZiBwb3NzaWJsZSBwcmVmaXhlcy4KCgpTaW5vbiwgcGV1dC3qdHJlIHF1ZSBsZSAic3dpdGNoIiBwZXV0IHByZW5kcmUgdW4gcGFyYW3odHJlIGRlIG1hcHBpbmcgcG91ciBsYSBwYXJ0aWUgbWF0Y2jpZSA6CgogICAgICAgIHJlcSBpbiAgc3dpdGNoICAgVVJJICAgICA9XiAiL2ltYWdlcy8iIGltYWdlczoiLyIKCg==