application/vnd.gov.sk.e-form+xml
000.Doplnenie podania - PO
http://data.gov.sk/doc/eform/00305022.A9999999.000000081.DoplneniePodania_PO/1.3
000.Doplnenie podania - PO
Mesto Pezinok
ico://sk/00305022
1.3
2018-12-18
2018-12-18
2019-02-06
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48eHM6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMwNTAyMi5BOTk5OTk5OS4wMDAwMDAwODEuRG9wbG5lbmllUG9kYW5pYV9QTy8xLjMiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMwNTAyMi5BOTk5OTk5OS4wMDAwMDAwODEuRG9wbG5lbmllUG9kYW5pYV9QTy8xLjMiPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkVGV4dEJveCI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RSYWRpb0Fub05pZSI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RDaXNlbG5pa1RpdHVseVByZWQiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtUaXR1bHlaYSI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RDaXNlbG5pa09iY2UiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtTdGF0eSI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RDaXNlbG5pa0tyYWplIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENpc2VsbmlrT2tyZXN5Ij4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZFRleHRBcmVhIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENoZWNrQm94Ij4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpib29sZWFuIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RSYWRpb1R5cE5vdGlmaWthY2llIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZFNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KDQoNCjx4czplbGVtZW50IG5hbWU9ImVGb3JtX2VHb3ZfMDBfUE8iPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhT2JlYyIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9Ik9iZWNfTXNVIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+TWVzdG8gUGV6aW5vazogTWVzdHNrJiMyNTM7ICYjMjUwO3JhZCBQZXppbm9rLCBSYWRuacSNbiYjMjMzOyBuJiMyMjU7bWVzdGllIDcsIDkwMiAxNCBQZXppbm9rPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19UZWxlZm9uIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VGVsZWYmIzI0MztuOiAwMzMvNjkwMSAxMTM8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJPYmVjX1dlYiIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPldFQjogd3d3LnBlemlub2suc2s8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJPYmVjX0lDTyIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPknEjE86IDAwMzA1MDIyPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19ESUMiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5EScSMOiAyMDIwNjYyMjI2PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19FbWFpbCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPkUtbWFpbDogaW5mb3JtYWNpZUBtc3VwZXppbm9rLnNrPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFIZWFkZXIiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keSIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keSIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk9iY2hvZG4mIzIzMzsgbWVubzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiIHR5cGU9InhzZFJhZGlvQW5vTmllIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UGxhdGNhIERQSDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQT0lDTyIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+ScSMTzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9EZXRhaWxJQ0RQSCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPknEjCBEUEg8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPRGV0YWlsRElDIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+REnEjDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5IiB0eXBlPSJ4c2RDaXNlbG5pa1N0YXR5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+xaB0JiMyMjU7dDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0ieHNkQ2lzZWxuaWtPYmNlIiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5PYmVjPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlVsaWNhPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uIiB0eXBlPSJ4c2RDaXNlbG5pa0tyYWplIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+S3JhajwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPsSMYXPFpSBvYmNlPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlMmIzI1MDtwLsSNLjwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InhzZENpc2VsbmlrT2tyZXN5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T2tyZXM8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5QU8SMPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk9yLsSNLjwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InhzZENpc2VsbmlrU3RhdHkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7FoHQmIzIyNTt0PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiB0eXBlPSJ4c2RDaXNlbG5pa09iY2UiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5PYmVjPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5VbGljYTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0ieHNkQ2lzZWxuaWtLcmFqZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPktyYWo8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjGFzxaUgb2JjZTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UyYjMjUwO3AuxI0uPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0ieHNkQ2lzZWxuaWtPa3Jlc3kiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Pa3JlczwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlBTxIw8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T3IuxI0uPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFaaWFkYXRlbFBPU3RhdHV0YXJfU3Rha2Vob2xkZXIiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSIxMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ4c2RDaXNlbG5pa1RpdHVseVByZWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5UaXR1bCBwcmVkIG1lbm9tPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk1lbm88L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5GdW5rY2lhPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ4c2RDaXNlbG5pa1RpdHVseVphIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VGl0dWwgemEgbWVub208L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPU3RhdHV0YXJQcmllenZpc2tvX0ZhbWlseU5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlByaWV6dmlza288L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVppYWRhdGVsUE9Lb250YWt0IiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5UZWxlZiYjMjQzO25uZSDEjSYjMjM3O3NsbzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2EiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5FLW1haWxvdiYjMjI1OyBhZHJlc2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhRG9wbmVuaWVQb2RhbmlhIiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0iRG9wbmVuaWVQb2RhbmlhSWQiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPklkZW50aWZpayYjMjI1O3RvciBwJiMyNDQ7dm9kbiYjMjMzO2hvIHBvZGFuaWE8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJEb3BsbmVuaWVQb2RhbmlhUHJlZG1ldCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UHJlZG1ldDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IkRvcGxuZW5pZVBvZGFuaWFQb3BpcyIgdHlwZT0ieHNkVGV4dEFyZWEiIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlBvcGlzIHBvZGFuaWE8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWUiIHR5cGU9InhzZFRleHRBcmVhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T2QmIzI0NDt2b2RuZW5pZSBwb2RhbmlhPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIHR5cGU9InhzZENoZWNrQm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7FvWlhZGF0ZcS+IGFrbyBkb3RrbnV0JiMyMjU7IG9zb2JhLCB2IHMmIzI1MDtsYWRlIHMgdXN0YW5vdmVuJiMyMzc7bSAmIzE2Nzs1IHAmIzIzNztzbS4gYSkgYSAmIzE2NzsgMTQgeiYjMjI1O2tvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlomIzIyNTtrb24gbyBvY2hyYW5lIG9zb2JuJiMyNTM7Y2ggJiMyNTA7ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbiYjMjM3OyBuaWVrdG9yJiMyNTM7Y2ggeiYjMjI1O2tvbm92ICjEj2FsZWogbGVuIOKAnnomIzIyNTtrb27igJwpLCBwbyBwcmVkY2gmIzIyNTtkemFqJiMyNTA7Y29tIG9ib3puJiMyMjU7bWVuJiMyMzc7IHNhIHMgaW5mb3JtJiMyMjU7Y2lhbWkgcG9kxL5hIHVzdC4gMTkgWiYjMjI1O2suIMSNLiAxOC8yMDE4IFouIHouIG5hIHN0ciYjMjI1O25rZSBlbGVrdHJvbmlja2VqIHNsdcW+YnkgeiBrdG9yZWogYm9sIHRlbnRvIGZvcm11bCYjMjI1O3Igb3R2b3JlbiYjMjUzOywgb2Rvc2xhbiYjMjM3O20gdG9odG8gZWxla3Ryb25pY2smIzIzMztobyBmb3JtdWwmIzIyNTtyYSBhIHNhbW9zdGF0biYjMjUzO20gcG90dnJkZW4mIzIzNzttIHYgdGVqdG8ga29sJiMyNDM7bmtlLCBwb3NreXR1amUgTWVzdHUgUGV6aW5vaywgYWtvIHByZXYmIzIyNTtkemtvdmF0ZcS+b3ZpLCBzJiMyNTA7aGxhcyBzbyBzcHJhY292YW4mIzIzNzttIG9zb2JuJiMyNTM7Y2ggJiMyNTA7ZGFqb3YgdXZlZGVuJiMyNTM7Y2ggbmEgdG9tdG8gZWxla3Ryb25pY2tvbSBmb3JtdWwmIzIyNTtyaSBhIHYgamVobyBwciYjMjM3O2xvaCYjMjI1O2NoLiDFvWlhZGF0ZcS+IHBvc2t5dHVqZSB0aWV0byAmIzI1MDtkYWplIHphICYjMjUwO8SNZWxvbSBiZXpwZcSNbmVqIGEgeiYjMjI1O21lbnUgdnlsdcSNdWomIzI1MDtjZWogaWRlbnRpZmlrJiMyMjU7Y2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbiYjMjM3OykgYSBqZWogbiYjMjI1O3NsZWRuJiMyMzM7IHNwcmFjb3ZhbmllIHogem15c2xlIHomIzIyNTtrb25hIGEgcHImIzIzNztzbHXFoW4mIzI1MztjaCBuYXJpYWRlbiYjMjM3OyB0YWssIGFrbyBqZSB0byB1dmVkZW4mIzIzMzsgbmEgc3RyJiMyMjU7bmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsJiMyMjU7ciBvdHZvcmVuJiMyNTM7LiBEb2JhIHBsYXRub3N0aSBzJiMyNTA7aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSAmIzI1MDvEjWVsdSBzcHJhYyYjMjUwO3ZhbmlhIHRvaHRvIHBvZGFuaWEgYSBzJiMyNTA7dmlzaWFjaWNoICYjMjUwO2tvbm92IHYgem15c2xlIHByZWRtZXRuZWogbGVnaXNsYXQmIzIzNzt2eS4gxb1pYWRhdGXEviBqZSBvcHImIzIyNTt2bmVuJiMyNTM7IHRlbnRvIHMmIzI1MDtobGFzIGtlZHlrb8S+dmVrIG9kdm9sYcWlIGZvcm1vdSBlbGVrdHJvbmljayYjMjMzO2hvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluJiMyNTM7bSByZWxldmFudG4mIzI1MzttIHNwJiMyNDQ7c29ib20gcHJldWsmIzIyNTt6YXRlxL5uZSBkb3J1xI1lbiYjMjUzO20gbWVzdHUuPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFOb3RpZmlrYWNpZSIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWthY2llWmFzaWVsYW5pZSIgdHlwZT0ieHNkUmFkaW9UeXBOb3RpZmlrYWNpZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPsW9ZWwmIzIyNTt0ZSBzaSB6YXNpZWxhbmllIHVwb3pvcm5lbiYjMjM3OyA/PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFWeXN0dXAiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIHR5cGU9InhzZFNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5TcCYjMjQ0O3NvYiBkb3J1xI1lbmlhIHYmIzI1MztzdHVwdTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlZ5c3R1cEtvbnRha3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Lb250YWt0IHYgcHImIzIzNztwYWRlIGRvcnXEjWVuaWEgb3NvYm5lIC8gcG/FoXRvdTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhRm9vdGVyIiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2NoZW1hPg0KDQo=
Mestský úrad Pezinok, Radničné námestie 7, 902 14 Pezinok
033/6901 113
www.pezinok.sk
00305022
2020662226
informacie@msupezinok.sk
0
nie
eDesk
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48eHM6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMwNTAyMi5BOTk5OTk5OS4wMDAwMDAwODEuRG9wbG5lbmllUG9kYW5pYV9QTy8xLjMiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMwNTAyMi5BOTk5OTk5OS4wMDAwMDAwODEuRG9wbG5lbmllUG9kYW5pYV9QTy8xLjMiPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkVGV4dEJveCI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RSYWRpb0Fub05pZSI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RDaXNlbG5pa1RpdHVseVByZWQiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtUaXR1bHlaYSI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RDaXNlbG5pa09iY2UiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtTdGF0eSI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RDaXNlbG5pa0tyYWplIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENpc2VsbmlrT2tyZXN5Ij4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZFRleHRBcmVhIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENoZWNrQm94Ij4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpib29sZWFuIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RSYWRpb1R5cE5vdGlmaWthY2llIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZFNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KDQoNCjx4czplbGVtZW50IG5hbWU9ImVGb3JtX2VHb3ZfMDBfUE8iPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhT2JlYyIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9Ik9iZWNfTXNVIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+TWVzdG8gUGV6aW5vazogTWVzdHNrJiMyNTM7ICYjMjUwO3JhZCBQZXppbm9rLCBSYWRuacSNbiYjMjMzOyBuJiMyMjU7bWVzdGllIDcsIDkwMiAxNCBQZXppbm9rPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19UZWxlZm9uIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VGVsZWYmIzI0MztuOiAwMzMvNjkwMSAxMTM8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJPYmVjX1dlYiIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPldFQjogd3d3LnBlemlub2suc2s8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJPYmVjX0lDTyIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPknEjE86IDAwMzA1MDIyPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19ESUMiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5EScSMOiAyMDIwNjYyMjI2PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19FbWFpbCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPkUtbWFpbDogaW5mb3JtYWNpZUBtc3VwZXppbm9rLnNrPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFIZWFkZXIiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keSIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keSIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk9iY2hvZG4mIzIzMzsgbWVubzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiIHR5cGU9InhzZFJhZGlvQW5vTmllIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UGxhdGNhIERQSDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQT0lDTyIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+ScSMTzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9EZXRhaWxJQ0RQSCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPknEjCBEUEg8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPRGV0YWlsRElDIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+REnEjDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5IiB0eXBlPSJ4c2RDaXNlbG5pa1N0YXR5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+xaB0JiMyMjU7dDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0ieHNkQ2lzZWxuaWtPYmNlIiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5PYmVjPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlVsaWNhPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uIiB0eXBlPSJ4c2RDaXNlbG5pa0tyYWplIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+S3JhajwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPsSMYXPFpSBvYmNlPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlMmIzI1MDtwLsSNLjwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InhzZENpc2VsbmlrT2tyZXN5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T2tyZXM8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5QU8SMPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk9yLsSNLjwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InhzZENpc2VsbmlrU3RhdHkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7FoHQmIzIyNTt0PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiB0eXBlPSJ4c2RDaXNlbG5pa09iY2UiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5PYmVjPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5VbGljYTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0ieHNkQ2lzZWxuaWtLcmFqZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPktyYWo8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjGFzxaUgb2JjZTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UyYjMjUwO3AuxI0uPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0ieHNkQ2lzZWxuaWtPa3Jlc3kiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Pa3JlczwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlBTxIw8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T3IuxI0uPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFaaWFkYXRlbFBPU3RhdHV0YXJfU3Rha2Vob2xkZXIiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSIxMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ4c2RDaXNlbG5pa1RpdHVseVByZWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5UaXR1bCBwcmVkIG1lbm9tPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk1lbm88L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5GdW5rY2lhPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ4c2RDaXNlbG5pa1RpdHVseVphIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VGl0dWwgemEgbWVub208L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbFBPU3RhdHV0YXJQcmllenZpc2tvX0ZhbWlseU5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlByaWV6dmlza288L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVppYWRhdGVsUE9Lb250YWt0IiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5UZWxlZiYjMjQzO25uZSDEjSYjMjM3O3NsbzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2EiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5FLW1haWxvdiYjMjI1OyBhZHJlc2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhRG9wbmVuaWVQb2RhbmlhIiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0iRG9wbmVuaWVQb2RhbmlhSWQiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPklkZW50aWZpayYjMjI1O3RvciBwJiMyNDQ7dm9kbiYjMjMzO2hvIHBvZGFuaWE8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJEb3BsbmVuaWVQb2RhbmlhUHJlZG1ldCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UHJlZG1ldDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IkRvcGxuZW5pZVBvZGFuaWFQb3BpcyIgdHlwZT0ieHNkVGV4dEFyZWEiIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlBvcGlzIHBvZGFuaWE8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWUiIHR5cGU9InhzZFRleHRBcmVhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T2QmIzI0NDt2b2RuZW5pZSBwb2RhbmlhPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIHR5cGU9InhzZENoZWNrQm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7FvWlhZGF0ZcS+IGFrbyBkb3RrbnV0JiMyMjU7IG9zb2JhLCB2IHMmIzI1MDtsYWRlIHMgdXN0YW5vdmVuJiMyMzc7bSAmIzE2Nzs1IHAmIzIzNztzbS4gYSkgYSAmIzE2NzsgMTQgeiYjMjI1O2tvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlomIzIyNTtrb24gbyBvY2hyYW5lIG9zb2JuJiMyNTM7Y2ggJiMyNTA7ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbiYjMjM3OyBuaWVrdG9yJiMyNTM7Y2ggeiYjMjI1O2tvbm92ICjEj2FsZWogbGVuIOKAnnomIzIyNTtrb27igJwpLCBwbyBwcmVkY2gmIzIyNTtkemFqJiMyNTA7Y29tIG9ib3puJiMyMjU7bWVuJiMyMzc7IHNhIHMgaW5mb3JtJiMyMjU7Y2lhbWkgcG9kxL5hIHVzdC4gMTkgWiYjMjI1O2suIMSNLiAxOC8yMDE4IFouIHouIG5hIHN0ciYjMjI1O25rZSBlbGVrdHJvbmlja2VqIHNsdcW+YnkgeiBrdG9yZWogYm9sIHRlbnRvIGZvcm11bCYjMjI1O3Igb3R2b3JlbiYjMjUzOywgb2Rvc2xhbiYjMjM3O20gdG9odG8gZWxla3Ryb25pY2smIzIzMztobyBmb3JtdWwmIzIyNTtyYSBhIHNhbW9zdGF0biYjMjUzO20gcG90dnJkZW4mIzIzNzttIHYgdGVqdG8ga29sJiMyNDM7bmtlLCBwb3NreXR1amUgTWVzdHUgUGV6aW5vaywgYWtvIHByZXYmIzIyNTtkemtvdmF0ZcS+b3ZpLCBzJiMyNTA7aGxhcyBzbyBzcHJhY292YW4mIzIzNzttIG9zb2JuJiMyNTM7Y2ggJiMyNTA7ZGFqb3YgdXZlZGVuJiMyNTM7Y2ggbmEgdG9tdG8gZWxla3Ryb25pY2tvbSBmb3JtdWwmIzIyNTtyaSBhIHYgamVobyBwciYjMjM3O2xvaCYjMjI1O2NoLiDFvWlhZGF0ZcS+IHBvc2t5dHVqZSB0aWV0byAmIzI1MDtkYWplIHphICYjMjUwO8SNZWxvbSBiZXpwZcSNbmVqIGEgeiYjMjI1O21lbnUgdnlsdcSNdWomIzI1MDtjZWogaWRlbnRpZmlrJiMyMjU7Y2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbiYjMjM3OykgYSBqZWogbiYjMjI1O3NsZWRuJiMyMzM7IHNwcmFjb3ZhbmllIHogem15c2xlIHomIzIyNTtrb25hIGEgcHImIzIzNztzbHXFoW4mIzI1MztjaCBuYXJpYWRlbiYjMjM3OyB0YWssIGFrbyBqZSB0byB1dmVkZW4mIzIzMzsgbmEgc3RyJiMyMjU7bmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsJiMyMjU7ciBvdHZvcmVuJiMyNTM7LiBEb2JhIHBsYXRub3N0aSBzJiMyNTA7aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSAmIzI1MDvEjWVsdSBzcHJhYyYjMjUwO3ZhbmlhIHRvaHRvIHBvZGFuaWEgYSBzJiMyNTA7dmlzaWFjaWNoICYjMjUwO2tvbm92IHYgem15c2xlIHByZWRtZXRuZWogbGVnaXNsYXQmIzIzNzt2eS4gxb1pYWRhdGXEviBqZSBvcHImIzIyNTt2bmVuJiMyNTM7IHRlbnRvIHMmIzI1MDtobGFzIGtlZHlrb8S+dmVrIG9kdm9sYcWlIGZvcm1vdSBlbGVrdHJvbmljayYjMjMzO2hvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluJiMyNTM7bSByZWxldmFudG4mIzI1MzttIHNwJiMyNDQ7c29ib20gcHJldWsmIzIyNTt6YXRlxL5uZSBkb3J1xI1lbiYjMjUzO20gbWVzdHUuPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFOb3RpZmlrYWNpZSIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWthY2llWmFzaWVsYW5pZSIgdHlwZT0ieHNkUmFkaW9UeXBOb3RpZmlrYWNpZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPsW9ZWwmIzIyNTt0ZSBzaSB6YXNpZWxhbmllIHVwb3pvcm5lbiYjMjM3OyA/PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFWeXN0dXAiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIHR5cGU9InhzZFNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5TcCYjMjQ0O3NvYiBkb3J1xI1lbmlhIHYmIzI1MztzdHVwdTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlZ5c3R1cEtvbnRha3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Lb250YWt0IHYgcHImIzIzNztwYWRlIGRvcnXEjWVuaWEgb3NvYm5lIC8gcG/FoXRvdTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhRm9vdGVyIiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2NoZW1hPg0KDQo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgIHhtbG5zOmVnb25wPSJodHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMwNTAyMi5BOTk5OTk5OS4wMDAwMDAwODEuRG9wbG5lbmllUG9kYW5pYV9QTy8xLjMiIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJlZ29ucCI+DQo8eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiIGRvY3R5cGUtc3lzdGVtPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiIGRvY3R5cGUtcHVibGljPSItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgaW5kZW50PSJubyIgb21pdC14bWwtZGVjbGFyYXRpb249InllcyIvPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+DQo8aHRtbD4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIiAvPg0KPHRpdGxlPjAwMC5Eb3BsbmVuaWUgcG9kYW5pYSAtIFBPPC90aXRsZT4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ii8+DQo8bWV0YSBuYW1lPSJsYW5ndWFnZSIgY29udGVudD0ic2stU0siLz4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpib2R5IHsgDQoJZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnLCAnU2Vnb2UgVUknLCAnVHJlYnVjaGV0IE1TJywgJ0dlbmV2YSBDRScsIGx1Y2lkYSwgc2Fucy1zZXJpZjsNCgliYWNrZ3JvdW5kIDogI2ZmZmZmZiAhaW1wb3J0YW50IDsNCn0NCi51aS10YWJzIHsNCglwYWRkaW5nOiAuMmVtOw0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgl6b29tOiAxOw0KfQkJCQkJCQkJDQouY2xlYXIgeyBjbGVhcjogYm90aDsgaGVpZ2h0OiAwO30NCi5sYXlvdXRNYWluIHsNCgltYXJnaW46IDBweCBhdXRvOw0KCXBhZGRpbmc6IDVweCA1cHggNXB4IDVweDsJDQp9CQkJCQ0KLmxheW91dFJvdyB7IG1hcmdpbi1ib3R0b206IDVweDsgfQkJCQkNCi5jYXB0aW9uIHsgLyp3aWR0aDogMTAwJTsgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4IGJsYWNrOyovIH0NCi5ub2NhcHRpb24gJmd0OyAuY2FwdGlvbiB7IGJvcmRlcjogMHB4ICFpbXBvcnRhbnQ7IH0NCi5ub2NhcHRpb24gJmd0OyAuY2FwdGlvbiBzcGFuIHsNCgliYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7DQoJZGlzcGxheTogbm9uZTsNCn0gDQouY2FwdGlvbiAudGl0bGUgeyBwYWRkaW5nLWxlZnQ6IDVweDsgfQ0KLmhlYWRlcmNvcnJlY3Rpb24gewkNCgltYXJnaW46IDBweDsNCiAgICBmb250LXNpemUgOiAxZW07DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9CQkJCQ0KLmxhYmVsVmlzIHsNCglmbG9hdDogbGVmdDsNCglmb250LXdlaWdodDogYm9sZDsNCglmb250LWZhbWlseTogJ09wZW4gU2FucycsICdTZWdvZSBVSScsICdUcmVidWNoZXQgTVMnLCAnR2VuZXZhIENFJywgbHVjaWRhLCBzYW5zLXNlcmlmOw0KCWxpbmUtaGVpZ2h0OiAyNXB4Ow0KCW1hcmdpbjogMHB4IDE4cHggMHB4IDBweDsNCglwYWRkaW5nLWxlZnQ6IDNweDsNCgl3aWR0aDogMTkwcHg7DQoJd29yZC13cmFwOiBicmVhay13b3JkOw0KICAgIGZvbnQtc2l6ZTogMC44ZW07DQp9DQouY29udGVudFZpcyB7ICAgIAkgICAgIA0KCWZsb2F0OiBsZWZ0OwkNCglsaW5lLWhlaWdodDogMjVweDsNCgltYXJnaW46IDBweDsNCglwYWRkaW5nOiAwcHg7DQoJdmVydGljYWwtYWxpZ246IHRvcDsNCiAgICBmb250LXNpemU6IDAuNzVlbTsJCQkNCn0NCi53b3Jkd3JhcCB7IA0KICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgICAgICANCiAgICB3aGl0ZS1zcGFjZTogLW1vei1wcmUtd3JhcDsgDQogICAgd2hpdGUtc3BhY2U6IC1wcmUtd3JhcDsgICAgIA0KICAgIHdoaXRlLXNwYWNlOiAtby1wcmUtd3JhcDsgICANCiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7ICAgICAgDQp9CQ0KLnVpLXdpZGdldC1jb250ZW50IHsNCgliYWNrZ3JvdW5kIDogNTAlIDUwJSByZXBlYXQteCAjZmZmZmZmOw0KCWJvcmRlciA6ICNkNGQ0ZDQgc29saWQgMnB4Ow0KCWNvbG9yIDogIzRmNGU0ZTsNCglib3JkZXItcmFkaXVzIDogM3B4Ow0KfQ0KLnVpLXdpZGdldC1oZWFkZXIgew0KCWN1cnNvciA6IHBvaW50ZXI7DQoJZm9udC1zaXplIDogMC44ZW07DQoJY29sb3IgOiAjNDk0OTQ5Ow0KCXBhZGRpbmctbGVmdCA6IDJweDsNCglib3JkZXIgOiAjZWFlOWU4IHNvbGlkIDFweDsNCgliYWNrZ3JvdW5kLWNvbG9yIDogI2VhZTllODsNCgltYXJnaW4tYm90dG9tOiAzcHg7DQoJYm9yZGVyLXJhZGl1cyA6IDNweDsNCn0JCQkNCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJsYXlvdXRNYWluIj4NCjx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTyI+DQo8ZGl2IGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgPg0KPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCjxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iPmVGb3JtX2VHb3ZfMDAwX1BPPC9kaXY+DQo8L2Rpdj4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFIZWFkZXIiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFGb290ZXIiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFPYmVjIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhRG9wbmVuaWVQb2RhbmlhIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhTm90aWZpa2FjaWUiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFWeXN0dXAiLz4NCjwvZGl2Pg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiPg0KPGRpdiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiID4NCjxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQo8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIj5PY2hyYW5hIG9zb2Juw71jaCDDumRham92PC9kaXY+DQo8L2Rpdj4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiLz4NCjwvZGl2Pg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFOb3RpZmlrYWNpZSI+DQo8ZGl2IGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgPg0KPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCjxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iPk5vdGlmaWvDoWNpZTwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6Tm90aWZpa2FjaWVaYXNpZWxhbmllIi8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhVnlzdHVwIj4NCjxkaXYgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50IiA+DQo8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiI+U3DDtHNvYiBkb3J1xI1lbmlhIHbDvXN0dXB1PC9kaXY+DQo8L2Rpdj4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpWeXN0dXBLb250YWt0Ii8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRG9wbmVuaWVQb2RhbmlhIj4NCjxkaXYgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50IiA+DQo8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiI+RG9wbG5lbmllIHBvZGFuaWE8L2Rpdj4NCjwvZGl2Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOkRvcG5lbmllUG9kYW5pYUlkIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6RG9wbG5lbmllUG9kYW5pYVByZWRtZXQiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpEb3BsbmVuaWVQb2RhbmlhUG9waXMiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWUiLz4NCjwvZGl2Pg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkiPg0KPGRpdiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiID4NCjxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQo8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIj7FvWlhZGF0ZcS+IC0gUHLDoXZuaWNrw6Egb3NvYmEgLyBQb2RuaWthdGXEvjwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RldGFpbF9Db3Jwb3JhdGVCb2R5Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcyIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlciIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsUE9Lb250YWt0Ii8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Lb250YWt0Ij4NCjxkaXYgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50IiA+DQo8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiI+S29udGFrdDwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0tvbnRha3RFbWFpbEFkcmVzYSIvPg0KPC9kaXY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkiPg0KPGRpdiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiID4NCjxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQo8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIj7FvWlhZGF0ZcS+IC0gUHLDoXZuaWNrw6Egb3NvYmEgLyBQb2RuaWthdGXEvjwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRGV0YWlsUE9JQ08iLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRGV0YWlsSUNEUEgiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRGV0YWlsRElDIi8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlciI+DQo8ZGl2IGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgPg0KPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCjxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iPk9wcsOhdm5lbsOhIG9zb2JhPC9kaXY+DQo8L2Rpdj4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT1N0YXR1dGFyUHJpZXp2aXNrb19GYW1pbHlOYW1lIi8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzIj4NCjxkaXYgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50IiA+DQo8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiI+QWRyZXNhIC0gU8OtZGxvIC8gTWllc3RvIHBvZG5pa2FuaWE8L2Rpdj4NCjwvZGl2Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnkiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbiIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiLz4NCjwvZGl2Pg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MiPg0KPGRpdiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiID4NCjxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQo8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIj5BZHJlc2EgcHJlIGRvcnXEjWVuaWUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBBZHJlc2EgLSBTw61kbG8gLyBNaWVzdG8gcG9kbmlrYW5pYSk8L2Rpdj4NCjwvZGl2Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiLz4NCjwvZGl2Pg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFPYmVjIj4NCjxkaXYgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50IiA+DQo8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiI+T2JlYzwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6T2JlY19Nc1UiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpPYmVjX1RlbGVmb24iLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpPYmVjX1dlYiIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOk9iZWNfSUNPIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6T2JlY19ESUMiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpPYmVjX0VtYWlsIi8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFIZWFkZXIiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPnNla2NpYUhlYWRlcjogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYUZvb3RlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+c2VrY2lhRm9vdGVyOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92L2Vnb25wOk9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+xb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhLCB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqc1IHDDrXNtLiBhKSBhIMKnIDE0IHrDoWtvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlrDoWtvbiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbuKAnCksIHBvIHByZWRjaMOhZHphasO6Y29tIG9ib3puw6FtZW7DrSBzYSBzIGluZm9ybcOhY2lhbWkgcG9kxL5hIHVzdC4gMTkgWsOhay4gxI0uIDE4LzIwMTggWi4gei4gbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LCBvZG9zbGFuw61tIHRvaHRvIGVsZWt0cm9uaWNrw6lobyBmb3JtdWzDoXJhIGEgc2Ftb3N0YXRuw71tIHBvdHZyZGVuw61tIHYgdGVqdG8ga29sw7Nua2UsIHBvc2t5dHVqZSBNZXN0dSBQZXppbm9rLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCBuYSB0b210byBlbGVrdHJvbmlja29tIGZvcm11bMOhcmkgYSB2IGplaG8gcHLDrWxvaMOhY2guIMW9aWFkYXRlxL4gcG9za3l0dWplIHRpZXRvIMO6ZGFqZSB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbsOtKSBhIGplaiBuw6FzbGVkbsOpIHNwcmFjb3ZhbmllIHogem15c2xlIHrDoWtvbmEgYSBwcsOtc2x1xaFuw71jaCBuYXJpYWRlbsOtIHRhaywgYWtvIGplIHRvIHV2ZWRlbsOpIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSDDusSNZWx1IHNwcmFjw7p2YW5pYSB0b2h0byBwb2RhbmlhIGEgc8O6dmlzaWFjaWNoIMO6a29ub3YgdiB6bXlzbGUgcHJlZG1ldG5laiBsZWdpc2xhdMOtdnkuIMW9aWFkYXRlxL4gamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBrZWR5a2/EvnZlayBvZHZvbGHFpSBmb3Jtb3UgZWxla3Ryb25pY2vDqWhvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluw71tIHJlbGV2YW50bsO9bSBzcMO0c29ib20gcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw71tIG1lc3R1LjogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2xlYW5DaGVja2JveFRvU3RyaW5nIj48eHNsOndpdGgtcGFyYW0gbmFtZT0iYm9vbFZhbHVlIiBzZWxlY3Q9Ii4iIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU5vdGlmaWthY2llL2Vnb25wOk5vdGlmaWthY2llWmFzaWVsYW5pZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+xb1lbMOhdGUgc2kgemFzaWVsYW5pZSB1cG96b3JuZW7DrSA/OiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNob29zZT48eHNsOndoZW4gdGVzdD0iLj0nbmllJyI+PHhzbDp0ZXh0Pm5pZTwveHNsOnRleHQ+PC94c2w6d2hlbj48eHNsOndoZW4gdGVzdD0iLj0nZURlc2snIj48eHNsOnRleHQ+ZURlc2s8L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhVnlzdHVwL2Vnb25wOlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+U3DDtHNvYiBkb3J1xI1lbmlhIHbDvXN0dXB1OiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNob29zZT48eHNsOndoZW4gdGVzdD0iLj0nZURlc2snIj48eHNsOnRleHQ+ZURlc2s8L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDp3aGVuIHRlc3Q9Ii49J29zb2JuZSciPjx4c2w6dGV4dD5vc29ibmU8L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDp3aGVuIHRlc3Q9Ii49J3BvxaF0b3UnIj48eHNsOnRleHQ+cG/FoXRvdTwveHNsOnRleHQ+PC94c2w6d2hlbj48eHNsOm90aGVyd2lzZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwveHNsOm90aGVyd2lzZT48L3hzbDpjaG9vc2U+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFWeXN0dXAvZWdvbnA6VnlzdHVwS29udGFrdCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+S29udGFrdCB2IHByw61wYWRlIGRvcnXEjWVuaWEgb3NvYm5lIC8gcG/FoXRvdTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFEb3BuZW5pZVBvZGFuaWEvZWdvbnA6RG9wbmVuaWVQb2RhbmlhSWQiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPklkZW50aWZpa8OhdG9yIHDDtHZvZG7DqWhvIHBvZGFuaWE6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRG9wbmVuaWVQb2RhbmlhL2Vnb25wOkRvcGxuZW5pZVBvZGFuaWFQcmVkbWV0Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5QcmVkbWV0OiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYURvcG5lbmllUG9kYW5pYS9lZ29ucDpEb3BsbmVuaWVQb2RhbmlhUG9waXMiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlBvcGlzIHBvZGFuaWE6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRG9wbmVuaWVQb2RhbmlhL2Vnb25wOkRvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T2TDtHZvZG5lbmllIHBvZGFuaWE6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Lb250YWt0L2Vnb25wOlppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+VGVsZWbDs25uZSDEjcOtc2xvOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPS29udGFrdC9lZ29ucDpaaWFkYXRlbFBPS29udGFrdEVtYWlsQWRyZXNhIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5FLW1haWxvdsOhIGFkcmVzYTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RldGFpbF9Db3Jwb3JhdGVCb2R5L2Vnb25wOlppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPk9iY2hvZG7DqSBtZW5vOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkvZWdvbnA6WmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+UGxhdGNhIERQSDogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjaG9vc2U+PHhzbDp3aGVuIHRlc3Q9Ii49JyYjMTkzO25vJyI+PHhzbDp0ZXh0PiYjMTkzO25vPC94c2w6dGV4dD48L3hzbDp3aGVuPjx4c2w6d2hlbiB0ZXN0PSIuPSdOaWUnIj48eHNsOnRleHQ+TmllPC94c2w6dGV4dD48L3hzbDp3aGVuPjx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC94c2w6b3RoZXJ3aXNlPjwveHNsOmNob29zZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkvZWdvbnA6WmlhZGF0ZWxQT0RldGFpbFBPSUNPIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5JxIxPOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkvZWdvbnA6WmlhZGF0ZWxQT0RldGFpbElDRFBIIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5JxIwgRFBIOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkvZWdvbnA6WmlhZGF0ZWxQT0RldGFpbERJQyI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+REnEjDogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT1N0YXR1dGFyX1N0YWtlaG9sZGVyL2Vnb25wOlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlRpdHVsIHByZWQgbWVub206IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT1N0YXR1dGFyX1N0YWtlaG9sZGVyL2Vnb25wOlppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5NZW5vOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPU3RhdHV0YXJfU3Rha2Vob2xkZXIvZWdvbnA6WmlhZGF0ZWxQT1N0YXR1dGFyRnVua2NpYSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+RnVua2NpYTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT1N0YXR1dGFyX1N0YWtlaG9sZGVyL2Vnb25wOlppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+VGl0dWwgemEgbWVub206IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT1N0YXR1dGFyX1N0YWtlaG9sZGVyL2Vnb25wOlppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+UHJpZXp2aXNrbzogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxQT0FkcmVzYVN0YXRfQ291bnRyeSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+xaB0w6F0OiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T2JlYzogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+VWxpY2E6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbiI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+S3JhajogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPsSMYXPFpSBvYmNlOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+U8O6cC7EjS46IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPk9rcmVzOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+UFPEjDogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxQT0FkcmVzYU9yQ19CdWlsZGluZ051bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T3IuxI0uOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj7FoHTDoXQ6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5PYmVjOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5VbGljYTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5LcmFqOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+xIxhc8WlIG9iY2U6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5Tw7pwLsSNLjogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T2tyZXM6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5QU8SMOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5Pci7EjS46IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhT2JlYy9lZ29ucDpPYmVjX01zVSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+TWVzdG8gUGV6aW5vazogTWVzdHNrw70gw7pyYWQgUGV6aW5vaywgUmFkbmnEjW7DqSBuw6FtZXN0aWUgNywgOTAyIDE0IFBlemlub2s6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhT2JlYy9lZ29ucDpPYmVjX1RlbGVmb24iPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlRlbGVmw7NuOiAwMzMvNjkwMSAxMTM6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhT2JlYy9lZ29ucDpPYmVjX1dlYiI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+V0VCOiB3d3cucGV6aW5vay5zazogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFPYmVjL2Vnb25wOk9iZWNfSUNPIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5JxIxPOiAwMDMwNTAyMjogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFPYmVjL2Vnb25wOk9iZWNfRElDIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5EScSMOiAyMDIwNjYyMjI2OiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9iZWMvZWdvbnA6T2JlY19FbWFpbCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+RS1tYWlsOiBpbmZvcm1hY2llQG1zdXBlemlub2suc2s6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VG9Ta0RhdGUiPg0KPHhzbDpwYXJhbSBuYW1lPSJkYXRlIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJkYXRlU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkZGF0ZSkiIC8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVN0cmluZyAhPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVN0cmluZyk9MTAgYW5kIHN0cmluZyhudW1iZXIoc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCAxLCA0KSkpICE9ICdOYU4nICI+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KHN1YnN0cmluZygkZGF0ZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCA2LCAyKSwgJy4nLCBzdWJzdHJpbmcoJGRhdGVTdHJpbmcsIDEsIDQpKSIgLz4NCjwveHNsOndoZW4+DQo8eHNsOm90aGVyd2lzZT4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZGF0ZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQo8L3hzbDpvdGhlcndpc2U+DQo8L3hzbDpjaG9vc2U+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iYm9vbGVhbkNoZWNrYm94VG9TdHJpbmciPg0KPHhzbDpwYXJhbSBuYW1lPSJib29sVmFsdWUiIC8+DQo8eHNsOnZhcmlhYmxlIG5hbWU9ImJvb2xWYWx1ZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJGJvb2xWYWx1ZSkiIC8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSIkYm9vbFZhbHVlU3RyaW5nID0gJ3RydWUnICI+DQo8eHNsOnRleHQ+w4FubzwveHNsOnRleHQ+DQo8L3hzbDp3aGVuPg0KPHhzbDp3aGVuIHRlc3Q9IiRib29sVmFsdWVTdHJpbmcgPSAnZmFsc2UnICI+DQo8eHNsOnRleHQ+TmllPC94c2w6dGV4dD4NCjwveHNsOndoZW4+DQo8eHNsOndoZW4gdGVzdD0iJGJvb2xWYWx1ZVN0cmluZyA9ICcxJyAiPg0KPHhzbDp0ZXh0PsOBbm88L3hzbDp0ZXh0Pg0KPC94c2w6d2hlbj4NCjx4c2w6d2hlbiB0ZXN0PSIkYm9vbFZhbHVlU3RyaW5nID0gJzAnICI+DQo8eHNsOnRleHQ+TmllPC94c2w6dGV4dD4NCjwveHNsOndoZW4+DQo8eHNsOm90aGVyd2lzZT4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkYm9vbFZhbHVlU3RyaW5nIj48L3hzbDp2YWx1ZS1vZj4NCjwveHNsOm90aGVyd2lzZT4NCjwveHNsOmNob29zZT4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUaW1lVHJpbVNlY29uZHMiPg0KPHhzbDpwYXJhbSBuYW1lPSJ0aW1lIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJ0aW1lU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkdGltZSkiIC8+DQo8eHNsOmlmIHRlc3Q9IiR0aW1lU3RyaW5nICE9ICcnIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmcoJHRpbWVTdHJpbmcsIDEsIDUpIiAvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VGltZSI+DQo8eHNsOnBhcmFtIG5hbWU9InRpbWUiIC8+DQo8eHNsOnZhcmlhYmxlIG5hbWU9InRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCR0aW1lKSIgLz4NCjx4c2w6aWYgdGVzdD0iJHRpbWVTdHJpbmcgIT0gJyciPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZygkdGltZVN0cmluZywgMSwgOCkiIC8+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPg0KPHhzbDpwYXJhbSBuYW1lPSJ0ZXh0Ii8+DQo8eHNsOnBhcmFtIG5hbWU9InJlcGxhY2UiLz4NCjx4c2w6cGFyYW0gbmFtZT0iYnkiLz4NCjx4c2w6Y2hvb3NlPg0KPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKCR0ZXh0LCAkcmVwbGFjZSkiPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZy1iZWZvcmUoJHRleHQsJHJlcGxhY2UpIi8+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGJ5Ii8+DQo8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj4NCjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9InN1YnN0cmluZy1hZnRlcigkdGV4dCwkcmVwbGFjZSkiLz4NCjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiRyZXBsYWNlIi8+DQo8eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJGJ5IiAvPg0KPC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOndoZW4+DQo8eHNsOm90aGVyd2lzZT4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdGV4dCIvPg0KPC94c2w6b3RoZXJ3aXNlPg0KPC94c2w6Y2hvb3NlPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hdFRvU2tEYXRlVGltZSI+DQo8eHNsOnBhcmFtIG5hbWU9ImRhdGVUaW1lIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJkYXRlVGltZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJGRhdGVUaW1lKSIgLz4NCjx4c2w6Y2hvb3NlPg0KPHhzbDp3aGVuIHRlc3Q9IiRkYXRlVGltZVN0cmluZyE9ICcnIGFuZCBzdHJpbmctbGVuZ3RoKCRkYXRlVGltZVN0cmluZyk+MTggYW5kIHN0cmluZyhudW1iZXIoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCkpKSAhPSAnTmFOJyAiPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdChzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCA5LCAyKSwgJy4nLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCA2LCAyKSwgJy4nLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxLCA0KSwnICcsIHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEyLCAyKSwnOicsIHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDE1LCAyKSkiIC8+DQo8L3hzbDp3aGVuPg0KPHhzbDpvdGhlcndpc2U+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGRhdGVUaW1lU3RyaW5nIj48L3hzbDp2YWx1ZS1vZj4NCjwveHNsOm90aGVyd2lzZT4NCjwveHNsOmNob29zZT4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUb1NrRGF0ZVRpbWVTZWNvbmQiPg0KPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4NCjx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRkYXRlVGltZSkiIC8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVRpbWVTdHJpbmchPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVRpbWVTdHJpbmcpPjE4IGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpKSkgIT0gJ05hTicgIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCksJyAnLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxMiwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxNSwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxOCwgMikpIiAvPg0KPC94c2w6d2hlbj4NCjx4c2w6b3RoZXJ3aXNlPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkYXRlVGltZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQo8L3hzbDpvdGhlcndpc2U+DQo8L3hzbDpjaG9vc2U+DQo8L3hzbDp0ZW1wbGF0ZT4NCjwveHNsOnN0eWxlc2hlZXQ+DQoNCg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiAgeG1sbnM6ZWdvbnA9Imh0dHA6Ly9zY2hlbWFzLmdvdi5zay9mb3JtLzAwMzA1MDIyLkE5OTk5OTk5LjAwMDAwMDA4MS5Eb3BsbmVuaWVQb2RhbmlhX1BPLzEuMyI+DQo8eHNsOm91dHB1dCBtZXRob2Q9InRleHQiIGluZGVudD0ieWVzIiBvbWl0LXhtbC1kZWNsYXJhdGlvbj0ieWVzIi8+DQo8eHNsOnN0cmlwLXNwYWNlIGVsZW1lbnRzPSIqIiAvPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTyI+DQo8eHNsOnRleHQ+ZUZvcm1fZUdvdl8wMDBfUE88L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9iZWMiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0Pk9iZWM8L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9iZWMvZWdvbnA6T2JlY19Nc1UiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5NZXN0byBQZXppbm9rOiBNZXN0c2vDvSDDunJhZCBQZXppbm9rLCBSYWRuacSNbsOpIG7DoW1lc3RpZSA3LCA5MDIgMTQgUGV6aW5vazogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9iZWMvZWdvbnA6T2JlY19UZWxlZm9uIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+VGVsZWbDs246IDAzMy82OTAxIDExMzogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9iZWMvZWdvbnA6T2JlY19XZWIiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5XRUI6IHd3dy5wZXppbm9rLnNrOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhT2JlYy9lZ29ucDpPYmVjX0lDTyI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PknEjE86IDAwMzA1MDIyOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhT2JlYy9lZ29ucDpPYmVjX0RJQyI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PkRJxIw6IDIwMjA2NjIyMjY6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFPYmVjL2Vnb25wOk9iZWNfRW1haWwiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5FLW1haWw6IGluZm9ybWFjaWVAbXN1cGV6aW5vay5zazogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYUhlYWRlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5zZWtjaWFIZWFkZXI6IDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xb1pYWRhdGXEviAtIFByw6F2bmlja8OhIG9zb2JhIC8gUG9kbmlrYXRlxL48L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xb1pYWRhdGXEviAtIFByw6F2bmlja8OhIG9zb2JhIC8gUG9kbmlrYXRlxL48L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkvZWdvbnA6WmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+T2JjaG9kbsOpIG1lbm86IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkvZWdvbnA6WmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+UGxhdGNhIERQSDogPC94c2w6dGV4dD48eHNsOmNob29zZT48eHNsOndoZW4gdGVzdD0iLj0nJiMxOTM7bm8nIj48eHNsOnRleHQ+JiMxOTM7bm88L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDp3aGVuIHRlc3Q9Ii49J05pZSciPjx4c2w6dGV4dD5OaWU8L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keS9lZ29ucDpaaWFkYXRlbFBPRGV0YWlsUE9JQ08iPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PknEjE86IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkvZWdvbnA6WmlhZGF0ZWxQT0RldGFpbElDRFBIIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5JxIwgRFBIOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RldGFpbF9Db3Jwb3JhdGVCb2R5L2Vnb25wOlppYWRhdGVsUE9EZXRhaWxESUMiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PkRJxIw6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcyI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5BZHJlc2EgLSBTw61kbG8gLyBNaWVzdG8gcG9kbmlrYW5pYTwveHNsOnRleHQ+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcy8+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PsWgdMOhdDogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+T2JlYzogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5VbGljYTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbiI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+S3JhajogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xIxhc8WlIG9iY2U6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+U8O6cC7EjS46IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Pa3JlczogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+UFPEjDogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0Pk9yLsSNLjogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PkFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIEFkcmVzYSAtIFPDrWRsbyAvIE1pZXN0byBwb2RuaWthbmlhKTwveHNsOnRleHQ+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcy8+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PsWgdMOhdDogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+T2JlYzogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5VbGljYTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+S3JhajogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xIxhc8WlIG9iY2U6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+U8O6cC7EjS46IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Pa3JlczogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+UFPEjDogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0Pk9yLsSNLjogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlciI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5PcHLDoXZuZW7DoSBvc29iYTwveHNsOnRleHQ+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcy8+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlci9lZ29ucDpaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5UaXR1bCBwcmVkIG1lbm9tOiA8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT1N0YXR1dGFyX1N0YWtlaG9sZGVyL2Vnb25wOlppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5NZW5vOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT1N0YXR1dGFyX1N0YWtlaG9sZGVyL2Vnb25wOlppYWRhdGVsUE9TdGF0dXRhckZ1bmtjaWEiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PkZ1bmtjaWE6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPU3RhdHV0YXJfU3Rha2Vob2xkZXIvZWdvbnA6WmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5UaXR1bCB6YSBtZW5vbTogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlci9lZ29ucDpaaWFkYXRlbFBPU3RhdHV0YXJQcmllenZpc2tvX0ZhbWlseU5hbWUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PlByaWV6dmlza286IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPS29udGFrdCI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Lb250YWt0PC94c2w6dGV4dD4NCjx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0tvbnRha3QvZWdvbnA6WmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5UZWxlZsOzbm5lIMSNw61zbG86IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPS29udGFrdC9lZ29ucDpaaWFkYXRlbFBPS29udGFrdEVtYWlsQWRyZXNhIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5FLW1haWxvdsOhIGFkcmVzYTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRG9wbmVuaWVQb2RhbmlhIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Eb3BsbmVuaWUgcG9kYW5pYTwveHNsOnRleHQ+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcy8+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRG9wbmVuaWVQb2RhbmlhL2Vnb25wOkRvcG5lbmllUG9kYW5pYUlkIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+SWRlbnRpZmlrw6F0b3IgcMO0dm9kbsOpaG8gcG9kYW5pYTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYURvcG5lbmllUG9kYW5pYS9lZ29ucDpEb3BsbmVuaWVQb2RhbmlhUHJlZG1ldCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PlByZWRtZXQ6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFEb3BuZW5pZVBvZGFuaWEvZWdvbnA6RG9wbG5lbmllUG9kYW5pYVBvcGlzIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+UG9waXMgcG9kYW5pYTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYURvcG5lbmllUG9kYW5pYS9lZ29ucDpEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5PZMO0dm9kbmVuaWUgcG9kYW5pYTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9jaHJhbmFPc29ibnljaFVkYWpvdiI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+T2NocmFuYSBvc29ibsO9Y2ggw7pkYWpvdjwveHNsOnRleHQ+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcy8+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92L2Vnb25wOk9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PsW9aWFkYXRlxL4gYWtvIGRvdGtudXTDoSBvc29iYSwgdiBzw7psYWRlIHMgdXN0YW5vdmVuw61tIMKnNSBww61zbS4gYSkgYSDCpyAxNCB6w6Frb25hIMSNLiAxOC8yMDE4IFouIHouIOKAkyDigJ5aw6Frb24gbyBvY2hyYW5lIG9zb2Juw71jaCDDumRham92IGEgbyB6bWVuZSBhIGRvcGxuZW7DrSBuaWVrdG9yw71jaCB6w6Frb25vdiAoxI9hbGVqIGxlbiDigJ56w6Frb27igJwpLCBwbyBwcmVkY2jDoWR6YWrDumNvbSBvYm96bsOhbWVuw60gc2EgcyBpbmZvcm3DoWNpYW1pIHBvZMS+YSB1c3QuIDE5IFrDoWsuIMSNLiAxOC8yMDE4IFouIHouIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvSwgb2Rvc2xhbsOtbSB0b2h0byBlbGVrdHJvbmlja8OpaG8gZm9ybXVsw6FyYSBhIHNhbW9zdGF0bsO9bSBwb3R2cmRlbsOtbSB2IHRlanRvIGtvbMOzbmtlLCBwb3NreXR1amUgTWVzdHUgUGV6aW5vaywgYWtvIHByZXbDoWR6a292YXRlxL5vdmksIHPDumhsYXMgc28gc3ByYWNvdmFuw61tIG9zb2Juw71jaCDDumRham92IHV2ZWRlbsO9Y2ggbmEgdG9tdG8gZWxla3Ryb25pY2tvbSBmb3JtdWzDoXJpIGEgdiBqZWhvIHByw61sb2jDoWNoLiDFvWlhZGF0ZcS+IHBvc2t5dHVqZSB0aWV0byDDumRhamUgemEgw7rEjWVsb20gYmV6cGXEjW5laiBhIHrDoW1lbnUgdnlsdcSNdWrDumNlaiBpZGVudGlmaWvDoWNpZSBkb3RrbnV0ZWogb3NvYnkgdiBwcmVkbWV0bmVqIMW+aWFkb3N0aSAocG9kYW7DrSkgYSBqZWogbsOhc2xlZG7DqSBzcHJhY292YW5pZSB6IHpteXNsZSB6w6Frb25hIGEgcHLDrXNsdcWhbsO9Y2ggbmFyaWFkZW7DrSB0YWssIGFrbyBqZSB0byB1dmVkZW7DqSBuYSBzdHLDoW5rZSBlbGVrdHJvbmlja2VqIHNsdcW+YnkgeiBrdG9yZWogYm9sIHRlbnRvIGZvcm11bMOhciBvdHZvcmVuw70uIERvYmEgcGxhdG5vc3RpIHPDumhsYXN1IHNhIHZpYcW+ZSBuYSBkb2J1IHRydmFuaWEgw7rEjWVsdSBzcHJhY8O6dmFuaWEgdG9odG8gcG9kYW5pYSBhIHPDunZpc2lhY2ljaCDDumtvbm92IHYgem15c2xlIHByZWRtZXRuZWogbGVnaXNsYXTDrXZ5LiDFvWlhZGF0ZcS+IGplIG9wcsOhdm5lbsO9IHRlbnRvIHPDumhsYXMga2VkeWtvxL52ZWsgb2R2b2xhxaUgZm9ybW91IGVsZWt0cm9uaWNrw6lobyBwb2RhbmlhIFbFoWVvYmVjbmVqIGFnZW5keSBtZXN0YSBhbGVibyBpbsO9bSByZWxldmFudG7DvW0gc3DDtHNvYm9tIHByZXVrw6F6YXRlxL5uZSBkb3J1xI1lbsO9bSBtZXN0dS46IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2xlYW5DaGVja2JveFRvU3RyaW5nIj48eHNsOndpdGgtcGFyYW0gbmFtZT0iYm9vbFZhbHVlIiBzZWxlY3Q9Ii4iIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU5vdGlmaWthY2llIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Ob3RpZmlrw6FjaWU8L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU5vdGlmaWthY2llL2Vnb25wOk5vdGlmaWthY2llWmFzaWVsYW5pZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PsW9ZWzDoXRlIHNpIHphc2llbGFuaWUgdXBvem9ybmVuw60gPzogPC94c2w6dGV4dD48eHNsOmNob29zZT48eHNsOndoZW4gdGVzdD0iLj0nbmllJyI+PHhzbDp0ZXh0Pm5pZTwveHNsOnRleHQ+PC94c2w6d2hlbj48eHNsOndoZW4gdGVzdD0iLj0nZURlc2snIj48eHNsOnRleHQ+ZURlc2s8L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhVnlzdHVwIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHU8L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVZ5c3R1cC9lZ29ucDpSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHU6IDwveHNsOnRleHQ+PHhzbDpjaG9vc2U+PHhzbDp3aGVuIHRlc3Q9Ii49J2VEZXNrJyI+PHhzbDp0ZXh0PmVEZXNrPC94c2w6dGV4dD48L3hzbDp3aGVuPjx4c2w6d2hlbiB0ZXN0PSIuPSdvc29ibmUnIj48eHNsOnRleHQ+b3NvYm5lPC94c2w6dGV4dD48L3hzbDp3aGVuPjx4c2w6d2hlbiB0ZXN0PSIuPSdwb8WhdG91JyI+PHhzbDp0ZXh0PnBvxaF0b3U8L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhVnlzdHVwL2Vnb25wOlZ5c3R1cEtvbnRha3QiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Lb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvc29ibmUgLyBwb8WhdG91OiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRm9vdGVyIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PnNla2NpYUZvb3RlcjogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VG9Ta0RhdGUiPg0KPHhzbDpwYXJhbSBuYW1lPSJkYXRlIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJkYXRlU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkZGF0ZSkiIC8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVN0cmluZyAhPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVN0cmluZyk9MTAgYW5kIHN0cmluZyhudW1iZXIoc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCAxLCA0KSkpICE9ICdOYU4nICI+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KHN1YnN0cmluZygkZGF0ZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCA2LCAyKSwgJy4nLCBzdWJzdHJpbmcoJGRhdGVTdHJpbmcsIDEsIDQpKSIgLz4NCjwveHNsOndoZW4+DQo8eHNsOm90aGVyd2lzZT4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZGF0ZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQo8L3hzbDpvdGhlcndpc2U+DQo8L3hzbDpjaG9vc2U+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iYm9vbGVhbkNoZWNrYm94VG9TdHJpbmciPg0KPHhzbDpwYXJhbSBuYW1lPSJib29sVmFsdWUiIC8+DQo8eHNsOnZhcmlhYmxlIG5hbWU9ImJvb2xWYWx1ZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJGJvb2xWYWx1ZSkiIC8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSIkYm9vbFZhbHVlU3RyaW5nID0gJ3RydWUnICI+DQo8eHNsOnRleHQ+w4FubzwveHNsOnRleHQ+DQo8L3hzbDp3aGVuPg0KPHhzbDp3aGVuIHRlc3Q9IiRib29sVmFsdWVTdHJpbmcgPSAnZmFsc2UnICI+DQo8eHNsOnRleHQ+TmllPC94c2w6dGV4dD4NCjwveHNsOndoZW4+DQo8eHNsOndoZW4gdGVzdD0iJGJvb2xWYWx1ZVN0cmluZyA9ICcxJyAiPg0KPHhzbDp0ZXh0PsOBbm88L3hzbDp0ZXh0Pg0KPC94c2w6d2hlbj4NCjx4c2w6d2hlbiB0ZXN0PSIkYm9vbFZhbHVlU3RyaW5nID0gJzAnICI+DQo8eHNsOnRleHQ+TmllPC94c2w6dGV4dD4NCjwveHNsOndoZW4+DQo8eHNsOm90aGVyd2lzZT4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkYm9vbFZhbHVlU3RyaW5nIj48L3hzbDp2YWx1ZS1vZj4NCjwveHNsOm90aGVyd2lzZT4NCjwveHNsOmNob29zZT4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUaW1lVHJpbVNlY29uZHMiPg0KPHhzbDpwYXJhbSBuYW1lPSJ0aW1lIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJ0aW1lU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkdGltZSkiIC8+DQo8eHNsOmlmIHRlc3Q9IiR0aW1lU3RyaW5nICE9ICcnIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmcoJHRpbWVTdHJpbmcsIDEsIDUpIiAvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VGltZSI+DQo8eHNsOnBhcmFtIG5hbWU9InRpbWUiIC8+DQo8eHNsOnZhcmlhYmxlIG5hbWU9InRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCR0aW1lKSIgLz4NCjx4c2w6aWYgdGVzdD0iJHRpbWVTdHJpbmcgIT0gJyciPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZygkdGltZVN0cmluZywgMSwgOCkiIC8+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPg0KPHhzbDpwYXJhbSBuYW1lPSJ0ZXh0Ii8+DQo8eHNsOnBhcmFtIG5hbWU9InJlcGxhY2UiLz4NCjx4c2w6cGFyYW0gbmFtZT0iYnkiLz4NCjx4c2w6Y2hvb3NlPg0KPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKCR0ZXh0LCAkcmVwbGFjZSkiPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN1YnN0cmluZy1iZWZvcmUoJHRleHQsJHJlcGxhY2UpIi8+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGJ5Ii8+DQo8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj4NCjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9InN1YnN0cmluZy1hZnRlcigkdGV4dCwkcmVwbGFjZSkiLz4NCjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiRyZXBsYWNlIi8+DQo8eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJGJ5IiAvPg0KPC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOndoZW4+DQo8eHNsOm90aGVyd2lzZT4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdGV4dCIvPg0KPC94c2w6b3RoZXJ3aXNlPg0KPC94c2w6Y2hvb3NlPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hdFRvU2tEYXRlVGltZSI+DQo8eHNsOnBhcmFtIG5hbWU9ImRhdGVUaW1lIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJkYXRlVGltZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJGRhdGVUaW1lKSIgLz4NCjx4c2w6Y2hvb3NlPg0KPHhzbDp3aGVuIHRlc3Q9IiRkYXRlVGltZVN0cmluZyE9ICcnIGFuZCBzdHJpbmctbGVuZ3RoKCRkYXRlVGltZVN0cmluZyk+MTggYW5kIHN0cmluZyhudW1iZXIoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCkpKSAhPSAnTmFOJyAiPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdChzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCA5LCAyKSwgJy4nLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCA2LCAyKSwgJy4nLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxLCA0KSwnICcsIHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEyLCAyKSwnOicsIHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDE1LCAyKSkiIC8+DQo8L3hzbDp3aGVuPg0KPHhzbDpvdGhlcndpc2U+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGRhdGVUaW1lU3RyaW5nIj48L3hzbDp2YWx1ZS1vZj4NCjwveHNsOm90aGVyd2lzZT4NCjwveHNsOmNob29zZT4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUb1NrRGF0ZVRpbWVTZWNvbmQiPg0KPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4NCjx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRkYXRlVGltZSkiIC8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVRpbWVTdHJpbmchPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVRpbWVTdHJpbmcpPjE4IGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpKSkgIT0gJ05hTicgIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCksJyAnLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxMiwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxNSwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxOCwgMikpIiAvPg0KPC94c2w6d2hlbj4NCjx4c2w6b3RoZXJ3aXNlPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkYXRlVGltZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQo8L3hzbDpvdGhlcndpc2U+DQo8L3hzbDpjaG9vc2U+DQo8L3hzbDp0ZW1wbGF0ZT4NCjwveHNsOnN0eWxlc2hlZXQ+DQoNCg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjx4c2w6c3R5bGVzaGVldCB4bWw6bGFuZz0iZW4iIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB4bWxuczpkID0gImh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSIgeG1sbnM6ZXhzbD0iaHR0cDovL2V4c2x0Lm9yZy9jb21tb24iICB4bWxuczplZ29ucD0iaHR0cDovL3NjaGVtYXMuZ292LnNrL2Zvcm0vMDAzMDUwMjIuQTk5OTk5OTkuMDAwMDAwMDgxLkRvcGxuZW5pZVBvZGFuaWFfUE8vMS4zIiBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCIgdmVyc2lvbj0iMS4wIj4NCiAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+DQogICAgPGZvOnJvb3QgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCI+ICAgICAgDQoJCTxmbzpsYXlvdXQtbWFzdGVyLXNldD4NCiAgICA8Zm86c2ltcGxlLXBhZ2UtbWFzdGVyIG1hc3Rlci1uYW1lPSJBNCINCiAgICAgIHBhZ2UtaGVpZ2h0PSI4NDJweCIgcGFnZS13aWR0aD0iNTk1cHgiDQogICAgICBtYXJnaW4tdG9wPSIxMHB4IiBtYXJnaW4tYm90dG9tPSIxMHB4Ig0KICAgICAgbWFyZ2luLWxlZnQ9IjEwcHgiIG1hcmdpbi1yaWdodD0iMTBweCI+DQogICAgICA8Zm86cmVnaW9uLWJvZHkgbWFyZ2luLWJvdHRvbT0iMjBtbSIvPg0KICAgICAgPGZvOnJlZ2lvbi1hZnRlciByZWdpb24tbmFtZT0iZm9vdGVyIiBleHRlbnQ9IjEwbW0iLz4NCiAgICA8L2ZvOnNpbXBsZS1wYWdlLW1hc3Rlcj4NCiAgICA8Zm86cGFnZS1zZXF1ZW5jZS1tYXN0ZXIgbWFzdGVyLW5hbWU9ImRvY3VtZW50Ij4NCiAgICAgIDxmbzpyZXBlYXRhYmxlLXBhZ2UtbWFzdGVyLWFsdGVybmF0aXZlcz4NCiAgICAgICAgPGZvOmNvbmRpdGlvbmFsLXBhZ2UtbWFzdGVyLXJlZmVyZW5jZSBtYXN0ZXItcmVmZXJlbmNlPSJBNCIvPg0KICAgICAgPC9mbzpyZXBlYXRhYmxlLXBhZ2UtbWFzdGVyLWFsdGVybmF0aXZlcz4NCiAgICA8L2ZvOnBhZ2Utc2VxdWVuY2UtbWFzdGVyPg0KICA8L2ZvOmxheW91dC1tYXN0ZXItc2V0Pg0KICA8Zm86cGFnZS1zZXF1ZW5jZSBtYXN0ZXItcmVmZXJlbmNlPSJkb2N1bWVudCIgZm9udC1mYW1pbHk9IkFyaWFsIj4NCiAgICA8Zm86c3RhdGljLWNvbnRlbnQgZmxvdy1uYW1lPSJmb290ZXIiPg0KICAgICAgPGZvOmJsb2NrIHRleHQtYWxpZ249ImVuZCI+PGZvOnBhZ2UtbnVtYmVyLz48L2ZvOmJsb2NrPg0KICAgIDwvZm86c3RhdGljLWNvbnRlbnQ+DQogICAgICAgICAgPGZvOmZsb3cgZmxvdy1uYW1lPSJ4c2wtcmVnaW9uLWJvZHkiPgkJDQoJCQkJCQk8Zm86YmxvY2sgZm9udC1zaXplPScyMHB0JyB0ZXh0LWFsaWduPSdjZW50ZXInPjAwMC5Eb3BsbmVuaWUgcG9kYW5pYSAtIFBPPC9mbzpibG9jaz48Zm86YmxvY2sgY29sb3I9J3doaXRlJz58PC9mbzpibG9jaz48Zm86YmxvY2svPgoJCQkJCSAgICAgCQkJCQ0KCQkJCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCgkJCTwvZm86Zmxvdz4NCiAgICAgICAgICAgPC9mbzpwYWdlLXNlcXVlbmNlPg0KICAgICAgICAgIDwvZm86cm9vdD4NCiAgICAgICAgIDwveHNsOnRlbXBsYXRlPg0KDQoJCQk8eHNsOnRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+DQogICAgICAgICAgICA8eHNsOnBhcmFtIG5hbWU9InRleHQiLz4NCiAgICAgICAgICAgIDx4c2w6cGFyYW0gbmFtZT0icmVwbGFjZSIvPg0KICAgICAgICAgICAgPHhzbDpwYXJhbSBuYW1lPSJieSIvPg0KICAgICAgICAgICAgPHhzbDpjaG9vc2U+DQogICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoJHRleHQsICRyZXBsYWNlKSI+DQogICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nLWJlZm9yZSgkdGV4dCwkcmVwbGFjZSkiLz4NCiAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkYnkiLz4NCiAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPg0KICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0ic3Vic3RyaW5nLWFmdGVyKCR0ZXh0LCRyZXBsYWNlKSIvPg0KICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJHJlcGxhY2UiLz4NCiAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSIkYnkiIC8+DQogICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KICAgICAgICAgICAgPC94c2w6d2hlbj4NCiAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiR0ZXh0Ii8+DQogICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQogICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICA8L3hzbDp0ZW1wbGF0ZT4NCg0KCQkJPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUaW1lVHJpbVNlY29uZHMiPg0KCQkJPHhzbDpwYXJhbSBuYW1lPSJ0aW1lIiAvPg0KCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJ0aW1lU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkdGltZSkiIC8+DQoJCQk8eHNsOmlmIHRlc3Q9IiR0aW1lU3RyaW5nICE9ICcnIj4NCgkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmcoJHRpbWVTdHJpbmcsIDEsIDUpIiAvPg0KCQkJPC94c2w6aWY+DQoJCQk8L3hzbDp0ZW1wbGF0ZT4NCg0KCQkJPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUaW1lIj4NCgkJCTx4c2w6cGFyYW0gbmFtZT0idGltZSIgLz4NCgkJCTx4c2w6dmFyaWFibGUgbmFtZT0idGltZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJHRpbWUpIiAvPg0KCQkJPHhzbDppZiB0ZXN0PSIkdGltZVN0cmluZyAhPSAnJyI+DQoJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nKCR0aW1lU3RyaW5nLCAxLCA4KSIgLz4NCgkJCTwveHNsOmlmPg0KCQkJPC94c2w6dGVtcGxhdGU+DQoNCgkJCTx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VG9Ta0RhdGUiPg0KCQkJPHhzbDpwYXJhbSBuYW1lPSJkYXRlIiAvPg0KCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJkYXRlU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkZGF0ZSkiIC8+DQoJCQk8eHNsOmNob29zZT4NCgkJCTx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVN0cmluZyAhPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVN0cmluZyk9MTAgYW5kIHN0cmluZyhudW1iZXIoc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCAxLCA0KSkpICE9ICdOYU4nICI+DQoJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KHN1YnN0cmluZygkZGF0ZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCA2LCAyKSwgJy4nLCBzdWJzdHJpbmcoJGRhdGVTdHJpbmcsIDEsIDQpKSIgLz4NCgkJCTwveHNsOndoZW4+DQoJCQk8eHNsOm90aGVyd2lzZT4NCgkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZGF0ZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQoJCQk8L3hzbDpvdGhlcndpc2U+DQoJCQk8L3hzbDpjaG9vc2U+DQoJCQk8L3hzbDp0ZW1wbGF0ZT4NCg0KCQkJPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUb1NrRGF0ZVRpbWUiPg0KICAgICAgICAgICAgPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4NCiAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRkYXRlVGltZSkiIC8+DQogICAgICAgICAgICA8eHNsOmNob29zZT4NCiAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVRpbWVTdHJpbmchPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVRpbWVTdHJpbmcpPjE4IGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpKSkgIT0gJ05hTicgIj4NCiAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCksJyAnLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxMiwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxNSwgMikpIiAvPg0KICAgICAgICAgICAgPC94c2w6d2hlbj4NCiAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkYXRlVGltZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQogICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQogICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICA8L3hzbDp0ZW1wbGF0ZT4NCg0KCQkJPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUb1NrRGF0ZVRpbWVTZWNvbmQiPg0KICAgICAgICAgICAgPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4NCiAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRkYXRlVGltZSkiIC8+DQogICAgICAgICAgICA8eHNsOmNob29zZT4NCiAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVRpbWVTdHJpbmchPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVRpbWVTdHJpbmcpPjE4IGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpKSkgIT0gJ05hTicgIj4NCiAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCksJyAnLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxMiwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxNSwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxOCwgMikpIiAvPg0KICAgICAgICAgICAgPC94c2w6d2hlbj4NCiAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkYXRlVGltZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQogICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQogICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICA8L3hzbDp0ZW1wbGF0ZT4NCgkJCQkJCQk8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPIj4NCiAgPGZvOnRhYmxlPg0KICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFPYmVjIiAvPg0KICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFIZWFkZXIiIC8+DQogICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keSIgLz4NCiAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhRG9wbmVuaWVQb2RhbmlhIiAvPg0KICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiIC8+DQogICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYU5vdGlmaWthY2llIiAvPg0KICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFWeXN0dXAiIC8+DQogICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYUZvb3RlciIgLz4NCiAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgPC9mbzp0YWJsZS1ib2R5Pg0KICA8L2ZvOnRhYmxlPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9iZWMiPg0KICA8Zm86YmxvY2sgYm9yZGVyLXdpZHRoPSIwLjNwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgbWFyZ2luLWxlZnQ9IjFwdCIgbWFyZ2luLXRvcD0iNnB0IiBtYXJnaW4tcmlnaHQ9IjFwdCI+DQogICAgPGZvOmJsb2NrIG1hcmdpbi1ib3R0b209IjZwdCI+DQogICAgICA8Zm86dGFibGU+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrIC8+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5NZXN0byBQZXppbm9rOiBNZXN0c2vDvSDDunJhZCBQZXppbm9rLCBSYWRuacSNbsOpIG7DoW1lc3RpZSA3LCA5MDIgMTQgUGV6aW5vazwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+VGVsZWbDs246IDAzMy82OTAxIDExMzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+V0VCOiB3d3cucGV6aW5vay5zazwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5JxIxPOiAwMDMwNTAyMjwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+REnEjDogMjAyMDY2MjIyNjwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+RS1tYWlsOiBpbmZvcm1hY2llQG1zdXBlemlub2suc2s8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgPC9mbzp0YWJsZT4NCiAgICA8L2ZvOmJsb2NrPg0KICA8L2ZvOmJsb2NrPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYUhlYWRlciI+DQogIDxmbzpibG9jayBib3JkZXItd2lkdGg9IjAuM3B0IiBib3JkZXItc3R5bGU9InNvbGlkIiBtYXJnaW4tbGVmdD0iMXB0IiBtYXJnaW4tdG9wPSI2cHQiIG1hcmdpbi1yaWdodD0iMXB0Ij4NCiAgICA8Zm86YmxvY2sgbWFyZ2luLWJvdHRvbT0iNnB0Ij4NCiAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIxbW0iPkRvcGxuZW5pZSBwb2RhbmlhIC0gUE88L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgPC9mbzp0YWJsZT4NCiAgICA8L2ZvOmJsb2NrPg0KICA8L2ZvOmJsb2NrPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keSI+DQogIDxmbzpibG9jayBib3JkZXItd2lkdGg9IjAuM3B0IiBib3JkZXItc3R5bGU9InNvbGlkIiBtYXJnaW4tbGVmdD0iMXB0IiBtYXJnaW4tdG9wPSI2cHQiIG1hcmdpbi1yaWdodD0iMXB0Ij4NCiAgICA8Zm86YmxvY2sgbWFyZ2luLWJvdHRvbT0iNnB0Ij4NCiAgICAgIDxmbzpibG9jayBiYWNrZ3JvdW5kLWNvbG9yPSJibGFjayIgY29sb3I9IndoaXRlIiBtYXJnaW4tbGVmdD0iM3B0IiBtYXJnaW4tdG9wPSIzcHQiIG1hcmdpbi1yaWdodD0iM3B0IiBwYWRkaW5nLWxlZnQ9IjFwdCIgcGFkZGluZy10b3A9IjJwdCI+xb1pYWRhdGXEviAtIFByw6F2bmlja8OhIG9zb2JhIC8gUG9kbmlrYXRlxL48L2ZvOmJsb2NrPg0KICAgICAgPGZvOmJsb2NrIGNvbG9yPSJ3aGl0ZSI+fDwvZm86YmxvY2s+DQogICAgICA8Zm86dGFibGU+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RldGFpbF9Db3Jwb3JhdGVCb2R5IiAvPg0KICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MiIC8+DQogICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcyIgLz4NCiAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlciIgLz4NCiAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsUE9Lb250YWt0IiAvPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keSI+DQogIDxmbzpibG9jayBib3JkZXItd2lkdGg9IjAuM3B0IiBib3JkZXItc3R5bGU9InNvbGlkIiBtYXJnaW4tbGVmdD0iMXB0IiBtYXJnaW4tdG9wPSI2cHQiIG1hcmdpbi1yaWdodD0iMXB0Ij4NCiAgICA8Zm86YmxvY2sgbWFyZ2luLWJvdHRvbT0iNnB0Ij4NCiAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+T2JjaG9kbsOpIG1lbm88L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5QbGF0Y2EgRFBIPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPiYjMTkzO25vPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImVnb25wOlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEhbdGV4dCgpPScmIzE5MztubyddIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTQ7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOndoZW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgZm9udC1mYW1pbHk9IldpbmdkaW5ncyI+JiN4RjBBMTs8L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+TmllPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImVnb25wOlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEhbdGV4dCgpPSdOaWUnXSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBmb250LWZhbWlseT0iV2luZ2RpbmdzIj4mI3hGMEE0OzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDp3aGVuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTE7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNob29zZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+ScSMTzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRGV0YWlsUE9JQ08iIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+ScSMIERQSDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRGV0YWlsSUNEUEgiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5EScSMPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9EZXRhaWxESUMiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOmJsb2NrIGJhY2tncm91bmQtY29sb3I9ImJsYWNrIiBjb2xvcj0id2hpdGUiIG1hcmdpbi1sZWZ0PSIzcHQiIG1hcmdpbi10b3A9IjNwdCIgbWFyZ2luLXJpZ2h0PSIzcHQiIHBhZGRpbmctbGVmdD0iMXB0IiBwYWRkaW5nLXRvcD0iMnB0Ij5BZHJlc2EgLSBTw61kbG8gLyBNaWVzdG8gcG9kbmlrYW5pYTwvZm86YmxvY2s+DQogICAgICA8Zm86YmxvY2sgY29sb3I9IndoaXRlIj58PC9mbzpibG9jaz4NCiAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xaB0w6F0PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnkiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+T2JlYzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+VWxpY2E8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0FkcmVzYVVsaWNhX1N0cmVldE5hbWUiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5LcmFqPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbiIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz7EjGFzxaUgb2JjZTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+U8O6cC7EjS48L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5Pa3JlczwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5IiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPlBTxIw8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPk9yLsSNLjwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgPC9mbzp0YWJsZT4NCiAgICA8L2ZvOmJsb2NrPg0KICA8L2ZvOmJsb2NrPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcyI+DQogIDxmbzpibG9jayBib3JkZXItd2lkdGg9IjAuM3B0IiBib3JkZXItc3R5bGU9InNvbGlkIiBtYXJnaW4tbGVmdD0iMXB0IiBtYXJnaW4tdG9wPSI2cHQiIG1hcmdpbi1yaWdodD0iMXB0Ij4NCiAgICA8Zm86YmxvY2sgbWFyZ2luLWJvdHRvbT0iNnB0Ij4NCiAgICAgIDxmbzpibG9jayBiYWNrZ3JvdW5kLWNvbG9yPSJibGFjayIgY29sb3I9IndoaXRlIiBtYXJnaW4tbGVmdD0iM3B0IiBtYXJnaW4tdG9wPSIzcHQiIG1hcmdpbi1yaWdodD0iM3B0IiBwYWRkaW5nLWxlZnQ9IjFwdCIgcGFkZGluZy10b3A9IjJwdCI+QWRyZXNhIHByZSBkb3J1xI1lbmllICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gQWRyZXNhIC0gU8OtZGxvIC8gTWllc3RvIHBvZG5pa2FuaWEpPC9mbzpibG9jaz4NCiAgICAgIDxmbzpibG9jayBjb2xvcj0id2hpdGUiPnw8L2ZvOmJsb2NrPg0KICAgICAgPGZvOnRhYmxlPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz7FoHTDoXQ8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5PYmVjPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5VbGljYTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPktyYWo8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPsSMYXPFpSBvYmNlPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5Tw7pwLsSNLjwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPk9rcmVzPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHkiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+UFPEjDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+T3IuxI0uPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlciI+DQogIDxmbzpibG9jayBib3JkZXItd2lkdGg9IjAuM3B0IiBib3JkZXItc3R5bGU9InNvbGlkIiBtYXJnaW4tbGVmdD0iMXB0IiBtYXJnaW4tdG9wPSI2cHQiIG1hcmdpbi1yaWdodD0iMXB0Ij4NCiAgICA8Zm86YmxvY2sgbWFyZ2luLWJvdHRvbT0iNnB0Ij4NCiAgICAgIDxmbzpibG9jayBiYWNrZ3JvdW5kLWNvbG9yPSJibGFjayIgY29sb3I9IndoaXRlIiBtYXJnaW4tbGVmdD0iM3B0IiBtYXJnaW4tdG9wPSIzcHQiIG1hcmdpbi1yaWdodD0iM3B0IiBwYWRkaW5nLWxlZnQ9IjFwdCIgcGFkZGluZy10b3A9IjJwdCI+T3Byw6F2bmVuw6Egb3NvYmE8L2ZvOmJsb2NrPg0KICAgICAgPGZvOmJsb2NrIGNvbG9yPSJ3aGl0ZSI+fDwvZm86YmxvY2s+DQogICAgICA8Zm86dGFibGU+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5UaXR1bCBwcmVkIG1lbm9tPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+TWVubzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPU3RhdHV0YXJNZW5vX0dpdmVuTmFtZSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5GdW5rY2lhPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9TdGF0dXRhckZ1bmtjaWEiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5UaXR1bCB6YSBtZW5vbTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+UHJpZXp2aXNrbzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbFBPU3RhdHV0YXJQcmllenZpc2tvX0ZhbWlseU5hbWUiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Lb250YWt0Ij4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOmJsb2NrIGJhY2tncm91bmQtY29sb3I9ImJsYWNrIiBjb2xvcj0id2hpdGUiIG1hcmdpbi1sZWZ0PSIzcHQiIG1hcmdpbi10b3A9IjNwdCIgbWFyZ2luLXJpZ2h0PSIzcHQiIHBhZGRpbmctbGVmdD0iMXB0IiBwYWRkaW5nLXRvcD0iMnB0Ij5Lb250YWt0PC9mbzpibG9jaz4NCiAgICAgIDxmbzpibG9jayBjb2xvcj0id2hpdGUiPnw8L2ZvOmJsb2NrPg0KICAgICAgPGZvOnRhYmxlPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+VGVsZWbDs25uZSDEjcOtc2xvPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPkUtbWFpbG92w6EgYWRyZXNhPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2EiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRG9wbmVuaWVQb2RhbmlhIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOmJsb2NrIGJhY2tncm91bmQtY29sb3I9ImJsYWNrIiBjb2xvcj0id2hpdGUiIG1hcmdpbi1sZWZ0PSIzcHQiIG1hcmdpbi10b3A9IjNwdCIgbWFyZ2luLXJpZ2h0PSIzcHQiIHBhZGRpbmctbGVmdD0iMXB0IiBwYWRkaW5nLXRvcD0iMnB0Ij5Eb3BsbmVuaWUgcG9kYW5pYTwvZm86YmxvY2s+DQogICAgICA8Zm86YmxvY2sgY29sb3I9IndoaXRlIj58PC9mbzpibG9jaz4NCiAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5JZGVudGlmaWvDoXRvciBww7R2b2Ruw6lobyBwb2RhbmlhPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOkRvcG5lbmllUG9kYW5pYUlkIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPlByZWRtZXQ8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6RG9wbG5lbmllUG9kYW5pYVByZWRtZXQiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+UG9waXMgcG9kYW5pYTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGhlaWdodD0iMTAwcHgiIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrIGh5cGhlbmF0ZT0idHJ1ZSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOkRvcGxuZW5pZVBvZGFuaWFQb3BpcyIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5PZMO0dm9kbmVuaWUgcG9kYW5pYTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGhlaWdodD0iMTAwcHgiIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrIGh5cGhlbmF0ZT0idHJ1ZSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOkRvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgIDwvZm86dGFibGU+DQogICAgPC9mbzpibG9jaz4NCiAgPC9mbzpibG9jaz4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiPg0KICA8Zm86YmxvY2sgYm9yZGVyLXdpZHRoPSIwLjNwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgbWFyZ2luLWxlZnQ9IjFwdCIgbWFyZ2luLXRvcD0iNnB0IiBtYXJnaW4tcmlnaHQ9IjFwdCI+DQogICAgPGZvOmJsb2NrIG1hcmdpbi1ib3R0b209IjZwdCI+DQogICAgICA8Zm86YmxvY2sgYmFja2dyb3VuZC1jb2xvcj0iYmxhY2siIGNvbG9yPSJ3aGl0ZSIgbWFyZ2luLWxlZnQ9IjNwdCIgbWFyZ2luLXRvcD0iM3B0IiBtYXJnaW4tcmlnaHQ9IjNwdCIgcGFkZGluZy1sZWZ0PSIxcHQiIHBhZGRpbmctdG9wPSIycHQiPk9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3Y8L2ZvOmJsb2NrPg0KICAgICAgPGZvOmJsb2NrIGNvbG9yPSJ3aGl0ZSI+fDwvZm86YmxvY2s+DQogICAgICA8Zm86dGFibGU+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhLCB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqc1IHDDrXNtLiBhKSBhIMKnIDE0IHrDoWtvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlrDoWtvbiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbuKAnCksIHBvIHByZWRjaMOhZHphasO6Y29tIG9ib3puw6FtZW7DrSBzYSBzIGluZm9ybcOhY2lhbWkgcG9kxL5hIHVzdC4gMTkgWsOhay4gxI0uIDE4LzIwMTggWi4gei4gbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LCBvZG9zbGFuw61tIHRvaHRvIGVsZWt0cm9uaWNrw6lobyBmb3JtdWzDoXJhIGEgc2Ftb3N0YXRuw71tIHBvdHZyZGVuw61tIHYgdGVqdG8ga29sw7Nua2UsIHBvc2t5dHVqZSBNZXN0dSBQZXppbm9rLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCBuYSB0b210byBlbGVrdHJvbmlja29tIGZvcm11bMOhcmkgYSB2IGplaG8gcHLDrWxvaMOhY2guIMW9aWFkYXRlxL4gcG9za3l0dWplIHRpZXRvIMO6ZGFqZSB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbsOtKSBhIGplaiBuw6FzbGVkbsOpIHNwcmFjb3ZhbmllIHogem15c2xlIHrDoWtvbmEgYSBwcsOtc2x1xaFuw71jaCBuYXJpYWRlbsOtIHRhaywgYWtvIGplIHRvIHV2ZWRlbsOpIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSDDusSNZWx1IHNwcmFjw7p2YW5pYSB0b2h0byBwb2RhbmlhIGEgc8O6dmlzaWFjaWNoIMO6a29ub3YgdiB6bXlzbGUgcHJlZG1ldG5laiBsZWdpc2xhdMOtdnkuIMW9aWFkYXRlxL4gamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBrZWR5a2/EvnZlayBvZHZvbGHFpSBmb3Jtb3UgZWxla3Ryb25pY2vDqWhvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluw71tIHJlbGV2YW50bsO9bSBzcMO0c29ib20gcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw71tIG1lc3R1LjwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iZWdvbnA6T2NocmFuYU9zb2JueWNoVWRham92U3VobGFzW3RleHQoKT0nxb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhLCB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqc1IHDDrXNtLiBhKSBhIMKnIDE0IHrDoWtvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlrDoWtvbiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbuKAnCksIHBvIHByZWRjaMOhZHphasO6Y29tIG9ib3puw6FtZW7DrSBzYSBzIGluZm9ybcOhY2lhbWkgcG9kxL5hIHVzdC4gMTkgWsOhay4gxI0uIDE4LzIwMTggWi4gei4gbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LCBvZG9zbGFuw61tIHRvaHRvIGVsZWt0cm9uaWNrw6lobyBmb3JtdWzDoXJhIGEgc2Ftb3N0YXRuw71tIHBvdHZyZGVuw61tIHYgdGVqdG8ga29sw7Nua2UsIHBvc2t5dHVqZSBNZXN0dSBQZXppbm9rLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCBuYSB0b210byBlbGVrdHJvbmlja29tIGZvcm11bMOhcmkgYSB2IGplaG8gcHLDrWxvaMOhY2guIMW9aWFkYXRlxL4gcG9za3l0dWplIHRpZXRvIMO6ZGFqZSB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbsOtKSBhIGplaiBuw6FzbGVkbsOpIHNwcmFjb3ZhbmllIHogem15c2xlIHrDoWtvbmEgYSBwcsOtc2x1xaFuw71jaCBuYXJpYWRlbsOtIHRhaywgYWtvIGplIHRvIHV2ZWRlbsOpIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSDDusSNZWx1IHNwcmFjw7p2YW5pYSB0b2h0byBwb2RhbmlhIGEgc8O6dmlzaWFjaWNoIMO6a29ub3YgdiB6bXlzbGUgcHJlZG1ldG5laiBsZWdpc2xhdMOtdnkuIMW9aWFkYXRlxL4gamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBrZWR5a2/EvnZlayBvZHZvbGHFpSBmb3Jtb3UgZWxla3Ryb25pY2vDqWhvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluw71tIHJlbGV2YW50bsO9bSBzcMO0c29ib20gcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw71tIG1lc3R1LiddIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgZm9udC1mYW1pbHk9IldpbmdkaW5ncyI+JiN4RjA3ODs8L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDp3aGVuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBmb250LWZhbWlseT0iV2luZ2RpbmdzIj4mI3hGMEE4OzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgIDwvZm86dGFibGU+DQogICAgPC9mbzpibG9jaz4NCiAgPC9mbzpibG9jaz4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFOb3RpZmlrYWNpZSI+DQogIDxmbzpibG9jayBib3JkZXItd2lkdGg9IjAuM3B0IiBib3JkZXItc3R5bGU9InNvbGlkIiBtYXJnaW4tbGVmdD0iMXB0IiBtYXJnaW4tdG9wPSI2cHQiIG1hcmdpbi1yaWdodD0iMXB0Ij4NCiAgICA8Zm86YmxvY2sgbWFyZ2luLWJvdHRvbT0iNnB0Ij4NCiAgICAgIDxmbzpibG9jayBiYWNrZ3JvdW5kLWNvbG9yPSJibGFjayIgY29sb3I9IndoaXRlIiBtYXJnaW4tbGVmdD0iM3B0IiBtYXJnaW4tdG9wPSIzcHQiIG1hcmdpbi1yaWdodD0iM3B0IiBwYWRkaW5nLWxlZnQ9IjFwdCIgcGFkZGluZy10b3A9IjJwdCI+Tm90aWZpa8OhY2llPC9mbzpibG9jaz4NCiAgICAgIDxmbzpibG9jayBjb2xvcj0id2hpdGUiPnw8L2ZvOmJsb2NrPg0KICAgICAgPGZvOnRhYmxlPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPsW9ZWzDoXRlIHNpIHphc2llbGFuaWUgdXBvem9ybmVuw60gPzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5uaWU8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iZWdvbnA6Tm90aWZpa2FjaWVaYXNpZWxhbmllW3RleHQoKT0nbmllJ10iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgZm9udC1mYW1pbHk9IldpbmdkaW5ncyI+JiN4RjBBNDs8L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6d2hlbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBmb250LWZhbWlseT0iV2luZ2RpbmdzIj4mI3hGMEExOzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5lRGVzazwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJlZ29ucDpOb3RpZmlrYWNpZVphc2llbGFuaWVbdGV4dCgpPSdlRGVzayddIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTQ7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOndoZW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgZm9udC1mYW1pbHk9IldpbmdkaW5ncyI+JiN4RjBBMTs8L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhVnlzdHVwIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOmJsb2NrIGJhY2tncm91bmQtY29sb3I9ImJsYWNrIiBjb2xvcj0id2hpdGUiIG1hcmdpbi1sZWZ0PSIzcHQiIG1hcmdpbi10b3A9IjNwdCIgbWFyZ2luLXJpZ2h0PSIzcHQiIHBhZGRpbmctbGVmdD0iMXB0IiBwYWRkaW5nLXRvcD0iMnB0Ij5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHU8L2ZvOmJsb2NrPg0KICAgICAgPGZvOmJsb2NrIGNvbG9yPSJ3aGl0ZSI+fDwvZm86YmxvY2s+DQogICAgICA8Zm86dGFibGU+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHU8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+ZURlc2s8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iZWdvbnA6UmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1W3RleHQoKT0nZURlc2snXSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBmb250LWZhbWlseT0iV2luZ2RpbmdzIj4mI3hGMEE0OzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDp3aGVuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTE7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNob29zZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPm9zb2JuZTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJlZ29ucDpSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVbdGV4dCgpPSdvc29ibmUnXSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBmb250LWZhbWlseT0iV2luZ2RpbmdzIj4mI3hGMEE0OzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDp3aGVuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTE7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNob29zZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPnBvxaF0b3U8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iZWdvbnA6UmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1W3RleHQoKT0ncG/FoXRvdSddIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTQ7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOndoZW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgZm9udC1mYW1pbHk9IldpbmdkaW5ncyI+JiN4RjBBMTs8L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5Lb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvc29ibmUgLyBwb8WhdG91PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlZ5c3R1cEtvbnRha3QiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRm9vdGVyIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOnRhYmxlPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpmb290ZXJMaW5rIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjFtbSI+UGV6aW5vayAtIG1lc3RvIHbDrW5hLCBoaXN0w7NyaWUgYSB1bWVuaWE8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgPC9mbzp0YWJsZT4NCiAgICA8L2ZvOmJsb2NrPg0KICA8L2ZvOmJsb2NrPg0KPC94c2w6dGVtcGxhdGU+DQoJDQogICAgICAgIDwveHNsOnN0eWxlc2hlZXQ+DQo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48TWFwcGluZ0RhdGE+PE4yRSAvPjwvTWFwcGluZ0RhdGE+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhRE9DVFlQRSB4c2w6c3R5bGVzaGVldCBbIDwhRU5USVRZIG5ic3AgIiYjeGEwOyI+XT4NCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiAgeG1sbnM6ZWdvbnA9Imh0dHA6Ly9zY2hlbWFzLmdvdi5zay9mb3JtLzAwMzA1MDIyLkE5OTk5OTk5LjAwMDAwMDA4MS5Eb3BsbmVuaWVQb2RhbmlhX1BPLzEuMyIgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImVnb25wIj4gDQo8eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiIGRvY3R5cGUtc3lzdGVtPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiIGRvY3R5cGUtcHVibGljPSItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgaW5kZW50PSJubyIgb21pdC14bWwtZGVjbGFyYXRpb249InllcyIvPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+DQo8aHRtbD4NCgk8aGVhZD4NCgk8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiIC8+DQoJPHRpdGxlPjAwMC5Eb3BsbmVuaWUgcG9kYW5pYSAtIFBPPC90aXRsZT4NCgk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIvPg0KCTxtZXRhIG5hbWU9Imxhbmd1YWdlIiBjb250ZW50PSJzay1TSyIgLz4NCgkJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvanF1ZXJ5LXVpLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU3R5bGVzL2pxdWVyeS5tdWx0aXNlbGVjdC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4NCgk8bGluayBocmVmPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1N0eWxlcy9qcXVlcnkubXVsdGlzZWxlY3QuZmlsdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU3R5bGVzL2Jhc2UuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvZWdvLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU3R5bGVzL3RyZWVzZWxlY3QuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvY2hvc2VudHJlZS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4NCgk8bGluayBocmVmPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1N0eWxlcy9wX3VwdnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2FuczozMDAsNDAwLDQwMGl0YWxpYyxib2xkLDYwMCZhbXA7c3Vic2V0PWxhdGluLGxhdGluLWV4dCIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9qcXVlcnktbWlncmF0ZS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9qcXVlcnkubWFzay5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CQ0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvanF1ZXJ5LXVpLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS5kYXRhVGFibGVzLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS11aS10aW1lcGlja2VyLWFkZG9uLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvanF1ZXJ5Lm11bHRpc2VsZWN0LmZpbHRlci5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9qcXVlcnkubXVsdGlzZWxlY3QubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvanF1ZXJ5LnZhbGlkYXRlLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS52YWxpZGF0ZS5jdXN0b21SdWxlcy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2Vnby5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS5mb3JtLnBsdWdpbnMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CQkJDQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9lZ28uc3RhdHVzRGlhbG9nLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvanF1ZXJ5LmNob3NlbnRyZWUuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9qcXVlcnkudHJlZXNlbGVjdC5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2ZpbGxlclNhdmVyLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvd3JhcHBlci5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL3BfdXB2cy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQl2YXIgcHJvamVjdFR5cGUgPSAnVVBWUyc7DQoJCQ0KCQkJCQk8eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+DQoJCQkJCS8qIDwhW0NEQVRBWyAqLw0KCQkNCgkJDQoJCQ0KCQkNCgkJZnVuY3Rpb24gR2V0RXh0ZXJuYWxSZXNvdXJjZUluZGV4KHJlc291cmNldHlwZSkgew0KICBzd2l0Y2ggKHJlc291cmNldHlwZSkgew0KICAgIGRlZmF1bHQ6DQogICAgICByZXR1cm4gbnVsbDsNCiAgfQ0KICByZXR1cm4gbnVsbDsNCn0NCmZ1bmN0aW9uIEdldEV4dGVybmFsUmVzb3VyY2UocmVzb3VyY2V0eXBlLCBpbmRleCkgew0KICBzd2l0Y2ggKHJlc291cmNldHlwZSkgew0KICAgIGRlZmF1bHQ6DQogICAgICByZXR1cm4gbnVsbDsNCiAgfQ0KICByZXR1cm4gbnVsbDsNCn0NCg0KCQlmdW5jdGlvbiBTZXREZWZhdWx0VmFsdWUoa2V5LCB2YWx1ZSkgew0KICBpZiAodmFsdWUgPT0gJycgfHwga2V5ID09ICcnKSB7DQogICAgcmV0dXJuOw0KCX0NCn0NCmZ1bmN0aW9uIEdldERlZmF1bHRWYWx1ZSgpIHsNCiAgdmFyIHJldFN0cmluZyA9ICcnOw0KICByZXR1cm4gcmV0U3RyaW5nOw0KfQ0KDQoJCQkJZnVuY3Rpb24gSW5pdENvbmRpdGlvbmFsUnVsZXMoY29udGV4dCwgc2lkKSB7DQoJCQlpZiAoc2lkID09IG51bGwpIHsNCg0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCX0NCgkJfQ0KCQkJCQkJDQoNCgkJdmFyIHZhbGlkYXRvck9iamVjdCA9IG51bGw7DQoJCQ0KCQlmdW5jdGlvbiBJbml0VmFsaWRhdGlvbigpIHsNCgkJCXZhbGlkYXRvck9iamVjdCA9ICQoIiNlRm9ybV9lR292XzAwX1BPIikudmFsaWRhdGUoew0KCQkJCQkJCWVycm9yTGFiZWxDb250YWluZXI6ICQoIiNlcnJvcnNDb250YWluZXIiKSwNCgkJCQl3cmFwcGVyOiAibGkiLA0KCQkJCW9ua2V5dXA6IGZhbHNlLA0KCQkJCW9uY2xpY2s6IGZhbHNlLA0KCQkgICAgICAgIGlnbm9yZTogIi5kaXNhYmxlVmFsaWRhdG9ycyIsDQoJCQkJCQkJCXJ1bGVzOiB7DQoJCQkgIAkJDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpaaWFkYXRlbFBPRGV0YWlsTmF6b3ZfQ29ycG9yYXRlQm9keUZ1bGxOYW1lIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsUE9EZXRhaWxQT0lDTyA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQoNClppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQpaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KWmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNCg0KWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCg0KWmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogNQ0KfSwNCg0KDQoNCg0KDQoNCg0KDQoNCg0KWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogNQ0KfSwNCg0KDQpEb3BuZW5pZVBvZGFuaWFJZCA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KRG9wbG5lbmllUG9kYW5pYVByZWRtZXQgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCkRvcGxuZW5pZVBvZGFuaWFQb3BpcyA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0NCgkJCSAgCX0sDQoJCQkJbWVzc2FnZXM6IHsJCQkNCgkJCSAgIAkJDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdUZWxlZsOzbm5lIMSNw61zbG8nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpaaWFkYXRlbFBPRGV0YWlsTmF6b3ZfQ29ycG9yYXRlQm9keUZ1bGxOYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ09iY2hvZG7DqSBtZW5vJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCg0KWmlhZGF0ZWxQT0RldGFpbFBPSUNPIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0nEjE8nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQoNClppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ01lbm8nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KWmlhZGF0ZWxQT1N0YXR1dGFyRnVua2NpYSA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdGdW5rY2lhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCg0KWmlhZGF0ZWxQT1N0YXR1dGFyUHJpZXp2aXNrb19GYW1pbHlOYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1ByaWV6dmlza28nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdVbGljYScgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnT2JlYycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNCg0KWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnU8O6cC7EjS4nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiAiTWF4aW3DoWxuYSBkxLrFvmthIHBvbG/Fvmt5ICdQU8SMJyBtdXPDrSBiecWlOiA1IHpuYWtvdiINCn0sDQoNCg0KDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSA6DQp7DQptYXhsZW5ndGg6ICJNYXhpbcOhbG5hIGTEusW+a2EgcG9sb8W+a3kgJ1BTxIwnIG11c8OtIGJ5xaU6IDUgem5ha292Ig0KfSwNCg0KDQpEb3BuZW5pZVBvZGFuaWFJZCA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdJZGVudGlmaWvDoXRvciBww7R2b2Ruw6lobyBwb2RhbmlhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCkRvcGxuZW5pZVBvZGFuaWFQcmVkbWV0IDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1ByZWRtZXQnIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KRG9wbG5lbmllUG9kYW5pYVBvcGlzIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1BvcGlzIHBvZGFuaWEnIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnxb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhLCB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqc1IHDDrXNtLiBhKSBhIMKnIDE0IHrDoWtvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlrDoWtvbiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbuKAnCksIHBvIHByZWRjaMOhZHphasO6Y29tIG9ib3puw6FtZW7DrSBzYSBzIGluZm9ybcOhY2lhbWkgcG9kxL5hIHVzdC4gMTkgWsOhay4gxI0uIDE4LzIwMTggWi4gei4gbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LCBvZG9zbGFuw61tIHRvaHRvIGVsZWt0cm9uaWNrw6lobyBmb3JtdWzDoXJhIGEgc2Ftb3N0YXRuw71tIHBvdHZyZGVuw61tIHYgdGVqdG8ga29sw7Nua2UsIHBvc2t5dHVqZSBNZXN0dSBQZXppbm9rLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCBuYSB0b210byBlbGVrdHJvbmlja29tIGZvcm11bMOhcmkgYSB2IGplaG8gcHLDrWxvaMOhY2guIMW9aWFkYXRlxL4gcG9za3l0dWplIHRpZXRvIMO6ZGFqZSB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbsOtKSBhIGplaiBuw6FzbGVkbsOpIHNwcmFjb3ZhbmllIHogem15c2xlIHrDoWtvbmEgYSBwcsOtc2x1xaFuw71jaCBuYXJpYWRlbsOtIHRhaywgYWtvIGplIHRvIHV2ZWRlbsOpIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSDDusSNZWx1IHNwcmFjw7p2YW5pYSB0b2h0byBwb2RhbmlhIGEgc8O6dmlzaWFjaWNoIMO6a29ub3YgdiB6bXlzbGUgcHJlZG1ldG5laiBsZWdpc2xhdMOtdnkuIMW9aWFkYXRlxL4gamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBrZWR5a2/EvnZlayBvZHZvbGHFpSBmb3Jtb3UgZWxla3Ryb25pY2vDqWhvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluw71tIHJlbGV2YW50bsO9bSBzcMO0c29ib20gcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw71tIG1lc3R1LicgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9CSAgCQ0KCQkJICAJfQ0KCQkJfSk7DQoJICAJfQ0KCS8qIF1dPiAqLw0KCQkJCQk8L3hzbDp0ZXh0Pg0KCQkJPC9zY3JpcHQ+DQoJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkJLmluZm9JY29uIHtkaXNwbGF5Om5vbmU7fQ0KLmxvZ28gaW1nIHt3aWR0aDo4NnB4OyBoZWlnaHQ6MTAwcHg7fQ0KLkxhYmVsQm9sZCBsYWJlbCB7Zm9udC13ZWlnaHQ6IGJvbGQ7fQ0KYm9keSB7Zm9udC1mYW1pbHk6IFZlcmRhbmE7Zm9udC1zaXplOiAxNnB4O30NCi5WZWNOYXpvdkZybSB7Zm9udC1zaXplOjI2cHg7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOiBjZW50ZXI7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9DQouSGVhZGVyTmF6b3ZfaW50ZXJuYWx7d2lkdGg6NTAwcHg7fS5aaWFkYXRlbFBPS29udGFrdEVtYWlsQWRyZXNhX2ludGVybmFse3dpZHRoOjIyMHB4O30uWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZV9pbnRlcm5hbHt3aWR0aDoyMDBweDt9LlppYWRhdGVsUE9EZXRhaWxQT0lDT19pbnRlcm5hbHt3aWR0aDoxMDBweDt9LlppYWRhdGVsUE9EZXRhaWxJQ0RQSF9pbnRlcm5hbHt3aWR0aDoxMDBweDt9LlppYWRhdGVsUE9EZXRhaWxESUNfaW50ZXJuYWx7d2lkdGg6MTAwcHg7fS5aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFse3dpZHRoOjYwcHg7fS5aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXhfaW50ZXJuYWx7d2lkdGg6NjBweDt9LlppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbHt3aWR0aDoxMTBweDt9LlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWx7d2lkdGg6MTEwcHg7fS5aaWFkYXRlbFBPQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3RfaW50ZXJuYWx7d2lkdGg6MTQwcHg7fS5aaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uX2ludGVybmFse3dpZHRoOjExMHB4O30uWmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5X2ludGVybmFse3dpZHRoOjExMHB4O30uWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeV9pbnRlcm5hbHt3aWR0aDoxMTBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbHt3aWR0aDoxMTBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdF9pbnRlcm5hbHt3aWR0aDoxNDBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWx7d2lkdGg6MTEwcHg7fS5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGVfaW50ZXJuYWx7d2lkdGg6NTBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWx7d2lkdGg6MTEwcHg7fS5Eb3BsbmVuaWVQb2RhbmlhUG9waXNfaW50ZXJuYWx7d2lkdGg6NzYwcHg7fS5Eb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWVfaW50ZXJuYWx7d2lkdGg6NzYwcHg7fS5Ob3RpZmlrYWNpZVphc2llbGFuaWVfaW50ZXJuYWx7d2lkdGg6ODBweDt9LlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdV9pbnRlcm5hbHt3aWR0aDo4MHB4O30uVnlzdHVwS29udGFrdF9pbnRlcm5hbHt3aWR0aDoyMzVweDt9DQoJPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KCTxub3NjcmlwdD48cCBjbGFzcz0ibm9zY3JpcHQiPlByZSBrb21wbGV0bsO6IGZ1bmvEjW5vc8WlIGFwbGlrw6FjaWUgamUgcG90cmVibsOpIHBvdm9sacWlIEphdmFTY3JpcHQ8L3A+PC9ub3NjcmlwdD4NCgk8ZGl2IGlkPSJlcnJvcnNDb250YWluZXJEaXYiIGNsYXNzPSJlcnJvcnNDb250YWluZXJEaXYiPiA8dWwgaWQ9ImVycm9yc0NvbnRhaW5lciIgY2xhc3M9ImVycm9yc0NvbnRhaW5lciI+PGxpLz48L3VsPiA8L2Rpdj4NCgk8Zm9ybSBpZD0iZUZvcm1fZUdvdl8wMF9QTyIgYWN0aW9uPSIiPg0KCQk8ZGl2IGlkPSJtYWluIiBjbGFzcz0ibGF5b3V0TWFpbiB1aS13aWRnZXQtY29udGVudCI+CQ0KCQkJCQkJIA0KCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9iZWMiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1NzY5IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYU9iZWMiIC8+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1NzY5IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzNzIiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MTIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNjIiIGNsYXNzPSJjZWxsICBsb2dvIiA+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW1nIHNyYz0iaHR0cDovL3d3dy5wZXppbm9rLnNrL3VwbG9hZGZpbGVzL0ltYWdlL29fbWVzdGUvZXJiLmdpZiIgYWx0PSIiIHRpdGxlPSIiLz48L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzczIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDo0ODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2MyIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCBib2R5IiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19Nc1UiICBzdHlsZT0id2lkdGg6NDgwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+TWVzdG8gUGV6aW5vazogTWVzdHNrw70gw7pyYWQgUGV6aW5vaywgUmFkbmnEjW7DqSBuw6FtZXN0aWUgNywgOTAyIDE0IFBlemlub2sgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX01zVSIgbmFtZT0iT2JlY19Nc1UiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMzQwIiAgYWx0PSIiIHZhbHVlPSJNZXN0c2vDvSDDunJhZCBQZXppbm9rLCBSYWRuacSNbsOpIG7DoW1lc3RpZSA3LCA5MDIgMTQgUGV6aW5vayIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfTXNVJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX01zVSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19Nc1UnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNjQiIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJPYmVjX1RlbGVmb24iICBzdHlsZT0id2lkdGg6NDgwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VGVsZWbDs246IDAzMy82OTAxIDExMyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj48aW5wdXQgaWQ9Ik9iZWNfVGVsZWZvbiIgbmFtZT0iT2JlY19UZWxlZm9uIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE1MCIgIGFsdD0iIiB2YWx1ZT0iMDMzLzY5MDEgMTEzIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19UZWxlZm9uJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX1RlbGVmb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ09iZWNfVGVsZWZvbiddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2NSIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfV2ViIiAgc3R5bGU9IndpZHRoOjQ4MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPldFQjogd3d3LnBlemlub2suc2sgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX1dlYiIgbmFtZT0iT2JlY19XZWIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSJ3d3cucGV6aW5vay5zayIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfV2ViJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX1dlYiddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19XZWInXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM3NCIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNjciIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJPYmVjX0lDTyIgIHN0eWxlPSJ3aWR0aDoyMjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5JxIxPOiAwMDMwNTAyMiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj48aW5wdXQgaWQ9Ik9iZWNfSUNPIiBuYW1lPSJPYmVjX0lDTyIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMDAiICBhbHQ9IiIgdmFsdWU9IjAwMzA1MDIyIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19JQ08nXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ09iZWNfSUNPJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdPYmVjX0lDTyddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2OCIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfRElDIiAgc3R5bGU9IndpZHRoOjIyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPkRJxIw6IDIwMjA2NjIyMjYgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0RJQyIgbmFtZT0iT2JlY19ESUMiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgYWx0PSIiIHZhbHVlPSIyMDIwNjYyMjI2IiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19ESUMnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ09iZWNfRElDJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdPYmVjX0RJQyddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2NiIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfRW1haWwiICBzdHlsZT0id2lkdGg6MjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+RS1tYWlsOiBpbmZvcm1hY2llQG1zdXBlemlub2suc2sgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0VtYWlsIiBuYW1lPSJPYmVjX0VtYWlsIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgIGFsdD0iIiB2YWx1ZT0iaW5mb3JtYWNpZUBtc3VwZXppbm9rLnNrIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19FbWFpbCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19FbWFpbCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19FbWFpbCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYUhlYWRlciI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzEiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgIG5vY2FwdGlvbiAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhSGVhZGVyIiAvPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3MSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzc2IiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDcxIiBjbGFzcz0iY2VsbCAgVmVjTmF6b3ZGcm0iID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiAgIHN0eWxlPSJ3aWR0aDo4NTBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Eb3BsbmVuaWUgcG9kYW5pYSAtIFBPIDwveHNsOnRleHQ+ICA8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keSI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzIiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgIE5lem9icmF6b3ZhdEluZm9Ja29udVJlbW90ZUxvb2t1cCAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5IiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0ixb1pYWRhdGXEviAtIFByw6F2bmlja8OhIG9zb2JhIC8gUG9kbmlrYXRlxL4iPsW9aWFkYXRlxL4gLSBQcsOhdm5pY2vDoSBvc29iYSAvIFBvZG5pa2F0ZcS+CQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3MiIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzc3IiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDc2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJIA0KCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1Nzc0IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keSIgLz4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3NzQiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM4MCIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDo0MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA3NyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5PYmNob2Ruw6kgbWVubyA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjIwMCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9iY2hvZG7DqSBtZW5vIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNzgiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlBsYXRjYSBEUEggPC94c2w6dGV4dD4gIDxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5WeWJlcnRlIGplZG51IHogbW/Fvm5vc3TDrS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj48L3NwYW4+PGZpZWxkc2V0PjxsZWdlbmQ+PC9sZWdlbmQ+PGRpdiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIj48c3Bhbj48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCAiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9IsOBbm8iIHZhbHVlPSLDgW5vIiAgID48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5aaWFkYXRlbFBPRGV0YWlsUGxhdGNhRFBIPC94c2w6YXR0cmlidXRlPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgnXT0nJiMxOTM7bm8nIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iWmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSCIgY2xhc3M9Im9wdGlvbkxhYmVsIj7DgW5vPC9sYWJlbD48L3NwYW4+PHNwYW4+PGlucHV0IGlkPSJaaWFkYXRlbFBPRGV0YWlsUGxhdGNhRFBIUG9zdGZpeExpc3QxIiBuYW1lPSJaaWFkYXRlbFBPRGV0YWlsUGxhdGNhRFBIIiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJOaWUiIHZhbHVlPSJOaWUiICAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEg8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSCddPSdOaWUnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iWmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSFBvc3RmaXhMaXN0MSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5OaWU8L2xhYmVsPjwvc3Bhbj48L2Rpdj48L2ZpZWxkc2V0PgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM4MSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNzkiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9EZXRhaWxQT0lDTyIgIHN0eWxlPSJ3aWR0aDo2MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPknEjE8gPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPRGV0YWlsUE9JQ08iIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQT0lDTyIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPRGV0YWlsUE9JQ09faW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMDAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9EZXRhaWxQT0lDTyddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbFBPSUNPJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRGV0YWlsUE9JQ08nXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJJxIxPIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODAiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9EZXRhaWxJQ0RQSCIgIHN0eWxlPSJ3aWR0aDo2MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPknEjCBEUEggPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxJQ0RQSCIgbmFtZT0iWmlhZGF0ZWxQT0RldGFpbElDRFBIIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9EZXRhaWxJQ0RQSF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbElDRFBIJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRGV0YWlsSUNEUEgnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9EZXRhaWxJQ0RQSCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIknEjCBEUEgiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzgyIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoxODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4MSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RldGFpbERJQyIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPkRJxIwgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxESUMiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxESUMiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0RldGFpbERJQ19pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbERJQyddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbERJQyddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbERJQyddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIkRJxIwiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4OCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1Nzc2IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJBZHJlc2EgLSBTw61kbG8gLyBNaWVzdG8gcG9kbmlrYW5pYSI+QWRyZXNhIC0gU8OtZGxvIC8gTWllc3RvIHBvZG5pa2FuaWEJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1Nzc2IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODUiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnkiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7FoHTDoXQgPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5IiB0eXBlPSJ0ZXh0IiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnknXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsWgdMOhdCIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5MCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+T2JlYyA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2JlYyIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODkiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lIiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VWxpY2EgPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVWxpY2EiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzg2IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5NCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+S3JhaiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb24iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbiddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLcmFqIiBob2Rub3R1IGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5MyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+xIxhc8WlIG9iY2UgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE0MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMYXPFpSBvYmNlIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTIiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+U8O6cC7EjS4gPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXJfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSI1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXInXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlPDunAuxI0uIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM4NyIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjgwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTciIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHkiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Pa3JlcyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2tyZXMiIGhvZG5vdHUgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTYiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlBTxIwgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSIgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI1IiBzaXplPSI1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlBTxIwiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5NSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9yLsSNLiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0FkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iNTAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPci7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5OCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1Nzc3IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJBZHJlc2EgcHJlIGRvcnXEjWVuaWUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBBZHJlc2EgLSBTw61kbG8gLyBNaWVzdG8gcG9kbmlrYW5pYSkiPkFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIEFkcmVzYSAtIFPDrWRsbyAvIE1pZXN0byBwb2RuaWthbmlhKQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3NzciIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM4OCIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDoyOTBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwMCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPsWgdMOhdCA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixaB0w6F0IiBob2Rub3R1IGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQpJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoQ0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlcklnbm9yZUNhc2VTZW5zaXRpdmUiIHR5cGU9ImNoZWNrYm94IiB0aXRsZT0iSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6EiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTAxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5PYmVjIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiB0eXBlPSJ0ZXh0IiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9iZWMiIGhvZG5vdHUgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQpJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoQ0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlcklnbm9yZUNhc2VTZW5zaXRpdmUiIHR5cGU9ImNoZWNrYm94IiB0aXRsZT0iSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6EiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDk5IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlVsaWNhIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVWxpY2EiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzg5IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwNCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+S3JhaiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLcmFqIiBob2Rub3R1IGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwMiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+xIxhc8WlIG9iY2UgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE0MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMYXPFpSBvYmNlIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMDMiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+U8O6cC7EjS4gPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXInXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiU8O6cC7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzkwIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwNyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9rcmVzIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPa3JlcyIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwNiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+UFPEjCA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjUiIHNpemU9IjUwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUFPEjCIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTA1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+T3IuxI0uIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXJfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSI1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9yLsSNLiIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCQkJPGRpdiBpZD0icmVwZXRpdGlvbkNvbW1hbmRzbGF5b3V0Um93MTU3NzciIGNsYXNzPSJzZWN0aW9uUGFnZXIiPg0KCQkJCQkJPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpICE9IGxhc3QoKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0ic3R5bGUiPjx4c2w6dGV4dD5kaXNwbGF5Om5vbmU7PC94c2w6dGV4dD48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+DQoJCQkJCQkJCTxzcGFuIGlkPSJhZGRTZWN0aW9ubGF5b3V0Um93MTU3NzciIGNsYXNzPSJidXR0b24gYWRkUmVtb3ZlU2VjdGlvbiIgb25jbGljaz0iYWRkU2VjdGlvbigwLCAxLCB0aGlzKSIgdGl0bGU9IlByaWRhxaUgc2VrY2l1IEFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIEFkcmVzYSAtIFPDrWRsbyAvIE1pZXN0byBwb2RuaWthbmlhKSI+UHJpZGHFpTwvc3Bhbj4NCgkJCQk8c3BhbiBpZD0icmVtb3ZlU2VjdGlvbmxheW91dFJvdzE1Nzc3IiBjbGFzcz0iYnV0dG9uIGFkZFJlbW92ZVNlY3Rpb24iIG9uY2xpY2s9InJlbW92ZVNlY3Rpb24oMCwgdGhpcykiIHRpdGxlPSJPZG9icmHFpSBzZWtjaXUgQWRyZXNhIHByZSBkb3J1xI1lbmllICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gQWRyZXNhIC0gU8OtZGxvIC8gTWllc3RvIHBvZG5pa2FuaWEpIj5PZG9icmHFpTwvc3Bhbj4JDQoJCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQ0KCQk8eHNsOmlmIHRlc3Q9Im5vcm1hbGl6ZS1zcGFjZSgvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MpID0gJyciPg0KCQkJCQkJPHhzbDppZiB0ZXN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvQG5vdEluRm9ybURhdGEiPg0KCQkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7IGluaXRSZXBldGl0aW9uU2VjdGlvbigwLCAxLCAnbGF5b3V0Um93MTU3NzcnKSB9KTwvc2NyaXB0Pg0KCQkJCQk8L3hzbDppZj4NCgkJCQkgICAgPC94c2w6aWY+DQoJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4MiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlciI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzUiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJDQoJCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSAiblJvd3NsYXlvdXRSb3cxNTc3NSIgc2VsZWN0PSJwb3NpdGlvbigpIi8+DQoJCTx4c2w6YXR0cmlidXRlIG5hbWU9ImlkIj5sYXlvdXRSb3cxNTc3NTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSA+IDEiPjx4c2w6dGV4dD5fUmVwZWF0aW5nXzwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InBvc2l0aW9uKCktMSIvPjwveHNsOmlmPjwveHNsOmF0dHJpYnV0ZT4NCgkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpID4gMSI+PHhzbDp0ZXh0PiByZXBlYXRpbmdTZWN0aW9uPC94c2w6dGV4dD48L3hzbDppZj48L3hzbDphdHRyaWJ1dGU+DQoJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT1N0YXR1dGFyX1N0YWtlaG9sZGVyIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iT3Byw6F2bmVuw6Egb3NvYmEiPk9wcsOhdm5lbsOhIG9zb2JhCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3NSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzgzIiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjQwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDg1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlRpdHVsIHByZWQgbWVub20gPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ0ZXh0IiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlRpdHVsIHByZWQgbWVub20iIGhvZG5vdHUgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODMiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lIiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk1lbm8gPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPU3RhdHV0YXJNZW5vX0dpdmVuTmFtZSIgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPU3RhdHV0YXJNZW5vX0dpdmVuTmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiTWVubyIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDg0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPkZ1bmtjaWEgPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIiBuYW1lPSJaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT1N0YXR1dGFyRnVua2NpYSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT1N0YXR1dGFyRnVua2NpYSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT1N0YXR1dGFyRnVua2NpYSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIkZ1bmtjaWEiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzg0IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDo0MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4NyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlRpdHVsIHphIG1lbm9tIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ0ZXh0IiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeF9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlRpdHVsIHphIG1lbm9tIiBob2Rub3R1IGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjM8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4NiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT1N0YXR1dGFyUHJpZXp2aXNrb19GYW1pbHlOYW1lIiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlByaWV6dmlza28gPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPU3RhdHV0YXJQcmllenZpc2tvX0ZhbWlseU5hbWUiIG5hbWU9IlppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT1N0YXR1dGFyUHJpZXp2aXNrb19GYW1pbHlOYW1lJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPU3RhdHV0YXJQcmllenZpc2tvX0ZhbWlseU5hbWUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQcmllenZpc2tvIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJCQk8ZGl2IGlkPSJyZXBldGl0aW9uQ29tbWFuZHNsYXlvdXRSb3cxNTc3NSIgY2xhc3M9InNlY3Rpb25QYWdlciI+DQoJCQkJCQk8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCkgIT0gbGFzdCgpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdHlsZSI+PHhzbDp0ZXh0PmRpc3BsYXk6bm9uZTs8L3hzbDp0ZXh0PjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj4NCgkJCQkJCQkJPHNwYW4gaWQ9ImFkZFNlY3Rpb25sYXlvdXRSb3cxNTc3NSIgY2xhc3M9ImJ1dHRvbiBhZGRSZW1vdmVTZWN0aW9uIiBvbmNsaWNrPSJhZGRTZWN0aW9uKDEsIDEwLCB0aGlzKSIgdGl0bGU9IlByaWRhxaUgc2VrY2l1IE9wcsOhdm5lbsOhIG9zb2JhIj5QcmlkYcWlPC9zcGFuPg0KCQkJCTxzcGFuIGlkPSJyZW1vdmVTZWN0aW9ubGF5b3V0Um93MTU3NzUiIGNsYXNzPSJidXR0b24gYWRkUmVtb3ZlU2VjdGlvbiIgb25jbGljaz0icmVtb3ZlU2VjdGlvbigxLCB0aGlzKSIgdGl0bGU9Ik9kb2JyYcWlIHNla2NpdSBPcHLDoXZuZW7DoSBvc29iYSI+T2RvYnJhxaU8L3NwYW4+CQ0KCQkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkNCgkJPHhzbDppZiB0ZXN0PSJub3JtYWxpemUtc3BhY2UoLi9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPU3RhdHV0YXJfU3Rha2Vob2xkZXIpID0gJyciPg0KCQkJCQkJPHhzbDppZiB0ZXN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlci9Abm90SW5Gb3JtRGF0YSI+DQoJCQkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsgaW5pdFJlcGV0aXRpb25TZWN0aW9uKDEsIDEwLCAnbGF5b3V0Um93MTU3NzUnKSB9KTwvc2NyaXB0Pg0KCQkJCQk8L3hzbDppZj4NCgkJCQkgICAgPC94c2w6aWY+DQoJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA3MyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0tvbnRha3QiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1NzczIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT0tvbnRha3QiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJLb250YWt0Ij5Lb250YWt0CQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3MyIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzc4IiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjQwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDc0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VGVsZWbDs25uZSDEjcOtc2xvIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiBuYW1lPSJaaWFkYXRlbFBPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVGVsZWbDs25uZSDEjcOtc2xvIiBob2Rub3R1LCBvZHBvcsO6xI1hbWUgdiBtZWR6aW7DoXJvZG5vbSB0dmFyZSArNDIxeHh4Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM3OSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NDAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNzUiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2EiICBzdHlsZT0id2lkdGg6MTIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+RS1tYWlsb3bDoSBhZHJlc2EgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2EiIG5hbWU9IlppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2EiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0tvbnRha3RFbWFpbEFkcmVzYV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjIyMCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0tvbnRha3RFbWFpbEFkcmVzYSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0tvbnRha3RFbWFpbEFkcmVzYSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0tvbnRha3RFbWFpbEFkcmVzYSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIkUtbWFpbG92w6EgYWRyZXNhIiBob2Rub3R1IHYgdHZhcmUgbWVub0Bkb23DqW5hLjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFEb3BuZW5pZVBvZGFuaWEiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1Nzc4IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhRG9wbmVuaWVQb2RhbmlhIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iRG9wbG5lbmllIHBvZGFuaWEiPkRvcGxuZW5pZSBwb2RhbmlhCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3OCIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzkxIiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjgwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTA5IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJEb3BuZW5pZVBvZGFuaWFJZCIgIHN0eWxlPSJ3aWR0aDoyMDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5JZGVudGlmaWvDoXRvciBww7R2b2Ruw6lobyBwb2RhbmlhIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iRG9wbmVuaWVQb2RhbmlhSWQiIG5hbWU9IkRvcG5lbmllUG9kYW5pYUlkIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnRG9wbmVuaWVQb2RhbmlhSWQnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ0RvcG5lbmllUG9kYW5pYUlkJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdEb3BuZW5pZVBvZGFuaWFJZCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIklkZW50aWZpa8OhdG9yIHDDtHZvZG7DqWhvIHBvZGFuaSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTEwIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJEb3BsbmVuaWVQb2RhbmlhUHJlZG1ldCIgIHN0eWxlPSJ3aWR0aDoyMDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5QcmVkbWV0IDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iRG9wbG5lbmllUG9kYW5pYVByZWRtZXQiIG5hbWU9IkRvcGxuZW5pZVBvZGFuaWFQcmVkbWV0IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnRG9wbG5lbmllUG9kYW5pYVByZWRtZXQnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ0RvcGxuZW5pZVBvZGFuaWFQcmVkbWV0J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdEb3BsbmVuaWVQb2RhbmlhUHJlZG1ldCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlByZWRtZXQiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDExMSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iRG9wbG5lbmllUG9kYW5pYVBvcGlzIiAgc3R5bGU9IndpZHRoOjIwMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlBvcGlzIHBvZGFuaWEgPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PHRleHRhcmVhIGlkPSJEb3BsbmVuaWVQb2RhbmlhUG9waXMiIG5hbWU9IkRvcGxuZW5pZVBvZGFuaWFQb3BpcyIgdGl0bGU9IiIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEFyZWEgRG9wbG5lbmllUG9kYW5pYVBvcGlzX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiAgY29scz0iMTAwIiByb3dzPSIzIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ0RvcGxuZW5pZVBvZGFuaWFQb3BpcyddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmNob29zZT48eHNsOndoZW4gdGVzdD0iLi8qW25hbWUoKSA9ICdEb3BsbmVuaWVQb2RhbmlhUG9waXMnXSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnRG9wbG5lbmllUG9kYW5pYVBvcGlzJ10iLz48L3hzbDp3aGVuPjx4c2w6b3RoZXJ3aXNlPjx4c2w6dGV4dD48L3hzbDp0ZXh0PjwveHNsOm90aGVyd2lzZT48L3hzbDpjaG9vc2U+PC90ZXh0YXJlYT48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUG9waXMgcG9kYW5pYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTEyIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWUiICBzdHlsZT0id2lkdGg6MjAwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+T2TDtHZvZG5lbmllIHBvZGFuaWEgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48dGV4dGFyZWEgaWQ9IkRvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZSIgbmFtZT0iRG9wbG5lbmllUG9kYW5pYU9kb3ZvZG5lbmllIiB0aXRsZT0iIiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0QXJlYSBEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWVfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiICBjb2xzPSIxMDAiIHJvd3M9IjMiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnRG9wbG5lbmllUG9kYW5pYU9kb3ZvZG5lbmllJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6Y2hvb3NlPjx4c2w6d2hlbiB0ZXN0PSIuLypbbmFtZSgpID0gJ0RvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZSddIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWUnXSIvPjwveHNsOndoZW4+PHhzbDpvdGhlcndpc2U+PHhzbDp0ZXh0PjwveHNsOnRleHQ+PC94c2w6b3RoZXJ3aXNlPjwveHNsOmNob29zZT48L3RleHRhcmVhPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPZMO0dm9kbmVuaWUgcG9kYW5pYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92Ij4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc3OSIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYU9jaHJhbmFPc29ibnljaFVkYWpvdiIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9Ik9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3YiPk9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3YJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1Nzc5IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzOTIiIGNsYXNzPSJjb2x1bW4gZmlyc3QiID4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMTQiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGlucHV0IGlkPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIG5hbWU9Ik9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyIgdGl0bGU9IiIgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJ4c2RfYm9vbGVhbiBjaGVja0JveCAiIHZhbHVlPSLFvWlhZGF0ZcS+IGFrbyBkb3RrbnV0w6Egb3NvYmEsIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpzUgcMOtc20uIGEpIGEgwqcgMTQgesOha29uYSDEjS4gMTgvMjAxOCBaLiB6LiDigJMg4oCeWsOha29uIG8gb2NocmFuZSBvc29ibsO9Y2ggw7pkYWpvdiBhIG8gem1lbmUgYSBkb3BsbmVuw60gbmlla3RvcsO9Y2ggesOha29ub3YgKMSPYWxlaiBsZW4g4oCeesOha29u4oCcKSwgcG8gcHJlZGNow6FkemFqw7pjb20gb2Jvem7DoW1lbsOtIHNhIHMgaW5mb3Jtw6FjaWFtaSBwb2TEvmEgdXN0LiAxOSBaw6FrLiDEjS4gMTgvMjAxOCBaLiB6LiBuYSBzdHLDoW5rZSBlbGVrdHJvbmlja2VqIHNsdcW+YnkgeiBrdG9yZWogYm9sIHRlbnRvIGZvcm11bMOhciBvdHZvcmVuw70sIG9kb3NsYW7DrW0gdG9odG8gZWxla3Ryb25pY2vDqWhvIGZvcm11bMOhcmEgYSBzYW1vc3RhdG7DvW0gcG90dnJkZW7DrW0gdiB0ZWp0byBrb2zDs25rZSwgcG9za3l0dWplIE1lc3R1IFBlemlub2ssIGFrbyBwcmV2w6FkemtvdmF0ZcS+b3ZpLCBzw7pobGFzIHNvIHNwcmFjb3ZhbsOtbSBvc29ibsO9Y2ggw7pkYWpvdiB1dmVkZW7DvWNoIG5hIHRvbXRvIGVsZWt0cm9uaWNrb20gZm9ybXVsw6FyaSBhIHYgamVobyBwcsOtbG9ow6FjaC4gxb1pYWRhdGXEviBwb3NreXR1amUgdGlldG8gw7pkYWplIHphIMO6xI1lbG9tIGJlenBlxI1uZWogYSB6w6FtZW51IHZ5bHXEjXVqw7pjZWogaWRlbnRpZmlrw6FjaWUgZG90a251dGVqIG9zb2J5IHYgcHJlZG1ldG5laiDFvmlhZG9zdGkgKHBvZGFuw60pIGEgamVqIG7DoXNsZWRuw6kgc3ByYWNvdmFuaWUgeiB6bXlzbGUgesOha29uYSBhIHByw61zbHXFoW7DvWNoIG5hcmlhZGVuw60gdGFrLCBha28gamUgdG8gdXZlZGVuw6kgbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LiBEb2JhIHBsYXRub3N0aSBzw7pobGFzdSBzYSB2aWHFvmUgbmEgZG9idSB0cnZhbmlhIMO6xI1lbHUgc3ByYWPDunZhbmlhIHRvaHRvIHBvZGFuaWEgYSBzw7p2aXNpYWNpY2ggw7prb25vdiB2IHpteXNsZSBwcmVkbWV0bmVqIGxlZ2lzbGF0w612eS4gxb1pYWRhdGXEviBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIGtlZHlrb8S+dmVrIG9kdm9sYcWlIGZvcm1vdSBlbGVrdHJvbmlja8OpaG8gcG9kYW5pYSBWxaFlb2JlY25laiBhZ2VuZHkgbWVzdGEgYWxlYm8gaW7DvW0gcmVsZXZhbnRuw71tIHNww7Rzb2JvbSBwcmV1a8OhemF0ZcS+bmUgZG9ydcSNZW7DvW0gbWVzdHUuIiBhbHQ9IiIgICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMnXT0nMSciPjx4c2w6YXR0cmlidXRlIG5hbWU9ImNoZWNrZWQiPmNoZWNrZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48bGFiZWwgZm9yPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIGNsYXNzPSJjaGVja0JveExhYmVsIj7FvWlhZGF0ZcS+IGFrbyBkb3RrbnV0w6Egb3NvYmEsIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpzUgcMOtc20uIGEpIGEgwqcgMTQgesOha29uYSDEjS4gMTgvMjAxOCBaLiB6LiDigJMg4oCeWsOha29uIG8gb2NocmFuZSBvc29ibsO9Y2ggw7pkYWpvdiBhIG8gem1lbmUgYSBkb3BsbmVuw60gbmlla3RvcsO9Y2ggesOha29ub3YgKMSPYWxlaiBsZW4g4oCeesOha29u4oCcKSwgcG8gcHJlZGNow6FkemFqw7pjb20gb2Jvem7DoW1lbsOtIHNhIHMgaW5mb3Jtw6FjaWFtaSBwb2TEvmEgdXN0LiAxOSBaw6FrLiDEjS4gMTgvMjAxOCBaLiB6LiBuYSBzdHLDoW5rZSBlbGVrdHJvbmlja2VqIHNsdcW+YnkgeiBrdG9yZWogYm9sIHRlbnRvIGZvcm11bMOhciBvdHZvcmVuw70sIG9kb3NsYW7DrW0gdG9odG8gZWxla3Ryb25pY2vDqWhvIGZvcm11bMOhcmEgYSBzYW1vc3RhdG7DvW0gcG90dnJkZW7DrW0gdiB0ZWp0byBrb2zDs25rZSwgcG9za3l0dWplIE1lc3R1IFBlemlub2ssIGFrbyBwcmV2w6FkemtvdmF0ZcS+b3ZpLCBzw7pobGFzIHNvIHNwcmFjb3ZhbsOtbSBvc29ibsO9Y2ggw7pkYWpvdiB1dmVkZW7DvWNoIG5hIHRvbXRvIGVsZWt0cm9uaWNrb20gZm9ybXVsw6FyaSBhIHYgamVobyBwcsOtbG9ow6FjaC4gxb1pYWRhdGXEviBwb3NreXR1amUgdGlldG8gw7pkYWplIHphIMO6xI1lbG9tIGJlenBlxI1uZWogYSB6w6FtZW51IHZ5bHXEjXVqw7pjZWogaWRlbnRpZmlrw6FjaWUgZG90a251dGVqIG9zb2J5IHYgcHJlZG1ldG5laiDFvmlhZG9zdGkgKHBvZGFuw60pIGEgamVqIG7DoXNsZWRuw6kgc3ByYWNvdmFuaWUgeiB6bXlzbGUgesOha29uYSBhIHByw61zbHXFoW7DvWNoIG5hcmlhZGVuw60gdGFrLCBha28gamUgdG8gdXZlZGVuw6kgbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LiBEb2JhIHBsYXRub3N0aSBzw7pobGFzdSBzYSB2aWHFvmUgbmEgZG9idSB0cnZhbmlhIMO6xI1lbHUgc3ByYWPDunZhbmlhIHRvaHRvIHBvZGFuaWEgYSBzw7p2aXNpYWNpY2ggw7prb25vdiB2IHpteXNsZSBwcmVkbWV0bmVqIGxlZ2lzbGF0w612eS4gxb1pYWRhdGXEviBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIGtlZHlrb8S+dmVrIG9kdm9sYcWlIGZvcm1vdSBlbGVrdHJvbmlja8OpaG8gcG9kYW5pYSBWxaFlb2JlY25laiBhZ2VuZHkgbWVzdGEgYWxlYm8gaW7DvW0gcmVsZXZhbnRuw71tIHNww7Rzb2JvbSBwcmV1a8OhemF0ZcS+bmUgZG9ydcSNZW7DvW0gbWVzdHUuPC9sYWJlbD48YnIgLz4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFOb3RpZmlrYWNpZSI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3ODAiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFOb3RpZmlrYWNpZSIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9Ik5vdGlmaWvDoWNpZSI+Tm90aWZpa8OhY2llCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc4MCIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzkzIiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjMyMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTE2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiAgIHN0eWxlPSJ3aWR0aDoyMTBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7FvWVsw6F0ZSBzaSB6YXNpZWxhbmllIHVwb3pvcm5lbsOtID8gPC94c2w6dGV4dD4gIDxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5WeWJlcnRlIGplZG51IHogbW/Fvm5vc3TDrS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj48L3NwYW4+PGZpZWxkc2V0PjxsZWdlbmQ+PC9sZWdlbmQ+PGRpdiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgTm90aWZpa2FjaWVaYXNpZWxhbmllX2ludGVybmFsIj48c3Bhbj48aW5wdXQgaWQ9Ik5vdGlmaWthY2llWmFzaWVsYW5pZSIgbmFtZT0iTm90aWZpa2FjaWVaYXNpZWxhbmllIiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgTm90aWZpa2FjaWVaYXNpZWxhbmllX2ludGVybmFsIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJuaWUiIHZhbHVlPSJuaWUiICAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPk5vdGlmaWthY2llWmFzaWVsYW5pZTwveHNsOmF0dHJpYnV0ZT48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdOb3RpZmlrYWNpZVphc2llbGFuaWUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ05vdGlmaWthY2llWmFzaWVsYW5pZSddPSduaWUnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iTm90aWZpa2FjaWVaYXNpZWxhbmllIiBjbGFzcz0ib3B0aW9uTGFiZWwiPm5pZTwvbGFiZWw+PC9zcGFuPjxzcGFuPjxpbnB1dCBpZD0iTm90aWZpa2FjaWVaYXNpZWxhbmllUG9zdGZpeExpc3QxIiBuYW1lPSJOb3RpZmlrYWNpZVphc2llbGFuaWUiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBOb3RpZmlrYWNpZVphc2llbGFuaWVfaW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9ImVEZXNrIiB2YWx1ZT0iZURlc2siICAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPk5vdGlmaWthY2llWmFzaWVsYW5pZTwveHNsOmF0dHJpYnV0ZT48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdOb3RpZmlrYWNpZVphc2llbGFuaWUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ05vdGlmaWthY2llWmFzaWVsYW5pZSddPSdlRGVzayciPjx4c2w6YXR0cmlidXRlIG5hbWU9ImNoZWNrZWQiPmNoZWNrZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48bGFiZWwgZm9yPSJOb3RpZmlrYWNpZVphc2llbGFuaWVQb3N0Zml4TGlzdDEiIGNsYXNzPSJvcHRpb25MYWJlbCI+ZURlc2s8L2xhYmVsPjwvc3Bhbj48L2Rpdj48L2ZpZWxkc2V0PgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFWeXN0dXAiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1NzgxIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhVnlzdHVwIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iU3DDtHNvYiBkb3J1xI1lbmlhIHbDvXN0dXB1Ij5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHUJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1NzgxIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzOTQiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MzIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMTgiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjIxMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlNww7Rzb2IgZG9ydcSNZW5pYSB2w71zdHVwdSA8L3hzbDp0ZXh0PiAgPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlZ5YmVydGUgamVkbnUgeiBtb8W+bm9zdMOtLjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pjwvc3Bhbj48ZmllbGRzZXQ+PGxlZ2VuZD48L2xlZ2VuZD48ZGl2IGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVfaW50ZXJuYWwiPjxzcGFuPjxpbnB1dCBpZD0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1IiBuYW1lPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVfaW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9ImVEZXNrIiB2YWx1ZT0iZURlc2siICAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdTwveHNsOmF0dHJpYnV0ZT48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1JhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSddPSdlRGVzayciPjx4c2w6YXR0cmlidXRlIG5hbWU9ImNoZWNrZWQiPmNoZWNrZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48bGFiZWwgZm9yPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIGNsYXNzPSJvcHRpb25MYWJlbCI+ZURlc2s8L2xhYmVsPjwvc3Bhbj48c3Bhbj48aW5wdXQgaWQ9IlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVBvc3RmaXhMaXN0MSIgbmFtZT0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1IiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1X2ludGVybmFsIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJvc29ibmUiIHZhbHVlPSJvc29ibmUiICAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdTwveHNsOmF0dHJpYnV0ZT48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1JhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSddPSdvc29ibmUnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1UG9zdGZpeExpc3QxIiBjbGFzcz0ib3B0aW9uTGFiZWwiPm9zb2JuZTwvbGFiZWw+PC9zcGFuPjxzcGFuPjxpbnB1dCBpZD0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1UG9zdGZpeExpc3QyIiBuYW1lPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVfaW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9InBvxaF0b3UiIHZhbHVlPSJwb8WhdG91IiAgID48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5SYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHU8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUnXT0ncG/FoXRvdSciPjx4c2w6YXR0cmlidXRlIG5hbWU9ImNoZWNrZWQiPmNoZWNrZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48bGFiZWwgZm9yPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVQb3N0Zml4TGlzdDIiIGNsYXNzPSJvcHRpb25MYWJlbCI+cG/FoXRvdTwvbGFiZWw+PC9zcGFuPjwvZGl2PjwvZmllbGRzZXQ+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzk1IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDo1NjBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDExOSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iVnlzdHVwS29udGFrdCIgIHN0eWxlPSJ3aWR0aDoyNTVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Lb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvc29ibmUgLyBwb8WhdG91IDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJWeXN0dXBLb250YWt0IiBuYW1lPSJWeXN0dXBLb250YWt0IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFZ5c3R1cEtvbnRha3RfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIyMzUiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1Z5c3R1cEtvbnRha3QnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1Z5c3R1cEtvbnRha3QnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1Z5c3R1cEtvbnRha3QnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvcyIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRm9vdGVyIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc4MiIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgbm9jYXB0aW9uICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFGb290ZXIiIC8+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1NzgyIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzOTYiIGNsYXNzPSJjb2x1bW4gZmlyc3QiID4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMjEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGEgaHJlZj0iaHR0cDovL3d3dy5wZXppbm9rLnNrIiBjbGFzcz0ieHNkX3N0cmluZyBoeXBlckxpbmsgIiB0YXJnZXQ9Il9ibGFuayIgPkNvcHlyaWdodCDCqSAyMDE4LCBNZXN0byBQZXppbm9rIC0gVsWhZXRreSBwcsOhdmEgdnlocmFkZW7DqTwvYT4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTIyIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiAgIHN0eWxlPSJ3aWR0aDo0MDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5QZXppbm9rIC0gbWVzdG8gdsOtbmEsIGhpc3TDs3JpZSBhIHVtZW5pYSA8L3hzbDp0ZXh0PiAgPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkNCgkJCTxkaXYgaWQ9ImJ1dHRvbnNQbGFjZWhvbGRlciI+DQoJCQkJCQkJCQk8aW5wdXQgaWQ9InZhbGlkYXRlRm9ybSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiIHZhbHVlPSJTa29udHJvbG92YcWlIiBhbHQ9IlNrb250cm9sb3ZhxaUiIGFjY2Vzc2tleT0iUyIgLz4NCgkJCQkJCQkJCQk8aW5wdXQgaWQ9ImNsZWFyRm9ybSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiIHZhbHVlPSJWecSNaXN0aSIgIGFsdD0iVnnEjWlzdGkiIGFjY2Vzc2tleT0iViIgLz4NCgkJCQkJPGlucHV0IGlkPSJsb2FkRm9ybVhtbCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiIHZhbHVlPSJOYcSNw610YcWlIiAgYWx0PSJOYcSNw610YcWlIiBhY2Nlc3NrZXk9Ik4iIC8+DQoJCQkJCTxpbnB1dCBpZD0ic2F2ZVRvWG1sIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSIgdmFsdWU9IlVsb8W+acWlIiAgYWx0PSJVbG/FvmnFpSIgYWNjZXNza2V5PSJVIiAvPg0KCQkJCQkJCQkJPGlucHV0IGlkPSJjYW5jZWxGb3JtIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSIgdmFsdWU9IlpydcWhacWlIiAgYWx0PSJacnXFoWnFpSIgYWNjZXNza2V5PSJaIiAvPgkJCQ0KCQkJPC9kaXY+CQkNCgkJPC9kaXY+DQoJCTxkaXYgaWQ9InN0YXR1c0RpYWxvZyIgdGl0bGU9IlN0YXR1cyI+DQoJCQk8aW1nIGlkPSJzdGF0dXNMb2FkZXIiIHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9JbWFnZXMvYWpheC1sb2FkZXIucG5nIiBhbHQ9IsSMYWthanRlIHByb3PDrW0iIC8+DQoJCQk8cCBpZD0ic3RhdHVzTWVzc2FnZSIgY2xhc3M9InN0YXR1c01lc3NhZ2UiPjwvcD4NCgkJPC9kaXY+DQoJCTxkaXYgaWQ9InNhdmVkRm9ybXNDb250YWluZXIiIGNsYXNzPSJsYXlvdXRNYWluIHVpLXdpZGdldC1jb250ZW50IiBzdHlsZT0iZGlzcGxheTpub25lIj4NCgkJICA8ZGl2IGlkPSJzYXZlZEZvcm1zQ29udGFpbmVyUm93IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiICB0aXRsZT0iIiA+DQoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJCYXNpYyIgLz4NCgkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQoJCQkgIDxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJVbG/FvmVuw6kgZm9ybXVsw6FyZSI+VWxvxb5lbsOpIGZvcm11bMOhcmU8L2Rpdj4NCgkJCSAgPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj4NCgkJCTwvZGl2Pg0KCQkJPGRpdiBpZD0ibGF5b3V0Um93U2F2ZWRGb3JtcyIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJICA8ZGl2IGlkPSJsY29sdW1uU2F2ZWRGb3JtcyIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgPg0KCQkJCTxkaXYgaWQ9ImxjZWxsU2F2ZWRGb3JtcyIgY2xhc3M9ImNlbGwiPiAgICAgICAgICAJCQkJICANCgkJCQk8L2Rpdj4JCQkJDQoJCQkgIDwvZGl2Pg0KCQkJICA8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQkJPC9kaXY+DQoJCSAgPC9kaXY+DQoJCTwvZGl2Pg0KCQk8ZGl2IGlkPSJtdGRfZm9ybU1ldGFEYXRhIiBzdHlsZT0iZGlzcGxheTpub25lIj48c3BhbiBpZD0ibXRkX3ZlcnNpb24iPjEuMzwvc3Bhbj48c3BhbiBpZD0ibXRkX2lkcCI+MTM3Mjwvc3Bhbj48c3BhbiBpZD0ibXRkX25hbWVzcGFjZSI+aHR0cDovL3NjaGVtYXMuZ292LnNrL2Zvcm0vMDAzMDUwMjIuQTk5OTk5OTkuMDAwMDAwMDgxLkRvcGxuZW5pZVBvZGFuaWFfUE8vMS4zPC9zcGFuPjwvZGl2Pg0KCTwvZm9ybT4NCjwvYm9keT4NCjwvaHRtbD4NCjwveHNsOnRlbXBsYXRlPg0KPC94c2w6c3R5bGVzaGVldD4NCg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhRE9DVFlQRSB4c2w6c3R5bGVzaGVldCBbIDwhRU5USVRZIG5ic3AgIiYjeGEwOyI+XT4NCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiAgeG1sbnM6ZWdvbnA9Imh0dHA6Ly9zY2hlbWFzLmdvdi5zay9mb3JtLzAwMzA1MDIyLkE5OTk5OTk5LjAwMDAwMDA4MS5Eb3BsbmVuaWVQb2RhbmlhX1BPLzEuMyIgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImVnb25wIj4gDQo8eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiIGRvY3R5cGUtc3lzdGVtPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiIGRvY3R5cGUtcHVibGljPSItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgaW5kZW50PSJubyIgb21pdC14bWwtZGVjbGFyYXRpb249InllcyIvPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+DQo8aHRtbD4NCgk8aGVhZD4NCgk8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiIC8+DQoJPHRpdGxlPjAwMC5Eb3BsbmVuaWUgcG9kYW5pYSAtIFBPPC90aXRsZT4NCgk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIvPg0KCTxtZXRhIG5hbWU9Imxhbmd1YWdlIiBjb250ZW50PSJzay1TSyIgLz4NCgkJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvanF1ZXJ5LXVpLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU3R5bGVzL2pxdWVyeS5tdWx0aXNlbGVjdC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4NCgk8bGluayBocmVmPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1N0eWxlcy9qcXVlcnkubXVsdGlzZWxlY3QuZmlsdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU3R5bGVzL2Jhc2UuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvZWdvLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU3R5bGVzL3RyZWVzZWxlY3QuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvY2hvc2VudHJlZS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4NCgk8bGluayBocmVmPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1N0eWxlcy9wX3VwdnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2FuczozMDAsNDAwLDQwMGl0YWxpYyxib2xkLDYwMCZhbXA7c3Vic2V0PWxhdGluLGxhdGluLWV4dCIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9qcXVlcnktbWlncmF0ZS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9qcXVlcnkubWFzay5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CQ0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvanF1ZXJ5LXVpLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS5kYXRhVGFibGVzLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS11aS10aW1lcGlja2VyLWFkZG9uLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvanF1ZXJ5Lm11bHRpc2VsZWN0LmZpbHRlci5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9qcXVlcnkubXVsdGlzZWxlY3QubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvanF1ZXJ5LnZhbGlkYXRlLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS52YWxpZGF0ZS5jdXN0b21SdWxlcy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2Vnby5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2pxdWVyeS5mb3JtLnBsdWdpbnMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CQkJDQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9lZ28uc3RhdHVzRGlhbG9nLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvanF1ZXJ5LmNob3NlbnRyZWUuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU2NyaXB0cy9qcXVlcnkudHJlZXNlbGVjdC5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL2ZpbGxlclNhdmVyLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1NjcmlwdHMvd3JhcHBlci5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TY3JpcHRzL3BfdXB2cy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQl2YXIgcHJvamVjdFR5cGUgPSAnVVBWUyc7DQoJCQ0KCQkJCQk8eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+DQoJCQkJCQkJCSQoZnVuY3Rpb24gKCl7DQoJCQkJICAkKCJ0ZXh0YXJlYSIpLmVhY2goZnVuY3Rpb24gKCkgew0KCQkJCSAgIHRoaXMuc3R5bGUuaGVpZ2h0ID0gKHRoaXMuc2Nyb2xsSGVpZ2h0KSsncHgnOw0KCQkJCSAgfSk7DQoJCQkJfSk7DQoJCQkJCS8qIDwhW0NEQVRBWyAqLw0KCQkNCgkJDQoJCQ0KCQkNCgkJZnVuY3Rpb24gR2V0RXh0ZXJuYWxSZXNvdXJjZUluZGV4KHJlc291cmNldHlwZSkgew0KICBzd2l0Y2ggKHJlc291cmNldHlwZSkgew0KICAgIGRlZmF1bHQ6DQogICAgICByZXR1cm4gbnVsbDsNCiAgfQ0KICByZXR1cm4gbnVsbDsNCn0NCmZ1bmN0aW9uIEdldEV4dGVybmFsUmVzb3VyY2UocmVzb3VyY2V0eXBlLCBpbmRleCkgew0KICBzd2l0Y2ggKHJlc291cmNldHlwZSkgew0KICAgIGRlZmF1bHQ6DQogICAgICByZXR1cm4gbnVsbDsNCiAgfQ0KICByZXR1cm4gbnVsbDsNCn0NCg0KCQlmdW5jdGlvbiBTZXREZWZhdWx0VmFsdWUoa2V5LCB2YWx1ZSkgew0KICBpZiAodmFsdWUgPT0gJycgfHwga2V5ID09ICcnKSB7DQogICAgcmV0dXJuOw0KCX0NCn0NCmZ1bmN0aW9uIEdldERlZmF1bHRWYWx1ZSgpIHsNCiAgdmFyIHJldFN0cmluZyA9ICcnOw0KICByZXR1cm4gcmV0U3RyaW5nOw0KfQ0KDQoJCQkJZnVuY3Rpb24gSW5pdENvbmRpdGlvbmFsUnVsZXMoY29udGV4dCwgc2lkKSB7DQoJCQlpZiAoc2lkID09IG51bGwpIHsNCg0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCX0NCgkJfQ0KCQkJCQkJDQoNCgkJdmFyIHZhbGlkYXRvck9iamVjdCA9IG51bGw7DQoJCQ0KCQlmdW5jdGlvbiBJbml0VmFsaWRhdGlvbigpIHsNCgkJCXZhbGlkYXRvck9iamVjdCA9ICQoIiNlRm9ybV9lR292XzAwX1BPIikudmFsaWRhdGUoew0KCQkJCQkJCWVycm9yTGFiZWxDb250YWluZXI6ICQoIiNlcnJvcnNDb250YWluZXIiKSwNCgkJCQl3cmFwcGVyOiAibGkiLA0KCQkJCW9ua2V5dXA6IGZhbHNlLA0KCQkJCW9uY2xpY2s6IGZhbHNlLA0KCQkgICAgICAgIGlnbm9yZTogIi5kaXNhYmxlVmFsaWRhdG9ycyIsDQoJCQkJCQkJCXJ1bGVzOiB7DQoJCQkgIAkJDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpaaWFkYXRlbFBPRGV0YWlsTmF6b3ZfQ29ycG9yYXRlQm9keUZ1bGxOYW1lIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsUE9EZXRhaWxQT0lDTyA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQoNClppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQpaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KWmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNCg0KWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCg0KWmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogNQ0KfSwNCg0KDQoNCg0KDQoNCg0KDQoNCg0KWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogNQ0KfSwNCg0KDQpEb3BuZW5pZVBvZGFuaWFJZCA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KRG9wbG5lbmllUG9kYW5pYVByZWRtZXQgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCkRvcGxuZW5pZVBvZGFuaWFQb3BpcyA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0NCgkJCSAgCX0sDQoJCQkJbWVzc2FnZXM6IHsJCQkNCgkJCSAgIAkJDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdUZWxlZsOzbm5lIMSNw61zbG8nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpaaWFkYXRlbFBPRGV0YWlsTmF6b3ZfQ29ycG9yYXRlQm9keUZ1bGxOYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ09iY2hvZG7DqSBtZW5vJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCg0KWmlhZGF0ZWxQT0RldGFpbFBPSUNPIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0nEjE8nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQoNClppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ01lbm8nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KWmlhZGF0ZWxQT1N0YXR1dGFyRnVua2NpYSA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdGdW5rY2lhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCg0KWmlhZGF0ZWxQT1N0YXR1dGFyUHJpZXp2aXNrb19GYW1pbHlOYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1ByaWV6dmlza28nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdVbGljYScgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnT2JlYycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNCg0KWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnU8O6cC7EjS4nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiAiTWF4aW3DoWxuYSBkxLrFvmthIHBvbG/Fvmt5ICdQU8SMJyBtdXPDrSBiecWlOiA1IHpuYWtvdiINCn0sDQoNCg0KDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSA6DQp7DQptYXhsZW5ndGg6ICJNYXhpbcOhbG5hIGTEusW+a2EgcG9sb8W+a3kgJ1BTxIwnIG11c8OtIGJ5xaU6IDUgem5ha292Ig0KfSwNCg0KDQpEb3BuZW5pZVBvZGFuaWFJZCA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdJZGVudGlmaWvDoXRvciBww7R2b2Ruw6lobyBwb2RhbmlhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCkRvcGxuZW5pZVBvZGFuaWFQcmVkbWV0IDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1ByZWRtZXQnIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KRG9wbG5lbmllUG9kYW5pYVBvcGlzIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1BvcGlzIHBvZGFuaWEnIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnxb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhLCB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqc1IHDDrXNtLiBhKSBhIMKnIDE0IHrDoWtvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlrDoWtvbiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbuKAnCksIHBvIHByZWRjaMOhZHphasO6Y29tIG9ib3puw6FtZW7DrSBzYSBzIGluZm9ybcOhY2lhbWkgcG9kxL5hIHVzdC4gMTkgWsOhay4gxI0uIDE4LzIwMTggWi4gei4gbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LCBvZG9zbGFuw61tIHRvaHRvIGVsZWt0cm9uaWNrw6lobyBmb3JtdWzDoXJhIGEgc2Ftb3N0YXRuw71tIHBvdHZyZGVuw61tIHYgdGVqdG8ga29sw7Nua2UsIHBvc2t5dHVqZSBNZXN0dSBQZXppbm9rLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCBuYSB0b210byBlbGVrdHJvbmlja29tIGZvcm11bMOhcmkgYSB2IGplaG8gcHLDrWxvaMOhY2guIMW9aWFkYXRlxL4gcG9za3l0dWplIHRpZXRvIMO6ZGFqZSB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbsOtKSBhIGplaiBuw6FzbGVkbsOpIHNwcmFjb3ZhbmllIHogem15c2xlIHrDoWtvbmEgYSBwcsOtc2x1xaFuw71jaCBuYXJpYWRlbsOtIHRhaywgYWtvIGplIHRvIHV2ZWRlbsOpIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSDDusSNZWx1IHNwcmFjw7p2YW5pYSB0b2h0byBwb2RhbmlhIGEgc8O6dmlzaWFjaWNoIMO6a29ub3YgdiB6bXlzbGUgcHJlZG1ldG5laiBsZWdpc2xhdMOtdnkuIMW9aWFkYXRlxL4gamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBrZWR5a2/EvnZlayBvZHZvbGHFpSBmb3Jtb3UgZWxla3Ryb25pY2vDqWhvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluw71tIHJlbGV2YW50bsO9bSBzcMO0c29ib20gcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw71tIG1lc3R1LicgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9CSAgCQ0KCQkJICAJfQ0KCQkJfSk7DQoJICAJfQ0KCS8qIF1dPiAqLw0KCQkJCQk8L3hzbDp0ZXh0Pg0KCQkJPC9zY3JpcHQ+DQoJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkJLmluZm9JY29uIHtkaXNwbGF5Om5vbmU7fQ0KLmxvZ28gaW1nIHt3aWR0aDo4NnB4OyBoZWlnaHQ6MTAwcHg7fQ0KLkxhYmVsQm9sZCBsYWJlbCB7Zm9udC13ZWlnaHQ6IGJvbGQ7fQ0KYm9keSB7Zm9udC1mYW1pbHk6IFZlcmRhbmE7Zm9udC1zaXplOiAxNnB4O30NCi5WZWNOYXpvdkZybSB7Zm9udC1zaXplOjI2cHg7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOiBjZW50ZXI7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9DQouSGVhZGVyTmF6b3ZfaW50ZXJuYWx7d2lkdGg6NTAwcHg7fS5aaWFkYXRlbFBPS29udGFrdEVtYWlsQWRyZXNhX2ludGVybmFse3dpZHRoOjIyMHB4O30uWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZV9pbnRlcm5hbHt3aWR0aDoyMDBweDt9LlppYWRhdGVsUE9EZXRhaWxQT0lDT19pbnRlcm5hbHt3aWR0aDoxMDBweDt9LlppYWRhdGVsUE9EZXRhaWxJQ0RQSF9pbnRlcm5hbHt3aWR0aDoxMDBweDt9LlppYWRhdGVsUE9EZXRhaWxESUNfaW50ZXJuYWx7d2lkdGg6MTAwcHg7fS5aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFse3dpZHRoOjYwcHg7fS5aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXhfaW50ZXJuYWx7d2lkdGg6NjBweDt9LlppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbHt3aWR0aDoxMTBweDt9LlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWx7d2lkdGg6MTEwcHg7fS5aaWFkYXRlbFBPQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3RfaW50ZXJuYWx7d2lkdGg6MTQwcHg7fS5aaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uX2ludGVybmFse3dpZHRoOjExMHB4O30uWmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5X2ludGVybmFse3dpZHRoOjExMHB4O30uWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeV9pbnRlcm5hbHt3aWR0aDoxMTBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbHt3aWR0aDoxMTBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdF9pbnRlcm5hbHt3aWR0aDoxNDBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWx7d2lkdGg6MTEwcHg7fS5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGVfaW50ZXJuYWx7d2lkdGg6NTBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWx7d2lkdGg6MTEwcHg7fS5Eb3BsbmVuaWVQb2RhbmlhUG9waXNfaW50ZXJuYWx7d2lkdGg6NzYwcHg7fS5Eb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWVfaW50ZXJuYWx7d2lkdGg6NzYwcHg7fS5Ob3RpZmlrYWNpZVphc2llbGFuaWVfaW50ZXJuYWx7d2lkdGg6ODBweDt9LlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdV9pbnRlcm5hbHt3aWR0aDo4MHB4O30uVnlzdHVwS29udGFrdF9pbnRlcm5hbHt3aWR0aDoyMzVweDt9DQoJPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KCTxub3NjcmlwdD48cCBjbGFzcz0ibm9zY3JpcHQiPlByZSBrb21wbGV0bsO6IGZ1bmvEjW5vc8WlIGFwbGlrw6FjaWUgamUgcG90cmVibsOpIHBvdm9sacWlIEphdmFTY3JpcHQ8L3A+PC9ub3NjcmlwdD4NCgk8ZGl2IGlkPSJlcnJvcnNDb250YWluZXJEaXYiIGNsYXNzPSJlcnJvcnNDb250YWluZXJEaXYiPiA8dWwgaWQ9ImVycm9yc0NvbnRhaW5lciIgY2xhc3M9ImVycm9yc0NvbnRhaW5lciI+PGxpLz48L3VsPiA8L2Rpdj4NCgk8Zm9ybSBpZD0iZUZvcm1fZUdvdl8wMF9QTyIgYWN0aW9uPSIiPg0KCQk8ZGl2IGlkPSJtYWluIiBjbGFzcz0ibGF5b3V0TWFpbiB1aS13aWRnZXQtY29udGVudCI+CQ0KCQkJCQkJIA0KCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9iZWMiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1NzY5IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYU9iZWMiIC8+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1NzY5IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzNzIiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MTIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNjIiIGNsYXNzPSJjZWxsICBsb2dvIiA+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW1nIHNyYz0iaHR0cDovL3d3dy5wZXppbm9rLnNrL3VwbG9hZGZpbGVzL0ltYWdlL29fbWVzdGUvZXJiLmdpZiIgYWx0PSIiIHRpdGxlPSIiLz48L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzczIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDo0ODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2MyIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCBib2R5IiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19Nc1UiICBzdHlsZT0id2lkdGg6NDgwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+TWVzdG8gUGV6aW5vazogTWVzdHNrw70gw7pyYWQgUGV6aW5vaywgUmFkbmnEjW7DqSBuw6FtZXN0aWUgNywgOTAyIDE0IFBlemlub2sgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX01zVSIgbmFtZT0iT2JlY19Nc1UiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMzQwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSJNZXN0c2vDvSDDunJhZCBQZXppbm9rLCBSYWRuacSNbsOpIG7DoW1lc3RpZSA3LCA5MDIgMTQgUGV6aW5vayIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfTXNVJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX01zVSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19Nc1UnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNjQiIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJPYmVjX1RlbGVmb24iICBzdHlsZT0id2lkdGg6NDgwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VGVsZWbDs246IDAzMy82OTAxIDExMyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj48aW5wdXQgaWQ9Ik9iZWNfVGVsZWZvbiIgbmFtZT0iT2JlY19UZWxlZm9uIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE1MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iMDMzLzY5MDEgMTEzIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19UZWxlZm9uJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX1RlbGVmb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ09iZWNfVGVsZWZvbiddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2NSIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfV2ViIiAgc3R5bGU9IndpZHRoOjQ4MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPldFQjogd3d3LnBlemlub2suc2sgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX1dlYiIgbmFtZT0iT2JlY19XZWIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSJ3d3cucGV6aW5vay5zayIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfV2ViJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX1dlYiddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19XZWInXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM3NCIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNjciIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJPYmVjX0lDTyIgIHN0eWxlPSJ3aWR0aDoyMjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5JxIxPOiAwMDMwNTAyMiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj48aW5wdXQgaWQ9Ik9iZWNfSUNPIiBuYW1lPSJPYmVjX0lDTyIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMDAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IjAwMzA1MDIyIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19JQ08nXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ09iZWNfSUNPJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdPYmVjX0lDTyddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2OCIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfRElDIiAgc3R5bGU9IndpZHRoOjIyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPkRJxIw6IDIwMjA2NjIyMjYgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0RJQyIgbmFtZT0iT2JlY19ESUMiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIyMDIwNjYyMjI2IiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19ESUMnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ09iZWNfRElDJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdPYmVjX0RJQyddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2NiIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfRW1haWwiICBzdHlsZT0id2lkdGg6MjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+RS1tYWlsOiBpbmZvcm1hY2llQG1zdXBlemlub2suc2sgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0VtYWlsIiBuYW1lPSJPYmVjX0VtYWlsIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iaW5mb3JtYWNpZUBtc3VwZXppbm9rLnNrIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19FbWFpbCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19FbWFpbCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19FbWFpbCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYUhlYWRlciI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzEiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgIG5vY2FwdGlvbiAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhSGVhZGVyIiAvPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3MSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzc2IiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDcxIiBjbGFzcz0iY2VsbCAgVmVjTmF6b3ZGcm0iID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiAgIHN0eWxlPSJ3aWR0aDo4NTBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Eb3BsbmVuaWUgcG9kYW5pYSAtIFBPIDwveHNsOnRleHQ+ICA8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keSI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzIiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgIE5lem9icmF6b3ZhdEluZm9Ja29udVJlbW90ZUxvb2t1cCAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5IiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0ixb1pYWRhdGXEviAtIFByw6F2bmlja8OhIG9zb2JhIC8gUG9kbmlrYXRlxL4iPsW9aWFkYXRlxL4gLSBQcsOhdm5pY2vDoSBvc29iYSAvIFBvZG5pa2F0ZcS+CQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3MiIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzc3IiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDc2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJIA0KCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPRGV0YWlsX0NvcnBvcmF0ZUJvZHkiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1Nzc0IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keSIgLz4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3NzQiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM4MCIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDo0MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA3NyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5PYmNob2Ruw6kgbWVubyA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjIwMCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9iY2hvZG7DqSBtZW5vIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNzgiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlBsYXRjYSBEUEggPC94c2w6dGV4dD4gIDxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5WeWJlcnRlIGplZG51IHogbW/Fvm5vc3TDrS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj48L3NwYW4+PGZpZWxkc2V0PjxsZWdlbmQ+PC9sZWdlbmQ+PGRpdiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIj48c3Bhbj48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCAiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9IsOBbm8iIHZhbHVlPSLDgW5vIiAgIGRpc2FibGVkPSJkaXNhYmxlZCIgID48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5aaWFkYXRlbFBPRGV0YWlsUGxhdGNhRFBIPC94c2w6YXR0cmlidXRlPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgnXT0nJiMxOTM7bm8nIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iWmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSCIgY2xhc3M9Im9wdGlvbkxhYmVsIj7DgW5vPC9sYWJlbD48L3NwYW4+PHNwYW4+PGlucHV0IGlkPSJaaWFkYXRlbFBPRGV0YWlsUGxhdGNhRFBIUG9zdGZpeExpc3QxIiBuYW1lPSJaaWFkYXRlbFBPRGV0YWlsUGxhdGNhRFBIIiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJOaWUiIHZhbHVlPSJOaWUiICAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEg8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSCddPSdOaWUnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iWmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSFBvc3RmaXhMaXN0MSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5OaWU8L2xhYmVsPjwvc3Bhbj48L2Rpdj48L2ZpZWxkc2V0PgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM4MSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNzkiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9EZXRhaWxQT0lDTyIgIHN0eWxlPSJ3aWR0aDo2MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPknEjE8gPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPRGV0YWlsUE9JQ08iIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQT0lDTyIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPRGV0YWlsUE9JQ09faW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMDAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9EZXRhaWxQT0lDTyddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbFBPSUNPJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRGV0YWlsUE9JQ08nXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJJxIxPIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODAiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9EZXRhaWxJQ0RQSCIgIHN0eWxlPSJ3aWR0aDo2MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPknEjCBEUEggPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxJQ0RQSCIgbmFtZT0iWmlhZGF0ZWxQT0RldGFpbElDRFBIIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9EZXRhaWxJQ0RQSF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbElDRFBIJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRGV0YWlsSUNEUEgnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9EZXRhaWxJQ0RQSCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIknEjCBEUEgiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzgyIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoxODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4MSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RldGFpbERJQyIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPkRJxIwgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxESUMiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxESUMiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0RldGFpbERJQ19pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbERJQyddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbERJQyddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RldGFpbERJQyddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIkRJxIwiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4OCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1Nzc2IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJBZHJlc2EgLSBTw61kbG8gLyBNaWVzdG8gcG9kbmlrYW5pYSI+QWRyZXNhIC0gU8OtZGxvIC8gTWllc3RvIHBvZG5pa2FuaWEJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1Nzc2IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODUiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnkiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7FoHTDoXQgPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5IiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnknXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsWgdMOhdCIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDkwIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5PYmVjIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0idGV4dCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPYmVjIiBob2Rub3R1IGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4OSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYVVsaWNhX1N0cmVldE5hbWUiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5VbGljYSA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJVbGljYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODYiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjI4MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDk0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb24iICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5LcmFqIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uIiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbiIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb24nXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbiddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIktyYWoiIGhvZG5vdHUgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDkzIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiICBzdHlsZT0id2lkdGg6NjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7EjGFzxaUgb2JjZSA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0X2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTQwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixIxhc8WlIG9iY2UiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5MiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiICBzdHlsZT0id2lkdGg6NjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Tw7pwLsSNLiA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXInXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiU8O6cC7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzg3IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5NyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9rcmVzIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0idGV4dCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPa3JlcyIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDk2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5QU8SMIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUiIG5hbWU9IlppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGVfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNSIgc2l6ZT0iNTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQU8SMIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTUiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Pci7EjS4gPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIG5hbWU9IlppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0FkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT3IuxI0uIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTgiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkgDQoJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc3NyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iQWRyZXNhIHByZSBkb3J1xI1lbmllICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gQWRyZXNhIC0gU8OtZGxvIC8gTWllc3RvIHBvZG5pa2FuaWEpIj5BZHJlc2EgcHJlIGRvcnXEjWVuaWUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBBZHJlc2EgLSBTw61kbG8gLyBNaWVzdG8gcG9kbmlrYW5pYSkJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1Nzc3IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODgiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMDAiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7FoHTDoXQgPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5IiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnknXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsWgdMOhdCIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTAxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5PYmVjIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9iZWMiIGhvZG5vdHUgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDk5IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlVsaWNhIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVWxpY2EiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzg5IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwNCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+S3JhaiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0idGV4dCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLcmFqIiBob2Rub3R1IGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwMiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+xIxhc8WlIG9iY2UgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE0MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMYXPFpSBvYmNlIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMDMiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+U8O6cC7EjS4gPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXInXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiU8O6cC7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzkwIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwNyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9rcmVzIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0idGV4dCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPa3JlcyIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTA2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5QU8SMIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiIG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGVfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNSIgc2l6ZT0iNTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQU8SMIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMDUiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Pci7EjS4gPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT3IuxI0uIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJCQk8ZGl2IGlkPSJyZXBldGl0aW9uQ29tbWFuZHNsYXlvdXRSb3cxNTc3NyIgY2xhc3M9InNlY3Rpb25QYWdlciI+DQoJCQkJCQk8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCkgIT0gbGFzdCgpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdHlsZSI+PHhzbDp0ZXh0PmRpc3BsYXk6bm9uZTs8L3hzbDp0ZXh0PjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj4NCgkJCQkJCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQ0KCQk8eHNsOmlmIHRlc3Q9Im5vcm1hbGl6ZS1zcGFjZSgvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MpID0gJyciPg0KCQkJCQkJPHhzbDppZiB0ZXN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvQG5vdEluRm9ybURhdGEiPg0KCQkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7IGluaXRSZXBldGl0aW9uU2VjdGlvbigwLCAxLCAnbGF5b3V0Um93MTU3NzcnKSB9KTwvc2NyaXB0Pg0KCQkJCQk8L3hzbDppZj4NCgkJCQkgICAgPC94c2w6aWY+DQoJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4MiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlciI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzUiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJDQoJCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSAiblJvd3NsYXlvdXRSb3cxNTc3NSIgc2VsZWN0PSJwb3NpdGlvbigpIi8+DQoJCTx4c2w6YXR0cmlidXRlIG5hbWU9ImlkIj5sYXlvdXRSb3cxNTc3NTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSA+IDEiPjx4c2w6dGV4dD5fUmVwZWF0aW5nXzwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InBvc2l0aW9uKCktMSIvPjwveHNsOmlmPjwveHNsOmF0dHJpYnV0ZT4NCgkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpID4gMSI+PHhzbDp0ZXh0PiByZXBlYXRpbmdTZWN0aW9uPC94c2w6dGV4dD48L3hzbDppZj48L3hzbDphdHRyaWJ1dGU+DQoJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT1N0YXR1dGFyX1N0YWtlaG9sZGVyIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iT3Byw6F2bmVuw6Egb3NvYmEiPk9wcsOhdm5lbsOhIG9zb2JhCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3NSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzgzIiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjQwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDg1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlRpdHVsIHByZWQgbWVub20gPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlRpdHVsIHByZWQgbWVub20iIGhvZG5vdHUgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4MyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+TWVubyA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lIiBuYW1lPSJaaWFkYXRlbFBPU3RhdHV0YXJNZW5vX0dpdmVuTmFtZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPU3RhdHV0YXJNZW5vX0dpdmVuTmFtZSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJNZW5vIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODQiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9TdGF0dXRhckZ1bmtjaWEiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+RnVua2NpYSA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9TdGF0dXRhckZ1bmtjaWEiIG5hbWU9IlppYWRhdGVsUE9TdGF0dXRhckZ1bmtjaWEiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiRnVua2NpYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODQiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjQwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDg3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VGl0dWwgemEgbWVub20gPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIHR5cGU9InRleHQiICBkaXNhYmxlZD0iZGlzYWJsZWQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVGl0dWwgemEgbWVub20iIGhvZG5vdHUgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDg2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPU3RhdHV0YXJQcmllenZpc2tvX0ZhbWlseU5hbWUiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+UHJpZXp2aXNrbyA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZSIgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyUHJpZXp2aXNrb19GYW1pbHlOYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT1N0YXR1dGFyUHJpZXp2aXNrb19GYW1pbHlOYW1lJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPU3RhdHV0YXJQcmllenZpc2tvX0ZhbWlseU5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlByaWV6dmlza28iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQkJCTxkaXYgaWQ9InJlcGV0aXRpb25Db21tYW5kc2xheW91dFJvdzE1Nzc1IiBjbGFzcz0ic2VjdGlvblBhZ2VyIj4NCgkJCQkJCTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSAhPSBsYXN0KCkiPjx4c2w6YXR0cmlidXRlIG5hbWU9InN0eWxlIj48eHNsOnRleHQ+ZGlzcGxheTpub25lOzwveHNsOnRleHQ+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPg0KCQkJCQkJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJDQoJCTx4c2w6aWYgdGVzdD0ibm9ybWFsaXplLXNwYWNlKC4vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT1N0YXR1dGFyX1N0YWtlaG9sZGVyKSA9ICcnIj4NCgkJCQkJCTx4c2w6aWYgdGVzdD0iLi9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPU3RhdHV0YXJfU3Rha2Vob2xkZXIvQG5vdEluRm9ybURhdGEiPg0KCQkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7IGluaXRSZXBldGl0aW9uU2VjdGlvbigxLCAxMCwgJ2xheW91dFJvdzE1Nzc1JykgfSk8L3NjcmlwdD4NCgkJCQkJPC94c2w6aWY+DQoJCQkJICAgIDwveHNsOmlmPg0KCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNzMiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkgDQoJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9Lb250YWt0Ij4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc3MyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsUE9Lb250YWt0IiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iS29udGFrdCI+S29udGFrdAkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3NzMiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM3OCIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDo0MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA3NCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlRlbGVmw7NubmUgxI3DrXNsbyA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyIgbmFtZT0iWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbFBPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlRlbGVmw7NubmUgxI3DrXNsbyIgaG9kbm90dSwgb2Rwb3LDusSNYW1lIHYgbWVkemluw6Fyb2Rub20gdHZhcmUgKzQyMXh4eC48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzNzkiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjQwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDc1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPS29udGFrdEVtYWlsQWRyZXNhIiAgc3R5bGU9IndpZHRoOjEyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPkUtbWFpbG92w6EgYWRyZXNhIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPS29udGFrdEVtYWlsQWRyZXNhIiBuYW1lPSJaaWFkYXRlbFBPS29udGFrdEVtYWlsQWRyZXNhIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2FfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIyMjAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2EnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2EnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2EnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJFLW1haWxvdsOhIGFkcmVzYSIgaG9kbm90dSB2IHR2YXJlIG1lbm9AZG9tw6luYS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhRG9wbmVuaWVQb2RhbmlhIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc3OCIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYURvcG5lbmllUG9kYW5pYSIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IkRvcGxuZW5pZSBwb2RhbmlhIj5Eb3BsbmVuaWUgcG9kYW5pYQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3NzgiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM5MSIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDo4MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwOSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iRG9wbmVuaWVQb2RhbmlhSWQiICBzdHlsZT0id2lkdGg6MjAwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+SWRlbnRpZmlrw6F0b3IgcMO0dm9kbsOpaG8gcG9kYW5pYSA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IkRvcG5lbmllUG9kYW5pYUlkIiBuYW1lPSJEb3BuZW5pZVBvZGFuaWFJZCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ0RvcG5lbmllUG9kYW5pYUlkJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdEb3BuZW5pZVBvZGFuaWFJZCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnRG9wbmVuaWVQb2RhbmlhSWQnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJJZGVudGlmaWvDoXRvciBww7R2b2Ruw6lobyBwb2RhbmkiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDExMCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iRG9wbG5lbmllUG9kYW5pYVByZWRtZXQiICBzdHlsZT0id2lkdGg6MjAwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+UHJlZG1ldCA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IkRvcGxuZW5pZVBvZGFuaWFQcmVkbWV0IiBuYW1lPSJEb3BsbmVuaWVQb2RhbmlhUHJlZG1ldCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ0RvcGxuZW5pZVBvZGFuaWFQcmVkbWV0J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdEb3BsbmVuaWVQb2RhbmlhUHJlZG1ldCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnRG9wbG5lbmllUG9kYW5pYVByZWRtZXQnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQcmVkbWV0IiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMTEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IkRvcGxuZW5pZVBvZGFuaWFQb3BpcyIgIHN0eWxlPSJ3aWR0aDoyMDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Qb3BpcyBwb2RhbmlhIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjx0ZXh0YXJlYSBpZD0iRG9wbG5lbmllUG9kYW5pYVBvcGlzIiBuYW1lPSJEb3BsbmVuaWVQb2RhbmlhUG9waXMiIHRpdGxlPSIiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRBcmVhIERvcGxuZW5pZVBvZGFuaWFQb3Bpc19pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgIGNvbHM9IjEwMCIgcm93cz0iMyIgIGRpc2FibGVkPSJkaXNhYmxlZCIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdEb3BsbmVuaWVQb2RhbmlhUG9waXMnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDpjaG9vc2U+PHhzbDp3aGVuIHRlc3Q9Ii4vKltuYW1lKCkgPSAnRG9wbG5lbmllUG9kYW5pYVBvcGlzJ10iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ0RvcGxuZW5pZVBvZGFuaWFQb3BpcyddIi8+PC94c2w6d2hlbj48eHNsOm90aGVyd2lzZT48eHNsOnRleHQ+PC94c2w6dGV4dD48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPjwvdGV4dGFyZWE+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlBvcGlzIHBvZGFuaWEiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDExMiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iRG9wbG5lbmllUG9kYW5pYU9kb3ZvZG5lbmllIiAgc3R5bGU9IndpZHRoOjIwMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9kw7R2b2RuZW5pZSBwb2RhbmlhIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PHRleHRhcmVhIGlkPSJEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWUiIG5hbWU9IkRvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZSIgdGl0bGU9IiIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEFyZWEgRG9wbG5lbmllUG9kYW5pYU9kb3ZvZG5lbmllX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiAgY29scz0iMTAwIiByb3dzPSIzIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ0RvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmNob29zZT48eHNsOndoZW4gdGVzdD0iLi8qW25hbWUoKSA9ICdEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWUnXSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnRG9wbG5lbmllUG9kYW5pYU9kb3ZvZG5lbmllJ10iLz48L3hzbDp3aGVuPjx4c2w6b3RoZXJ3aXNlPjx4c2w6dGV4dD48L3hzbDp0ZXh0PjwveHNsOm90aGVyd2lzZT48L3hzbDpjaG9vc2U+PC90ZXh0YXJlYT48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2TDtHZvZG5lbmllIHBvZGFuaWEiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYU9jaHJhbmFPc29ibnljaFVkYWpvdiI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzkiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJPY2hyYW5hIG9zb2Juw71jaCDDumRham92Ij5PY2hyYW5hIG9zb2Juw71jaCDDumRham92CQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3OSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzkyIiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTE0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxpbnB1dCBpZD0iT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzIiBuYW1lPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIHRpdGxlPSIiIHR5cGU9ImNoZWNrYm94IiBjbGFzcz0ieHNkX2Jvb2xlYW4gY2hlY2tCb3ggIiB2YWx1ZT0ixb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhLCB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqc1IHDDrXNtLiBhKSBhIMKnIDE0IHrDoWtvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlrDoWtvbiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbuKAnCksIHBvIHByZWRjaMOhZHphasO6Y29tIG9ib3puw6FtZW7DrSBzYSBzIGluZm9ybcOhY2lhbWkgcG9kxL5hIHVzdC4gMTkgWsOhay4gxI0uIDE4LzIwMTggWi4gei4gbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LCBvZG9zbGFuw61tIHRvaHRvIGVsZWt0cm9uaWNrw6lobyBmb3JtdWzDoXJhIGEgc2Ftb3N0YXRuw71tIHBvdHZyZGVuw61tIHYgdGVqdG8ga29sw7Nua2UsIHBvc2t5dHVqZSBNZXN0dSBQZXppbm9rLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCBuYSB0b210byBlbGVrdHJvbmlja29tIGZvcm11bMOhcmkgYSB2IGplaG8gcHLDrWxvaMOhY2guIMW9aWFkYXRlxL4gcG9za3l0dWplIHRpZXRvIMO6ZGFqZSB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbsOtKSBhIGplaiBuw6FzbGVkbsOpIHNwcmFjb3ZhbmllIHogem15c2xlIHrDoWtvbmEgYSBwcsOtc2x1xaFuw71jaCBuYXJpYWRlbsOtIHRhaywgYWtvIGplIHRvIHV2ZWRlbsOpIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSDDusSNZWx1IHNwcmFjw7p2YW5pYSB0b2h0byBwb2RhbmlhIGEgc8O6dmlzaWFjaWNoIMO6a29ub3YgdiB6bXlzbGUgcHJlZG1ldG5laiBsZWdpc2xhdMOtdnkuIMW9aWFkYXRlxL4gamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBrZWR5a2/EvnZlayBvZHZvbGHFpSBmb3Jtb3UgZWxla3Ryb25pY2vDqWhvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluw71tIHJlbGV2YW50bsO9bSBzcMO0c29ib20gcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw71tIG1lc3R1LiIgYWx0PSIiICBkaXNhYmxlZD0iZGlzYWJsZWQiICAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzJ109JzEnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzIiBjbGFzcz0iY2hlY2tCb3hMYWJlbCI+xb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhLCB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqc1IHDDrXNtLiBhKSBhIMKnIDE0IHrDoWtvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlrDoWtvbiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbuKAnCksIHBvIHByZWRjaMOhZHphasO6Y29tIG9ib3puw6FtZW7DrSBzYSBzIGluZm9ybcOhY2lhbWkgcG9kxL5hIHVzdC4gMTkgWsOhay4gxI0uIDE4LzIwMTggWi4gei4gbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LCBvZG9zbGFuw61tIHRvaHRvIGVsZWt0cm9uaWNrw6lobyBmb3JtdWzDoXJhIGEgc2Ftb3N0YXRuw71tIHBvdHZyZGVuw61tIHYgdGVqdG8ga29sw7Nua2UsIHBvc2t5dHVqZSBNZXN0dSBQZXppbm9rLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCBuYSB0b210byBlbGVrdHJvbmlja29tIGZvcm11bMOhcmkgYSB2IGplaG8gcHLDrWxvaMOhY2guIMW9aWFkYXRlxL4gcG9za3l0dWplIHRpZXRvIMO6ZGFqZSB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbsOtKSBhIGplaiBuw6FzbGVkbsOpIHNwcmFjb3ZhbmllIHogem15c2xlIHrDoWtvbmEgYSBwcsOtc2x1xaFuw71jaCBuYXJpYWRlbsOtIHRhaywgYWtvIGplIHRvIHV2ZWRlbsOpIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSDDusSNZWx1IHNwcmFjw7p2YW5pYSB0b2h0byBwb2RhbmlhIGEgc8O6dmlzaWFjaWNoIMO6a29ub3YgdiB6bXlzbGUgcHJlZG1ldG5laiBsZWdpc2xhdMOtdnkuIMW9aWFkYXRlxL4gamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBrZWR5a2/EvnZlayBvZHZvbGHFpSBmb3Jtb3UgZWxla3Ryb25pY2vDqWhvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluw71tIHJlbGV2YW50bsO9bSBzcMO0c29ib20gcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw71tIG1lc3R1LjwvbGFiZWw+PGJyIC8+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhTm90aWZpa2FjaWUiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1NzgwIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhTm90aWZpa2FjaWUiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJOb3RpZmlrw6FjaWUiPk5vdGlmaWvDoWNpZQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3ODAiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM5MyIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDozMjBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDExNiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgICBzdHlsZT0id2lkdGg6MjEwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+xb1lbMOhdGUgc2kgemFzaWVsYW5pZSB1cG96b3JuZW7DrSA/IDwveHNsOnRleHQ+ICA8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+VnliZXJ0ZSBqZWRudSB6IG1vxb5ub3N0w60uPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+PC9zcGFuPjxmaWVsZHNldD48bGVnZW5kPjwvbGVnZW5kPjxkaXYgY2xhc3M9InhzZF9zdHJpbmcgcmFkaW9CdXR0b25MaXN0IE5vdGlmaWthY2llWmFzaWVsYW5pZV9pbnRlcm5hbCI+PHNwYW4+PGlucHV0IGlkPSJOb3RpZmlrYWNpZVphc2llbGFuaWUiIG5hbWU9Ik5vdGlmaWthY2llWmFzaWVsYW5pZSIgY2xhc3M9InhzZF9zdHJpbmcgcmFkaW9CdXR0b25MaXN0IE5vdGlmaWthY2llWmFzaWVsYW5pZV9pbnRlcm5hbCIgdGl0bGU9IiIgdHlwZT0icmFkaW8iIGFsdD0ibmllIiB2YWx1ZT0ibmllIiAgIGRpc2FibGVkPSJkaXNhYmxlZCIgID48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5Ob3RpZmlrYWNpZVphc2llbGFuaWU8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnTm90aWZpa2FjaWVaYXNpZWxhbmllJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdOb3RpZmlrYWNpZVphc2llbGFuaWUnXT0nbmllJyI+PHhzbDphdHRyaWJ1dGUgbmFtZT0iY2hlY2tlZCI+Y2hlY2tlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxsYWJlbCBmb3I9Ik5vdGlmaWthY2llWmFzaWVsYW5pZSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5uaWU8L2xhYmVsPjwvc3Bhbj48c3Bhbj48aW5wdXQgaWQ9Ik5vdGlmaWthY2llWmFzaWVsYW5pZVBvc3RmaXhMaXN0MSIgbmFtZT0iTm90aWZpa2FjaWVaYXNpZWxhbmllIiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgTm90aWZpa2FjaWVaYXNpZWxhbmllX2ludGVybmFsIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJlRGVzayIgdmFsdWU9ImVEZXNrIiAgIGRpc2FibGVkPSJkaXNhYmxlZCIgID48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5Ob3RpZmlrYWNpZVphc2llbGFuaWU8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnTm90aWZpa2FjaWVaYXNpZWxhbmllJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdOb3RpZmlrYWNpZVphc2llbGFuaWUnXT0nZURlc2snIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iTm90aWZpa2FjaWVaYXNpZWxhbmllUG9zdGZpeExpc3QxIiBjbGFzcz0ib3B0aW9uTGFiZWwiPmVEZXNrPC9sYWJlbD48L3NwYW4+PC9kaXY+PC9maWVsZHNldD4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhVnlzdHVwIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc4MSIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVZ5c3R1cCIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IlNww7Rzb2IgZG9ydcSNZW5pYSB2w71zdHVwdSI+U3DDtHNvYiBkb3J1xI1lbmlhIHbDvXN0dXB1CQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc4MSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzk0IiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjMyMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTE4IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiAgIHN0eWxlPSJ3aWR0aDoyMTBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHUgPC94c2w6dGV4dD4gIDxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5WeWJlcnRlIGplZG51IHogbW/Fvm5vc3TDrS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj48L3NwYW4+PGZpZWxkc2V0PjxsZWdlbmQ+PC9sZWdlbmQ+PGRpdiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1X2ludGVybmFsIj48c3Bhbj48aW5wdXQgaWQ9IlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSIgbmFtZT0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1IiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1X2ludGVybmFsIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJlRGVzayIgdmFsdWU9ImVEZXNrIiAgIGRpc2FibGVkPSJkaXNhYmxlZCIgID48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5SYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHU8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUnXT0nZURlc2snIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1IiBjbGFzcz0ib3B0aW9uTGFiZWwiPmVEZXNrPC9sYWJlbD48L3NwYW4+PHNwYW4+PGlucHV0IGlkPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVQb3N0Zml4TGlzdDEiIG5hbWU9IlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSIgY2xhc3M9InhzZF9zdHJpbmcgcmFkaW9CdXR0b25MaXN0IFJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdV9pbnRlcm5hbCIgdGl0bGU9IiIgdHlwZT0icmFkaW8iIGFsdD0ib3NvYm5lIiB2YWx1ZT0ib3NvYm5lIiAgIGRpc2FibGVkPSJkaXNhYmxlZCIgID48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5SYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHU8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUnXT0nb3NvYm5lJyI+PHhzbDphdHRyaWJ1dGUgbmFtZT0iY2hlY2tlZCI+Y2hlY2tlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxsYWJlbCBmb3I9IlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVBvc3RmaXhMaXN0MSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5vc29ibmU8L2xhYmVsPjwvc3Bhbj48c3Bhbj48aW5wdXQgaWQ9IlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVBvc3RmaXhMaXN0MiIgbmFtZT0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1IiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1X2ludGVybmFsIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJwb8WhdG91IiB2YWx1ZT0icG/FoXRvdSIgICBkaXNhYmxlZD0iZGlzYWJsZWQiICA+PHhzbDphdHRyaWJ1dGUgbmFtZT0ibmFtZSI+UmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1PC94c2w6YXR0cmlidXRlPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1JhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1J109J3BvxaF0b3UnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1UG9zdGZpeExpc3QyIiBjbGFzcz0ib3B0aW9uTGFiZWwiPnBvxaF0b3U8L2xhYmVsPjwvc3Bhbj48L2Rpdj48L2ZpZWxkc2V0PgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM5NSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NTYwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMTkiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlZ5c3R1cEtvbnRha3QiICBzdHlsZT0id2lkdGg6MjU1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+S29udGFrdCB2IHByw61wYWRlIGRvcnXEjWVuaWEgb3NvYm5lIC8gcG/FoXRvdSA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iVnlzdHVwS29udGFrdCIgbmFtZT0iVnlzdHVwS29udGFrdCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBWeXN0dXBLb250YWt0X2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMjM1IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdWeXN0dXBLb250YWt0J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdWeXN0dXBLb250YWt0J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdWeXN0dXBLb250YWt0J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiS29udGFrdCB2IHByw61wYWRlIGRvcnXEjWVuaWEgb3MiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYUZvb3RlciI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3ODIiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgIG5vY2FwdGlvbiAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhRm9vdGVyIiAvPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc4MiIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzk2IiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTIxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxhIGhyZWY9Imh0dHA6Ly93d3cucGV6aW5vay5zayIgY2xhc3M9InhzZF9zdHJpbmcgaHlwZXJMaW5rICIgdGFyZ2V0PSJfYmxhbmsiID5Db3B5cmlnaHQgwqkgMjAxOCwgTWVzdG8gUGV6aW5vayAtIFbFoWV0a3kgcHLDoXZhIHZ5aHJhZGVuw6k8L2E+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEyMiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgICBzdHlsZT0id2lkdGg6NDAwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+UGV6aW5vayAtIG1lc3RvIHbDrW5hLCBoaXN0w7NyaWUgYSB1bWVuaWEgPC94c2w6dGV4dD4gIDwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJDQoJCQk8ZGl2IGlkPSJidXR0b25zUGxhY2Vob2xkZXIiPg0KCQkJCQkJCQk8aW5wdXQgaWQ9ImNhbmNlbEZvcm0iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5IiB2YWx1ZT0iWnJ1xaFpxaUiICBhbHQ9IlpydcWhacWlIiBhY2Nlc3NrZXk9IloiIC8+CQkJDQoJCQk8L2Rpdj4JCQ0KCQk8L2Rpdj4NCgkJPGRpdiBpZD0ic3RhdHVzRGlhbG9nIiB0aXRsZT0iU3RhdHVzIj4NCgkJCTxpbWcgaWQ9InN0YXR1c0xvYWRlciIgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L0ltYWdlcy9hamF4LWxvYWRlci5wbmciIGFsdD0ixIxha2FqdGUgcHJvc8OtbSIgLz4NCgkJCTxwIGlkPSJzdGF0dXNNZXNzYWdlIiBjbGFzcz0ic3RhdHVzTWVzc2FnZSI+PC9wPg0KCQk8L2Rpdj4NCgkJPGRpdiBpZD0ic2F2ZWRGb3Jtc0NvbnRhaW5lciIgY2xhc3M9ImxheW91dE1haW4gdWktd2lkZ2V0LWNvbnRlbnQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPg0KCQkgIDxkaXYgaWQ9InNhdmVkRm9ybXNDb250YWluZXJSb3ciIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgIHRpdGxlPSIiID4NCgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkJhc2ljIiAvPg0KCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCgkJCSAgPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IlVsb8W+ZW7DqSBmb3JtdWzDoXJlIj5VbG/FvmVuw6kgZm9ybXVsw6FyZTwvZGl2Pg0KCQkJICA8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPg0KCQkJPC9kaXY+DQoJCQk8ZGl2IGlkPSJsYXlvdXRSb3dTYXZlZEZvcm1zIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkgIDxkaXYgaWQ9Imxjb2x1bW5TYXZlZEZvcm1zIiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJPGRpdiBpZD0ibGNlbGxTYXZlZEZvcm1zIiBjbGFzcz0iY2VsbCI+ICAgICAgICAgIAkJCQkgIA0KCQkJCTwvZGl2PgkJCQkNCgkJCSAgPC9kaXY+DQoJCQkgIDxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCQk8L2Rpdj4NCgkJICA8L2Rpdj4NCgkJPC9kaXY+DQoJCTxkaXYgaWQ9Im10ZF9mb3JtTWV0YURhdGEiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzcGFuIGlkPSJtdGRfdmVyc2lvbiI+MS4zPC9zcGFuPjxzcGFuIGlkPSJtdGRfaWRwIj4xMzcyPC9zcGFuPjxzcGFuIGlkPSJtdGRfbmFtZXNwYWNlIj5odHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMwNTAyMi5BOTk5OTk5OS4wMDAwMDAwODEuRG9wbG5lbmllUG9kYW5pYV9QTy8xLjM8L3NwYW4+PC9kaXY+DQoJPC9mb3JtPg0KPC9ib2R5Pg0KPC9odG1sPg0KPC94c2w6dGVtcGxhdGU+DQo8L3hzbDpzdHlsZXNoZWV0Pg0K
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZUZvcm1fZUdvdl8wMF9QTyB4bWxucz0iaHR0cDovL3NjaGVtYXMuZ292LnNrL2Zvcm0vMDAzMDUwMjIuQTk5OTk5OTkuMDAwMDAwMDgxLkRvcGxuZW5pZVBvZGFuaWFfUE8vMS4zIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj48c2VrY2lhT2JlYz48T2JlY19Nc1U+TWVzdHNrw70gw7pyYWQgUGV6aW5vaywgUmFkbmnEjW7DqSBuw6FtZXN0aWUgNywgOTAyIDE0IFBlemlub2s8L09iZWNfTXNVPjxPYmVjX1RlbGVmb24+MDMzLzY5MDEgMTEzPC9PYmVjX1RlbGVmb24+PE9iZWNfV2ViPnd3dy5wZXppbm9rLnNrPC9PYmVjX1dlYj48T2JlY19JQ08+MDAzMDUwMjI8L09iZWNfSUNPPjxPYmVjX0RJQz4yMDIwNjYyMjI2PC9PYmVjX0RJQz48T2JlY19FbWFpbD5pbmZvcm1hY2llQG1zdXBlemlub2suc2s8L09iZWNfRW1haWw+PC9zZWtjaWFPYmVjPjxzZWtjaWFIZWFkZXI+PC9zZWtjaWFIZWFkZXI+PHNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keT48c2VrY2lhWmlhZGF0ZWxQT0RldGFpbF9Db3Jwb3JhdGVCb2R5PjxaaWFkYXRlbFBPRGV0YWlsTmF6b3ZfQ29ycG9yYXRlQm9keUZ1bGxOYW1lPjwvWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZT48WmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSD48L1ppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEg+PFppYWRhdGVsUE9EZXRhaWxQT0lDTz48L1ppYWRhdGVsUE9EZXRhaWxQT0lDTz48WmlhZGF0ZWxQT0RldGFpbElDRFBIPjwvWmlhZGF0ZWxQT0RldGFpbElDRFBIPjxaaWFkYXRlbFBPRGV0YWlsRElDPjwvWmlhZGF0ZWxQT0RldGFpbERJQz48L3Nla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keT48c2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3M+PFppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnk+PC9aaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5PjxaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk+PC9aaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk+PFppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lPjwvWmlhZGF0ZWxQT0FkcmVzYVVsaWNhX1N0cmVldE5hbWU+PFppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbj48L1ppYWRhdGVsUE9BZHJlc2FLcmFqX1JlZ2lvbj48WmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0PjwvWmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0PjxaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcj48L1ppYWRhdGVsUE9BZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyPjxaaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5PjwvWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eT48WmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlPjwvWmlhZGF0ZWxQT0FkcmVzYVBTQ19Qb3N0YWxDb2RlPjxaaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyPjwvWmlhZGF0ZWxQT0FkcmVzYU9yQ19CdWlsZGluZ051bWJlcj48L3Nla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzPjxzZWtjaWFaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcz48WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeT48L1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnk+PFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eT48L1ppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eT48WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWU+PC9aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZT48WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uPjwvWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uPjxaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3Q+PC9aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3Q+PFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyPjwvWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXI+PFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHk+PC9aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5PjxaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGU+PC9aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGU+PFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXI+PC9aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyPjwvc2VrY2lhWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3M+PHNla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlcj48WmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeD48L1ppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg+PFppYWRhdGVsUE9TdGF0dXRhck1lbm9fR2l2ZW5OYW1lPjwvWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWU+PFppYWRhdGVsUE9TdGF0dXRhckZ1bmtjaWE+PC9aaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhPjxaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXg+PC9aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXg+PFppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZT48L1ppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZT48L3Nla2NpYVppYWRhdGVsUE9TdGF0dXRhcl9TdGFrZWhvbGRlcj48c2VrY2lhWmlhZGF0ZWxQT0tvbnRha3Q+PFppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcz48L1ppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcz48WmlhZGF0ZWxQT0tvbnRha3RFbWFpbEFkcmVzYT48L1ppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2E+PC9zZWtjaWFaaWFkYXRlbFBPS29udGFrdD48L3Nla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keT48c2VrY2lhRG9wbmVuaWVQb2RhbmlhPjxEb3BuZW5pZVBvZGFuaWFJZD48L0RvcG5lbmllUG9kYW5pYUlkPjxEb3BsbmVuaWVQb2RhbmlhUHJlZG1ldD48L0RvcGxuZW5pZVBvZGFuaWFQcmVkbWV0PjxEb3BsbmVuaWVQb2RhbmlhUG9waXM+PC9Eb3BsbmVuaWVQb2RhbmlhUG9waXM+PERvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZT48L0RvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZT48L3Nla2NpYURvcG5lbmllUG9kYW5pYT48c2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92PjxPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXM+MDwvT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzPjwvc2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92PjxzZWtjaWFOb3RpZmlrYWNpZT48Tm90aWZpa2FjaWVaYXNpZWxhbmllPm5pZTwvTm90aWZpa2FjaWVaYXNpZWxhbmllPjwvc2VrY2lhTm90aWZpa2FjaWU+PHNla2NpYVZ5c3R1cD48UmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1PmVEZXNrPC9SYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHU+PFZ5c3R1cEtvbnRha3Q+PC9WeXN0dXBLb250YWt0Pjwvc2VrY2lhVnlzdHVwPjxzZWtjaWFGb290ZXI+PC9zZWtjaWFGb290ZXI+PC9lRm9ybV9lR292XzAwX1BPPg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Q29tcGxldGVEaWN0aW9uYXJ5PjxNZXNzYWdlRGljdGlvbmFyeSAvPjxEZWZhdWx0c0RpY3Rpb25hcnkgLz48L0NvbXBsZXRlRGljdGlvbmFyeT4=
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+DQo8aHRtbD4NCgk8aGVhZD4NCgk8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPg0KCTx0aXRsZT4wMDAuRG9wbG5lbmllIHBvZGFuaWEgLSBQTzwvdGl0bGU+DQoJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPg0KCTxtZXRhIG5hbWU9Imxhbmd1YWdlIiBjb250ZW50PSJzay1TSyI+DQoJCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQovKiA8IVtDREFUQVsgKi8NCi8qDQogKiBqUXVlcnkgVUkgQ1NTIEZyYW1ld29yayAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1RoZW1pbmcvQVBJDQogKi8NCg0KLyogTGF5b3V0IGhlbHBlcnMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQoudWktaGVscGVyLWhpZGRlbiB7IGRpc3BsYXk6IG5vbmU7IH0NCg0KLnVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSB7DQogICAgY2xpcDogcmVjdCgxcHggMXB4IDFweCAxcHgpOw0KICAgIGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsNCn0NCg0KLnVpLWhlbHBlci1yZXNldCB7DQogICAgYm9yZGVyOiAwOw0KICAgIGZvbnQtc2l6ZTogMTAwJTsNCiAgICBsaW5lLWhlaWdodDogMS4zOw0KICAgIGxpc3Qtc3R5bGU6IG5vbmU7DQogICAgbWFyZ2luOiAwOw0KICAgIG91dGxpbmU6IDA7DQogICAgcGFkZGluZzogMDsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoNCi51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoOw0KICAgIGNvbnRlbnQ6ICIuIjsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBoZWlnaHQ6IDA7DQogICAgdmlzaWJpbGl0eTogaGlkZGVuOw0KfQ0KDQoudWktaGVscGVyLWNsZWFyZml4IHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9DQovKiByZXF1aXJlZCBjb21tZW50IGZvciBjbGVhcmZpeCB0byB3b3JrIGluIE9wZXJhIFwqLw0KDQoqIGh0bWwgLnVpLWhlbHBlci1jbGVhcmZpeCB7IGhlaWdodDogMSU7IH0NCg0KLnVpLWhlbHBlci1jbGVhcmZpeCB7IGRpc3BsYXk6IGJsb2NrOyB9DQovKiBlbmQgY2xlYXJmaXggKi8NCg0KLnVpLWhlbHBlci16Zml4IHsNCiAgICBmaWx0ZXI6IEFscGhhKE9wYWNpdHk9MCk7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIGxlZnQ6IDA7DQogICAgb3BhY2l0eTogMDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiAwOw0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KDQoNCi8qIEludGVyYWN0aW9uIEN1ZXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQoudWktc3RhdGUtZGlzYWJsZWQgeyBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDsgfQ0KDQoNCi8qIEljb25zDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KLyogc3RhdGVzIGFuZCBJbWFnZXMgKi8NCg0KLnVpLWljb24gew0KICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7DQp9DQoNCg0KLyogTWlzYyB2aXN1YWxzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KLyogT3ZlcmxheXMgKi8NCg0KLnVpLXdpZGdldC1vdmVybGF5IHsNCiAgICBoZWlnaHQ6IDEwMCU7DQogICAgbGVmdDogMDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiAwOw0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KLyoNCiAqIGpRdWVyeSBVSSBBY2NvcmRpb24gMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9BY2NvcmRpb24jdGhlbWluZw0KICovDQovKiBJRS9XaW4gLSBGaXggYW5pbWF0aW9uIGJ1ZyAtICM0NjE1ICovDQoNCi51aS1hY2NvcmRpb24geyB3aWR0aDogMTAwJTsgfQ0KDQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgbWFyZ2luLXRvcDogMXB4Ow0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB6b29tOiAxOw0KfQ0KDQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tbGktZml4IHsgZGlzcGxheTogaW5saW5lOyB9DQoNCi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHsgYm9yZGVyLWJvdHRvbTogMCAhaW1wb3J0YW50OyB9DQoNCi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1oZWFkZXIgYSB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZm9udC1zaXplOiAxZW07DQogICAgcGFkZGluZzogLjVlbSAuNWVtIC41ZW0gLjdlbTsNCn0NCg0KLnVpLWFjY29yZGlvbi1pY29ucyAudWktYWNjb3JkaW9uLWhlYWRlciBhIHsgcGFkZGluZy1sZWZ0OiAyLjJlbTsgfQ0KDQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIC51aS1pY29uIHsNCiAgICBsZWZ0OiAuNWVtOw0KICAgIG1hcmdpbi10b3A6IC04cHg7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogNTAlOw0KfQ0KDQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudCB7DQogICAgYm9yZGVyLXRvcDogMDsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIG1hcmdpbi1ib3R0b206IDJweDsNCiAgICBtYXJnaW4tdG9wOiAtMnB4Ow0KICAgIG92ZXJmbG93OiBhdXRvOw0KICAgIHBhZGRpbmc6IDFlbSAyLjJlbTsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgdG9wOiAxcHg7DQogICAgem9vbTogMTsNCn0NCg0KLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH0NCi8qDQogKiBqUXVlcnkgVUkgQXV0b2NvbXBsZXRlIDEuOC4xNA0KICoNCiAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkNCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQ0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvQXV0b2NvbXBsZXRlI3RoZW1pbmcNCiAqLw0KDQoudWktYXV0b2NvbXBsZXRlIHsNCiAgICBjdXJzb3I6IGRlZmF1bHQ7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KfQkNCg0KLyogd29ya2Fyb3VuZHMgKi8NCg0KKiBodG1sIC51aS1hdXRvY29tcGxldGUgeyB3aWR0aDogMXB4OyB9IC8qIHdpdGhvdXQgdGhpcywgdGhlIG1lbnUgZXhwYW5kcyB0byAxMDAlIGluIElFNiAqLw0KDQovKg0KICogalF1ZXJ5IFVJIE1lbnUgMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTAsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9NZW51I3RoZW1pbmcNCiAqLw0KDQoudWktbWVudSB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgbGlzdC1zdHlsZTogbm9uZTsNCiAgICBtYXJnaW46IDA7DQogICAgcGFkZGluZzogMnB4Ow0KfQ0KDQoudWktbWVudSAudWktbWVudSB7IG1hcmdpbi10b3A6IC0zcHg7IH0NCg0KLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSB7DQogICAgY2xlYXI6IGxlZnQ7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgbWFyZ2luOiAwOw0KICAgIHBhZGRpbmc6IDA7DQogICAgd2lkdGg6IDEwMCU7DQogICAgem9vbTogMTsNCn0NCg0KLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSBhIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBsaW5lLWhlaWdodDogMS41Ow0KICAgIHBhZGRpbmc6IC4yZW0gLjRlbTsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgem9vbTogMTsNCn0NCg0KLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSBhLnVpLXN0YXRlLWhvdmVyLA0KLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSBhLnVpLXN0YXRlLWFjdGl2ZSB7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICBtYXJnaW46IC0xcHg7DQp9DQovKg0KICogalF1ZXJ5IFVJIEJ1dHRvbiAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL0J1dHRvbiN0aGVtaW5nDQogKi8NCg0KLnVpLWJ1dHRvbiB7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBtYXJnaW4tcmlnaHQ6IC4xZW07DQogICAgb3ZlcmZsb3c6IHZpc2libGU7DQogICAgcGFkZGluZzogMDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Ow0KICAgIHpvb206IDE7DQp9IC8qIHRoZSBvdmVyZmxvdyBwcm9wZXJ0eSByZW1vdmVzIGV4dHJhIHdpZHRoIGluIElFICovDQoNCi51aS1idXR0b24taWNvbi1vbmx5IHsgd2lkdGg6IDIuMmVtOyB9IC8qIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGljb24sIGEgd2lkdGggbmVlZHMgdG8gYmUgc2V0IGhlcmUgKi8NCg0KYnV0dG9uLnVpLWJ1dHRvbi1pY29uLW9ubHkgeyB3aWR0aDogMi40ZW07IH0gLyogYnV0dG9uIGVsZW1lbnRzIHNlZW0gdG8gbmVlZCBhIGxpdHRsZSBtb3JlIHdpZHRoICovDQoNCi51aS1idXR0b24taWNvbnMtb25seSB7IHdpZHRoOiAzLjRlbTsgfQ0KDQpidXR0b24udWktYnV0dG9uLWljb25zLW9ubHkgeyB3aWR0aDogMy43ZW07IH0gDQoNCi8qYnV0dG9uIHRleHQgZWxlbWVudCAqLw0KDQoudWktYnV0dG9uIC51aS1idXR0b24tdGV4dCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgbGluZS1oZWlnaHQ6IDEuNDsNCn0NCg0KLnVpLWJ1dHRvbi10ZXh0LW9ubHkgLnVpLWJ1dHRvbi10ZXh0IHsgcGFkZGluZzogLjRlbSAxZW07IH0NCg0KLnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWJ1dHRvbi10ZXh0LCAudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0IHsNCiAgICBwYWRkaW5nOiAuNGVtOw0KICAgIHRleHQtaW5kZW50OiAtOTk5OTk5OXB4Ow0KfQ0KDQoudWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IC51aS1idXR0b24tdGV4dCwgLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7IHBhZGRpbmc6IC40ZW0gMWVtIC40ZW0gMi4xZW07IH0NCg0KLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24tdGV4dCwgLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7IHBhZGRpbmc6IC40ZW0gMi4xZW0gLjRlbSAxZW07IH0NCg0KLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7DQogICAgcGFkZGluZy1sZWZ0OiAyLjFlbTsNCiAgICBwYWRkaW5nLXJpZ2h0OiAyLjFlbTsNCn0NCi8qIG5vIGljb24gc3VwcG9ydCBmb3IgaW5wdXQgZWxlbWVudHMsIHByb3ZpZGUgcGFkZGluZyBieSBkZWZhdWx0ICovDQoNCmlucHV0LnVpLWJ1dHRvbiB7IHBhZGRpbmc6IC40ZW0gMWVtOyB9DQoNCi8qYnV0dG9uIGljb24gZWxlbWVudChzKSAqLw0KDQoudWktYnV0dG9uLWljb24tb25seSAudWktaWNvbiwgLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktaWNvbiwgLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1pY29uLCAudWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWljb24sIC51aS1idXR0b24taWNvbnMtb25seSAudWktaWNvbiB7DQogICAgbWFyZ2luLXRvcDogLThweDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiA1MCU7DQp9DQoNCi51aS1idXR0b24taWNvbi1vbmx5IC51aS1pY29uIHsNCiAgICBsZWZ0OiA1MCU7DQogICAgbWFyZ2luLWxlZnQ6IC04cHg7DQp9DQoNCi51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnksIC51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLWljb24tcHJpbWFyeSwgLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24taWNvbi1wcmltYXJ5IHsgbGVmdDogLjVlbTsgfQ0KDQoudWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSwgLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHsgcmlnaHQ6IC41ZW07IH0NCg0KLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHsgcmlnaHQ6IC41ZW07IH0NCg0KLypidXR0b24gc2V0cyovDQoNCi51aS1idXR0b25zZXQgeyBtYXJnaW4tcmlnaHQ6IDdweDsgfQ0KDQoudWktYnV0dG9uc2V0IC51aS1idXR0b24gew0KICAgIG1hcmdpbi1sZWZ0OiAwOw0KICAgIG1hcmdpbi1yaWdodDogLS4zZW07DQp9DQoNCi8qIHdvcmthcm91bmRzICovDQoNCmJ1dHRvbi51aS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIgew0KICAgIGJvcmRlcjogMDsNCiAgICBwYWRkaW5nOiAwOw0KfSAvKiByZXNldCBleHRyYSBwYWRkaW5nIGluIEZpcmVmb3ggKi8NCi8qDQogKiBqUXVlcnkgVUkgRGF0ZXBpY2tlciAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL0RhdGVwaWNrZXIjdGhlbWluZw0KICovDQoNCi51aS1kYXRlcGlja2VyIHsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIHBhZGRpbmc6IC4yZW0gLjJlbSAwOw0KICAgIHdpZHRoOiAxN2VtOw0KfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1oZWFkZXIgew0KICAgIHBhZGRpbmc6IC4yZW0gMDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQp9DQoNCi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYsIC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgew0KICAgIGhlaWdodDogMS44ZW07DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMnB4Ow0KICAgIHdpZHRoOiAxLjhlbTsNCn0NCg0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwgLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciB7IHRvcDogMXB4OyB9DQoNCi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgeyBsZWZ0OiAycHg7IH0NCg0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dCB7IHJpZ2h0OiAycHg7IH0NCg0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciB7IGxlZnQ6IDFweDsgfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIHsgcmlnaHQ6IDFweDsgfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2IHNwYW4sIC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbiB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgbGVmdDogNTAlOw0KICAgIG1hcmdpbi1sZWZ0OiAtOHB4Ow0KICAgIG1hcmdpbi10b3A6IC04cHg7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogNTAlOw0KfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSB7DQogICAgbGluZS1oZWlnaHQ6IDEuOGVtOw0KICAgIG1hcmdpbjogMCAyLjNlbTsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdCB7DQogICAgZm9udC1zaXplOiAxZW07DQogICAgbWFyZ2luOiAxcHggMDsNCn0NCg0KLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgteWVhciB7IHdpZHRoOiAxMDAlOyB9DQoNCi51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLA0KLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciB7IHdpZHRoOiA0OSU7IH0NCg0KLnVpLWRhdGVwaWNrZXIgdGFibGUgew0KICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7DQogICAgZm9udC1zaXplOiAuOWVtOw0KICAgIG1hcmdpbjogMCAwIC40ZW07DQogICAgd2lkdGg6IDEwMCU7DQp9DQoNCi51aS1kYXRlcGlja2VyIHRoIHsNCiAgICBib3JkZXI6IDA7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgcGFkZGluZzogLjdlbSAuM2VtOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLnVpLWRhdGVwaWNrZXIgdGQgew0KICAgIGJvcmRlcjogMDsNCiAgICBwYWRkaW5nOiAxcHg7DQp9DQoNCi51aS1kYXRlcGlja2VyIHRkIHNwYW4sIC51aS1kYXRlcGlja2VyIHRkIGEgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHBhZGRpbmc6IC4yZW07DQogICAgdGV4dC1hbGlnbjogcmlnaHQ7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOw0KICAgIGJvcmRlci1ib3R0b206IDA7DQogICAgYm9yZGVyLWxlZnQ6IDA7DQogICAgYm9yZGVyLXJpZ2h0OiAwOw0KICAgIG1hcmdpbjogLjdlbSAwIDAgMDsNCiAgICBwYWRkaW5nOiAwIC4yZW07DQp9DQoNCi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uIHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgZmxvYXQ6IHJpZ2h0Ow0KICAgIG1hcmdpbjogLjVlbSAuMmVtIC40ZW07DQogICAgb3ZlcmZsb3c6IHZpc2libGU7DQogICAgcGFkZGluZzogLjJlbSAuNmVtIC4zZW0gLjZlbTsNCiAgICB3aWR0aDogYXV0bzsNCn0NCg0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50IHsgZmxvYXQ6IGxlZnQ7IH0NCg0KLyogd2l0aCBtdWx0aXBsZSBjYWxlbmRhcnMgKi8NCg0KLnVpLWRhdGVwaWNrZXIudWktZGF0ZXBpY2tlci1tdWx0aSB7IHdpZHRoOiBhdXRvOyB9DQoNCi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHsgZmxvYXQ6IGxlZnQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAgdGFibGUgew0KICAgIG1hcmdpbjogMCBhdXRvIC40ZW07DQogICAgd2lkdGg6IDk1JTsNCn0NCg0KLnVpLWRhdGVwaWNrZXItbXVsdGktMiAudWktZGF0ZXBpY2tlci1ncm91cCB7IHdpZHRoOiA1MCU7IH0NCg0KLnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cCB7IHdpZHRoOiAzMy4zJTsgfQ0KDQoudWktZGF0ZXBpY2tlci1tdWx0aS00IC51aS1kYXRlcGlja2VyLWdyb3VwIHsgd2lkdGg6IDI1JTsgfQ0KDQoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlciB7IGJvcmRlci1sZWZ0LXdpZHRoOiAwOyB9DQoNCi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIgeyBib3JkZXItbGVmdC13aWR0aDogMDsgfQ0KDQoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHsgY2xlYXI6IGxlZnQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrIHsNCiAgICBjbGVhcjogYm90aDsNCiAgICBmb250LXNpemU6IDBlbTsNCiAgICB3aWR0aDogMTAwJTsNCn0NCg0KLyogUlRMIHN1cHBvcnQgKi8NCg0KLnVpLWRhdGVwaWNrZXItcnRsIHsgZGlyZWN0aW9uOiBydGw7IH0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXYgew0KICAgIGxlZnQ6IGF1dG87DQogICAgcmlnaHQ6IDJweDsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQgew0KICAgIGxlZnQ6IDJweDsNCiAgICByaWdodDogYXV0bzsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXY6aG92ZXIgew0KICAgIGxlZnQ6IGF1dG87DQogICAgcmlnaHQ6IDFweDsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQ6aG92ZXIgew0KICAgIGxlZnQ6IDFweDsNCiAgICByaWdodDogYXV0bzsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgeyBjbGVhcjogcmlnaHQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uIHsgZmxvYXQ6IGxlZnQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCB7IGZsb2F0OiByaWdodDsgfQ0KDQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAgeyBmbG9hdDogcmlnaHQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHsNCiAgICBib3JkZXItbGVmdC13aWR0aDogMXB4Ow0KICAgIGJvcmRlci1yaWdodC13aWR0aDogMDsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIgew0KICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7DQogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwOw0KfQ0KDQovKiBJRTYgSUZSQU1FIEZJWCAodGFrZW4gZnJvbSBkYXRlcGlja2VyIDEuNS4zICovDQoNCi51aS1kYXRlcGlja2VyLWNvdmVyIHsNCiAgICBkaXNwbGF5OiBub25lOyAvKnNvcnJ5IGZvciBJRTUqLw0KICAgIGRpc3BsYXkvKiovOiBibG9jazsgLypzb3JyeSBmb3IgSUU1Ki8NCiAgICBmaWx0ZXI6IG1hc2soKTsgLyptdXN0IGhhdmUqLw0KICAgIGhlaWdodDogMjAwcHg7IC8qbXVzdCBoYXZlKi8NCiAgICBsZWZ0OiAtNHB4OyAvKm11c3QgaGF2ZSovDQogICAgcG9zaXRpb246IGFic29sdXRlOyAvKm11c3QgaGF2ZSovDQogICAgdG9wOiAtNHB4OyAvKm11c3QgaGF2ZSovDQogICAgd2lkdGg6IDIwMHB4OyAvKm11c3QgaGF2ZSovDQogICAgei1pbmRleDogLTE7IC8qbXVzdCBoYXZlKi8NCn0vKg0KICogalF1ZXJ5IFVJIERpYWxvZyAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL0RpYWxvZyN0aGVtaW5nDQogKi8NCg0KLnVpLWRpYWxvZyB7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBwYWRkaW5nOiAuMmVtOw0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB3aWR0aDogMzAwcHg7DQp9DQoNCi51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhciB7DQogICAgcGFkZGluZzogLjRlbSAxZW07DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQoudWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGUgew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIG1hcmdpbjogLjFlbSAxNnB4IC4xZW0gMDsNCn0NCg0KLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIHsNCiAgICBoZWlnaHQ6IDE4cHg7DQogICAgbWFyZ2luOiAtMTBweCAwIDAgMDsNCiAgICBwYWRkaW5nOiAxcHg7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHJpZ2h0OiAuM2VtOw0KICAgIHRvcDogNTAlOw0KICAgIHdpZHRoOiAxOXB4Ow0KfQ0KDQoudWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2Ugc3BhbiB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgLyptYXJnaW46IDFweDsqLw0KfQ0KDQoudWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2U6aG92ZXIsIC51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZTpmb2N1cyB7IHBhZGRpbmc6IDA7IH0NCg0KLnVpLWRpYWxvZyAudWktZGlhbG9nLWNvbnRlbnQgew0KICAgIGJhY2tncm91bmQ6IG5vbmU7DQogICAgYm9yZGVyOiAwOw0KICAgIG92ZXJmbG93OiBhdXRvOw0KICAgIHBhZGRpbmc6IC41ZW0gMWVtOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB6b29tOiAxOw0KfQ0KDQoudWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSB7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsNCiAgICBib3JkZXItd2lkdGg6IDFweCAwIDAgMDsNCiAgICBtYXJnaW46IC41ZW0gMCAwIDA7DQogICAgcGFkZGluZzogLjNlbSAxZW0gLjVlbSAuNGVtOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5lIC51aS1kaWFsb2ctYnV0dG9uc2V0IHsgZmxvYXQ6IHJpZ2h0OyB9DQoNCi51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5lIGJ1dHRvbiB7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIG1hcmdpbjogLjVlbSAuNGVtIC41ZW0gMDsNCn0NCg0KLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLXNlIHsNCiAgICBib3R0b206IDNweDsNCiAgICBoZWlnaHQ6IDE0cHg7DQogICAgcmlnaHQ6IDNweDsNCiAgICB3aWR0aDogMTRweDsNCn0NCg0KLnVpLWRyYWdnYWJsZSAudWktZGlhbG9nLXRpdGxlYmFyIHsgY3Vyc29yOiBtb3ZlOyB9DQovKg0KICogalF1ZXJ5IFVJIFByb2dyZXNzYmFyIDEuOC4xNA0KICoNCiAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkNCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQ0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvUHJvZ3Jlc3NiYXIjdGhlbWluZw0KICovDQoNCi51aS1wcm9ncmVzc2JhciB7DQogICAgaGVpZ2h0OiAyZW07DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIG1hcmdpbjogLTFweDsNCn0vKg0KICogalF1ZXJ5IFVJIFJlc2l6YWJsZSAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1Jlc2l6YWJsZSN0aGVtaW5nDQogKi8NCg0KLnVpLXJlc2l6YWJsZSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfQ0KDQoudWktcmVzaXphYmxlLWhhbmRsZSB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZm9udC1zaXplOiAwLjFweDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgei1pbmRleDogOTk5OTk7DQp9DQoNCi51aS1yZXNpemFibGUtZGlzYWJsZWQgLnVpLXJlc2l6YWJsZS1oYW5kbGUsIC51aS1yZXNpemFibGUtYXV0b2hpZGUgLnVpLXJlc2l6YWJsZS1oYW5kbGUgeyBkaXNwbGF5OiBub25lOyB9DQoNCi51aS1yZXNpemFibGUtbiB7DQogICAgY3Vyc29yOiBuLXJlc2l6ZTsNCiAgICBoZWlnaHQ6IDdweDsNCiAgICBsZWZ0OiAwOw0KICAgIHRvcDogLTVweDsNCiAgICB3aWR0aDogMTAwJTsNCn0NCg0KLnVpLXJlc2l6YWJsZS1zIHsNCiAgICBib3R0b206IC01cHg7DQogICAgY3Vyc29yOiBzLXJlc2l6ZTsNCiAgICBoZWlnaHQ6IDdweDsNCiAgICBsZWZ0OiAwOw0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KDQoudWktcmVzaXphYmxlLWUgew0KICAgIGN1cnNvcjogZS1yZXNpemU7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIHJpZ2h0OiAtNXB4Ow0KICAgIHRvcDogMDsNCiAgICB3aWR0aDogN3B4Ow0KfQ0KDQoudWktcmVzaXphYmxlLXcgew0KICAgIGN1cnNvcjogdy1yZXNpemU7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIGxlZnQ6IC01cHg7DQogICAgdG9wOiAwOw0KICAgIHdpZHRoOiA3cHg7DQp9DQoNCi51aS1yZXNpemFibGUtc2Ugew0KICAgIGJvdHRvbTogMXB4Ow0KICAgIGN1cnNvcjogc2UtcmVzaXplOw0KICAgIGhlaWdodDogMTJweDsNCiAgICByaWdodDogMXB4Ow0KICAgIHdpZHRoOiAxMnB4Ow0KfQ0KDQoudWktcmVzaXphYmxlLXN3IHsNCiAgICBib3R0b206IC01cHg7DQogICAgY3Vyc29yOiBzdy1yZXNpemU7DQogICAgaGVpZ2h0OiA5cHg7DQogICAgbGVmdDogLTVweDsNCiAgICB3aWR0aDogOXB4Ow0KfQ0KDQoudWktcmVzaXphYmxlLW53IHsNCiAgICBjdXJzb3I6IG53LXJlc2l6ZTsNCiAgICBoZWlnaHQ6IDlweDsNCiAgICBsZWZ0OiAtNXB4Ow0KICAgIHRvcDogLTVweDsNCiAgICB3aWR0aDogOXB4Ow0KfQ0KDQoudWktcmVzaXphYmxlLW5lIHsNCiAgICBjdXJzb3I6IG5lLXJlc2l6ZTsNCiAgICBoZWlnaHQ6IDlweDsNCiAgICByaWdodDogLTVweDsNCiAgICB0b3A6IC01cHg7DQogICAgd2lkdGg6IDlweDsNCn0vKg0KICogalF1ZXJ5IFVJIFNlbGVjdGFibGUgMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9TZWxlY3RhYmxlI3RoZW1pbmcNCiAqLw0KDQoudWktc2VsZWN0YWJsZS1oZWxwZXIgew0KICAgIGJvcmRlcjogMXB4IGRvdHRlZCBibGFjazsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgei1pbmRleDogMTAwOw0KfQ0KLyoNCiAqIGpRdWVyeSBVSSBTbGlkZXIgMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9TbGlkZXIjdGhlbWluZw0KICovDQoNCi51aS1zbGlkZXIgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQoudWktc2xpZGVyIC51aS1zbGlkZXItaGFuZGxlIHsNCiAgICBjdXJzb3I6IGRlZmF1bHQ7DQogICAgaGVpZ2h0OiAxLjJlbTsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgd2lkdGg6IDEuMmVtOw0KICAgIHotaW5kZXg6IDI7DQp9DQoNCi51aS1zbGlkZXIgLnVpLXNsaWRlci1yYW5nZSB7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOw0KICAgIGJvcmRlcjogMDsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBmb250LXNpemU6IC43ZW07DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHotaW5kZXg6IDE7DQp9DQoNCi51aS1zbGlkZXItaG9yaXpvbnRhbCB7IGhlaWdodDogLjhlbTsgfQ0KDQoudWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1oYW5kbGUgew0KICAgIG1hcmdpbi1sZWZ0OiAtLjZlbTsNCiAgICB0b3A6IC0uM2VtOw0KfQ0KDQoudWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZSB7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIHRvcDogMDsNCn0NCg0KLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWluIHsgbGVmdDogMDsgfQ0KDQoudWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZS1tYXggeyByaWdodDogMDsgfQ0KDQoudWktc2xpZGVyLXZlcnRpY2FsIHsNCiAgICBoZWlnaHQ6IDEwMHB4Ow0KICAgIHdpZHRoOiAuOGVtOw0KfQ0KDQoudWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItaGFuZGxlIHsNCiAgICBsZWZ0OiAtLjNlbTsNCiAgICBtYXJnaW4tYm90dG9tOiAtLjZlbTsNCiAgICBtYXJnaW4tbGVmdDogMDsNCn0NCg0KLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlIHsNCiAgICBsZWZ0OiAwOw0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KDQoudWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWluIHsgYm90dG9tOiAwOyB9DQoNCi51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1yYW5nZS1tYXggeyB0b3A6IDA7IH0vKg0KICogalF1ZXJ5IFVJIFRhYnMgMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9UYWJzI3RoZW1pbmcNCiAqLw0KDQoudWktdGFicyB7DQogICAgcGFkZGluZzogLjJlbTsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgem9vbTogMTsNCn0gLyogcG9zaXRpb246IHJlbGF0aXZlIHByZXZlbnRzIElFIHNjcm9sbCBidWcgKGVsZW1lbnQgd2l0aCBwb3NpdGlvbjogcmVsYXRpdmUgaW5zaWRlIGNvbnRhaW5lciB3aXRoIG92ZXJmbG93OiBhdXRvIGFwcGVhciBhcyAiZml4ZWQiKSAqLw0KDQoudWktdGFicyAudWktdGFicy1uYXYgew0KICAgIG1hcmdpbjogMDsNCiAgICBwYWRkaW5nOiAuMmVtIC4yZW0gMDsNCn0NCg0KLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpIHsNCiAgICBib3JkZXItYm90dG9tOiAwICFpbXBvcnRhbnQ7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgbGlzdC1zdHlsZTogbm9uZTsNCiAgICBtYXJnaW46IDAgLjJlbSAxcHggMDsNCiAgICBwYWRkaW5nOiAwOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB0b3A6IDFweDsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KfQ0KDQoudWktdGFicyAudWktdGFicy1uYXYgbGkgYSB7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgcGFkZGluZzogLjVlbSAxZW07DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KDQoudWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1zZWxlY3RlZCB7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KfQ0KDQoudWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1zZWxlY3RlZCBhLCAudWktdGFicyAudWktdGFicy1uYXYgbGkudWktc3RhdGUtZGlzYWJsZWQgYSwgLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXN0YXRlLXByb2Nlc3NpbmcgYSB7IGN1cnNvcjogdGV4dDsgfQ0KDQoudWktdGFicyAudWktdGFicy1uYXYgbGkgYSwgLnVpLXRhYnMudWktdGFicy1jb2xsYXBzaWJsZSAudWktdGFicy1uYXYgbGkudWktdGFicy1zZWxlY3RlZCBhIHsgY3Vyc29yOiBwb2ludGVyOyB9IC8qIGZpcnN0IHNlbGVjdG9yIGluIGdyb3VwIHNlZW1zIG9ic29sZXRlLCBidXQgcmVxdWlyZWQgdG8gb3ZlcmNvbWUgYnVnIGluIE9wZXJhIGFwcGx5aW5nIGN1cnNvcjogdGV4dCBvdmVyYWxsIGlmIGRlZmluZWQgZWxzZXdoZXJlLi4uICovDQoNCi51aS10YWJzIC51aS10YWJzLXBhbmVsIHsNCiAgICBiYWNrZ3JvdW5kOiBub25lOw0KICAgIGJvcmRlci13aWR0aDogMDsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBwYWRkaW5nOiAxZW0gMS40ZW07DQp9DQoNCi51aS10YWJzIC51aS10YWJzLWhpZGUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0NCi8qDQogKiBqUXVlcnkgVUkgQ1NTIEZyYW1ld29yayAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1RoZW1pbmcvQVBJDQogKg0KICogVG8gdmlldyBhbmQgbW9kaWZ5IHRoaXMgdGhlbWUsIHZpc2l0IGh0dHA6Ly9qcXVlcnl1aS5jb20vdGhlbWVyb2xsZXIvDQogKi8NCg0KDQovKiBDb21wb25lbnQgY29udGFpbmVycw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi51aS13aWRnZXQgew0KICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgc2Fucy1zZXJpZi8qe2ZmRGVmYXVsdH0qLzsNCiAgICBmb250LXNpemU6IDEuMWVtLyp7ZnNEZWZhdWx0fSovOw0KfQ0KDQoudWktd2lkZ2V0IC51aS13aWRnZXQgeyBmb250LXNpemU6IDFlbTsgfQ0KDQoudWktd2lkZ2V0IGlucHV0LCAudWktd2lkZ2V0IHNlbGVjdCwgLnVpLXdpZGdldCB0ZXh0YXJlYSwgLnVpLXdpZGdldCBidXR0b24gew0KICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgc2Fucy1zZXJpZi8qe2ZmRGVmYXVsdH0qLzsNCiAgICBmb250LXNpemU6IDFlbTsNCn0NCg0KLnVpLXdpZGdldC1jb250ZW50IHsNCiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmIC8qe2JnQ29sb3JDb250ZW50fSovIC8qdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFCa0NBWUFBQUQwWkhKNkFBQUFlVWxFUVZSb2dlM09NUUhBSUJBQXNWTC9uaDhKRERmQWtDakltcG41SHZiZkRwd0lWb0tWWUNWWUNWYUNsV0FsV0FsV2dwVmdKVmdKVm9LVllDVllDVmFDbFdBbFdBbFdncFZnSlZnSlZvS1ZZQ1ZZQ1ZhQ2xXQWxXQWxXZ3BWZ0pWZ0pWb0tWWUNWWUNWYUNsV0FsV0FsV2dwVmdKVmdKVmh0cWl3VEVLVExYVGdBQUFBQkpSVTVFcmtKZ2dnPT0pKi8gLyp7YmdJbWdVcmxDb250ZW50fSovIDUwJSAvKntiZ0NvbnRlbnRYUG9zfSovIDUwJSAvKntiZ0NvbnRlbnRZUG9zfSovIHJlcGVhdC14Lyp7YmdDb250ZW50UmVwZWF0fSovOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWEvKntib3JkZXJDb2xvckNvbnRlbnR9Ki87DQogICAgY29sb3I6ICMyMjIyMjIvKntmY0NvbnRlbnR9Ki87DQp9DQoNCi51aS13aWRnZXQtY29udGVudCBhIHsgY29sb3I6ICMyMjIyMjIvKntmY0NvbnRlbnR9Ki87IH0NCg0KLnVpLXdpZGdldC1oZWFkZXIgew0KICAgIGJhY2tncm91bmQ6ICNjY2NjY2MgLyp7YmdDb2xvckhlYWRlcn0qLyAvKnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQmtDQVlBQUFCSExGcGdBQUFBTEVsRVFWUVlsV040OU9qUmZ5WUdCZ2FHSVVUOC8vOGZTcUJ4MFloLy8vNFJMOHZBd0FBVlEyTU5Pd0lBbDZnNktrT0p3azhBQUFBQVNVVk9SSzVDWUlJPSkqLyAvKntiZ0ltZ1VybEhlYWRlcn0qLyA1MCUgLyp7YmdIZWFkZXJYUG9zfSovIDUwJSAvKntiZ0hlYWRlcllQb3N9Ki8gcmVwZWF0LXgvKntiZ0hlYWRlclJlcGVhdH0qLzsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhYWFhLyp7Ym9yZGVyQ29sb3JIZWFkZXJ9Ki87DQogICAgY29sb3I6ICMyMjIyMjIvKntmY0hlYWRlcn0qLzsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KLnVpLXdpZGdldC1oZWFkZXIgYSB7IGNvbG9yOiAjMjIyMjIyLyp7ZmNIZWFkZXJ9Ki87IH0NCg0KLyogSW50ZXJhY3Rpb24gc3RhdGVzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KLnVpLXN0YXRlLWRlZmF1bHQsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHQgew0KICAgIGJhY2tncm91bmQ6ICNlNmU2ZTYgLyp7YmdDb2xvckRlZmF1bHR9Ki8gLyp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUdRQ0FZQUFBQnZXQXJiQUFBQU5VbEVRVlE0amUzTE1Rb0FJQkFEd2IzOC82dDV3RlhhV0FpQ3RVaWFZWnZGOWhCQUNPRmJ1bnRWVmUxMUIwQ1NqamVFOEJ3VGhRSUo4ZGhFbDBZQUFBQUFTVVZPUks1Q1lJST0pKi8gLyp7YmdJbWdVcmxEZWZhdWx0fSovIDUwJSAvKntiZ0RlZmF1bHRYUG9zfSovIDUwJSAvKntiZ0RlZmF1bHRZUG9zfSovIHJlcGVhdC14Lyp7YmdEZWZhdWx0UmVwZWF0fSovOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNkM2QzZDMvKntib3JkZXJDb2xvckRlZmF1bHR9Ki87DQogICAgY29sb3I6ICM1NTU1NTUvKntmY0RlZmF1bHR9Ki87DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbC8qe2Z3RGVmYXVsdH0qLzsNCn0NCg0KLnVpLXN0YXRlLWRlZmF1bHQgYSwgLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLCAudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWQgew0KICAgIGNvbG9yOiAjNTU1NTU1Lyp7ZmNEZWZhdWx0fSovOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCg0KLnVpLXN0YXRlLWhvdmVyLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsIC51aS1zdGF0ZS1mb2N1cywgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cywgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kOiAjZGFkYWRhIC8qe2JnQ29sb3JIb3Zlcn0qLyAvKnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBR1FDQVlBQUFCdldBcmJBQUFBTmtsRVFWUTRqV040OHVUSmZ5WUdCZ2FHVVdLVUdDV0dMZkh0Mnpjb2k1R1JFWU5nWW1KQ1ppRzQySWlCOTh3b01VcU1FdGdJQU1kakNkeWcrZUVCQUFBQUFFbEZUa1N1UW1DQykqLyAvKntiZ0ltZ1VybEhvdmVyfSovIDUwJSAvKntiZ0hvdmVyWFBvc30qLyA1MCUgLyp7YmdIb3ZlcllQb3N9Ki8gcmVwZWF0LXgvKntiZ0hvdmVyUmVwZWF0fSovOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk5OTkvKntib3JkZXJDb2xvckhvdmVyfSovOw0KICAgIGNvbG9yOiAjMjEyMTIxLyp7ZmNIb3Zlcn0qLzsNCiAgICBmb250LXdlaWdodDogbm9ybWFsLyp7ZndEZWZhdWx0fSovOw0KfQ0KDQoudWktc3RhdGUtaG92ZXIgYSwgLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIgew0KICAgIGNvbG9yOiAjMjEyMTIxLyp7ZmNIb3Zlcn0qLzsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoNCi51aS1zdGF0ZS1hY3RpdmUsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZlIHsNCiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmIC8qe2JnQ29sb3JBY3RpdmV9Ki8gLyp1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9JbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZykqLyAvKntiZ0ltZ1VybEFjdGl2ZX0qLyA1MCUgLyp7YmdBY3RpdmVYUG9zfSovIDUwJSAvKntiZ0FjdGl2ZVlQb3N9Ki8gcmVwZWF0LXgvKntiZ0FjdGl2ZVJlcGVhdH0qLzsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhYWFhLyp7Ym9yZGVyQ29sb3JBY3RpdmV9Ki87DQogICAgY29sb3I6ICMyMTIxMjEvKntmY0FjdGl2ZX0qLzsNCiAgICBmb250LXdlaWdodDogbm9ybWFsLyp7ZndEZWZhdWx0fSovOw0KfQ0KDQoudWktc3RhdGUtYWN0aXZlIGEsIC51aS1zdGF0ZS1hY3RpdmUgYTpsaW5rLCAudWktc3RhdGUtYWN0aXZlIGE6dmlzaXRlZCB7DQogICAgY29sb3I6ICMyMTIxMjEvKntmY0FjdGl2ZX0qLzsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoNCi51aS13aWRnZXQgOmFjdGl2ZSB7IG91dGxpbmU6IG5vbmU7IH0NCg0KLyogSW50ZXJhY3Rpb24gQ3Vlcw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi51aS1zdGF0ZS1oaWdobGlnaHQsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0LCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IHsNCiAgICBiYWNrZ3JvdW5kOiAjZmJmOWVlIC8qe2JnQ29sb3JIaWdobGlnaHR9Ki8gLyp1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9JbWFnZXMvdWktYmdfZ2xhc3NfNTVfZmJmOWVlXzF4NDAwLnBuZykqLyAvKntiZ0ltZ1VybEhpZ2hsaWdodH0qLyA1MCUgLyp7YmdIaWdobGlnaHRYUG9zfSovIDUwJSAvKntiZ0hpZ2hsaWdodFlQb3N9Ki8gcmVwZWF0LXgvKntiZ0hpZ2hsaWdodFJlcGVhdH0qLzsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjZmNlZmExLyp7Ym9yZGVyQ29sb3JIaWdobGlnaHR9Ki87DQogICAgY29sb3I6ICMzNjM2MzYvKntmY0hpZ2hsaWdodH0qLzsNCn0NCg0KLnVpLXN0YXRlLWhpZ2hsaWdodCBhLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCBhLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGEgeyBjb2xvcjogIzM2MzYzNi8qe2ZjSGlnaGxpZ2h0fSovOyB9DQoNCi51aS1zdGF0ZS1lcnJvciwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIHsNCiAgICBiYWNrZ3JvdW5kOiAjZmVmMWVjIC8qe2JnQ29sb3JFcnJvcn0qLyAvKnVybChodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L0ltYWdlcy91aS1iZ19nbGFzc185NV9mZWYxZWNfMXg0MDAucG5nKSovIC8qe2JnSW1nVXJsRXJyb3J9Ki8gNTAlIC8qe2JnRXJyb3JYUG9zfSovIDUwJSAvKntiZ0Vycm9yWVBvc30qLyByZXBlYXQteC8qe2JnRXJyb3JSZXBlYXR9Ki87DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NkMGEwYS8qe2JvcmRlckNvbG9yRXJyb3J9Ki87DQogICAgY29sb3I6ICNjZDBhMGEvKntmY0Vycm9yfSovOw0KfQ0KDQoudWktc3RhdGUtZXJyb3IgYSwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYSB7IGNvbG9yOiAjY2QwYTBhLyp7ZmNFcnJvcn0qLzsgfQ0KDQoudWktc3RhdGUtZXJyb3ItdGV4dCwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3ItdGV4dCB7IGNvbG9yOiAjY2QwYTBhLyp7ZmNFcnJvcn0qLzsgfQ0KDQoudWktcHJpb3JpdHktcHJpbWFyeSwgLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LCAudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktcHJpbWFyeSB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9DQoNCi51aS1wcmlvcml0eS1zZWNvbmRhcnksIC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktc2Vjb25kYXJ5LCAudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5IHsNCiAgICBmaWx0ZXI6IEFscGhhKE9wYWNpdHk9NzApOw0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgb3BhY2l0eTogLjc7DQp9DQoNCi51aS1zdGF0ZS1kaXNhYmxlZCwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVkIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOw0KICAgIGZpbHRlcjogQWxwaGEoT3BhY2l0eT0zNSk7DQogICAgb3BhY2l0eTogLjM1Ow0KfQ0KDQovKiBJY29ucw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qIHN0YXRlcyBhbmQgSW1hZ2VzICovDQoNCi51aS1pY29uIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUR3Q0FNQUFBRFlTVXI1QUFBQTdWQk1WRVVrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlUd3c0Z1VBQUFBVG5SU1RsTUFHQkF5QkFoUXY0T1pMaUpVY0VCbVlCb1N6UXdnUEJaQ1NFb2VXaVl3VWl5Rk5JZUJ3MnJKejhjNFJCeTl1WHlydGFXTnFhMnpLUDJmSk84S0JnS1BvMktWb2E5czM1MUdQbTUra1dobzBrajlBQUFQaFVsRVFWUjRuTzFkaldMYnRoRUd5VWlxNVlTU0xYdHA3RnBMT21memtteHIxMjZ0bWkycDAzUkoxL1hlLzNFR2dBUnhQeUFnUmJJazIvaGtTejRDSk80K0hzRTdBSlNWeXNqSTJBTVVVT3hhaFoyaUFOaHpCdFpXcjRCb0lSU1lBVk41dTRRd0R3UURSYmN3ZlVpNUtTM3dGdURtRm5RTGE0RHRiLy9jcWt0d0Q1UUVGRndmVXM3UG9DQ0E3eTRiRUpWRml6Y0lvYjhLbWhBcGx3d3FWanQrOUZCbDN1SU5Rbml3RWlyeUV5dzlKSHFHcFFkRUZOaStCNFFRN1FPaUhoeXNJUG9BeFVxeHZkdnZBOUs0MmJzQXY0UzJmeGZZT2U1N0lKU1JrWkdSa1pHeHg3anhTSERIY1JCWFFNVHlJakluQmdId0JKL2JFeDhQRUFOQyt1aGJwU1NnZ0NCQVZPRFZhYnBJMVMvazRXTFpwVG42TnBNaG9YOVk0MGh4WUVSRnBNY3FVczRBbG9DdERRZElEMVlobnlYWjJoTGpBWVdpTzlEeTFQREI3dFBoSXFMeCt1TUI4Z3JaYVIrUXhsMi9DMlJrWkdSa1pHUms3QTdyQmY3SjBEUjUvTFVUanpVUElQU1BHdlFKaVZKaUI3a2NRQ2lVT0pyY0ZOdERaSWYyeGFyUTNhR3ZMTnhBVklGQWFiejkwQkZpQklseWNUQmhnV3dPV0NIMEZMWUhsUHF3SGFDdmNJbjJaYm9zQ2V2ZlBUUmlGRmNndkh1a0NqV3dyYzNHckdoMWZzQW9mOEVhVVJlS1hrQ0I0L016Rk5vOTdxTHBGaUtGWXYva05SNVlReFFiUUVvZmtaMk91RU9IcXFUNmdGVHBydThDTjd4LytqYVprWkdSa1pHUmNWK3gvckxVTmNNTXFVQXNjZ25Gb2NtcHFrVHpxeW13VkFQeGZKNVBuSVVVUU9VS1QwNHRFZFdaeXYzSkNRU245NldTNHBEOTdRZnlXMjVBN05oU0FieWhtVmowRkVsdEE0dmRpeWdCaWJYaG9VWWd5a0NVUDdId1BURGVFcUFJY0hWTWtaZzdaeDRrMHVGQU5zNjNoUFFYQ29STEF3ZGdHc3I5QXo3UXY3c2dRR2dnMWFQbC9CSkxFeEJXZ0c0UkZSTEZJbUdtSXF1UEMva2xFR3lDRzBBdUFYYUpKQytCOEZWZTlOWVFERWNYQjhnNkFRY2pZSjFnb0pJZ2dIV0NyRlIwUzZrUkhONSs0QnpGaThOYW9OMzVOUnhVdkwrSkpkWnI3UFY0d0s2Zmo4bkl5TWpJeU5ocjNPeGRYQVlxN0ZIWndCNmJEU3pTaDRzRjB1dENocW8wTkF2YVQxaEx6WHdGaW5tQ3ptZUR1Y0VRSzE4VFRhUW9GZ1A3Yk5DK1JaNE9UNFQ2Z1FvZ0RGWWsrMVF4UWxqMTlRR1NBV0tpTFlwOFAwQWcxR2J6MVVMZldITGc5aVVuUU5LNVFRSmN1a20wNGJsS0xIMkdnRUpDWStIelhBWldDdkhLY28zQnA2TUlhQ2pTWFhSSnlPeGVxaG56RWFGOTNNZkZHVy9PMTZadkRMNVRNNE1KSWp1anovY0h5cGtRdXV6UndXSjkzQktkSXQrd0NSQVBsOWtwZTJJa2tiMm1GZ0dseGgvaTQwZDNFSGZkdm95TWpJeU11NDN5bHQvSUFtR0huTjVpSXQ3d0tmYnYwMVJBY0pxRlJsOWxjallRU25iUXFLZ0M0ZllPd1NKdDZONnRyRTB0d1o5a04vUHFOcFRRZUlDdnI0VExzRFlDMDZVN0JNanNoUyt2MS9hVDdJd1FZRDVMY2dSUVhNVDJGckJmQkxqWjYxNTFqREVsazl0UEZmcFVnazJ5cmVndXNYMjVCSmJ3QUZFZk0rWUk2dkdBdGk0YlR0aXpCK1RqZlFDckVSeWhLYjJYOEQ2QTl3WDc1UDR0NG5lQllKZVA2cGRoZy9nUWw4TVd2eXR6ZVNUamdPUUJ5blFkaC9pWEtkeE9yR0ovUmtaR1JzYjlRbVhpaEdyNStnOEdHZzl1VGgrS29WWnVOSXpWK0N3UnVjRkJFeXIxbVZqeDRpck94d00xQmhpckI2USsyZU5RaTRlcVIrYUY2bUVMdG9NekNSN1Y5UkFGZS9adlFvZ05peVk4RlBTVVRGc0xwOFRlVG1NdWk1bXR3N2JjYVQwWXcyQUE0d0ZSUUlsa2dxKzFEUXJOaGttb3hTNUpxK3U2Yk1BSUdSRUNFQU5nWEhUZ1d6d2dCT2hESDJsMG9UUTREOEQ1Tk1rdEJnTnl3QUVNam84cndBVE1aclBZN0pHeEJvSkNrSUJEUWlBWTA5RUdUVWlCQ1drVXBJU2ZHUFI1QUF3QmZaaUcyejdBeWMxeWVLVHhpZDM5eEJOd2ZIcjRPMExBNDhlUEZUdmhZckYxcjR0eUFvejluMk1DcUV1QnRwLzZHRFIwb0FZZkcvUjZ3SkV4SFlaSGZoeWdzdjdmRVdDT2o0Ylltc1A1QStwTDRNa1RmQW5NbEQ0RityM2JvYkt2VHlUQTJQL3c3UE4rQWdxMlFXOHBpcU1DcFRCd2Vub0t2WDBBSEdrR3RQMllBUHZURVdBN1FVVEF1ZG43L054dE9HNDZ3V05tRHRwQkVrQnpON3JCRXZBRkhwK1lUQi9xOTdxUEFONGdIRnFnQmk4dUxzQzdxUENBNm1nNDFHLytFckJ5UHdFWERkb054UmhPeCtNNWpQRXpRdWdTMGh0K2IxL1kzZ0VuWU1BSUFPSUJFMjkvaElEdWNFOHRtTXNOT2dLNEIxUkhGdTRVQ1JsTUh6djB4emNhamNmZFhXRHMyaDhUQXJCQ2tvRFVKWURMbXo2dzdpcDNCRlMwdmU1d1RSd0FuNmtlTUE5STNRWWJmU1owREtieXQrN09YakdJMWlkUGNmTnlBeWZBTWxDcnphR3FwaFlyeEhvY0xIUkpWeWNuZkdVY2J0VCtqSXlNakl3OXg3Tm44ZkpTekcwVG1GdE84clpUK1hUM1MzdWIrdEtKYmJMZDVkaVRWcDUwK3phaHllSFNzbEovWVByVTBmdWF6clpPMkNaOTIvWkNDVlhsR1JpWktQSnlQUFJ4eUlGV2VYTFFCWEpCS2lxLzNkaXZFQU42WndNMjAwUWptN0VKQlplV20vUFJXVkNiWUs3czd1Mmw0WGFDeitsemdPZk1maE1vblhyN1RXemVaYjk4ZGJnSXpCVDhVYjhlWVlVcWZaNHJWSi9NRGJJRGdQcVR1bEoveHZudFdBdGpJaXNxbnd4T2tHejBuMDc3RkFSb1k3OUdkQTZIUEU0ck95MTk2TmlNV0hUWmxTU0FwY09nWHB5L2ZIVjJqb2FOS3UzZmZzQW5SY0JmNEsvNk5jSUc2dEl4azNIeW9YUGpBU3FmVWdYYllONVB6cEwybmprUjlRTWplRFRWSERUQ2dSdXhPZWdqb08wRnZLelAvdC9nbVZkSTI0K0c3TkllOEpYNld2M2REeWxkTUErNFlCNXd3VHlndGQrZHdScWFUcXJMYjFsNzN6VFNONTJDTnBuSHVRT1lQc0RibHliZ3hma1hoL29WdHIrTjFERUJKZGhSSnlkL0JkL3ExeitjYk5yRDE3aVZLeWFqY252OWFyaE9rUlBnc3J1dUQ2RG1OUHdwRE5yTHcyQ29UZ0huaTR5QUxyMEwyOSt0aUtBRUlQbjg2OGVqeC8vOHJwV1AzT0VPbDVPbjlPd3BjUW0wTWhhZlAvZXk4ZjF1dkROSWdHTFFHOHo0WU85OUVOZ2c5NWV0d3Y0dVlKWVk4ZlVHSFlINmo2ZnNjSEZaTWZ0bEFsOWkrOVhMNzNYM04vbitaU3RPemZWZlJ2WVhocmJkS09wRWdWUVRnL3dzRHVERDNrd09mUU5NVEo1eSsvbHRVRFdMdW55eG5SRjQ2SXFsQnpHTVk0WDdpbmdnUkVGaW9JeU1qSXlNSFdDSUI2Wk5LQWNYc2VvM3ZMVFFUa1ZFNzM0OGRsd0pKU3owK3dMZm1pOEJoWnFmdzNENHd3L3dIVkxuRWQ1L2ZnWXZYc0RaM01sc3ZZVWJibkRqRFozTU4zVEpHNCtieGpBYURsOFRCcmk5cXhFdzFjY2FvMndUTkFNTEhvMmYrc2pyWHdiLzlxSG9ZcWdQTUJYSlRWZk9wbXJaSDIzeTZ1dm8wTEhTeVk2ZkhHd0tmSEpsQXVNRnZPYmpEWXJJcXhCZ1FpMjBoN0hkL25ZVkxtbm8rZWFOVW0vZWVIMkdDdW9wbnRuaEJKQWxJMkFIbzlDQ2gxSTFReFVkQWJxcUdZOUJCTHd5YzNXNHdZVmh2WThBNEJvSWMxbDVNN3ZuUFdwaFpXOS9TZXMzbjM3eTlhMHVHcUZ3RlFac1FRYmQzODZEb2dwZ0VrK2R6eW5zQVpNSlhxOCtuczlOZXVrSjBQWXJOQVRHR2VmSlFsaGtMbzdEVFhyK3kzYk5pT3NEdnJYVHovQzJxMURYWkg4NGlSTndyUDg4TmordTJEallFRTZSQnhEOUtuajE2dWpWSEM2N0E3NDIybzAyUndEM2dCK3Q3RWJsV3Z1OWdlT0Z4U25kM1JPbVQrbkp5UWtob1Bsc3hWT05jLzNURWRCb3MranRBK1p6Y3dIZ1R2RDFjRGphWUNjSXRBOHc5aTg4QThiK21xU2pjNlB2cWQ5OThRZ3VFUVBtUU1lbzIzT0ROODYrcDAvYm4xYnVCa1Q2K29CaE5aL1BZWTRaQUhZYjNQUmQ0TGtabVBYNjhOUnRNWm40QVN2ZEErcWYwak1BNU1QOWVlZzI4TnVnOVFpTG5qNUEzM1UxTUFFUzZ4SEFVTnB6Lzl6RkFZRTFncVFETVQzRzZ4STlwd2R3L2FJZ0tvSENTMVlHbFJuU3E5eUNqZFhqZ04zaitOMjdZeVJPSHhtdU5BZU5LUHBZdVhJeUl5TWpZeTBNOGVyb3M1OU1GL1BUMmM2MDJUN2VBN3p2aEo5ZHIvdnpEalhhTHA0WWM1KzB3bGx6eHpIdjNnZG1NTU03L0NjUXpLZ1ZCcVlUbUZuK1orbUttOEo3azBBNUYvamdDZmpRMVdCaFF5aU9xRDBsWXVxQmIrQXl6TXc5SGEyRzNtNmM4cVF4K0FscW5JY2VRcCtTYjZpOVV5UVdiaHI1NCtBam5aMFZ6VzJUQU4wRG1CVDZQV21jNmpEQkUyUEsydStuRjQzZHlQN1EwdDFwT2NYMmZkUnZIMG1GMlE0SnFOMzVybkhqVkllYVhmSUFWeVV1dy9hSENDaUp5OWlGNWwxNjIxendlSThLWnJQWjlpSmRiN0RYSjNVUzBPU3J0WjEwaW10N3dIWTdRZXNBelVNejFvWjNub0IzcUZKL0gxOGo5N0ZZdXc4UURONG9lS2YzMG9zdmNTVzJFeExvK1ZjYnVBdW8vc1VJbThmTUc5eG9jTzNFYTE5SjlnRllpdm5ISjJLbnlmb3ZabGdXM3Y2eVN4MzJhYlFpSXlNakl5UGpobEZEVEx4cHdJZ0ZNblRwNkEzZzRJREtOWStzdGt3QU1Bb0lBYmFzeEJYcVVXbmVTQVdUTWp0NTBsVHFUMjlyRmp2WG9oanNETm0yWVBYREZsSUNtckpPWjN0NnRIbThBaUVBbDBzQ2VMSUlvcklSdCtjRmJldy9RUnNvQVhiNG8xWFNmb3l3em0wRlRNQW9ZQk52THlGdTh2OEhwTEJ0RDFpS2dDMTd3SGI3QUk2ZDl3RmJ2Z3VBSUdUSGQ0RTl3RzdqZ0l5TWpJeU0rNDM0YzJSM0hlVi9GZng2anRadTZpamw4aDU5VDY1NWpoUityZEh6RE9QNmJlQUJDaGViOE84L1dGWGVPeXpnZjVvQWhWWW5LeFA3Q3dhQWYxYWZKdThiU3JoUzZ0ZGFYZUduclJlbk9xT2x6OWQ2UXdZbkEvM1RMZCtHRTdxZTNjaEE1WUY1RGZZMHZLM2FkZk9YL2d5TnAyQlcyNU1IZHhBQjlxdlJpaVAzL1hwUVFGR1lEVTQrTWkvLy9YdW1YRzhwanZhVUFPc0JHbGY0akp0K1lZRXplRXpBZHcwNkYxOVIzanVNN0Qxd2l0YTg2R1IwQ0tmREhnTHVYQ2M0QnJpNnZNTGRmak1jNFZOU1VOc2RvZG8yeHUvMStYbC9LNSthejhqSXlNaFlHL3o1Z0pUTUYxR3RLcS9hM3JweUN2ejVnSlRNbDlHdEtxL2EzcnB5Q21mUTRXd1ptUytrWEZWZXRiMTE1U1Q0OHdFZi9BR2NmRzFpdyt0V2JwYlMydkozblF4Y1ZyM2xIM3o1aDk3MkZVVEx6WXBPVms3bDVoRCtlWWNZd0RjQW5ld09vdHJaNE90clBEdWNxaS9MUlgwL1JSNHF4N05uNFU4ZytxamZmdnVONkdmK25DODV2d2F1SGphWXl1YnF2V1lLWTRWRWZTVU1pdGRuQkNUMVVlNjNSNTQzOW0rT2dDbjZEcm9BQWFIUFZReEt0aC93a0pnSG1HOGJtUU1zVDBENkVqRGZ2aFZSS08zeXdPUVVnUkE3bm1MMXVhd1ptSGYxaytEUEJ3UTZOZGNKK2s2TWQxTEE1ZjVPTmRoSjh2WjVKMHZMSFQ5OXNya0dPam1KYmQvRzFyMk5yaXFuc2UxQVp0MUFhbFU1alcySHN1dUcwcXZLR1JrWkdSa1pHUkcwZ2NPTnlYc1A5djhEMC9JZEpBRGlCTmlYbDMzMjdXUkdnT0wvOUhDLzBYd2xJVVJrUmhDNHR6NlovZnU3ZlVmMmdIdmZCOXozdTBCR1JrWkdSa2JHcGxIY25rZ2d1UW9TcXRVWHVoYnMvd1B0TXdxVjBIVUpBdmo1dmszMmI4SUR1TDIzeW43cUFYWjV1MzJoYlJYN2QzbzgyRGYxRlpYdmJoOVFPZmh5eGxkci8rM3hnWFU5b0ttdnNIeXI3Ri9YQTI2OS9ldmVCWHJzdjdOOVFBTGUvdHZqQTBrUFdBWEdidmVia2JIbitEL0o1bk1jSHp4MVVBQUFBQUJKUlU1RXJrSmdnZz09KS8qe2ljb25zQ29udGVudH0qLzsNCiAgICBoZWlnaHQ6IDE2cHg7DQogICAgd2lkdGg6IDE2cHg7DQp9DQoNCi51aS13aWRnZXQtY29udGVudCAudWktaWNvbiB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRHdDQU1BQUFEWVNVcjVBQUFBN1ZCTVZFVWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVR3dzRnVUFBQUFUblJTVGxNQUdCQXlCQWhRdjRPWkxpSlVjRUJtWUJvU3pRd2dQQlpDU0VvZVdpWXdVaXlGTkllQncyckp6OGM0UkJ5OXVYeXJ0YVdOcWEyektQMmZKTzhLQmdLUG8yS1ZvYTlzMzUxR1BtNStrV2hvMGtqOUFBQVBoVWxFUVZSNG5PMWRqV0xidGhFR3lVaXE1WVNTTFh0cDdGcExPbWZ6a214cjEyNnRtaTJwMDNSSjEvWGUvM0VHZ0FSeFB5QWdSYklrMi9oa1N6NENKTzQrSHNFN0FKU1Z5c2pJMkFNVVVPeGFoWjJpQU5oekJ0WldyNEJvSVJTWUFWTjV1NFF3RHdRRFJiY3dmVWk1S1Mzd0Z1RG1GblFMYTREdGIvL2Nxa3R3RDVRRUZGd2ZVczdQb0NDQTd5NGJFSlZGaXpjSW9iOEttaEFwbHd3cVZqdCs5RkJsM3VJTlFuaXdFaXJ5RXl3OUpIcUdwUWRFRk5pK0I0UVE3UU9pSGh5c0lQb0F4VXF4dmR2dkE5SzQyYnNBdjRTMmZ4ZllPZTU3SUpTUmtaR1JrWkd4eDdqeFNIREhjUkJYUU1UeUlqSW5CZ0h3QkovYkV4OFBFQU5DK3VoYnBTU2dnQ0JBVk9EVmFicEkxUy9rNFdMWnBUbjZOcE1ob1g5WTQwaHhZRVJGcE1jcVVzNEFsb0N0RFFkSUQxWWhueVhaMmhMakFZV2lPOUR5MVBEQjd0UGhJcUx4K3VNQjhnclphUitReGwyL0MyUmtaR1JrWkdSazdBN3JCZjdKMERSNS9MVVRqelVQSVBTUEd2UUppVkppQjdrY1FDaVVPSnJjRk50RFpJZjJ4YXJRM2FHdkxOeEFWSUZBYWJ6OTBCRmlCSWx5Y1RCaGdXd09XQ0gwRkxZSGxQcXdIYUN2Y0luMlpib3NDZXZmUFRSaUZGY2d2SHVrQ2pXd3JjM0dyR2gxZnNBb2Y4RWFVUmVLWGtDQjQvTXpGTm85N3FMcEZpS0ZZdi9rTlI1WVF4UWJRRW9ma1oyT3VFT0hxcVQ2Z0ZUcHJ1OENON3gvK2phWmtaR1JrWkdSY1YreC9yTFVOY01NcVVBc2NnbkZvY21wcWtUenF5bXdWQVB4Zko1UG5JVVVRT1VLVDA0dEVkV1p5djNKQ1FTbjk2V1M0cEQ5N1FmeVcyNUE3TmhTQWJ5aG1WajBGRWx0QTR2ZGl5Z0JpYlhob1VZZ3lrQ1VQN0h3UFREZUVxQUljSFZNa1pnN1p4NGswdUZBTnM2M2hQUVhDb1JMQXdkZ0dzcjlBejdRdjdzZ1FHZ2cxYVBsL0JKTEV4QldnRzRSRlJMRkltR21JcXVQQy9rbEVHeUNHMEF1QVhhSkpDK0I4RlZlOU5ZUURFY1hCOGc2QVFjallKMWdvSklnZ0hXQ3JGUjBTNmtSSE41KzRCekZpOE5hb04zNU5SeFV2TCtKSmRacjdQVjR3SzZmajhuSXlNakl5TmhyM094ZFhBWXE3Rkhad0I2YkRTelNoNHNGMHV0Q2hxbzBOQXZhVDFoTHpYd0Zpbm1Dem1lRHVjRVFLMThUVGFRb0ZnUDdiTkMrUlo0T1Q0VDZnUW9nREZZaysxUXhRbGoxOVFHU0FXS2lMWXA4UDBBZzFHYnoxVUxmV0hMZzlpVW5RTks1UVFKY3VrbTA0YmxLTEgyR2dFSkNZK0h6WEFaV0N2SEtjbzNCcDZNSWFDalNYWFJKeU94ZXFobnpFYUY5M01mRkdXL08xNlp2REw1VE00TUpJanVqei9jSHlwa1F1dXpSd1dKOTNCS2RJdCt3Q1JBUGw5a3BlMklra2IybUZnR2x4aC9pNDBkM0VIZmR2b3lNakl5TXU0M3lsdC9JQW1HSG5ONWlJdDd3S2ZidjAxUkFjSnFGUmw5bGNqWVFTbmJRcUtnQzRmWU93U0p0Nk42dHJFMHR3WjlrTi9QcU5wVFFlSUN2cjRUTHNEWUMwNlU3Qk1qc2hTK3YxL2FUN0l3UVlENUxjZ1JRWE1UMkZyQmZCTGpaNjE1MWpERWxrOXRQRmZwVWdrMnlyZWd1c1gyNUJKYndBRkVmTStZSTZ2R0F0aTRiVHRpekIrVGpmUUNyRVJ5aEtiMlg4RDZBOXdYNzVQNHQ0bmVCWUplUDZwZGhnL2dRbDhNV3Z5dHplU1RqZ09RQnluUWRoL2lYS2R4T3JHSi9Sa1pHUnNiOVFtWGloR3I1K2c4R0dnOXVUaCtLb1ZadU5JelYrQ3dSdWNGQkV5cjFtVmp4NGlyT3h3TTFCaGlyQjZRKzJlTlFpNGVxUithRjZtRUx0b016Q1I3VjlSQUZlL1p2UW9nTml5WThGUFNVVEZzTHA4VGVUbU11aTVtdHc3YmNhVDBZdzJBQTR3RlJRSWxrZ3ErMURRck5oa21veFM1SnErdTZiTUFJR1JFQ0VBTmdYSFRnV3p3Z0JPaERIMmwwb1RRNEQ4RDVOTWt0QmdOeXdBRU1qbzhyd0FUTVpyUFk3Skd4Qm9KQ2tJQkRRaUFZMDlFR1RVaUJDV2tVcElTZkdQUjVBQXdCZlppRzJ6N0F5YzF5ZUtUeGlkMzl4Qk53ZkhyNE8wTEE0OGVQRlR2aFlyRjFyNHR5QW96OW4yTUNxRXVCdHAvNkdEUjBvQVlmRy9SNndKRXhIWVpIZmh5Z3N2N2ZFV0NPajRiWW1zUDVBK3BMNE1rVGZBbk1sRDRGK3IzYm9iS3ZUeVRBMlAvdzdQTitBZ3EyUVc4cGlxTUNwVEJ3ZW5vS3ZYMEFIR2tHdFAyWUFQdlRFV0E3UVVUQXVkbjcvTnh0T0c0NndXTm1EdHBCRWtCek43ckJFdkFGSHArWVRCL3E5N3FQQU40Z0hGcWdCaTh1THNDN3FQQ0E2bWc0MUcvK0VyQnlQd0VYRGRvTnhSaE94K001alBFelF1Z1MwaHQrYjEvWTNnRW5ZTUFJQU9JQkUyOS9oSUR1Y0U4dG1Nc05PZ0s0QjFSSEZ1NFVDUmxNSHp2MHh6Y2FqY2ZkWFdEczJoOFRBckJDa29EVUpZRExtejZ3N2lwM0JGUzB2ZTV3VFJ3QW42a2VNQTlJM1FZYmZTWjBES2J5dCs3T1hqR0kxaWRQY2ZOeUF5ZkFNbENyemFHcXBoWXJ4SG9jTEhSSlZ5Y25mR1VjYnRUK2pJeU1qSXc5eDdObjhmSlN6RzBUbUZ0TzhyWlQrWFQzUzN1Yit0S0piYkxkNWRpVFZwNTAremFoeWVIU3NsSi9ZUHJVMGZ1YXpyWk8yQ1o5Mi9aQ0NWWGxHUmlaS1BKeVBQUnh5SUZXZVhMUUJYSkJLaXEvM2RpdkVBTjZad00yMDBRam03RUpCWmVXbS9QUldWQ2JZSzdzN3UybDRYYUN6K2x6Z09mTWZoTW9uWHI3VFd6ZVpiOThkYmdJekJUOFViOGVZWVVxZlo0clZKL01EYklEZ1BxVHVsSi94dm50V0F0aklpc3Fud3hPa0d6MG4wNzdGQVJvWTc5R2RBNkhQRTRyT3kxOTZOaU1XSFRabFNTQXBjT2dYcHkvZkhWMmpvYU5LdTNmZnNBblJjQmY0Sy82TmNJRzZ0SXhrM0h5b1hQakFTcWZVZ1hiWU41UHpwTDJuamtSOVFNamVEVFZIRFRDZ1J1eE9lZ2pvTzBGdkt6UC90L2dtVmRJMjQrRzdOSWU4Slg2V3YzZER5bGRNQSs0WUI1d3dUeWd0ZCtkd1JxYVRxckxiMWw3M3pUU041MkNOcG5IdVFPWVBzRGJseWJneGZrWGgvb1Z0citOMURFQkpkaFJKeWQvQmQvcTF6K2NiTnJEMTdpVkt5YWpjbnY5YXJoT2tSUGdzcnV1RDZEbU5Qd3BETnJMdzJDb1RnSG5pNHlBTHIwTDI5K3RpS0FFSVBuODY4ZWp4Ly84cnBXUDNPRU9sNU9uOU93cGNRbTBNaGFmUC9leThmMXV2RE5JZ0dMUUc4ejRZTzk5RU5nZzk1ZXR3djR1WUpZWThmVUdIWUg2ajZmc2NIRlpNZnRsQWw5aSs5WEw3M1gzTi9uK1pTdE96ZlZmUnZZWGhyYmRLT3BFZ1ZRVGcvd3NEdUREM2t3T2ZRTk1USjV5Ky9sdFVEV0x1bnl4blJGNDZJcWxCekdNWTRYN2luZ2dSRUZpb0l5TWpJeU1IV0NJQjZaTktBY1hzZW8zdkxUUVRrVkU3MzQ4ZGx3SkpTejArd0xmbWk4QmhacWZ3M0Q0d3cvd0hWTG5FZDUvZmdZdlhzRFozTWxzdllVYmJuRGpEWjNNTjNUSkc0K2J4akFhRGw4VEJyaTlxeEV3MWNjYW8yd1ROQU1MSG8yZitzanJYd2IvOXFIb1lxZ1BNQlhKVFZmT3BtclpIMjN5NnV2bzBMSFN5WTZmSEd3S2ZISmxBdU1Gdk9iakRZcklxeEJnUWkyMGg3SGQvbllWTG1ubytlYU5VbS9lZUgyR0N1b3BudG5oQkpBbEkyQUhvOUNDaDFJMVF4VWRBYnFxR1k5QkJMd3ljM1c0d1lWaHZZOEE0Qm9JYzFsNU03dm5QV3BoWlc5L1NlczNuMzd5OWEwdUdxRndGUVpzUVFiZDM4NkRvZ3BnRWsrZHp5bnNBWk1KWHE4K25zOU5ldWtKMFBZck5BVEdHZWZKUWxoa0xvN0RUWHIreTNiTmlPc0R2clhUei9DMnExRFhaSDg0aVJOd3JQODhOait1MkRqWUVFNlJCeEQ5S25qMTZ1alZIQzY3QTc0MjJvMDJSd0QzZ0IrdDdFYmxXdnU5Z2VPRnhTbmQzUk9tVCtuSnlRa2hvUGxzeFZPTmMvM1RFZEJvcytqdEErWnpjd0hnVHZEMWNEamFZQ2NJdEE4dzlpODhBOGIrbXFTamM2UHZxZDk5OFFndUVRUG1RTWVvMjNPRE44NitwMC9ibjFidUJrVDYrb0JoTlovUFlZNFpBSFliM1BSZDRMa1ptUFg2OE5SdE1abjRBU3ZkQStxZjBqTUE1TVA5ZWVnMjhOdWc5UWlMbmo1QTMzVTFNQUVTNnhIQVVOcHovOXpGQVlFMWdxUURNVDNHNnhJOXB3ZHcvYUlnS29IQ1MxWUdsUm5TcTl5Q2pkWGpnTjNqK04yN1l5Uk9IeG11TkFlTktQcFl1WEl5SXlNall5ME04ZXJvczU5TUYvUFQyYzYwMlQ3ZUE3enZoSjlkci92ekRqWGFMcDRZYzUrMHdsbHp4ekh2M2dkbU1NTTcvQ2NRektnVkJxWVRtRm4rWittS204SjdrMEE1Ri9qZ0NmalExV0JoUXlpT3FEMGxZdXFCYitBeXpNdzlIYTJHM202YzhxUXgrQWxxbkljZVFwK1NiNmk5VXlRV2JocjU0K0FqblowVnpXMlRBTjBEbUJUNlBXbWM2akRCRTJQSzJ1K25GNDNkeVA3UTB0MXBPY1gyZmRSdkgwbUYyUTRKcU4zNXJuSGpWSWVhWGZJQVZ5VXV3L2FIQ0NpSnk5aUY1bDE2MjF6d2VJOEtaclBaOWlKZGI3RFhKM1VTME9TcnRaMTBpbXQ3d0hZN1Flc0F6VU16MW9aM25vQjNxRkovSDE4ajk3Rll1dzhRRE40b2VLZjMwb3N2Y1NXMkV4TG8rVmNidUF1by9zVUltOGZNRzl4b2NPM0VhMTlKOWdGWWl2bkhKMktueWZvdlpsZ1czdjZ5U3gzMmFiUWlJeU1qSXlQamhsRkRUTHhwd0lnRk1uVHA2QTNnNElES05ZK3N0a3dBTUFvSUFiYXN4QlhxVVduZVNBV1RNanQ1MGxUcVQyOXJGanZYb2hqc0RObTJZUFhERmxJQ21ySk9aM3Q2dEhtOEFpRUFsMHNDZUxJSW9ySVJ0K2NGYmV3L1FSc29BWGI0bzFYU2ZveXd6bTBGVE1Bb1lCTnZMeUZ1OHY4SHBMQnREMWlLZ0MxN3dIYjdBSTZkOXdGYnZndUFJR1RIZDRFOXdHN2pnSXlNakl5TSs0MzRjMlIzSGVWL0ZmeDZqdFp1NmlqbDhoNTlUNjU1amhSK3JkSHpET1A2YmVBQkNoZWI4TzgvV0ZYZU95emdmNW9BaFZZbkt4UDdDd2FBZjFhZkp1OGJTcmhTNnRkYVhlR25yUmVuT3FPbHo5ZDZRd1luQS8zVExkK0dFN3FlM2NoQTVZRjVEZlkwdkszYWRmT1gvZ3lOcDJCVzI1TUhkeEFCOXF2UmlpUDMvWHBRUUZHWURVNCtNaS8vL1h1bVhHOHBqdmFVQU9zQkdsZjRqSnQrWVlFemVFekFkdzA2RjE5UjNqdU03RDF3aXRhODZHUjBDS2ZESGdMdVhDYzRCcmk2dk1MZGZqTWM0Vk5TVU5zZG9kbzJ4dS8xK1hsL0s1K2F6OGpJeU1oWUcvejVnSlRNRjFHdEtxL2EzcnB5Q3Z6NWdKVE1sOUd0S3EvYTNycHlDbWZRNFd3Wm1TK2tYRlZldGIxMTVTVDQ4d0VmL0FHY2ZHMWl3K3RXYnBiUzJ2SjNuUXhjVnIzbEgzejVoOTcyRlVUTHpZcE9WazdsNWhEK2VZY1l3RGNBbmV3T290clo0T3RyUER1Y3FpL0xSWDAvUlI0cXg3Tm40VThnK3FqZmZ2dU42R2YrbkM4NXZ3YXVIamFZeXVicXZXWUtZNFZFZlNVTWl0ZG5CQ1QxVWU2M1I1NDM5bStPZ0NuNkRyb0FBYUhQVlF4S3RoL3drSmdIbUc4Ym1RTXNUMEQ2RWpEZnZoVlJLTzN5d09RVWdSQTdubUwxdWF3Wm1IZjFrK0RQQndRNk5kY0orazZNZDFMQTVmNU9OZGhKOHZaNUowdkxIVDk5c3JrR09qbUpiZC9HMXIyTnJpcW5zZTFBWnQxQWFsVTVqVzJIc3V1RzBxdktHUmtaR1JrWkdSRzBnY09OeVhzUDl2OEQwL0lkSkFEaUJOaVhsMzMyN1dSR2dPTC85SEMvMFh3bElVUmtSaEM0dHo2Wi9mdTdmVWYyZ0h2ZkI5ejN1MEJHUmtaR1JrYkdwbEhjbmtnZ3VRb1NxdFVYdWhicy93UHRNd3FWMEhVSkF2ajV2azMyYjhJRHVMMjN5bjdxQVhaNXUzMmhiUlg3ZDNvODJEZjFGWlh2Ymg5UU9maHl4bGRyLyszeGdYVTlvS212c0h5cjdGL1hBMjY5L2V2ZUJYcnN2N045UUFMZS90dmpBMGtQV0FYR2J2ZWJrYkhuK0QvSjVuTWNIengxVUFBQUFBQkpSVTVFcmtKZ2dnPT0pLyp7aWNvbnNDb250ZW50fSovOyB9DQoNCi51aS13aWRnZXQtaGVhZGVyIC51aS1pY29uIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFEd0NBTUFBQURZU1VyNUFBQUE3VkJNVkVVa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpVHd3NGdVQUFBQVRuUlNUbE1BR0JBeUJBaFF2NE9aTGlKVWNFQm1ZQm9TelF3Z1BCWkNTRW9lV2lZd1VpeUZOSWVCdzJySno4YzRSQnk5dVh5cnRhV05xYTJ6S1AyZkpPOEtCZ0tQbzJLVm9hOXMzNTFHUG01K2tXaG8wa2o5QUFBUGhVbEVRVlI0bk8xZGpXTGJ0aEVHeVVpcTVZU1NMWHRwN0ZwTE9tZnprbXhyMTI2dG1pMnAwM1JKMS9YZS8zRUdnQVJ4UHlBZ1JiSWsyL2hrU3o0Q0pPNCtIc0U3QUpTVnlzakkyQU1VVU94YWhaMmlBTmh6QnRaV3I0Qm9JUlNZQVZONXU0UXdEd1FEUmJjd2ZVaTVLUzN3RnVEbUZuUUxhNER0Yi8vY3FrdHdENVFFRkZ3ZlVzN1BvQ0NBN3k0YkVKVkZpemNJb2I4S21oQXBsd3dxVmp0KzlGQmwzdUlOUW5pd0VpcnlFeXc5SkhxR3BRZEVGTmkrQjRRUTdRT2lIaHlzSVBvQXhVcXh2ZHZ2QTlLNDJic0F2NFMyZnhmWU9lNTdJSlNSa1pHUmtaR3h4N2p4U0hESGNSQlhRTVR5SWpJbkJnSHdCSi9iRXg4UEVBTkMrdWhicFNTZ2dDQkFWT0RWYWJwSTFTL2s0V0xacFRuNk5wTWhvWDlZNDBoeFlFUkZwTWNxVXM0QWxvQ3REUWRJRDFZaG55WFoyaExqQVlXaU85RHkxUERCN3RQaElxTHgrdU1COGdyWmFSK1F4bDIvQzJSa1pHUmtaR1JrN0E3ckJmN0owRFI1L0xVVGp6VVBJUFNQR3ZRSmlWSmlCN2tjUUNpVU9KcmNGTnREWklmMnhhclEzYUd2TE54QVZJRkFhYno5MEJGaUJJbHljVEJoZ1d3T1dDSDBGTFlIbFBxd0hhQ3ZjSW4yWmJvc0NldmZQVFJpRkZjZ3ZIdWtDald3cmMzR3JHaDFmc0FvZjhFYVVSZUtYa0NCNC9NekZObzk3cUxwRmlLRll2L2tOUjVZUXhRYlFFb2ZrWjJPdUVPSHFxVDZnRlRwcnU4Q043eC8ramFaa1pHUmtaR1JjVit4L3JMVU5jTU1xVUFzY2duRm9jbXBxa1R6cXltd1ZBUHhmSjVQbklVVVFPVUtUMDR0RWRXWnl2M0pDUVNuOTZXUzRwRDk3UWZ5VzI1QTdOaFNBYnlobVZqMEZFbHRBNHZkaXlnQmliWGhvVVlneWtDVVA3SHdQVERlRXFBSWNIVk1rWmc3Wng0azB1RkFOczYzaFBRWENvUkxBd2RnR3NyOUF6N1F2N3NnUUdnZzFhUGwvQkpMRXhCV2dHNFJGUkxGSW1HbUlxdVBDL2tsRUd5Q0cwQXVBWGFKSkMrQjhGVmU5TllRREVjWEI4ZzZBUWNqWUoxZ29KSWdnSFdDckZSMFM2a1JITjUrNEJ6Rmk4TmFvTjM1TlJ4VXZMK0pKZFpyN1BWNHdLNmZqOG5JeU1qSXlOaHIzT3hkWEFZcTdGSFp3QjZiRFN6U2g0c0YwdXRDaHFvME5BdmFUMWhMelh3RmlubUN6bWVEdWNFUUsxOFRUYVFvRmdQN2JOQytSWjRPVDRUNmdRb2dERllrKzFReFFsajE5UUdTQVdLaUxZcDhQMEFnMUdiejFVTGZXSExnOWlVblFOSzVRUUpjdWttMDRibEtMSDJHZ0VKQ1krSHpYQVpXQ3ZIS2NvM0JwNk1JYUNqU1hYUkp5T3hlcWhuekVhRjkzTWZGR1cvTzE2WnZETDVUTTRNSklqdWp6L2NIeXBrUXV1elJ3V0o5M0JLZEl0K3dDUkFQbDlrcGUySWtrYjJtRmdHbHhoL2k0MGQzRUhmZHZveU1qSXlNdTQzeWx0L0lBbUdIbk41aUl0N3dLZmJ2MDFSQWNKcUZSbDlsY2pZUVNuYlFxS2dDNGZZT3dTSnQ2TjZ0ckUwdHdaOWtOL1BxTnBUUWVJQ3ZyNFRMc0RZQzA2VTdCTWpzaFMrdjEvYVQ3SXdRWUQ1TGNnUlFYTVQyRnJCZkJMalo2MTUxakRFbGs5dFBGZnBVZ2syeXJlZ3VzWDI1Qkpid0FGRWZNK1lJNnZHQXRpNGJUdGl6QitUamZRQ3JFUnloS2IyWDhENkE5d1g3NVA0dDRuZUJZSmVQNnBkaGcvZ1FsOE1Xdnl0emVTVGpnT1FCeW5RZGgvaVhLZHhPckdKL1JrWkdSc2I5UW1YaWhHcjUrZzhHR2c5dVRoK0tvVlp1Tkl6VitDd1J1Y0ZCRXlyMW1Wang0aXJPeHdNMUJoaXJCNlErMmVOUWk0ZXFSK2FGNm1FTHRvTXpDUjdWOVJBRmUvWnZRb2dOaXlZOEZQU1VURnNMcDhUZVRtTXVpNW10dzdiY2FUMFl3MkFBNHdGUlFJbGtncSsxRFFyTmhrbW94UzVKcSt1NmJNQUlHUkVDRUFOZ1hIVGdXendnQk9oREgybDBvVFE0RDhENU5Na3RCZ055d0FFTWpvOHJ3QVRNWnJQWTdKR3hCb0pDa0lCRFFpQVkwOUVHVFVpQkNXa1VwSVNmR1BSNUFBd0JmWmlHMno3QXljMXllS1R4aWQzOXhCTndmSHI0TzBMQTQ4ZVBGVHZoWXJGMXI0dHlBb3o5bjJNQ3FFdUJ0cC82R0RSMG9BWWZHL1I2d0pFeEhZWkhmaHlnc3Y3ZkVXQ09qNGJZbXNQNUErcEw0TWtUZkFuTWxENEYrcjNib2JLdlR5VEEyUC93N1BOK0FncTJRVzhwaXFNQ3BUQndlbm9LdlgwQUhHa0d0UDJZQVB2VEVXQTdRVVRBdWRuNy9OeHRPRzQ2d1dObUR0cEJFa0J6TjdyQkV2QUZIcCtZVEIvcTk3cVBBTjRnSEZxZ0JpOHVMc0M3cVBDQTZtZzQxRy8rRXJCeVB3RVhEZG9OeFJoT3grTTVqUEV6UXVnUzBodCtiMS9ZM2dFbllNQUlBT0lCRTI5L2hJRHVjRTh0bU1zTk9nSzRCMVJIRnU0VUNSbE1IenYweHpjYWpjZmRYV0RzMmg4VEFyQkNrb0RVSllETG16Nnc3aXAzQkZTMHZlNXdUUndBbjZrZU1BOUkzUVliZlNaMERLYnl0KzdPWGpHSTFpZFBjZk55QXlmQU1sQ3J6YUdxcGhZcnhIb2NMSFJKVnljbmZHVWNidFQrakl5TWpJdzl4N05uOGZKU3pHMFRtRnRPOHJaVCtYVDNTM3ViK3RLSmJiTGQ1ZGlUVnA1MCt6YWh5ZUhTc2xKL1lQclUwZnVhenJaTzJDWjkyL1pDQ1ZYbEdSaVpLUEp5UFBSeHlJRldlWExRQlhKQktpcS8zZGl2RUFONlp3TTIwMFFqbTdFSkJaZVdtL1BSV1ZDYllLN3M3dTJsNFhhQ3orbHpnT2ZNZmhNb25YcjdUV3plWmI5OGRiZ0l6QlQ4VWI4ZVlZVXFmWjRyVkovTURiSURnUHFUdWxKL3h2bnRXQXRqSWlzcW53eE9rR3owbjA3N0ZBUm9ZNzlHZEE2SFBFNHJPeTE5Nk5pTVdIVFpsU1NBcGNPZ1hweS9mSFYyam9hTkt1M2Zmc0FuUmNCZjRLLzZOY0lHNnRJeGszSHlvWFBqQVNxZlVnWGJZTjVQenBMMm5qa1I5UU1qZURUVkhEVENnUnV4T2Vnam9PMEZ2S3pQL3QvZ21WZEkyNCtHN05JZThKWDZXdjNkRHlsZE1BKzRZQjV3d1R5Z3RkK2R3UnFhVHFyTGIxbDczelRTTjUyQ05wbkh1UU9ZUHNEYmx5Ymd4ZmtYaC9vVnRyK04xREVCSmRoUkp5ZC9CZC9xMXorY2JOckQxN2lWS3lhamNudjlhcmhPa1JQZ3NydXVENkRtTlB3cEROckx3MkNvVGdIbmk0eUFMcjBMMjkrdGlLQUVJUG44NjhlangvLzhycFdQM09FT2w1T245T3dwY1FtME1oYWZQL2V5OGYxdXZETklnR0xRRzh6NFlPOTlFTmdnOTVldHd2NHVZSllZOGZVR0hZSDZqNmZzY0hGWk1mdGxBbDlpKzlYTDczWDNOL24rWlN0T3pmVmZSdllYaHJiZEtPcEVnVlFUZy93c0R1REQza3dPZlFOTVRKNXkrL2x0VURXTHVueXhuUkY0NklxbEJ6R01ZNFg3aW5nZ1JFRmlvSXlNakl5TUhXQ0lCNlpOS0FjWHNlbzN2TFRRVGtWRTczNDhkbHdKSlN6MCt3TGZtaThCaFpxZnczRDR3dy93SFZMbkVkNS9mZ1l2WHNEWjNNbHN2WVViYm5EakRaM01OM1RKRzQrYnhqQWFEbDhUQnJpOXF4RXcxY2NhbzJ3VE5BTUxIbzJmK3Nqclh3Yi85cUhvWXFnUE1CWEpUVmZPcG1yWkgyM3k2dXZvMExIU3lZNmZIR3dLZkhKbEF1TUZ2T2JqRFlySXF4QmdRaTIwaDdIZC9uWVZMbW5vK2VhTlVtL2VlSDJHQ3VvcG50bmhCSkFsSTJBSG85Q0NoMUkxUXhVZEFicXFHWTlCQkx3eWMzVzR3WVZodlk4QTRCb0ljMWw1TTd2blBXcGhaVzkvU2VzM24zN3k5YTB1R3FGd0ZRWnNRUWJkMzg2RG9ncGdFaytkenluc0FaTUpYcTgrbnM5TmV1a0owUFlyTkFUR0dlZkpRbGhrTG83RFRYcit5M2JOaU9zRHZyWFR6L0MycTFEWFpIODRpUk53clA4OE5qK3UyRGpZRUU2UkJ4RDlLbmoxNnVqVkhDNjdBNzQyMm8wMlJ3RDNnQit0N0VibFd2dTlnZU9GeFNuZDNST21UK25KeVFraG9QbHN4Vk9OYy8zVEVkQm9zK2p0QStaemN3SGdUdkQxY0RqYVlDY0l0QTh3OWk4OEE4YittcVNqYzZQdnFkOTk4UWd1RVFQbVFNZW8yM09ETjg2K3AwL2JuMWJ1QmtUNitvQmhOWi9QWVk0WkFIWWIzUFJkNExrWm1QWDY4TlJ0TVpuNEFTdmRBK3FmMGpNQTVNUDllZWcyOE51ZzlRaUxuajVBMzNVMU1BRVM2eEhBVU5wei85ekZBWUUxZ3FRRE1UM0c2eEk5cHdkdy9hSWdLb0hDUzFZR2xSblNxOXlDamRYamdOM2orTjI3WXlST0h4bXVOQWVOS1BwWXVYSXlJeU1qWXkwTThlcm9zNTlNRi9QVDJjNjAyVDdlQTd6dmhKOWRyL3Z6RGpYYUxwNFljNSswd2xsenh6SHYzZ2RtTU1NNy9DY1F6S2dWQnFZVG1GbitaK21LbThKN2swQTVGL2pnQ2ZqUTFXQmhReWlPcUQwbFl1cUJiK0F5ek13OUhhMkczbTZjOHFReCtBbHFuSWNlUXArU2I2aTlVeVFXYmhyNTQrQWpuWjBWelcyVEFOMERtQlQ2UFdtYzZqREJFMlBLMnUrbkY0M2R5UDdRMHQxcE9jWDJmZFJ2SDBtRjJRNEpxTjM1cm5IalZJZWFYZklBVnlVdXcvYUhDQ2lKeTlpRjVsMTYyMXp3ZUk4S1pyUFo5aUpkYjdEWEozVVMwT1NydFoxMGltdDd3SFk3UWVzQXpVTXoxb1ozbm9CM3FGSi9IMThqOTdGWXV3OFFETjRvZUtmMzBvc3ZjU1cyRXhMbytWY2J1QXVvL3NVSW04Zk1HOXhvY08zRWExOUo5Z0ZZaXZuSEoyS255Zm92WmxnVzN2NnlTeDMyYWJRaUl5TWpJeVBqaGxGRFRMeHB3SWdGTW5UcDZBM2c0SURLTlkrc3Rrd0FNQW9JQWJhc3hCWHFVV25lU0FXVE1qdDUwbFRxVDI5ckZqdlhvaGpzRE5tMllQWERGbElDbXJKT1ozdDZ0SG04QWlFQWwwc0NlTElJb3JJUnQrY0ZiZXcvUVJzb0FYYjRvMVhTZm95d3ptMEZUTUFvWUJOdkx5RnU4djhIcExCdEQxaUtnQzE3d0hiN0FJNmQ5d0Zidmd1QUlHVEhkNEU5d0c3amdJeU1qSXlNKzQzNGMyUjNIZVYvRmZ4Nmp0WnU2aWpsOGg1OVQ2NTVqaFIrcmRIekRPUDZiZUFCQ2hlYjhPOC9XRlhlT3l6Z2Y1b0FoVlluS3hQN0N3YUFmMWFmSnU4YlNyaFM2dGRhWGVHbnJSZW5PcU9sejlkNlF3WW5BLzNUTGQrR0U3cWUzY2hBNVlGNURmWTB2SzNhZGZPWC9neU5wMkJXMjVNSGR4QUI5cXZSaWlQMy9YcFFRRkdZRFU0K01pLy8vWHVtWEc4cGp2YVVBT3NCR2xmNGpKdCtZWUV6ZUV6QWR3MDZGMTlSM2p1TTdEMXdpdGE4NkdSMENLZkRIZ0x1WENjNEJyaTZ2TUxkZmpNYzRWTlNVTnNkb2RvMnh1LzErWGwvSzUrYXo4akl5TWhZRy96NWdKVE1GMUd0S3EvYTNycHlDdno1Z0pUTWw5R3RLcS9hM3JweUNtZlE0V3dabVMra1hGVmV0YjExNVNUNDh3RWYvQUdjZkcxaXcrdFdicGJTMnZKM25ReGNWcjNsSDN6NWg5NzJGVVRMellwT1ZrN2w1aEQrZVljWXdEY0FuZXdPb3RyWjRPdHJQRHVjcWkvTFJYMC9SUjRxeDdObjRVOGcrcWpmZnZ1TjZHZituQzg1dndhdUhqYVl5dWJxdldZS1k0VkVmU1VNaXRkbkJDVDFVZTYzUjU0MzltK09nQ242RHJvQUFhSFBWUXhLdGgvd2tKZ0htRzhibVFNc1QwRDZFakRmdmhWUktPM3l3T1FVZ1JBN25tTDF1YXdabUhmMWsrRFBCd1E2TmRjSitrNk1kMUxBNWY1T05kaEo4dlo1SjB2TEhUOTlzcmtHT2ptSmJkL0cxcjJOcmlxbnNlMUFadDFBYWxVNWpXMkhzdXVHMHF2S0dSa1pHUmtaR1JHMGdjT055WHNQOXY4RDAvSWRKQURpQk5pWGwzMzI3V1JHZ09MLzlIQy8wWHdsSVVSa1JoQzR0ejZaL2Z1N2ZVZjJnSHZmQjl6M3UwQkdSa1pHUmtiR3BsSGNua2dndVFvU3F0VVh1aGJzL3dQdE13cVYwSFVKQXZqNXZrMzJiOElEdUwyM3luN3FBWFo1dTMyaGJSWDdkM284MkRmMUZaWHZiaDlRT2ZoeXhsZHIvKzN4Z1hVOW9LbXZzSHlyN0YvWEEyNjkvZXZlQlhyc3Y3TjlRQUxlL3R2akEwa1BXQVhHYnZlYmtiSG4rRC9KNW5NY0h6eDFVQUFBQUFCSlJVNUVya0pnZ2c9PSkvKntpY29uc0hlYWRlcn0qLzsgfQ0KDQoudWktc3RhdGUtZGVmYXVsdCAudWktaWNvbiB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRHdDQU1BQUFEWVNVcjVBQUFBN1ZCTVZFV0lpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlnaGNwN0FBQUFUblJTVGxNQUdCQXlCQWhRdjRPWkxpSlVjRUJtWUJvU3pRd2dQQlpDU0VvZVdpWXdVaXlGTkllQncyckp6OGM0UkJ5OXVYeXJ0YVdOcWEyektQMmZKTzhLQmdLUG8yS1ZvYTlzMzUxR1BtNStrV2hvMGtqOUFBQVBoVWxFUVZSNG5PMWRqV0xidGhFR3lVaXE1WVNTTFh0cDdGcExPbWZ6a214cjEyNnRtaTJwMDNSSjEvWGUvM0VHZ0FSeFB5QWdSYklrMi9oa1N6NENKTzQrSHNFN0FKU1Z5c2pJMkFNVVVPeGFoWjJpQU5oekJ0WldyNEJvSVJTWUFWTjV1NFF3RHdRRFJiY3dmVWk1S1Mzd0Z1RG1GblFMYTREdGIvL2Nxa3R3RDVRRUZGd2ZVczdQb0NDQTd5NGJFSlZGaXpjSW9iOEttaEFwbHd3cVZqdCs5RkJsM3VJTlFuaXdFaXJ5RXl3OUpIcUdwUWRFRk5pK0I0UVE3UU9pSGh5c0lQb0F4VXF4dmR2dkE5SzQyYnNBdjRTMmZ4ZllPZTU3SUpTUmtaR1JrWkd4eDdqeFNIREhjUkJYUU1UeUlqSW5CZ0h3QkovYkV4OFBFQU5DK3VoYnBTU2dnQ0JBVk9EVmFicEkxUy9rNFdMWnBUbjZOcE1ob1g5WTQwaHhZRVJGcE1jcVVzNEFsb0N0RFFkSUQxWWhueVhaMmhMakFZV2lPOUR5MVBEQjd0UGhJcUx4K3VNQjhnclphUitReGwyL0MyUmtaR1JrWkdSazdBN3JCZjdKMERSNS9MVVRqelVQSVBTUEd2UUppVkppQjdrY1FDaVVPSnJjRk50RFpJZjJ4YXJRM2FHdkxOeEFWSUZBYWJ6OTBCRmlCSWx5Y1RCaGdXd09XQ0gwRkxZSGxQcXdIYUN2Y0luMlpib3NDZXZmUFRSaUZGY2d2SHVrQ2pXd3JjM0dyR2gxZnNBb2Y4RWFVUmVLWGtDQjQvTXpGTm85N3FMcEZpS0ZZdi9rTlI1WVF4UWJRRW9ma1oyT3VFT0hxcVQ2Z0ZUcHJ1OENON3gvK2phWmtaR1JrWkdSY1YreC9yTFVOY01NcVVBc2NnbkZvY21wcWtUenF5bXdWQVB4Zko1UG5JVVVRT1VLVDA0dEVkV1p5djNKQ1FTbjk2V1M0cEQ5N1FmeVcyNUE3TmhTQWJ5aG1WajBGRWx0QTR2ZGl5Z0JpYlhob1VZZ3lrQ1VQN0h3UFREZUVxQUljSFZNa1pnN1p4NGswdUZBTnM2M2hQUVhDb1JMQXdkZ0dzcjlBejdRdjdzZ1FHZ2cxYVBsL0JKTEV4QldnRzRSRlJMRkltR21JcXVQQy9rbEVHeUNHMEF1QVhhSkpDK0I4RlZlOU5ZUURFY1hCOGc2QVFjallKMWdvSklnZ0hXQ3JGUjBTNmtSSE41KzRCekZpOE5hb04zNU5SeFV2TCtKSmRacjdQVjR3SzZmajhuSXlNakl5TmhyM094ZFhBWXE3Rkhad0I2YkRTelNoNHNGMHV0Q2hxbzBOQXZhVDFoTHpYd0Zpbm1Dem1lRHVjRVFLMThUVGFRb0ZnUDdiTkMrUlo0T1Q0VDZnUW9nREZZaysxUXhRbGoxOVFHU0FXS2lMWXA4UDBBZzFHYnoxVUxmV0hMZzlpVW5RTks1UVFKY3VrbTA0YmxLTEgyR2dFSkNZK0h6WEFaV0N2SEtjbzNCcDZNSWFDalNYWFJKeU94ZXFobnpFYUY5M01mRkdXL08xNlp2REw1VE00TUpJanVqei9jSHlwa1F1dXpSd1dKOTNCS2RJdCt3Q1JBUGw5a3BlMklra2IybUZnR2x4aC9pNDBkM0VIZmR2b3lNakl5TXU0M3lsdC9JQW1HSG5ONWlJdDd3S2ZidjAxUkFjSnFGUmw5bGNqWVFTbmJRcUtnQzRmWU93U0p0Nk42dHJFMHR3WjlrTi9QcU5wVFFlSUN2cjRUTHNEWUMwNlU3Qk1qc2hTK3YxL2FUN0l3UVlENUxjZ1JRWE1UMkZyQmZCTGpaNjE1MWpERWxrOXRQRmZwVWdrMnlyZWd1c1gyNUJKYndBRkVmTStZSTZ2R0F0aTRiVHRpekIrVGpmUUNyRVJ5aEtiMlg4RDZBOXdYNzVQNHQ0bmVCWUplUDZwZGhnL2dRbDhNV3Z5dHplU1RqZ09RQnluUWRoL2lYS2R4T3JHSi9Sa1pHUnNiOVFtWGloR3I1K2c4R0dnOXVUaCtLb1ZadU5JelYrQ3dSdWNGQkV5cjFtVmp4NGlyT3h3TTFCaGlyQjZRKzJlTlFpNGVxUithRjZtRUx0b016Q1I3VjlSQUZlL1p2UW9nTml5WThGUFNVVEZzTHA4VGVUbU11aTVtdHc3YmNhVDBZdzJBQTR3RlJRSWxrZ3ErMURRck5oa21veFM1SnErdTZiTUFJR1JFQ0VBTmdYSFRnV3p3Z0JPaERIMmwwb1RRNEQ4RDVOTWt0QmdOeXdBRU1qbzhyd0FUTVpyUFk3Skd4Qm9KQ2tJQkRRaUFZMDlFR1RVaUJDV2tVcElTZkdQUjVBQXdCZlppRzJ6N0F5YzF5ZUtUeGlkMzl4Qk53ZkhyNE8wTEE0OGVQRlR2aFlyRjFyNHR5QW96OW4yTUNxRXVCdHAvNkdEUjBvQVlmRy9SNndKRXhIWVpIZmh5Z3N2N2ZFV0NPajRiWW1zUDVBK3BMNE1rVGZBbk1sRDRGK3IzYm9iS3ZUeVRBMlAvdzdQTitBZ3EyUVc4cGlxTUNwVEJ3ZW5vS3ZYMEFIR2tHdFAyWUFQdlRFV0E3UVVUQXVkbjcvTnh0T0c0NndXTm1EdHBCRWtCek43ckJFdkFGSHArWVRCL3E5N3FQQU40Z0hGcWdCaTh1THNDN3FQQ0E2bWc0MUcvK0VyQnlQd0VYRGRvTnhSaE94K001alBFelF1Z1MwaHQrYjEvWTNnRW5ZTUFJQU9JQkUyOS9oSUR1Y0U4dG1Nc05PZ0s0QjFSSEZ1NFVDUmxNSHp2MHh6Y2FqY2ZkWFdEczJoOFRBckJDa29EVUpZRExtejZ3N2lwM0JGUzB2ZTV3VFJ3QW42a2VNQTlJM1FZYmZTWjBES2J5dCs3T1hqR0kxaWRQY2ZOeUF5ZkFNbENyemFHcXBoWXJ4SG9jTEhSSlZ5Y25mR1VjYnRUK2pJeU1qSXc5eDdObjhmSlN6RzBUbUZ0TzhyWlQrWFQzUzN1Yit0S0piYkxkNWRpVFZwNTAremFoeWVIU3NsSi9ZUHJVMGZ1YXpyWk8yQ1o5Mi9aQ0NWWGxHUmlaS1BKeVBQUnh5SUZXZVhMUUJYSkJLaXEvM2RpdkVBTjZad00yMDBRam03RUpCWmVXbS9QUldWQ2JZSzdzN3UybDRYYUN6K2x6Z09mTWZoTW9uWHI3VFd6ZVpiOThkYmdJekJUOFViOGVZWVVxZlo0clZKL01EYklEZ1BxVHVsSi94dm50V0F0aklpc3Fud3hPa0d6MG4wNzdGQVJvWTc5R2RBNkhQRTRyT3kxOTZOaU1XSFRabFNTQXBjT2dYcHkvZkhWMmpvYU5LdTNmZnNBblJjQmY0Sy82TmNJRzZ0SXhrM0h5b1hQakFTcWZVZ1hiWU41UHpwTDJuamtSOVFNamVEVFZIRFRDZ1J1eE9lZ2pvTzBGdkt6UC90L2dtVmRJMjQrRzdOSWU4Slg2V3YzZER5bGRNQSs0WUI1d3dUeWd0ZCtkd1JxYVRxckxiMWw3M3pUU041MkNOcG5IdVFPWVBzRGJseWJneGZrWGgvb1Z0citOMURFQkpkaFJKeWQvQmQvcTF6K2NiTnJEMTdpVkt5YWpjbnY5YXJoT2tSUGdzcnV1RDZEbU5Qd3BETnJMdzJDb1RnSG5pNHlBTHIwTDI5K3RpS0FFSVBuODY4ZWp4Ly84cnBXUDNPRU9sNU9uOU93cGNRbTBNaGFmUC9leThmMXV2RE5JZ0dMUUc4ejRZTzk5RU5nZzk1ZXR3djR1WUpZWThmVUdIWUg2ajZmc2NIRlpNZnRsQWw5aSs5WEw3M1gzTi9uK1pTdE96ZlZmUnZZWGhyYmRLT3BFZ1ZRVGcvd3NEdUREM2t3T2ZRTk1USjV5Ky9sdFVEV0x1bnl4blJGNDZJcWxCekdNWTRYN2luZ2dSRUZpb0l5TWpJeU1IV0NJQjZaTktBY1hzZW8zdkxUUVRrVkU3MzQ4ZGx3SkpTejArd0xmbWk4QmhacWZ3M0Q0d3cvd0hWTG5FZDUvZmdZdlhzRFozTWxzdllVYmJuRGpEWjNNTjNUSkc0K2J4akFhRGw4VEJyaTlxeEV3MWNjYW8yd1ROQU1MSG8yZitzanJYd2IvOXFIb1lxZ1BNQlhKVFZmT3BtclpIMjN5NnV2bzBMSFN5WTZmSEd3S2ZISmxBdU1Gdk9iakRZcklxeEJnUWkyMGg3SGQvbllWTG1ubytlYU5VbS9lZUgyR0N1b3BudG5oQkpBbEkyQUhvOUNDaDFJMVF4VWRBYnFxR1k5QkJMd3ljM1c0d1lWaHZZOEE0Qm9JYzFsNU03dm5QV3BoWlc5L1NlczNuMzd5OWEwdUdxRndGUVpzUVFiZDM4NkRvZ3BnRWsrZHp5bnNBWk1KWHE4K25zOU5ldWtKMFBZck5BVEdHZWZKUWxoa0xvN0RUWHIreTNiTmlPc0R2clhUei9DMnExRFhaSDg0aVJOd3JQODhOait1MkRqWUVFNlJCeEQ5S25qMTZ1alZIQzY3QTc0MjJvMDJSd0QzZ0IrdDdFYmxXdnU5Z2VPRnhTbmQzUk9tVCtuSnlRa2hvUGxzeFZPTmMvM1RFZEJvcytqdEErWnpjd0hnVHZEMWNEamFZQ2NJdEE4dzlpODhBOGIrbXFTamM2UHZxZDk5OFFndUVRUG1RTWVvMjNPRE44NitwMC9ibjFidUJrVDYrb0JoTlovUFlZNFpBSFliM1BSZDRMa1ptUFg2OE5SdE1abjRBU3ZkQStxZjBqTUE1TVA5ZWVnMjhOdWc5UWlMbmo1QTMzVTFNQUVTNnhIQVVOcHovOXpGQVlFMWdxUURNVDNHNnhJOXB3ZHcvYUlnS29IQ1MxWUdsUm5TcTl5Q2pkWGpnTjNqK04yN1l5Uk9IeG11TkFlTktQcFl1WEl5SXlNall5ME04ZXJvczU5TUYvUFQyYzYwMlQ3ZUE3enZoSjlkci92ekRqWGFMcDRZYzUrMHdsbHp4ekh2M2dkbU1NTTcvQ2NRektnVkJxWVRtRm4rWittS204SjdrMEE1Ri9qZ0NmalExV0JoUXlpT3FEMGxZdXFCYitBeXpNdzlIYTJHM202YzhxUXgrQWxxbkljZVFwK1NiNmk5VXlRV2JocjU0K0FqblowVnpXMlRBTjBEbUJUNlBXbWM2akRCRTJQSzJ1K25GNDNkeVA3UTB0MXBPY1gyZmRSdkgwbUYyUTRKcU4zNXJuSGpWSWVhWGZJQVZ5VXV3L2FIQ0NpSnk5aUY1bDE2MjF6d2VJOEtaclBaOWlKZGI3RFhKM1VTME9TcnRaMTBpbXQ3d0hZN1Flc0F6VU16MW9aM25vQjNxRkovSDE4ajk3Rll1dzhRRE40b2VLZjMwb3N2Y1NXMkV4TG8rVmNidUF1by9zVUltOGZNRzl4b2NPM0VhMTlKOWdGWWl2bkhKMktueWZvdlpsZ1czdjZ5U3gzMmFiUWlJeU1qSXlQamhsRkRUTHhwd0lnRk1uVHA2QTNnNElES05ZK3N0a3dBTUFvSUFiYXN4QlhxVVduZVNBV1RNanQ1MGxUcVQyOXJGanZYb2hqc0RObTJZUFhERmxJQ21ySk9aM3Q2dEhtOEFpRUFsMHNDZUxJSW9ySVJ0K2NGYmV3L1FSc29BWGI0bzFYU2ZveXd6bTBGVE1Bb1lCTnZMeUZ1OHY4SHBMQnREMWlLZ0MxN3dIYjdBSTZkOXdGYnZndUFJR1RIZDRFOXdHN2pnSXlNakl5TSs0MzRjMlIzSGVWL0ZmeDZqdFp1NmlqbDhoNTlUNjU1amhSK3JkSHpET1A2YmVBQkNoZWI4TzgvV0ZYZU95emdmNW9BaFZZbkt4UDdDd2FBZjFhZkp1OGJTcmhTNnRkYVhlR25yUmVuT3FPbHo5ZDZRd1luQS8zVExkK0dFN3FlM2NoQTVZRjVEZlkwdkszYWRmT1gvZ3lOcDJCVzI1TUhkeEFCOXF2UmlpUDMvWHBRUUZHWURVNCtNaS8vL1h1bVhHOHBqdmFVQU9zQkdsZjRqSnQrWVlFemVFekFkdzA2RjE5UjNqdU03RDF3aXRhODZHUjBDS2ZESGdMdVhDYzRCcmk2dk1MZGZqTWM0Vk5TVU5zZG9kbzJ4dS8xK1hsL0s1K2F6OGpJeU1oWUcvejVnSlRNRjFHdEtxL2EzcnB5Q3Z6NWdKVE1sOUd0S3EvYTNycHlDbWZRNFd3Wm1TK2tYRlZldGIxMTVTVDQ4d0VmL0FHY2ZHMWl3K3RXYnBiUzJ2SjNuUXhjVnIzbEgzejVoOTcyRlVUTHpZcE9WazdsNWhEK2VZY1l3RGNBbmV3T290clo0T3RyUER1Y3FpL0xSWDAvUlI0cXg3Tm40VThnK3FqZmZ2dU42R2YrbkM4NXZ3YXVIamFZeXVicXZXWUtZNFZFZlNVTWl0ZG5CQ1QxVWU2M1I1NDM5bStPZ0NuNkRyb0FBYUhQVlF4S3RoL3drSmdIbUc4Ym1RTXNUMEQ2RWpEZnZoVlJLTzN5d09RVWdSQTdubUwxdWF3Wm1IZjFrK0RQQndRNk5kY0orazZNZDFMQTVmNU9OZGhKOHZaNUowdkxIVDk5c3JrR09qbUpiZC9HMXIyTnJpcW5zZTFBWnQxQWFsVTVqVzJIc3V1RzBxdktHUmtaR1JrWkdSRzBnY09OeVhzUDl2OEQwL0lkSkFEaUJOaVhsMzMyN1dSR2dPTC85SEMvMFh3bElVUmtSaEM0dHo2Wi9mdTdmVWYyZ0h2ZkI5ejN1MEJHUmtaR1JrYkdwbEhjbmtnZ3VRb1NxdFVYdWhicy93UHRNd3FWMEhVSkF2ajV2azMyYjhJRHVMMjN5bjdxQVhaNXUzMmhiUlg3ZDNvODJEZjFGWlh2Ymg5UU9maHl4bGRyLyszeGdYVTlvS212c0h5cjdGL1hBMjY5L2V2ZUJYcnN2N045UUFMZS90dmpBMGtQV0FYR2J2ZWJrYkhuK0QvSjVuTWNIengxVUFBQUFBQkpSVTVFcmtKZ2dnPT0pLyp7aWNvbnNEZWZhdWx0fSovOyB9DQoNCi51aS1zdGF0ZS1ob3ZlciAudWktaWNvbiwgLnVpLXN0YXRlLWZvY3VzIC51aS1pY29uIHsgLypiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9JbWFnZXMvdWktaWNvbnNfNDU0NTQ1XzI1NngyNDAucG5nKSovLyp7aWNvbnNIb3Zlcn0qLzsgfQ0KDQoudWktc3RhdGUtYWN0aXZlIC51aS1pY29uIHsgLypiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9JbWFnZXMvdWktaWNvbnNfNDU0NTQ1XzI1NngyNDAucG5nKSovLyp7aWNvbnNBY3RpdmV9Ki87IH0NCg0KLnVpLXN0YXRlLWhpZ2hsaWdodCAudWktaWNvbiB7IC8qYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvSW1hZ2VzL3VpLWljb25zXzJlODNmZl8yNTZ4MjQwLnBuZykqLy8qe2ljb25zSGlnaGxpZ2h0fSovOyB9DQoNCi51aS1zdGF0ZS1lcnJvciAudWktaWNvbiwgLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb24geyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUR3Q0FNQUFBRFlTVXI1QUFBQTdWQk1WRVhNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6ckRrWmpBQUFBVG5SU1RsTUFHQkF5QkFoUXY0T1pMaUpVY0VCbVlCb1N6UXdnUEJaQ1NFb2VXaVl3VWl5Rk5JZUJ3MnJKejhjNFJCeTl1WHlydGFXTnFhMnpLUDJmSk84S0JnS1BvMktWb2E5czM1MUdQbTUra1dobzBrajlBQUFQaFVsRVFWUjRuTzFkaldMYnRoRUd5VWlxNVlTU0xYdHA3RnBMT21memtteHIxMjZ0bWkycDAzUkoxL1hlLzNFR2dBUnhQeUFnUmJJazIvaGtTejRDSk80K0hzRTdBSlNWeXNqSTJBTVVVT3hhaFoyaUFOaHpCdFpXcjRCb0lSU1lBVk41dTRRd0R3UURSYmN3ZlVpNUtTM3dGdURtRm5RTGE0RHRiLy9jcWt0d0Q1UUVGRndmVXM3UG9DQ0E3eTRiRUpWRml6Y0lvYjhLbWhBcGx3d3FWanQrOUZCbDN1SU5Rbml3RWlyeUV5dzlKSHFHcFFkRUZOaStCNFFRN1FPaUhoeXNJUG9BeFVxeHZkdnZBOUs0MmJzQXY0UzJmeGZZT2U1N0lKU1JrWkdSa1pHeHg3anhTSERIY1JCWFFNVHlJakluQmdId0JKL2JFeDhQRUFOQyt1aGJwU1NnZ0NCQVZPRFZhYnBJMVMvazRXTFpwVG42TnBNaG9YOVk0MGh4WUVSRnBNY3FVczRBbG9DdERRZElEMVlobnlYWjJoTGpBWVdpTzlEeTFQREI3dFBoSXFMeCt1TUI4Z3JaYVIrUXhsMi9DMlJrWkdSa1pHUms3QTdyQmY3SjBEUjUvTFVUanpVUElQU1BHdlFKaVZKaUI3a2NRQ2lVT0pyY0ZOdERaSWYyeGFyUTNhR3ZMTnhBVklGQWFiejkwQkZpQklseWNUQmhnV3dPV0NIMEZMWUhsUHF3SGFDdmNJbjJaYm9zQ2V2ZlBUUmlGRmNndkh1a0NqV3dyYzNHckdoMWZzQW9mOEVhVVJlS1hrQ0I0L016Rk5vOTdxTHBGaUtGWXYva05SNVlReFFiUUVvZmtaMk91RU9IcXFUNmdGVHBydThDTjd4LytqYVprWkdSa1pHUmNWK3gvckxVTmNNTXFVQXNjZ25Gb2NtcHFrVHpxeW13VkFQeGZKNVBuSVVVUU9VS1QwNHRFZFdaeXYzSkNRU245NldTNHBEOTdRZnlXMjVBN05oU0FieWhtVmowRkVsdEE0dmRpeWdCaWJYaG9VWWd5a0NVUDdId1BURGVFcUFJY0hWTWtaZzdaeDRrMHVGQU5zNjNoUFFYQ29STEF3ZGdHc3I5QXo3UXY3c2dRR2dnMWFQbC9CSkxFeEJXZ0c0UkZSTEZJbUdtSXF1UEMva2xFR3lDRzBBdUFYYUpKQytCOEZWZTlOWVFERWNYQjhnNkFRY2pZSjFnb0pJZ2dIV0NyRlIwUzZrUkhONSs0QnpGaThOYW9OMzVOUnhVdkwrSkpkWnI3UFY0d0s2Zmo4bkl5TWpJeU5ocjNPeGRYQVlxN0ZIWndCNmJEU3pTaDRzRjB1dENocW8wTkF2YVQxaEx6WHdGaW5tQ3ptZUR1Y0VRSzE4VFRhUW9GZ1A3Yk5DK1JaNE9UNFQ2Z1FvZ0RGWWsrMVF4UWxqMTlRR1NBV0tpTFlwOFAwQWcxR2J6MVVMZldITGc5aVVuUU5LNVFRSmN1a20wNGJsS0xIMkdnRUpDWStIelhBWldDdkhLY28zQnA2TUlhQ2pTWFhSSnlPeGVxaG56RWFGOTNNZkZHVy9PMTZadkRMNVRNNE1KSWp1anovY0h5cGtRdXV6UndXSjkzQktkSXQrd0NSQVBsOWtwZTJJa2tiMm1GZ0dseGgvaTQwZDNFSGZkdm95TWpJeU11NDN5bHQvSUFtR0huTjVpSXQ3d0tmYnYwMVJBY0pxRlJsOWxjallRU25iUXFLZ0M0ZllPd1NKdDZONnRyRTB0d1o5a04vUHFOcFRRZUlDdnI0VExzRFlDMDZVN0JNanNoUyt2MS9hVDdJd1FZRDVMY2dSUVhNVDJGckJmQkxqWjYxNTFqREVsazl0UEZmcFVnazJ5cmVndXNYMjVCSmJ3QUZFZk0rWUk2dkdBdGk0YlR0aXpCK1RqZlFDckVSeWhLYjJYOEQ2QTl3WDc1UDR0NG5lQllKZVA2cGRoZy9nUWw4TVd2eXR6ZVNUamdPUUJ5blFkaC9pWEtkeE9yR0ovUmtaR1JzYjlRbVhpaEdyNStnOEdHZzl1VGgrS29WWnVOSXpWK0N3UnVjRkJFeXIxbVZqeDRpck94d00xQmhpckI2USsyZU5RaTRlcVIrYUY2bUVMdG9NekNSN1Y5UkFGZS9adlFvZ05peVk4RlBTVVRGc0xwOFRlVG1NdWk1bXR3N2JjYVQwWXcyQUE0d0ZSUUlsa2dxKzFEUXJOaGttb3hTNUpxK3U2Yk1BSUdSRUNFQU5nWEhUZ1d6d2dCT2hESDJsMG9UUTREOEQ1Tk1rdEJnTnl3QUVNam84cndBVE1aclBZN0pHeEJvSkNrSUJEUWlBWTA5RUdUVWlCQ1drVXBJU2ZHUFI1QUF3QmZaaUcyejdBeWMxeWVLVHhpZDM5eEJOd2ZIcjRPMExBNDhlUEZUdmhZckYxcjR0eUFvejluMk1DcUV1QnRwLzZHRFIwb0FZZkcvUjZ3SkV4SFlaSGZoeWdzdjdmRVdDT2o0Ylltc1A1QStwTDRNa1RmQW5NbEQ0RityM2JvYkt2VHlUQTJQL3c3UE4rQWdxMlFXOHBpcU1DcFRCd2Vub0t2WDBBSEdrR3RQMllBUHZURVdBN1FVVEF1ZG43L054dE9HNDZ3V05tRHRwQkVrQnpON3JCRXZBRkhwK1lUQi9xOTdxUEFONGdIRnFnQmk4dUxzQzdxUENBNm1nNDFHLytFckJ5UHdFWERkb054UmhPeCtNNWpQRXpRdWdTMGh0K2IxL1kzZ0VuWU1BSUFPSUJFMjkvaElEdWNFOHRtTXNOT2dLNEIxUkhGdTRVQ1JsTUh6djB4emNhamNmZFhXRHMyaDhUQXJCQ2tvRFVKWURMbXo2dzdpcDNCRlMwdmU1d1RSd0FuNmtlTUE5STNRWWJmU1owREtieXQrN09YakdJMWlkUGNmTnlBeWZBTWxDcnphR3FwaFlyeEhvY0xIUkpWeWNuZkdVY2J0VCtqSXlNakl3OXg3Tm44ZkpTekcwVG1GdE84clpUK1hUM1MzdWIrdEtKYmJMZDVkaVRWcDUwK3phaHllSFNzbEovWVByVTBmdWF6clpPMkNaOTIvWkNDVlhsR1JpWktQSnlQUFJ4eUlGV2VYTFFCWEpCS2lxLzNkaXZFQU42WndNMjAwUWptN0VKQlplV20vUFJXVkNiWUs3czd1Mmw0WGFDeitsemdPZk1maE1vblhyN1RXemVaYjk4ZGJnSXpCVDhVYjhlWVlVcWZaNHJWSi9NRGJJRGdQcVR1bEoveHZudFdBdGpJaXNxbnd4T2tHejBuMDc3RkFSb1k3OUdkQTZIUEU0ck95MTk2TmlNV0hUWmxTU0FwY09nWHB5L2ZIVjJqb2FOS3UzZmZzQW5SY0JmNEsvNk5jSUc2dEl4azNIeW9YUGpBU3FmVWdYYllONVB6cEwybmprUjlRTWplRFRWSERUQ2dSdXhPZWdqb08wRnZLelAvdC9nbVZkSTI0K0c3TkllOEpYNld2M2REeWxkTUErNFlCNXd3VHlndGQrZHdScWFUcXJMYjFsNzN6VFNONTJDTnBuSHVRT1lQc0RibHliZ3hma1hoL29WdHIrTjFERUJKZGhSSnlkL0JkL3ExeitjYk5yRDE3aVZLeWFqY252OWFyaE9rUlBnc3J1dUQ2RG1OUHdwRE5yTHcyQ29UZ0huaTR5QUxyMEwyOSt0aUtBRUlQbjg2OGVqeC8vOHJwV1AzT0VPbDVPbjlPd3BjUW0wTWhhZlAvZXk4ZjF1dkROSWdHTFFHOHo0WU85OUVOZ2c5NWV0d3Y0dVlKWVk4ZlVHSFlINmo2ZnNjSEZaTWZ0bEFsOWkrOVhMNzNYM04vbitaU3RPemZWZlJ2WVhocmJkS09wRWdWUVRnL3dzRHVERDNrd09mUU5NVEo1eSsvbHRVRFdMdW55eG5SRjQ2SXFsQnpHTVk0WDdpbmdnUkVGaW9JeU1qSXlNSFdDSUI2Wk5LQWNYc2VvM3ZMVFFUa1ZFNzM0OGRsd0pKU3owK3dMZm1pOEJoWnFmdzNENHd3L3dIVkxuRWQ1L2ZnWXZYc0RaM01sc3ZZVWJibkRqRFozTU4zVEpHNCtieGpBYURsOFRCcmk5cXhFdzFjY2FvMndUTkFNTEhvMmYrc2pyWHdiLzlxSG9ZcWdQTUJYSlRWZk9wbXJaSDIzeTZ1dm8wTEhTeVk2ZkhHd0tmSEpsQXVNRnZPYmpEWXJJcXhCZ1FpMjBoN0hkL25ZVkxtbm8rZWFOVW0vZWVIMkdDdW9wbnRuaEJKQWxJMkFIbzlDQ2gxSTFReFVkQWJxcUdZOUJCTHd5YzNXNHdZVmh2WThBNEJvSWMxbDVNN3ZuUFdwaFpXOS9TZXMzbjM3eTlhMHVHcUZ3RlFac1FRYmQzODZEb2dwZ0VrK2R6eW5zQVpNSlhxOCtuczlOZXVrSjBQWXJOQVRHR2VmSlFsaGtMbzdEVFhyK3kzYk5pT3NEdnJYVHovQzJxMURYWkg4NGlSTndyUDg4TmordTJEallFRTZSQnhEOUtuajE2dWpWSEM2N0E3NDIybzAyUndEM2dCK3Q3RWJsV3Z1OWdlT0Z4U25kM1JPbVQrbkp5UWtob1Bsc3hWT05jLzNURWRCb3MranRBK1p6Y3dIZ1R2RDFjRGphWUNjSXRBOHc5aTg4QThiK21xU2pjNlB2cWQ5OThRZ3VFUVBtUU1lbzIzT0ROODYrcDAvYm4xYnVCa1Q2K29CaE5aL1BZWTRaQUhZYjNQUmQ0TGtabVBYNjhOUnRNWm40QVN2ZEErcWYwak1BNU1QOWVlZzI4TnVnOVFpTG5qNUEzM1UxTUFFUzZ4SEFVTnB6Lzl6RkFZRTFncVFETVQzRzZ4STlwd2R3L2FJZ0tvSENTMVlHbFJuU3E5eUNqZFhqZ04zaitOMjdZeVJPSHhtdU5BZU5LUHBZdVhJeUl5TWpZeTBNOGVyb3M1OU1GL1BUMmM2MDJUN2VBN3p2aEo5ZHIvdnpEalhhTHA0WWM1KzB3bGx6eHpIdjNnZG1NTU03L0NjUXpLZ1ZCcVlUbUZuK1orbUttOEo3azBBNUYvamdDZmpRMVdCaFF5aU9xRDBsWXVxQmIrQXl6TXc5SGEyRzNtNmM4cVF4K0FscW5JY2VRcCtTYjZpOVV5UVdiaHI1NCtBam5aMFZ6VzJUQU4wRG1CVDZQV21jNmpEQkUyUEsydStuRjQzZHlQN1EwdDFwT2NYMmZkUnZIMG1GMlE0SnFOMzVybkhqVkllYVhmSUFWeVV1dy9hSENDaUp5OWlGNWwxNjIxendlSThLWnJQWjlpSmRiN0RYSjNVUzBPU3J0WjEwaW10N3dIWTdRZXNBelVNejFvWjNub0IzcUZKL0gxOGo5N0ZZdXc4UURONG9lS2YzMG9zdmNTVzJFeExvK1ZjYnVBdW8vc1VJbThmTUc5eG9jTzNFYTE5SjlnRllpdm5ISjJLbnlmb3ZabGdXM3Y2eVN4MzJhYlFpSXlNakl5UGpobEZEVEx4cHdJZ0ZNblRwNkEzZzRJREtOWStzdGt3QU1Bb0lBYmFzeEJYcVVXbmVTQVdUTWp0NTBsVHFUMjlyRmp2WG9oanNETm0yWVBYREZsSUNtckpPWjN0NnRIbThBaUVBbDBzQ2VMSUlvcklSdCtjRmJldy9RUnNvQVhiNG8xWFNmb3l3em0wRlRNQW9ZQk52THlGdTh2OEhwTEJ0RDFpS2dDMTd3SGI3QUk2ZDl3RmJ2Z3VBSUdUSGQ0RTl3RzdqZ0l5TWpJeU0rNDM0YzJSM0hlVi9GZng2anRadTZpamw4aDU5VDY1NWpoUityZEh6RE9QNmJlQUJDaGViOE84L1dGWGVPeXpnZjVvQWhWWW5LeFA3Q3dhQWYxYWZKdThiU3JoUzZ0ZGFYZUduclJlbk9xT2x6OWQ2UXdZbkEvM1RMZCtHRTdxZTNjaEE1WUY1RGZZMHZLM2FkZk9YL2d5TnAyQlcyNU1IZHhBQjlxdlJpaVAzL1hwUVFGR1lEVTQrTWkvLy9YdW1YRzhwanZhVUFPc0JHbGY0akp0K1lZRXplRXpBZHcwNkYxOVIzanVNN0Qxd2l0YTg2R1IwQ0tmREhnTHVYQ2M0QnJpNnZNTGRmak1jNFZOU1VOc2RvZG8yeHUvMStYbC9LNSthejhqSXlNaFlHL3o1Z0pUTUYxR3RLcS9hM3JweUN2ejVnSlRNbDlHdEtxL2EzcnB5Q21mUTRXd1ptUytrWEZWZXRiMTE1U1Q0OHdFZi9BR2NmRzFpdyt0V2JwYlMydkozblF4Y1ZyM2xIM3o1aDk3MkZVVEx6WXBPVms3bDVoRCtlWWNZd0RjQW5ld09vdHJaNE90clBEdWNxaS9MUlgwL1JSNHF4N05uNFU4ZytxamZmdnVONkdmK25DODV2d2F1SGphWXl1YnF2V1lLWTRWRWZTVU1pdGRuQkNUMVVlNjNSNTQzOW0rT2dDbjZEcm9BQWFIUFZReEt0aC93a0pnSG1HOGJtUU1zVDBENkVqRGZ2aFZSS08zeXdPUVVnUkE3bm1MMXVhd1ptSGYxaytEUEJ3UTZOZGNKK2s2TWQxTEE1ZjVPTmRoSjh2WjVKMHZMSFQ5OXNya0dPam1KYmQvRzFyMk5yaXFuc2UxQVp0MUFhbFU1alcySHN1dUcwcXZLR1JrWkdSa1pHUkcwZ2NPTnlYc1A5djhEMC9JZEpBRGlCTmlYbDMzMjdXUkdnT0wvOUhDLzBYd2xJVVJrUmhDNHR6NlovZnU3ZlVmMmdIdmZCOXozdTBCR1JrWkdSa2JHcGxIY25rZ2d1UW9TcXRVWHVoYnMvd1B0TXdxVjBIVUpBdmo1dmszMmI4SUR1TDIzeW43cUFYWjV1MzJoYlJYN2QzbzgyRGYxRlpYdmJoOVFPZmh5eGxkci8rM3hnWFU5b0ttdnNIeXI3Ri9YQTI2OS9ldmVCWHJzdjdOOVFBTGUvdHZqQTBrUFdBWEdidmVia2JIbitEL0o1bk1jSHp4MVVBQUFBQUJKUlU1RXJrSmdnZz09KS8qe2ljb25zRXJyb3J9Ki87IH0NCg0KLyogcG9zaXRpb25pbmcgKi8NCg0KLnVpLWljb24tY2FyYXQtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9DQoNCi51aS1pY29uLWNhcmF0LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAwOyB9DQoNCi51aS1pY29uLWNhcmF0LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IDA7IH0NCg0KLnVpLWljb24tY2FyYXQtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IDA7IH0NCg0KLnVpLWljb24tY2FyYXQtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggMDsgfQ0KDQoudWktaWNvbi1jYXJhdC0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggMDsgfQ0KDQoudWktaWNvbi1jYXJhdC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAwOyB9DQoNCi51aS1pY29uLWNhcmF0LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggMDsgfQ0KDQoudWktaWNvbi1jYXJhdC0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAwOyB9DQoNCi51aS1pY29uLWNhcmF0LTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IDA7IH0NCg0KLnVpLWljb24tdHJpYW5nbGUtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTZweDsgfQ0KDQoudWktaWNvbi10cmlhbmdsZS0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2cHg7IH0NCg0KLnVpLWljb24tdHJpYW5nbGUtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2cHg7IH0NCg0KLnVpLWljb24tdHJpYW5nbGUtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNnB4OyB9DQoNCi51aS1pY29uLXRyaWFuZ2xlLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNnB4OyB9DQoNCi51aS1pY29uLXRyaWFuZ2xlLTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTZweDsgfQ0KDQoudWktaWNvbi10cmlhbmdsZS0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTZweDsgfQ0KDQoudWktaWNvbi10cmlhbmdsZS0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNnB4OyB9DQoNCi51aS1pY29uLXRyaWFuZ2xlLTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNnB4OyB9DQoNCi51aS1pY29uLXRyaWFuZ2xlLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNnB4OyB9DQoNCi51aS1pY29uLWFycm93LTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3ctMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93LTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvdy0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvdy0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3ctMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3ctMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvdy0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvdy0yLW5lLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93LTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93LTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3dzdG9wLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvd3N0b3AtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93c3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3dzdG9wLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvd3RoaWNrLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNDhweDsgfQ0KDQoudWktaWNvbi1hcnJvd3RoaWNrLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweDsgfQ0KDQoudWktaWNvbi1hcnJvd3RoaWNrLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2stMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2stMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2stMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0yLW5lLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2stMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0yLXNlLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNDhweDsgfQ0KDQoudWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtNDhweDsgfQ0KDQoudWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNjRweDsgfQ0KDQoudWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC02NHB4OyB9DQoNCi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm4tMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm4tMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm4tMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm4tMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC02NHB4OyB9DQoNCi51aS1pY29uLWFycm93cmVmcmVzaC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNjRweDsgfQ0KDQoudWktaWNvbi1hcnJvd3JlZnJlc2gtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC02NHB4OyB9DQoNCi51aS1pY29uLWFycm93cmVmcmVzaC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3ctNCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7IH0NCg0KLnVpLWljb24tYXJyb3ctNC1kaWFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTgwcHg7IH0NCg0KLnVpLWljb24tZXh0bGluayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04MHB4OyB9DQoNCi51aS1pY29uLW5ld3dpbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04MHB4OyB9DQoNCi51aS1pY29uLXJlZnJlc2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtODBweDsgfQ0KDQoudWktaWNvbi1zaHVmZmxlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTgwcHg7IH0NCg0KLnVpLWljb24tdHJhbnNmZXItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTgwcHg7IH0NCg0KLnVpLWljb24tdHJhbnNmZXJ0aGljay1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTgwcHg7IH0NCg0KLnVpLWljb24tZm9sZGVyLWNvbGxhcHNlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH0NCg0KLnVpLWljb24tZm9sZGVyLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtOTZweDsgfQ0KDQoudWktaWNvbi1kb2N1bWVudCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC05NnB4OyB9DQoNCi51aS1pY29uLWRvY3VtZW50LWIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtOTZweDsgfQ0KDQoudWktaWNvbi1ub3RlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTk2cHg7IH0NCg0KLnVpLWljb24tbWFpbC1jbG9zZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtOTZweDsgfQ0KDQoudWktaWNvbi1tYWlsLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweDsgfQ0KDQoudWktaWNvbi1zdWl0Y2FzZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtOTZweDsgfQ0KDQoudWktaWNvbi1jb21tZW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC05NnB4OyB9DQoNCi51aS1pY29uLXBlcnNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweDsgfQ0KDQoudWktaWNvbi1wcmludCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtOTZweDsgfQ0KDQoudWktaWNvbi10cmFzaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtOTZweDsgfQ0KDQoudWktaWNvbi1sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTk2cHg7IH0NCg0KLnVpLWljb24tdW5sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTk2cHg7IH0NCg0KLnVpLWljb24tYm9va21hcmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTk2cHg7IH0NCg0KLnVpLWljb24tdGFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC05NnB4OyB9DQoNCi51aS1pY29uLWhvbWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMTJweDsgfQ0KDQoudWktaWNvbi1mbGFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTExMnB4OyB9DQoNCi51aS1pY29uLWNhbGVuZGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTExMnB4OyB9DQoNCi51aS1pY29uLWNhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTEycHg7IH0NCg0KLnVpLWljb24tcGVuY2lsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTExMnB4OyB9DQoNCi51aS1pY29uLWNsb2NrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTExMnB4OyB9DQoNCi51aS1pY29uLWRpc2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTEycHg7IH0NCg0KLnVpLWljb24tY2FsY3VsYXRvciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTEycHg7IH0NCg0KLnVpLWljb24tem9vbWluIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMTJweDsgfQ0KDQoudWktaWNvbi16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMTJweDsgfQ0KDQoudWktaWNvbi1zZWFyY2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTExMnB4OyB9DQoNCi51aS1pY29uLXdyZW5jaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTEycHg7IH0NCg0KLnVpLWljb24tZ2VhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTEycHg7IH0NCg0KLnVpLWljb24taGVhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTExMnB4OyB9DQoNCi51aS1pY29uLXN0YXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTExMnB4OyB9DQoNCi51aS1pY29uLWxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTExMnB4OyB9DQoNCi51aS1pY29uLWNhbmNlbCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4OyB9DQoNCi51aS1pY29uLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tcGx1c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4OyB9DQoNCi51aS1pY29uLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTEyOHB4OyB9DQoNCi51aS1pY29uLW1pbnVzdGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tY2xvc2V0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMjhweDsgfQ0KDQoudWktaWNvbi1rZXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4OyB9DQoNCi51aS1pY29uLWxpZ2h0YnVsYiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tc2Npc3NvcnMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTEyOHB4OyB9DQoNCi51aS1pY29uLWNsaXBib2FyZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tY29weSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tY29udGFjdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTI4cHg7IH0NCg0KLnVpLWljb24taW1hZ2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTEyOHB4OyB9DQoNCi51aS1pY29uLXZpZGVvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMjhweDsgfQ0KDQoudWktaWNvbi1zY3JpcHQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTEyOHB4OyB9DQoNCi51aS1pY29uLWFsZXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7IH0NCg0KLnVpLWljb24taW5mbyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNDRweDsgfQ0KDQoudWktaWNvbi1ub3RpY2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTQ0cHg7IH0NCg0KLnVpLWljb24taGVscCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNDRweDsgfQ0KDQoudWktaWNvbi1jaGVjayB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNDRweDsgfQ0KDQoudWktaWNvbi1idWxsZXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTQ0cHg7IH0NCg0KLnVpLWljb24tcmFkaW8tb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE0NHB4OyB9DQoNCi51aS1pY29uLXJhZGlvLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDRweDsgfQ0KDQoudWktaWNvbi1waW4tdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTQ0cHg7IH0NCg0KLnVpLWljb24tcGluLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE0NHB4OyB9DQoNCi51aS1pY29uLXBsYXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNjBweDsgfQ0KDQoudWktaWNvbi1wYXVzZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNjBweDsgfQ0KDQoudWktaWNvbi1zZWVrLW5leHQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTYwcHg7IH0NCg0KLnVpLWljb24tc2Vlay1wcmV2IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2MHB4OyB9DQoNCi51aS1pY29uLXNlZWstZW5kIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2MHB4OyB9DQoNCi51aS1pY29uLXNlZWstc3RhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH0NCi8qIHVpLWljb24tc2Vlay1maXJzdCBpcyBkZXByZWNhdGVkLCB1c2UgdWktaWNvbi1zZWVrLXN0YXJ0IGluc3RlYWQgKi8NCg0KLnVpLWljb24tc2Vlay1maXJzdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfQ0KDQoudWktaWNvbi1zdG9wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4OyB9DQoNCi51aS1pY29uLWVqZWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNjBweDsgfQ0KDQoudWktaWNvbi12b2x1bWUtb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweDsgfQ0KDQoudWktaWNvbi12b2x1bWUtb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4OyB9DQoNCi51aS1pY29uLXBvd2VyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTc2cHg7IH0NCg0KLnVpLWljb24tc2lnbmFsLWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHg7IH0NCg0KLnVpLWljb24tc2lnbmFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4OyB9DQoNCi51aS1pY29uLWJhdHRlcnktMCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweDsgfQ0KDQoudWktaWNvbi1iYXR0ZXJ5LTEgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHg7IH0NCg0KLnVpLWljb24tYmF0dGVyeS0yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4OyB9DQoNCi51aS1pY29uLWJhdHRlcnktMyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweDsgfQ0KDQoudWktaWNvbi1jaXJjbGUtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZS1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xOTJweDsgfQ0KDQoudWktaWNvbi1jaXJjbGUtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLWFycm93LWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZS1hcnJvdy1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xOTJweDsgfQ0KDQoudWktaWNvbi1jaXJjbGUtYXJyb3ctdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLWFycm93LW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZS16b29taW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZS16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xOTJweDsgfQ0KDQoudWktaWNvbi1jaXJjbGUtY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZXNtYWxsLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMDhweDsgfQ0KDQoudWktaWNvbi1jaXJjbGVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweDsgfQ0KDQoudWktaWNvbi1jaXJjbGVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMDhweDsgfQ0KDQoudWktaWNvbi1zcXVhcmVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4OyB9DQoNCi51aS1pY29uLXNxdWFyZXNtYWxsLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIwOHB4OyB9DQoNCi51aS1pY29uLXNxdWFyZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIwOHB4OyB9DQoNCi51aS1pY29uLWdyaXAtZG90dGVkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjI0cHg7IH0NCg0KLnVpLWljb24tZ3JpcC1kb3R0ZWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMjRweDsgfQ0KDQoudWktaWNvbi1ncmlwLXNvbGlkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4OyB9DQoNCi51aS1pY29uLWdyaXAtc29saWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweDsgfQ0KDQoudWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHg7IH0NCg0KLnVpLWljb24tZ3JpcC1kaWFnb25hbC1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMjRweDsgfQ0KDQoNCi8qIE1pc2MgdmlzdWFscw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qIENvcm5lciByYWRpdXMgKi8NCg0KLnVpLWNvcm5lci1hbGwsIC51aS1jb3JuZXItdG9wLCAudWktY29ybmVyLWxlZnQsIC51aS1jb3JuZXItdGwgew0KICAgIC1raHRtbC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDRweC8qe2Nvcm5lclJhZGl1c30qLzsNCiAgICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweC8qe2Nvcm5lclJhZGl1c30qLzsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQp9DQoNCi51aS1jb3JuZXItYWxsLCAudWktY29ybmVyLXRvcCwgLnVpLWNvcm5lci1yaWdodCwgLnVpLWNvcm5lci10ciB7DQogICAgLWtodG1sLWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQp9DQoNCi51aS1jb3JuZXItYWxsLCAudWktY29ybmVyLWJvdHRvbSwgLnVpLWNvcm5lci1sZWZ0LCAudWktY29ybmVyLWJsIHsNCiAgICAta2h0bWwtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KfQ0KDQoudWktY29ybmVyLWFsbCwgLnVpLWNvcm5lci1ib3R0b20sIC51aS1jb3JuZXItcmlnaHQsIC51aS1jb3JuZXItYnIgew0KICAgIC1raHRtbC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweC8qe2Nvcm5lclJhZGl1c30qLzsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KfQ0KDQovKiBPdmVybGF5cyAqLw0KDQoudWktd2lkZ2V0LW92ZXJsYXkgew0KICAgIGJhY2tncm91bmQ6ICNhYWFhYWEgLyp7YmdDb2xvck92ZXJsYXl9Ki8gLyp1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9JbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nKSovIC8qe2JnSW1nVXJsT3ZlcmxheX0qLyA1MCUgLyp7YmdPdmVybGF5WFBvc30qLyA1MCUgLyp7YmdPdmVybGF5WVBvc30qLyByZXBlYXQteC8qe2JnT3ZlcmxheVJlcGVhdH0qLzsNCiAgICBmaWx0ZXI6IEFscGhhKE9wYWNpdHk9MzApLyp7b3BhY2l0eU92ZXJsYXl9Ki87DQogICAgb3BhY2l0eTogLjM7DQp9DQoNCi51aS13aWRnZXQtc2hhZG93IHsNCiAgICAta2h0bWwtYm9yZGVyLXJhZGl1czogOHB4Lyp7Y29ybmVyUmFkaXVzU2hhZG93fSovOw0KICAgIC1tb3otYm9yZGVyLXJhZGl1czogOHB4Lyp7Y29ybmVyUmFkaXVzU2hhZG93fSovOw0KICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogOHB4Lyp7Y29ybmVyUmFkaXVzU2hhZG93fSovOw0KICAgIGJhY2tncm91bmQ6ICNhYWFhYWEgLyp7YmdDb2xvclNoYWRvd30qLyAvKnVybChodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L0ltYWdlcy91aS1iZ19mbGF0XzBfYWFhYWFhXzQweDEwMC5wbmcpKi8gLyp7YmdJbWdVcmxTaGFkb3d9Ki8gNTAlIC8qe2JnU2hhZG93WFBvc30qLyA1MCUgLyp7YmdTaGFkb3dZUG9zfSovIHJlcGVhdC14Lyp7YmdTaGFkb3dSZXBlYXR9Ki87DQogICAgYm9yZGVyLXJhZGl1czogOHB4Lyp7Y29ybmVyUmFkaXVzU2hhZG93fSovOw0KICAgIGZpbHRlcjogQWxwaGEoT3BhY2l0eT0zMCkvKntvcGFjaXR5U2hhZG93fSovOw0KICAgIG1hcmdpbjogLThweCAvKntvZmZzZXRUb3BTaGFkb3d9Ki8gMCAwIC04cHgvKntvZmZzZXRMZWZ0U2hhZG93fSovOw0KICAgIG9wYWNpdHk6IC4zOw0KICAgIHBhZGRpbmc6IDhweC8qe3RoaWNrbmVzc1NoYWRvd30qLzsNCn0NCi8qIF1dPiAqLw0KPC9zdHlsZT4NCg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQovKiA8IVtDREFUQVsgKi8NCi51aS1tdWx0aXNlbGVjdCB7IHBhZGRpbmc6MnB4IDAgMnB4IDRweDsgdGV4dC1hbGlnbjpsZWZ0IH0KLnVpLW11bHRpc2VsZWN0IHNwYW4udWktaWNvbiB7IGZsb2F0OnJpZ2h0IH0KLnVpLW11bHRpc2VsZWN0LXNpbmdsZSAudWktbXVsdGlzZWxlY3QtY2hlY2tib3hlcyBpbnB1dCB7IHBvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnQ7IHRvcDogYXV0byAhaW1wb3J0YW50OyBsZWZ0Oi05OTk5cHg7IH0KLnVpLW11bHRpc2VsZWN0LXNpbmdsZSAudWktbXVsdGlzZWxlY3QtY2hlY2tib3hlcyBsYWJlbCB7IHBhZGRpbmc6NXB4ICFpbXBvcnRhbnQgfQoKLnVpLW11bHRpc2VsZWN0LWhlYWRlciB7IG1hcmdpbi1ib3R0b206M3B4OyBwYWRkaW5nOjNweCAwIDNweCA0cHggfQoudWktbXVsdGlzZWxlY3QtaGVhZGVyIHVsIHsgZm9udC1zaXplOjAuOWVtIH0KLnVpLW11bHRpc2VsZWN0LWhlYWRlciB1bCBsaSB7IGZsb2F0OmxlZnQ7IHBhZGRpbmc6MCAxMHB4IDAgMCB9Ci51aS1tdWx0aXNlbGVjdC1oZWFkZXIgYSB7IHRleHQtZGVjb3JhdGlvbjpub25lIH0KLnVpLW11bHRpc2VsZWN0LWhlYWRlciBhOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSB9Ci51aS1tdWx0aXNlbGVjdC1oZWFkZXIgc3Bhbi51aS1pY29uIHsgZmxvYXQ6bGVmdCB9Ci51aS1tdWx0aXNlbGVjdC1oZWFkZXIgbGkudWktbXVsdGlzZWxlY3QtY2xvc2UgeyBmbG9hdDpyaWdodDsgdGV4dC1hbGlnbjpyaWdodDsgcGFkZGluZy1yaWdodDowIH0KCi51aS1tdWx0aXNlbGVjdC1tZW51IHsgZGlzcGxheTpub25lOyBwYWRkaW5nOjNweDsgcG9zaXRpb246YWJzb2x1dGU7IHotaW5kZXg6MTAwMDA7IHRleHQtYWxpZ246IGxlZnQgfQoudWktbXVsdGlzZWxlY3QtY2hlY2tib3hlcyB7IHBvc2l0aW9uOnJlbGF0aXZlIC8qIGZpeGVzIGJ1ZyBpbiBJRTYvNyAqLzsgb3ZlcmZsb3cteTphdXRvIH0KLnVpLW11bHRpc2VsZWN0LWNoZWNrYm94ZXMgbGFiZWwgeyBjdXJzb3I6ZGVmYXVsdDsgZGlzcGxheTpibG9jazsgYm9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDsgcGFkZGluZzozcHggMXB4IH0KLnVpLW11bHRpc2VsZWN0LWNoZWNrYm94ZXMgbGFiZWwgaW5wdXQgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjFweCB9Ci51aS1tdWx0aXNlbGVjdC1jaGVja2JveGVzIGxpIHsgY2xlYXI6Ym90aDsgZm9udC1zaXplOjAuOWVtOyBwYWRkaW5nLXJpZ2h0OjNweCB9Ci51aS1tdWx0aXNlbGVjdC1jaGVja2JveGVzIGxpLnVpLW11bHRpc2VsZWN0LW9wdGdyb3VwLWxhYmVsIHsgdGV4dC1hbGlnbjpjZW50ZXI7IGZvbnQtd2VpZ2h0OmJvbGQ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkIH0KLnVpLW11bHRpc2VsZWN0LWNoZWNrYm94ZXMgbGkudWktbXVsdGlzZWxlY3Qtb3B0Z3JvdXAtbGFiZWwgYSB7IGRpc3BsYXk6YmxvY2s7IHBhZGRpbmc6M3B4OyBtYXJnaW46MXB4IDA7IHRleHQtZGVjb3JhdGlvbjpub25lIH0KCi8qIHJlbW92ZSBsYWJlbCBib3JkZXJzIGluIElFNiBiZWNhdXNlIElFNiBkb2VzIG5vdCBzdXBwb3J0IHRyYW5zcGFyZW5jeSAqLwoqIGh0bWwgLnVpLW11bHRpc2VsZWN0LWNoZWNrYm94ZXMgbGFiZWwgeyBib3JkZXI6bm9uZSB9Cg0KLyogXV0+ICovDQo8L3N0eWxlPg0KDQoJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi8qIDwhW0NEQVRBWyAqLw0KLnVpLW11bHRpc2VsZWN0LWhhc2ZpbHRlciB1bCB7IHBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6MnB4IH0KLnVpLW11bHRpc2VsZWN0LWZpbHRlciB7IGZsb2F0OmxlZnQ7IG1hcmdpbi1yaWdodDoxMHB4OyBmb250LXNpemU6MTFweCB9Ci51aS1tdWx0aXNlbGVjdC1maWx0ZXIgaW5wdXQgeyB3aWR0aDoxMDBweDsgZm9udC1zaXplOjEwcHg7IG1hcmdpbi1sZWZ0OjVweDsgaGVpZ2h0OjE1cHg7IHBhZGRpbmc6MnB4OyBib3JkZXI6MXB4IHNvbGlkICMyOTI5Mjk7IC13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7IC13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDsgfQoNCi8qIF1dPiAqLw0KPC9zdHlsZT4NCg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQovKiA8IVtDREFUQVsgKi8NCmltZyB7DQoJYm9yZGVyOiAwOw0KfQ0KcCB7DQoJbGluZS1oZWlnaHQ6IDEuM2VtOw0KCW1hcmdpbjogMS4zZW0gMDsNCglwYWRkaW5nOiAwOw0KCXRleHQtYWxpZ246IGp1c3RpZnk7DQp9DQouYmxvY2sgew0KCWRpc3BsYXk6IGJsb2NrOw0KfQ0KYSB7DQoJY29sb3I6ICNmZmY7DQoJdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KYTpob3ZlciB7DQoJY29sb3I6ICMwMDA7DQoJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoubWVudSB7DQoJbWFyZ2luOiAxMHB4IDBweCAwcHggMTgwcHgNCn0NCi5ob3Jpem9udGFsX21lbnUgew0KCXBhZGRpbmc6IDBweCAxMHB4IDBweCAwcHg7DQp9DQouaG9yaXpvbnRhbF9tZW51IHVsIHsNCglib3JkZXI6IDA7DQoJZmxvYXQ6IGxlZnQ7DQoJbGlzdC1zdHlsZTogbm9uZTsNCgltYXJnaW46IDA7DQoJcGFkZGluZzogMDsNCgl0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KLmhvcml6b250YWxfbWVudSB1bCBsaSB7DQoJYm9yZGVyOiAwOw0KCWZsb2F0OiBsZWZ0Ow0KCW1hcmdpbjogMDsNCglwYWRkaW5nOiAwcHggMTNweCAxMHB4IDBweDsNCn0NCi5ob3Jpem9udGFsX21lbnUgdWwgbGkgYSB7DQoJZmxvYXQ6IGxlZnQ7DQoJZm9udDogYm9sZCAxNHB4IGFyaWFsOw0KCW1hcmdpbjogMDsNCglwYWRkaW5nOiAxMHB4IDA7DQoJdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KLmhvcml6b250YWxfbWVudSB1bCBsaSBhOmxpbmsgew0KCWNvbG9yOiAjODI4Mjg0Ow0KfQ0KLmhvcml6b250YWxfbWVudSB1bCBsaSBhOnZpc2l0ZWQgew0KCWNvbG9yOiAjODI4Mjg0Ow0KfQ0KLmhvcml6b250YWxfbWVudSB1bCBsaSBhOmhvdmVyIHsNCgljb2xvcjogIzZiYjExMDsNCn0NCi5ob3Jpem9udGFsX21lbnUgdWwgbGkgYS5zZWxlY3RlZCB7DQoJY29sb3I6ICMwMDQ0Nzg7DQp9DQoudmVydGljYWxfbWVudSB7DQoJZmxvYXQ6IGxlZnQ7DQoJaGVpZ2h0OiBhdXRvOw0KCW1hcmdpbjogMHB4IDBweCAwcHggMTBweDsNCgl3aWR0aDogMjUwcHg7DQp9DQoudmVydGljYWxfbWVudSB1bCB7DQoJYm9yZGVyOiAwOw0KCWxpc3Qtc3R5bGU6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFvQUFBQUtDQU1BQUFDNjdEK1BBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFBZ1kwaFNUUUFBZWlZQUFJQ0VBQUQ2QUFBQWdPZ0FBSFV3QUFEcVlBQUFPcGdBQUJkd25McFJQQUFBQXdCUVRGUkY3ZmI3N1BYN3g5N3M4dm45Ny9mOHl1RHRtOExhb3NiZG5jVGJtc0hhb01YY3orUHY3L2I4emVMdXkrRHVvY1hkeWQvdDdmWDdwTWplOFBqODhmajhxTXJmek9IdThQZjhxY3JmQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUnF1aWZRQUFBRVJKUkVGVUdGZE5pa2tTZ0NBUXhOcFpHRnhSd09YL0wzVXNENUJUS2hVOFppa2ZJZ0pNSVl5eE1uT0JmWHE3U2wvUDlpNXdabFZkZ2NIWmlHai85WExWdnJiM0JhYlJBcGVFbGVDNEFBQUFBRWxGVGtTdVFtQ0MpIEluc2lkZTsNCgltYXJnaW46IDA7DQoJcGFkZGluZzogMDsNCgl0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KLnZlcnRpY2FsX21lbnUgdWwgbGkgew0KCWJvcmRlcjogMDsNCgltYXJnaW46IDA7DQoJcGFkZGluZzogNXB4IDBweCAwcHggMHB4Ow0KfQ0KLnZlcnRpY2FsX21lbnUgdWwgbGkgYSB7DQoJZm9udDogbm9ybWFsIDEzcHggYXJpYWw7DQoJbWFyZ2luOiAwOw0KCXBhZGRpbmc6IDBweCAwOw0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCi52ZXJ0aWNhbF9tZW51IHVsIGxpIGE6bGluayB7DQoJY29sb3I6ICM4N2FmY2I7DQp9DQoudmVydGljYWxfbWVudSB1bCBsaSBhOnZpc2l0ZWQgew0KCWNvbG9yOiAjODdhZmNiOw0KfQ0KLnZlcnRpY2FsX21lbnUgdWwgbGkuU2VsZWN0ZWQgYSB7DQoJY29sb3I6ICMwMDQ0Nzg7DQoJZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQoudmVydGljYWxfbWVudSB1bCBsaSBhOmhvdmVyIHsNCgljb2xvcjogIzZiYjExMDsNCglmb250LXdlaWdodDogYm9sZDsNCn0NCi5IZWxwSWNvIHsNCglwYWRkaW5nLXJpZ2h0OiA1cHg7DQoJcG9zaXRpb246IHJlbGF0aXZlOw0KCXRvcDogNHB4Ow0KfQ0KaW5wdXRbcmVhZG9ubHldLCB0ZXh0YXJlYVtyZWFkb25seV0sIHNlbGVjdFtyZWFkb25seV0NCnsNCiAgICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjAgIWltcG9ydGFudDsNCn0NCi5pbmZvIHsNCgliYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFTQ0FJQUFBQTJibkkrQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQUpjRWhaY3dBQURzTUFBQTdEQWNkdnFHUUFBQUFhZEVWWWRGTnZablIzWVhKbEFGQmhhVzUwTGs1RlZDQjJNeTQxTGpFd01QUnlvUUFBQW9sSlJFRlVPRStkazgxcjFFQVl4dmNraUpmZVBIa1M2VVVzWHJ5SUYvOEJwZUJCMFlNWFBhaGdyMkk5ZUJKUGdoWkVSQkFFclFWN3FLSlVVV2twVkNvVWlvY2x1OXMweWVaamtzMGttY2xtOGgyZmJCYldldE9IN015U2VYL3p2dlBtbVZiMXYycnRBNHV5cktxaXFFU2N4bUlZUnlLT2txR0lraVJKc1ZBVlZWRlB6VGdoaTZKSUVoSEg2YkFXQndnR2lrR0hQbVloUkpyR1JaWURLOHR5UXFacGl1aXdWaFFPZlQva2tXRFlnbEpmQ013aEN6bW1MRW1iTXNjazlrQ2lJUEI4RnJBd3dJK3hVUER3eHZ6TG8yZHZiMnkzOHp4bGpBVUJSeFVJSHBQNGg1UDR0U2p6dWVkNWJvQ1VIZzUwY1c1aCtzek50YTBkMURrS1lGak5zcXpNaXpvblRzZzVkMTNYOHdLTUE5ZmpqUHJVVzEzYmZ2aHM1ZXZtam9pWVJ3ZFlwWlI2TGtYeW9zaHFNcy96R2hnTWJOdDJIT0w1anFxWkw1YStuRGgzNStEMGxZVlhINnVNT3dSTExnSVFCZ0VaazVabEVVSXNtOWhFZDZuL2JYTjcrZk9QbWRtN3JXT1hGaitzeDRKYnhDR21CZDRraURUemZOUmJkTFhHYWhsNFROTXNvM0RwL2ZxQjZjc3o1K2R0MjBJU3ZHelVSSTV6Z25RY1I5ZjF2azUwczRaUjEremNvOWFSQy9lZnZMVU1vaWdLVmczRHdBZ2hHTWk0UXpoMHY5ODNOVlh0YS82QWJQejhkZmowclVQSHJ6NTR1dng4Y1JVTXBLcXFOaExhaWFhT3YyY2N4NmhFM2xQVlBZVjY5cnRQYTFNbnIwMmR1bjd2OFp0T3A0TThTQXNTSThMd1NTZE93QjdvT0NKMlphbXZLZTIyOUhwbC9mdkdscUZyMkVzZXFkZnJvUzU4aGIvZEJ6UFlscU5wU3FmWDNWVWthbG02cnZYa1hRZ01oSnhvRDl3N2NWL2pKb3g1V2NDeWhrbGtXWkdrZHE4clNSMjUyKzBpSWZvSmU2SzBKbkxmWGFsZmplNFIvQkVNUXg0dzJBVk9DcGlMUzlBd2Yyci8vZnlYVy80Ymt2cWlQeDY2YVpZQUFBQUFTVVZPUks1Q1lJST0pIG5vLXJlcGVhdCAwIDA7DQoJd2lkdGg6IDE5cHg7DQoJaGVpZ2h0OiAxOHB4Ow0KCWRpc3BsYXk6IGlubGluZS1ibG9jazsNCglwb3NpdGlvbjogcmVsYXRpdmU7DQoJdG9wOiA0cHg7DQp9DQouZGlhbG9nLW1vZGFsIHsNCglkaXNwbGF5OiBub25lOw0KfQ0KdGFibGUuZGlzcGxheSB0ZCB7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KfQ0KLyogXV0+ICovDQo8L3N0eWxlPg0KDQoJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi8qIDwhW0NEQVRBWyAqLw0KYm9keSB7DQogICAgYmFja2dyb3VuZDogdXJsKGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQWdBQVpBQmtBQUQvN0FBUlJIVmphM2tBQVFBRUFBQUFVQUFBLys0QURrRmtiMkpsQUdUQUFBQUFBZi9iQUlRQUFnSUNBZ0lDQWdJQ0FnTUNBZ0lEQkFNQ0FnTUVCUVFFQkFRRUJRWUZCUVVGQlFVR0JnY0hDQWNIQmdrSkNnb0pDUXdNREF3TURBd01EQXdNREF3TURBRURBd01GQkFVSkJnWUpEUXNKQ3cwUERnNE9EZzhQREF3TURBd1BEd3dNREF3TURBOE1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00vOEFBRVFnRXNBQUNBd0VSQUFJUkFRTVJBZi9FQUZnQUFRRUJBUUFBQUFBQUFBQUFBQUFBQUFJQkFBa0JBUUVCQUFBQUFBQUFBQUFBQUFBQUFBQUJCQkFCQVFBQ0F3RUJBQUFBQUFBQUFBQUFBQkVoWVFGeGdWR1JFUUVCQUFBQUFBQUFBQUFBQUFBQUFBQUFFZi9hQUF3REFRQUNFUU1SQUQ4QTdtTmpFd01EQXdNREFnaUNvSWwyb2dJQ1hnUkFSUlBRRlVTZ2xRVENnMFFRUUVvRFZSQUh3RUFWUmtBVVNxZ2dsQUtJaWcwRW9DcUNDWGtRTWdsN1VHaURRRlFhSU9RR2dOVkVvQlZFeUlGQVFSVUdpQUExUVJCQWFxQ0ExUWFBM1lnZ0ZWQm9KUkJxZ1VCdTFRY0lDb0lnMVFMc1JBQlFhSUlEVlFRRzlpRFZCb0RWUUtDVVFic0E4VUVSQUFFcWdpQlZFRUVCd3FEUUdnS3BSb0lBVlVUSUNBMFJGQnV3UVFLQ1hhZytpRFFTcUlpRFZCQkNJS2lBZ2dxQ0NmZ0pRRUVWRXo5QVFZRUVHcUpRUUVFUUVvTlFFR1VZR0JnWUdCLy8yUT09KSB0b3AgcmVwZWF0LXg7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzliYzJkYTsNCiAgICBjb2xvcjogIzY0NjQ2NDsNCiAgICBmb250LWZhbWlseTogdGFob21hLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmOw0KfQ0KDQouY2xlYXIgeyBjbGVhcjogYm90aDsgfQ0KDQouaGlkZGVuLCAuaGlkZGVuU2VjdGlvbiB7DQogICAgZGlzcGxheTogbm9uZTsNCiAgICB2aXNpYmlsaXR5OiBoaWRkZW47DQp9DQoNCi5sYXlvdXRNYWluIHsNCiAgICBtYXJnaW46IDBweCBhdXRvOw0KICAgIHBhZGRpbmc6IDVweCA1cHggNXB4IDVweDsNCiAgICB3aWR0aDogOTAwcHg7DQp9DQoNCi5sYXlvdXRSb3cgeyBtYXJnaW4tYm90dG9tOiA1cHg7IH0NCg0KLmNhcHRpb24geyAvKndpZHRoOiAxMDAlOyBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggYmxhY2s7Ki8gfQ0KDQoubm9jYXB0aW9uID4gLmNhcHRpb24geyBib3JkZXI6IDBweCAhaW1wb3J0YW50OyB9DQoNCi5ub2NhcHRpb24gPiAuY2FwdGlvbiBzcGFuIHsNCiAgICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7DQogICAgZGlzcGxheTogbm9uZTsNCn0NCg0KLmNhcHRpb24gLnRpdGxlIHsgcGFkZGluZy1sZWZ0OiA1cHg7IH0NCg0KLmNvbHVtbnMgew0KICAgIGJvcmRlcjogbm9uZTsNCiAgICBtYXJnaW46IDBweDsNCiAgICBwYWRkaW5nOiAwcHg7DQogICAgd2lkdGg6IDEwMCU7DQp9DQoNCi5jb2x1bW4gew0KICAgIGJvcmRlcjogbm9uZTsNCiAgICBmbG9hdDogbGVmdDsNCiAgICBtYXJnaW46IDBweDsNCiAgICBwYWRkaW5nOiAwcHg7DQogICAgd2lkdGg6IDEwMCU7DQp9DQoNCi5jZWxsIHsgbWFyZ2luOiA1cHggMCA1cHggNXB4OyB9DQoNCi50ZXh0Qm94IHsgd2lkdGg6IDE2MHB4OyB9DQoNCi5kYXRlcGlja2VyLCAuZGF0ZXBpY2tlcklTTyB7IHdpZHRoOiAxNjBweDsgfQ0KDQoudGltZSB7IHdpZHRoOiAxNjBweDsgfQ0KDQouZGF0ZXRpbWUgeyB3aWR0aDogMTYwcHg7IH0NCg0KLmRhdGVyYW5nZXBpY2tlciB7IHdpZHRoOiAxNjBweDsgfQ0KDQouY2hlY2tCb3hMaXN0IHNwYW4geyBkaXNwbGF5OiBibG9jazsgfQ0KDQoucmFkaW9CdXR0b25MaXN0IHNwYW4geyBkaXNwbGF5OiBibG9jazsgfQ0KDQoucmFkaW9CdXR0b25MaXN0IGlucHV0IHsgd2lkdGg6IDEwcHg7IH0NCg0KLmNvbWJvQm94IHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5yZW1vdGVDb21ib0JveCB7IHdpZHRoOiAxNjZweDsgfQ0KDQoucmVtb3RlTG9va3VwIHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5sb29rdXBDb25maWd1cmF0aW9uIHsgZGlzcGxheTpub25lOyB9DQoNCi5tdWx0aUNvbWJvYm94IHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5saXN0Qm94IHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5idXR0b24geyBmb250LXNpemU6IDAuNTVlbSAhaW1wb3J0YW50OyB9DQoNCi5oaWVyYXJjaGljYWxUcmVlIHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5jaG9zZW50cmVlIHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5yYWRpb0J1dHRvbkxhYmVsLCAuY2hlY2tCb3hMYWJlbCwgLm9wdGlvbkxhYmVsIHsNCiAgICBmb250LXNpemU6IDAuNzVlbTsNCiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7DQp9DQoNCi5maWVsZExhYmVsIHsNCiAgICBmbG9hdDogbGVmdDsNCiAgICBmb250LWZhbWlseTogYXJpYWw7DQogICAgZm9udC1zaXplOiAwLjc1ZW07DQogICAgbGluZS1oZWlnaHQ6IDI1cHg7DQogICAgbWFyZ2luOiAwcHggMThweCAwcHggMHB4Ow0KICAgIHBhZGRpbmc6IDA7DQogICAgd2lkdGg6IDE5MHB4Ow0KfQ0KDQoudGV4dEFyZWEgeyBmb250LWZhbWlseTogYXJpYWw7ICBvdmVyZmxvdzphdXRvOyB9DQovKiB2w71uaW1rYSBwcmUgRmlyZWZveCAqLw0KDQpALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCkgeyAudGV4dEFyZWEgeyBmb250LXNpemU6IDExMiU7IH0gfQ0KDQoubGFiZWwgew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIGZvbnQtZmFtaWx5OiBhcmlhbDsNCiAgICBmb250LXNpemU6IDAuNzVlbTsNCiAgICBtYXJnaW46IDA7DQogICAgcGFkZGluZzogMDsNCn0NCg0KLmZpZWxkQ29udGVudCB7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgZm9udC1mYW1pbHk6IGFyaWFsOw0KICAgIGZvbnQtc2l6ZTogMC43NWVtOw0KICAgIG1hcmdpbjogMHB4Ow0KICAgIHBhZGRpbmc6IDBweDsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOw0KfQ0KDQouZmllbGRJbmZvIHsNCiAgICBsZWZ0OiAwcHg7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogMHB4Ow0KfQ0KDQojcmVwZXRpdGlvbkNvbW1hbmRzIHsNCiAgICBtYXJnaW46IDVweDsNCiAgICBwYWRkaW5nOiAwcHg7DQp9DQoNCi5hZGRSZW1vdmVTZWN0aW9uIHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgZm9udC1mYW1pbHk6IGFyaWFsOw0KICAgIGZvbnQtc2l6ZTogMC43NWVtOw0KfQ0KDQoucmVtb3ZlU2VjdGlvbiB7IGRpc3BsYXk6IG5vbmU7IH0NCg0KZmllbGRzZXQgew0KICAgIGJvcmRlcjogMDsNCiAgICBtYXJnaW4tdG9wOiA1cHg7DQogICAgcGFkZGluZzogMDsNCn0NCg0Kc2VsZWN0LnRleHQgew0KICAgIG1hcmdpbi1ib3R0b206IDEycHg7DQogICAgcGFkZGluZzogLjRlbTsNCiAgICB3aWR0aDogOTUlOw0KfQ0KDQouZXJyb3JzQ29udGFpbmVyIHsNCiAgICBib3JkZXI6IDJweCBzb2xpZCByZWQgIWltcG9ydGFudDsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIGZvbnQtc2l6ZTogMC43NWVtOw0KICAgIG1hcmdpbjogMHB4IGF1dG87DQogICAgcGFkZGluZzogNXB4Ow0KICAgIHdpZHRoOiA5MDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouZXJyb3JzQ29udGFpbmVyIGxpIHsNCiAgICBjb2xvcjogcmVkOw0KICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsNCiAgICBwYWRkaW5nOiAwcHg7DQp9DQoNCi5lcnJvcnNDb250YWluZXIgbGkgbGFiZWwgeyBjdXJzb3I6IHBvaW50ZXI7IH0NCg0KaW5wdXQuZXJyb3JbdHlwZT10ZXh0XSwNCnRleHRhcmVhLmVycm9yIHsNCiAgICBib3JkZXI6IDFweCBzb2xpZCByZWQ7DQogICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHJlZDsNCn0NCg0Kc2VsZWN0LmVycm9yIHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9DQoNCmlucHV0LmVycm9yW3R5cGU9cmFkaW9dLA0KaW5wdXQuZXJyb3JbdHlwZT1jaGVja2JveF0gew0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsNCiAgICBvdXRsaW5lOiAxcHggc29saWQgcmVkOw0KfQ0KDQppbnB1dC53YXJuaW5nW3R5cGU9dGV4dF0sDQp0ZXh0YXJlYS53YXJuaW5nIHsNCiAgICBib3JkZXI6IDFweCBzb2xpZCBvcmFuZ2U7DQogICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIG9yYW5nZTsNCn0NCg0Kc2VsZWN0Lndhcm5pbmcgeyBib3JkZXI6IDFweCBzb2xpZCBvcmFuZ2U7IH0NCg0KaW5wdXQud2FybmluZ1t0eXBlPXJhZGlvXSwNCmlucHV0Lndhcm5pbmdbdHlwZT1jaGVja2JveF0gew0KICAgIGJvcmRlcjogMXB4IHNvbGlkIG9yYW5nZTsNCiAgICBvdXRsaW5lOiAxcHggc29saWQgb3JhbmdlOw0KfQ0KDQouZXJyb3JzQ29udGFpbmVyIGxpIGxhYmVsLndhcm5pbmcgew0KICAgIGNvbG9yOiAjQjM2RjAwOw0KCS8qY29sb3I6IG9yYW5nZTsqLw0KICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsNCiAgICBwYWRkaW5nOiAwcHg7DQp9DQoNCmVtIHsNCiAgICBjb2xvcjogcmVkOw0KICAgIGZvbnQtc2l6ZTogMC44NWVtOw0KICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMTZweDsNCn0NCg0KLmFycm93IHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHJpZ2h0OiAycHg7DQogICAgdG9wOiAycHg7DQp9DQoNCi5pbmZvSWNvbiB7IGZsb2F0OiBsZWZ0OyB9DQoNCi50YWJsZUZpbHRlciB7IHBhZGRpbmctYm90dG9tOiA0cHg7IH0NCg0KLnRhYmxlRmlsdGVyVGV4dCB7DQogICAgbWFyZ2luLXJpZ2h0OiA0cHg7DQogICAgd2lkdGg6IDE2MHB4Ow0KfQ0KDQp0YWJsZS5kaXNwbGF5IHsNCiAgICBjbGVhcjogYm90aDsNCiAgICBtYXJnaW46IDAgYXV0bzsNCiAgICB3aWR0aDogMTAwJTsNCn0NCg0KdGFibGUuZGlzcGxheSB0ci5ldmVuLnJvd19zZWxlY3RlZCB0ZCB7IGJhY2tncm91bmQtY29sb3I6ICNCMEJFRDk7IH0NCg0KdGFibGUuZGlzcGxheSB0ci5vZGQucm93X3NlbGVjdGVkIHRkIHsgYmFja2dyb3VuZC1jb2xvcjogIzlGQUZEMTsgfQ0KDQp0YWJsZS5kaXNwbGF5IHRoZWFkIHRoIHNwYW4geyBmbG9hdDogcmlnaHQ7IH0NCg0KLmRhdGFUYWJsZXNfZmlsdGVyIHsgcGFkZGluZzogMTBweCAwIDAgOHB4OyB9DQoNCi5kYXRhVGFibGVzX2luZm8gew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIHdpZHRoOiA2MCU7DQp9DQoNCi5kYXRhVGFibGVzX3BhZ2luYXRlIHsNCiAgICBmbG9hdDogcmlnaHQ7DQogICAgdGV4dC1hbGlnbjogcmlnaHQ7DQogICAgd2lkdGg6IDQ0cHg7DQogICAgd2lkdGg6IDUwcHg7DQp9DQovKiBNYWluIGNzcyBlbmQgKi8NCi8qIGpxdWVyeSBjdXN0b20gc3R5bGVzIHN0YXJ0ICovDQoNCmRpdi51aS1kYXRlcGlja2VyIHsgZm9udC1zaXplOiAwLjgzZW07IH0NCg0KLnVpLWRpYWxvZyB7DQogICAgZm9udC1zaXplOiAwLjdlbTsNCiAgICBwYWRkaW5nOiAuM2VtOw0KfQ0KLyoganF1ZXJ5IGN1c3RvbSBzdHlsZXMgZW5kICovDQoNCnRhYmxlLmZvcm1zIHsgbWFyZ2luOiAwcHggMHB4IDVweCAwcHg7IH0NCg0KdGFibGUuZm9ybXMgdGggeyB0ZXh0LWFsaWduOiBsZWZ0OyB9DQoNCi50ZXh0bGVmdCB7IHRleHQtYWxpZ246IGxlZnQ7IH0NCg0KLnRleHRjZW50ZXIgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0NCg0KLnRleHRBcmVhT25lUm93IHsNCiAgICBoZWlnaHQ6IDE5cHg7DQogICAgd2lkdGg6IDgwNnB4Ow0KfQ0KDQouc3RhdHVzRGlhbG9nIGltZyB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgbWFyZ2luOiAxNXB4IGF1dG87DQp9DQoNCi5zdGF0dXNEaWFsb2cgLnN0YXR1c01lc3NhZ2UgeyBmb250LXdlaWdodDogYm9sZDsgfQ0KDQoubm9zY3JpcHQgew0KICAgIGNvbG9yOiBSZWQ7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouaGVhZGVyY29ycmVjdGlvbiB7DQogICAgZm9udC1zaXplOiAwLjc1ZW07DQogICAgbWFyZ2luOiAwcHg7DQp9DQoNCi5maWVsZFZpc3VhbGl6YXRpb24geyAgICANCiAgICBmb250LWZhbWlseTogYXJpYWw7DQogICAgZm9udC1zaXplOiAwLjc1ZW07DQogICAgbWFyZ2luOiAwcHg7DQogICAgcGFkZGluZzogMHB4OyANCn0NCg0KLndvcmR3cmFwIHsgDQogICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7ICAgICAgLyogQ1NTMyAqLyAgIA0KICAgd2hpdGUtc3BhY2U6IC1tb3otcHJlLXdyYXA7IC8qIEZpcmVmb3ggKi8gICAgDQogICB3aGl0ZS1zcGFjZTogLXByZS13cmFwOyAgICAgLyogT3BlcmEgPDcgKi8gICANCiAgIHdoaXRlLXNwYWNlOiAtby1wcmUtd3JhcDsgICAvKiBPcGVyYSA3ICovICAgIA0KICAgd29yZC13cmFwOiBicmVhay13b3JkOyAgICAgIC8qIElFICovDQp9DQoNCi5kYXRlLXJhbmdlLXNlbGVjdGVkID4gLnVpLXN0YXRlLWFjdGl2ZSwNCi5kYXRlLXJhbmdlLXNlbGVjdGVkID4gLnVpLXN0YXRlLWRlZmF1bHQgew0KICAgYmFja2dyb3VuZDogbm9uZTsNCiAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0c3RlZWxibHVlOw0KfQ0KDQoudWktd2lkZ2V0LW92ZXJsYXkgew0KICAgICAgIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50Ow0KfQ0KDQouY2xvc2VCdXR0b24gew0KICAgIGN1cnNvcjogcG9pbnRlcjsgIA0KfQ0KDQoud2l0aEhlYWRlciB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMnB4Ow0KICAgIHJpZ2h0OiAxNXB4Ow0KfQ0KDQoubm9IZWFkZXIgew0KICAgIGZsb2F0OiByaWdodDsNCn0NCg0KLmxvb2t1cGJ1dHRvbiB7DQogICAgbWFyZ2luLWxlZnQgOjJweDsNCn0NCg0KLkxvb2t1cERldGFpbEluZm8gew0KfQ0KDQoubG9va3VwQ29tcG9uZW50SWQgew0KfQ0KDQoubG9va3VwQ29tcG9uZW50TmFtZSB7DQp9DQoNCi5maWVsZElkIHsNCn0NCg0KLkxvb2t1cERldGFpbCB7DQp9DQoNCi5Mb29rdXBEZXRhaWxJbmZvVGV4dCB7DQp9DQoNCi5Mb29rdXBGb3JtIHsNCn0NCg0KLkZpbHRlckJ1dHRvbiB7DQp9DQovKiBdXT4gKi8NCjwvc3R5bGU+DQoNCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLyogPCFbQ0RBVEFbICovDQoudHJlZXdyYXBwZXIgew0KICBwYWRkaW5nOjNweDsNCiAgbWFyZ2luLXRvcDogMnB4Ow0KICBib3JkZXI6IDFweCBzb2xpZCAjOTk5Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KfQ0KDQoudHJlZXNlbGVjdCB7DQogIG1hcmdpbjowOw0KICBwYWRkaW5nOjA7DQogIGZvbnQ6OTAlIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQogIGNvbG9yOiM1NTU7DQogIGxpbmUtaGVpZ2h0OjE1MCU7DQogIHRleHQtYWxpZ246bGVmdDsNCn0NCg0KLnRyZWVzZWxlY3QgYSB7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQogIGNvbG9yOiMwNTdmYWM7DQp9DQoNCi50cmVlc2VsZWN0IGE6aG92ZXJ7DQogIHRleHQtZGVjb3JhdGlvbjpub25lOw0KICBjb2xvcjojOTk5Ow0KfQ0KDQoudHJlZXNlbGVjdCwgLnRyZWVzZWxlY3QgdWwsIC50cmVlc2VsZWN0IC50cmVlbm9kZSB7DQogIG1hcmdpbjowOw0KICBwYWRkaW5nOjA7DQogIGxpc3Qtc3R5bGU6bm9uZTsNCn0NCg0KLnRyZWVzZWxlY3QgdWwgew0KICBkaXNwbGF5Om5vbmU7DQp9DQoNCi50cmVlc2VsZWN0IC50cmVlbm9kZSB7DQogIGxpbmUtaGVpZ2h0OiAyNHB4Ow0KICBib3JkZXItdG9wOiAxcHggc29saWQgI2ZmZjsNCiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZmZmOw0KICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZmZmOw0KICBwb3NpdGlvbjpyZWxhdGl2ZTsNCiAgd2lkdGg6MTAwJTsNCn0NCg0KLnRyZWVzZWxlY3QgLnRyZWVub2RlIHVsIHVsIHsNCiAgbWFyZ2luOiAwIDE1cHggMCAxNXB4Ow0KfQ0KDQoudHJlZXNlbGVjdCBsaS5ldmVuIHsNCiAgYmFja2dyb3VuZDojZjNmM2YzOw0KfQ0KLnRyZWVzZWxlY3QgbGkub2RkIHsNCiAgYmFja2dyb3VuZDojZjNmM2YzOw0KfQ0KDQoudHJlZXNlbGVjdCAudHJlZW5vZGUgaW5wdXQsIC50cmVlc2VsZWN0IC50cmVlbm9kZSAudHJlZW5vZGUtbm8tc2VsZWN0IHsNCiAgZmxvYXQ6bGVmdDsNCiAgcG9zaXRpb246YWJzb2x1dGU7DQogIHRvcDozcHg7DQogIHdpZHRoOjEzcHg7DQogIGhlaWdodDoxM3B4Ow0KICBjdXJzb3I6YXV0bzsNCiAgZm9udC1zaXplOjA7DQp9DQoNCi50cmVlc2VsZWN0IC50cmVlbm9kZSBzcGFuLnRyZWVzZWxlY3QtZXhwYW5kIHsNCiAgZmxvYXQ6bGVmdDsNCiAgcG9zaXRpb246YWJzb2x1dGU7DQogIHRvcDo0cHg7DQogIHdpZHRoOjEzcHg7DQogIGhlaWdodDoxM3B4Ow0KICBjdXJzb3I6YXV0bzsNCiAgZm9udC1zaXplOjA7DQp9DQoNCi50cmVlc2VsZWN0IC50cmVlc2VsZWN0LXNlbGVjdC1hbGwgew0KICBmb250LXdlaWdodDogYm9sZDsNCiAgbWFyZ2luLWxlZnQ6IDVweDsNCn0NCg0KLnRyZWVzZWxlY3QgLnRyZWVub2RlIHNwYW4udHJlZXNlbGVjdC1leHBhbmQsIC50cmVlc2VsZWN0IC50cmVlbm9kZSBzcGFuLnRyZWVzZWxlY3QtZXhwYW5kLmNvbGxhcHNlZCB7DQogIGJhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaERRQU5BSkVBQUZWVlZlZm41Ly8vL3dBQUFDSDVCQUFBQUFBQUxBQUFBQUFOQUEwQUFBSWdqSThveXkzbUlveHRNdURzd2pWY0FIS1AxNGlMSnBnajFiRU1LaVd5VVFBQU93PT0pIG5vLXJlcGVhdCAwIDA7DQp9DQoNCi50cmVlc2VsZWN0IC50cmVlbm9kZSBzcGFuLnRyZWVzZWxlY3QtZXhwYW5kLmV4cGFuZGVkIHsNCiAgYmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRFFBTkFKRUFBRlZWVmVmbjUvLy8vd0FBQUNINUJBQUFBQUFBTEFBQUFBQU5BQTBBQUFJYmpJOG95eTNtSW94dDBtV3ZCWnl6VElGU2NIMWsrWnhsd2g0RkFEcz0pIG5vLXJlcGVhdCAwIDA7DQp9DQoNCi50cmVlc2VsZWN0IHNwYW4udHJlZWJ1c3ksIC50cmVlc2VsZWN0IHNwYW4udHJlZWJ1c3kudHJlZXNlbGVjdC1leHBhbmQuZXhwYW5kZWQsIC50cmVlc2VsZWN0IHNwYW4udHJlZWJ1c3kudHJlZXNlbGVjdC1leHBhbmQuY29sbGFwc2VkICB7DQogIGJhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaERRQU5BT01BQVAvLy93QUFBQUFBQUlLQ2duSnljcWlvcUx5OHZNN096dDdlM3BTVWxPam82R2hvYVAvLy8vLy8vLy8vLy8vLy95SC9DMDVGVkZORFFWQkZNaTR3QXdFQUFBQWgvZzVCYkd4UWJHRjVaWEp6TG1OdmJRQWgrUVFKQ2dBUEFDd0FBQUFBRFFBTkFBQUVJdkRKU2F1dEl1dTlSekVIWW1VZUtHSkNHWTdwdDZMcVNaR3VQSEc0ZHUxOFgwVUFJZmtFQ1FvQUR3QXNBQUFBQUEwQURRQUFCQ0x3eVVtcnJTTHJ2Y3NnQjJKbEhpaGlRaG1PNmJlaTZrbVJyanh4dUhidGZGOUZBQ0g1QkFrS0FBOEFMQUFBQUFBTkFBMEFBQVFpOE1sSnE2MGk2NzFQU1FOaFpSNG9Za0laanVtM291cEprYTQ4Y2JoMjdYeGZSUUFoK1FRSkNnQVBBQ3dBQUFBQURRQU5BQUFFSS9ESlNhdXRJdXU5MVRGRk1tQ0NCNHFrR1k1VXBxSnQrYTNwREU5Y3JsMTg3MWNSQUNINUJBa0tBQThBTEFBQUFBQU5BQTBBQUFRcThNbEpxNjBpNjcyZlFvZFJETVNVZWFCSW1nSWFqcVYwZnU4cXQ3UWFQM01LczV4ZzYwSXNHaWtSQUNINUJBa0tBQThBTEFBQUFBQU5BQTBBQUFRcThNbEpxNjBpNjcyblFrZVJETVNUZWFCSW1nSWFqdVVwZmU4cVA3UWF0M01LczV3ZzcwSXNHaWNSQUNINUJBa0tBQThBTEFBQUFBQU5BQTBBQUFRajhNbEpxNjBpNjcyck9rYVJFSmtIaXFSZ2htTkpmV3k2b3U0RTAxeGVYM3p2U3hFQUlma0VDUW9BRHdBc0FBQUFBQTBBRFFBQUJDTHd5VW1yclNMcnZhMUNoMEZrSGlpUzFSZU9Rcm1pbEhxMnFjbHlPSDN0ZkQ5RkFDSDVCQWtLQUE4QUxBQUFBQUFOQUEwQUFBUWU4TWxKcTYwaTY3M3ZXMFNTZWFBb2tPRjRsYXJGbm12S3phMW4zM1lFQUNINUJBa0tBQThBTEFBQUFBQU5BQTBBQUFRaThNbEpxNjBpNjczdElrTmlaQjRva3RVWGprSzVvcFI2dHFuSmNqaDk3WHcvUlFBaCtRUUpDZ0FQQUN3QUFBQUFEUUFOQUFBRUkvREpTYXV0SXV1OTZ4cEpZU0NaQjRxa1lJWmpTWDFzdXFMdUJOTmNYbDk4NzBzUkFDSDVCQWtLQUE4QUxBQUFBQUFOQUEwQUFBUXE4TWxKcTYwaTY3M25Ja05oSE1pVGVhQkltZ0lhanVVcGZlOHFQN1FhdDNNS3M1d2c3MElzR2ljUkFDSDVCQWtLQUE4QUxBQUFBQUFOQUEwQUFBUXE4TWxKcTYwaTY3M2ZJa05TSE1pVWVhQkltZ0lhanFWMGZ1OHF0N1FhUDNNS3M1eGc2MElzR2lrUkFDSDVCQUVLQUE4QUxBQUFBQUFOQUEwQUFBUWo4TWxKcTYwaTY3M1hTSVZ4WUlJSGlxUVpqbFNtb20zNXJla01UMXl1WFh6dlZ4RUFPdz09KSBuby1yZXBlYXQgMCAwOw0KICB3aWR0aDoxNnB4Ow0KICBoZWlnaHQ6MTBweDsNCn0NCg0KLnRyZWVzZWxlY3QgLnRyZWVub2RlIHNwYW4udHJlZXNlbGVjdC1leHBhbmQudHJlZWJ1c3kgew0KICB0b3A6NXB4Ow0KfQ0KDQoudHJlZXNlbGVjdC10aXRsZSB7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgbWFyZ2luLXJpZ2h0OiAxMHB4Ow0KfQ0KDQovKiBdXT4gKi8NCjwvc3R5bGU+DQoNCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLyogPCFbQ0RBVEFbICovDQovKiBAZ3JvdXAgQmFzZSAqLwouY2h6bnRyZWUtY29udGFpbmVyIHsKICBmb250LXNpemU6IDEzcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB6b29tOiAxOwogICpkaXNwbGF5OiBpbmxpbmU7Cn0KLmNoem50cmVlLWNvbnRhaW5lciAuY2h6bnRyZWUtZHJvcCB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwogIGJvcmRlci10b3A6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMjlweDsKICBsZWZ0OiAwOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCA0cHggNXB4IHJnYmEoMCwwLDAsLjE1KTsKICAtbW96LWJveC1zaGFkb3cgICA6IDAgNHB4IDVweCByZ2JhKDAsMCwwLC4xNSk7CiAgLW8tYm94LXNoYWRvdyAgICAgOiAwIDRweCA1cHggcmdiYSgwLDAsMCwuMTUpOwogIGJveC1zaGFkb3cgICAgICAgIDogMCA0cHggNXB4IHJnYmEoMCwwLDAsLjE1KTsKICB6LWluZGV4OiA5OTk7Cn0KLyogQGVuZCAqLwoKLyogQGdyb3VwIFNpbmdsZSBDaG9zZW4gKi8KLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUgLmNoem50cmVlLXNpbmdsZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9wLCBjb2xvci1zdG9wKDAsICNlZWVlZWUpLCBjb2xvci1zdG9wKDAuNSwgd2hpdGUpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCAjZWVlZWVlIDAlLCB3aGl0ZSA1MCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNlZWVlZWUgMCUsIHdoaXRlIDUwJSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlZWVlZSAwJSwjZmZmZmZmIDUwJSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNlZWVlZWUgMCUsI2ZmZmZmZiA1MCUpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCBzdGFydENvbG9yc3RyPScjZWVlZWVlJywgZW5kQ29sb3JzdHI9JyNmZmZmZmYnLEdyYWRpZW50VHlwZT0wICk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlZWVlZSAwJSwjZmZmZmZmIDUwJSk7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzICAgOiA0cHg7CiAgYm9yZGVyLXJhZGl1cyAgICAgICAgOiA0cHg7CiAgLW1vei1iYWNrZ3JvdW5kLWNsaXAgICA6IHBhZGRpbmc7CiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwogIGJhY2tncm91bmQtY2xpcCAgICAgICAgOiBwYWRkaW5nLWJveDsKICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwogIGRpc3BsYXk6IGJsb2NrOwogIG92ZXJmbG93OiBoaWRkZW47CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgaGVpZ2h0OiAyNnB4OwogIGxpbmUtaGVpZ2h0OiAyNnB4OwogIHBhZGRpbmc6IDAgMCAwIDhweDsKICBjb2xvcjogIzQ0NDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUgLmNoem50cmVlLXNpbmdsZSBzcGFuIHsKICBtYXJnaW4tcmlnaHQ6IDI2cHg7CiAgZGlzcGxheTogYmxvY2s7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIC1vLXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIC1tcy10ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2luZ2xlIGFiYnIgewogIGRpc3BsYXk6IGJsb2NrOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogMjZweDsKICB0b3A6IDhweDsKICB3aWR0aDogMTJweDsKICBoZWlnaHQ6IDEzcHg7CiAgZm9udC1zaXplOiAxcHg7CiAgYmFja2dyb3VuZDogdXJsKGh0dHA6Ly9oYXJ2ZXN0aHEuZ2l0aHViLmNvbS9jaG9zZW4vY2hvc2VuL2Nob3Nlbi1zcHJpdGUucG5nKSByaWdodCB0b3Agbm8tcmVwZWF0Owp9Ci5jaHpudHJlZS1jb250YWluZXItc2luZ2xlIC5jaHpudHJlZS1zaW5nbGUgYWJicjpob3ZlciB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgLTExcHg7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUgLmNoem50cmVlLXNpbmdsZSBkaXYgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzICAgOiAwIDRweCA0cHggMDsKICBib3JkZXItcmFkaXVzICAgICAgICA6IDAgNHB4IDRweCAwOwogIC1tb3otYmFja2dyb3VuZC1jbGlwICAgOiBwYWRkaW5nOwogIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBiYWNrZ3JvdW5kLWNsaXAgICAgICAgIDogcGFkZGluZy1ib3g7CiAgYmFja2dyb3VuZDogI2NjYzsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9wLCBjb2xvci1zdG9wKDAsICNjY2MpLCBjb2xvci1zdG9wKDAuNiwgI2VlZSkpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNjY2MgMCUsICNlZWUgNjAlKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCAjY2NjIDAlLCAjZWVlIDYwJSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGJvdHRvbSwgI2NjYyAwJSwgI2VlZSA2MCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjY2NjY2NjIDAlLCNlZWVlZWUgNjAlKTsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCggc3RhcnRDb2xvcnN0cj0nI2NjY2NjYycsIGVuZENvbG9yc3RyPScjZWVlZWVlJyxHcmFkaWVudFR5cGU9MCApOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNjY2NjY2MgMCUsI2VlZWVlZSA2MCUpOwogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2FhYTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDA7CiAgdG9wOiAwOwogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogMTAwJTsKICB3aWR0aDogMThweDsKfQouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2luZ2xlIGRpdiBiIHsKICBiYWNrZ3JvdW5kOiB1cmwoJ2h0dHA6Ly9oYXJ2ZXN0aHEuZ2l0aHViLmNvbS9jaG9zZW4vY2hvc2VuL2Nob3Nlbi1zcHJpdGUucG5nJykgbm8tcmVwZWF0IDAgMXB4OwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2VhcmNoIHsKICBwYWRkaW5nOiAzcHggNHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBtYXJnaW46IDA7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICB6LWluZGV4OiAxMDEwOwp9Ci5jaHpudHJlZS1jb250YWluZXItc2luZ2xlIC5jaHpudHJlZS1zZWFyY2ggaW5wdXRbdHlwZT0ndGV4dCddIHsKICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9wLCBjb2xvci1zdG9wKDAuODUsIHdoaXRlKSwgY29sb3Itc3RvcCgwLjk5LCAjZWVlZWVlKSk7CiAgYmFja2dyb3VuZDogLTIycHgsIC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sIHdoaXRlIDg1JSwgI2VlZWVlZSA5OSUpOwogIGJhY2tncm91bmQ6IC0yMnB4LCAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQoYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiA4NSUsI2VlZWVlZSA5OSUpOwogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYgODUlLCNlZWVlZWUgOTklKTsKICBtYXJnaW46IDFweCAwOwogIHBhZGRpbmc6IDRweCAyMHB4IDRweCA1cHg7CiAgb3V0bGluZTogMDsKICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwogIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogMS4yZW07CiAgbGluZS1oZWlnaHQ6IDEuOGVtOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7CiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogYXV0bzsKfQoKLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUgLmNoem50cmVlLXNlYXJjaC5tYW51YWxzZWFyY2ggaW5wdXRbdHlwZT0ndGV4dCddIHsKICB3aWR0aDogODUlOwp9CgouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2VhcmNoLm1hbnVhbHNlYXJjaCBpbnB1dC5jaG9zZW50cmVlLXNlYXJjaC1idG4gewogIHBhZGRpbmc6IDVweCAyMHB4OwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUgLmNoem50cmVlLWRyb3AgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzICAgOiAwIDAgNHB4IDRweDsKICBib3JkZXItcmFkaXVzICAgICAgICA6IDAgMCA0cHggNHB4OwogIC1tb3otYmFja2dyb3VuZC1jbGlwICAgOiBwYWRkaW5nOwogIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBiYWNrZ3JvdW5kLWNsaXAgICAgICAgIDogcGFkZGluZy1ib3g7Cn0KLyogQGVuZCAqLwoKLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUtbm9zZWFyY2ggLmNoem50cmVlLXNlYXJjaCBpbnB1dFt0eXBlPSd0ZXh0J10gewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiAtOTAwMHB4Owp9CgovKiBAZ3JvdXAgTXVsdGkgQ2hvc2VuICovCi5jaHpudHJlZS1jb250YWluZXItbXVsdGkgLmNoem50cmVlLWNob2ljZXMgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgY29sb3Itc3RvcCgwLjg1LCB3aGl0ZSksIGNvbG9yLXN0b3AoMC45OSwgI2VlZWVlZSkpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sIHdoaXRlIDg1JSwgI2VlZWVlZSA5OSUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sIHdoaXRlIDg1JSwgI2VlZWVlZSA5OSUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChib3R0b20sIHdoaXRlIDg1JSwgI2VlZWVlZSA5OSUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmIDg1JSwjZWVlZWVlIDk5JSk7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoIHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmYnLCBlbmRDb2xvcnN0cj0nI2VlZWVlZScsR3JhZGllbnRUeXBlPTAgKTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmIDg1JSwjZWVlZWVlIDk5JSk7CiAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBjdXJzb3I6IHRleHQ7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICBoZWlnaHQ6IDElOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQouY2h6bnRyZWUtY29udGFpbmVyLW11bHRpIC5jaHpudHJlZS1jaG9pY2VzIGxpIHsKICBmbG9hdDogbGVmdDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci5jaHpudHJlZS1jb250YWluZXItbXVsdGkgLmNoem50cmVlLWNob2ljZXMgLnNlYXJjaC1maWVsZCB7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKfQouY2h6bnRyZWUtY29udGFpbmVyLW11bHRpIC5jaHpudHJlZS1jaG9pY2VzIC5zZWFyY2gtZmllbGQgaW5wdXRbdHlwZT0ndGV4dCddIHsKICBjb2xvcjogIzY2NjsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIGJvcmRlcjogMCAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDVweDsKICBtYXJnaW46IDFweCAwOwogIG91dGxpbmU6IDA7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogIC1tb3otYm94LXNoYWRvdyAgIDogbm9uZTsKICAtby1ib3gtc2hhZG93ICAgICA6IG5vbmU7CiAgYm94LXNoYWRvdyAgICAgICAgOiBub25lOwp9Ci5jaHpudHJlZS1jb250YWluZXItbXVsdGkgLmNoem50cmVlLWNob2ljZXMgLnNlYXJjaC1maWVsZCAuZGVmYXVsdCB7CiAgY29sb3I6ICM5OTk7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWNob2ljZSB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgLW1vei1ib3JkZXItcmFkaXVzICAgOiAzcHg7CiAgYm9yZGVyLXJhZGl1cyAgICAgICAgOiAzcHg7CiAgLW1vei1iYWNrZ3JvdW5kLWNsaXAgICA6IHBhZGRpbmc7CiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwogIGJhY2tncm91bmQtY2xpcCAgICAgICAgOiBwYWRkaW5nLWJveDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTRlNGU0OwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IGJvdHRvbSwgbGVmdCB0b3AsIGNvbG9yLXN0b3AoMCwgI2U0ZTRlNCksIGNvbG9yLXN0b3AoMC43LCAjZWVlZWVlKSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoY2VudGVyIGJvdHRvbSwgI2U0ZTRlNCAwJSwgI2VlZWVlZSA3MCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNlNGU0ZTQgMCUsICNlZWVlZWUgNzAlKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoYm90dG9tLCAjZTRlNGU0IDAlLCAjZWVlZWVlIDcwJSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNlNGU0ZTQgMCUsI2VlZWVlZSA3MCUpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCBzdGFydENvbG9yc3RyPScjZTRlNGU0JywgZW5kQ29sb3JzdHI9JyNlZWVlZWUnLEdyYWRpZW50VHlwZT0wICk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2U0ZTRlNCAwJSwjZWVlZWVlIDcwJSk7CiAgY29sb3I6ICMzMzM7CiAgYm9yZGVyOiAxcHggc29saWQgI2I0YjRiNDsKICBsaW5lLWhlaWdodDogMTNweDsKICBwYWRkaW5nOiAzcHggMTlweCAzcHggNnB4OwogIG1hcmdpbjogM3B4IDAgM3B4IDVweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWNob2ljZSBzcGFuIHsKICBjdXJzb3I6IGRlZmF1bHQ7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWNob2ljZS1mb2N1cyB7CiAgYmFja2dyb3VuZDogI2Q0ZDRkNDsKfQouY2h6bnRyZWUtY29udGFpbmVyLW11bHRpIC5jaHpudHJlZS1jaG9pY2VzIC5zZWFyY2gtY2hvaWNlIC5zZWFyY2gtY2hvaWNlLWNsb3NlIHsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDNweDsKICB0b3A6IDVweDsKICB3aWR0aDogMTBweDsKICBoZWlnaHQ6IDEwcHg7CiAgZm9udC1zaXplOiAxcHg7CiAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTgvU3R5bGVzL2ltYWdlcy9jaG9zZW4tc3ByaXRlLnBuZykgcmlnaHQgdG9wIG5vLXJlcGVhdDsKfQouY2h6bnRyZWUtY29udGFpbmVyLW11bHRpIC5jaHpudHJlZS1jaG9pY2VzIC5zZWFyY2gtY2hvaWNlIC5zZWFyY2gtY2hvaWNlLWNsb3NlOmhvdmVyIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAtMTFweDsKfQouY2h6bnRyZWUtY29udGFpbmVyLW11bHRpIC5jaHpudHJlZS1jaG9pY2VzIC5zZWFyY2gtY2hvaWNlLWZvY3VzIC5zZWFyY2gtY2hvaWNlLWNsb3NlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAtMTFweDsKfQovKiBAZW5kICovCgovKiBAZ3JvdXAgUmVzdWx0cyAqLwouY2h6bnRyZWUtY29udGFpbmVyIC5jaHpudHJlZS1yZXN1bHRzIHsKICBtYXJnaW46IDAgNHB4IDRweCAwOwogIG1heC1oZWlnaHQ6IDE5MHB4OwogIHBhZGRpbmc6IDAgMCAwIDRweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwogIG92ZXJmbG93LXk6IGF1dG87Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtcmVzdWx0cyB7CiAgbWFyZ2luOiAtMXB4IDAgMDsKICBwYWRkaW5nOiAwOwp9Ci5jaHpudHJlZS1jb250YWluZXIgLmNoem50cmVlLXJlc3VsdHMgbGkgewogIGRpc3BsYXk6IG5vbmU7CiAgbGluZS1oZWlnaHQ6IDgwJTsKICBwYWRkaW5nOiA3cHggN3B4IDhweDsKICBtYXJnaW46IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQouY2h6bnRyZWUtY29udGFpbmVyIC5jaHpudHJlZS1yZXN1bHRzIC5hY3RpdmUtcmVzdWx0IHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogbGlzdC1pdGVtOwp9Ci5jaHpudHJlZS1jb250YWluZXIgLmNoem50cmVlLXJlc3VsdHMgLmhpZ2hsaWdodGVkIHsKICBiYWNrZ3JvdW5kOiAjMzg3NWQ3OwogIGNvbG9yOiAjZmZmOwp9Ci5jaHpudHJlZS1jb250YWluZXIgLmNoem50cmVlLXJlc3VsdHMgbGkgZW0gewogIGJhY2tncm91bmQ6ICNmZWZmZGU7CiAgZm9udC1zdHlsZTogbm9ybWFsOwp9Ci5jaHpudHJlZS1jb250YWluZXIgLmNoem50cmVlLXJlc3VsdHMgLmhpZ2hsaWdodGVkIGVtIHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQouY2h6bnRyZWUtY29udGFpbmVyIC5jaHpudHJlZS1yZXN1bHRzIC5uby1yZXN1bHRzIHsKICBiYWNrZ3JvdW5kOiAjZjRmNGY0OwogIGRpc3BsYXk6IGxpc3QtaXRlbTsKfQouY2h6bnRyZWUtY29udGFpbmVyIC5jaHpudHJlZS1yZXN1bHRzIC5ncm91cC1yZXN1bHQgewogIGN1cnNvcjogZGVmYXVsdDsKICBjb2xvcjogIzk5OTsKICBmb250LXdlaWdodDogYm9sZDsKfQouY2h6bnRyZWUtY29udGFpbmVyIC5jaHpudHJlZS1yZXN1bHRzIC5ncm91cC1vcHRpb24gewogIHBhZGRpbmctbGVmdDogMjBweDsKfQouY2h6bnRyZWUtY29udGFpbmVyLW11bHRpIC5jaHpudHJlZS1kcm9wIC5yZXN1bHQtc2VsZWN0ZWQgewogIGRpc3BsYXk6IG5vbmU7Cn0KLyogQGVuZCAqLwoKLyogQGdyb3VwIEFjdGl2ZSAgKi8KLmNoem50cmVlLWNvbnRhaW5lci1hY3RpdmUgLmNoem50cmVlLXNpbmdsZSB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNXB4IHJnYmEoMCwwLDAsLjMpOwogIC1tb3otYm94LXNoYWRvdyAgIDogMCAwIDVweCByZ2JhKDAsMCwwLC4zKTsKICAtby1ib3gtc2hhZG93ICAgICA6IDAgMCA1cHggcmdiYSgwLDAsMCwuMyk7CiAgYm94LXNoYWRvdyAgICAgICAgOiAwIDAgNXB4IHJnYmEoMCwwLDAsLjMpOwogIGJvcmRlcjogMXB4IHNvbGlkICM1ODk3ZmI7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1hY3RpdmUgLmNoem50cmVlLXNpbmdsZS13aXRoLWRyb3AgewogIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAwICNmZmYgaW5zZXQ7CiAgLW1vei1ib3gtc2hhZG93ICAgOiAwIDFweCAwICNmZmYgaW5zZXQ7CiAgLW8tYm94LXNoYWRvdyAgICAgOiAwIDFweCAwICNmZmYgaW5zZXQ7CiAgYm94LXNoYWRvdyAgICAgICAgOiAwIDFweCAwICNmZmYgaW5zZXQ7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9wLCBjb2xvci1zdG9wKDAsIHdoaXRlKSwgY29sb3Itc3RvcCgwLjUsICNlZWVlZWUpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCB3aGl0ZSAwJSwgI2VlZWVlZSA1MCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sIHdoaXRlIDAlLCAjZWVlZWVlIDUwJSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGJvdHRvbSwgd2hpdGUgMCUsICNlZWVlZWUgNTAlKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiAwJSwjZWVlZWVlIDUwJSk7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoIHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmYnLCBlbmRDb2xvcnN0cj0nI2VlZWVlZScsR3JhZGllbnRUeXBlPTAgKTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmIDAlLCNlZWVlZWUgNTAlKTsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMgOiAwOwogIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQgOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogMDsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIDogMDsKICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKfQouY2h6bnRyZWUtY29udGFpbmVyLWFjdGl2ZSAuY2h6bnRyZWUtc2luZ2xlLXdpdGgtZHJvcCBkaXYgewogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlci1sZWZ0OiBub25lOwp9Ci5jaHpudHJlZS1jb250YWluZXItYWN0aXZlIC5jaHpudHJlZS1zaW5nbGUtd2l0aC1kcm9wIGRpdiBiIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMThweCAxcHg7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1hY3RpdmUgLmNoem50cmVlLWNob2ljZXMgewogIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDVweCByZ2JhKDAsMCwwLC4zKTsKICAtbW96LWJveC1zaGFkb3cgICA6IDAgMCA1cHggcmdiYSgwLDAsMCwuMyk7CiAgLW8tYm94LXNoYWRvdyAgICAgOiAwIDAgNXB4IHJnYmEoMCwwLDAsLjMpOwogIGJveC1zaGFkb3cgICAgICAgIDogMCAwIDVweCByZ2JhKDAsMCwwLC4zKTsKICBib3JkZXI6IDFweCBzb2xpZCAjNTg5N2ZiOwp9Ci5jaHpudHJlZS1jb250YWluZXItYWN0aXZlIC5jaHpudHJlZS1jaG9pY2VzIC5zZWFyY2gtZmllbGQgaW5wdXRbdHlwZT0ndGV4dCddIHsKICBjb2xvcjogIzExMSAhaW1wb3J0YW50Owp9Ci8qIEBlbmQgKi8KCi8qIEBncm91cCBEaXNhYmxlZCBTdXBwb3J0ICovCi5jaHpudHJlZS1kaXNhYmxlZCB7CiAgY3Vyc29yOiBkZWZhdWx0OwogIG9wYWNpdHk6MC41ICFpbXBvcnRhbnQ7Cn0KLmNoem50cmVlLWRpc2FibGVkIC5jaHpudHJlZS1zaW5nbGUgewogIGN1cnNvcjogZGVmYXVsdDsKfQouY2h6bnRyZWUtZGlzYWJsZWQgLmNoem50cmVlLWNob2ljZXMgLnNlYXJjaC1jaG9pY2UgLnNlYXJjaC1jaG9pY2UtY2xvc2UgewogIGN1cnNvcjogZGVmYXVsdDsKfQoKLyogQGdyb3VwIFJpZ2h0IHRvIExlZnQgKi8KLmNoem50cmVlLXJ0bCB7IGRpcmVjdGlvbjpydGw7dGV4dC1hbGlnbjogcmlnaHQ7IH0KLmNoem50cmVlLXJ0bCAuY2h6bnRyZWUtc2luZ2xlIHsgcGFkZGluZy1sZWZ0OiAwOyBwYWRkaW5nLXJpZ2h0OiA4cHg7IH0KLmNoem50cmVlLXJ0bCAuY2h6bnRyZWUtc2luZ2xlIHNwYW4geyBtYXJnaW4tbGVmdDogMjZweDsgbWFyZ2luLXJpZ2h0OiAwOyB9Ci5jaHpudHJlZS1ydGwgLmNoem50cmVlLXNpbmdsZSBkaXYgewogIGxlZnQ6IDA7IHJpZ2h0OiBhdXRvOwogIGJvcmRlci1sZWZ0OiBub25lOyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjYWFhYWFhOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4IDAgMCA0cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzICAgOiA0cHggMCAwIDRweDsKICBib3JkZXItcmFkaXVzICAgICAgICA6IDRweCAwIDAgNHB4Owp9Ci5jaHpudHJlZS1ydGwgLmNoem50cmVlLWNob2ljZXMgbGkgeyBmbG9hdDogcmlnaHQ7IH0KLmNoem50cmVlLXJ0bCAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWNob2ljZSB7IHBhZGRpbmc6IDNweCA2cHggM3B4IDE5cHg7IG1hcmdpbjogM3B4IDVweCAzcHggMDsgfQouY2h6bnRyZWUtcnRsIC5jaHpudHJlZS1jaG9pY2VzIC5zZWFyY2gtY2hvaWNlIC5zZWFyY2gtY2hvaWNlLWNsb3NlIHsgbGVmdDogNXB4OyByaWdodDogYXV0bzsgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgdG9wO30KLmNoem50cmVlLXJ0bC5jaHpudHJlZS1jb250YWluZXItc2luZ2xlIC5jaHpudHJlZS1yZXN1bHRzIHsgbWFyZ2luLWxlZnQ6IDRweDsgbWFyZ2luLXJpZ2h0OiAwOyBwYWRkaW5nLWxlZnQ6IDA7IHBhZGRpbmctcmlnaHQ6IDRweDsgfQouY2h6bnRyZWUtcnRsIC5jaHpudHJlZS1yZXN1bHRzIC5ncm91cC1vcHRpb24geyBwYWRkaW5nLWxlZnQ6IDA7IHBhZGRpbmctcmlnaHQ6IDIwcHg7IH0KLmNoem50cmVlLXJ0bC5jaHpudHJlZS1jb250YWluZXItYWN0aXZlIC5jaHpudHJlZS1zaW5nbGUtd2l0aC1kcm9wIGRpdiB7IGJvcmRlci1yaWdodDogbm9uZTsgfQouY2h6bnRyZWUtcnRsIC5jaHpudHJlZS1zZWFyY2ggaW5wdXRbdHlwZT0ndGV4dCddIHsKICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvc2l0ZXMvYWxsL3RoZW1lcy9hbGxwbGF5ZXJzOTYwL2ltYWdlcy9jaG9zZW4tc3ByaXRlLnBuZykgbm8tcmVwZWF0IC0zOHB4IC0yMnB4LCAjZmZmZmZmOwogIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1N0eWxlcy9zaXRlcy9hbGwvdGhlbWVzL2FsbHBsYXllcnM5NjAvaW1hZ2VzL2Nob3Nlbi1zcHJpdGUucG5nKSBuby1yZXBlYXQgLTM4cHggLTIycHgsIC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IGJvdHRvbSwgbGVmdCB0b3AsIGNvbG9yLXN0b3AoMC44NSwgd2hpdGUpLCBjb2xvci1zdG9wKDAuOTksICNlZWVlZWUpKTsKICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvc2l0ZXMvYWxsL3RoZW1lcy9hbGxwbGF5ZXJzOTYwL2ltYWdlcy9jaG9zZW4tc3ByaXRlLnBuZykgbm8tcmVwZWF0IC0zOHB4IC0yMnB4LCAtd2Via2l0LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvc2l0ZXMvYWxsL3RoZW1lcy9hbGxwbGF5ZXJzOTYwL2ltYWdlcy9jaG9zZW4tc3ByaXRlLnBuZykgbm8tcmVwZWF0IC0zOHB4IC0yMnB4LCAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvc2l0ZXMvYWxsL3RoZW1lcy9hbGxwbGF5ZXJzOTYwL2ltYWdlcy9jaG9zZW4tc3ByaXRlLnBuZykgbm8tcmVwZWF0IC0zOHB4IC0yMnB4LCAtby1saW5lYXItZ3JhZGllbnQoYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xOC9TdHlsZXMvc2l0ZXMvYWxsL3RoZW1lcy9hbGxwbGF5ZXJzOTYwL2ltYWdlcy9jaG9zZW4tc3ByaXRlLnBuZykgbm8tcmVwZWF0IC0zOHB4IC0yMnB4LCAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiA4NSUsI2VlZWVlZSA5OSUpOwogIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE4L1N0eWxlcy9zaXRlcy9hbGwvdGhlbWVzL2FsbHBsYXllcnM5NjAvaW1hZ2VzL2Nob3Nlbi1zcHJpdGUucG5nKSBuby1yZXBlYXQgLTM4cHggLTIycHgsIGxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYgODUlLCNlZWVlZWUgOTklKTsKICBwYWRkaW5nOiA0cHggNXB4IDRweCAyMHB4Owp9Ci8qIEBlbmQgKi8KCi5jaHpudHJlZS1jb250YWluZXIgewogIHdpZHRoOiAxMDAlOwp9CgouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2VhcmNoIHsKICBwYWRkaW5nOiAwOwp9CgouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2VhcmNoIGlucHV0W3R5cGU9J3RleHQnXS5zZWFyY2hpbmcgewogIGJhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaERRQU5BT01BQVAvLy93QUFBQUFBQUlLQ2duSnljcWlvcUx5OHZNN096dDdlM3BTVWxPam82R2hvYVAvLy8vLy8vLy8vLy8vLy95SC9DMDVGVkZORFFWQkZNaTR3QXdFQUFBQWgvZzVCYkd4UWJHRjVaWEp6TG1OdmJRQWgrUVFKQ2dBUEFDd0FBQUFBRFFBTkFBQUVJdkRKU2F1dEl1dTlSekVIWW1VZUtHSkNHWTdwdDZMcVNaR3VQSEc0ZHUxOFgwVUFJZmtFQ1FvQUR3QXNBQUFBQUEwQURRQUFCQ0x3eVVtcnJTTHJ2Y3NnQjJKbEhpaGlRaG1PNmJlaTZrbVJyanh4dUhidGZGOUZBQ0g1QkFrS0FBOEFMQUFBQUFBTkFBMEFBQVFpOE1sSnE2MGk2NzFQU1FOaFpSNG9Za0laanVtM291cEprYTQ4Y2JoMjdYeGZSUUFoK1FRSkNnQVBBQ3dBQUFBQURRQU5BQUFFSS9ESlNhdXRJdXU5MVRGRk1tQ0NCNHFrR1k1VXBxSnQrYTNwREU5Y3JsMTg3MWNSQUNINUJBa0tBQThBTEFBQUFBQU5BQTBBQUFRcThNbEpxNjBpNjcyZlFvZFJETVNVZWFCSW1nSWFqcVYwZnU4cXQ3UWFQM01LczV4ZzYwSXNHaWtSQUNINUJBa0tBQThBTEFBQUFBQU5BQTBBQUFRcThNbEpxNjBpNjcyblFrZVJETVNUZWFCSW1nSWFqdVVwZmU4cVA3UWF0M01LczV3ZzcwSXNHaWNSQUNINUJBa0tBQThBTEFBQUFBQU5BQTBBQUFRajhNbEpxNjBpNjcyck9rYVJFSmtIaXFSZ2htTkpmV3k2b3U0RTAxeGVYM3p2U3hFQUlma0VDUW9BRHdBc0FBQUFBQTBBRFFBQUJDTHd5VW1yclNMcnZhMUNoMEZrSGlpUzFSZU9Rcm1pbEhxMnFjbHlPSDN0ZkQ5RkFDSDVCQWtLQUE4QUxBQUFBQUFOQUEwQUFBUWU4TWxKcTYwaTY3M3ZXMFNTZWFBb2tPRjRsYXJGbm12S3phMW4zM1lFQUNINUJBa0tBQThBTEFBQUFBQU5BQTBBQUFRaThNbEpxNjBpNjczdElrTmlaQjRva3RVWGprSzVvcFI2dHFuSmNqaDk3WHcvUlFBaCtRUUpDZ0FQQUN3QUFBQUFEUUFOQUFBRUkvREpTYXV0SXV1OTZ4cEpZU0NaQjRxa1lJWmpTWDFzdXFMdUJOTmNYbDk4NzBzUkFDSDVCQWtLQUE4QUxBQUFBQUFOQUEwQUFBUXE4TWxKcTYwaTY3M25Ja05oSE1pVGVhQkltZ0lhanVVcGZlOHFQN1FhdDNNS3M1d2c3MElzR2ljUkFDSDVCQWtLQUE4QUxBQUFBQUFOQUEwQUFBUXE4TWxKcTYwaTY3M2ZJa05TSE1pVWVhQkltZ0lhanFWMGZ1OHF0N1FhUDNNS3M1eGc2MElzR2lrUkFDSDVCQUVLQUE4QUxBQUFBQUFOQUEwQUFBUWo4TWxKcTYwaTY3M1hTSVZ4WUlJSGlxUVpqbFNtb20zNXJla01UMXl1WFh6dlZ4RUFPdz09KSBuby1yZXBlYXQgOTklIDEycHggIWltcG9ydGFudDsKfQoKLmNoem50cmVlLXNlYXJjaC1yZXN1bHRzIC50cmVlc2VsZWN0LXRpdGxlewogIG1hcmdpbi1sZWZ0OiA1cHggIWltcG9ydGFudDsKfQoNCi8qIF1dPiAqLw0KPC9zdHlsZT4NCg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQovKiA8IVtDREFUQVsgKi8NCmJvZHkgew0KICAgIGZvbnQtZmFtaWx5IDogJ09wZW4gU2FucycgIWltcG9ydGFudCA7DQogICAgYmFja2dyb3VuZCA6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQgOw0KfQ0KDQppbnB1dFtyZWFkb25seT0icmVhZG9ubHkiXSB7DQogICAgYmFja2dyb3VuZCA6ICNmMWYxZjE7DQp9DQoNCmlucHV0W2Rpc2FibGVkPSJkaXNhYmxlZCJdLCBzZWxlY3RbZGlzYWJsZWQ9ImRpc2FibGVkIl0sIHRleHRhcmVhW2Rpc2FibGVkPSJkaXNhYmxlZCJdIHsNCiAgICBjb2xvcjogIzAwMDAwMCFpbXBvcnRhbnQ7DQogICAgYmFja2dyb3VuZDogI2YwZjBmMCAhaW1wb3J0YW50Ow0KfQ0KDQoudGV4dEJveCB7DQogICAgZm9udC1mYW1pbHkgOiAnT3BlbiBTYW5zJzsNCiAgICB3aWR0aCA6IDE2MHB4Ow0KICAgIGhlaWdodCA6IDI1cHg7DQogICAgYm9yZGVyLXJhZGl1cyA6IDNweDsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZjsNCiAgICBib3JkZXIgOiAjZDNkMGNlIHNvbGlkIDFweDsNCiAgICBjb2xvciA6ICMyMjIyMjI7DQogICAgcGFkZGluZy1sZWZ0IDogN3B4Ow0KfQ0KDQouY29tYm9Cb3gsIC5yZW1vdGVDb21ib0JveCB7DQogICAgd2lkdGggOiAxNjZweDsNCiAgICBoZWlnaHQgOiAyOXB4Ow0KICAgIGJvcmRlci1yYWRpdXMgOiAzcHg7DQogICAgYmFja2dyb3VuZCA6ICNmZmZmZmY7DQogICAgYm9yZGVyIDogI2QzZDBjZSBzb2xpZCAxcHg7DQogICAgY29sb3IgOiAjMjIyMjIyOw0KICAgIHBhZGRpbmctbGVmdCA6IDRweDsNCn0NCg0KLnRleHRBcmVhIHsNCiAgICBmb250LWZhbWlseSA6ICdPcGVuIFNhbnMnOw0KICAgIG92ZXJmbG93IDogYXV0bzsNCiAgICBib3JkZXItcmFkaXVzIDogM3B4Ow0KICAgIGJhY2tncm91bmQgOiAjZmZmZmZmOw0KICAgIGJvcmRlciA6ICNkM2QwY2Ugc29saWQgMXB4Ow0KICAgIGNvbG9yIDogIzIyMjIyMjsNCiAgICBwYWRkaW5nLWxlZnQgOiA3cHg7DQp9DQoNCi5kYXRlcGlja2VyLCAuZGF0ZXBpY2tlcklTTywgLmRhdGV0aW1lLCAudGltZSB7DQogICAgaGVpZ2h0IDogMjVweDsNCiAgICBmb250LWZhbWlseSA6ICdPcGVuIFNhbnMnOw0KICAgIHdpZHRoIDogMTYwcHg7DQogICAgYm9yZGVyLXJhZGl1cyA6IDNweDsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZjsNCiAgICBib3JkZXIgOiAjZDNkMGNlIHNvbGlkIDFweDsNCiAgICBjb2xvciA6ICMyMjIyMjI7DQogICAgcGFkZGluZy1sZWZ0IDogN3B4Ow0KfQ0KDQouZmllbGRMYWJlbCwgLmxhYmVsIHsNCiAgICBmb250LWZhbWlseSA6ICdPcGVuIFNhbnMnLCBhcmlhbCwgc2Fucy1zZXJpZjsNCiAgICBsaW5lLWhlaWdodDogMzRweDsgIA0KfQ0KDQpkaXYudWktZGF0ZXBpY2tlciB7DQogICAgZm9udC1zaXplIDogMC44M2VtOw0KfQ0KDQoudWktd2lkZ2V0LWNvbnRlbnQgew0KICAgIGJhY2tncm91bmQgOiA1MCUgNTAlIHJlcGVhdC14ICNmZmZmZmY7DQogICAgYm9yZGVyIDogI2Q0ZDRkNCBzb2xpZCAycHg7DQogICAgY29sb3IgOiAjNGY0ZTRlOw0KICAgIGJvcmRlci1yYWRpdXMgOiAzcHg7DQp9DQoNCi51aS13aWRnZXQtY29udGVudCBhLCAudWktd2lkZ2V0LWhlYWRlciBhIHsNCiAgICBjb2xvciA6ICMyMjIyMjI7DQp9DQoNCi51aS13aWRnZXQtaGVhZGVyIHsNCiAgICBjdXJzb3IgOiBwb2ludGVyOw0KICAgIGZvbnQtc2l6ZSA6IDAuODBlbTsNCiAgICBjb2xvciA6ICM0OTQ5NDk7DQogICAgYm9yZGVyIDogI2VhZTllOCBzb2xpZCAxcHg7DQogICAgYmFja2dyb3VuZC1jb2xvciA6ICNlYWU5ZTg7DQogICAgYm9yZGVyLXJhZGl1cyA6IDNweDsNCn0NCg0KLmhlYWRlcmNvcnJlY3Rpb24gew0KICAgIGZvbnQtc2l6ZSA6IDFlbTsNCiAgICBwYWRkaW5nIDogNnB4IDJweCA2cHggNXB4Ow0KfQ0KDQoudWktc3RhdGUtZGVmYXVsdCwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGVmYXVsdCB7DQogICAgYmFja2dyb3VuZCA6IDUwJSA1MCUgcmVwZWF0LXggI2JkMGEyNjsNCiAgICBib3JkZXIgOiAjYmQwYTI2IHNvbGlkIDFweDsNCiAgICBjb2xvciA6ICNmZmZmZmY7DQogICAgZm9udC13ZWlnaHQgOiBib2xkOw0KICAgIHRleHQtdHJhbnNmb3JtIDogdXBwZXJjYXNlOw0KICAgIHBhZGRpbmcgOiA0cHggOHB4IDRweCA4cHg7DQp9DQoNCi5kYXRlcmFuZ2VwaWNrZXJkaXYgLnVpLXN0YXRlLWRlZmF1bHQgew0KCXBhZGRpbmcgOiAxcHggMnB4IDFweCAycHggIWltcG9ydGFudDsNCn0NCg0KLmRhdGVyYW5nZXBpY2tlcmRpdiAudWktZGF0ZXBpY2tlciB7DQoJd2lkdGggOiBBdXRvICFpbXBvcnRhbnQ7DQogICAgaGVpZ2h0IDogQXV0byAhaW1wb3J0YW50Ow0KfQ0KDQouZGF0ZS1yYW5nZS1zZWxlY3RlZCA+IC51aS1zdGF0ZS1hY3RpdmUsDQouZGF0ZS1yYW5nZS1zZWxlY3RlZCA+IC51aS1zdGF0ZS1kZWZhdWx0IHsNCiAgIGJhY2tncm91bmQtY29sb3I6ICNFQUU5RTggIWltcG9ydGFudDsNCn0NCg0KLnVpLXN0YXRlLWhvdmVyLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsIC51aS1zdGF0ZS1mb2N1cywgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cywgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3VzIHsNCiAgICBib3JkZXIgOiAjZTUyMjQxIHNvbGlkIDFweDsNCiAgICBjb2xvciA6ICNmZmZmZmY7DQogICAgZm9udC13ZWlnaHQgOiBib2xkOw0KfQ0KDQoudWktc3RhdGUtaG92ZXIgYSwgLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIgew0KICAgIGNvbG9yIDogIzIxMjEyMTsNCiAgICB0ZXh0LWRlY29yYXRpb24gOiBub25lOw0KfQ0KDQoucmFkaW9CdXR0b25MYWJlbCB7DQogICAgZm9udC1zaXplIDogMC43NWVtOw0KICAgIHRvcCA6IC0ycHg7DQogICAgcG9zaXRpb24gOiByZWxhdGl2ZTsNCiAgICBwYWRkaW5nLWxlZnQgOiAxMnB4Ow0KfQ0KDQouZmllbGRDb250ZW50IGlucHV0IHsNCiAgICBib3JkZXItcmFkaXVzIDogM3B4Ow0KfQ0KDQouaW5mbyB7DQogICAgYmFja2dyb3VuZCA6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJNQUFBQVNDQVlBQUFDNURPVnBBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFBSmNFaFpjd0FBRW5RQUFCSjBBZDVtSDNnQUFBS3VTVVJCVkRoUGRaVGZTeFJSRk1lL003TXoyK3k2cWF1Yml2MHdFU1Vsc0NCOTBJb1M2Y0V5NmtXaG5xeEhJZXdoaVVKNkNZbklQNkJlZ3VqSFUyQWEvWkFnSTRvS1EwaEUyVVVMS2tzMGYrN003czdzM082OTd1enV1T05uWWZlY3ZXZSs1OTV6enhtQkVBSTNJdGR2azEvM0hzTmNXUVZFRVpZZVErV05IcFIybm9hL3BsSkloVGx3aU1Ybi9wS3A3ajc4ZlBvUU12SWhlVlVJa3NUWFdGeFNqOExFR3RUOFhXajhQQXhmOVY2SGFGcHNmV0thdk4xZkR3VkZrRlFmQkNFVGw2UzdJc1NBeHhmZ3ZwVXdFRGZuY1BEQkk1U2RQNU1PVEl1OUZFSkVWclpEOEhpNGI4T0VRdTJ0Q0I1dnd0U2xhMmxCOXB5bXo2RDUzUWNVSG03Z2dseHN2TDJMekErOW9vRjVQRENiaExhQWxvVUk1S0pDdkJBSzRQV1ZwRmJvRGcwVGtrL0ZzZVdKak5oendVZTJxVHNkUjdPeEVna1k1Z29FaUpEVllFNk1vUzJob3FjYk5RTjlnaGk1ZW92SUtNd0pZa2xNTFFxMVlqZUNEVTJRUUMvREpabms4V05oY0lUYjR0cjRKRVJKNW80TkU3SmljZVR0cTBaVGVCU05uNGFnN0NnR01jMVVSQVpSVWJBODgzWERYaHdaaGVqMWNzZUdHQVlLbWcraDd2NEFvdE1Sckk1OWd6WS9tM001TnJRQXFWOFhXTGFWajJONDAzaUFObWdWZnR5NVM0K1plemsyaEg0WVlsSHJVVmp4T0hjYzBQWFMyaFp1YXVIdjlOdmk5bVpZU1FTYWlpRUc2bXRoSlEzdVpKTk02aWkvMEFsekxRbzVtSTlRMndtYU5KRmF6Y0JxR3pxeWtWU3M2dThWREN6eERObFlpR0hQNVl2d0JQd282VGlGNWZkZmFNMDJkcENOUlhRRTZ1dTR2V1hUSmpVZFplZk9RQzRPNHMrVFp6QVcvL0ZhWnVQYXRBeTNjV0tDdEVrZ0tkNmNtMlRQdVk2VHpiQ2dFcmRCMzh4V2crNW9qWk5FRjByT3RpR20vNmJkdjQ0a0xhNE5TOHIrWTdNcStlblJwaWNkUWd6SHpySUo5L1lUTFR5TCtjSFh0S2tWL25Lc3Vua0ZTbWtJNVYwZEx0c0cvZ09SVFMvRzU3RmtRZ0FBQUFCSlJVNUVya0pnZ2pNSTliMG1SUzJ5bjJQRnRjc1Fnd0VVZDdSWm5wa0Evd0F1VEQ1NEJjbnQ0Z0FBQUFCSlJVNUVya0pnZ2c9PSkgMCAwIG5vLXJlcGVhdDsNCiAgICB3aWR0aCA6IDE5cHg7DQogICAgaGVpZ2h0IDogMTlweDsNCiAgICBkaXNwbGF5IDogaW5saW5lLWJsb2NrOw0KICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7DQogICAgdG9wIDogNHB4Ow0KICAgIG1hcmdpbi1sZWZ0IDogNXB4Ow0KfQ0KDQouZGlhbG9nLW1vZGFsIHsNCiAgICBkaXNwbGF5IDogbm9uZTsNCn0NCg0KdGFibGUuZGlzcGxheSB0ZCB7DQogICAgY3Vyc29yIDogcG9pbnRlcjsNCn0NCg0KLmJ1dHRvbjpob3ZlciwgLmxvb2t1cGJ1dHRvbjpob3ZlciwgLnVpLXNsaWRlci1oYW5kbGUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yIDogI2U1MjI0MSAhaW1wb3J0YW50IDsNCn0NCg0KLmFkZFJlbW92ZVNlY3Rpb24gc3BhbiB7DQogICAgZm9udC1zaXplIDogMS4xZW0gIWltcG9ydGFudCA7DQogICAgZm9udC1mYW1pbHkgOiAnT3BlbiBTYW5zJywgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQp9DQoNCi5hZGRSZW1vdmVTZWN0aW9uIHsNCiAgICBtYXJnaW4tcmlnaHQ6IDNweDsNCn0NCg0KLnVpLXdpZGdldC1oZWFkZXIgYnV0dG9uIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yIDogd2hpdGUgIWltcG9ydGFudCA7DQp9DQoNCi51aS1wcmlvcml0eS1zZWNvbmRhcnksIC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktc2Vjb25kYXJ5LCAudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5IHsNCiAgICBvcGFjaXR5IDogMTsNCn0NCg0KLmNoZWNrQm94TGlzdCBsYWJlbCB7DQogICAgZm9udC1zaXplIDogMWVtOw0KICAgIGZvbnQtZmFtaWx5IDogJ09wZW4gU2Fucyc7DQogICAgcGFkZGluZy1sZWZ0IDogMTBweDsNCn0NCg0KLmJ1dHRvbiB7DQogICAgbGluZS1oZWlnaHQgOiAxLjQ7DQp9DQoNCiNzaG93WG1sLCAjc2F2ZUZvcm0sICNsb2FkRm9ybSwgI2NsZWFyRm9ybSwgI3ZhbGlkYXRlRm9ybSwgI3ZhbGlkYXRlRm9ybVdpdGhYc2QsICN2YWxpZGF0ZUZvcm1XaXRoU2VydmVyLCAjcHJpbnRGb3JtLCAjY2xvc2VGb3JtLCAjY2FuY2VsRm9ybSwjbG9hZEZvcm1YbWwsICNzYXZlVG9YbWwgew0KICAgIGZvbnQtc2l6ZTogMC41NWVtICFpbXBvcnRhbnQ7DQp9DQoNCi5vcHRpb25MYWJlbCwgLmNoZWNrQm94TGFiZWwgew0KICAgIHRvcCA6IC0ycHg7DQogICAgcG9zaXRpb24gOiByZWxhdGl2ZTsNCn0NCg0KLmZpZWxkQ29udGVudCB7DQogICAgbWFyZ2luLXRvcCA6IDJweDsNCiAgICBtYXJnaW4tYm90dG9tIDogMnB4Ow0KICAgIG1pbi1oZWlnaHQ6IDMwcHg7DQp9DQoNCi5oeXBlckxpbmssIC5jcm9zc0xpbmsgew0KICAgIGNvbG9yIDogI2JkMGEyNiAhaW1wb3J0YW50IDsNCiAgICBmb250LWZhbWlseSA6ICdPcGVuIFNhbnMnOw0KfQ0KDQppbnB1dFt0eXBlPSJmaWxlIl0gew0KICAgIHBhZGRpbmcgOiAzcHggMCAwIDNweDsNCn0NCg0KaW5wdXRbdHlwZT0iYnV0dG9uIl0sIGlucHV0W3R5cGU9InN1Ym1pdCJdLCAubG9va3VwYnV0dG9uIHsNCiAgICBwYWRkaW5nIDogOHB4IDEycHggOHB4IDEycHggIWltcG9ydGFudCA7DQogICAgZm9udC1zaXplIDogMC43NWVtICFpbXBvcnRhbnQgOw0KfQ0KDQoubG9va3VwYnV0dG9uIHsNCiAgICBtYXJnaW4tdG9wOiAtNHB4Ow0KfQ0KDQouaW5mb0ljb24gew0KICAgIGJhY2tncm91bmQtaW1hZ2UgOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUR3Q0FNQUFBRFlTVXI1QUFBQTdWQk1WRVhNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6ckRrWmpBQUFBVG5SU1RsTUFHQkF5QkFoUXY0T1pMaUpVY0VCbVlCb1N6UXdnUEJaQ1NFb2VXaVl3VWl5Rk5JZUJ3MnJKejhjNFJCeTl1WHlydGFXTnFhMnpLUDJmSk84S0JnS1BvMktWb2E5czM1MUdQbTUra1dobzBrajlBQUFQaFVsRVFWUjRuTzFkaldMYnRoRUd5VWlxNVlTU0xYdHA3RnBMT21memtteHIxMjZ0bWkycDAzUkoxL1hlLzNFR2dBUnhQeUFnUmJJazIvaGtTejRDSk80K0hzRTdBSlNWeXNqSTJBTVVVT3hhaFoyaUFOaHpCdFpXcjRCb0lSU1lBVk41dTRRd0R3UURSYmN3ZlVpNUtTM3dGdURtRm5RTGE0RHRiLy9jcWt0d0Q1UUVGRndmVXM3UG9DQ0E3eTRiRUpWRml6Y0lvYjhLbWhBcGx3d3FWanQrOUZCbDN1SU5Rbml3RWlyeUV5dzlKSHFHcFFkRUZOaStCNFFRN1FPaUhoeXNJUG9BeFVxeHZkdnZBOUs0MmJzQXY0UzJmeGZZT2U1N0lKU1JrWkdSa1pHeHg3anhTSERIY1JCWFFNVHlJakluQmdId0JKL2JFeDhQRUFOQyt1aGJwU1NnZ0NCQVZPRFZhYnBJMVMvazRXTFpwVG42TnBNaG9YOVk0MGh4WUVSRnBNY3FVczRBbG9DdERRZElEMVlobnlYWjJoTGpBWVdpTzlEeTFQREI3dFBoSXFMeCt1TUI4Z3JaYVIrUXhsMi9DMlJrWkdSa1pHUms3QTdyQmY3SjBEUjUvTFVUanpVUElQU1BHdlFKaVZKaUI3a2NRQ2lVT0pyY0ZOdERaSWYyeGFyUTNhR3ZMTnhBVklGQWFiejkwQkZpQklseWNUQmhnV3dPV0NIMEZMWUhsUHF3SGFDdmNJbjJaYm9zQ2V2ZlBUUmlGRmNndkh1a0NqV3dyYzNHckdoMWZzQW9mOEVhVVJlS1hrQ0I0L016Rk5vOTdxTHBGaUtGWXYva05SNVlReFFiUUVvZmtaMk91RU9IcXFUNmdGVHBydThDTjd4LytqYVprWkdSa1pHUmNWK3gvckxVTmNNTXFVQXNjZ25Gb2NtcHFrVHpxeW13VkFQeGZKNVBuSVVVUU9VS1QwNHRFZFdaeXYzSkNRU245NldTNHBEOTdRZnlXMjVBN05oU0FieWhtVmowRkVsdEE0dmRpeWdCaWJYaG9VWWd5a0NVUDdId1BURGVFcUFJY0hWTWtaZzdaeDRrMHVGQU5zNjNoUFFYQ29STEF3ZGdHc3I5QXo3UXY3c2dRR2dnMWFQbC9CSkxFeEJXZ0c0UkZSTEZJbUdtSXF1UEMva2xFR3lDRzBBdUFYYUpKQytCOEZWZTlOWVFERWNYQjhnNkFRY2pZSjFnb0pJZ2dIV0NyRlIwUzZrUkhONSs0QnpGaThOYW9OMzVOUnhVdkwrSkpkWnI3UFY0d0s2Zmo4bkl5TWpJeU5ocjNPeGRYQVlxN0ZIWndCNmJEU3pTaDRzRjB1dENocW8wTkF2YVQxaEx6WHdGaW5tQ3ptZUR1Y0VRSzE4VFRhUW9GZ1A3Yk5DK1JaNE9UNFQ2Z1FvZ0RGWWsrMVF4UWxqMTlRR1NBV0tpTFlwOFAwQWcxR2J6MVVMZldITGc5aVVuUU5LNVFRSmN1a20wNGJsS0xIMkdnRUpDWStIelhBWldDdkhLY28zQnA2TUlhQ2pTWFhSSnlPeGVxaG56RWFGOTNNZkZHVy9PMTZadkRMNVRNNE1KSWp1anovY0h5cGtRdXV6UndXSjkzQktkSXQrd0NSQVBsOWtwZTJJa2tiMm1GZ0dseGgvaTQwZDNFSGZkdm95TWpJeU11NDN5bHQvSUFtR0huTjVpSXQ3d0tmYnYwMVJBY0pxRlJsOWxjallRU25iUXFLZ0M0ZllPd1NKdDZONnRyRTB0d1o5a04vUHFOcFRRZUlDdnI0VExzRFlDMDZVN0JNanNoUyt2MS9hVDdJd1FZRDVMY2dSUVhNVDJGckJmQkxqWjYxNTFqREVsazl0UEZmcFVnazJ5cmVndXNYMjVCSmJ3QUZFZk0rWUk2dkdBdGk0YlR0aXpCK1RqZlFDckVSeWhLYjJYOEQ2QTl3WDc1UDR0NG5lQllKZVA2cGRoZy9nUWw4TVd2eXR6ZVNUamdPUUJ5blFkaC9pWEtkeE9yR0ovUmtaR1JzYjlRbVhpaEdyNStnOEdHZzl1VGgrS29WWnVOSXpWK0N3UnVjRkJFeXIxbVZqeDRpck94d00xQmhpckI2USsyZU5RaTRlcVIrYUY2bUVMdG9NekNSN1Y5UkFGZS9adlFvZ05peVk4RlBTVVRGc0xwOFRlVG1NdWk1bXR3N2JjYVQwWXcyQUE0d0ZSUUlsa2dxKzFEUXJOaGttb3hTNUpxK3U2Yk1BSUdSRUNFQU5nWEhUZ1d6d2dCT2hESDJsMG9UUTREOEQ1Tk1rdEJnTnl3QUVNam84cndBVE1aclBZN0pHeEJvSkNrSUJEUWlBWTA5RUdUVWlCQ1drVXBJU2ZHUFI1QUF3QmZaaUcyejdBeWMxeWVLVHhpZDM5eEJOd2ZIcjRPMExBNDhlUEZUdmhZckYxcjR0eUFvejluMk1DcUV1QnRwLzZHRFIwb0FZZkcvUjZ3SkV4SFlaSGZoeWdzdjdmRVdDT2o0Ylltc1A1QStwTDRNa1RmQW5NbEQ0RityM2JvYkt2VHlUQTJQL3c3UE4rQWdxMlFXOHBpcU1DcFRCd2Vub0t2WDBBSEdrR3RQMllBUHZURVdBN1FVVEF1ZG43L054dE9HNDZ3V05tRHRwQkVrQnpON3JCRXZBRkhwK1lUQi9xOTdxUEFONGdIRnFnQmk4dUxzQzdxUENBNm1nNDFHLytFckJ5UHdFWERkb054UmhPeCtNNWpQRXpRdWdTMGh0K2IxL1kzZ0VuWU1BSUFPSUJFMjkvaElEdWNFOHRtTXNOT2dLNEIxUkhGdTRVQ1JsTUh6djB4emNhamNmZFhXRHMyaDhUQXJCQ2tvRFVKWURMbXo2dzdpcDNCRlMwdmU1d1RSd0FuNmtlTUE5STNRWWJmU1owREtieXQrN09YakdJMWlkUGNmTnlBeWZBTWxDcnphR3FwaFlyeEhvY0xIUkpWeWNuZkdVY2J0VCtqSXlNakl3OXg3Tm44ZkpTekcwVG1GdE84clpUK1hUM1MzdWIrdEtKYmJMZDVkaVRWcDUwK3phaHllSFNzbEovWVByVTBmdWF6clpPMkNaOTIvWkNDVlhsR1JpWktQSnlQUFJ4eUlGV2VYTFFCWEpCS2lxLzNkaXZFQU42WndNMjAwUWptN0VKQlplV20vUFJXVkNiWUs3czd1Mmw0WGFDeitsemdPZk1maE1vblhyN1RXemVaYjk4ZGJnSXpCVDhVYjhlWVlVcWZaNHJWSi9NRGJJRGdQcVR1bEoveHZudFdBdGpJaXNxbnd4T2tHejBuMDc3RkFSb1k3OUdkQTZIUEU0ck95MTk2TmlNV0hUWmxTU0FwY09nWHB5L2ZIVjJqb2FOS3UzZmZzQW5SY0JmNEsvNk5jSUc2dEl4azNIeW9YUGpBU3FmVWdYYllONVB6cEwybmprUjlRTWplRFRWSERUQ2dSdXhPZWdqb08wRnZLelAvdC9nbVZkSTI0K0c3TkllOEpYNld2M2REeWxkTUErNFlCNXd3VHlndGQrZHdScWFUcXJMYjFsNzN6VFNONTJDTnBuSHVRT1lQc0RibHliZ3hma1hoL29WdHIrTjFERUJKZGhSSnlkL0JkL3ExeitjYk5yRDE3aVZLeWFqY252OWFyaE9rUlBnc3J1dUQ2RG1OUHdwRE5yTHcyQ29UZ0huaTR5QUxyMEwyOSt0aUtBRUlQbjg2OGVqeC8vOHJwV1AzT0VPbDVPbjlPd3BjUW0wTWhhZlAvZXk4ZjF1dkROSWdHTFFHOHo0WU85OUVOZ2c5NWV0d3Y0dVlKWVk4ZlVHSFlINmo2ZnNjSEZaTWZ0bEFsOWkrOVhMNzNYM04vbitaU3RPemZWZlJ2WVhocmJkS09wRWdWUVRnL3dzRHVERDNrd09mUU5NVEo1eSsvbHRVRFdMdW55eG5SRjQ2SXFsQnpHTVk0WDdpbmdnUkVGaW9JeU1qSXlNSFdDSUI2Wk5LQWNYc2VvM3ZMVFFUa1ZFNzM0OGRsd0pKU3owK3dMZm1pOEJoWnFmdzNENHd3L3dIVkxuRWQ1L2ZnWXZYc0RaM01sc3ZZVWJibkRqRFozTU4zVEpHNCtieGpBYURsOFRCcmk5cXhFdzFjY2FvMndUTkFNTEhvMmYrc2pyWHdiLzlxSG9ZcWdQTUJYSlRWZk9wbXJaSDIzeTZ1dm8wTEhTeVk2ZkhHd0tmSEpsQXVNRnZPYmpEWXJJcXhCZ1FpMjBoN0hkL25ZVkxtbm8rZWFOVW0vZWVIMkdDdW9wbnRuaEJKQWxJMkFIbzlDQ2gxSTFReFVkQWJxcUdZOUJCTHd5YzNXNHdZVmh2WThBNEJvSWMxbDVNN3ZuUFdwaFpXOS9TZXMzbjM3eTlhMHVHcUZ3RlFac1FRYmQzODZEb2dwZ0VrK2R6eW5zQVpNSlhxOCtuczlOZXVrSjBQWXJOQVRHR2VmSlFsaGtMbzdEVFhyK3kzYk5pT3NEdnJYVHovQzJxMURYWkg4NGlSTndyUDg4TmordTJEallFRTZSQnhEOUtuajE2dWpWSEM2N0E3NDIybzAyUndEM2dCK3Q3RWJsV3Z1OWdlT0Z4U25kM1JPbVQrbkp5UWtob1Bsc3hWT05jLzNURWRCb3MranRBK1p6Y3dIZ1R2RDFjRGphWUNjSXRBOHc5aTg4QThiK21xU2pjNlB2cWQ5OThRZ3VFUVBtUU1lbzIzT0ROODYrcDAvYm4xYnVCa1Q2K29CaE5aL1BZWTRaQUhZYjNQUmQ0TGtabVBYNjhOUnRNWm40QVN2ZEErcWYwak1BNU1QOWVlZzI4TnVnOVFpTG5qNUEzM1UxTUFFUzZ4SEFVTnB6Lzl6RkFZRTFncVFETVQzRzZ4STlwd2R3L2FJZ0tvSENTMVlHbFJuU3E5eUNqZFhqZ04zaitOMjdZeVJPSHhtdU5BZU5LUHBZdVhJeUl5TWpZeTBNOGVyb3M1OU1GL1BUMmM2MDJUN2VBN3p2aEo5ZHIvdnpEalhhTHA0WWM1KzB3bGx6eHpIdjNnZG1NTU03L0NjUXpLZ1ZCcVlUbUZuK1orbUttOEo3azBBNUYvamdDZmpRMVdCaFF5aU9xRDBsWXVxQmIrQXl6TXc5SGEyRzNtNmM4cVF4K0FscW5JY2VRcCtTYjZpOVV5UVdiaHI1NCtBam5aMFZ6VzJUQU4wRG1CVDZQV21jNmpEQkUyUEsydStuRjQzZHlQN1EwdDFwT2NYMmZkUnZIMG1GMlE0SnFOMzVybkhqVkllYVhmSUFWeVV1dy9hSENDaUp5OWlGNWwxNjIxendlSThLWnJQWjlpSmRiN0RYSjNVUzBPU3J0WjEwaW10N3dIWTdRZXNBelVNejFvWjNub0IzcUZKL0gxOGo5N0ZZdXc4UURONG9lS2YzMG9zdmNTVzJFeExvK1ZjYnVBdW8vc1VJbThmTUc5eG9jTzNFYTE5SjlnRllpdm5ISjJLbnlmb3ZabGdXM3Y2eVN4MzJhYlFpSXlNakl5UGpobEZEVEx4cHdJZ0ZNblRwNkEzZzRJREtOWStzdGt3QU1Bb0lBYmFzeEJYcVVXbmVTQVdUTWp0NTBsVHFUMjlyRmp2WG9oanNETm0yWVBYREZsSUNtckpPWjN0NnRIbThBaUVBbDBzQ2VMSUlvcklSdCtjRmJldy9RUnNvQVhiNG8xWFNmb3l3em0wRlRNQW9ZQk52THlGdTh2OEhwTEJ0RDFpS2dDMTd3SGI3QUk2ZDl3RmJ2Z3VBSUdUSGQ0RTl3RzdqZ0l5TWpJeU0rNDM0YzJSM0hlVi9GZng2anRadTZpamw4aDU5VDY1NWpoUityZEh6RE9QNmJlQUJDaGViOE84L1dGWGVPeXpnZjVvQWhWWW5LeFA3Q3dhQWYxYWZKdThiU3JoUzZ0ZGFYZUduclJlbk9xT2x6OWQ2UXdZbkEvM1RMZCtHRTdxZTNjaEE1WUY1RGZZMHZLM2FkZk9YL2d5TnAyQlcyNU1IZHhBQjlxdlJpaVAzL1hwUVFGR1lEVTQrTWkvLy9YdW1YRzhwanZhVUFPc0JHbGY0akp0K1lZRXplRXpBZHcwNkYxOVIzanVNN0Qxd2l0YTg2R1IwQ0tmREhnTHVYQ2M0QnJpNnZNTGRmak1jNFZOU1VOc2RvZG8yeHUvMStYbC9LNSthejhqSXlNaFlHL3o1Z0pUTUYxR3RLcS9hM3JweUN2ejVnSlRNbDlHdEtxL2EzcnB5Q21mUTRXd1ptUytrWEZWZXRiMTE1U1Q0OHdFZi9BR2NmRzFpdyt0V2JwYlMydkozblF4Y1ZyM2xIM3o1aDk3MkZVVEx6WXBPVms3bDVoRCtlWWNZd0RjQW5ld09vdHJaNE90clBEdWNxaS9MUlgwL1JSNHF4N05uNFU4ZytxamZmdnVONkdmK25DODV2d2F1SGphWXl1YnF2V1lLWTRWRWZTVU1pdGRuQkNUMVVlNjNSNTQzOW0rT2dDbjZEcm9BQWFIUFZReEt0aC93a0pnSG1HOGJtUU1zVDBENkVqRGZ2aFZSS08zeXdPUVVnUkE3bm1MMXVhd1ptSGYxaytEUEJ3UTZOZGNKK2s2TWQxTEE1ZjVPTmRoSjh2WjVKMHZMSFQ5OXNya0dPam1KYmQvRzFyMk5yaXFuc2UxQVp0MUFhbFU1alcySHN1dUcwcXZLR1JrWkdSa1pHUkcwZ2NPTnlYc1A5djhEMC9JZEpBRGlCTmlYbDMzMjdXUkdnT0wvOUhDLzBYd2xJVVJrUmhDNHR6NlovZnU3ZlVmMmdIdmZCOXozdTBCR1JrWkdSa2JHcGxIY25rZ2d1UW9TcXRVWHVoYnMvd1B0TXdxVjBIVUpBdmo1dmszMmI4SUR1TDIzeW43cUFYWjV1MzJoYlJYN2QzbzgyRGYxRlpYdmJoOVFPZmh5eGxkci8rM3hnWFU5b0ttdnNIeXI3Ri9YQTI2OS9ldmVCWHJzdjdOOVFBTGUvdHZqQTBrUFdBWEdidmVia2JIbitEL0o1bk1jSHp4MVVBQUFBQUJKUlU1RXJrSmdnZz09KSAhaW1wb3J0YW50IDsNCn0NCg0KI3VpLWRhdGVwaWNrZXItZGl2IHsNCiAgICBtaW4td2lkdGggOiAyMGVtOw0KICAgIGJhY2tncm91bmQgOiAjZjlmOWY5Ow0KfQ0KDQoudWktdGltZXBpY2tlci1kaXYgLnVpLXdpZGdldC1oZWFkZXIsIC51aS1kYXRlcGlja2VyLWhlYWRlciB7DQogICAgYmFja2dyb3VuZCA6ICNmZmZmZmYgIWltcG9ydGFudCA7DQogICAgbWFyZ2luIDogMnB4IDJweCAycHggMnB4Ow0KfQ0KDQoudWktZGF0ZXBpY2tlci1oZWFkZXIgLnVpLWljb24gew0KICAgIGJhY2tncm91bmQtaW1hZ2UgOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUR3Q0FNQUFBRFlTVXI1QUFBQTdWQk1WRVhNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6ckRrWmpBQUFBVG5SU1RsTUFHQkF5QkFoUXY0T1pMaUpVY0VCbVlCb1N6UXdnUEJaQ1NFb2VXaVl3VWl5Rk5JZUJ3MnJKejhjNFJCeTl1WHlydGFXTnFhMnpLUDJmSk84S0JnS1BvMktWb2E5czM1MUdQbTUra1dobzBrajlBQUFQaFVsRVFWUjRuTzFkaldMYnRoRUd5VWlxNVlTU0xYdHA3RnBMT21memtteHIxMjZ0bWkycDAzUkoxL1hlLzNFR2dBUnhQeUFnUmJJazIvaGtTejRDSk80K0hzRTdBSlNWeXNqSTJBTVVVT3hhaFoyaUFOaHpCdFpXcjRCb0lSU1lBVk41dTRRd0R3UURSYmN3ZlVpNUtTM3dGdURtRm5RTGE0RHRiLy9jcWt0d0Q1UUVGRndmVXM3UG9DQ0E3eTRiRUpWRml6Y0lvYjhLbWhBcGx3d3FWanQrOUZCbDN1SU5Rbml3RWlyeUV5dzlKSHFHcFFkRUZOaStCNFFRN1FPaUhoeXNJUG9BeFVxeHZkdnZBOUs0MmJzQXY0UzJmeGZZT2U1N0lKU1JrWkdSa1pHeHg3anhTSERIY1JCWFFNVHlJakluQmdId0JKL2JFeDhQRUFOQyt1aGJwU1NnZ0NCQVZPRFZhYnBJMVMvazRXTFpwVG42TnBNaG9YOVk0MGh4WUVSRnBNY3FVczRBbG9DdERRZElEMVlobnlYWjJoTGpBWVdpTzlEeTFQREI3dFBoSXFMeCt1TUI4Z3JaYVIrUXhsMi9DMlJrWkdSa1pHUms3QTdyQmY3SjBEUjUvTFVUanpVUElQU1BHdlFKaVZKaUI3a2NRQ2lVT0pyY0ZOdERaSWYyeGFyUTNhR3ZMTnhBVklGQWFiejkwQkZpQklseWNUQmhnV3dPV0NIMEZMWUhsUHF3SGFDdmNJbjJaYm9zQ2V2ZlBUUmlGRmNndkh1a0NqV3dyYzNHckdoMWZzQW9mOEVhVVJlS1hrQ0I0L016Rk5vOTdxTHBGaUtGWXYva05SNVlReFFiUUVvZmtaMk91RU9IcXFUNmdGVHBydThDTjd4LytqYVprWkdSa1pHUmNWK3gvckxVTmNNTXFVQXNjZ25Gb2NtcHFrVHpxeW13VkFQeGZKNVBuSVVVUU9VS1QwNHRFZFdaeXYzSkNRU245NldTNHBEOTdRZnlXMjVBN05oU0FieWhtVmowRkVsdEE0dmRpeWdCaWJYaG9VWWd5a0NVUDdId1BURGVFcUFJY0hWTWtaZzdaeDRrMHVGQU5zNjNoUFFYQ29STEF3ZGdHc3I5QXo3UXY3c2dRR2dnMWFQbC9CSkxFeEJXZ0c0UkZSTEZJbUdtSXF1UEMva2xFR3lDRzBBdUFYYUpKQytCOEZWZTlOWVFERWNYQjhnNkFRY2pZSjFnb0pJZ2dIV0NyRlIwUzZrUkhONSs0QnpGaThOYW9OMzVOUnhVdkwrSkpkWnI3UFY0d0s2Zmo4bkl5TWpJeU5ocjNPeGRYQVlxN0ZIWndCNmJEU3pTaDRzRjB1dENocW8wTkF2YVQxaEx6WHdGaW5tQ3ptZUR1Y0VRSzE4VFRhUW9GZ1A3Yk5DK1JaNE9UNFQ2Z1FvZ0RGWWsrMVF4UWxqMTlRR1NBV0tpTFlwOFAwQWcxR2J6MVVMZldITGc5aVVuUU5LNVFRSmN1a20wNGJsS0xIMkdnRUpDWStIelhBWldDdkhLY28zQnA2TUlhQ2pTWFhSSnlPeGVxaG56RWFGOTNNZkZHVy9PMTZadkRMNVRNNE1KSWp1anovY0h5cGtRdXV6UndXSjkzQktkSXQrd0NSQVBsOWtwZTJJa2tiMm1GZ0dseGgvaTQwZDNFSGZkdm95TWpJeU11NDN5bHQvSUFtR0huTjVpSXQ3d0tmYnYwMVJBY0pxRlJsOWxjallRU25iUXFLZ0M0ZllPd1NKdDZONnRyRTB0d1o5a04vUHFOcFRRZUlDdnI0VExzRFlDMDZVN0JNanNoUyt2MS9hVDdJd1FZRDVMY2dSUVhNVDJGckJmQkxqWjYxNTFqREVsazl0UEZmcFVnazJ5cmVndXNYMjVCSmJ3QUZFZk0rWUk2dkdBdGk0YlR0aXpCK1RqZlFDckVSeWhLYjJYOEQ2QTl3WDc1UDR0NG5lQllKZVA2cGRoZy9nUWw4TVd2eXR6ZVNUamdPUUJ5blFkaC9pWEtkeE9yR0ovUmtaR1JzYjlRbVhpaEdyNStnOEdHZzl1VGgrS29WWnVOSXpWK0N3UnVjRkJFeXIxbVZqeDRpck94d00xQmhpckI2USsyZU5RaTRlcVIrYUY2bUVMdG9NekNSN1Y5UkFGZS9adlFvZ05peVk4RlBTVVRGc0xwOFRlVG1NdWk1bXR3N2JjYVQwWXcyQUE0d0ZSUUlsa2dxKzFEUXJOaGttb3hTNUpxK3U2Yk1BSUdSRUNFQU5nWEhUZ1d6d2dCT2hESDJsMG9UUTREOEQ1Tk1rdEJnTnl3QUVNam84cndBVE1aclBZN0pHeEJvSkNrSUJEUWlBWTA5RUdUVWlCQ1drVXBJU2ZHUFI1QUF3QmZaaUcyejdBeWMxeWVLVHhpZDM5eEJOd2ZIcjRPMExBNDhlUEZUdmhZckYxcjR0eUFvejluMk1DcUV1QnRwLzZHRFIwb0FZZkcvUjZ3SkV4SFlaSGZoeWdzdjdmRVdDT2o0Ylltc1A1QStwTDRNa1RmQW5NbEQ0RityM2JvYkt2VHlUQTJQL3c3UE4rQWdxMlFXOHBpcU1DcFRCd2Vub0t2WDBBSEdrR3RQMllBUHZURVdBN1FVVEF1ZG43L054dE9HNDZ3V05tRHRwQkVrQnpON3JCRXZBRkhwK1lUQi9xOTdxUEFONGdIRnFnQmk4dUxzQzdxUENBNm1nNDFHLytFckJ5UHdFWERkb054UmhPeCtNNWpQRXpRdWdTMGh0K2IxL1kzZ0VuWU1BSUFPSUJFMjkvaElEdWNFOHRtTXNOT2dLNEIxUkhGdTRVQ1JsTUh6djB4emNhamNmZFhXRHMyaDhUQXJCQ2tvRFVKWURMbXo2dzdpcDNCRlMwdmU1d1RSd0FuNmtlTUE5STNRWWJmU1owREtieXQrN09YakdJMWlkUGNmTnlBeWZBTWxDcnphR3FwaFlyeEhvY0xIUkpWeWNuZkdVY2J0VCtqSXlNakl3OXg3Tm44ZkpTekcwVG1GdE84clpUK1hUM1MzdWIrdEtKYmJMZDVkaVRWcDUwK3phaHllSFNzbEovWVByVTBmdWF6clpPMkNaOTIvWkNDVlhsR1JpWktQSnlQUFJ4eUlGV2VYTFFCWEpCS2lxLzNkaXZFQU42WndNMjAwUWptN0VKQlplV20vUFJXVkNiWUs3czd1Mmw0WGFDeitsemdPZk1maE1vblhyN1RXemVaYjk4ZGJnSXpCVDhVYjhlWVlVcWZaNHJWSi9NRGJJRGdQcVR1bEoveHZudFdBdGpJaXNxbnd4T2tHejBuMDc3RkFSb1k3OUdkQTZIUEU0ck95MTk2TmlNV0hUWmxTU0FwY09nWHB5L2ZIVjJqb2FOS3UzZmZzQW5SY0JmNEsvNk5jSUc2dEl4azNIeW9YUGpBU3FmVWdYYllONVB6cEwybmprUjlRTWplRFRWSERUQ2dSdXhPZWdqb08wRnZLelAvdC9nbVZkSTI0K0c3TkllOEpYNld2M2REeWxkTUErNFlCNXd3VHlndGQrZHdScWFUcXJMYjFsNzN6VFNONTJDTnBuSHVRT1lQc0RibHliZ3hma1hoL29WdHIrTjFERUJKZGhSSnlkL0JkL3ExeitjYk5yRDE3aVZLeWFqY252OWFyaE9rUlBnc3J1dUQ2RG1OUHdwRE5yTHcyQ29UZ0huaTR5QUxyMEwyOSt0aUtBRUlQbjg2OGVqeC8vOHJwV1AzT0VPbDVPbjlPd3BjUW0wTWhhZlAvZXk4ZjF1dkROSWdHTFFHOHo0WU85OUVOZ2c5NWV0d3Y0dVlKWVk4ZlVHSFlINmo2ZnNjSEZaTWZ0bEFsOWkrOVhMNzNYM04vbitaU3RPemZWZlJ2WVhocmJkS09wRWdWUVRnL3dzRHVERDNrd09mUU5NVEo1eSsvbHRVRFdMdW55eG5SRjQ2SXFsQnpHTVk0WDdpbmdnUkVGaW9JeU1qSXlNSFdDSUI2Wk5LQWNYc2VvM3ZMVFFUa1ZFNzM0OGRsd0pKU3owK3dMZm1pOEJoWnFmdzNENHd3L3dIVkxuRWQ1L2ZnWXZYc0RaM01sc3ZZVWJibkRqRFozTU4zVEpHNCtieGpBYURsOFRCcmk5cXhFdzFjY2FvMndUTkFNTEhvMmYrc2pyWHdiLzlxSG9ZcWdQTUJYSlRWZk9wbXJaSDIzeTZ1dm8wTEhTeVk2ZkhHd0tmSEpsQXVNRnZPYmpEWXJJcXhCZ1FpMjBoN0hkL25ZVkxtbm8rZWFOVW0vZWVIMkdDdW9wbnRuaEJKQWxJMkFIbzlDQ2gxSTFReFVkQWJxcUdZOUJCTHd5YzNXNHdZVmh2WThBNEJvSWMxbDVNN3ZuUFdwaFpXOS9TZXMzbjM3eTlhMHVHcUZ3RlFac1FRYmQzODZEb2dwZ0VrK2R6eW5zQVpNSlhxOCtuczlOZXVrSjBQWXJOQVRHR2VmSlFsaGtMbzdEVFhyK3kzYk5pT3NEdnJYVHovQzJxMURYWkg4NGlSTndyUDg4TmordTJEallFRTZSQnhEOUtuajE2dWpWSEM2N0E3NDIybzAyUndEM2dCK3Q3RWJsV3Z1OWdlT0Z4U25kM1JPbVQrbkp5UWtob1Bsc3hWT05jLzNURWRCb3MranRBK1p6Y3dIZ1R2RDFjRGphWUNjSXRBOHc5aTg4QThiK21xU2pjNlB2cWQ5OThRZ3VFUVBtUU1lbzIzT0ROODYrcDAvYm4xYnVCa1Q2K29CaE5aL1BZWTRaQUhZYjNQUmQ0TGtabVBYNjhOUnRNWm40QVN2ZEErcWYwak1BNU1QOWVlZzI4TnVnOVFpTG5qNUEzM1UxTUFFUzZ4SEFVTnB6Lzl6RkFZRTFncVFETVQzRzZ4STlwd2R3L2FJZ0tvSENTMVlHbFJuU3E5eUNqZFhqZ04zaitOMjdZeVJPSHhtdU5BZU5LUHBZdVhJeUl5TWpZeTBNOGVyb3M1OU1GL1BUMmM2MDJUN2VBN3p2aEo5ZHIvdnpEalhhTHA0WWM1KzB3bGx6eHpIdjNnZG1NTU03L0NjUXpLZ1ZCcVlUbUZuK1orbUttOEo3azBBNUYvamdDZmpRMVdCaFF5aU9xRDBsWXVxQmIrQXl6TXc5SGEyRzNtNmM4cVF4K0FscW5JY2VRcCtTYjZpOVV5UVdiaHI1NCtBam5aMFZ6VzJUQU4wRG1CVDZQV21jNmpEQkUyUEsydStuRjQzZHlQN1EwdDFwT2NYMmZkUnZIMG1GMlE0SnFOMzVybkhqVkllYVhmSUFWeVV1dy9hSENDaUp5OWlGNWwxNjIxendlSThLWnJQWjlpSmRiN0RYSjNVUzBPU3J0WjEwaW10N3dIWTdRZXNBelVNejFvWjNub0IzcUZKL0gxOGo5N0ZZdXc4UURONG9lS2YzMG9zdmNTVzJFeExvK1ZjYnVBdW8vc1VJbThmTUc5eG9jTzNFYTE5SjlnRllpdm5ISjJLbnlmb3ZabGdXM3Y2eVN4MzJhYlFpSXlNakl5UGpobEZEVEx4cHdJZ0ZNblRwNkEzZzRJREtOWStzdGt3QU1Bb0lBYmFzeEJYcVVXbmVTQVdUTWp0NTBsVHFUMjlyRmp2WG9oanNETm0yWVBYREZsSUNtckpPWjN0NnRIbThBaUVBbDBzQ2VMSUlvcklSdCtjRmJldy9RUnNvQVhiNG8xWFNmb3l3em0wRlRNQW9ZQk52THlGdTh2OEhwTEJ0RDFpS2dDMTd3SGI3QUk2ZDl3RmJ2Z3VBSUdUSGQ0RTl3RzdqZ0l5TWpJeU0rNDM0YzJSM0hlVi9GZng2anRadTZpamw4aDU5VDY1NWpoUityZEh6RE9QNmJlQUJDaGViOE84L1dGWGVPeXpnZjVvQWhWWW5LeFA3Q3dhQWYxYWZKdThiU3JoUzZ0ZGFYZUduclJlbk9xT2x6OWQ2UXdZbkEvM1RMZCtHRTdxZTNjaEE1WUY1RGZZMHZLM2FkZk9YL2d5TnAyQlcyNU1IZHhBQjlxdlJpaVAzL1hwUVFGR1lEVTQrTWkvLy9YdW1YRzhwanZhVUFPc0JHbGY0akp0K1lZRXplRXpBZHcwNkYxOVIzanVNN0Qxd2l0YTg2R1IwQ0tmREhnTHVYQ2M0QnJpNnZNTGRmak1jNFZOU1VOc2RvZG8yeHUvMStYbC9LNSthejhqSXlNaFlHL3o1Z0pUTUYxR3RLcS9hM3JweUN2ejVnSlRNbDlHdEtxL2EzcnB5Q21mUTRXd1ptUytrWEZWZXRiMTE1U1Q0OHdFZi9BR2NmRzFpdyt0V2JwYlMydkozblF4Y1ZyM2xIM3o1aDk3MkZVVEx6WXBPVms3bDVoRCtlWWNZd0RjQW5ld09vdHJaNE90clBEdWNxaS9MUlgwL1JSNHF4N05uNFU4ZytxamZmdnVONkdmK25DODV2d2F1SGphWXl1YnF2V1lLWTRWRWZTVU1pdGRuQkNUMVVlNjNSNTQzOW0rT2dDbjZEcm9BQWFIUFZReEt0aC93a0pnSG1HOGJtUU1zVDBENkVqRGZ2aFZSS08zeXdPUVVnUkE3bm1MMXVhd1ptSGYxaytEUEJ3UTZOZGNKK2s2TWQxTEE1ZjVPTmRoSjh2WjVKMHZMSFQ5OXNya0dPam1KYmQvRzFyMk5yaXFuc2UxQVp0MUFhbFU1alcySHN1dUcwcXZLR1JrWkdSa1pHUkcwZ2NPTnlYc1A5djhEMC9JZEpBRGlCTmlYbDMzMjdXUkdnT0wvOUhDLzBYd2xJVVJrUmhDNHR6NlovZnU3ZlVmMmdIdmZCOXozdTBCR1JrWkdSa2JHcGxIY25rZ2d1UW9TcXRVWHVoYnMvd1B0TXdxVjBIVUpBdmo1dmszMmI4SUR1TDIzeW43cUFYWjV1MzJoYlJYN2QzbzgyRGYxRlpYdmJoOVFPZmh5eGxkci8rM3hnWFU5b0ttdnNIeXI3Ri9YQTI2OS9ldmVCWHJzdjdOOVFBTGUvdHZqQTBrUFdBWEdidmVia2JIbitEL0o1bk1jSHp4MVVBQUFBQUJKUlU1RXJrSmdnZz09KSAhaW1wb3J0YW50IDsNCn0NCg0KZGwgZHQgew0KICAgIGZsb2F0IDogbGVmdDsNCiAgICBtYXJnaW4gOiAxMHB4IDEyMHB4IDEwcHggMDsNCn0NCg0KZGwgZGQgew0KICAgIHdpZHRoIDogMTRlbSAhaW1wb3J0YW50IDsNCiAgICBtYXJnaW4gOiAyNXB4IDAgMTBweCA3MHB4Ow0KfQ0KDQoudWlfdHBpY2tlcl90aW1lX2xhYmVsIHsNCiAgICB3aWR0aCA6IDJlbSAhaW1wb3J0YW50IDsNCiAgICBtYXJnaW4tcmlnaHQgOiAwOw0KfQ0KDQoudWlfdHBpY2tlcl90aW1lIHsNCiAgICBib3JkZXIgOiAjZWFlOWU4IHNvbGlkIDFweDsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZjsNCiAgICB3aWR0aCA6IDRlbSAhaW1wb3J0YW50IDsNCiAgICBoZWlnaHQgOiAxLjVlbTsNCiAgICBwYWRkaW5nIDogNXB4IDAgNXB4IDEwcHg7DQp9DQoNCi51aV90cGlja2VyX3RpbWVfbGFiZWwsIC51aV90cGlja2VyX3RpbWUsIC51aV90cGlja2VyX2hvdXJfbGFiZWwsIC51aV90cGlja2VyX21pbnV0ZV9sYWJlbCB7DQogICAgZm9udC1zaXplIDogMC44NWVtOw0KICAgIG1hcmdpbi1ib3R0b20gOiA3cHg7DQp9DQoNCmEudWktc2xpZGVyLWhhbmRsZSB7DQogICAgcGFkZGluZyA6IDJweCAwIDNweCAwICFpbXBvcnRhbnQgOw0KICAgIG1hcmdpbi10b3AgOiAtNHB4Ow0KfQ0KDQoudWlfdHBpY2tlcl9ob3VyX3NsaWRlciwgLnVpX3RwaWNrZXJfbWludXRlX3NsaWRlciB7DQogICAgaGVpZ2h0IDogNHB4Ow0KICAgIGJhY2tncm91bmQgOiAjYzVjNWM1Ow0KICAgIGJvcmRlciA6IDA7DQp9DQoNCi51aS1wcmlvcml0eS1wcmltYXJ5IHsNCiAgICBiYWNrZ3JvdW5kIDogI2JkMGEyNiAhaW1wb3J0YW50IDsNCn0NCg0KLnVpLXByaW9yaXR5LXNlY29uZGFyeSB7DQogICAgYmFja2dyb3VuZCA6ICM0OTQ5NDkgIWltcG9ydGFudCA7DQp9DQoNCi51aS1wcmlvcml0eS1zZWNvbmRhcnksIC51aS1wcmlvcml0eS1wcmltYXJ5IHsNCiAgICBib3JkZXIgOiAwICFpbXBvcnRhbnQgOw0KICAgIHBhZGRpbmcgOiA4cHggMTJweCA4cHggMTJweCAhaW1wb3J0YW50IDsNCiAgICBmb250LXNpemUgOiAwLjcwZW0gIWltcG9ydGFudCA7DQp9DQoNCnRhYmxlLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSB7DQogICAgYmFja2dyb3VuZCA6ICNmZmZmZmYgIWltcG9ydGFudCA7DQogICAgY29sb3IgOiAjYmQwYTI2ICFpbXBvcnRhbnQgOw0KICAgIGJvcmRlciA6ICNlYWU5ZTggc29saWQgMXB4ICFpbXBvcnRhbnQgOw0KfQ0KDQp0YWJsZS51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIGEudWktc3RhdGUtaGlnaGxpZ2h0IHsNCiAgICBjb2xvciA6ICM0OTQ5NDkgIWltcG9ydGFudCA7DQp9DQoNCnRhYmxlLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYTpob3ZlciwgdGFibGUudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhLnVpLXN0YXRlLWFjdGl2ZSB7DQogICAgYmFja2dyb3VuZCA6ICNlMTVjNzEgIWltcG9ydGFudCA7DQogICAgY29sb3IgOiAjZmZmZmZmICFpbXBvcnRhbnQgOw0KICAgIGJvcmRlciA6ICNiZDBhMjYgc29saWQgMXB4ICFpbXBvcnRhbnQgOw0KfQ0KDQoudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyLCAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZiAhaW1wb3J0YW50IDsNCiAgICBib3JkZXIgOiAjZmZmZmZmIHNvbGlkIDFweCAhaW1wb3J0YW50IDsNCiAgICBjb2xvciA6ICNmZmZmZmYgIWltcG9ydGFudCA7DQp9DQoNCi51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgew0KICAgIGJvcmRlciA6IDA7DQp9DQoNCi51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhciB7DQogICAgYm9yZGVyIDogMDsNCiAgICBiYWNrZ3JvdW5kIDogI2JkMGEyNjsNCiAgICBjb2xvciA6ICNiZDBhMjY7DQogICAgcGFkZGluZyA6IDRweCA4cHggNHB4IDhweDsNCiAgICB3aWR0aCA6IDIwcHg7DQogICAgZmxvYXQgOiByaWdodDsNCn0NCg0KLmxvb2t1cC1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhciB7DQogICAgbWFyZ2luLXRvcCA6IC02cHg7DQp9DQoNCi51aS1kaWFsb2ctdGl0bGViYXItY2xvc2UudWktc3RhdGUtaG92ZXIgew0KICAgIGJhY2tncm91bmQgOiAjZTljZWQyICFpbXBvcnRhbnQgOw0KfQ0KDQoudWktZGlhbG9nIHsNCiAgICBib3JkZXIgOiAwOw0KICAgIGJhY2tncm91bmQgOiAjYmQwYTI2ICFpbXBvcnRhbnQgOw0KICAgIG9wYWNpdHkgOiAwLjk7DQp9DQoNCi51aS1kaWFsb2cgLmRpYWxvZy1tb2RhbCB7DQogICAgbWFyZ2luIDogNXB4Ow0KICAgIG1hcmdpbi10b3AgOiAxMHB4Ow0KICAgIHBhZGRpbmctbGVmdCA6IDdweDsNCiAgICBwYWRkaW5nLXRvcCA6IDA7DQp9DQoNCi5kaWFsb2ctbW9kYWwgcCBzcGFuIHsNCiAgICBjb2xvciA6ICNmOWY5Zjk7DQogICAgZm9udC1zaXplIDogMWVtICFpbXBvcnRhbnQgOw0KfQ0KDQpkaXZbbG9va3VwZGV0YWlsXS51aS1kaWFsb2ctY29udGVudCB7DQogICAgY29sb3I6ICNmOWY5ZjkgIWltcG9ydGFudDsNCn0NCg0KLkxvb2t1cERldGFpbEluZm9UZXh0IHsgDQogICAgY29sb3I6ICNmOWY5ZjkgIWltcG9ydGFudDsNCn0NCg0KLnVpLXdpZGdldC1vdmVybGF5IHsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZjsNCn0NCg0KLnVpLWRpYWxvZyAudWktd2lkZ2V0LWNvbnRlbnQgew0KICAgIGJhY2tncm91bmQgOiBub25lOw0KICAgIGJvcmRlciA6IDA7DQp9DQoNCi5sb29rdXAtZGlhbG9nIHsNCiAgICBjb2xvciA6ICM0OTQ5NDkgIWltcG9ydGFudCA7DQogICAgYm9yZGVyIDogI2Q0ZDRkNCBzb2xpZCAycHg7DQogICAgYmFja2dyb3VuZCA6ICNmOWY5ZjkgIWltcG9ydGFudCA7DQogICAgcGFkZGluZyA6IDVweCAwIDVweCAxMHB4Ow0KICAgIG9wYWNpdHkgOiAxOw0KfQ0KDQoubG9va3VwLWRpYWxvZyAudWktaGVscGVyLWNsZWFyZml4IHsNCiAgICBiYWNrZ3JvdW5kIDogI2Y5ZjlmOSAhaW1wb3J0YW50IDsNCn0NCg0KLmxvb2t1cC1kaWFsb2cgLmZnLWJ1dHRvbnNldCB7DQogICAgd2lkdGggOiAxMDBweDsNCn0NCg0KLmxvb2t1cC1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZSB7DQogICAgY29sb3IgOiAjZjlmOWY5Ow0KfQ0KDQouZmctYnV0dG9uIHsNCiAgICBtYXJnaW4tbGVmdCA6IDNweCAhaW1wb3J0YW50IDsNCn0NCg0KLmxvb2t1cC1kaWFsb2cgLnVpLWljb24tY2xvc2V0aGljayB7DQogICAgbWFyZ2luLXJpZ2h0IDogNXB4Ow0KfQ0KDQoubG9va3VwLWRpYWxvZyAuZmctdG9vbGJhciB7DQogICAgYm9yZGVyIDogI2Q0ZDRkNCBzb2xpZCAxcHg7DQogICAgYmFja2dyb3VuZCA6ICNlYWU5ZTggIWltcG9ydGFudCA7DQogICAgY29sb3IgOiAjYmQwYTI2Ow0KfQ0KDQoubG9va3VwLWRpYWxvZyB0YWJsZSB0aCB7DQogICAgYm9yZGVyLWNvbG9yIDogI2Q0ZDRkNCAhaW1wb3J0YW50IDsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZiAhaW1wb3J0YW50IDsNCiAgICBjb2xvciA6ICM0OTQ5NDkgIWltcG9ydGFudCA7DQp9DQoNCi5mZy10b29sYmFyIHsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZjsNCiAgICBwYWRkaW5nIDogMDsNCn0NCg0KLmxvb2t1cC1kaWFsb2cgLmZnLWJ1dHRvbiB7DQogICAgYmFja2dyb3VuZCA6IG5vbmU7DQogICAgYm9yZGVyIDogMDsNCn0NCg0KLmxvb2t1cC1kaWFsb2cgI0ZpbHRlckJ1dHRvbiwgLmxvb2t1cC1kaWFsb2cgLnVpLWJ1dHRvbi10ZXh0IHsNCiAgICBmb250LXNpemUgOiAwLjhlbSAhaW1wb3J0YW50IDsNCn0NCg0KLmxvb2t1cC1kaWFsb2cgLmRhdGFUYWJsZXNfcHJvY2Vzc2luZyB7DQogICAgY29sb3IgOiAjNGY0ZTRlOw0KfQ0KDQoubG9va3VwLWRpYWxvZyAudWktaWNvbiwgLnVpLWljb24tY2xvc2V0aGljayB7DQogICAgYmFja2dyb3VuZC1pbWFnZSA6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRHdDQU1BQUFEWVNVcjVBQUFBN1ZCTVZFWE1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pyRGtaakFBQUFUblJTVGxNQUdCQXlCQWhRdjRPWkxpSlVjRUJtWUJvU3pRd2dQQlpDU0VvZVdpWXdVaXlGTkllQncyckp6OGM0UkJ5OXVYeXJ0YVdOcWEyektQMmZKTzhLQmdLUG8yS1ZvYTlzMzUxR1BtNStrV2hvMGtqOUFBQVBoVWxFUVZSNG5PMWRqV0xidGhFR3lVaXE1WVNTTFh0cDdGcExPbWZ6a214cjEyNnRtaTJwMDNSSjEvWGUvM0VHZ0FSeFB5QWdSYklrMi9oa1N6NENKTzQrSHNFN0FKU1Z5c2pJMkFNVVVPeGFoWjJpQU5oekJ0WldyNEJvSVJTWUFWTjV1NFF3RHdRRFJiY3dmVWk1S1Mzd0Z1RG1GblFMYTREdGIvL2Nxa3R3RDVRRUZGd2ZVczdQb0NDQTd5NGJFSlZGaXpjSW9iOEttaEFwbHd3cVZqdCs5RkJsM3VJTlFuaXdFaXJ5RXl3OUpIcUdwUWRFRk5pK0I0UVE3UU9pSGh5c0lQb0F4VXF4dmR2dkE5SzQyYnNBdjRTMmZ4ZllPZTU3SUpTUmtaR1JrWkd4eDdqeFNIREhjUkJYUU1UeUlqSW5CZ0h3QkovYkV4OFBFQU5DK3VoYnBTU2dnQ0JBVk9EVmFicEkxUy9rNFdMWnBUbjZOcE1ob1g5WTQwaHhZRVJGcE1jcVVzNEFsb0N0RFFkSUQxWWhueVhaMmhMakFZV2lPOUR5MVBEQjd0UGhJcUx4K3VNQjhnclphUitReGwyL0MyUmtaR1JrWkdSazdBN3JCZjdKMERSNS9MVVRqelVQSVBTUEd2UUppVkppQjdrY1FDaVVPSnJjRk50RFpJZjJ4YXJRM2FHdkxOeEFWSUZBYWJ6OTBCRmlCSWx5Y1RCaGdXd09XQ0gwRkxZSGxQcXdIYUN2Y0luMlpib3NDZXZmUFRSaUZGY2d2SHVrQ2pXd3JjM0dyR2gxZnNBb2Y4RWFVUmVLWGtDQjQvTXpGTm85N3FMcEZpS0ZZdi9rTlI1WVF4UWJRRW9ma1oyT3VFT0hxcVQ2Z0ZUcHJ1OENON3gvK2phWmtaR1JrWkdSY1YreC9yTFVOY01NcVVBc2NnbkZvY21wcWtUenF5bXdWQVB4Zko1UG5JVVVRT1VLVDA0dEVkV1p5djNKQ1FTbjk2V1M0cEQ5N1FmeVcyNUE3TmhTQWJ5aG1WajBGRWx0QTR2ZGl5Z0JpYlhob1VZZ3lrQ1VQN0h3UFREZUVxQUljSFZNa1pnN1p4NGswdUZBTnM2M2hQUVhDb1JMQXdkZ0dzcjlBejdRdjdzZ1FHZ2cxYVBsL0JKTEV4QldnRzRSRlJMRkltR21JcXVQQy9rbEVHeUNHMEF1QVhhSkpDK0I4RlZlOU5ZUURFY1hCOGc2QVFjallKMWdvSklnZ0hXQ3JGUjBTNmtSSE41KzRCekZpOE5hb04zNU5SeFV2TCtKSmRacjdQVjR3SzZmajhuSXlNakl5TmhyM094ZFhBWXE3Rkhad0I2YkRTelNoNHNGMHV0Q2hxbzBOQXZhVDFoTHpYd0Zpbm1Dem1lRHVjRVFLMThUVGFRb0ZnUDdiTkMrUlo0T1Q0VDZnUW9nREZZaysxUXhRbGoxOVFHU0FXS2lMWXA4UDBBZzFHYnoxVUxmV0hMZzlpVW5RTks1UVFKY3VrbTA0YmxLTEgyR2dFSkNZK0h6WEFaV0N2SEtjbzNCcDZNSWFDalNYWFJKeU94ZXFobnpFYUY5M01mRkdXL08xNlp2REw1VE00TUpJanVqei9jSHlwa1F1dXpSd1dKOTNCS2RJdCt3Q1JBUGw5a3BlMklra2IybUZnR2x4aC9pNDBkM0VIZmR2b3lNakl5TXU0M3lsdC9JQW1HSG5ONWlJdDd3S2ZidjAxUkFjSnFGUmw5bGNqWVFTbmJRcUtnQzRmWU93U0p0Nk42dHJFMHR3WjlrTi9QcU5wVFFlSUN2cjRUTHNEWUMwNlU3Qk1qc2hTK3YxL2FUN0l3UVlENUxjZ1JRWE1UMkZyQmZCTGpaNjE1MWpERWxrOXRQRmZwVWdrMnlyZWd1c1gyNUJKYndBRkVmTStZSTZ2R0F0aTRiVHRpekIrVGpmUUNyRVJ5aEtiMlg4RDZBOXdYNzVQNHQ0bmVCWUplUDZwZGhnL2dRbDhNV3Z5dHplU1RqZ09RQnluUWRoL2lYS2R4T3JHSi9Sa1pHUnNiOVFtWGloR3I1K2c4R0dnOXVUaCtLb1ZadU5JelYrQ3dSdWNGQkV5cjFtVmp4NGlyT3h3TTFCaGlyQjZRKzJlTlFpNGVxUithRjZtRUx0b016Q1I3VjlSQUZlL1p2UW9nTml5WThGUFNVVEZzTHA4VGVUbU11aTVtdHc3YmNhVDBZdzJBQTR3RlJRSWxrZ3ErMURRck5oa21veFM1SnErdTZiTUFJR1JFQ0VBTmdYSFRnV3p3Z0JPaERIMmwwb1RRNEQ4RDVOTWt0QmdOeXdBRU1qbzhyd0FUTVpyUFk3Skd4Qm9KQ2tJQkRRaUFZMDlFR1RVaUJDV2tVcElTZkdQUjVBQXdCZlppRzJ6N0F5YzF5ZUtUeGlkMzl4Qk53ZkhyNE8wTEE0OGVQRlR2aFlyRjFyNHR5QW96OW4yTUNxRXVCdHAvNkdEUjBvQVlmRy9SNndKRXhIWVpIZmh5Z3N2N2ZFV0NPajRiWW1zUDVBK3BMNE1rVGZBbk1sRDRGK3IzYm9iS3ZUeVRBMlAvdzdQTitBZ3EyUVc4cGlxTUNwVEJ3ZW5vS3ZYMEFIR2tHdFAyWUFQdlRFV0E3UVVUQXVkbjcvTnh0T0c0NndXTm1EdHBCRWtCek43ckJFdkFGSHArWVRCL3E5N3FQQU40Z0hGcWdCaTh1THNDN3FQQ0E2bWc0MUcvK0VyQnlQd0VYRGRvTnhSaE94K001alBFelF1Z1MwaHQrYjEvWTNnRW5ZTUFJQU9JQkUyOS9oSUR1Y0U4dG1Nc05PZ0s0QjFSSEZ1NFVDUmxNSHp2MHh6Y2FqY2ZkWFdEczJoOFRBckJDa29EVUpZRExtejZ3N2lwM0JGUzB2ZTV3VFJ3QW42a2VNQTlJM1FZYmZTWjBES2J5dCs3T1hqR0kxaWRQY2ZOeUF5ZkFNbENyemFHcXBoWXJ4SG9jTEhSSlZ5Y25mR1VjYnRUK2pJeU1qSXc5eDdObjhmSlN6RzBUbUZ0TzhyWlQrWFQzUzN1Yit0S0piYkxkNWRpVFZwNTAremFoeWVIU3NsSi9ZUHJVMGZ1YXpyWk8yQ1o5Mi9aQ0NWWGxHUmlaS1BKeVBQUnh5SUZXZVhMUUJYSkJLaXEvM2RpdkVBTjZad00yMDBRam03RUpCWmVXbS9QUldWQ2JZSzdzN3UybDRYYUN6K2x6Z09mTWZoTW9uWHI3VFd6ZVpiOThkYmdJekJUOFViOGVZWVVxZlo0clZKL01EYklEZ1BxVHVsSi94dm50V0F0aklpc3Fud3hPa0d6MG4wNzdGQVJvWTc5R2RBNkhQRTRyT3kxOTZOaU1XSFRabFNTQXBjT2dYcHkvZkhWMmpvYU5LdTNmZnNBblJjQmY0Sy82TmNJRzZ0SXhrM0h5b1hQakFTcWZVZ1hiWU41UHpwTDJuamtSOVFNamVEVFZIRFRDZ1J1eE9lZ2pvTzBGdkt6UC90L2dtVmRJMjQrRzdOSWU4Slg2V3YzZER5bGRNQSs0WUI1d3dUeWd0ZCtkd1JxYVRxckxiMWw3M3pUU041MkNOcG5IdVFPWVBzRGJseWJneGZrWGgvb1Z0citOMURFQkpkaFJKeWQvQmQvcTF6K2NiTnJEMTdpVkt5YWpjbnY5YXJoT2tSUGdzcnV1RDZEbU5Qd3BETnJMdzJDb1RnSG5pNHlBTHIwTDI5K3RpS0FFSVBuODY4ZWp4Ly84cnBXUDNPRU9sNU9uOU93cGNRbTBNaGFmUC9leThmMXV2RE5JZ0dMUUc4ejRZTzk5RU5nZzk1ZXR3djR1WUpZWThmVUdIWUg2ajZmc2NIRlpNZnRsQWw5aSs5WEw3M1gzTi9uK1pTdE96ZlZmUnZZWGhyYmRLT3BFZ1ZRVGcvd3NEdUREM2t3T2ZRTk1USjV5Ky9sdFVEV0x1bnl4blJGNDZJcWxCekdNWTRYN2luZ2dSRUZpb0l5TWpJeU1IV0NJQjZaTktBY1hzZW8zdkxUUVRrVkU3MzQ4ZGx3SkpTejArd0xmbWk4QmhacWZ3M0Q0d3cvd0hWTG5FZDUvZmdZdlhzRFozTWxzdllVYmJuRGpEWjNNTjNUSkc0K2J4akFhRGw4VEJyaTlxeEV3MWNjYW8yd1ROQU1MSG8yZitzanJYd2IvOXFIb1lxZ1BNQlhKVFZmT3BtclpIMjN5NnV2bzBMSFN5WTZmSEd3S2ZISmxBdU1Gdk9iakRZcklxeEJnUWkyMGg3SGQvbllWTG1ubytlYU5VbS9lZUgyR0N1b3BudG5oQkpBbEkyQUhvOUNDaDFJMVF4VWRBYnFxR1k5QkJMd3ljM1c0d1lWaHZZOEE0Qm9JYzFsNU03dm5QV3BoWlc5L1NlczNuMzd5OWEwdUdxRndGUVpzUVFiZDM4NkRvZ3BnRWsrZHp5bnNBWk1KWHE4K25zOU5ldWtKMFBZck5BVEdHZWZKUWxoa0xvN0RUWHIreTNiTmlPc0R2clhUei9DMnExRFhaSDg0aVJOd3JQODhOait1MkRqWUVFNlJCeEQ5S25qMTZ1alZIQzY3QTc0MjJvMDJSd0QzZ0IrdDdFYmxXdnU5Z2VPRnhTbmQzUk9tVCtuSnlRa2hvUGxzeFZPTmMvM1RFZEJvcytqdEErWnpjd0hnVHZEMWNEamFZQ2NJdEE4dzlpODhBOGIrbXFTamM2UHZxZDk5OFFndUVRUG1RTWVvMjNPRE44NitwMC9ibjFidUJrVDYrb0JoTlovUFlZNFpBSFliM1BSZDRMa1ptUFg2OE5SdE1abjRBU3ZkQStxZjBqTUE1TVA5ZWVnMjhOdWc5UWlMbmo1QTMzVTFNQUVTNnhIQVVOcHovOXpGQVlFMWdxUURNVDNHNnhJOXB3ZHcvYUlnS29IQ1MxWUdsUm5TcTl5Q2pkWGpnTjNqK04yN1l5Uk9IeG11TkFlTktQcFl1WEl5SXlNall5ME04ZXJvczU5TUYvUFQyYzYwMlQ3ZUE3enZoSjlkci92ekRqWGFMcDRZYzUrMHdsbHp4ekh2M2dkbU1NTTcvQ2NRektnVkJxWVRtRm4rWittS204SjdrMEE1Ri9qZ0NmalExV0JoUXlpT3FEMGxZdXFCYitBeXpNdzlIYTJHM202YzhxUXgrQWxxbkljZVFwK1NiNmk5VXlRV2JocjU0K0FqblowVnpXMlRBTjBEbUJUNlBXbWM2akRCRTJQSzJ1K25GNDNkeVA3UTB0MXBPY1gyZmRSdkgwbUYyUTRKcU4zNXJuSGpWSWVhWGZJQVZ5VXV3L2FIQ0NpSnk5aUY1bDE2MjF6d2VJOEtaclBaOWlKZGI3RFhKM1VTME9TcnRaMTBpbXQ3d0hZN1Flc0F6VU16MW9aM25vQjNxRkovSDE4ajk3Rll1dzhRRE40b2VLZjMwb3N2Y1NXMkV4TG8rVmNidUF1by9zVUltOGZNRzl4b2NPM0VhMTlKOWdGWWl2bkhKMktueWZvdlpsZ1czdjZ5U3gzMmFiUWlJeU1qSXlQamhsRkRUTHhwd0lnRk1uVHA2QTNnNElES05ZK3N0a3dBTUFvSUFiYXN4QlhxVVduZVNBV1RNanQ1MGxUcVQyOXJGanZYb2hqc0RObTJZUFhERmxJQ21ySk9aM3Q2dEhtOEFpRUFsMHNDZUxJSW9ySVJ0K2NGYmV3L1FSc29BWGI0bzFYU2ZveXd6bTBGVE1Bb1lCTnZMeUZ1OHY4SHBMQnREMWlLZ0MxN3dIYjdBSTZkOXdGYnZndUFJR1RIZDRFOXdHN2pnSXlNakl5TSs0MzRjMlIzSGVWL0ZmeDZqdFp1NmlqbDhoNTlUNjU1amhSK3JkSHpET1A2YmVBQkNoZWI4TzgvV0ZYZU95emdmNW9BaFZZbkt4UDdDd2FBZjFhZkp1OGJTcmhTNnRkYVhlR25yUmVuT3FPbHo5ZDZRd1luQS8zVExkK0dFN3FlM2NoQTVZRjVEZlkwdkszYWRmT1gvZ3lOcDJCVzI1TUhkeEFCOXF2UmlpUDMvWHBRUUZHWURVNCtNaS8vL1h1bVhHOHBqdmFVQU9zQkdsZjRqSnQrWVlFemVFekFkdzA2RjE5UjNqdU03RDF3aXRhODZHUjBDS2ZESGdMdVhDYzRCcmk2dk1MZGZqTWM0Vk5TVU5zZG9kbzJ4dS8xK1hsL0s1K2F6OGpJeU1oWUcvejVnSlRNRjFHdEtxL2EzcnB5Q3Z6NWdKVE1sOUd0S3EvYTNycHlDbWZRNFd3Wm1TK2tYRlZldGIxMTVTVDQ4d0VmL0FHY2ZHMWl3K3RXYnBiUzJ2SjNuUXhjVnIzbEgzejVoOTcyRlVUTHpZcE9WazdsNWhEK2VZY1l3RGNBbmV3T290clo0T3RyUER1Y3FpL0xSWDAvUlI0cXg3Tm40VThnK3FqZmZ2dU42R2YrbkM4NXZ3YXVIamFZeXVicXZXWUtZNFZFZlNVTWl0ZG5CQ1QxVWU2M1I1NDM5bStPZ0NuNkRyb0FBYUhQVlF4S3RoL3drSmdIbUc4Ym1RTXNUMEQ2RWpEZnZoVlJLTzN5d09RVWdSQTdubUwxdWF3Wm1IZjFrK0RQQndRNk5kY0orazZNZDFMQTVmNU9OZGhKOHZaNUowdkxIVDk5c3JrR09qbUpiZC9HMXIyTnJpcW5zZTFBWnQxQWFsVTVqVzJIc3V1RzBxdktHUmtaR1JrWkdSRzBnY09OeVhzUDl2OEQwL0lkSkFEaUJOaVhsMzMyN1dSR2dPTC85SEMvMFh3bElVUmtSaEM0dHo2Wi9mdTdmVWYyZ0h2ZkI5ejN1MEJHUmtaR1JrYkdwbEhjbmtnZ3VRb1NxdFVYdWhicy93UHRNd3FWMEhVSkF2ajV2azMyYjhJRHVMMjN5bjdxQVhaNXUzMmhiUlg3ZDNvODJEZjFGWlh2Ymg5UU9maHl4bGRyLyszeGdYVTlvS212c0h5cjdGL1hBMjY5L2V2ZUJYcnN2N045UUFMZS90dmpBMGtQV0FYR2J2ZWJrYkhuK0QvSjVuTWNIengxVUFBQUFBQkpSVTVFcmtKZ2dnPT0pICFpbXBvcnRhbnQgOw0KfQ0KDQoubG9va3VwLWRpYWxvZyB0aGVhZCB0aCwgLmxvb2t1cC1kaWFsb2cgdGJvZHkgdHIgew0KICAgIGNvbG9yIDogI2JkMGEyNiAhaW1wb3J0YW50IDsNCn0NCg0KLmxvYWQtZGlhbG9nIHsNCiAgICBjb2xvciA6ICM0OTQ5NDkgIWltcG9ydGFudCA7DQogICAgYm9yZGVyIDogI2Q0ZDRkNCBzb2xpZCAycHg7DQogICAgYmFja2dyb3VuZCA6ICNmOWY5ZjkgIWltcG9ydGFudCA7DQogICAgcGFkZGluZyA6IDVweCAwIDVweCAxMHB4Ow0KICAgIG9wYWNpdHkgOiAxOw0KfQ0KDQoubG9hZC1kaWFsb2cgLnVpLWljb24tY2xvc2V0aGljayB7DQogICAgbWFyZ2luLXJpZ2h0IDogNXB4Ow0KfQ0KDQoubG9hZC1kaWFsb2cgLnVpLWljb257DQogICAgYmFja2dyb3VuZC1pbWFnZSA6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRHdDQU1BQUFEWVNVcjVBQUFBN1ZCTVZFWE1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pyRGtaakFBQUFUblJTVGxNQUdCQXlCQWhRdjRPWkxpSlVjRUJtWUJvU3pRd2dQQlpDU0VvZVdpWXdVaXlGTkllQncyckp6OGM0UkJ5OXVYeXJ0YVdOcWEyektQMmZKTzhLQmdLUG8yS1ZvYTlzMzUxR1BtNStrV2hvMGtqOUFBQVBoVWxFUVZSNG5PMWRqV0xidGhFR3lVaXE1WVNTTFh0cDdGcExPbWZ6a214cjEyNnRtaTJwMDNSSjEvWGUvM0VHZ0FSeFB5QWdSYklrMi9oa1N6NENKTzQrSHNFN0FKU1Z5c2pJMkFNVVVPeGFoWjJpQU5oekJ0WldyNEJvSVJTWUFWTjV1NFF3RHdRRFJiY3dmVWk1S1Mzd0Z1RG1GblFMYTREdGIvL2Nxa3R3RDVRRUZGd2ZVczdQb0NDQTd5NGJFSlZGaXpjSW9iOEttaEFwbHd3cVZqdCs5RkJsM3VJTlFuaXdFaXJ5RXl3OUpIcUdwUWRFRk5pK0I0UVE3UU9pSGh5c0lQb0F4VXF4dmR2dkE5SzQyYnNBdjRTMmZ4ZllPZTU3SUpTUmtaR1JrWkd4eDdqeFNIREhjUkJYUU1UeUlqSW5CZ0h3QkovYkV4OFBFQU5DK3VoYnBTU2dnQ0JBVk9EVmFicEkxUy9rNFdMWnBUbjZOcE1ob1g5WTQwaHhZRVJGcE1jcVVzNEFsb0N0RFFkSUQxWWhueVhaMmhMakFZV2lPOUR5MVBEQjd0UGhJcUx4K3VNQjhnclphUitReGwyL0MyUmtaR1JrWkdSazdBN3JCZjdKMERSNS9MVVRqelVQSVBTUEd2UUppVkppQjdrY1FDaVVPSnJjRk50RFpJZjJ4YXJRM2FHdkxOeEFWSUZBYWJ6OTBCRmlCSWx5Y1RCaGdXd09XQ0gwRkxZSGxQcXdIYUN2Y0luMlpib3NDZXZmUFRSaUZGY2d2SHVrQ2pXd3JjM0dyR2gxZnNBb2Y4RWFVUmVLWGtDQjQvTXpGTm85N3FMcEZpS0ZZdi9rTlI1WVF4UWJRRW9ma1oyT3VFT0hxcVQ2Z0ZUcHJ1OENON3gvK2phWmtaR1JrWkdSY1YreC9yTFVOY01NcVVBc2NnbkZvY21wcWtUenF5bXdWQVB4Zko1UG5JVVVRT1VLVDA0dEVkV1p5djNKQ1FTbjk2V1M0cEQ5N1FmeVcyNUE3TmhTQWJ5aG1WajBGRWx0QTR2ZGl5Z0JpYlhob1VZZ3lrQ1VQN0h3UFREZUVxQUljSFZNa1pnN1p4NGswdUZBTnM2M2hQUVhDb1JMQXdkZ0dzcjlBejdRdjdzZ1FHZ2cxYVBsL0JKTEV4QldnRzRSRlJMRkltR21JcXVQQy9rbEVHeUNHMEF1QVhhSkpDK0I4RlZlOU5ZUURFY1hCOGc2QVFjallKMWdvSklnZ0hXQ3JGUjBTNmtSSE41KzRCekZpOE5hb04zNU5SeFV2TCtKSmRacjdQVjR3SzZmajhuSXlNakl5TmhyM094ZFhBWXE3Rkhad0I2YkRTelNoNHNGMHV0Q2hxbzBOQXZhVDFoTHpYd0Zpbm1Dem1lRHVjRVFLMThUVGFRb0ZnUDdiTkMrUlo0T1Q0VDZnUW9nREZZaysxUXhRbGoxOVFHU0FXS2lMWXA4UDBBZzFHYnoxVUxmV0hMZzlpVW5RTks1UVFKY3VrbTA0YmxLTEgyR2dFSkNZK0h6WEFaV0N2SEtjbzNCcDZNSWFDalNYWFJKeU94ZXFobnpFYUY5M01mRkdXL08xNlp2REw1VE00TUpJanVqei9jSHlwa1F1dXpSd1dKOTNCS2RJdCt3Q1JBUGw5a3BlMklra2IybUZnR2x4aC9pNDBkM0VIZmR2b3lNakl5TXU0M3lsdC9JQW1HSG5ONWlJdDd3S2ZidjAxUkFjSnFGUmw5bGNqWVFTbmJRcUtnQzRmWU93U0p0Nk42dHJFMHR3WjlrTi9QcU5wVFFlSUN2cjRUTHNEWUMwNlU3Qk1qc2hTK3YxL2FUN0l3UVlENUxjZ1JRWE1UMkZyQmZCTGpaNjE1MWpERWxrOXRQRmZwVWdrMnlyZWd1c1gyNUJKYndBRkVmTStZSTZ2R0F0aTRiVHRpekIrVGpmUUNyRVJ5aEtiMlg4RDZBOXdYNzVQNHQ0bmVCWUplUDZwZGhnL2dRbDhNV3Z5dHplU1RqZ09RQnluUWRoL2lYS2R4T3JHSi9Sa1pHUnNiOVFtWGloR3I1K2c4R0dnOXVUaCtLb1ZadU5JelYrQ3dSdWNGQkV5cjFtVmp4NGlyT3h3TTFCaGlyQjZRKzJlTlFpNGVxUithRjZtRUx0b016Q1I3VjlSQUZlL1p2UW9nTml5WThGUFNVVEZzTHA4VGVUbU11aTVtdHc3YmNhVDBZdzJBQTR3RlJRSWxrZ3ErMURRck5oa21veFM1SnErdTZiTUFJR1JFQ0VBTmdYSFRnV3p3Z0JPaERIMmwwb1RRNEQ4RDVOTWt0QmdOeXdBRU1qbzhyd0FUTVpyUFk3Skd4Qm9KQ2tJQkRRaUFZMDlFR1RVaUJDV2tVcElTZkdQUjVBQXdCZlppRzJ6N0F5YzF5ZUtUeGlkMzl4Qk53ZkhyNE8wTEE0OGVQRlR2aFlyRjFyNHR5QW96OW4yTUNxRXVCdHAvNkdEUjBvQVlmRy9SNndKRXhIWVpIZmh5Z3N2N2ZFV0NPajRiWW1zUDVBK3BMNE1rVGZBbk1sRDRGK3IzYm9iS3ZUeVRBMlAvdzdQTitBZ3EyUVc4cGlxTUNwVEJ3ZW5vS3ZYMEFIR2tHdFAyWUFQdlRFV0E3UVVUQXVkbjcvTnh0T0c0NndXTm1EdHBCRWtCek43ckJFdkFGSHArWVRCL3E5N3FQQU40Z0hGcWdCaTh1THNDN3FQQ0E2bWc0MUcvK0VyQnlQd0VYRGRvTnhSaE94K001alBFelF1Z1MwaHQrYjEvWTNnRW5ZTUFJQU9JQkUyOS9oSUR1Y0U4dG1Nc05PZ0s0QjFSSEZ1NFVDUmxNSHp2MHh6Y2FqY2ZkWFdEczJoOFRBckJDa29EVUpZRExtejZ3N2lwM0JGUzB2ZTV3VFJ3QW42a2VNQTlJM1FZYmZTWjBES2J5dCs3T1hqR0kxaWRQY2ZOeUF5ZkFNbENyemFHcXBoWXJ4SG9jTEhSSlZ5Y25mR1VjYnRUK2pJeU1qSXc5eDdObjhmSlN6RzBUbUZ0TzhyWlQrWFQzUzN1Yit0S0piYkxkNWRpVFZwNTAremFoeWVIU3NsSi9ZUHJVMGZ1YXpyWk8yQ1o5Mi9aQ0NWWGxHUmlaS1BKeVBQUnh5SUZXZVhMUUJYSkJLaXEvM2RpdkVBTjZad00yMDBRam03RUpCWmVXbS9QUldWQ2JZSzdzN3UybDRYYUN6K2x6Z09mTWZoTW9uWHI3VFd6ZVpiOThkYmdJekJUOFViOGVZWVVxZlo0clZKL01EYklEZ1BxVHVsSi94dm50V0F0aklpc3Fud3hPa0d6MG4wNzdGQVJvWTc5R2RBNkhQRTRyT3kxOTZOaU1XSFRabFNTQXBjT2dYcHkvZkhWMmpvYU5LdTNmZnNBblJjQmY0Sy82TmNJRzZ0SXhrM0h5b1hQakFTcWZVZ1hiWU41UHpwTDJuamtSOVFNamVEVFZIRFRDZ1J1eE9lZ2pvTzBGdkt6UC90L2dtVmRJMjQrRzdOSWU4Slg2V3YzZER5bGRNQSs0WUI1d3dUeWd0ZCtkd1JxYVRxckxiMWw3M3pUU041MkNOcG5IdVFPWVBzRGJseWJneGZrWGgvb1Z0citOMURFQkpkaFJKeWQvQmQvcTF6K2NiTnJEMTdpVkt5YWpjbnY5YXJoT2tSUGdzcnV1RDZEbU5Qd3BETnJMdzJDb1RnSG5pNHlBTHIwTDI5K3RpS0FFSVBuODY4ZWp4Ly84cnBXUDNPRU9sNU9uOU93cGNRbTBNaGFmUC9leThmMXV2RE5JZ0dMUUc4ejRZTzk5RU5nZzk1ZXR3djR1WUpZWThmVUdIWUg2ajZmc2NIRlpNZnRsQWw5aSs5WEw3M1gzTi9uK1pTdE96ZlZmUnZZWGhyYmRLT3BFZ1ZRVGcvd3NEdUREM2t3T2ZRTk1USjV5Ky9sdFVEV0x1bnl4blJGNDZJcWxCekdNWTRYN2luZ2dSRUZpb0l5TWpJeU1IV0NJQjZaTktBY1hzZW8zdkxUUVRrVkU3MzQ4ZGx3SkpTejArd0xmbWk4QmhacWZ3M0Q0d3cvd0hWTG5FZDUvZmdZdlhzRFozTWxzdllVYmJuRGpEWjNNTjNUSkc0K2J4akFhRGw4VEJyaTlxeEV3MWNjYW8yd1ROQU1MSG8yZitzanJYd2IvOXFIb1lxZ1BNQlhKVFZmT3BtclpIMjN5NnV2bzBMSFN5WTZmSEd3S2ZISmxBdU1Gdk9iakRZcklxeEJnUWkyMGg3SGQvbllWTG1ubytlYU5VbS9lZUgyR0N1b3BudG5oQkpBbEkyQUhvOUNDaDFJMVF4VWRBYnFxR1k5QkJMd3ljM1c0d1lWaHZZOEE0Qm9JYzFsNU03dm5QV3BoWlc5L1NlczNuMzd5OWEwdUdxRndGUVpzUVFiZDM4NkRvZ3BnRWsrZHp5bnNBWk1KWHE4K25zOU5ldWtKMFBZck5BVEdHZWZKUWxoa0xvN0RUWHIreTNiTmlPc0R2clhUei9DMnExRFhaSDg0aVJOd3JQODhOait1MkRqWUVFNlJCeEQ5S25qMTZ1alZIQzY3QTc0MjJvMDJSd0QzZ0IrdDdFYmxXdnU5Z2VPRnhTbmQzUk9tVCtuSnlRa2hvUGxzeFZPTmMvM1RFZEJvcytqdEErWnpjd0hnVHZEMWNEamFZQ2NJdEE4dzlpODhBOGIrbXFTamM2UHZxZDk5OFFndUVRUG1RTWVvMjNPRE44NitwMC9ibjFidUJrVDYrb0JoTlovUFlZNFpBSFliM1BSZDRMa1ptUFg2OE5SdE1abjRBU3ZkQStxZjBqTUE1TVA5ZWVnMjhOdWc5UWlMbmo1QTMzVTFNQUVTNnhIQVVOcHovOXpGQVlFMWdxUURNVDNHNnhJOXB3ZHcvYUlnS29IQ1MxWUdsUm5TcTl5Q2pkWGpnTjNqK04yN1l5Uk9IeG11TkFlTktQcFl1WEl5SXlNall5ME04ZXJvczU5TUYvUFQyYzYwMlQ3ZUE3enZoSjlkci92ekRqWGFMcDRZYzUrMHdsbHp4ekh2M2dkbU1NTTcvQ2NRektnVkJxWVRtRm4rWittS204SjdrMEE1Ri9qZ0NmalExV0JoUXlpT3FEMGxZdXFCYitBeXpNdzlIYTJHM202YzhxUXgrQWxxbkljZVFwK1NiNmk5VXlRV2JocjU0K0FqblowVnpXMlRBTjBEbUJUNlBXbWM2akRCRTJQSzJ1K25GNDNkeVA3UTB0MXBPY1gyZmRSdkgwbUYyUTRKcU4zNXJuSGpWSWVhWGZJQVZ5VXV3L2FIQ0NpSnk5aUY1bDE2MjF6d2VJOEtaclBaOWlKZGI3RFhKM1VTME9TcnRaMTBpbXQ3d0hZN1Flc0F6VU16MW9aM25vQjNxRkovSDE4ajk3Rll1dzhRRE40b2VLZjMwb3N2Y1NXMkV4TG8rVmNidUF1by9zVUltOGZNRzl4b2NPM0VhMTlKOWdGWWl2bkhKMktueWZvdlpsZ1czdjZ5U3gzMmFiUWlJeU1qSXlQamhsRkRUTHhwd0lnRk1uVHA2QTNnNElES05ZK3N0a3dBTUFvSUFiYXN4QlhxVVduZVNBV1RNanQ1MGxUcVQyOXJGanZYb2hqc0RObTJZUFhERmxJQ21ySk9aM3Q2dEhtOEFpRUFsMHNDZUxJSW9ySVJ0K2NGYmV3L1FSc29BWGI0bzFYU2ZveXd6bTBGVE1Bb1lCTnZMeUZ1OHY4SHBMQnREMWlLZ0MxN3dIYjdBSTZkOXdGYnZndUFJR1RIZDRFOXdHN2pnSXlNakl5TSs0MzRjMlIzSGVWL0ZmeDZqdFp1NmlqbDhoNTlUNjU1amhSK3JkSHpET1A2YmVBQkNoZWI4TzgvV0ZYZU95emdmNW9BaFZZbkt4UDdDd2FBZjFhZkp1OGJTcmhTNnRkYVhlR25yUmVuT3FPbHo5ZDZRd1luQS8zVExkK0dFN3FlM2NoQTVZRjVEZlkwdkszYWRmT1gvZ3lOcDJCVzI1TUhkeEFCOXF2UmlpUDMvWHBRUUZHWURVNCtNaS8vL1h1bVhHOHBqdmFVQU9zQkdsZjRqSnQrWVlFemVFekFkdzA2RjE5UjNqdU03RDF3aXRhODZHUjBDS2ZESGdMdVhDYzRCcmk2dk1MZGZqTWM0Vk5TVU5zZG9kbzJ4dS8xK1hsL0s1K2F6OGpJeU1oWUcvejVnSlRNRjFHdEtxL2EzcnB5Q3Z6NWdKVE1sOUd0S3EvYTNycHlDbWZRNFd3Wm1TK2tYRlZldGIxMTVTVDQ4d0VmL0FHY2ZHMWl3K3RXYnBiUzJ2SjNuUXhjVnIzbEgzejVoOTcyRlVUTHpZcE9WazdsNWhEK2VZY1l3RGNBbmV3T290clo0T3RyUER1Y3FpL0xSWDAvUlI0cXg3Tm40VThnK3FqZmZ2dU42R2YrbkM4NXZ3YXVIamFZeXVicXZXWUtZNFZFZlNVTWl0ZG5CQ1QxVWU2M1I1NDM5bStPZ0NuNkRyb0FBYUhQVlF4S3RoL3drSmdIbUc4Ym1RTXNUMEQ2RWpEZnZoVlJLTzN5d09RVWdSQTdubUwxdWF3Wm1IZjFrK0RQQndRNk5kY0orazZNZDFMQTVmNU9OZGhKOHZaNUowdkxIVDk5c3JrR09qbUpiZC9HMXIyTnJpcW5zZTFBWnQxQWFsVTVqVzJIc3V1RzBxdktHUmtaR1JrWkdSRzBnY09OeVhzUDl2OEQwL0lkSkFEaUJOaVhsMzMyN1dSR2dPTC85SEMvMFh3bElVUmtSaEM0dHo2Wi9mdTdmVWYyZ0h2ZkI5ejN1MEJHUmtaR1JrYkdwbEhjbmtnZ3VRb1NxdFVYdWhicy93UHRNd3FWMEhVSkF2ajV2azMyYjhJRHVMMjN5bjdxQVhaNXUzMmhiUlg3ZDNvODJEZjFGWlh2Ymg5UU9maHl4bGRyLyszeGdYVTlvS212c0h5cjdGL1hBMjY5L2V2ZUJYcnN2N045UUFMZS90dmpBMGtQV0FYR2J2ZWJrYkhuK0QvSjVuTWNIengxVUFBQUFBQkpSVTVFcmtKZ2dnPT0pICFpbXBvcnRhbnQgOw0KfQ0KDQoubG9hZC1kaWFsb2cgLnVpLWhlbHBlci1jbGVhcmZpeCB7DQogICAgYmFja2dyb3VuZCA6ICNmOWY5ZjkgIWltcG9ydGFudCA7DQp9DQoNCi5sb2FkLWRpYWxvZyAuZmctYnV0dG9uc2V0IHsNCiAgICB3aWR0aCA6IDEwMHB4Ow0KfQ0KDQoubG9hZC1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZSB7DQogICAgY29sb3IgOiAjZjlmOWY5Ow0KfQ0KDQoubG9hZC1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhciB7DQogICAgbWFyZ2luLXRvcCA6IC02cHg7DQp9DQovKiBdXT4gKi8NCjwvc3R5bGU+DQoNCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLyogPCFbQ0RBVEFbICovDQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ09wZW4gU2Fucyc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnT3BlbiBTYW5zIEl0YWxpYycpLCBsb2NhbCgnT3BlblNhbnMtSXRhbGljJyksIHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3Mvb3BlbnNhbnMvdjE1L21lbTZZYUdzMTI2TWlacEJBLVVGVUswWmRjZy50dGYpIGZvcm1hdCgndHJ1ZXR5cGUnKTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ09wZW4gU2Fucyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnT3BlbiBTYW5zIExpZ2h0JyksIGxvY2FsKCdPcGVuU2Fucy1MaWdodCcpLCB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL29wZW5zYW5zL3YxNS9tZW01WWFHczEyNk1pWnBCQS1VTl9yOE9VdWhzLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdPcGVuIFNhbnMgUmVndWxhcicpLCBsb2NhbCgnT3BlblNhbnMtUmVndWxhcicpLCB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL29wZW5zYW5zL3YxNS9tZW04WWFHczEyNk1pWnBCQS1VRlZaMGUudHRmKSBmb3JtYXQoJ3RydWV0eXBlJyk7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNjAwOwogIHNyYzogbG9jYWwoJ09wZW4gU2FucyBTZW1pQm9sZCcpLCBsb2NhbCgnT3BlblNhbnMtU2VtaUJvbGQnKSwgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9vcGVuc2Fucy92MTUvbWVtNVlhR3MxMjZNaVpwQkEtVU5pcmtPVXVocy50dGYpIGZvcm1hdCgndHJ1ZXR5cGUnKTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ09wZW4gU2Fucyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnT3BlbiBTYW5zIEJvbGQnKSwgbG9jYWwoJ09wZW5TYW5zLUJvbGQnKSwgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9vcGVuc2Fucy92MTUvbWVtNVlhR3MxMjZNaVpwQkEtVU43cmdPVXVocy50dGYpIGZvcm1hdCgndHJ1ZXR5cGUnKTsKfQoNCi8qIF1dPiAqLw0KPC9zdHlsZT4NCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8qIDwhW0NEQVRBWyAqLw0KLyohIGpRdWVyeSB2MS4xMS4xIHwgKGMpIDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8NCiFmdW5jdGlvbiAoYSwgYikgeyAib2JqZWN0IiA9PSB0eXBlb2YgbW9kdWxlICYmICJvYmplY3QiID09IHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA/IG1vZHVsZS5leHBvcnRzID0gYS5kb2N1bWVudCA/IGIoYSwgITApIDogZnVuY3Rpb24gKGEpIHsgaWYgKCFhLmRvY3VtZW50KSB0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTsgcmV0dXJuIGIoYSkgfSA6IGIoYSkgfSgidW5kZWZpbmVkIiAhPSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24gKGEsIGIpIHsNCiAgICB2YXIgYyA9IFtdLCBkID0gYy5zbGljZSwgZSA9IGMuY29uY2F0LCBmID0gYy5wdXNoLCBnID0gYy5pbmRleE9mLCBoID0ge30sIGkgPSBoLnRvU3RyaW5nLCBqID0gaC5oYXNPd25Qcm9wZXJ0eSwgayA9IHt9LCBsID0gIjEuMTEuMSIsIG0gPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gbmV3IG0uZm4uaW5pdChhLCBiKSB9LCBuID0gL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCBvID0gL14tbXMtLywgcCA9IC8tKFtcZGEtel0pL2dpLCBxID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudG9VcHBlckNhc2UoKSB9OyBtLmZuID0gbS5wcm90b3R5cGUgPSB7IGpxdWVyeTogbCwgY29uc3RydWN0b3I6IG0sIHNlbGVjdG9yOiAiIiwgbGVuZ3RoOiAwLCB0b0FycmF5OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkLmNhbGwodGhpcykgfSwgZ2V0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbnVsbCAhPSBhID8gMCA+IGEgPyB0aGlzW2EgKyB0aGlzLmxlbmd0aF0gOiB0aGlzW2FdIDogZC5jYWxsKHRoaXMpIH0sIHB1c2hTdGFjazogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBtLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSwgYSk7IHJldHVybiBiLnByZXZPYmplY3QgPSB0aGlzLCBiLmNvbnRleHQgPSB0aGlzLmNvbnRleHQsIGIgfSwgZWFjaDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIG0uZWFjaCh0aGlzLCBhLCBiKSB9LCBtYXA6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLnB1c2hTdGFjayhtLm1hcCh0aGlzLCBmdW5jdGlvbiAoYiwgYykgeyByZXR1cm4gYS5jYWxsKGIsIGMsIGIpIH0pKSB9LCBzbGljZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB9LCBmaXJzdDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lcSgwKSB9LCBsYXN0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVxKC0xKSB9LCBlcTogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSB0aGlzLmxlbmd0aCwgYyA9ICthICsgKDAgPiBhID8gYiA6IDApOyByZXR1cm4gdGhpcy5wdXNoU3RhY2soYyA+PSAwICYmIGIgPiBjID8gW3RoaXNbY11dIDogW10pIH0sIGVuZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCkgfSwgcHVzaDogZiwgc29ydDogYy5zb3J0LCBzcGxpY2U6IGMuc3BsaWNlIH0sIG0uZXh0ZW5kID0gbS5mbi5leHRlbmQgPSBmdW5jdGlvbiAoKSB7IHZhciBhLCBiLCBjLCBkLCBlLCBmLCBnID0gYXJndW1lbnRzWzBdIHx8IHt9LCBoID0gMSwgaSA9IGFyZ3VtZW50cy5sZW5ndGgsIGogPSAhMTsgZm9yICgiYm9vbGVhbiIgPT0gdHlwZW9mIGcgJiYgKGogPSBnLCBnID0gYXJndW1lbnRzW2hdIHx8IHt9LCBoKyspLCAib2JqZWN0IiA9PSB0eXBlb2YgZyB8fCBtLmlzRnVuY3Rpb24oZykgfHwgKGcgPSB7fSksIGggPT09IGkgJiYgKGcgPSB0aGlzLCBoLS0pIDsgaSA+IGg7IGgrKykgaWYgKG51bGwgIT0gKGUgPSBhcmd1bWVudHNbaF0pKSBmb3IgKGQgaW4gZSkgYSA9IGdbZF0sIGMgPSBlW2RdLCBnICE9PSBjICYmIChqICYmIGMgJiYgKG0uaXNQbGFpbk9iamVjdChjKSB8fCAoYiA9IG0uaXNBcnJheShjKSkpID8gKGIgPyAoYiA9ICExLCBmID0gYSAmJiBtLmlzQXJyYXkoYSkgPyBhIDogW10pIDogZiA9IGEgJiYgbS5pc1BsYWluT2JqZWN0KGEpID8gYSA6IHt9LCBnW2RdID0gbS5leHRlbmQoaiwgZiwgYykpIDogdm9pZCAwICE9PSBjICYmIChnW2RdID0gYykpOyByZXR1cm4gZyB9LCBtLmV4dGVuZCh7IGV4cGFuZG86ICJqUXVlcnkiICsgKGwgKyBNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCAiIiksIGlzUmVhZHk6ICEwLCBlcnJvcjogZnVuY3Rpb24gKGEpIHsgdGhyb3cgbmV3IEVycm9yKGEpIH0sIG5vb3A6IGZ1bmN0aW9uICgpIHsgfSwgaXNGdW5jdGlvbjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuICJmdW5jdGlvbiIgPT09IG0udHlwZShhKSB9LCBpc0FycmF5OiBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhKSB7IHJldHVybiAiYXJyYXkiID09PSBtLnR5cGUoYSkgfSwgaXNXaW5kb3c6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBudWxsICE9IGEgJiYgYSA9PSBhLndpbmRvdyB9LCBpc051bWVyaWM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAhbS5pc0FycmF5KGEpICYmIGEgLSBwYXJzZUZsb2F0KGEpID49IDAgfSwgaXNFbXB0eU9iamVjdDogZnVuY3Rpb24gKGEpIHsgdmFyIGI7IGZvciAoYiBpbiBhKSByZXR1cm4gITE7IHJldHVybiAhMCB9LCBpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiAoYSkgeyB2YXIgYjsgaWYgKCFhIHx8ICJvYmplY3QiICE9PSBtLnR5cGUoYSkgfHwgYS5ub2RlVHlwZSB8fCBtLmlzV2luZG93KGEpKSByZXR1cm4gITE7IHRyeSB7IGlmIChhLmNvbnN0cnVjdG9yICYmICFqLmNhbGwoYSwgImNvbnN0cnVjdG9yIikgJiYgIWouY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgImlzUHJvdG90eXBlT2YiKSkgcmV0dXJuICExIH0gY2F0Y2ggKGMpIHsgcmV0dXJuICExIH0gaWYgKGsub3duTGFzdCkgZm9yIChiIGluIGEpIHJldHVybiBqLmNhbGwoYSwgYik7IGZvciAoYiBpbiBhKTsgcmV0dXJuIHZvaWQgMCA9PT0gYiB8fCBqLmNhbGwoYSwgYikgfSwgdHlwZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG51bGwgPT0gYSA/IGEgKyAiIiA6ICJvYmplY3QiID09IHR5cGVvZiBhIHx8ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGEgPyBoW2kuY2FsbChhKV0gfHwgIm9iamVjdCIgOiB0eXBlb2YgYSB9LCBnbG9iYWxFdmFsOiBmdW5jdGlvbiAoYikgeyBiICYmIG0udHJpbShiKSAmJiAoYS5leGVjU2NyaXB0IHx8IGZ1bmN0aW9uIChiKSB7IGEuZXZhbC5jYWxsKGEsIGIpIH0pKGIpIH0sIGNhbWVsQ2FzZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEucmVwbGFjZShvLCAibXMtIikucmVwbGFjZShwLCBxKSB9LCBub2RlTmFtZTogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEubm9kZU5hbWUgJiYgYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBiLnRvTG93ZXJDYXNlKCkgfSwgZWFjaDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUgPSAwLCBmID0gYS5sZW5ndGgsIGcgPSByKGEpOyBpZiAoYykgeyBpZiAoZykgeyBmb3IgKDsgZiA+IGU7IGUrKykgaWYgKGQgPSBiLmFwcGx5KGFbZV0sIGMpLCBkID09PSAhMSkgYnJlYWsgfSBlbHNlIGZvciAoZSBpbiBhKSBpZiAoZCA9IGIuYXBwbHkoYVtlXSwgYyksIGQgPT09ICExKSBicmVhayB9IGVsc2UgaWYgKGcpIHsgZm9yICg7IGYgPiBlOyBlKyspIGlmIChkID0gYi5jYWxsKGFbZV0sIGUsIGFbZV0pLCBkID09PSAhMSkgYnJlYWsgfSBlbHNlIGZvciAoZSBpbiBhKSBpZiAoZCA9IGIuY2FsbChhW2VdLCBlLCBhW2VdKSwgZCA9PT0gITEpIGJyZWFrOyByZXR1cm4gYSB9LCB0cmltOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbnVsbCA9PSBhID8gIiIgOiAoYSArICIiKS5yZXBsYWNlKG4sICIiKSB9LCBtYWtlQXJyYXk6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gYiB8fCBbXTsgcmV0dXJuIG51bGwgIT0gYSAmJiAocihPYmplY3QoYSkpID8gbS5tZXJnZShjLCAic3RyaW5nIiA9PSB0eXBlb2YgYSA/IFthXSA6IGEpIDogZi5jYWxsKGMsIGEpKSwgYyB9LCBpbkFycmF5OiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgaWYgKGIpIHsgaWYgKGcpIHJldHVybiBnLmNhbGwoYiwgYSwgYyk7IGZvciAoZCA9IGIubGVuZ3RoLCBjID0gYyA/IDAgPiBjID8gTWF0aC5tYXgoMCwgZCArIGMpIDogYyA6IDA7IGQgPiBjOyBjKyspIGlmIChjIGluIGIgJiYgYltjXSA9PT0gYSkgcmV0dXJuIGMgfSByZXR1cm4gLTEgfSwgbWVyZ2U6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gK2IubGVuZ3RoLCBkID0gMCwgZSA9IGEubGVuZ3RoOyB3aGlsZSAoYyA+IGQpIGFbZSsrXSA9IGJbZCsrXTsgaWYgKGMgIT09IGMpIHdoaWxlICh2b2lkIDAgIT09IGJbZF0pIGFbZSsrXSA9IGJbZCsrXTsgcmV0dXJuIGEubGVuZ3RoID0gZSwgYSB9LCBncmVwOiBmdW5jdGlvbiAoYSwgYiwgYykgeyBmb3IgKHZhciBkLCBlID0gW10sIGYgPSAwLCBnID0gYS5sZW5ndGgsIGggPSAhYzsgZyA+IGY7IGYrKykgZCA9ICFiKGFbZl0sIGYpLCBkICE9PSBoICYmIGUucHVzaChhW2ZdKTsgcmV0dXJuIGUgfSwgbWFwOiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCwgZiA9IDAsIGcgPSBhLmxlbmd0aCwgaCA9IHIoYSksIGkgPSBbXTsgaWYgKGgpIGZvciAoOyBnID4gZjsgZisrKSBkID0gYihhW2ZdLCBmLCBjKSwgbnVsbCAhPSBkICYmIGkucHVzaChkKTsgZWxzZSBmb3IgKGYgaW4gYSkgZCA9IGIoYVtmXSwgZiwgYyksIG51bGwgIT0gZCAmJiBpLnB1c2goZCk7IHJldHVybiBlLmFwcGx5KFtdLCBpKSB9LCBndWlkOiAxLCBwcm94eTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGUsIGY7IHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgYiAmJiAoZiA9IGFbYl0sIGIgPSBhLCBhID0gZiksIG0uaXNGdW5jdGlvbihhKSA/IChjID0gZC5jYWxsKGFyZ3VtZW50cywgMiksIGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBhLmFwcGx5KGIgfHwgdGhpcywgYy5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKSB9LCBlLmd1aWQgPSBhLmd1aWQgPSBhLmd1aWQgfHwgbS5ndWlkKyssIGUpIDogdm9pZCAwIH0sIG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gK25ldyBEYXRlIH0sIHN1cHBvcnQ6IGsgfSksIG0uZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSwgZnVuY3Rpb24gKGEsIGIpIHsgaFsiW29iamVjdCAiICsgYiArICJdIl0gPSBiLnRvTG93ZXJDYXNlKCkgfSk7IGZ1bmN0aW9uIHIoYSkgeyB2YXIgYiA9IGEubGVuZ3RoLCBjID0gbS50eXBlKGEpOyByZXR1cm4gImZ1bmN0aW9uIiA9PT0gYyB8fCBtLmlzV2luZG93KGEpID8gITEgOiAxID09PSBhLm5vZGVUeXBlICYmIGIgPyAhMCA6ICJhcnJheSIgPT09IGMgfHwgMCA9PT0gYiB8fCAibnVtYmVyIiA9PSB0eXBlb2YgYiAmJiBiID4gMCAmJiBiIC0gMSBpbiBhIH0gdmFyIHMgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCwgbSwgbiwgbywgcCwgcSwgciwgcywgdCwgdSA9ICJzaXp6bGUiICsgLW5ldyBEYXRlLCB2ID0gYS5kb2N1bWVudCwgdyA9IDAsIHggPSAwLCB5ID0gZ2IoKSwgeiA9IGdiKCksIEEgPSBnYigpLCBCID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgPT09IGIgJiYgKGwgPSAhMCksIDAgfSwgQyA9ICJ1bmRlZmluZWQiLCBEID0gMSA8PCAzMSwgRSA9IHt9Lmhhc093blByb3BlcnR5LCBGID0gW10sIEcgPSBGLnBvcCwgSCA9IEYucHVzaCwgSSA9IEYucHVzaCwgSiA9IEYuc2xpY2UsIEsgPSBGLmluZGV4T2YgfHwgZnVuY3Rpb24gKGEpIHsgZm9yICh2YXIgYiA9IDAsIGMgPSB0aGlzLmxlbmd0aDsgYyA+IGI7IGIrKykgaWYgKHRoaXNbYl0gPT09IGEpIHJldHVybiBiOyByZXR1cm4gLTEgfSwgTCA9ICJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsIE0gPSAiW1xceDIwXFx0XFxyXFxuXFxmXSIsIE4gPSAiKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLCBPID0gTi5yZXBsYWNlKCJ3IiwgIncjIiksIFAgPSAiXFxbIiArIE0gKyAiKigiICsgTiArICIpKD86IiArIE0gKyAiKihbKl4kfCF+XT89KSIgKyBNICsgIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIiArIE8gKyAiKSl8KSIgKyBNICsgIipcXF0iLCBRID0gIjooIiArIE4gKyAiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIgKyBQICsgIikqKXwuKilcXCl8KSIsIFIgPSBuZXcgUmVnRXhwKCJeIiArIE0gKyAiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIiArIE0gKyAiKyQiLCAiZyIpLCBTID0gbmV3IFJlZ0V4cCgiXiIgKyBNICsgIiosIiArIE0gKyAiKiIpLCBUID0gbmV3IFJlZ0V4cCgiXiIgKyBNICsgIiooWz4rfl18IiArIE0gKyAiKSIgKyBNICsgIioiKSwgVSA9IG5ldyBSZWdFeHAoIj0iICsgTSArICIqKFteXFxdJ1wiXSo/KSIgKyBNICsgIipcXF0iLCAiZyIpLCBWID0gbmV3IFJlZ0V4cChRKSwgVyA9IG5ldyBSZWdFeHAoIl4iICsgTyArICIkIiksIFggPSB7IElEOiBuZXcgUmVnRXhwKCJeIygiICsgTiArICIpIiksIENMQVNTOiBuZXcgUmVnRXhwKCJeXFwuKCIgKyBOICsgIikiKSwgVEFHOiBuZXcgUmVnRXhwKCJeKCIgKyBOLnJlcGxhY2UoInciLCAidyoiKSArICIpIiksIEFUVFI6IG5ldyBSZWdFeHAoIl4iICsgUCksIFBTRVVETzogbmV3IFJlZ0V4cCgiXiIgKyBRKSwgQ0hJTEQ6IG5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIgKyBNICsgIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiICsgTSArICIqKD86KFsrLV18KSIgKyBNICsgIiooXFxkKyl8KSkiICsgTSArICIqXFwpfCkiLCAiaSIpLCBib29sOiBuZXcgUmVnRXhwKCJeKD86IiArIEwgKyAiKSQiLCAiaSIpLCBuZWVkc0NvbnRleHQ6IG5ldyBSZWdFeHAoIl4iICsgTSArICIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiICsgTSArICIqKCg/Oi1cXGQpP1xcZCopIiArIE0gKyAiKlxcKXwpKD89W14tXXwkKSIsICJpIikgfSwgWSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksIFogPSAvXmhcZCQvaSwgJCA9IC9eW157XStce1xzKlxbbmF0aXZlIFx3LywgXyA9IC9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sIGFiID0gL1srfl0vLCBiYiA9IC8nfFxcL2csIGNiID0gbmV3IFJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IiArIE0gKyAiP3woIiArIE0gKyAiKXwuKSIsICJpZyIpLCBkYiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gIjB4IiArIGIgLSA2NTUzNjsgcmV0dXJuIGQgIT09IGQgfHwgYyA/IGIgOiAwID4gZCA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZCArIDY1NTM2KSA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZCA+PiAxMCB8IDU1Mjk2LCAxMDIzICYgZCB8IDU2MzIwKSB9OyB0cnkgeyBJLmFwcGx5KEYgPSBKLmNhbGwodi5jaGlsZE5vZGVzKSwgdi5jaGlsZE5vZGVzKSwgRlt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZSB9IGNhdGNoIChlYikgeyBJID0geyBhcHBseTogRi5sZW5ndGggPyBmdW5jdGlvbiAoYSwgYikgeyBILmFwcGx5KGEsIEouY2FsbChiKSkgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gYS5sZW5ndGgsIGQgPSAwOyB3aGlsZSAoYVtjKytdID0gYltkKytdKTsgYS5sZW5ndGggPSBjIC0gMSB9IH0gfSBmdW5jdGlvbiBmYihhLCBiLCBkLCBlKSB7IHZhciBmLCBoLCBqLCBrLCBsLCBvLCByLCBzLCB3LCB4OyBpZiAoKGIgPyBiLm93bmVyRG9jdW1lbnQgfHwgYiA6IHYpICE9PSBuICYmIG0oYiksIGIgPSBiIHx8IG4sIGQgPSBkIHx8IFtdLCAhYSB8fCAic3RyaW5nIiAhPSB0eXBlb2YgYSkgcmV0dXJuIGQ7IGlmICgxICE9PSAoayA9IGIubm9kZVR5cGUpICYmIDkgIT09IGspIHJldHVybiBbXTsgaWYgKHAgJiYgIWUpIHsgaWYgKGYgPSBfLmV4ZWMoYSkpIGlmIChqID0gZlsxXSkgeyBpZiAoOSA9PT0gaykgeyBpZiAoaCA9IGIuZ2V0RWxlbWVudEJ5SWQoaiksICFoIHx8ICFoLnBhcmVudE5vZGUpIHJldHVybiBkOyBpZiAoaC5pZCA9PT0gaikgcmV0dXJuIGQucHVzaChoKSwgZCB9IGVsc2UgaWYgKGIub3duZXJEb2N1bWVudCAmJiAoaCA9IGIub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChqKSkgJiYgdChiLCBoKSAmJiBoLmlkID09PSBqKSByZXR1cm4gZC5wdXNoKGgpLCBkIH0gZWxzZSB7IGlmIChmWzJdKSByZXR1cm4gSS5hcHBseShkLCBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSwgZDsgaWYgKChqID0gZlszXSkgJiYgYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgcmV0dXJuIEkuYXBwbHkoZCwgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGopKSwgZCB9IGlmIChjLnFzYSAmJiAoIXEgfHwgIXEudGVzdChhKSkpIHsgaWYgKHMgPSByID0gdSwgdyA9IGIsIHggPSA5ID09PSBrICYmIGEsIDEgPT09IGsgJiYgIm9iamVjdCIgIT09IGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgeyBvID0gZyhhKSwgKHIgPSBiLmdldEF0dHJpYnV0ZSgiaWQiKSkgPyBzID0gci5yZXBsYWNlKGJiLCAiXFwkJiIpIDogYi5zZXRBdHRyaWJ1dGUoImlkIiwgcyksIHMgPSAiW2lkPSciICsgcyArICInXSAiLCBsID0gby5sZW5ndGg7IHdoaWxlIChsLS0pIG9bbF0gPSBzICsgcWIob1tsXSk7IHcgPSBhYi50ZXN0KGEpICYmIG9iKGIucGFyZW50Tm9kZSkgfHwgYiwgeCA9IG8uam9pbigiLCIpIH0gaWYgKHgpIHRyeSB7IHJldHVybiBJLmFwcGx5KGQsIHcucXVlcnlTZWxlY3RvckFsbCh4KSksIGQgfSBjYXRjaCAoeSkgeyB9IGZpbmFsbHkgeyByIHx8IGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpIH0gfSB9IHJldHVybiBpKGEucmVwbGFjZShSLCAiJDEiKSwgYiwgZCwgZSkgfSBmdW5jdGlvbiBnYigpIHsgdmFyIGEgPSBbXTsgZnVuY3Rpb24gYihjLCBlKSB7IHJldHVybiBhLnB1c2goYyArICIgIikgPiBkLmNhY2hlTGVuZ3RoICYmIGRlbGV0ZSBiW2Euc2hpZnQoKV0sIGJbYyArICIgIl0gPSBlIH0gcmV0dXJuIGIgfSBmdW5jdGlvbiBoYihhKSB7IHJldHVybiBhW3VdID0gITAsIGEgfSBmdW5jdGlvbiBpYihhKSB7IHZhciBiID0gbi5jcmVhdGVFbGVtZW50KCJkaXYiKTsgdHJ5IHsgcmV0dXJuICEhYShiKSB9IGNhdGNoIChjKSB7IHJldHVybiAhMSB9IGZpbmFsbHkgeyBiLnBhcmVudE5vZGUgJiYgYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLCBiID0gbnVsbCB9IH0gZnVuY3Rpb24gamIoYSwgYikgeyB2YXIgYyA9IGEuc3BsaXQoInwiKSwgZSA9IGEubGVuZ3RoOyB3aGlsZSAoZS0tKSBkLmF0dHJIYW5kbGVbY1tlXV0gPSBiIH0gZnVuY3Rpb24ga2IoYSwgYikgeyB2YXIgYyA9IGIgJiYgYSwgZCA9IGMgJiYgMSA9PT0gYS5ub2RlVHlwZSAmJiAxID09PSBiLm5vZGVUeXBlICYmICh+Yi5zb3VyY2VJbmRleCB8fCBEKSAtICh+YS5zb3VyY2VJbmRleCB8fCBEKTsgaWYgKGQpIHJldHVybiBkOyBpZiAoYykgd2hpbGUgKGMgPSBjLm5leHRTaWJsaW5nKSBpZiAoYyA9PT0gYikgcmV0dXJuIC0xOyByZXR1cm4gYSA/IDEgOiAtMSB9IGZ1bmN0aW9uIGxiKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gImlucHV0IiA9PT0gYyAmJiBiLnR5cGUgPT09IGEgfSB9IGZ1bmN0aW9uIG1iKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gKCJpbnB1dCIgPT09IGMgfHwgImJ1dHRvbiIgPT09IGMpICYmIGIudHlwZSA9PT0gYSB9IH0gZnVuY3Rpb24gbmIoYSkgeyByZXR1cm4gaGIoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIgPSArYiwgaGIoZnVuY3Rpb24gKGMsIGQpIHsgdmFyIGUsIGYgPSBhKFtdLCBjLmxlbmd0aCwgYiksIGcgPSBmLmxlbmd0aDsgd2hpbGUgKGctLSkgY1tlID0gZltnXV0gJiYgKGNbZV0gPSAhKGRbZV0gPSBjW2VdKSkgfSkgfSkgfSBmdW5jdGlvbiBvYihhKSB7IHJldHVybiBhICYmIHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBDICYmIGEgfSBjID0gZmIuc3VwcG9ydCA9IHt9LCBmID0gZmIuaXNYTUwgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEgJiYgKGEub3duZXJEb2N1bWVudCB8fCBhKS5kb2N1bWVudEVsZW1lbnQ7IHJldHVybiBiID8gIkhUTUwiICE9PSBiLm5vZGVOYW1lIDogITEgfSwgbSA9IGZiLnNldERvY3VtZW50ID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGUgPSBhID8gYS5vd25lckRvY3VtZW50IHx8IGEgOiB2LCBnID0gZS5kZWZhdWx0VmlldzsgcmV0dXJuIGUgIT09IG4gJiYgOSA9PT0gZS5ub2RlVHlwZSAmJiBlLmRvY3VtZW50RWxlbWVudCA/IChuID0gZSwgbyA9IGUuZG9jdW1lbnRFbGVtZW50LCBwID0gIWYoZSksIGcgJiYgZyAhPT0gZy50b3AgJiYgKGcuYWRkRXZlbnRMaXN0ZW5lciA/IGcuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgZnVuY3Rpb24gKCkgeyBtKCkgfSwgITEpIDogZy5hdHRhY2hFdmVudCAmJiBnLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsIGZ1bmN0aW9uICgpIHsgbSgpIH0pKSwgYy5hdHRyaWJ1dGVzID0gaWIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuY2xhc3NOYW1lID0gImkiLCAhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpIH0pLCBjLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gaWIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuYXBwZW5kQ2hpbGQoZS5jcmVhdGVDb21tZW50KCIiKSksICFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoIH0pLCBjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSAkLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSAmJiBpYihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0nYSc+PFwvZGl2PjxkaXYgY2xhc3M9J2EgaSc+PFwvZGl2PiIsIGEuZmlyc3RDaGlsZC5jbGFzc05hbWUgPSAiaSIsIDIgPT09IGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aCB9KSwgYy5nZXRCeUlkID0gaWIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG8uYXBwZW5kQ2hpbGQoYSkuaWQgPSB1LCAhZS5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZS5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGggfSksIGMuZ2V0QnlJZCA/IChkLmZpbmQuSUQgPSBmdW5jdGlvbiAoYSwgYikgeyBpZiAodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQgIT09IEMgJiYgcCkgeyB2YXIgYyA9IGIuZ2V0RWxlbWVudEJ5SWQoYSk7IHJldHVybiBjICYmIGMucGFyZW50Tm9kZSA/IFtjXSA6IFtdIH0gfSwgZC5maWx0ZXIuSUQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEucmVwbGFjZShjYiwgZGIpOyByZXR1cm4gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJpZCIpID09PSBiIH0gfSkgOiAoZGVsZXRlIGQuZmluZC5JRCwgZC5maWx0ZXIuSUQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEucmVwbGFjZShjYiwgZGIpOyByZXR1cm4gZnVuY3Rpb24gKGEpIHsgdmFyIGMgPSB0eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBDICYmIGEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsgcmV0dXJuIGMgJiYgYy52YWx1ZSA9PT0gYiB9IH0pLCBkLmZpbmQuVEFHID0gYy5nZXRFbGVtZW50c0J5VGFnTmFtZSA/IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gQyA/IGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSkgOiB2b2lkIDAgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkID0gW10sIGUgPSAwLCBmID0gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTsgaWYgKCIqIiA9PT0gYSkgeyB3aGlsZSAoYyA9IGZbZSsrXSkgMSA9PT0gYy5ub2RlVHlwZSAmJiBkLnB1c2goYyk7IHJldHVybiBkIH0gcmV0dXJuIGYgfSwgZC5maW5kLkNMQVNTID0gYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBDICYmIHAgPyBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSkgOiB2b2lkIDAgfSwgciA9IFtdLCBxID0gW10sIChjLnFzYSA9ICQudGVzdChlLnF1ZXJ5U2VsZWN0b3JBbGwpKSAmJiAoaWIoZnVuY3Rpb24gKGEpIHsgYS5pbm5lckhUTUwgPSAiPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjxcL29wdGlvbj48XC9zZWxlY3Q+IiwgYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NsaXBePScnXSIpLmxlbmd0aCAmJiBxLnB1c2goIlsqXiRdPSIgKyBNICsgIiooPzonJ3xcIlwiKSIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGggfHwgcS5wdXNoKCJcXFsiICsgTSArICIqKD86dmFsdWV8IiArIEwgKyAiKSIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RoIHx8IHEucHVzaCgiOmNoZWNrZWQiKSB9KSwgaWIoZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBlLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7IGIuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImhpZGRlbiIpLCBhLmFwcGVuZENoaWxkKGIpLnNldEF0dHJpYnV0ZSgibmFtZSIsICJEIiksIGEucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGggJiYgcS5wdXNoKCJuYW1lIiArIE0gKyAiKlsqXiR8IX5dPz0iKSwgYS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCB8fCBxLnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxlZCIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSwgcS5wdXNoKCIsLio6IikgfSkpLCAoYy5tYXRjaGVzU2VsZWN0b3IgPSAkLnRlc3QocyA9IG8ubWF0Y2hlcyB8fCBvLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBvLm1vek1hdGNoZXNTZWxlY3RvciB8fCBvLm9NYXRjaGVzU2VsZWN0b3IgfHwgby5tc01hdGNoZXNTZWxlY3RvcikpICYmIGliKGZ1bmN0aW9uIChhKSB7IGMuZGlzY29ubmVjdGVkTWF0Y2ggPSBzLmNhbGwoYSwgImRpdiIpLCBzLmNhbGwoYSwgIltzIT0nJ106eCIpLCByLnB1c2goIiE9IiwgUSkgfSksIHEgPSBxLmxlbmd0aCAmJiBuZXcgUmVnRXhwKHEuam9pbigifCIpKSwgciA9IHIubGVuZ3RoICYmIG5ldyBSZWdFeHAoci5qb2luKCJ8IikpLCBiID0gJC50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9zaXRpb24pLCB0ID0gYiB8fCAkLnRlc3Qoby5jb250YWlucykgPyBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IDkgPT09IGEubm9kZVR5cGUgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsIGQgPSBiICYmIGIucGFyZW50Tm9kZTsgcmV0dXJuIGEgPT09IGQgfHwgISghZCB8fCAxICE9PSBkLm5vZGVUeXBlIHx8ICEoYy5jb250YWlucyA/IGMuY29udGFpbnMoZCkgOiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIDE2ICYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSkpIH0gOiBmdW5jdGlvbiAoYSwgYikgeyBpZiAoYikgd2hpbGUgKGIgPSBiLnBhcmVudE5vZGUpIGlmIChiID09PSBhKSByZXR1cm4gITA7IHJldHVybiAhMSB9LCBCID0gYiA/IGZ1bmN0aW9uIChhLCBiKSB7IGlmIChhID09PSBiKSByZXR1cm4gbCA9ICEwLCAwOyB2YXIgZCA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247IHJldHVybiBkID8gZCA6IChkID0gKGEub3duZXJEb2N1bWVudCB8fCBhKSA9PT0gKGIub3duZXJEb2N1bWVudCB8fCBiKSA/IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgOiAxLCAxICYgZCB8fCAhYy5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKSA9PT0gZCA/IGEgPT09IGUgfHwgYS5vd25lckRvY3VtZW50ID09PSB2ICYmIHQodiwgYSkgPyAtMSA6IGIgPT09IGUgfHwgYi5vd25lckRvY3VtZW50ID09PSB2ICYmIHQodiwgYikgPyAxIDogayA/IEsuY2FsbChrLCBhKSAtIEsuY2FsbChrLCBiKSA6IDAgOiA0ICYgZCA/IC0xIDogMSkgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IGlmIChhID09PSBiKSByZXR1cm4gbCA9ICEwLCAwOyB2YXIgYywgZCA9IDAsIGYgPSBhLnBhcmVudE5vZGUsIGcgPSBiLnBhcmVudE5vZGUsIGggPSBbYV0sIGkgPSBbYl07IGlmICghZiB8fCAhZykgcmV0dXJuIGEgPT09IGUgPyAtMSA6IGIgPT09IGUgPyAxIDogZiA/IC0xIDogZyA/IDEgOiBrID8gSy5jYWxsKGssIGEpIC0gSy5jYWxsKGssIGIpIDogMDsgaWYgKGYgPT09IGcpIHJldHVybiBrYihhLCBiKTsgYyA9IGE7IHdoaWxlIChjID0gYy5wYXJlbnROb2RlKSBoLnVuc2hpZnQoYyk7IGMgPSBiOyB3aGlsZSAoYyA9IGMucGFyZW50Tm9kZSkgaS51bnNoaWZ0KGMpOyB3aGlsZSAoaFtkXSA9PT0gaVtkXSkgZCsrOyByZXR1cm4gZCA/IGtiKGhbZF0sIGlbZF0pIDogaFtkXSA9PT0gdiA/IC0xIDogaVtkXSA9PT0gdiA/IDEgOiAwIH0sIGUpIDogbiB9LCBmYi5tYXRjaGVzID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGZiKGEsIG51bGwsIG51bGwsIGIpIH0sIGZiLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uIChhLCBiKSB7IGlmICgoYS5vd25lckRvY3VtZW50IHx8IGEpICE9PSBuICYmIG0oYSksIGIgPSBiLnJlcGxhY2UoVSwgIj0nJDEnXSIpLCAhKCFjLm1hdGNoZXNTZWxlY3RvciB8fCAhcCB8fCByICYmIHIudGVzdChiKSB8fCBxICYmIHEudGVzdChiKSkpIHRyeSB7IHZhciBkID0gcy5jYWxsKGEsIGIpOyBpZiAoZCB8fCBjLmRpc2Nvbm5lY3RlZE1hdGNoIHx8IGEuZG9jdW1lbnQgJiYgMTEgIT09IGEuZG9jdW1lbnQubm9kZVR5cGUpIHJldHVybiBkIH0gY2F0Y2ggKGUpIHsgfSByZXR1cm4gZmIoYiwgbiwgbnVsbCwgW2FdKS5sZW5ndGggPiAwIH0sIGZiLmNvbnRhaW5zID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIChhLm93bmVyRG9jdW1lbnQgfHwgYSkgIT09IG4gJiYgbShhKSwgdChhLCBiKSB9LCBmYi5hdHRyID0gZnVuY3Rpb24gKGEsIGIpIHsgKGEub3duZXJEb2N1bWVudCB8fCBhKSAhPT0gbiAmJiBtKGEpOyB2YXIgZSA9IGQuYXR0ckhhbmRsZVtiLnRvTG93ZXJDYXNlKCldLCBmID0gZSAmJiBFLmNhbGwoZC5hdHRySGFuZGxlLCBiLnRvTG93ZXJDYXNlKCkpID8gZShhLCBiLCAhcCkgOiB2b2lkIDA7IHJldHVybiB2b2lkIDAgIT09IGYgPyBmIDogYy5hdHRyaWJ1dGVzIHx8ICFwID8gYS5nZXRBdHRyaWJ1dGUoYikgOiAoZiA9IGEuZ2V0QXR0cmlidXRlTm9kZShiKSkgJiYgZi5zcGVjaWZpZWQgPyBmLnZhbHVlIDogbnVsbCB9LCBmYi5lcnJvciA9IGZ1bmN0aW9uIChhKSB7IHRocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIGEpIH0sIGZiLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgZCA9IFtdLCBlID0gMCwgZiA9IDA7IGlmIChsID0gIWMuZGV0ZWN0RHVwbGljYXRlcywgayA9ICFjLnNvcnRTdGFibGUgJiYgYS5zbGljZSgwKSwgYS5zb3J0KEIpLCBsKSB7IHdoaWxlIChiID0gYVtmKytdKSBiID09PSBhW2ZdICYmIChlID0gZC5wdXNoKGYpKTsgd2hpbGUgKGUtLSkgYS5zcGxpY2UoZFtlXSwgMSkgfSByZXR1cm4gayA9IG51bGwsIGEgfSwgZSA9IGZiLmdldFRleHQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9ICIiLCBkID0gMCwgZiA9IGEubm9kZVR5cGU7IGlmIChmKSB7IGlmICgxID09PSBmIHx8IDkgPT09IGYgfHwgMTEgPT09IGYpIHsgaWYgKCJzdHJpbmciID09IHR5cGVvZiBhLnRleHRDb250ZW50KSByZXR1cm4gYS50ZXh0Q29udGVudDsgZm9yIChhID0gYS5maXJzdENoaWxkOyBhOyBhID0gYS5uZXh0U2libGluZykgYyArPSBlKGEpIH0gZWxzZSBpZiAoMyA9PT0gZiB8fCA0ID09PSBmKSByZXR1cm4gYS5ub2RlVmFsdWUgfSBlbHNlIHdoaWxlIChiID0gYVtkKytdKSBjICs9IGUoYik7IHJldHVybiBjIH0sIGQgPSBmYi5zZWxlY3RvcnMgPSB7IGNhY2hlTGVuZ3RoOiA1MCwgY3JlYXRlUHNldWRvOiBoYiwgbWF0Y2g6IFgsIGF0dHJIYW5kbGU6IHt9LCBmaW5kOiB7fSwgcmVsYXRpdmU6IHsgIj4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBmaXJzdDogITAgfSwgIiAiOiB7IGRpcjogInBhcmVudE5vZGUiIH0sICIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDogITAgfSwgIn4iOiB7IGRpcjogInByZXZpb3VzU2libGluZyIgfSB9LCBwcmVGaWx0ZXI6IHsgQVRUUjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGFbMV0gPSBhWzFdLnJlcGxhY2UoY2IsIGRiKSwgYVszXSA9IChhWzNdIHx8IGFbNF0gfHwgYVs1XSB8fCAiIikucmVwbGFjZShjYiwgZGIpLCAifj0iID09PSBhWzJdICYmIChhWzNdID0gIiAiICsgYVszXSArICIgIiksIGEuc2xpY2UoMCwgNCkgfSwgQ0hJTEQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhWzFdID0gYVsxXS50b0xvd2VyQ2FzZSgpLCAibnRoIiA9PT0gYVsxXS5zbGljZSgwLCAzKSA/IChhWzNdIHx8IGZiLmVycm9yKGFbMF0pLCBhWzRdID0gKyhhWzRdID8gYVs1XSArIChhWzZdIHx8IDEpIDogMiAqICgiZXZlbiIgPT09IGFbM10gfHwgIm9kZCIgPT09IGFbM10pKSwgYVs1XSA9ICsoYVs3XSArIGFbOF0gfHwgIm9kZCIgPT09IGFbM10pKSA6IGFbM10gJiYgZmIuZXJyb3IoYVswXSksIGEgfSwgUFNFVURPOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9ICFhWzZdICYmIGFbMl07IHJldHVybiBYLkNISUxELnRlc3QoYVswXSkgPyBudWxsIDogKGFbM10gPyBhWzJdID0gYVs0XSB8fCBhWzVdIHx8ICIiIDogYyAmJiBWLnRlc3QoYykgJiYgKGIgPSBnKGMsICEwKSkgJiYgKGIgPSBjLmluZGV4T2YoIikiLCBjLmxlbmd0aCAtIGIpIC0gYy5sZW5ndGgpICYmIChhWzBdID0gYVswXS5zbGljZSgwLCBiKSwgYVsyXSA9IGMuc2xpY2UoMCwgYikpLCBhLnNsaWNlKDAsIDMpKSB9IH0sIGZpbHRlcjogeyBUQUc6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5yZXBsYWNlKGNiLCBkYikudG9Mb3dlckNhc2UoKTsgcmV0dXJuICIqIiA9PT0gYSA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEwIH0gOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5ub2RlTmFtZSAmJiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGIgfSB9LCBDTEFTUzogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSB5W2EgKyAiICJdOyByZXR1cm4gYiB8fCAoYiA9IG5ldyBSZWdFeHAoIihefCIgKyBNICsgIikiICsgYSArICIoIiArIE0gKyAifCQpIikpICYmIHkoYSwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGIudGVzdCgic3RyaW5nIiA9PSB0eXBlb2YgYS5jbGFzc05hbWUgJiYgYS5jbGFzc05hbWUgfHwgdHlwZW9mIGEuZ2V0QXR0cmlidXRlICE9PSBDICYmIGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpIHx8ICIiKSB9KSB9LCBBVFRSOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZnVuY3Rpb24gKGQpIHsgdmFyIGUgPSBmYi5hdHRyKGQsIGEpOyByZXR1cm4gbnVsbCA9PSBlID8gIiE9IiA9PT0gYiA6IGIgPyAoZSArPSAiIiwgIj0iID09PSBiID8gZSA9PT0gYyA6ICIhPSIgPT09IGIgPyBlICE9PSBjIDogIl49IiA9PT0gYiA/IGMgJiYgMCA9PT0gZS5pbmRleE9mKGMpIDogIio9IiA9PT0gYiA/IGMgJiYgZS5pbmRleE9mKGMpID4gLTEgOiAiJD0iID09PSBiID8gYyAmJiBlLnNsaWNlKC1jLmxlbmd0aCkgPT09IGMgOiAifj0iID09PSBiID8gKCIgIiArIGUgKyAiICIpLmluZGV4T2YoYykgPiAtMSA6ICJ8PSIgPT09IGIgPyBlID09PSBjIHx8IGUuc2xpY2UoMCwgYy5sZW5ndGggKyAxKSA9PT0gYyArICItIiA6ICExKSA6ICEwIH0gfSwgQ0hJTEQ6IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlKSB7IHZhciBmID0gIm50aCIgIT09IGEuc2xpY2UoMCwgMyksIGcgPSAibGFzdCIgIT09IGEuc2xpY2UoLTQpLCBoID0gIm9mLXR5cGUiID09PSBiOyByZXR1cm4gMSA9PT0gZCAmJiAwID09PSBlID8gZnVuY3Rpb24gKGEpIHsgcmV0dXJuICEhYS5wYXJlbnROb2RlIH0gOiBmdW5jdGlvbiAoYiwgYywgaSkgeyB2YXIgaiwgaywgbCwgbSwgbiwgbywgcCA9IGYgIT09IGcgPyAibmV4dFNpYmxpbmciIDogInByZXZpb3VzU2libGluZyIsIHEgPSBiLnBhcmVudE5vZGUsIHIgPSBoICYmIGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgcyA9ICFpICYmICFoOyBpZiAocSkgeyBpZiAoZikgeyB3aGlsZSAocCkgeyBsID0gYjsgd2hpbGUgKGwgPSBsW3BdKSBpZiAoaCA/IGwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gciA6IDEgPT09IGwubm9kZVR5cGUpIHJldHVybiAhMTsgbyA9IHAgPSAib25seSIgPT09IGEgJiYgIW8gJiYgIm5leHRTaWJsaW5nIiB9IHJldHVybiAhMCB9IGlmIChvID0gW2cgPyBxLmZpcnN0Q2hpbGQgOiBxLmxhc3RDaGlsZF0sIGcgJiYgcykgeyBrID0gcVt1XSB8fCAocVt1XSA9IHt9KSwgaiA9IGtbYV0gfHwgW10sIG4gPSBqWzBdID09PSB3ICYmIGpbMV0sIG0gPSBqWzBdID09PSB3ICYmIGpbMl0sIGwgPSBuICYmIHEuY2hpbGROb2Rlc1tuXTsgd2hpbGUgKGwgPSArK24gJiYgbCAmJiBsW3BdIHx8IChtID0gbiA9IDApIHx8IG8ucG9wKCkpIGlmICgxID09PSBsLm5vZGVUeXBlICYmICsrbSAmJiBsID09PSBiKSB7IGtbYV0gPSBbdywgbiwgbV07IGJyZWFrIH0gfSBlbHNlIGlmIChzICYmIChqID0gKGJbdV0gfHwgKGJbdV0gPSB7fSkpW2FdKSAmJiBqWzBdID09PSB3KSBtID0galsxXTsgZWxzZSB3aGlsZSAobCA9ICsrbiAmJiBsICYmIGxbcF0gfHwgKG0gPSBuID0gMCkgfHwgby5wb3AoKSkgaWYgKChoID8gbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSByIDogMSA9PT0gbC5ub2RlVHlwZSkgJiYgKyttICYmIChzICYmICgobFt1XSB8fCAobFt1XSA9IHt9KSlbYV0gPSBbdywgbV0pLCBsID09PSBiKSkgYnJlYWs7IHJldHVybiBtIC09IGUsIG0gPT09IGQgfHwgbSAlIGQgPT09IDAgJiYgbSAvIGQgPj0gMCB9IH0gfSwgUFNFVURPOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZSA9IGQucHNldWRvc1thXSB8fCBkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXSB8fCBmYi5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgYSk7IHJldHVybiBlW3VdID8gZShiKSA6IGUubGVuZ3RoID4gMSA/IChjID0gW2EsIGEsICIiLCBiXSwgZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSkgPyBoYihmdW5jdGlvbiAoYSwgYykgeyB2YXIgZCwgZiA9IGUoYSwgYiksIGcgPSBmLmxlbmd0aDsgd2hpbGUgKGctLSkgZCA9IEsuY2FsbChhLCBmW2ddKSwgYVtkXSA9ICEoY1tkXSA9IGZbZ10pIH0pIDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGUoYSwgMCwgYykgfSkgOiBlIH0gfSwgcHNldWRvczogeyBub3Q6IGhiKGZ1bmN0aW9uIChhKSB7IHZhciBiID0gW10sIGMgPSBbXSwgZCA9IGgoYS5yZXBsYWNlKFIsICIkMSIpKTsgcmV0dXJuIGRbdV0gPyBoYihmdW5jdGlvbiAoYSwgYiwgYywgZSkgeyB2YXIgZiwgZyA9IGQoYSwgbnVsbCwgZSwgW10pLCBoID0gYS5sZW5ndGg7IHdoaWxlIChoLS0pIChmID0gZ1toXSkgJiYgKGFbaF0gPSAhKGJbaF0gPSBmKSkgfSkgOiBmdW5jdGlvbiAoYSwgZSwgZikgeyByZXR1cm4gYlswXSA9IGEsIGQoYiwgbnVsbCwgZiwgYyksICFjLnBvcCgpIH0gfSksIGhhczogaGIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiKSB7IHJldHVybiBmYihhLCBiKS5sZW5ndGggPiAwIH0gfSksIGNvbnRhaW5zOiBoYihmdW5jdGlvbiAoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGIpIHsgcmV0dXJuIChiLnRleHRDb250ZW50IHx8IGIuaW5uZXJUZXh0IHx8IGUoYikpLmluZGV4T2YoYSkgPiAtMSB9IH0pLCBsYW5nOiBoYihmdW5jdGlvbiAoYSkgeyByZXR1cm4gVy50ZXN0KGEgfHwgIiIpIHx8IGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiICsgYSksIGEgPSBhLnJlcGxhY2UoY2IsIGRiKS50b0xvd2VyQ2FzZSgpLCBmdW5jdGlvbiAoYikgeyB2YXIgYzsgZG8gaWYgKGMgPSBwID8gYi5sYW5nIDogYi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIikgfHwgYi5nZXRBdHRyaWJ1dGUoImxhbmciKSkgcmV0dXJuIGMgPSBjLnRvTG93ZXJDYXNlKCksIGMgPT09IGEgfHwgMCA9PT0gYy5pbmRleE9mKGEgKyAiLSIpOyB3aGlsZSAoKGIgPSBiLnBhcmVudE5vZGUpICYmIDEgPT09IGIubm9kZVR5cGUpOyByZXR1cm4gITEgfSB9KSwgdGFyZ2V0OiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IGEubG9jYXRpb24gJiYgYS5sb2NhdGlvbi5oYXNoOyByZXR1cm4gYyAmJiBjLnNsaWNlKDEpID09PSBiLmlkIH0sIHJvb3Q6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID09PSBvIH0sIGZvY3VzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSA9PT0gbi5hY3RpdmVFbGVtZW50ICYmICghbi5oYXNGb2N1cyB8fCBuLmhhc0ZvY3VzKCkpICYmICEhKGEudHlwZSB8fCBhLmhyZWYgfHwgfmEudGFiSW5kZXgpIH0sIGVuYWJsZWQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmRpc2FibGVkID09PSAhMSB9LCBkaXNhYmxlZDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuZGlzYWJsZWQgPT09ICEwIH0sIGNoZWNrZWQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gImlucHV0IiA9PT0gYiAmJiAhIWEuY2hlY2tlZCB8fCAib3B0aW9uIiA9PT0gYiAmJiAhIWEuc2VsZWN0ZWQgfSwgc2VsZWN0ZWQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLnBhcmVudE5vZGUgJiYgYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsIGEuc2VsZWN0ZWQgPT09ICEwIH0sIGVtcHR5OiBmdW5jdGlvbiAoYSkgeyBmb3IgKGEgPSBhLmZpcnN0Q2hpbGQ7IGE7IGEgPSBhLm5leHRTaWJsaW5nKSBpZiAoYS5ub2RlVHlwZSA8IDYpIHJldHVybiAhMTsgcmV0dXJuICEwIH0sIHBhcmVudDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuICFkLnBzZXVkb3MuZW1wdHkoYSkgfSwgaGVhZGVyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpIH0sIGlucHV0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpIH0sIGJ1dHRvbjogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7IHJldHVybiAiaW5wdXQiID09PSBiICYmICJidXR0b24iID09PSBhLnR5cGUgfHwgImJ1dHRvbiIgPT09IGIgfSwgdGV4dDogZnVuY3Rpb24gKGEpIHsgdmFyIGI7IHJldHVybiAiaW5wdXQiID09PSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgInRleHQiID09PSBhLnR5cGUgJiYgKG51bGwgPT0gKGIgPSBhLmdldEF0dHJpYnV0ZSgidHlwZSIpKSB8fCAidGV4dCIgPT09IGIudG9Mb3dlckNhc2UoKSkgfSwgZmlyc3Q6IG5iKGZ1bmN0aW9uICgpIHsgcmV0dXJuIFswXSB9KSwgbGFzdDogbmIoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIFtiIC0gMV0gfSksIGVxOiBuYihmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gWzAgPiBjID8gYyArIGIgOiBjXSB9KSwgZXZlbjogbmIoZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYyA9IDA7IGIgPiBjOyBjICs9IDIpIGEucHVzaChjKTsgcmV0dXJuIGEgfSksIG9kZDogbmIoZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYyA9IDE7IGIgPiBjOyBjICs9IDIpIGEucHVzaChjKTsgcmV0dXJuIGEgfSksIGx0OiBuYihmdW5jdGlvbiAoYSwgYiwgYykgeyBmb3IgKHZhciBkID0gMCA+IGMgPyBjICsgYiA6IGM7IC0tZCA+PSAwOykgYS5wdXNoKGQpOyByZXR1cm4gYSB9KSwgZ3Q6IG5iKGZ1bmN0aW9uIChhLCBiLCBjKSB7IGZvciAodmFyIGQgPSAwID4gYyA/IGMgKyBiIDogYzsgKytkIDwgYjspIGEucHVzaChkKTsgcmV0dXJuIGEgfSkgfSB9LCBkLnBzZXVkb3MubnRoID0gZC5wc2V1ZG9zLmVxOyBmb3IgKGIgaW4geyByYWRpbzogITAsIGNoZWNrYm94OiAhMCwgZmlsZTogITAsIHBhc3N3b3JkOiAhMCwgaW1hZ2U6ICEwIH0pIGQucHNldWRvc1tiXSA9IGxiKGIpOyBmb3IgKGIgaW4geyBzdWJtaXQ6ICEwLCByZXNldDogITAgfSkgZC5wc2V1ZG9zW2JdID0gbWIoYik7IGZ1bmN0aW9uIHBiKCkgeyB9IHBiLnByb3RvdHlwZSA9IGQuZmlsdGVycyA9IGQucHNldWRvcywgZC5zZXRGaWx0ZXJzID0gbmV3IHBiLCBnID0gZmIudG9rZW5pemUgPSBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZSwgZiwgZywgaCwgaSwgaiwgayA9IHpbYSArICIgIl07IGlmIChrKSByZXR1cm4gYiA/IDAgOiBrLnNsaWNlKDApOyBoID0gYSwgaSA9IFtdLCBqID0gZC5wcmVGaWx0ZXI7IHdoaWxlIChoKSB7ICghYyB8fCAoZSA9IFMuZXhlYyhoKSkpICYmIChlICYmIChoID0gaC5zbGljZShlWzBdLmxlbmd0aCkgfHwgaCksIGkucHVzaChmID0gW10pKSwgYyA9ICExLCAoZSA9IFQuZXhlYyhoKSkgJiYgKGMgPSBlLnNoaWZ0KCksIGYucHVzaCh7IHZhbHVlOiBjLCB0eXBlOiBlWzBdLnJlcGxhY2UoUiwgIiAiKSB9KSwgaCA9IGguc2xpY2UoYy5sZW5ndGgpKTsgZm9yIChnIGluIGQuZmlsdGVyKSAhKGUgPSBYW2ddLmV4ZWMoaCkpIHx8IGpbZ10gJiYgIShlID0galtnXShlKSkgfHwgKGMgPSBlLnNoaWZ0KCksIGYucHVzaCh7IHZhbHVlOiBjLCB0eXBlOiBnLCBtYXRjaGVzOiBlIH0pLCBoID0gaC5zbGljZShjLmxlbmd0aCkpOyBpZiAoIWMpIGJyZWFrIH0gcmV0dXJuIGIgPyBoLmxlbmd0aCA6IGggPyBmYi5lcnJvcihhKSA6IHooYSwgaSkuc2xpY2UoMCkgfTsgZnVuY3Rpb24gcWIoYSkgeyBmb3IgKHZhciBiID0gMCwgYyA9IGEubGVuZ3RoLCBkID0gIiI7IGMgPiBiOyBiKyspIGQgKz0gYVtiXS52YWx1ZTsgcmV0dXJuIGQgfSBmdW5jdGlvbiByYihhLCBiLCBjKSB7IHZhciBkID0gYi5kaXIsIGUgPSBjICYmICJwYXJlbnROb2RlIiA9PT0gZCwgZiA9IHgrKzsgcmV0dXJuIGIuZmlyc3QgPyBmdW5jdGlvbiAoYiwgYywgZikgeyB3aGlsZSAoYiA9IGJbZF0pIGlmICgxID09PSBiLm5vZGVUeXBlIHx8IGUpIHJldHVybiBhKGIsIGMsIGYpIH0gOiBmdW5jdGlvbiAoYiwgYywgZykgeyB2YXIgaCwgaSwgaiA9IFt3LCBmXTsgaWYgKGcpIHsgd2hpbGUgKGIgPSBiW2RdKSBpZiAoKDEgPT09IGIubm9kZVR5cGUgfHwgZSkgJiYgYShiLCBjLCBnKSkgcmV0dXJuICEwIH0gZWxzZSB3aGlsZSAoYiA9IGJbZF0pIGlmICgxID09PSBiLm5vZGVUeXBlIHx8IGUpIHsgaWYgKGkgPSBiW3VdIHx8IChiW3VdID0ge30pLCAoaCA9IGlbZF0pICYmIGhbMF0gPT09IHcgJiYgaFsxXSA9PT0gZikgcmV0dXJuIGpbMl0gPSBoWzJdOyBpZiAoaVtkXSA9IGosIGpbMl0gPSBhKGIsIGMsIGcpKSByZXR1cm4gITAgfSB9IH0gZnVuY3Rpb24gc2IoYSkgeyByZXR1cm4gYS5sZW5ndGggPiAxID8gZnVuY3Rpb24gKGIsIGMsIGQpIHsgdmFyIGUgPSBhLmxlbmd0aDsgd2hpbGUgKGUtLSkgaWYgKCFhW2VdKGIsIGMsIGQpKSByZXR1cm4gITE7IHJldHVybiAhMCB9IDogYVswXSB9IGZ1bmN0aW9uIHRiKGEsIGIsIGMpIHsgZm9yICh2YXIgZCA9IDAsIGUgPSBiLmxlbmd0aDsgZSA+IGQ7IGQrKykgZmIoYSwgYltkXSwgYyk7IHJldHVybiBjIH0gZnVuY3Rpb24gdWIoYSwgYiwgYywgZCwgZSkgeyBmb3IgKHZhciBmLCBnID0gW10sIGggPSAwLCBpID0gYS5sZW5ndGgsIGogPSBudWxsICE9IGI7IGkgPiBoOyBoKyspIChmID0gYVtoXSkgJiYgKCFjIHx8IGMoZiwgZCwgZSkpICYmIChnLnB1c2goZiksIGogJiYgYi5wdXNoKGgpKTsgcmV0dXJuIGcgfSBmdW5jdGlvbiB2YihhLCBiLCBjLCBkLCBlLCBmKSB7IHJldHVybiBkICYmICFkW3VdICYmIChkID0gdmIoZCkpLCBlICYmICFlW3VdICYmIChlID0gdmIoZSwgZikpLCBoYihmdW5jdGlvbiAoZiwgZywgaCwgaSkgeyB2YXIgaiwgaywgbCwgbSA9IFtdLCBuID0gW10sIG8gPSBnLmxlbmd0aCwgcCA9IGYgfHwgdGIoYiB8fCAiKiIsIGgubm9kZVR5cGUgPyBbaF0gOiBoLCBbXSksIHEgPSAhYSB8fCAhZiAmJiBiID8gcCA6IHViKHAsIG0sIGEsIGgsIGkpLCByID0gYyA/IGUgfHwgKGYgPyBhIDogbyB8fCBkKSA/IFtdIDogZyA6IHE7IGlmIChjICYmIGMocSwgciwgaCwgaSksIGQpIHsgaiA9IHViKHIsIG4pLCBkKGosIFtdLCBoLCBpKSwgayA9IGoubGVuZ3RoOyB3aGlsZSAoay0tKSAobCA9IGpba10pICYmIChyW25ba11dID0gIShxW25ba11dID0gbCkpIH0gaWYgKGYpIHsgaWYgKGUgfHwgYSkgeyBpZiAoZSkgeyBqID0gW10sIGsgPSByLmxlbmd0aDsgd2hpbGUgKGstLSkgKGwgPSByW2tdKSAmJiBqLnB1c2gocVtrXSA9IGwpOyBlKG51bGwsIHIgPSBbXSwgaiwgaSkgfSBrID0gci5sZW5ndGg7IHdoaWxlIChrLS0pIChsID0gcltrXSkgJiYgKGogPSBlID8gSy5jYWxsKGYsIGwpIDogbVtrXSkgPiAtMSAmJiAoZltqXSA9ICEoZ1tqXSA9IGwpKSB9IH0gZWxzZSByID0gdWIociA9PT0gZyA/IHIuc3BsaWNlKG8sIHIubGVuZ3RoKSA6IHIpLCBlID8gZShudWxsLCBnLCByLCBpKSA6IEkuYXBwbHkoZywgcikgfSkgfSBmdW5jdGlvbiB3YihhKSB7IGZvciAodmFyIGIsIGMsIGUsIGYgPSBhLmxlbmd0aCwgZyA9IGQucmVsYXRpdmVbYVswXS50eXBlXSwgaCA9IGcgfHwgZC5yZWxhdGl2ZVsiICJdLCBpID0gZyA/IDEgOiAwLCBrID0gcmIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPT09IGIgfSwgaCwgITApLCBsID0gcmIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIEsuY2FsbChiLCBhKSA+IC0xIH0sIGgsICEwKSwgbSA9IFtmdW5jdGlvbiAoYSwgYywgZCkgeyByZXR1cm4gIWcgJiYgKGQgfHwgYyAhPT0gaikgfHwgKChiID0gYykubm9kZVR5cGUgPyBrKGEsIGMsIGQpIDogbChhLCBjLCBkKSkgfV07IGYgPiBpOyBpKyspIGlmIChjID0gZC5yZWxhdGl2ZVthW2ldLnR5cGVdKSBtID0gW3JiKHNiKG0pLCBjKV07IGVsc2UgeyBpZiAoYyA9IGQuZmlsdGVyW2FbaV0udHlwZV0uYXBwbHkobnVsbCwgYVtpXS5tYXRjaGVzKSwgY1t1XSkgeyBmb3IgKGUgPSArK2k7IGYgPiBlOyBlKyspIGlmIChkLnJlbGF0aXZlW2FbZV0udHlwZV0pIGJyZWFrOyByZXR1cm4gdmIoaSA+IDEgJiYgc2IobSksIGkgPiAxICYmIHFiKGEuc2xpY2UoMCwgaSAtIDEpLmNvbmNhdCh7IHZhbHVlOiAiICIgPT09IGFbaSAtIDJdLnR5cGUgPyAiKiIgOiAiIiB9KSkucmVwbGFjZShSLCAiJDEiKSwgYywgZSA+IGkgJiYgd2IoYS5zbGljZShpLCBlKSksIGYgPiBlICYmIHdiKGEgPSBhLnNsaWNlKGUpKSwgZiA+IGUgJiYgcWIoYSkpIH0gbS5wdXNoKGMpIH0gcmV0dXJuIHNiKG0pIH0gZnVuY3Rpb24geGIoYSwgYikgeyB2YXIgYyA9IGIubGVuZ3RoID4gMCwgZSA9IGEubGVuZ3RoID4gMCwgZiA9IGZ1bmN0aW9uIChmLCBnLCBoLCBpLCBrKSB7IHZhciBsLCBtLCBvLCBwID0gMCwgcSA9ICIwIiwgciA9IGYgJiYgW10sIHMgPSBbXSwgdCA9IGosIHUgPSBmIHx8IGUgJiYgZC5maW5kLlRBRygiKiIsIGspLCB2ID0gdyArPSBudWxsID09IHQgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAuMSwgeCA9IHUubGVuZ3RoOyBmb3IgKGsgJiYgKGogPSBnICE9PSBuICYmIGcpIDsgcSAhPT0geCAmJiBudWxsICE9IChsID0gdVtxXSkgOyBxKyspIHsgaWYgKGUgJiYgbCkgeyBtID0gMDsgd2hpbGUgKG8gPSBhW20rK10pIGlmIChvKGwsIGcsIGgpKSB7IGkucHVzaChsKTsgYnJlYWsgfSBrICYmICh3ID0gdikgfSBjICYmICgobCA9ICFvICYmIGwpICYmIHAtLSwgZiAmJiByLnB1c2gobCkpIH0gaWYgKHAgKz0gcSwgYyAmJiBxICE9PSBwKSB7IG0gPSAwOyB3aGlsZSAobyA9IGJbbSsrXSkgbyhyLCBzLCBnLCBoKTsgaWYgKGYpIHsgaWYgKHAgPiAwKSB3aGlsZSAocS0tKSByW3FdIHx8IHNbcV0gfHwgKHNbcV0gPSBHLmNhbGwoaSkpOyBzID0gdWIocykgfSBJLmFwcGx5KGksIHMpLCBrICYmICFmICYmIHMubGVuZ3RoID4gMCAmJiBwICsgYi5sZW5ndGggPiAxICYmIGZiLnVuaXF1ZVNvcnQoaSkgfSByZXR1cm4gayAmJiAodyA9IHYsIGogPSB0KSwgciB9OyByZXR1cm4gYyA/IGhiKGYpIDogZiB9IHJldHVybiBoID0gZmIuY29tcGlsZSA9IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkID0gW10sIGUgPSBbXSwgZiA9IEFbYSArICIgIl07IGlmICghZikgeyBiIHx8IChiID0gZyhhKSksIGMgPSBiLmxlbmd0aDsgd2hpbGUgKGMtLSkgZiA9IHdiKGJbY10pLCBmW3VdID8gZC5wdXNoKGYpIDogZS5wdXNoKGYpOyBmID0gQShhLCB4YihlLCBkKSksIGYuc2VsZWN0b3IgPSBhIH0gcmV0dXJuIGYgfSwgaSA9IGZiLnNlbGVjdCA9IGZ1bmN0aW9uIChhLCBiLCBlLCBmKSB7IHZhciBpLCBqLCBrLCBsLCBtLCBuID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgYSAmJiBhLCBvID0gIWYgJiYgZyhhID0gbi5zZWxlY3RvciB8fCBhKTsgaWYgKGUgPSBlIHx8IFtdLCAxID09PSBvLmxlbmd0aCkgeyBpZiAoaiA9IG9bMF0gPSBvWzBdLnNsaWNlKDApLCBqLmxlbmd0aCA+IDIgJiYgIklEIiA9PT0gKGsgPSBqWzBdKS50eXBlICYmIGMuZ2V0QnlJZCAmJiA5ID09PSBiLm5vZGVUeXBlICYmIHAgJiYgZC5yZWxhdGl2ZVtqWzFdLnR5cGVdKSB7IGlmIChiID0gKGQuZmluZC5JRChrLm1hdGNoZXNbMF0ucmVwbGFjZShjYiwgZGIpLCBiKSB8fCBbXSlbMF0sICFiKSByZXR1cm4gZTsgbiAmJiAoYiA9IGIucGFyZW50Tm9kZSksIGEgPSBhLnNsaWNlKGouc2hpZnQoKS52YWx1ZS5sZW5ndGgpIH0gaSA9IFgubmVlZHNDb250ZXh0LnRlc3QoYSkgPyAwIDogai5sZW5ndGg7IHdoaWxlIChpLS0pIHsgaWYgKGsgPSBqW2ldLCBkLnJlbGF0aXZlW2wgPSBrLnR5cGVdKSBicmVhazsgaWYgKChtID0gZC5maW5kW2xdKSAmJiAoZiA9IG0oay5tYXRjaGVzWzBdLnJlcGxhY2UoY2IsIGRiKSwgYWIudGVzdChqWzBdLnR5cGUpICYmIG9iKGIucGFyZW50Tm9kZSkgfHwgYikpKSB7IGlmIChqLnNwbGljZShpLCAxKSwgYSA9IGYubGVuZ3RoICYmIHFiKGopLCAhYSkgcmV0dXJuIEkuYXBwbHkoZSwgZiksIGU7IGJyZWFrIH0gfSB9IHJldHVybiAobiB8fCBoKGEsIG8pKShmLCBiLCAhcCwgZSwgYWIudGVzdChhKSAmJiBvYihiLnBhcmVudE5vZGUpIHx8IGIpLCBlIH0sIGMuc29ydFN0YWJsZSA9IHUuc3BsaXQoIiIpLnNvcnQoQikuam9pbigiIikgPT09IHUsIGMuZGV0ZWN0RHVwbGljYXRlcyA9ICEhbCwgbSgpLCBjLnNvcnREZXRhY2hlZCA9IGliKGZ1bmN0aW9uIChhKSB7IHJldHVybiAxICYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSB9KSwgaWIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjxcL2E+IiwgIiMiID09PSBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikgfSkgfHwgamIoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLCBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gYyA/IHZvaWQgMCA6IGEuZ2V0QXR0cmlidXRlKGIsICJ0eXBlIiA9PT0gYi50b0xvd2VyQ2FzZSgpID8gMSA6IDIpIH0pLCBjLmF0dHJpYnV0ZXMgJiYgaWIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuaW5uZXJIVE1MID0gIjxpbnB1dC8+IiwgYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiIiksICIiID09PSBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpIH0pIHx8IGpiKCJ2YWx1ZSIsIGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBjIHx8ICJpbnB1dCIgIT09IGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA/IHZvaWQgMCA6IGEuZGVmYXVsdFZhbHVlIH0pLCBpYihmdW5jdGlvbiAoYSkgeyByZXR1cm4gbnVsbCA9PSBhLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSB9KSB8fCBqYihMLCBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgcmV0dXJuIGMgPyB2b2lkIDAgOiBhW2JdID09PSAhMCA/IGIudG9Mb3dlckNhc2UoKSA6IChkID0gYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSAmJiBkLnNwZWNpZmllZCA/IGQudmFsdWUgOiBudWxsIH0pLCBmYiB9KGEpOyBtLmZpbmQgPSBzLCBtLmV4cHIgPSBzLnNlbGVjdG9ycywgbS5leHByWyI6Il0gPSBtLmV4cHIucHNldWRvcywgbS51bmlxdWUgPSBzLnVuaXF1ZVNvcnQsIG0udGV4dCA9IHMuZ2V0VGV4dCwgbS5pc1hNTERvYyA9IHMuaXNYTUwsIG0uY29udGFpbnMgPSBzLmNvbnRhaW5zOyB2YXIgdCA9IG0uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsIHUgPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLCB2ID0gL14uW146I1xbXC4sXSokLzsgZnVuY3Rpb24gdyhhLCBiLCBjKSB7IGlmIChtLmlzRnVuY3Rpb24oYikpIHJldHVybiBtLmdyZXAoYSwgZnVuY3Rpb24gKGEsIGQpIHsgcmV0dXJuICEhYi5jYWxsKGEsIGQsIGEpICE9PSBjIH0pOyBpZiAoYi5ub2RlVHlwZSkgcmV0dXJuIG0uZ3JlcChhLCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSA9PT0gYiAhPT0gYyB9KTsgaWYgKCJzdHJpbmciID09IHR5cGVvZiBiKSB7IGlmICh2LnRlc3QoYikpIHJldHVybiBtLmZpbHRlcihiLCBhLCBjKTsgYiA9IG0uZmlsdGVyKGIsIGEpIH0gcmV0dXJuIG0uZ3JlcChhLCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbS5pbkFycmF5KGEsIGIpID49IDAgIT09IGMgfSkgfSBtLmZpbHRlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gYlswXTsgcmV0dXJuIGMgJiYgKGEgPSAiOm5vdCgiICsgYSArICIpIiksIDEgPT09IGIubGVuZ3RoICYmIDEgPT09IGQubm9kZVR5cGUgPyBtLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsIGEpID8gW2RdIDogW10gOiBtLmZpbmQubWF0Y2hlcyhhLCBtLmdyZXAoYiwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIDEgPT09IGEubm9kZVR5cGUgfSkpIH0sIG0uZm4uZXh0ZW5kKHsgZmluZDogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMgPSBbXSwgZCA9IHRoaXMsIGUgPSBkLmxlbmd0aDsgaWYgKCJzdHJpbmciICE9IHR5cGVvZiBhKSByZXR1cm4gdGhpcy5wdXNoU3RhY2sobShhKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyBmb3IgKGIgPSAwOyBlID4gYjsgYisrKSBpZiAobS5jb250YWlucyhkW2JdLCB0aGlzKSkgcmV0dXJuICEwIH0pKTsgZm9yIChiID0gMDsgZSA+IGI7IGIrKykgbS5maW5kKGEsIGRbYl0sIGMpOyByZXR1cm4gYyA9IHRoaXMucHVzaFN0YWNrKGUgPiAxID8gbS51bmlxdWUoYykgOiBjKSwgYy5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgPyB0aGlzLnNlbGVjdG9yICsgIiAiICsgYSA6IGEsIGMgfSwgZmlsdGVyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2sodyh0aGlzLCBhIHx8IFtdLCAhMSkpIH0sIG5vdDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHcodGhpcywgYSB8fCBbXSwgITApKSB9LCBpczogZnVuY3Rpb24gKGEpIHsgcmV0dXJuICEhdyh0aGlzLCAic3RyaW5nIiA9PSB0eXBlb2YgYSAmJiB0LnRlc3QoYSkgPyBtKGEpIDogYSB8fCBbXSwgITEpLmxlbmd0aCB9IH0pOyB2YXIgeCwgeSA9IGEuZG9jdW1lbnQsIHogPSAvXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLCBBID0gbS5mbi5pbml0ID0gZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQ7IGlmICghYSkgcmV0dXJuIHRoaXM7IGlmICgic3RyaW5nIiA9PSB0eXBlb2YgYSkgeyBpZiAoYyA9ICI8IiA9PT0gYS5jaGFyQXQoMCkgJiYgIj4iID09PSBhLmNoYXJBdChhLmxlbmd0aCAtIDEpICYmIGEubGVuZ3RoID49IDMgPyBbbnVsbCwgYSwgbnVsbF0gOiB6LmV4ZWMoYSksICFjIHx8ICFjWzFdICYmIGIpIHJldHVybiAhYiB8fCBiLmpxdWVyeSA/IChiIHx8IHgpLmZpbmQoYSkgOiB0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7IGlmIChjWzFdKSB7IGlmIChiID0gYiBpbnN0YW5jZW9mIG0gPyBiWzBdIDogYiwgbS5tZXJnZSh0aGlzLCBtLnBhcnNlSFRNTChjWzFdLCBiICYmIGIubm9kZVR5cGUgPyBiLm93bmVyRG9jdW1lbnQgfHwgYiA6IHksICEwKSksIHUudGVzdChjWzFdKSAmJiBtLmlzUGxhaW5PYmplY3QoYikpIGZvciAoYyBpbiBiKSBtLmlzRnVuY3Rpb24odGhpc1tjXSkgPyB0aGlzW2NdKGJbY10pIDogdGhpcy5hdHRyKGMsIGJbY10pOyByZXR1cm4gdGhpcyB9IGlmIChkID0geS5nZXRFbGVtZW50QnlJZChjWzJdKSwgZCAmJiBkLnBhcmVudE5vZGUpIHsgaWYgKGQuaWQgIT09IGNbMl0pIHJldHVybiB4LmZpbmQoYSk7IHRoaXMubGVuZ3RoID0gMSwgdGhpc1swXSA9IGQgfSByZXR1cm4gdGhpcy5jb250ZXh0ID0geSwgdGhpcy5zZWxlY3RvciA9IGEsIHRoaXMgfSByZXR1cm4gYS5ub2RlVHlwZSA/ICh0aGlzLmNvbnRleHQgPSB0aGlzWzBdID0gYSwgdGhpcy5sZW5ndGggPSAxLCB0aGlzKSA6IG0uaXNGdW5jdGlvbihhKSA/ICJ1bmRlZmluZWQiICE9IHR5cGVvZiB4LnJlYWR5ID8geC5yZWFkeShhKSA6IGEobSkgOiAodm9pZCAwICE9PSBhLnNlbGVjdG9yICYmICh0aGlzLnNlbGVjdG9yID0gYS5zZWxlY3RvciwgdGhpcy5jb250ZXh0ID0gYS5jb250ZXh0KSwgbS5tYWtlQXJyYXkoYSwgdGhpcykpIH07IEEucHJvdG90eXBlID0gbS5mbiwgeCA9IG0oeSk7IHZhciBCID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sIEMgPSB7IGNoaWxkcmVuOiAhMCwgY29udGVudHM6ICEwLCBuZXh0OiAhMCwgcHJldjogITAgfTsgbS5leHRlbmQoeyBkaXI6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gW10sIGUgPSBhW2JdOyB3aGlsZSAoZSAmJiA5ICE9PSBlLm5vZGVUeXBlICYmICh2b2lkIDAgPT09IGMgfHwgMSAhPT0gZS5ub2RlVHlwZSB8fCAhbShlKS5pcyhjKSkpIDEgPT09IGUubm9kZVR5cGUgJiYgZC5wdXNoKGUpLCBlID0gZVtiXTsgcmV0dXJuIGQgfSwgc2libGluZzogZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYyA9IFtdOyBhOyBhID0gYS5uZXh0U2libGluZykgMSA9PT0gYS5ub2RlVHlwZSAmJiBhICE9PSBiICYmIGMucHVzaChhKTsgcmV0dXJuIGMgfSB9KSwgbS5mbi5leHRlbmQoeyBoYXM6IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gbShhLCB0aGlzKSwgZCA9IGMubGVuZ3RoOyByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKCkgeyBmb3IgKGIgPSAwOyBkID4gYjsgYisrKSBpZiAobS5jb250YWlucyh0aGlzLCBjW2JdKSkgcmV0dXJuICEwIH0pIH0sIGNsb3Nlc3Q6IGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGMsIGQgPSAwLCBlID0gdGhpcy5sZW5ndGgsIGYgPSBbXSwgZyA9IHQudGVzdChhKSB8fCAic3RyaW5nIiAhPSB0eXBlb2YgYSA/IG0oYSwgYiB8fCB0aGlzLmNvbnRleHQpIDogMDsgZSA+IGQ7IGQrKykgZm9yIChjID0gdGhpc1tkXTsgYyAmJiBjICE9PSBiOyBjID0gYy5wYXJlbnROb2RlKSBpZiAoYy5ub2RlVHlwZSA8IDExICYmIChnID8gZy5pbmRleChjKSA+IC0xIDogMSA9PT0gYy5ub2RlVHlwZSAmJiBtLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGMsIGEpKSkgeyBmLnB1c2goYyk7IGJyZWFrIH0gcmV0dXJuIHRoaXMucHVzaFN0YWNrKGYubGVuZ3RoID4gMSA/IG0udW5pcXVlKGYpIDogZikgfSwgaW5kZXg6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID8gInN0cmluZyIgPT0gdHlwZW9mIGEgPyBtLmluQXJyYXkodGhpc1swXSwgbShhKSkgOiBtLmluQXJyYXkoYS5qcXVlcnkgPyBhWzBdIDogYSwgdGhpcykgOiB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTEgfSwgYWRkOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2sobS51bmlxdWUobS5tZXJnZSh0aGlzLmdldCgpLCBtKGEsIGIpKSkpIH0sIGFkZEJhY2s6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLmFkZChudWxsID09IGEgPyB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKSB9IH0pOyBmdW5jdGlvbiBEKGEsIGIpIHsgZG8gYSA9IGFbYl07IHdoaWxlIChhICYmIDEgIT09IGEubm9kZVR5cGUpOyByZXR1cm4gYSB9IG0uZWFjaCh7IHBhcmVudDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnBhcmVudE5vZGU7IHJldHVybiBiICYmIDExICE9PSBiLm5vZGVUeXBlID8gYiA6IG51bGwgfSwgcGFyZW50czogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0uZGlyKGEsICJwYXJlbnROb2RlIikgfSwgcGFyZW50c1VudGlsOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gbS5kaXIoYSwgInBhcmVudE5vZGUiLCBjKSB9LCBuZXh0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gRChhLCAibmV4dFNpYmxpbmciKSB9LCBwcmV2OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gRChhLCAicHJldmlvdXNTaWJsaW5nIikgfSwgbmV4dEFsbDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0uZGlyKGEsICJuZXh0U2libGluZyIpIH0sIHByZXZBbGw6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBtLmRpcihhLCAicHJldmlvdXNTaWJsaW5nIikgfSwgbmV4dFVudGlsOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gbS5kaXIoYSwgIm5leHRTaWJsaW5nIiwgYykgfSwgcHJldlVudGlsOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gbS5kaXIoYSwgInByZXZpb3VzU2libGluZyIsIGMpIH0sIHNpYmxpbmdzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbS5zaWJsaW5nKChhLnBhcmVudE5vZGUgfHwge30pLmZpcnN0Q2hpbGQsIGEpIH0sIGNoaWxkcmVuOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbS5zaWJsaW5nKGEuZmlyc3RDaGlsZCkgfSwgY29udGVudHM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBtLm5vZGVOYW1lKGEsICJpZnJhbWUiKSA/IGEuY29udGVudERvY3VtZW50IHx8IGEuY29udGVudFdpbmRvdy5kb2N1bWVudCA6IG0ubWVyZ2UoW10sIGEuY2hpbGROb2RlcykgfSB9LCBmdW5jdGlvbiAoYSwgYikgeyBtLmZuW2FdID0gZnVuY3Rpb24gKGMsIGQpIHsgdmFyIGUgPSBtLm1hcCh0aGlzLCBiLCBjKTsgcmV0dXJuICJVbnRpbCIgIT09IGEuc2xpY2UoLTUpICYmIChkID0gYyksIGQgJiYgInN0cmluZyIgPT0gdHlwZW9mIGQgJiYgKGUgPSBtLmZpbHRlcihkLCBlKSksIHRoaXMubGVuZ3RoID4gMSAmJiAoQ1thXSB8fCAoZSA9IG0udW5pcXVlKGUpKSwgQi50ZXN0KGEpICYmIChlID0gZS5yZXZlcnNlKCkpKSwgdGhpcy5wdXNoU3RhY2soZSkgfSB9KTsgdmFyIEUgPSAvXFMrL2csIEYgPSB7fTsgZnVuY3Rpb24gRyhhKSB7IHZhciBiID0gRlthXSA9IHt9OyByZXR1cm4gbS5lYWNoKGEubWF0Y2goRSkgfHwgW10sIGZ1bmN0aW9uIChhLCBjKSB7IGJbY10gPSAhMCB9KSwgYiB9IG0uQ2FsbGJhY2tzID0gZnVuY3Rpb24gKGEpIHsgYSA9ICJzdHJpbmciID09IHR5cGVvZiBhID8gRlthXSB8fCBHKGEpIDogbS5leHRlbmQoe30sIGEpOyB2YXIgYiwgYywgZCwgZSwgZiwgZywgaCA9IFtdLCBpID0gIWEub25jZSAmJiBbXSwgaiA9IGZ1bmN0aW9uIChsKSB7IGZvciAoYyA9IGEubWVtb3J5ICYmIGwsIGQgPSAhMCwgZiA9IGcgfHwgMCwgZyA9IDAsIGUgPSBoLmxlbmd0aCwgYiA9ICEwOyBoICYmIGUgPiBmOyBmKyspIGlmIChoW2ZdLmFwcGx5KGxbMF0sIGxbMV0pID09PSAhMSAmJiBhLnN0b3BPbkZhbHNlKSB7IGMgPSAhMTsgYnJlYWsgfSBiID0gITEsIGggJiYgKGkgPyBpLmxlbmd0aCAmJiBqKGkuc2hpZnQoKSkgOiBjID8gaCA9IFtdIDogay5kaXNhYmxlKCkpIH0sIGsgPSB7IGFkZDogZnVuY3Rpb24gKCkgeyBpZiAoaCkgeyB2YXIgZCA9IGgubGVuZ3RoOyAhZnVuY3Rpb24gZihiKSB7IG0uZWFjaChiLCBmdW5jdGlvbiAoYiwgYykgeyB2YXIgZCA9IG0udHlwZShjKTsgImZ1bmN0aW9uIiA9PT0gZCA/IGEudW5pcXVlICYmIGsuaGFzKGMpIHx8IGgucHVzaChjKSA6IGMgJiYgYy5sZW5ndGggJiYgInN0cmluZyIgIT09IGQgJiYgZihjKSB9KSB9KGFyZ3VtZW50cyksIGIgPyBlID0gaC5sZW5ndGggOiBjICYmIChnID0gZCwgaihjKSkgfSByZXR1cm4gdGhpcyB9LCByZW1vdmU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGggJiYgbS5lYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKGEsIGMpIHsgdmFyIGQ7IHdoaWxlICgoZCA9IG0uaW5BcnJheShjLCBoLCBkKSkgPiAtMSkgaC5zcGxpY2UoZCwgMSksIGIgJiYgKGUgPj0gZCAmJiBlLS0sIGYgPj0gZCAmJiBmLS0pIH0pLCB0aGlzIH0sIGhhczogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPyBtLmluQXJyYXkoYSwgaCkgPiAtMSA6ICEoIWggfHwgIWgubGVuZ3RoKSB9LCBlbXB0eTogZnVuY3Rpb24gKCkgeyByZXR1cm4gaCA9IFtdLCBlID0gMCwgdGhpcyB9LCBkaXNhYmxlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBoID0gaSA9IGMgPSB2b2lkIDAsIHRoaXMgfSwgZGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICFoIH0sIGxvY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSB2b2lkIDAsIGMgfHwgay5kaXNhYmxlKCksIHRoaXMgfSwgbG9ja2VkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhaSB9LCBmaXJlV2l0aDogZnVuY3Rpb24gKGEsIGMpIHsgcmV0dXJuICFoIHx8IGQgJiYgIWkgfHwgKGMgPSBjIHx8IFtdLCBjID0gW2EsIGMuc2xpY2UgPyBjLnNsaWNlKCkgOiBjXSwgYiA/IGkucHVzaChjKSA6IGooYykpLCB0aGlzIH0sIGZpcmU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGsuZmlyZVdpdGgodGhpcywgYXJndW1lbnRzKSwgdGhpcyB9LCBmaXJlZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gISFkIH0gfTsgcmV0dXJuIGsgfSwgbS5leHRlbmQoeyBEZWZlcnJlZDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBbWyJyZXNvbHZlIiwgImRvbmUiLCBtLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlc29sdmVkIl0sIFsicmVqZWN0IiwgImZhaWwiLCBtLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlamVjdGVkIl0sIFsibm90aWZ5IiwgInByb2dyZXNzIiwgbS5DYWxsYmFja3MoIm1lbW9yeSIpXV0sIGMgPSAicGVuZGluZyIsIGQgPSB7IHN0YXRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjIH0sIGFsd2F5czogZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLCB0aGlzIH0sIHRoZW46IGZ1bmN0aW9uICgpIHsgdmFyIGEgPSBhcmd1bWVudHM7IHJldHVybiBtLkRlZmVycmVkKGZ1bmN0aW9uIChjKSB7IG0uZWFjaChiLCBmdW5jdGlvbiAoYiwgZikgeyB2YXIgZyA9IG0uaXNGdW5jdGlvbihhW2JdKSAmJiBhW2JdOyBlW2ZbMV1dKGZ1bmN0aW9uICgpIHsgdmFyIGEgPSBnICYmIGcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgYSAmJiBtLmlzRnVuY3Rpb24oYS5wcm9taXNlKSA/IGEucHJvbWlzZSgpLmRvbmUoYy5yZXNvbHZlKS5mYWlsKGMucmVqZWN0KS5wcm9ncmVzcyhjLm5vdGlmeSkgOiBjW2ZbMF0gKyAiV2l0aCJdKHRoaXMgPT09IGQgPyBjLnByb21pc2UoKSA6IHRoaXMsIGcgPyBbYV0gOiBhcmd1bWVudHMpIH0pIH0pLCBhID0gbnVsbCB9KS5wcm9taXNlKCkgfSwgcHJvbWlzZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG51bGwgIT0gYSA/IG0uZXh0ZW5kKGEsIGQpIDogZCB9IH0sIGUgPSB7fTsgcmV0dXJuIGQucGlwZSA9IGQudGhlbiwgbS5lYWNoKGIsIGZ1bmN0aW9uIChhLCBmKSB7IHZhciBnID0gZlsyXSwgaCA9IGZbM107IGRbZlsxXV0gPSBnLmFkZCwgaCAmJiBnLmFkZChmdW5jdGlvbiAoKSB7IGMgPSBoIH0sIGJbMSBeIGFdWzJdLmRpc2FibGUsIGJbMl1bMl0ubG9jayksIGVbZlswXV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlW2ZbMF0gKyAiV2l0aCJdKHRoaXMgPT09IGUgPyBkIDogdGhpcywgYXJndW1lbnRzKSwgdGhpcyB9LCBlW2ZbMF0gKyAiV2l0aCJdID0gZy5maXJlV2l0aCB9KSwgZC5wcm9taXNlKGUpLCBhICYmIGEuY2FsbChlLCBlKSwgZSB9LCB3aGVuOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IDAsIGMgPSBkLmNhbGwoYXJndW1lbnRzKSwgZSA9IGMubGVuZ3RoLCBmID0gMSAhPT0gZSB8fCBhICYmIG0uaXNGdW5jdGlvbihhLnByb21pc2UpID8gZSA6IDAsIGcgPSAxID09PSBmID8gYSA6IG0uRGVmZXJyZWQoKSwgaCA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBmdW5jdGlvbiAoZSkgeyBiW2FdID0gdGhpcywgY1thXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gZC5jYWxsKGFyZ3VtZW50cykgOiBlLCBjID09PSBpID8gZy5ub3RpZnlXaXRoKGIsIGMpIDogLS1mIHx8IGcucmVzb2x2ZVdpdGgoYiwgYykgfSB9LCBpLCBqLCBrOyBpZiAoZSA+IDEpIGZvciAoaSA9IG5ldyBBcnJheShlKSwgaiA9IG5ldyBBcnJheShlKSwgayA9IG5ldyBBcnJheShlKSA7IGUgPiBiOyBiKyspIGNbYl0gJiYgbS5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSkgPyBjW2JdLnByb21pc2UoKS5kb25lKGgoYiwgaywgYykpLmZhaWwoZy5yZWplY3QpLnByb2dyZXNzKGgoYiwgaiwgaSkpIDogLS1mOyByZXR1cm4gZiB8fCBnLnJlc29sdmVXaXRoKGssIGMpLCBnLnByb21pc2UoKSB9IH0pOyB2YXIgSDsgbS5mbi5yZWFkeSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBtLnJlYWR5LnByb21pc2UoKS5kb25lKGEpLCB0aGlzIH0sIG0uZXh0ZW5kKHsgaXNSZWFkeTogITEsIHJlYWR5V2FpdDogMSwgaG9sZFJlYWR5OiBmdW5jdGlvbiAoYSkgeyBhID8gbS5yZWFkeVdhaXQrKyA6IG0ucmVhZHkoITApIH0sIHJlYWR5OiBmdW5jdGlvbiAoYSkgeyBpZiAoYSA9PT0gITAgPyAhLS1tLnJlYWR5V2FpdCA6ICFtLmlzUmVhZHkpIHsgaWYgKCF5LmJvZHkpIHJldHVybiBzZXRUaW1lb3V0KG0ucmVhZHkpOyBtLmlzUmVhZHkgPSAhMCwgYSAhPT0gITAgJiYgLS1tLnJlYWR5V2FpdCA+IDAgfHwgKEgucmVzb2x2ZVdpdGgoeSwgW21dKSwgbS5mbi50cmlnZ2VySGFuZGxlciAmJiAobSh5KS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSwgbSh5KS5vZmYoInJlYWR5IikpKSB9IH0gfSk7IGZ1bmN0aW9uIEkoKSB7IHkuYWRkRXZlbnRMaXN0ZW5lciA/ICh5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBKLCAhMSksIGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsIEosICExKSkgOiAoeS5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgSiksIGEuZGV0YWNoRXZlbnQoIm9ubG9hZCIsIEopKSB9IGZ1bmN0aW9uIEooKSB7ICh5LmFkZEV2ZW50TGlzdGVuZXIgfHwgImxvYWQiID09PSBldmVudC50eXBlIHx8ICJjb21wbGV0ZSIgPT09IHkucmVhZHlTdGF0ZSkgJiYgKEkoKSwgbS5yZWFkeSgpKSB9IG0ucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uIChiKSB7IGlmICghSCkgaWYgKEggPSBtLkRlZmVycmVkKCksICJjb21wbGV0ZSIgPT09IHkucmVhZHlTdGF0ZSkgc2V0VGltZW91dChtLnJlYWR5KTsgZWxzZSBpZiAoeS5hZGRFdmVudExpc3RlbmVyKSB5LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBKLCAhMSksIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIEosICExKTsgZWxzZSB7IHkuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIEopLCBhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLCBKKTsgdmFyIGMgPSAhMTsgdHJ5IHsgYyA9IG51bGwgPT0gYS5mcmFtZUVsZW1lbnQgJiYgeS5kb2N1bWVudEVsZW1lbnQgfSBjYXRjaCAoZCkgeyB9IGMgJiYgYy5kb1Njcm9sbCAmJiAhZnVuY3Rpb24gZSgpIHsgaWYgKCFtLmlzUmVhZHkpIHsgdHJ5IHsgYy5kb1Njcm9sbCgibGVmdCIpIH0gY2F0Y2ggKGEpIHsgcmV0dXJuIHNldFRpbWVvdXQoZSwgNTApIH0gSSgpLCBtLnJlYWR5KCkgfSB9KCkgfSByZXR1cm4gSC5wcm9taXNlKGIpIH07IHZhciBLID0gInVuZGVmaW5lZCIsIEw7IGZvciAoTCBpbiBtKGspKSBicmVhazsgay5vd25MYXN0ID0gIjAiICE9PSBMLCBrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQgPSAhMSwgbShmdW5jdGlvbiAoKSB7IHZhciBhLCBiLCBjLCBkOyBjID0geS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLCBjICYmIGMuc3R5bGUgJiYgKGIgPSB5LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBkID0geS5jcmVhdGVFbGVtZW50KCJkaXYiKSwgZC5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOmFic29sdXRlO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4IiwgYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSwgdHlwZW9mIGIuc3R5bGUuem9vbSAhPT0gSyAmJiAoYi5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6aW5saW5lO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLCBrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQgPSBhID0gMyA9PT0gYi5vZmZzZXRXaWR0aCwgYSAmJiAoYy5zdHlsZS56b29tID0gMSkpLCBjLnJlbW92ZUNoaWxkKGQpKSB9KSwgZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHkuY3JlYXRlRWxlbWVudCgiZGl2Iik7IGlmIChudWxsID09IGsuZGVsZXRlRXhwYW5kbykgeyBrLmRlbGV0ZUV4cGFuZG8gPSAhMDsgdHJ5IHsgZGVsZXRlIGEudGVzdCB9IGNhdGNoIChiKSB7IGsuZGVsZXRlRXhwYW5kbyA9ICExIH0gfSBhID0gbnVsbCB9KCksIG0uYWNjZXB0RGF0YSA9IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gbS5ub0RhdGFbKGEubm9kZU5hbWUgKyAiICIpLnRvTG93ZXJDYXNlKCldLCBjID0gK2Eubm9kZVR5cGUgfHwgMTsgcmV0dXJuIDEgIT09IGMgJiYgOSAhPT0gYyA/ICExIDogIWIgfHwgYiAhPT0gITAgJiYgYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKSA9PT0gYiB9OyB2YXIgTSA9IC9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sIE4gPSAvKFtBLVpdKS9nOyBmdW5jdGlvbiBPKGEsIGIsIGMpIHsgaWYgKHZvaWQgMCA9PT0gYyAmJiAxID09PSBhLm5vZGVUeXBlKSB7IHZhciBkID0gImRhdGEtIiArIGIucmVwbGFjZShOLCAiLSQxIikudG9Mb3dlckNhc2UoKTsgaWYgKGMgPSBhLmdldEF0dHJpYnV0ZShkKSwgInN0cmluZyIgPT0gdHlwZW9mIGMpIHsgdHJ5IHsgYyA9ICJ0cnVlIiA9PT0gYyA/ICEwIDogImZhbHNlIiA9PT0gYyA/ICExIDogIm51bGwiID09PSBjID8gbnVsbCA6ICtjICsgIiIgPT09IGMgPyArYyA6IE0udGVzdChjKSA/IG0ucGFyc2VKU09OKGMpIDogYyB9IGNhdGNoIChlKSB7IH0gbS5kYXRhKGEsIGIsIGMpIH0gZWxzZSBjID0gdm9pZCAwIH0gcmV0dXJuIGMgfSBmdW5jdGlvbiBQKGEpIHsgdmFyIGI7IGZvciAoYiBpbiBhKSBpZiAoKCJkYXRhIiAhPT0gYiB8fCAhbS5pc0VtcHR5T2JqZWN0KGFbYl0pKSAmJiAidG9KU09OIiAhPT0gYikgcmV0dXJuICExOyByZXR1cm4gITAgfSBmdW5jdGlvbiBRKGEsIGIsIGQsIGUpIHsNCiAgICAgICAgaWYgKG0uYWNjZXB0RGF0YShhKSkgew0KICAgICAgICAgICAgdmFyIGYsIGcsIGggPSBtLmV4cGFuZG8sIGkgPSBhLm5vZGVUeXBlLCBqID0gaSA/IG0uY2FjaGUgOiBhLCBrID0gaSA/IGFbaF0gOiBhW2hdICYmIGg7DQogICAgICAgICAgICBpZiAoayAmJiBqW2tdICYmIChlIHx8IGpba10uZGF0YSkgfHwgdm9pZCAwICE9PSBkIHx8ICJzdHJpbmciICE9IHR5cGVvZiBiKSByZXR1cm4gayB8fCAoayA9IGkgPyBhW2hdID0gYy5wb3AoKSB8fCBtLmd1aWQrKyA6IGgpLCBqW2tdIHx8IChqW2tdID0gaSA/IHt9IDogeyB0b0pTT046IG0ubm9vcCB9KSwgKCJvYmplY3QiID09IHR5cGVvZiBiIHx8ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGIpICYmIChlID8galtrXSA9IG0uZXh0ZW5kKGpba10sIGIpIDogaltrXS5kYXRhID0gbS5leHRlbmQoaltrXS5kYXRhLCBiKSksIGcgPSBqW2tdLCBlIHx8IChnLmRhdGEgfHwgKGcuZGF0YSA9IHt9KSwgZyA9IGcuZGF0YSksIHZvaWQgMCAhPT0gZCAmJiAoZ1ttLmNhbWVsQ2FzZShiKV0gPSBkKSwgInN0cmluZyIgPT0gdHlwZW9mIGIgPyAoZiA9IGdbYl0sIG51bGwgPT0gZiAmJiAoZiA9IGdbbS5jYW1lbENhc2UoYildKSkgOiBmID0gZywgZg0KICAgICAgICB9DQogICAgfSBmdW5jdGlvbiBSKGEsIGIsIGMpIHsgaWYgKG0uYWNjZXB0RGF0YShhKSkgeyB2YXIgZCwgZSwgZiA9IGEubm9kZVR5cGUsIGcgPSBmID8gbS5jYWNoZSA6IGEsIGggPSBmID8gYVttLmV4cGFuZG9dIDogbS5leHBhbmRvOyBpZiAoZ1toXSkgeyBpZiAoYiAmJiAoZCA9IGMgPyBnW2hdIDogZ1toXS5kYXRhKSkgeyBtLmlzQXJyYXkoYikgPyBiID0gYi5jb25jYXQobS5tYXAoYiwgbS5jYW1lbENhc2UpKSA6IGIgaW4gZCA/IGIgPSBbYl0gOiAoYiA9IG0uY2FtZWxDYXNlKGIpLCBiID0gYiBpbiBkID8gW2JdIDogYi5zcGxpdCgiICIpKSwgZSA9IGIubGVuZ3RoOyB3aGlsZSAoZS0tKSBkZWxldGUgZFtiW2VdXTsgaWYgKGMgPyAhUChkKSA6ICFtLmlzRW1wdHlPYmplY3QoZCkpIHJldHVybiB9IChjIHx8IChkZWxldGUgZ1toXS5kYXRhLCBQKGdbaF0pKSkgJiYgKGYgPyBtLmNsZWFuRGF0YShbYV0sICEwKSA6IGsuZGVsZXRlRXhwYW5kbyB8fCBnICE9IGcud2luZG93ID8gZGVsZXRlIGdbaF0gOiBnW2hdID0gbnVsbCkgfSB9IH0gbS5leHRlbmQoeyBjYWNoZToge30sIG5vRGF0YTogeyAiYXBwbGV0ICI6ICEwLCAiZW1iZWQgIjogITAsICJvYmplY3QgIjogImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIgfSwgaGFzRGF0YTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPSBhLm5vZGVUeXBlID8gbS5jYWNoZVthW20uZXhwYW5kb11dIDogYVttLmV4cGFuZG9dLCAhIWEgJiYgIVAoYSkgfSwgZGF0YTogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIFEoYSwgYiwgYykgfSwgcmVtb3ZlRGF0YTogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIFIoYSwgYikgfSwgX2RhdGE6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBRKGEsIGIsIGMsICEwKSB9LCBfcmVtb3ZlRGF0YTogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIFIoYSwgYiwgITApIH0gfSksIG0uZm4uZXh0ZW5kKHsgZGF0YTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQsIGUsIGYgPSB0aGlzWzBdLCBnID0gZiAmJiBmLmF0dHJpYnV0ZXM7IGlmICh2b2lkIDAgPT09IGEpIHsgaWYgKHRoaXMubGVuZ3RoICYmIChlID0gbS5kYXRhKGYpLCAxID09PSBmLm5vZGVUeXBlICYmICFtLl9kYXRhKGYsICJwYXJzZWRBdHRycyIpKSkgeyBjID0gZy5sZW5ndGg7IHdoaWxlIChjLS0pIGdbY10gJiYgKGQgPSBnW2NdLm5hbWUsIDAgPT09IGQuaW5kZXhPZigiZGF0YS0iKSAmJiAoZCA9IG0uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLCBPKGYsIGQsIGVbZF0pKSk7IG0uX2RhdGEoZiwgInBhcnNlZEF0dHJzIiwgITApIH0gcmV0dXJuIGUgfSByZXR1cm4gIm9iamVjdCIgPT0gdHlwZW9mIGEgPyB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBtLmRhdGEodGhpcywgYSkgfSkgOiBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IG0uZGF0YSh0aGlzLCBhLCBiKSB9KSA6IGYgPyBPKGYsIGEsIG0uZGF0YShmLCBhKSkgOiB2b2lkIDAgfSwgcmVtb3ZlRGF0YTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IG0ucmVtb3ZlRGF0YSh0aGlzLCBhKSB9KSB9IH0pLCBtLmV4dGVuZCh7IHF1ZXVlOiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgcmV0dXJuIGEgPyAoYiA9IChiIHx8ICJmeCIpICsgInF1ZXVlIiwgZCA9IG0uX2RhdGEoYSwgYiksIGMgJiYgKCFkIHx8IG0uaXNBcnJheShjKSA/IGQgPSBtLl9kYXRhKGEsIGIsIG0ubWFrZUFycmF5KGMpKSA6IGQucHVzaChjKSksIGQgfHwgW10pIDogdm9pZCAwIH0sIGRlcXVldWU6IGZ1bmN0aW9uIChhLCBiKSB7IGIgPSBiIHx8ICJmeCI7IHZhciBjID0gbS5xdWV1ZShhLCBiKSwgZCA9IGMubGVuZ3RoLCBlID0gYy5zaGlmdCgpLCBmID0gbS5fcXVldWVIb29rcyhhLCBiKSwgZyA9IGZ1bmN0aW9uICgpIHsgbS5kZXF1ZXVlKGEsIGIpIH07ICJpbnByb2dyZXNzIiA9PT0gZSAmJiAoZSA9IGMuc2hpZnQoKSwgZC0tKSwgZSAmJiAoImZ4IiA9PT0gYiAmJiBjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSwgZGVsZXRlIGYuc3RvcCwgZS5jYWxsKGEsIGcsIGYpKSwgIWQgJiYgZiAmJiBmLmVtcHR5LmZpcmUoKSB9LCBfcXVldWVIb29rczogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSBiICsgInF1ZXVlSG9va3MiOyByZXR1cm4gbS5fZGF0YShhLCBjKSB8fCBtLl9kYXRhKGEsIGMsIHsgZW1wdHk6IG0uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbiAoKSB7IG0uX3JlbW92ZURhdGEoYSwgYiArICJxdWV1ZSIpLCBtLl9yZW1vdmVEYXRhKGEsIGMpIH0pIH0pIH0gfSksIG0uZm4uZXh0ZW5kKHsgcXVldWU6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gMjsgcmV0dXJuICJzdHJpbmciICE9IHR5cGVvZiBhICYmIChiID0gYSwgYSA9ICJmeCIsIGMtLSksIGFyZ3VtZW50cy5sZW5ndGggPCBjID8gbS5xdWV1ZSh0aGlzWzBdLCBhKSA6IHZvaWQgMCA9PT0gYiA/IHRoaXMgOiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgYyA9IG0ucXVldWUodGhpcywgYSwgYik7IG0uX3F1ZXVlSG9va3ModGhpcywgYSksICJmeCIgPT09IGEgJiYgImlucHJvZ3Jlc3MiICE9PSBjWzBdICYmIG0uZGVxdWV1ZSh0aGlzLCBhKSB9KSB9LCBkZXF1ZXVlOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgbS5kZXF1ZXVlKHRoaXMsIGEpIH0pIH0sIGNsZWFyUXVldWU6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLnF1ZXVlKGEgfHwgImZ4IiwgW10pIH0sIHByb21pc2U6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkID0gMSwgZSA9IG0uRGVmZXJyZWQoKSwgZiA9IHRoaXMsIGcgPSB0aGlzLmxlbmd0aCwgaCA9IGZ1bmN0aW9uICgpIHsgLS1kIHx8IGUucmVzb2x2ZVdpdGgoZiwgW2ZdKSB9OyAic3RyaW5nIiAhPSB0eXBlb2YgYSAmJiAoYiA9IGEsIGEgPSB2b2lkIDApLCBhID0gYSB8fCAiZngiOyB3aGlsZSAoZy0tKSBjID0gbS5fZGF0YShmW2ddLCBhICsgInF1ZXVlSG9va3MiKSwgYyAmJiBjLmVtcHR5ICYmIChkKyssIGMuZW1wdHkuYWRkKGgpKTsgcmV0dXJuIGgoKSwgZS5wcm9taXNlKGIpIH0gfSk7IHZhciBTID0gL1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsIFQgPSBbIlRvcCIsICJSaWdodCIsICJCb3R0b20iLCAiTGVmdCJdLCBVID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgPSBiIHx8IGEsICJub25lIiA9PT0gbS5jc3MoYSwgImRpc3BsYXkiKSB8fCAhbS5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsIGEpIH0sIFYgPSBtLmFjY2VzcyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlLCBmLCBnKSB7IHZhciBoID0gMCwgaSA9IGEubGVuZ3RoLCBqID0gbnVsbCA9PSBjOyBpZiAoIm9iamVjdCIgPT09IG0udHlwZShjKSkgeyBlID0gITA7IGZvciAoaCBpbiBjKSBtLmFjY2VzcyhhLCBiLCBoLCBjW2hdLCAhMCwgZiwgZykgfSBlbHNlIGlmICh2b2lkIDAgIT09IGQgJiYgKGUgPSAhMCwgbS5pc0Z1bmN0aW9uKGQpIHx8IChnID0gITApLCBqICYmIChnID8gKGIuY2FsbChhLCBkKSwgYiA9IG51bGwpIDogKGogPSBiLCBiID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGouY2FsbChtKGEpLCBjKSB9KSksIGIpKSBmb3IgKDsgaSA+IGg7IGgrKykgYihhW2hdLCBjLCBnID8gZCA6IGQuY2FsbChhW2hdLCBoLCBiKGFbaF0sIGMpKSk7IHJldHVybiBlID8gYSA6IGogPyBiLmNhbGwoYSkgOiBpID8gYihhWzBdLCBjKSA6IGYgfSwgVyA9IC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pOyAhZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSwgYiA9IHkuY3JlYXRlRWxlbWVudCgiZGl2IiksIGMgPSB5LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsgaWYgKGIuaW5uZXJIVE1MID0gIiAgPGxpbmsvPjx0YWJsZT48XC90YWJsZT48YSBocmVmPScvYSc+YTxcL2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+Iiwgay5sZWFkaW5nV2hpdGVzcGFjZSA9IDMgPT09IGIuZmlyc3RDaGlsZC5ub2RlVHlwZSwgay50Ym9keSA9ICFiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCwgay5odG1sU2VyaWFsaXplID0gISFiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLCBrLmh0bWw1Q2xvbmUgPSAiPDpuYXY+PC86bmF2PiIgIT09IHkuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwsIGEudHlwZSA9ICJjaGVja2JveCIsIGEuY2hlY2tlZCA9ICEwLCBjLmFwcGVuZENoaWxkKGEpLCBrLmFwcGVuZENoZWNrZWQgPSBhLmNoZWNrZWQsIGIuaW5uZXJIVE1MID0gIjx0ZXh0YXJlYT54PFwvdGV4dGFyZWE+Iiwgay5ub0Nsb25lQ2hlY2tlZCA9ICEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsIGMuYXBwZW5kQ2hpbGQoYiksIGIuaW5uZXJIVE1MID0gIjxpbnB1dCB0eXBlPSdyYWRpbycgY2hlY2tlZD0nY2hlY2tlZCcgbmFtZT0ndCcvPiIsIGsuY2hlY2tDbG9uZSA9IGIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLCBrLm5vQ2xvbmVFdmVudCA9ICEwLCBiLmF0dGFjaEV2ZW50ICYmIChiLmF0dGFjaEV2ZW50KCJvbmNsaWNrIiwgZnVuY3Rpb24gKCkgeyBrLm5vQ2xvbmVFdmVudCA9ICExIH0pLCBiLmNsb25lTm9kZSghMCkuY2xpY2soKSksIG51bGwgPT0gay5kZWxldGVFeHBhbmRvKSB7IGsuZGVsZXRlRXhwYW5kbyA9ICEwOyB0cnkgeyBkZWxldGUgYi50ZXN0IH0gY2F0Y2ggKGQpIHsgay5kZWxldGVFeHBhbmRvID0gITEgfSB9IH0oKSwgZnVuY3Rpb24gKCkgeyB2YXIgYiwgYywgZCA9IHkuY3JlYXRlRWxlbWVudCgiZGl2Iik7IGZvciAoYiBpbiB7IHN1Ym1pdDogITAsIGNoYW5nZTogITAsIGZvY3VzaW46ICEwIH0pIGMgPSAib24iICsgYiwgKGtbYiArICJCdWJibGVzIl0gPSBjIGluIGEpIHx8IChkLnNldEF0dHJpYnV0ZShjLCAidCIpLCBrW2IgKyAiQnViYmxlcyJdID0gZC5hdHRyaWJ1dGVzW2NdLmV4cGFuZG8gPT09ICExKTsgZCA9IG51bGwgfSgpOyB2YXIgWCA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhKSQvaSwgWSA9IC9ea2V5LywgWiA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudSl8Y2xpY2svLCAkID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLCBfID0gL14oW14uXSopKD86XC4oLispfCkkLzsgZnVuY3Rpb24gYWIoKSB7IHJldHVybiAhMCB9IGZ1bmN0aW9uIGJiKCkgeyByZXR1cm4gITEgfSBmdW5jdGlvbiBjYigpIHsgdHJ5IHsgcmV0dXJuIHkuYWN0aXZlRWxlbWVudCB9IGNhdGNoIChhKSB7IH0gfSBtLmV2ZW50ID0geyBnbG9iYWw6IHt9LCBhZGQ6IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlKSB7IHZhciBmLCBnLCBoLCBpLCBqLCBrLCBsLCBuLCBvLCBwLCBxLCByID0gbS5fZGF0YShhKTsgaWYgKHIpIHsgYy5oYW5kbGVyICYmIChpID0gYywgYyA9IGkuaGFuZGxlciwgZSA9IGkuc2VsZWN0b3IpLCBjLmd1aWQgfHwgKGMuZ3VpZCA9IG0uZ3VpZCsrKSwgKGcgPSByLmV2ZW50cykgfHwgKGcgPSByLmV2ZW50cyA9IHt9KSwgKGsgPSByLmhhbmRsZSkgfHwgKGsgPSByLmhhbmRsZSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0eXBlb2YgbSA9PT0gSyB8fCBhICYmIG0uZXZlbnQudHJpZ2dlcmVkID09PSBhLnR5cGUgPyB2b2lkIDAgOiBtLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGsuZWxlbSwgYXJndW1lbnRzKSB9LCBrLmVsZW0gPSBhKSwgYiA9IChiIHx8ICIiKS5tYXRjaChFKSB8fCBbIiJdLCBoID0gYi5sZW5ndGg7IHdoaWxlIChoLS0pIGYgPSBfLmV4ZWMoYltoXSkgfHwgW10sIG8gPSBxID0gZlsxXSwgcCA9IChmWzJdIHx8ICIiKS5zcGxpdCgiLiIpLnNvcnQoKSwgbyAmJiAoaiA9IG0uZXZlbnQuc3BlY2lhbFtvXSB8fCB7fSwgbyA9IChlID8gai5kZWxlZ2F0ZVR5cGUgOiBqLmJpbmRUeXBlKSB8fCBvLCBqID0gbS5ldmVudC5zcGVjaWFsW29dIHx8IHt9LCBsID0gbS5leHRlbmQoeyB0eXBlOiBvLCBvcmlnVHlwZTogcSwgZGF0YTogZCwgaGFuZGxlcjogYywgZ3VpZDogYy5ndWlkLCBzZWxlY3RvcjogZSwgbmVlZHNDb250ZXh0OiBlICYmIG0uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSwgbmFtZXNwYWNlOiBwLmpvaW4oIi4iKSB9LCBpKSwgKG4gPSBnW29dKSB8fCAobiA9IGdbb10gPSBbXSwgbi5kZWxlZ2F0ZUNvdW50ID0gMCwgai5zZXR1cCAmJiBqLnNldHVwLmNhbGwoYSwgZCwgcCwgaykgIT09ICExIHx8IChhLmFkZEV2ZW50TGlzdGVuZXIgPyBhLmFkZEV2ZW50TGlzdGVuZXIobywgaywgITEpIDogYS5hdHRhY2hFdmVudCAmJiBhLmF0dGFjaEV2ZW50KCJvbiIgKyBvLCBrKSkpLCBqLmFkZCAmJiAoai5hZGQuY2FsbChhLCBsKSwgbC5oYW5kbGVyLmd1aWQgfHwgKGwuaGFuZGxlci5ndWlkID0gYy5ndWlkKSksIGUgPyBuLnNwbGljZShuLmRlbGVnYXRlQ291bnQrKywgMCwgbCkgOiBuLnB1c2gobCksIG0uZXZlbnQuZ2xvYmFsW29dID0gITApOyBhID0gbnVsbCB9IH0sIHJlbW92ZTogZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUpIHsgdmFyIGYsIGcsIGgsIGksIGosIGssIGwsIG4sIG8sIHAsIHEsIHIgPSBtLmhhc0RhdGEoYSkgJiYgbS5fZGF0YShhKTsgaWYgKHIgJiYgKGsgPSByLmV2ZW50cykpIHsgYiA9IChiIHx8ICIiKS5tYXRjaChFKSB8fCBbIiJdLCBqID0gYi5sZW5ndGg7IHdoaWxlIChqLS0pIGlmIChoID0gXy5leGVjKGJbal0pIHx8IFtdLCBvID0gcSA9IGhbMV0sIHAgPSAoaFsyXSB8fCAiIikuc3BsaXQoIi4iKS5zb3J0KCksIG8pIHsgbCA9IG0uZXZlbnQuc3BlY2lhbFtvXSB8fCB7fSwgbyA9IChkID8gbC5kZWxlZ2F0ZVR5cGUgOiBsLmJpbmRUeXBlKSB8fCBvLCBuID0ga1tvXSB8fCBbXSwgaCA9IGhbMl0gJiYgbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBwLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIiksIGkgPSBmID0gbi5sZW5ndGg7IHdoaWxlIChmLS0pIGcgPSBuW2ZdLCAhZSAmJiBxICE9PSBnLm9yaWdUeXBlIHx8IGMgJiYgYy5ndWlkICE9PSBnLmd1aWQgfHwgaCAmJiAhaC50ZXN0KGcubmFtZXNwYWNlKSB8fCBkICYmIGQgIT09IGcuc2VsZWN0b3IgJiYgKCIqKiIgIT09IGQgfHwgIWcuc2VsZWN0b3IpIHx8IChuLnNwbGljZShmLCAxKSwgZy5zZWxlY3RvciAmJiBuLmRlbGVnYXRlQ291bnQtLSwgbC5yZW1vdmUgJiYgbC5yZW1vdmUuY2FsbChhLCBnKSk7IGkgJiYgIW4ubGVuZ3RoICYmIChsLnRlYXJkb3duICYmIGwudGVhcmRvd24uY2FsbChhLCBwLCByLmhhbmRsZSkgIT09ICExIHx8IG0ucmVtb3ZlRXZlbnQoYSwgbywgci5oYW5kbGUpLCBkZWxldGUga1tvXSkgfSBlbHNlIGZvciAobyBpbiBrKSBtLmV2ZW50LnJlbW92ZShhLCBvICsgYltqXSwgYywgZCwgITApOyBtLmlzRW1wdHlPYmplY3QoaykgJiYgKGRlbGV0ZSByLmhhbmRsZSwgbS5fcmVtb3ZlRGF0YShhLCAiZXZlbnRzIikpIH0gfSwgdHJpZ2dlcjogZnVuY3Rpb24gKGIsIGMsIGQsIGUpIHsgdmFyIGYsIGcsIGgsIGksIGssIGwsIG4sIG8gPSBbZCB8fCB5XSwgcCA9IGouY2FsbChiLCAidHlwZSIpID8gYi50eXBlIDogYiwgcSA9IGouY2FsbChiLCAibmFtZXNwYWNlIikgPyBiLm5hbWVzcGFjZS5zcGxpdCgiLiIpIDogW107IGlmIChoID0gbCA9IGQgPSBkIHx8IHksIDMgIT09IGQubm9kZVR5cGUgJiYgOCAhPT0gZC5ub2RlVHlwZSAmJiAhJC50ZXN0KHAgKyBtLmV2ZW50LnRyaWdnZXJlZCkgJiYgKHAuaW5kZXhPZigiLiIpID49IDAgJiYgKHEgPSBwLnNwbGl0KCIuIiksIHAgPSBxLnNoaWZ0KCksIHEuc29ydCgpKSwgZyA9IHAuaW5kZXhPZigiOiIpIDwgMCAmJiAib24iICsgcCwgYiA9IGJbbS5leHBhbmRvXSA/IGIgOiBuZXcgbS5FdmVudChwLCAib2JqZWN0IiA9PSB0eXBlb2YgYiAmJiBiKSwgYi5pc1RyaWdnZXIgPSBlID8gMiA6IDMsIGIubmFtZXNwYWNlID0gcS5qb2luKCIuIiksIGIubmFtZXNwYWNlX3JlID0gYi5uYW1lc3BhY2UgPyBuZXcgUmVnRXhwKCIoXnxcXC4pIiArIHEuam9pbigiXFwuKD86LipcXC58KSIpICsgIihcXC58JCkiKSA6IG51bGwsIGIucmVzdWx0ID0gdm9pZCAwLCBiLnRhcmdldCB8fCAoYi50YXJnZXQgPSBkKSwgYyA9IG51bGwgPT0gYyA/IFtiXSA6IG0ubWFrZUFycmF5KGMsIFtiXSksIGsgPSBtLmV2ZW50LnNwZWNpYWxbcF0gfHwge30sIGUgfHwgIWsudHJpZ2dlciB8fCBrLnRyaWdnZXIuYXBwbHkoZCwgYykgIT09ICExKSkgeyBpZiAoIWUgJiYgIWsubm9CdWJibGUgJiYgIW0uaXNXaW5kb3coZCkpIHsgZm9yIChpID0gay5kZWxlZ2F0ZVR5cGUgfHwgcCwgJC50ZXN0KGkgKyBwKSB8fCAoaCA9IGgucGFyZW50Tm9kZSkgOyBoOyBoID0gaC5wYXJlbnROb2RlKSBvLnB1c2goaCksIGwgPSBoOyBsID09PSAoZC5vd25lckRvY3VtZW50IHx8IHkpICYmIG8ucHVzaChsLmRlZmF1bHRWaWV3IHx8IGwucGFyZW50V2luZG93IHx8IGEpIH0gbiA9IDA7IHdoaWxlICgoaCA9IG9bbisrXSkgJiYgIWIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkgYi50eXBlID0gbiA+IDEgPyBpIDogay5iaW5kVHlwZSB8fCBwLCBmID0gKG0uX2RhdGEoaCwgImV2ZW50cyIpIHx8IHt9KVtiLnR5cGVdICYmIG0uX2RhdGEoaCwgImhhbmRsZSIpLCBmICYmIGYuYXBwbHkoaCwgYyksIGYgPSBnICYmIGhbZ10sIGYgJiYgZi5hcHBseSAmJiBtLmFjY2VwdERhdGEoaCkgJiYgKGIucmVzdWx0ID0gZi5hcHBseShoLCBjKSwgYi5yZXN1bHQgPT09ICExICYmIGIucHJldmVudERlZmF1bHQoKSk7IGlmIChiLnR5cGUgPSBwLCAhZSAmJiAhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSAmJiAoIWsuX2RlZmF1bHQgfHwgay5fZGVmYXVsdC5hcHBseShvLnBvcCgpLCBjKSA9PT0gITEpICYmIG0uYWNjZXB0RGF0YShkKSAmJiBnICYmIGRbcF0gJiYgIW0uaXNXaW5kb3coZCkpIHsgbCA9IGRbZ10sIGwgJiYgKGRbZ10gPSBudWxsKSwgbS5ldmVudC50cmlnZ2VyZWQgPSBwOyB0cnkgeyBkW3BdKCkgfSBjYXRjaCAocikgeyB9IG0uZXZlbnQudHJpZ2dlcmVkID0gdm9pZCAwLCBsICYmIChkW2ddID0gbCkgfSByZXR1cm4gYi5yZXN1bHQgfSB9LCBkaXNwYXRjaDogZnVuY3Rpb24gKGEpIHsgYSA9IG0uZXZlbnQuZml4KGEpOyB2YXIgYiwgYywgZSwgZiwgZywgaCA9IFtdLCBpID0gZC5jYWxsKGFyZ3VtZW50cyksIGogPSAobS5fZGF0YSh0aGlzLCAiZXZlbnRzIikgfHwge30pW2EudHlwZV0gfHwgW10sIGsgPSBtLmV2ZW50LnNwZWNpYWxbYS50eXBlXSB8fCB7fTsgaWYgKGlbMF0gPSBhLCBhLmRlbGVnYXRlVGFyZ2V0ID0gdGhpcywgIWsucHJlRGlzcGF0Y2ggfHwgay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsIGEpICE9PSAhMSkgeyBoID0gbS5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsIGEsIGopLCBiID0gMDsgd2hpbGUgKChmID0gaFtiKytdKSAmJiAhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7IGEuY3VycmVudFRhcmdldCA9IGYuZWxlbSwgZyA9IDA7IHdoaWxlICgoZSA9IGYuaGFuZGxlcnNbZysrXSkgJiYgIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkgKCFhLm5hbWVzcGFjZV9yZSB8fCBhLm5hbWVzcGFjZV9yZS50ZXN0KGUubmFtZXNwYWNlKSkgJiYgKGEuaGFuZGxlT2JqID0gZSwgYS5kYXRhID0gZS5kYXRhLCBjID0gKChtLmV2ZW50LnNwZWNpYWxbZS5vcmlnVHlwZV0gfHwge30pLmhhbmRsZSB8fCBlLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSwgaSksIHZvaWQgMCAhPT0gYyAmJiAoYS5yZXN1bHQgPSBjKSA9PT0gITEgJiYgKGEucHJldmVudERlZmF1bHQoKSwgYS5zdG9wUHJvcGFnYXRpb24oKSkpIH0gcmV0dXJuIGsucG9zdERpc3BhdGNoICYmIGsucG9zdERpc3BhdGNoLmNhbGwodGhpcywgYSksIGEucmVzdWx0IH0gfSwgaGFuZGxlcnM6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkLCBlLCBmLCBnID0gW10sIGggPSBiLmRlbGVnYXRlQ291bnQsIGkgPSBhLnRhcmdldDsgaWYgKGggJiYgaS5ub2RlVHlwZSAmJiAoIWEuYnV0dG9uIHx8ICJjbGljayIgIT09IGEudHlwZSkpIGZvciAoOyBpICE9IHRoaXM7IGkgPSBpLnBhcmVudE5vZGUgfHwgdGhpcykgaWYgKDEgPT09IGkubm9kZVR5cGUgJiYgKGkuZGlzYWJsZWQgIT09ICEwIHx8ICJjbGljayIgIT09IGEudHlwZSkpIHsgZm9yIChlID0gW10sIGYgPSAwOyBoID4gZjsgZisrKSBkID0gYltmXSwgYyA9IGQuc2VsZWN0b3IgKyAiICIsIHZvaWQgMCA9PT0gZVtjXSAmJiAoZVtjXSA9IGQubmVlZHNDb250ZXh0ID8gbShjLCB0aGlzKS5pbmRleChpKSA+PSAwIDogbS5maW5kKGMsIHRoaXMsIG51bGwsIFtpXSkubGVuZ3RoKSwgZVtjXSAmJiBlLnB1c2goZCk7IGUubGVuZ3RoICYmIGcucHVzaCh7IGVsZW06IGksIGhhbmRsZXJzOiBlIH0pIH0gcmV0dXJuIGggPCBiLmxlbmd0aCAmJiBnLnB1c2goeyBlbGVtOiB0aGlzLCBoYW5kbGVyczogYi5zbGljZShoKSB9KSwgZyB9LCBmaXg6IGZ1bmN0aW9uIChhKSB7IGlmIChhW20uZXhwYW5kb10pIHJldHVybiBhOyB2YXIgYiwgYywgZCwgZSA9IGEudHlwZSwgZiA9IGEsIGcgPSB0aGlzLmZpeEhvb2tzW2VdOyBnIHx8ICh0aGlzLmZpeEhvb2tzW2VdID0gZyA9IFoudGVzdChlKSA/IHRoaXMubW91c2VIb29rcyA6IFkudGVzdChlKSA/IHRoaXMua2V5SG9va3MgOiB7fSksIGQgPSBnLnByb3BzID8gdGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcykgOiB0aGlzLnByb3BzLCBhID0gbmV3IG0uRXZlbnQoZiksIGIgPSBkLmxlbmd0aDsgd2hpbGUgKGItLSkgYyA9IGRbYl0sIGFbY10gPSBmW2NdOyByZXR1cm4gYS50YXJnZXQgfHwgKGEudGFyZ2V0ID0gZi5zcmNFbGVtZW50IHx8IHkpLCAzID09PSBhLnRhcmdldC5ub2RlVHlwZSAmJiAoYS50YXJnZXQgPSBhLnRhcmdldC5wYXJlbnROb2RlKSwgYS5tZXRhS2V5ID0gISFhLm1ldGFLZXksIGcuZmlsdGVyID8gZy5maWx0ZXIoYSwgZikgOiBhIH0sIHByb3BzOiAiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLCBmaXhIb29rczoge30sIGtleUhvb2tzOiB7IHByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSwgZmlsdGVyOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gbnVsbCA9PSBhLndoaWNoICYmIChhLndoaWNoID0gbnVsbCAhPSBiLmNoYXJDb2RlID8gYi5jaGFyQ29kZSA6IGIua2V5Q29kZSksIGEgfSB9LCBtb3VzZUhvb2tzOiB7IHByb3BzOiAiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLCBmaWx0ZXI6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkLCBlLCBmID0gYi5idXR0b24sIGcgPSBiLmZyb21FbGVtZW50OyByZXR1cm4gbnVsbCA9PSBhLnBhZ2VYICYmIG51bGwgIT0gYi5jbGllbnRYICYmIChkID0gYS50YXJnZXQub3duZXJEb2N1bWVudCB8fCB5LCBlID0gZC5kb2N1bWVudEVsZW1lbnQsIGMgPSBkLmJvZHksIGEucGFnZVggPSBiLmNsaWVudFggKyAoZSAmJiBlLnNjcm9sbExlZnQgfHwgYyAmJiBjLnNjcm9sbExlZnQgfHwgMCkgLSAoZSAmJiBlLmNsaWVudExlZnQgfHwgYyAmJiBjLmNsaWVudExlZnQgfHwgMCksIGEucGFnZVkgPSBiLmNsaWVudFkgKyAoZSAmJiBlLnNjcm9sbFRvcCB8fCBjICYmIGMuc2Nyb2xsVG9wIHx8IDApIC0gKGUgJiYgZS5jbGllbnRUb3AgfHwgYyAmJiBjLmNsaWVudFRvcCB8fCAwKSksICFhLnJlbGF0ZWRUYXJnZXQgJiYgZyAmJiAoYS5yZWxhdGVkVGFyZ2V0ID0gZyA9PT0gYS50YXJnZXQgPyBiLnRvRWxlbWVudCA6IGcpLCBhLndoaWNoIHx8IHZvaWQgMCA9PT0gZiB8fCAoYS53aGljaCA9IDEgJiBmID8gMSA6IDIgJiBmID8gMyA6IDQgJiBmID8gMiA6IDApLCBhIH0gfSwgc3BlY2lhbDogeyBsb2FkOiB7IG5vQnViYmxlOiAhMCB9LCBmb2N1czogeyB0cmlnZ2VyOiBmdW5jdGlvbiAoKSB7IGlmICh0aGlzICE9PSBjYigpICYmIHRoaXMuZm9jdXMpIHRyeSB7IHJldHVybiB0aGlzLmZvY3VzKCksICExIH0gY2F0Y2ggKGEpIHsgfSB9LCBkZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIiB9LCBibHVyOiB7IHRyaWdnZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMgPT09IGNiKCkgJiYgdGhpcy5ibHVyID8gKHRoaXMuYmx1cigpLCAhMSkgOiB2b2lkIDAgfSwgZGVsZWdhdGVUeXBlOiAiZm9jdXNvdXQiIH0sIGNsaWNrOiB7IHRyaWdnZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG0ubm9kZU5hbWUodGhpcywgImlucHV0IikgJiYgImNoZWNrYm94IiA9PT0gdGhpcy50eXBlICYmIHRoaXMuY2xpY2sgPyAodGhpcy5jbGljaygpLCAhMSkgOiB2b2lkIDAgfSwgX2RlZmF1bHQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBtLm5vZGVOYW1lKGEudGFyZ2V0LCAiYSIpIH0gfSwgYmVmb3JldW5sb2FkOiB7IHBvc3REaXNwYXRjaDogZnVuY3Rpb24gKGEpIHsgdm9pZCAwICE9PSBhLnJlc3VsdCAmJiBhLm9yaWdpbmFsRXZlbnQgJiYgKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGEucmVzdWx0KSB9IH0gfSwgc2ltdWxhdGU6IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHZhciBlID0gbS5leHRlbmQobmV3IG0uRXZlbnQsIGMsIHsgdHlwZTogYSwgaXNTaW11bGF0ZWQ6ICEwLCBvcmlnaW5hbEV2ZW50OiB7fSB9KTsgZCA/IG0uZXZlbnQudHJpZ2dlcihlLCBudWxsLCBiKSA6IG0uZXZlbnQuZGlzcGF0Y2guY2FsbChiLCBlKSwgZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSAmJiBjLnByZXZlbnREZWZhdWx0KCkgfSB9LCBtLnJlbW92ZUV2ZW50ID0geS5yZW1vdmVFdmVudExpc3RlbmVyID8gZnVuY3Rpb24gKGEsIGIsIGMpIHsgYS5yZW1vdmVFdmVudExpc3RlbmVyICYmIGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLCBjLCAhMSkgfSA6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gIm9uIiArIGI7IGEuZGV0YWNoRXZlbnQgJiYgKHR5cGVvZiBhW2RdID09PSBLICYmIChhW2RdID0gbnVsbCksIGEuZGV0YWNoRXZlbnQoZCwgYykpIH0sIG0uRXZlbnQgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0uRXZlbnQgPyAoYSAmJiBhLnR5cGUgPyAodGhpcy5vcmlnaW5hbEV2ZW50ID0gYSwgdGhpcy50eXBlID0gYS50eXBlLCB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGEuZGVmYXVsdFByZXZlbnRlZCB8fCB2b2lkIDAgPT09IGEuZGVmYXVsdFByZXZlbnRlZCAmJiBhLnJldHVyblZhbHVlID09PSAhMSA/IGFiIDogYmIpIDogdGhpcy50eXBlID0gYSwgYiAmJiBtLmV4dGVuZCh0aGlzLCBiKSwgdGhpcy50aW1lU3RhbXAgPSBhICYmIGEudGltZVN0YW1wIHx8IG0ubm93KCksIHZvaWQgKHRoaXNbbS5leHBhbmRvXSA9ICEwKSkgOiBuZXcgbS5FdmVudChhLCBiKSB9LCBtLkV2ZW50LnByb3RvdHlwZSA9IHsgaXNEZWZhdWx0UHJldmVudGVkOiBiYiwgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IGJiLCBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogYmIsIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7IHZhciBhID0gdGhpcy5vcmlnaW5hbEV2ZW50OyB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGFiLCBhICYmIChhLnByZXZlbnREZWZhdWx0ID8gYS5wcmV2ZW50RGVmYXVsdCgpIDogYS5yZXR1cm5WYWx1ZSA9ICExKSB9LCBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHsgdmFyIGEgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7IHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBhYiwgYSAmJiAoYS5zdG9wUHJvcGFnYXRpb24gJiYgYS5zdG9wUHJvcGFnYXRpb24oKSwgYS5jYW5jZWxCdWJibGUgPSAhMCkgfSwgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gdGhpcy5vcmlnaW5hbEV2ZW50OyB0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gYWIsIGEgJiYgYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gJiYgYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwgdGhpcy5zdG9wUHJvcGFnYXRpb24oKSB9IH0sIG0uZWFjaCh7IG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLCBtb3VzZWxlYXZlOiAibW91c2VvdXQiLCBwb2ludGVyZW50ZXI6ICJwb2ludGVyb3ZlciIsIHBvaW50ZXJsZWF2ZTogInBvaW50ZXJvdXQiIH0sIGZ1bmN0aW9uIChhLCBiKSB7IG0uZXZlbnQuc3BlY2lhbFthXSA9IHsgZGVsZWdhdGVUeXBlOiBiLCBiaW5kVHlwZTogYiwgaGFuZGxlOiBmdW5jdGlvbiAoYSkgeyB2YXIgYywgZCA9IHRoaXMsIGUgPSBhLnJlbGF0ZWRUYXJnZXQsIGYgPSBhLmhhbmRsZU9iajsgcmV0dXJuICghZSB8fCBlICE9PSBkICYmICFtLmNvbnRhaW5zKGQsIGUpKSAmJiAoYS50eXBlID0gZi5vcmlnVHlwZSwgYyA9IGYuaGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBhLnR5cGUgPSBiKSwgYyB9IH0gfSksIGsuc3VibWl0QnViYmxlcyB8fCAobS5ldmVudC5zcGVjaWFsLnN1Ym1pdCA9IHsgc2V0dXA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG0ubm9kZU5hbWUodGhpcywgImZvcm0iKSA/ICExIDogdm9pZCBtLmV2ZW50LmFkZCh0aGlzLCAiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IiwgZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnRhcmdldCwgYyA9IG0ubm9kZU5hbWUoYiwgImlucHV0IikgfHwgbS5ub2RlTmFtZShiLCAiYnV0dG9uIikgPyBiLmZvcm0gOiB2b2lkIDA7IGMgJiYgIW0uX2RhdGEoYywgInN1Ym1pdEJ1YmJsZXMiKSAmJiAobS5ldmVudC5hZGQoYywgInN1Ym1pdC5fc3VibWl0IiwgZnVuY3Rpb24gKGEpIHsgYS5fc3VibWl0X2J1YmJsZSA9ICEwIH0pLCBtLl9kYXRhKGMsICJzdWJtaXRCdWJibGVzIiwgITApKSB9KSB9LCBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uIChhKSB7IGEuX3N1Ym1pdF9idWJibGUgJiYgKGRlbGV0ZSBhLl9zdWJtaXRfYnViYmxlLCB0aGlzLnBhcmVudE5vZGUgJiYgIWEuaXNUcmlnZ2VyICYmIG0uZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsIHRoaXMucGFyZW50Tm9kZSwgYSwgITApKSB9LCB0ZWFyZG93bjogZnVuY3Rpb24gKCkgeyByZXR1cm4gbS5ub2RlTmFtZSh0aGlzLCAiZm9ybSIpID8gITEgOiB2b2lkIG0uZXZlbnQucmVtb3ZlKHRoaXMsICIuX3N1Ym1pdCIpIH0gfSksIGsuY2hhbmdlQnViYmxlcyB8fCAobS5ldmVudC5zcGVjaWFsLmNoYW5nZSA9IHsgc2V0dXA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFgudGVzdCh0aGlzLm5vZGVOYW1lKSA/ICgoImNoZWNrYm94IiA9PT0gdGhpcy50eXBlIHx8ICJyYWRpbyIgPT09IHRoaXMudHlwZSkgJiYgKG0uZXZlbnQuYWRkKHRoaXMsICJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24gKGEpIHsgImNoZWNrZWQiID09PSBhLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lICYmICh0aGlzLl9qdXN0X2NoYW5nZWQgPSAhMCkgfSksIG0uZXZlbnQuYWRkKHRoaXMsICJjbGljay5fY2hhbmdlIiwgZnVuY3Rpb24gKGEpIHsgdGhpcy5fanVzdF9jaGFuZ2VkICYmICFhLmlzVHJpZ2dlciAmJiAodGhpcy5fanVzdF9jaGFuZ2VkID0gITEpLCBtLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLCB0aGlzLCBhLCAhMCkgfSkpLCAhMSkgOiB2b2lkIG0uZXZlbnQuYWRkKHRoaXMsICJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIiwgZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnRhcmdldDsgWC50ZXN0KGIubm9kZU5hbWUpICYmICFtLl9kYXRhKGIsICJjaGFuZ2VCdWJibGVzIikgJiYgKG0uZXZlbnQuYWRkKGIsICJjaGFuZ2UuX2NoYW5nZSIsIGZ1bmN0aW9uIChhKSB7ICF0aGlzLnBhcmVudE5vZGUgfHwgYS5pc1NpbXVsYXRlZCB8fCBhLmlzVHJpZ2dlciB8fCBtLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLCB0aGlzLnBhcmVudE5vZGUsIGEsICEwKSB9KSwgbS5fZGF0YShiLCAiY2hhbmdlQnViYmxlcyIsICEwKSkgfSkgfSwgaGFuZGxlOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEudGFyZ2V0OyByZXR1cm4gdGhpcyAhPT0gYiB8fCBhLmlzU2ltdWxhdGVkIHx8IGEuaXNUcmlnZ2VyIHx8ICJyYWRpbyIgIT09IGIudHlwZSAmJiAiY2hlY2tib3giICE9PSBiLnR5cGUgPyBhLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB2b2lkIDAgfSwgdGVhcmRvd246IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG0uZXZlbnQucmVtb3ZlKHRoaXMsICIuX2NoYW5nZSIpLCAhWC50ZXN0KHRoaXMubm9kZU5hbWUpIH0gfSksIGsuZm9jdXNpbkJ1YmJsZXMgfHwgbS5lYWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IGZ1bmN0aW9uIChhKSB7IG0uZXZlbnQuc2ltdWxhdGUoYiwgYS50YXJnZXQsIG0uZXZlbnQuZml4KGEpLCAhMCkgfTsgbS5ldmVudC5zcGVjaWFsW2JdID0geyBzZXR1cDogZnVuY3Rpb24gKCkgeyB2YXIgZCA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLCBlID0gbS5fZGF0YShkLCBiKTsgZSB8fCBkLmFkZEV2ZW50TGlzdGVuZXIoYSwgYywgITApLCBtLl9kYXRhKGQsIGIsIChlIHx8IDApICsgMSkgfSwgdGVhcmRvd246IGZ1bmN0aW9uICgpIHsgdmFyIGQgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywgZSA9IG0uX2RhdGEoZCwgYikgLSAxOyBlID8gbS5fZGF0YShkLCBiLCBlKSA6IChkLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSwgYywgITApLCBtLl9yZW1vdmVEYXRhKGQsIGIpKSB9IH0gfSksIG0uZm4uZXh0ZW5kKHsgb246IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlKSB7IHZhciBmLCBnOyBpZiAoIm9iamVjdCIgPT0gdHlwZW9mIGEpIHsgInN0cmluZyIgIT0gdHlwZW9mIGIgJiYgKGMgPSBjIHx8IGIsIGIgPSB2b2lkIDApOyBmb3IgKGYgaW4gYSkgdGhpcy5vbihmLCBiLCBjLCBhW2ZdLCBlKTsgcmV0dXJuIHRoaXMgfSBpZiAobnVsbCA9PSBjICYmIG51bGwgPT0gZCA/IChkID0gYiwgYyA9IGIgPSB2b2lkIDApIDogbnVsbCA9PSBkICYmICgic3RyaW5nIiA9PSB0eXBlb2YgYiA/IChkID0gYywgYyA9IHZvaWQgMCkgOiAoZCA9IGMsIGMgPSBiLCBiID0gdm9pZCAwKSksIGQgPT09ICExKSBkID0gYmI7IGVsc2UgaWYgKCFkKSByZXR1cm4gdGhpczsgcmV0dXJuIDEgPT09IGUgJiYgKGcgPSBkLCBkID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0oKS5vZmYoYSksIGcuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9LCBkLmd1aWQgPSBnLmd1aWQgfHwgKGcuZ3VpZCA9IG0uZ3VpZCsrKSksIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IG0uZXZlbnQuYWRkKHRoaXMsIGEsIGQsIGMsIGIpIH0pIH0sIG9uZTogZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIHRoaXMub24oYSwgYiwgYywgZCwgMSkgfSwgb2ZmOiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCwgZTsgaWYgKGEgJiYgYS5wcmV2ZW50RGVmYXVsdCAmJiBhLmhhbmRsZU9iaikgcmV0dXJuIGQgPSBhLmhhbmRsZU9iaiwgbShhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZC5uYW1lc3BhY2UgPyBkLm9yaWdUeXBlICsgIi4iICsgZC5uYW1lc3BhY2UgOiBkLm9yaWdUeXBlLCBkLnNlbGVjdG9yLCBkLmhhbmRsZXIpLCB0aGlzOyBpZiAoIm9iamVjdCIgPT0gdHlwZW9mIGEpIHsgZm9yIChlIGluIGEpIHRoaXMub2ZmKGUsIGIsIGFbZV0pOyByZXR1cm4gdGhpcyB9IHJldHVybiAoYiA9PT0gITEgfHwgImZ1bmN0aW9uIiA9PSB0eXBlb2YgYikgJiYgKGMgPSBiLCBiID0gdm9pZCAwKSwgYyA9PT0gITEgJiYgKGMgPSBiYiksIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IG0uZXZlbnQucmVtb3ZlKHRoaXMsIGEsIGMsIGIpIH0pIH0sIHRyaWdnZXI6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBtLmV2ZW50LnRyaWdnZXIoYSwgYiwgdGhpcykgfSkgfSwgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gdGhpc1swXTsgcmV0dXJuIGMgPyBtLmV2ZW50LnRyaWdnZXIoYSwgYiwgYywgITApIDogdm9pZCAwIH0gfSk7IGZ1bmN0aW9uIGRiKGEpIHsgdmFyIGIgPSBlYi5zcGxpdCgifCIpLCBjID0gYS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7IGlmIChjLmNyZWF0ZUVsZW1lbnQpIHdoaWxlIChiLmxlbmd0aCkgYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpOyByZXR1cm4gYyB9IHZhciBlYiA9ICJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIiwgZmIgPSAvIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLCBnYiA9IG5ldyBSZWdFeHAoIjwoPzoiICsgZWIgKyAiKVtcXHMvPl0iLCAiaSIpLCBoYiA9IC9eXHMrLywgaWIgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLCBqYiA9IC88KFtcdzpdKykvLCBrYiA9IC88dGJvZHkvaSwgbGIgPSAvPHwmIz9cdys7LywgbWIgPSAvPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLCBuYiA9IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLCBvYiA9IC9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSwgcGIgPSAvXnRydWVcLyguKikvLCBxYiA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZywgcmIgPSB7IG9wdGlvbjogWzEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjxcL3NlbGVjdD4iXSwgbGVnZW5kOiBbMSwgIjxmaWVsZHNldD4iLCAiPFwvZmllbGRzZXQ+Il0sIGFyZWE6IFsxLCAiPG1hcD4iLCAiPFwvbWFwPiJdLCBwYXJhbTogWzEsICI8b2JqZWN0PiIsICI8XC9vYmplY3Q+Il0sIHRoZWFkOiBbMSwgIjx0YWJsZT4iLCAiPFwvdGFibGU+Il0sIHRyOiBbMiwgIjx0YWJsZT48dGJvZHk+IiwgIjxcL3Rib2R5PjxcL3RhYmxlPiJdLCBjb2w6IFsyLCAiPHRhYmxlPjx0Ym9keT48XC90Ym9keT48Y29sZ3JvdXA+IiwgIjxcL2NvbGdyb3VwPjxcL3RhYmxlPiJdLCB0ZDogWzMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPFwvdHI+PFwvdGJvZHk+PFwvdGFibGU+Il0sIF9kZWZhdWx0OiBrLmh0bWxTZXJpYWxpemUgPyBbMCwgIiIsICIiXSA6IFsxLCAiWDxkaXY+IiwgIjxcL2Rpdj4iXSB9LCBzYiA9IGRiKHkpLCB0YiA9IHNiLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgiZGl2IikpOyByYi5vcHRncm91cCA9IHJiLm9wdGlvbiwgcmIudGJvZHkgPSByYi50Zm9vdCA9IHJiLmNvbGdyb3VwID0gcmIuY2FwdGlvbiA9IHJiLnRoZWFkLCByYi50aCA9IHJiLnRkOyBmdW5jdGlvbiB1YihhLCBiKSB7IHZhciBjLCBkLCBlID0gMCwgZiA9IHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBLID8gYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiIHx8ICIqIikgOiB0eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsICE9PSBLID8gYS5xdWVyeVNlbGVjdG9yQWxsKGIgfHwgIioiKSA6IHZvaWQgMDsgaWYgKCFmKSBmb3IgKGYgPSBbXSwgYyA9IGEuY2hpbGROb2RlcyB8fCBhOyBudWxsICE9IChkID0gY1tlXSkgOyBlKyspICFiIHx8IG0ubm9kZU5hbWUoZCwgYikgPyBmLnB1c2goZCkgOiBtLm1lcmdlKGYsIHViKGQsIGIpKTsgcmV0dXJuIHZvaWQgMCA9PT0gYiB8fCBiICYmIG0ubm9kZU5hbWUoYSwgYikgPyBtLm1lcmdlKFthXSwgZikgOiBmIH0gZnVuY3Rpb24gdmIoYSkgeyBXLnRlc3QoYS50eXBlKSAmJiAoYS5kZWZhdWx0Q2hlY2tlZCA9IGEuY2hlY2tlZCkgfSBmdW5jdGlvbiB3YihhLCBiKSB7IHJldHVybiBtLm5vZGVOYW1lKGEsICJ0YWJsZSIpICYmIG0ubm9kZU5hbWUoMTEgIT09IGIubm9kZVR5cGUgPyBiIDogYi5maXJzdENoaWxkLCAidHIiKSA/IGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0gfHwgYS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSkgOiBhIH0gZnVuY3Rpb24geGIoYSkgeyByZXR1cm4gYS50eXBlID0gKG51bGwgIT09IG0uZmluZC5hdHRyKGEsICJ0eXBlIikpICsgIi8iICsgYS50eXBlLCBhIH0gZnVuY3Rpb24geWIoYSkgeyB2YXIgYiA9IHBiLmV4ZWMoYS50eXBlKTsgcmV0dXJuIGIgPyBhLnR5cGUgPSBiWzFdIDogYS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSwgYSB9IGZ1bmN0aW9uIHpiKGEsIGIpIHsgZm9yICh2YXIgYywgZCA9IDA7IG51bGwgIT0gKGMgPSBhW2RdKSA7IGQrKykgbS5fZGF0YShjLCAiZ2xvYmFsRXZhbCIsICFiIHx8IG0uX2RhdGEoYltkXSwgImdsb2JhbEV2YWwiKSkgfSBmdW5jdGlvbiBBYihhLCBiKSB7IGlmICgxID09PSBiLm5vZGVUeXBlICYmIG0uaGFzRGF0YShhKSkgeyB2YXIgYywgZCwgZSwgZiA9IG0uX2RhdGEoYSksIGcgPSBtLl9kYXRhKGIsIGYpLCBoID0gZi5ldmVudHM7IGlmIChoKSB7IGRlbGV0ZSBnLmhhbmRsZSwgZy5ldmVudHMgPSB7fTsgZm9yIChjIGluIGgpIGZvciAoZCA9IDAsIGUgPSBoW2NdLmxlbmd0aDsgZSA+IGQ7IGQrKykgbS5ldmVudC5hZGQoYiwgYywgaFtjXVtkXSkgfSBnLmRhdGEgJiYgKGcuZGF0YSA9IG0uZXh0ZW5kKHt9LCBnLmRhdGEpKSB9IH0gZnVuY3Rpb24gQmIoYSwgYikgeyB2YXIgYywgZCwgZTsgaWYgKDEgPT09IGIubm9kZVR5cGUpIHsgaWYgKGMgPSBiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksICFrLm5vQ2xvbmVFdmVudCAmJiBiW20uZXhwYW5kb10pIHsgZSA9IG0uX2RhdGEoYik7IGZvciAoZCBpbiBlLmV2ZW50cykgbS5yZW1vdmVFdmVudChiLCBkLCBlLmhhbmRsZSk7IGIucmVtb3ZlQXR0cmlidXRlKG0uZXhwYW5kbykgfSAic2NyaXB0IiA9PT0gYyAmJiBiLnRleHQgIT09IGEudGV4dCA/ICh4YihiKS50ZXh0ID0gYS50ZXh0LCB5YihiKSkgOiAib2JqZWN0IiA9PT0gYyA/IChiLnBhcmVudE5vZGUgJiYgKGIub3V0ZXJIVE1MID0gYS5vdXRlckhUTUwpLCBrLmh0bWw1Q2xvbmUgJiYgYS5pbm5lckhUTUwgJiYgIW0udHJpbShiLmlubmVySFRNTCkgJiYgKGIuaW5uZXJIVE1MID0gYS5pbm5lckhUTUwpKSA6ICJpbnB1dCIgPT09IGMgJiYgVy50ZXN0KGEudHlwZSkgPyAoYi5kZWZhdWx0Q2hlY2tlZCA9IGIuY2hlY2tlZCA9IGEuY2hlY2tlZCwgYi52YWx1ZSAhPT0gYS52YWx1ZSAmJiAoYi52YWx1ZSA9IGEudmFsdWUpKSA6ICJvcHRpb24iID09PSBjID8gYi5kZWZhdWx0U2VsZWN0ZWQgPSBiLnNlbGVjdGVkID0gYS5kZWZhdWx0U2VsZWN0ZWQgOiAoImlucHV0IiA9PT0gYyB8fCAidGV4dGFyZWEiID09PSBjKSAmJiAoYi5kZWZhdWx0VmFsdWUgPSBhLmRlZmF1bHRWYWx1ZSkgfSB9IG0uZXh0ZW5kKHsgY2xvbmU6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkLCBlLCBmLCBnLCBoLCBpID0gbS5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsIGEpOyBpZiAoay5odG1sNUNsb25lIHx8IG0uaXNYTUxEb2MoYSkgfHwgIWdiLnRlc3QoIjwiICsgYS5ub2RlTmFtZSArICI+IikgPyBmID0gYS5jbG9uZU5vZGUoITApIDogKHRiLmlubmVySFRNTCA9IGEub3V0ZXJIVE1MLCB0Yi5yZW1vdmVDaGlsZChmID0gdGIuZmlyc3RDaGlsZCkpLCAhKGsubm9DbG9uZUV2ZW50ICYmIGsubm9DbG9uZUNoZWNrZWQgfHwgMSAhPT0gYS5ub2RlVHlwZSAmJiAxMSAhPT0gYS5ub2RlVHlwZSB8fCBtLmlzWE1MRG9jKGEpKSkgZm9yIChkID0gdWIoZiksIGggPSB1YihhKSwgZyA9IDA7IG51bGwgIT0gKGUgPSBoW2ddKSA7ICsrZykgZFtnXSAmJiBCYihlLCBkW2ddKTsgaWYgKGIpIGlmIChjKSBmb3IgKGggPSBoIHx8IHViKGEpLCBkID0gZCB8fCB1YihmKSwgZyA9IDA7IG51bGwgIT0gKGUgPSBoW2ddKSA7IGcrKykgQWIoZSwgZFtnXSk7IGVsc2UgQWIoYSwgZik7IHJldHVybiBkID0gdWIoZiwgInNjcmlwdCIpLCBkLmxlbmd0aCA+IDAgJiYgemIoZCwgIWkgJiYgdWIoYSwgInNjcmlwdCIpKSwgZCA9IGggPSBlID0gbnVsbCwgZiB9LCBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyBmb3IgKHZhciBlLCBmLCBnLCBoLCBpLCBqLCBsLCBuID0gYS5sZW5ndGgsIG8gPSBkYihiKSwgcCA9IFtdLCBxID0gMDsgbiA+IHE7IHErKykgaWYgKGYgPSBhW3FdLCBmIHx8IDAgPT09IGYpIGlmICgib2JqZWN0IiA9PT0gbS50eXBlKGYpKSBtLm1lcmdlKHAsIGYubm9kZVR5cGUgPyBbZl0gOiBmKTsgZWxzZSBpZiAobGIudGVzdChmKSkgeyBoID0gaCB8fCBvLmFwcGVuZENoaWxkKGIuY3JlYXRlRWxlbWVudCgiZGl2IikpLCBpID0gKGpiLmV4ZWMoZikgfHwgWyIiLCAiIl0pWzFdLnRvTG93ZXJDYXNlKCksIGwgPSByYltpXSB8fCByYi5fZGVmYXVsdCwgaC5pbm5lckhUTUwgPSBsWzFdICsgZi5yZXBsYWNlKGliLCAiPCQxPjwvJDI+IikgKyBsWzJdLCBlID0gbFswXTsgd2hpbGUgKGUtLSkgaCA9IGgubGFzdENoaWxkOyBpZiAoIWsubGVhZGluZ1doaXRlc3BhY2UgJiYgaGIudGVzdChmKSAmJiBwLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShoYi5leGVjKGYpWzBdKSksICFrLnRib2R5KSB7IGYgPSAidGFibGUiICE9PSBpIHx8IGtiLnRlc3QoZikgPyAiPHRhYmxlPiIgIT09IGxbMV0gfHwga2IudGVzdChmKSA/IDAgOiBoIDogaC5maXJzdENoaWxkLCBlID0gZiAmJiBmLmNoaWxkTm9kZXMubGVuZ3RoOyB3aGlsZSAoZS0tKSBtLm5vZGVOYW1lKGogPSBmLmNoaWxkTm9kZXNbZV0sICJ0Ym9keSIpICYmICFqLmNoaWxkTm9kZXMubGVuZ3RoICYmIGYucmVtb3ZlQ2hpbGQoaikgfSBtLm1lcmdlKHAsIGguY2hpbGROb2RlcyksIGgudGV4dENvbnRlbnQgPSAiIjsgd2hpbGUgKGguZmlyc3RDaGlsZCkgaC5yZW1vdmVDaGlsZChoLmZpcnN0Q2hpbGQpOyBoID0gby5sYXN0Q2hpbGQgfSBlbHNlIHAucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTsgaCAmJiBvLnJlbW92ZUNoaWxkKGgpLCBrLmFwcGVuZENoZWNrZWQgfHwgbS5ncmVwKHViKHAsICJpbnB1dCIpLCB2YiksIHEgPSAwOyB3aGlsZSAoZiA9IHBbcSsrXSkgaWYgKCghZCB8fCAtMSA9PT0gbS5pbkFycmF5KGYsIGQpKSAmJiAoZyA9IG0uY29udGFpbnMoZi5vd25lckRvY3VtZW50LCBmKSwgaCA9IHViKG8uYXBwZW5kQ2hpbGQoZiksICJzY3JpcHQiKSwgZyAmJiB6YihoKSwgYykpIHsgZSA9IDA7IHdoaWxlIChmID0gaFtlKytdKSBvYi50ZXN0KGYudHlwZSB8fCAiIikgJiYgYy5wdXNoKGYpIH0gcmV0dXJuIGggPSBudWxsLCBvIH0sIGNsZWFuRGF0YTogZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgZCwgZSwgZiwgZywgaCA9IDAsIGkgPSBtLmV4cGFuZG8sIGogPSBtLmNhY2hlLCBsID0gay5kZWxldGVFeHBhbmRvLCBuID0gbS5ldmVudC5zcGVjaWFsOyBudWxsICE9IChkID0gYVtoXSkgOyBoKyspIGlmICgoYiB8fCBtLmFjY2VwdERhdGEoZCkpICYmIChmID0gZFtpXSwgZyA9IGYgJiYgaltmXSkpIHsgaWYgKGcuZXZlbnRzKSBmb3IgKGUgaW4gZy5ldmVudHMpIG5bZV0gPyBtLmV2ZW50LnJlbW92ZShkLCBlKSA6IG0ucmVtb3ZlRXZlbnQoZCwgZSwgZy5oYW5kbGUpOyBqW2ZdICYmIChkZWxldGUgaltmXSwgbCA/IGRlbGV0ZSBkW2ldIDogdHlwZW9mIGQucmVtb3ZlQXR0cmlidXRlICE9PSBLID8gZC5yZW1vdmVBdHRyaWJ1dGUoaSkgOiBkW2ldID0gbnVsbCwgYy5wdXNoKGYpKSB9IH0gfSksIG0uZm4uZXh0ZW5kKHsgdGV4dDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIFYodGhpcywgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHZvaWQgMCA9PT0gYSA/IG0udGV4dCh0aGlzKSA6IHRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0gJiYgdGhpc1swXS5vd25lckRvY3VtZW50IHx8IHkpLmNyZWF0ZVRleHROb2RlKGEpKSB9LCBudWxsLCBhLCBhcmd1bWVudHMubGVuZ3RoKSB9LCBhcHBlbmQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmdW5jdGlvbiAoYSkgeyBpZiAoMSA9PT0gdGhpcy5ub2RlVHlwZSB8fCAxMSA9PT0gdGhpcy5ub2RlVHlwZSB8fCA5ID09PSB0aGlzLm5vZGVUeXBlKSB7IHZhciBiID0gd2IodGhpcywgYSk7IGIuYXBwZW5kQ2hpbGQoYSkgfSB9KSB9LCBwcmVwZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZnVuY3Rpb24gKGEpIHsgaWYgKDEgPT09IHRoaXMubm9kZVR5cGUgfHwgMTEgPT09IHRoaXMubm9kZVR5cGUgfHwgOSA9PT0gdGhpcy5ub2RlVHlwZSkgeyB2YXIgYiA9IHdiKHRoaXMsIGEpOyBiLmluc2VydEJlZm9yZShhLCBiLmZpcnN0Q2hpbGQpIH0gfSkgfSwgYmVmb3JlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZnVuY3Rpb24gKGEpIHsgdGhpcy5wYXJlbnROb2RlICYmIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSwgdGhpcykgfSkgfSwgYWZ0ZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmdW5jdGlvbiAoYSkgeyB0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLCB0aGlzLm5leHRTaWJsaW5nKSB9KSB9LCByZW1vdmU6IGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGMsIGQgPSBhID8gbS5maWx0ZXIoYSwgdGhpcykgOiB0aGlzLCBlID0gMDsgbnVsbCAhPSAoYyA9IGRbZV0pIDsgZSsrKSBiIHx8IDEgIT09IGMubm9kZVR5cGUgfHwgbS5jbGVhbkRhdGEodWIoYykpLCBjLnBhcmVudE5vZGUgJiYgKGIgJiYgbS5jb250YWlucyhjLm93bmVyRG9jdW1lbnQsIGMpICYmIHpiKHViKGMsICJzY3JpcHQiKSksIGMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKSk7IHJldHVybiB0aGlzIH0sIGVtcHR5OiBmdW5jdGlvbiAoKSB7IGZvciAodmFyIGEsIGIgPSAwOyBudWxsICE9IChhID0gdGhpc1tiXSkgOyBiKyspIHsgMSA9PT0gYS5ub2RlVHlwZSAmJiBtLmNsZWFuRGF0YSh1YihhLCAhMSkpOyB3aGlsZSAoYS5maXJzdENoaWxkKSBhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7IGEub3B0aW9ucyAmJiBtLm5vZGVOYW1lKGEsICJzZWxlY3QiKSAmJiAoYS5vcHRpb25zLmxlbmd0aCA9IDApIH0gcmV0dXJuIHRoaXMgfSwgY2xvbmU6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhID0gbnVsbCA9PSBhID8gITEgOiBhLCBiID0gbnVsbCA9PSBiID8gYSA6IGIsIHRoaXMubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG0uY2xvbmUodGhpcywgYSwgYikgfSkgfSwgaHRtbDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIFYodGhpcywgZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSB0aGlzWzBdIHx8IHt9LCBjID0gMCwgZCA9IHRoaXMubGVuZ3RoOyBpZiAodm9pZCAwID09PSBhKSByZXR1cm4gMSA9PT0gYi5ub2RlVHlwZSA/IGIuaW5uZXJIVE1MLnJlcGxhY2UoZmIsICIiKSA6IHZvaWQgMDsgaWYgKCEoInN0cmluZyIgIT0gdHlwZW9mIGEgfHwgbWIudGVzdChhKSB8fCAhay5odG1sU2VyaWFsaXplICYmIGdiLnRlc3QoYSkgfHwgIWsubGVhZGluZ1doaXRlc3BhY2UgJiYgaGIudGVzdChhKSB8fCByYlsoamIuZXhlYyhhKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNhc2UoKV0pKSB7IGEgPSBhLnJlcGxhY2UoaWIsICI8JDE+PC8kMj4iKTsgdHJ5IHsgZm9yICg7IGQgPiBjOyBjKyspIGIgPSB0aGlzW2NdIHx8IHt9LCAxID09PSBiLm5vZGVUeXBlICYmIChtLmNsZWFuRGF0YSh1YihiLCAhMSkpLCBiLmlubmVySFRNTCA9IGEpOyBiID0gMCB9IGNhdGNoIChlKSB7IH0gfSBiICYmIHRoaXMuZW1wdHkoKS5hcHBlbmQoYSkgfSwgbnVsbCwgYSwgYXJndW1lbnRzLmxlbmd0aCkgfSwgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uICgpIHsgdmFyIGEgPSBhcmd1bWVudHNbMF07IHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZnVuY3Rpb24gKGIpIHsgYSA9IHRoaXMucGFyZW50Tm9kZSwgbS5jbGVhbkRhdGEodWIodGhpcykpLCBhICYmIGEucmVwbGFjZUNoaWxkKGIsIHRoaXMpIH0pLCBhICYmIChhLmxlbmd0aCB8fCBhLm5vZGVUeXBlKSA/IHRoaXMgOiB0aGlzLnJlbW92ZSgpIH0sIGRldGFjaDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMucmVtb3ZlKGEsICEwKSB9LCBkb21NYW5pcDogZnVuY3Rpb24gKGEsIGIpIHsgYSA9IGUuYXBwbHkoW10sIGEpOyB2YXIgYywgZCwgZiwgZywgaCwgaSwgaiA9IDAsIGwgPSB0aGlzLmxlbmd0aCwgbiA9IHRoaXMsIG8gPSBsIC0gMSwgcCA9IGFbMF0sIHEgPSBtLmlzRnVuY3Rpb24ocCk7IGlmIChxIHx8IGwgPiAxICYmICJzdHJpbmciID09IHR5cGVvZiBwICYmICFrLmNoZWNrQ2xvbmUgJiYgbmIudGVzdChwKSkgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoYykgeyB2YXIgZCA9IG4uZXEoYyk7IHEgJiYgKGFbMF0gPSBwLmNhbGwodGhpcywgYywgZC5odG1sKCkpKSwgZC5kb21NYW5pcChhLCBiKSB9KTsgaWYgKGwgJiYgKGkgPSBtLmJ1aWxkRnJhZ21lbnQoYSwgdGhpc1swXS5vd25lckRvY3VtZW50LCAhMSwgdGhpcyksIGMgPSBpLmZpcnN0Q2hpbGQsIDEgPT09IGkuY2hpbGROb2Rlcy5sZW5ndGggJiYgKGkgPSBjKSwgYykpIHsgZm9yIChnID0gbS5tYXAodWIoaSwgInNjcmlwdCIpLCB4YiksIGYgPSBnLmxlbmd0aDsgbCA+IGo7IGorKykgZCA9IGksIGogIT09IG8gJiYgKGQgPSBtLmNsb25lKGQsICEwLCAhMCksIGYgJiYgbS5tZXJnZShnLCB1YihkLCAic2NyaXB0IikpKSwgYi5jYWxsKHRoaXNbal0sIGQsIGopOyBpZiAoZikgZm9yIChoID0gZ1tnLmxlbmd0aCAtIDFdLm93bmVyRG9jdW1lbnQsIG0ubWFwKGcsIHliKSwgaiA9IDA7IGYgPiBqOyBqKyspIGQgPSBnW2pdLCBvYi50ZXN0KGQudHlwZSB8fCAiIikgJiYgIW0uX2RhdGEoZCwgImdsb2JhbEV2YWwiKSAmJiBtLmNvbnRhaW5zKGgsIGQpICYmIChkLnNyYyA/IG0uX2V2YWxVcmwgJiYgbS5fZXZhbFVybChkLnNyYykgOiBtLmdsb2JhbEV2YWwoKGQudGV4dCB8fCBkLnRleHRDb250ZW50IHx8IGQuaW5uZXJIVE1MIHx8ICIiKS5yZXBsYWNlKHFiLCAiIikpKTsgaSA9IGMgPSBudWxsIH0gcmV0dXJuIHRoaXMgfSB9KSwgbS5lYWNoKHsgYXBwZW5kVG86ICJhcHBlbmQiLCBwcmVwZW5kVG86ICJwcmVwZW5kIiwgaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsIHJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIgfSwgZnVuY3Rpb24gKGEsIGIpIHsgbS5mblthXSA9IGZ1bmN0aW9uIChhKSB7IGZvciAodmFyIGMsIGQgPSAwLCBlID0gW10sIGcgPSBtKGEpLCBoID0gZy5sZW5ndGggLSAxOyBoID49IGQ7IGQrKykgYyA9IGQgPT09IGggPyB0aGlzIDogdGhpcy5jbG9uZSghMCksIG0oZ1tkXSlbYl0oYyksIGYuYXBwbHkoZSwgYy5nZXQoKSk7IHJldHVybiB0aGlzLnB1c2hTdGFjayhlKSB9IH0pOyB2YXIgQ2IsIERiID0ge307IGZ1bmN0aW9uIEViKGIsIGMpIHsgdmFyIGQsIGUgPSBtKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSwgZiA9IGEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUgJiYgKGQgPSBhLmdldERlZmF1bHRDb21wdXRlZFN0eWxlKGVbMF0pKSA/IGQuZGlzcGxheSA6IG0uY3NzKGVbMF0sICJkaXNwbGF5Iik7IHJldHVybiBlLmRldGFjaCgpLCBmIH0gZnVuY3Rpb24gRmIoYSkgeyB2YXIgYiA9IHksIGMgPSBEYlthXTsgcmV0dXJuIGMgfHwgKGMgPSBFYihhLCBiKSwgIm5vbmUiICE9PSBjICYmIGMgfHwgKENiID0gKENiIHx8IG0oIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKSkuYXBwZW5kVG8oYi5kb2N1bWVudEVsZW1lbnQpLCBiID0gKENiWzBdLmNvbnRlbnRXaW5kb3cgfHwgQ2JbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCwgYi53cml0ZSgpLCBiLmNsb3NlKCksIGMgPSBFYihhLCBiKSwgQ2IuZGV0YWNoKCkpLCBEYlthXSA9IGMpLCBjIH0gIWZ1bmN0aW9uICgpIHsgdmFyIGE7IGsuc2hyaW5rV3JhcEJsb2NrcyA9IGZ1bmN0aW9uICgpIHsgaWYgKG51bGwgIT0gYSkgcmV0dXJuIGE7IGEgPSAhMTsgdmFyIGIsIGMsIGQ7IHJldHVybiBjID0geS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLCBjICYmIGMuc3R5bGUgPyAoYiA9IHkuY3JlYXRlRWxlbWVudCgiZGl2IiksIGQgPSB5LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBkLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLCBjLmFwcGVuZENoaWxkKGQpLmFwcGVuZENoaWxkKGIpLCB0eXBlb2YgYi5zdHlsZS56b29tICE9PSBLICYmIChiLnN0eWxlLmNzc1RleHQgPSAiLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsIGIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGggPSAiNXB4IiwgYSA9IDMgIT09IGIub2Zmc2V0V2lkdGgpLCBjLnJlbW92ZUNoaWxkKGQpLCBhKSA6IHZvaWQgMCB9IH0oKTsgdmFyIEdiID0gL15tYXJnaW4vLCBIYiA9IG5ldyBSZWdFeHAoIl4oIiArIFMgKyAiKSg/IXB4KVthLXolXSskIiwgImkiKSwgSWIsIEpiLCBLYiA9IC9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLzsgYS5nZXRDb21wdXRlZFN0eWxlID8gKEliID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGEsIG51bGwpIH0sIEpiID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUsIGYsIGcsIGggPSBhLnN0eWxlOyByZXR1cm4gYyA9IGMgfHwgSWIoYSksIGcgPSBjID8gYy5nZXRQcm9wZXJ0eVZhbHVlKGIpIHx8IGNbYl0gOiB2b2lkIDAsIGMgJiYgKCIiICE9PSBnIHx8IG0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LCBhKSB8fCAoZyA9IG0uc3R5bGUoYSwgYikpLCBIYi50ZXN0KGcpICYmIEdiLnRlc3QoYikgJiYgKGQgPSBoLndpZHRoLCBlID0gaC5taW5XaWR0aCwgZiA9IGgubWF4V2lkdGgsIGgubWluV2lkdGggPSBoLm1heFdpZHRoID0gaC53aWR0aCA9IGcsIGcgPSBjLndpZHRoLCBoLndpZHRoID0gZCwgaC5taW5XaWR0aCA9IGUsIGgubWF4V2lkdGggPSBmKSksIHZvaWQgMCA9PT0gZyA/IGcgOiBnICsgIiIgfSkgOiB5LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgJiYgKEliID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuY3VycmVudFN0eWxlIH0sIEpiID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUsIGYsIGcsIGggPSBhLnN0eWxlOyByZXR1cm4gYyA9IGMgfHwgSWIoYSksIGcgPSBjID8gY1tiXSA6IHZvaWQgMCwgbnVsbCA9PSBnICYmIGggJiYgaFtiXSAmJiAoZyA9IGhbYl0pLCBIYi50ZXN0KGcpICYmICFLYi50ZXN0KGIpICYmIChkID0gaC5sZWZ0LCBlID0gYS5ydW50aW1lU3R5bGUsIGYgPSBlICYmIGUubGVmdCwgZiAmJiAoZS5sZWZ0ID0gYS5jdXJyZW50U3R5bGUubGVmdCksIGgubGVmdCA9ICJmb250U2l6ZSIgPT09IGIgPyAiMWVtIiA6IGcsIGcgPSBoLnBpeGVsTGVmdCArICJweCIsIGgubGVmdCA9IGQsIGYgJiYgKGUubGVmdCA9IGYpKSwgdm9pZCAwID09PSBnID8gZyA6IGcgKyAiIiB8fCAiYXV0byIgfSk7IGZ1bmN0aW9uIExiKGEsIGIpIHsgcmV0dXJuIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHZhciBjID0gYSgpOyBpZiAobnVsbCAhPSBjKSByZXR1cm4gYyA/IHZvaWQgZGVsZXRlIHRoaXMuZ2V0IDogKHRoaXMuZ2V0ID0gYikuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9IH0gfSAhZnVuY3Rpb24gKCkgeyB2YXIgYiwgYywgZCwgZSwgZiwgZywgaDsgaWYgKGIgPSB5LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBiLmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFibGU+PFwvdGFibGU+PGEgaHJlZj0nL2EnPmE8XC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsIGQgPSBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sIGMgPSBkICYmIGQuc3R5bGUpIHsgYy5jc3NUZXh0ID0gImZsb2F0OmxlZnQ7b3BhY2l0eTouNSIsIGsub3BhY2l0eSA9ICIwLjUiID09PSBjLm9wYWNpdHksIGsuY3NzRmxvYXQgPSAhIWMuY3NzRmxvYXQsIGIuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiY29udGVudC1ib3giLCBiLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiIiwgay5jbGVhckNsb25lU3R5bGUgPSAiY29udGVudC1ib3giID09PSBiLnN0eWxlLmJhY2tncm91bmRDbGlwLCBrLmJveFNpemluZyA9ICIiID09PSBjLmJveFNpemluZyB8fCAiIiA9PT0gYy5Nb3pCb3hTaXppbmcgfHwgIiIgPT09IGMuV2Via2l0Qm94U2l6aW5nLCBtLmV4dGVuZChrLCB7IHJlbGlhYmxlSGlkZGVuT2Zmc2V0czogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbCA9PSBnICYmIGkoKSwgZyB9LCBib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbCA9PSBmICYmIGkoKSwgZiB9LCBwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsID09IGUgJiYgaSgpLCBlIH0sIHJlbGlhYmxlTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGwgPT0gaCAmJiBpKCksIGggfSB9KTsgZnVuY3Rpb24gaSgpIHsgdmFyIGIsIGMsIGQsIGk7IGMgPSB5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sIGMgJiYgYy5zdHlsZSAmJiAoYiA9IHkuY3JlYXRlRWxlbWVudCgiZGl2IiksIGQgPSB5LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBkLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLCBjLmFwcGVuZENoaWxkKGQpLmFwcGVuZENoaWxkKGIpLCBiLnN0eWxlLmNzc1RleHQgPSAiLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxJTt0b3A6MSU7Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGUiLCBlID0gZiA9ICExLCBoID0gITAsIGEuZ2V0Q29tcHV0ZWRTdHlsZSAmJiAoZSA9ICIxJSIgIT09IChhLmdldENvbXB1dGVkU3R5bGUoYiwgbnVsbCkgfHwge30pLnRvcCwgZiA9ICI0cHgiID09PSAoYS5nZXRDb21wdXRlZFN0eWxlKGIsIG51bGwpIHx8IHsgd2lkdGg6ICI0cHgiIH0pLndpZHRoLCBpID0gYi5hcHBlbmRDaGlsZCh5LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwgaS5zdHlsZS5jc3NUZXh0ID0gYi5zdHlsZS5jc3NUZXh0ID0gIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsIGkuc3R5bGUubWFyZ2luUmlnaHQgPSBpLnN0eWxlLndpZHRoID0gIjAiLCBiLnN0eWxlLndpZHRoID0gIjFweCIsIGggPSAhcGFyc2VGbG9hdCgoYS5nZXRDb21wdXRlZFN0eWxlKGksIG51bGwpIHx8IHt9KS5tYXJnaW5SaWdodCkpLCBiLmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZD48XC90ZD48dGQ+dDxcL3RkPjxcL3RyPjxcL3RhYmxlPiIsIGkgPSBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLCBpWzBdLnN0eWxlLmNzc1RleHQgPSAibWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2Rpc3BsYXk6bm9uZSIsIGcgPSAwID09PSBpWzBdLm9mZnNldEhlaWdodCwgZyAmJiAoaVswXS5zdHlsZS5kaXNwbGF5ID0gIiIsIGlbMV0uc3R5bGUuZGlzcGxheSA9ICJub25lIiwgZyA9IDAgPT09IGlbMF0ub2Zmc2V0SGVpZ2h0KSwgYy5yZW1vdmVDaGlsZChkKSkgfSB9IH0oKSwgbS5zd2FwID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgdmFyIGUsIGYsIGcgPSB7fTsgZm9yIChmIGluIGIpIGdbZl0gPSBhLnN0eWxlW2ZdLCBhLnN0eWxlW2ZdID0gYltmXTsgZSA9IGMuYXBwbHkoYSwgZCB8fCBbXSk7IGZvciAoZiBpbiBiKSBhLnN0eWxlW2ZdID0gZ1tmXTsgcmV0dXJuIGUgfTsgdmFyIE1iID0gL2FscGhhXChbXildKlwpL2ksIE5iID0gL29wYWNpdHlccyo9XHMqKFteKV0qKS8sIE9iID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLCBQYiA9IG5ldyBSZWdFeHAoIl4oIiArIFMgKyAiKSguKikkIiwgImkiKSwgUWIgPSBuZXcgUmVnRXhwKCJeKFsrLV0pPSgiICsgUyArICIpIiwgImkiKSwgUmIgPSB7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiwgZGlzcGxheTogImJsb2NrIiB9LCBTYiA9IHsgbGV0dGVyU3BhY2luZzogIjAiLCBmb250V2VpZ2h0OiAiNDAwIiB9LCBUYiA9IFsiV2Via2l0IiwgIk8iLCAiTW96IiwgIm1zIl07IGZ1bmN0aW9uIFViKGEsIGIpIHsgaWYgKGIgaW4gYSkgcmV0dXJuIGI7IHZhciBjID0gYi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGIuc2xpY2UoMSksIGQgPSBiLCBlID0gVGIubGVuZ3RoOyB3aGlsZSAoZS0tKSBpZiAoYiA9IFRiW2VdICsgYywgYiBpbiBhKSByZXR1cm4gYjsgcmV0dXJuIGQgfSBmdW5jdGlvbiBWYihhLCBiKSB7IGZvciAodmFyIGMsIGQsIGUsIGYgPSBbXSwgZyA9IDAsIGggPSBhLmxlbmd0aDsgaCA+IGc7IGcrKykgZCA9IGFbZ10sIGQuc3R5bGUgJiYgKGZbZ10gPSBtLl9kYXRhKGQsICJvbGRkaXNwbGF5IiksIGMgPSBkLnN0eWxlLmRpc3BsYXksIGIgPyAoZltnXSB8fCAibm9uZSIgIT09IGMgfHwgKGQuc3R5bGUuZGlzcGxheSA9ICIiKSwgIiIgPT09IGQuc3R5bGUuZGlzcGxheSAmJiBVKGQpICYmIChmW2ddID0gbS5fZGF0YShkLCAib2xkZGlzcGxheSIsIEZiKGQubm9kZU5hbWUpKSkpIDogKGUgPSBVKGQpLCAoYyAmJiAibm9uZSIgIT09IGMgfHwgIWUpICYmIG0uX2RhdGEoZCwgIm9sZGRpc3BsYXkiLCBlID8gYyA6IG0uY3NzKGQsICJkaXNwbGF5IikpKSk7IGZvciAoZyA9IDA7IGggPiBnOyBnKyspIGQgPSBhW2ddLCBkLnN0eWxlICYmIChiICYmICJub25lIiAhPT0gZC5zdHlsZS5kaXNwbGF5ICYmICIiICE9PSBkLnN0eWxlLmRpc3BsYXkgfHwgKGQuc3R5bGUuZGlzcGxheSA9IGIgPyBmW2ddIHx8ICIiIDogIm5vbmUiKSk7IHJldHVybiBhIH0gZnVuY3Rpb24gV2IoYSwgYiwgYykgeyB2YXIgZCA9IFBiLmV4ZWMoYik7IHJldHVybiBkID8gTWF0aC5tYXgoMCwgZFsxXSAtIChjIHx8IDApKSArIChkWzJdIHx8ICJweCIpIDogYiB9IGZ1bmN0aW9uIFhiKGEsIGIsIGMsIGQsIGUpIHsgZm9yICh2YXIgZiA9IGMgPT09IChkID8gImJvcmRlciIgOiAiY29udGVudCIpID8gNCA6ICJ3aWR0aCIgPT09IGIgPyAxIDogMCwgZyA9IDA7IDQgPiBmOyBmICs9IDIpICJtYXJnaW4iID09PSBjICYmIChnICs9IG0uY3NzKGEsIGMgKyBUW2ZdLCAhMCwgZSkpLCBkID8gKCJjb250ZW50IiA9PT0gYyAmJiAoZyAtPSBtLmNzcyhhLCAicGFkZGluZyIgKyBUW2ZdLCAhMCwgZSkpLCAibWFyZ2luIiAhPT0gYyAmJiAoZyAtPSBtLmNzcyhhLCAiYm9yZGVyIiArIFRbZl0gKyAiV2lkdGgiLCAhMCwgZSkpKSA6IChnICs9IG0uY3NzKGEsICJwYWRkaW5nIiArIFRbZl0sICEwLCBlKSwgInBhZGRpbmciICE9PSBjICYmIChnICs9IG0uY3NzKGEsICJib3JkZXIiICsgVFtmXSArICJXaWR0aCIsICEwLCBlKSkpOyByZXR1cm4gZyB9IGZ1bmN0aW9uIFliKGEsIGIsIGMpIHsgdmFyIGQgPSAhMCwgZSA9ICJ3aWR0aCIgPT09IGIgPyBhLm9mZnNldFdpZHRoIDogYS5vZmZzZXRIZWlnaHQsIGYgPSBJYihhKSwgZyA9IGsuYm94U2l6aW5nICYmICJib3JkZXItYm94IiA9PT0gbS5jc3MoYSwgImJveFNpemluZyIsICExLCBmKTsgaWYgKDAgPj0gZSB8fCBudWxsID09IGUpIHsgaWYgKGUgPSBKYihhLCBiLCBmKSwgKDAgPiBlIHx8IG51bGwgPT0gZSkgJiYgKGUgPSBhLnN0eWxlW2JdKSwgSGIudGVzdChlKSkgcmV0dXJuIGU7IGQgPSBnICYmIChrLmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZSA9PT0gYS5zdHlsZVtiXSksIGUgPSBwYXJzZUZsb2F0KGUpIHx8IDAgfSByZXR1cm4gZSArIFhiKGEsIGIsIGMgfHwgKGcgPyAiYm9yZGVyIiA6ICJjb250ZW50IiksIGQsIGYpICsgInB4IiB9IG0uZXh0ZW5kKHsgY3NzSG9va3M6IHsgb3BhY2l0eTogeyBnZXQ6IGZ1bmN0aW9uIChhLCBiKSB7IGlmIChiKSB7IHZhciBjID0gSmIoYSwgIm9wYWNpdHkiKTsgcmV0dXJuICIiID09PSBjID8gIjEiIDogYyB9IH0gfSB9LCBjc3NOdW1iZXI6IHsgY29sdW1uQ291bnQ6ICEwLCBmaWxsT3BhY2l0eTogITAsIGZsZXhHcm93OiAhMCwgZmxleFNocmluazogITAsIGZvbnRXZWlnaHQ6ICEwLCBsaW5lSGVpZ2h0OiAhMCwgb3BhY2l0eTogITAsIG9yZGVyOiAhMCwgb3JwaGFuczogITAsIHdpZG93czogITAsIHpJbmRleDogITAsIHpvb206ICEwIH0sIGNzc1Byb3BzOiB7ICJmbG9hdCI6IGsuY3NzRmxvYXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxvYXQiIH0sIHN0eWxlOiBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyBpZiAoYSAmJiAzICE9PSBhLm5vZGVUeXBlICYmIDggIT09IGEubm9kZVR5cGUgJiYgYS5zdHlsZSkgeyB2YXIgZSwgZiwgZywgaCA9IG0uY2FtZWxDYXNlKGIpLCBpID0gYS5zdHlsZTsgaWYgKGIgPSBtLmNzc1Byb3BzW2hdIHx8IChtLmNzc1Byb3BzW2hdID0gVWIoaSwgaCkpLCBnID0gbS5jc3NIb29rc1tiXSB8fCBtLmNzc0hvb2tzW2hdLCB2b2lkIDAgPT09IGMpIHJldHVybiBnICYmICJnZXQiIGluIGcgJiYgdm9pZCAwICE9PSAoZSA9IGcuZ2V0KGEsICExLCBkKSkgPyBlIDogaVtiXTsgaWYgKGYgPSB0eXBlb2YgYywgInN0cmluZyIgPT09IGYgJiYgKGUgPSBRYi5leGVjKGMpKSAmJiAoYyA9IChlWzFdICsgMSkgKiBlWzJdICsgcGFyc2VGbG9hdChtLmNzcyhhLCBiKSksIGYgPSAibnVtYmVyIiksIG51bGwgIT0gYyAmJiBjID09PSBjICYmICgibnVtYmVyIiAhPT0gZiB8fCBtLmNzc051bWJlcltoXSB8fCAoYyArPSAicHgiKSwgay5jbGVhckNsb25lU3R5bGUgfHwgIiIgIT09IGMgfHwgMCAhPT0gYi5pbmRleE9mKCJiYWNrZ3JvdW5kIikgfHwgKGlbYl0gPSAiaW5oZXJpdCIpLCAhKGcgJiYgInNldCIgaW4gZyAmJiB2b2lkIDAgPT09IChjID0gZy5zZXQoYSwgYywgZCkpKSkpIHRyeSB7IGlbYl0gPSBjIH0gY2F0Y2ggKGopIHsgfSB9IH0sIGNzczogZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgdmFyIGUsIGYsIGcsIGggPSBtLmNhbWVsQ2FzZShiKTsgcmV0dXJuIGIgPSBtLmNzc1Byb3BzW2hdIHx8IChtLmNzc1Byb3BzW2hdID0gVWIoYS5zdHlsZSwgaCkpLCBnID0gbS5jc3NIb29rc1tiXSB8fCBtLmNzc0hvb2tzW2hdLCBnICYmICJnZXQiIGluIGcgJiYgKGYgPSBnLmdldChhLCAhMCwgYykpLCB2b2lkIDAgPT09IGYgJiYgKGYgPSBKYihhLCBiLCBkKSksICJub3JtYWwiID09PSBmICYmIGIgaW4gU2IgJiYgKGYgPSBTYltiXSksICIiID09PSBjIHx8IGMgPyAoZSA9IHBhcnNlRmxvYXQoZiksIGMgPT09ICEwIHx8IG0uaXNOdW1lcmljKGUpID8gZSB8fCAwIDogZikgOiBmIH0gfSksIG0uZWFjaChbImhlaWdodCIsICJ3aWR0aCJdLCBmdW5jdGlvbiAoYSwgYikgeyBtLmNzc0hvb2tzW2JdID0geyBnZXQ6IGZ1bmN0aW9uIChhLCBjLCBkKSB7IHJldHVybiBjID8gT2IudGVzdChtLmNzcyhhLCAiZGlzcGxheSIpKSAmJiAwID09PSBhLm9mZnNldFdpZHRoID8gbS5zd2FwKGEsIFJiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBZYihhLCBiLCBkKSB9KSA6IFliKGEsIGIsIGQpIDogdm9pZCAwIH0sIHNldDogZnVuY3Rpb24gKGEsIGMsIGQpIHsgdmFyIGUgPSBkICYmIEliKGEpOyByZXR1cm4gV2IoYSwgYywgZCA/IFhiKGEsIGIsIGQsIGsuYm94U2l6aW5nICYmICJib3JkZXItYm94IiA9PT0gbS5jc3MoYSwgImJveFNpemluZyIsICExLCBlKSwgZSkgOiAwKSB9IH0gfSksIGsub3BhY2l0eSB8fCAobS5jc3NIb29rcy5vcGFjaXR5ID0geyBnZXQ6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBOYi50ZXN0KChiICYmIGEuY3VycmVudFN0eWxlID8gYS5jdXJyZW50U3R5bGUuZmlsdGVyIDogYS5zdHlsZS5maWx0ZXIpIHx8ICIiKSA/IC4wMSAqIHBhcnNlRmxvYXQoUmVnRXhwLiQxKSArICIiIDogYiA/ICIxIiA6ICIiIH0sIHNldDogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSBhLnN0eWxlLCBkID0gYS5jdXJyZW50U3R5bGUsIGUgPSBtLmlzTnVtZXJpYyhiKSA/ICJhbHBoYShvcGFjaXR5PSIgKyAxMDAgKiBiICsgIikiIDogIiIsIGYgPSBkICYmIGQuZmlsdGVyIHx8IGMuZmlsdGVyIHx8ICIiOyBjLnpvb20gPSAxLCAoYiA+PSAxIHx8ICIiID09PSBiKSAmJiAiIiA9PT0gbS50cmltKGYucmVwbGFjZShNYiwgIiIpKSAmJiBjLnJlbW92ZUF0dHJpYnV0ZSAmJiAoYy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpLCAiIiA9PT0gYiB8fCBkICYmICFkLmZpbHRlcikgfHwgKGMuZmlsdGVyID0gTWIudGVzdChmKSA/IGYucmVwbGFjZShNYiwgZSkgOiBmICsgIiAiICsgZSkgfSB9KSwgbS5jc3NIb29rcy5tYXJnaW5SaWdodCA9IExiKGsucmVsaWFibGVNYXJnaW5SaWdodCwgZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIgPyBtLnN3YXAoYSwgeyBkaXNwbGF5OiAiaW5saW5lLWJsb2NrIiB9LCBKYiwgW2EsICJtYXJnaW5SaWdodCJdKSA6IHZvaWQgMCB9KSwgbS5lYWNoKHsgbWFyZ2luOiAiIiwgcGFkZGluZzogIiIsIGJvcmRlcjogIldpZHRoIiB9LCBmdW5jdGlvbiAoYSwgYikgeyBtLmNzc0hvb2tzW2EgKyBiXSA9IHsgZXhwYW5kOiBmdW5jdGlvbiAoYykgeyBmb3IgKHZhciBkID0gMCwgZSA9IHt9LCBmID0gInN0cmluZyIgPT0gdHlwZW9mIGMgPyBjLnNwbGl0KCIgIikgOiBbY107IDQgPiBkOyBkKyspIGVbYSArIFRbZF0gKyBiXSA9IGZbZF0gfHwgZltkIC0gMl0gfHwgZlswXTsgcmV0dXJuIGUgfSB9LCBHYi50ZXN0KGEpIHx8IChtLmNzc0hvb2tzW2EgKyBiXS5zZXQgPSBXYikgfSksIG0uZm4uZXh0ZW5kKHsgY3NzOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gVih0aGlzLCBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCwgZSwgZiA9IHt9LCBnID0gMDsgaWYgKG0uaXNBcnJheShiKSkgeyBmb3IgKGQgPSBJYihhKSwgZSA9IGIubGVuZ3RoOyBlID4gZzsgZysrKSBmW2JbZ11dID0gbS5jc3MoYSwgYltnXSwgITEsIGQpOyByZXR1cm4gZiB9IHJldHVybiB2b2lkIDAgIT09IGMgPyBtLnN0eWxlKGEsIGIsIGMpIDogbS5jc3MoYSwgYikgfSwgYSwgYiwgYXJndW1lbnRzLmxlbmd0aCA+IDEpIH0sIHNob3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFZiKHRoaXMsICEwKSB9LCBoaWRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBWYih0aGlzKSB9LCB0b2dnbGU6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAiYm9vbGVhbiIgPT0gdHlwZW9mIGEgPyBhID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IFUodGhpcykgPyBtKHRoaXMpLnNob3coKSA6IG0odGhpcykuaGlkZSgpIH0pIH0gfSk7IGZ1bmN0aW9uIFpiKGEsIGIsIGMsIGQsIGUpIHsgcmV0dXJuIG5ldyBaYi5wcm90b3R5cGUuaW5pdChhLCBiLCBjLCBkLCBlKSB9IG0uVHdlZW4gPSBaYiwgWmIucHJvdG90eXBlID0gew0KICAgICAgICBjb25zdHJ1Y3RvcjogWmIsIGluaXQ6IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlLCBmKSB7DQogICAgICAgICAgICB0aGlzLmVsZW0gPSBhLCB0aGlzLnByb3AgPSBjLCB0aGlzLmVhc2luZyA9IGUgfHwgInN3aW5nIiwgdGhpcy5vcHRpb25zID0gYiwgdGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKSwgdGhpcy5lbmQgPSBkLCB0aGlzLnVuaXQgPSBmIHx8IChtLmNzc051bWJlcltjXSA/ICIiIDogInB4IikNCiAgICAgICAgfSwgY3VyOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gWmIucHJvcEhvb2tzW3RoaXMucHJvcF07IHJldHVybiBhICYmIGEuZ2V0ID8gYS5nZXQodGhpcykgOiBaYi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpIH0sIHJ1bjogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMgPSBaYi5wcm9wSG9va3NbdGhpcy5wcm9wXTsgcmV0dXJuIHRoaXMucG9zID0gYiA9IHRoaXMub3B0aW9ucy5kdXJhdGlvbiA/IG0uZWFzaW5nW3RoaXMuZWFzaW5nXShhLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBhLCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24pIDogYSwgdGhpcy5ub3cgPSAodGhpcy5lbmQgLSB0aGlzLnN0YXJ0KSAqIGIgKyB0aGlzLnN0YXJ0LCB0aGlzLm9wdGlvbnMuc3RlcCAmJiB0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMpLCBjICYmIGMuc2V0ID8gYy5zZXQodGhpcykgOiBaYi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLCB0aGlzIH0NCiAgICB9LCBaYi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBaYi5wcm90b3R5cGUsIFpiLnByb3BIb29rcyA9IHsgX2RlZmF1bHQ6IHsgZ2V0OiBmdW5jdGlvbiAoYSkgeyB2YXIgYjsgcmV0dXJuIG51bGwgPT0gYS5lbGVtW2EucHJvcF0gfHwgYS5lbGVtLnN0eWxlICYmIG51bGwgIT0gYS5lbGVtLnN0eWxlW2EucHJvcF0gPyAoYiA9IG0uY3NzKGEuZWxlbSwgYS5wcm9wLCAiIiksIGIgJiYgImF1dG8iICE9PSBiID8gYiA6IDApIDogYS5lbGVtW2EucHJvcF0gfSwgc2V0OiBmdW5jdGlvbiAoYSkgeyBtLmZ4LnN0ZXBbYS5wcm9wXSA/IG0uZnguc3RlcFthLnByb3BdKGEpIDogYS5lbGVtLnN0eWxlICYmIChudWxsICE9IGEuZWxlbS5zdHlsZVttLmNzc1Byb3BzW2EucHJvcF1dIHx8IG0uY3NzSG9va3NbYS5wcm9wXSkgPyBtLnN0eWxlKGEuZWxlbSwgYS5wcm9wLCBhLm5vdyArIGEudW5pdCkgOiBhLmVsZW1bYS5wcm9wXSA9IGEubm93IH0gfSB9LCBaYi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gWmIucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7IHNldDogZnVuY3Rpb24gKGEpIHsgYS5lbGVtLm5vZGVUeXBlICYmIGEuZWxlbS5wYXJlbnROb2RlICYmIChhLmVsZW1bYS5wcm9wXSA9IGEubm93KSB9IH0sIG0uZWFzaW5nID0geyBsaW5lYXI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhIH0sIHN3aW5nOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gLjUgLSBNYXRoLmNvcyhhICogTWF0aC5QSSkgLyAyIH0gfSwgbS5meCA9IFpiLnByb3RvdHlwZS5pbml0LCBtLmZ4LnN0ZXAgPSB7fTsgdmFyICRiLCBfYiwgYWMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sIGJjID0gbmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiICsgUyArICIpKFthLXolXSopJCIsICJpIiksIGNjID0gL3F1ZXVlSG9va3MkLywgZGMgPSBbaWNdLCBlYyA9IHsgIioiOiBbZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSB0aGlzLmNyZWF0ZVR3ZWVuKGEsIGIpLCBkID0gYy5jdXIoKSwgZSA9IGJjLmV4ZWMoYiksIGYgPSBlICYmIGVbM10gfHwgKG0uY3NzTnVtYmVyW2FdID8gIiIgOiAicHgiKSwgZyA9IChtLmNzc051bWJlclthXSB8fCAicHgiICE9PSBmICYmICtkKSAmJiBiYy5leGVjKG0uY3NzKGMuZWxlbSwgYSkpLCBoID0gMSwgaSA9IDIwOyBpZiAoZyAmJiBnWzNdICE9PSBmKSB7IGYgPSBmIHx8IGdbM10sIGUgPSBlIHx8IFtdLCBnID0gK2QgfHwgMTsgZG8gaCA9IGggfHwgIi41IiwgZyAvPSBoLCBtLnN0eWxlKGMuZWxlbSwgYSwgZyArIGYpOyB3aGlsZSAoaCAhPT0gKGggPSBjLmN1cigpIC8gZCkgJiYgMSAhPT0gaCAmJiAtLWkpIH0gcmV0dXJuIGUgJiYgKGcgPSBjLnN0YXJ0ID0gK2cgfHwgK2QgfHwgMCwgYy51bml0ID0gZiwgYy5lbmQgPSBlWzFdID8gZyArIChlWzFdICsgMSkgKiBlWzJdIDogK2VbMl0pLCBjIH1dIH07IGZ1bmN0aW9uIGZjKCkgeyByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICRiID0gdm9pZCAwIH0pLCAkYiA9IG0ubm93KCkgfSBmdW5jdGlvbiBnYyhhLCBiKSB7IHZhciBjLCBkID0geyBoZWlnaHQ6IGEgfSwgZSA9IDA7IGZvciAoYiA9IGIgPyAxIDogMDsgNCA+IGU7IGUgKz0gMiAtIGIpIGMgPSBUW2VdLCBkWyJtYXJnaW4iICsgY10gPSBkWyJwYWRkaW5nIiArIGNdID0gYTsgcmV0dXJuIGIgJiYgKGQub3BhY2l0eSA9IGQud2lkdGggPSBhKSwgZCB9IGZ1bmN0aW9uIGhjKGEsIGIsIGMpIHsgZm9yICh2YXIgZCwgZSA9IChlY1tiXSB8fCBbXSkuY29uY2F0KGVjWyIqIl0pLCBmID0gMCwgZyA9IGUubGVuZ3RoOyBnID4gZjsgZisrKSBpZiAoZCA9IGVbZl0uY2FsbChjLCBiLCBhKSkgcmV0dXJuIGQgfSBmdW5jdGlvbiBpYyhhLCBiLCBjKSB7IHZhciBkLCBlLCBmLCBnLCBoLCBpLCBqLCBsLCBuID0gdGhpcywgbyA9IHt9LCBwID0gYS5zdHlsZSwgcSA9IGEubm9kZVR5cGUgJiYgVShhKSwgciA9IG0uX2RhdGEoYSwgImZ4c2hvdyIpOyBjLnF1ZXVlIHx8IChoID0gbS5fcXVldWVIb29rcyhhLCAiZngiKSwgbnVsbCA9PSBoLnVucXVldWVkICYmIChoLnVucXVldWVkID0gMCwgaSA9IGguZW1wdHkuZmlyZSwgaC5lbXB0eS5maXJlID0gZnVuY3Rpb24gKCkgeyBoLnVucXVldWVkIHx8IGkoKSB9KSwgaC51bnF1ZXVlZCsrLCBuLmFsd2F5cyhmdW5jdGlvbiAoKSB7IG4uYWx3YXlzKGZ1bmN0aW9uICgpIHsgaC51bnF1ZXVlZC0tLCBtLnF1ZXVlKGEsICJmeCIpLmxlbmd0aCB8fCBoLmVtcHR5LmZpcmUoKSB9KSB9KSksIDEgPT09IGEubm9kZVR5cGUgJiYgKCJoZWlnaHQiIGluIGIgfHwgIndpZHRoIiBpbiBiKSAmJiAoYy5vdmVyZmxvdyA9IFtwLm92ZXJmbG93LCBwLm92ZXJmbG93WCwgcC5vdmVyZmxvd1ldLCBqID0gbS5jc3MoYSwgImRpc3BsYXkiKSwgbCA9ICJub25lIiA9PT0gaiA/IG0uX2RhdGEoYSwgIm9sZGRpc3BsYXkiKSB8fCBGYihhLm5vZGVOYW1lKSA6IGosICJpbmxpbmUiID09PSBsICYmICJub25lIiA9PT0gbS5jc3MoYSwgImZsb2F0IikgJiYgKGsuaW5saW5lQmxvY2tOZWVkc0xheW91dCAmJiAiaW5saW5lIiAhPT0gRmIoYS5ub2RlTmFtZSkgPyBwLnpvb20gPSAxIDogcC5kaXNwbGF5ID0gImlubGluZS1ibG9jayIpKSwgYy5vdmVyZmxvdyAmJiAocC5vdmVyZmxvdyA9ICJoaWRkZW4iLCBrLnNocmlua1dyYXBCbG9ja3MoKSB8fCBuLmFsd2F5cyhmdW5jdGlvbiAoKSB7IHAub3ZlcmZsb3cgPSBjLm92ZXJmbG93WzBdLCBwLm92ZXJmbG93WCA9IGMub3ZlcmZsb3dbMV0sIHAub3ZlcmZsb3dZID0gYy5vdmVyZmxvd1syXSB9KSk7IGZvciAoZCBpbiBiKSBpZiAoZSA9IGJbZF0sIGFjLmV4ZWMoZSkpIHsgaWYgKGRlbGV0ZSBiW2RdLCBmID0gZiB8fCAidG9nZ2xlIiA9PT0gZSwgZSA9PT0gKHEgPyAiaGlkZSIgOiAic2hvdyIpKSB7IGlmICgic2hvdyIgIT09IGUgfHwgIXIgfHwgdm9pZCAwID09PSByW2RdKSBjb250aW51ZTsgcSA9ICEwIH0gb1tkXSA9IHIgJiYgcltkXSB8fCBtLnN0eWxlKGEsIGQpIH0gZWxzZSBqID0gdm9pZCAwOyBpZiAobS5pc0VtcHR5T2JqZWN0KG8pKSAiaW5saW5lIiA9PT0gKCJub25lIiA9PT0gaiA/IEZiKGEubm9kZU5hbWUpIDogaikgJiYgKHAuZGlzcGxheSA9IGopOyBlbHNlIHsgciA/ICJoaWRkZW4iIGluIHIgJiYgKHEgPSByLmhpZGRlbikgOiByID0gbS5fZGF0YShhLCAiZnhzaG93Iiwge30pLCBmICYmIChyLmhpZGRlbiA9ICFxKSwgcSA/IG0oYSkuc2hvdygpIDogbi5kb25lKGZ1bmN0aW9uICgpIHsgbShhKS5oaWRlKCkgfSksIG4uZG9uZShmdW5jdGlvbiAoKSB7IHZhciBiOyBtLl9yZW1vdmVEYXRhKGEsICJmeHNob3ciKTsgZm9yIChiIGluIG8pIG0uc3R5bGUoYSwgYiwgb1tiXSkgfSk7IGZvciAoZCBpbiBvKSBnID0gaGMocSA/IHJbZF0gOiAwLCBkLCBuKSwgZCBpbiByIHx8IChyW2RdID0gZy5zdGFydCwgcSAmJiAoZy5lbmQgPSBnLnN0YXJ0LCBnLnN0YXJ0ID0gIndpZHRoIiA9PT0gZCB8fCAiaGVpZ2h0IiA9PT0gZCA/IDEgOiAwKSkgfSB9IGZ1bmN0aW9uIGpjKGEsIGIpIHsgdmFyIGMsIGQsIGUsIGYsIGc7IGZvciAoYyBpbiBhKSBpZiAoZCA9IG0uY2FtZWxDYXNlKGMpLCBlID0gYltkXSwgZiA9IGFbY10sIG0uaXNBcnJheShmKSAmJiAoZSA9IGZbMV0sIGYgPSBhW2NdID0gZlswXSksIGMgIT09IGQgJiYgKGFbZF0gPSBmLCBkZWxldGUgYVtjXSksIGcgPSBtLmNzc0hvb2tzW2RdLCBnICYmICJleHBhbmQiIGluIGcpIHsgZiA9IGcuZXhwYW5kKGYpLCBkZWxldGUgYVtkXTsgZm9yIChjIGluIGYpIGMgaW4gYSB8fCAoYVtjXSA9IGZbY10sIGJbY10gPSBlKSB9IGVsc2UgYltkXSA9IGUgfSBmdW5jdGlvbiBrYyhhLCBiLCBjKSB7IHZhciBkLCBlLCBmID0gMCwgZyA9IGRjLmxlbmd0aCwgaCA9IG0uRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24gKCkgeyBkZWxldGUgaS5lbGVtIH0pLCBpID0gZnVuY3Rpb24gKCkgeyBpZiAoZSkgcmV0dXJuICExOyBmb3IgKHZhciBiID0gJGIgfHwgZmMoKSwgYyA9IE1hdGgubWF4KDAsIGouc3RhcnRUaW1lICsgai5kdXJhdGlvbiAtIGIpLCBkID0gYyAvIGouZHVyYXRpb24gfHwgMCwgZiA9IDEgLSBkLCBnID0gMCwgaSA9IGoudHdlZW5zLmxlbmd0aDsgaSA+IGc7IGcrKykgai50d2VlbnNbZ10ucnVuKGYpOyByZXR1cm4gaC5ub3RpZnlXaXRoKGEsIFtqLCBmLCBjXSksIDEgPiBmICYmIGkgPyBjIDogKGgucmVzb2x2ZVdpdGgoYSwgW2pdKSwgITEpIH0sIGogPSBoLnByb21pc2UoeyBlbGVtOiBhLCBwcm9wczogbS5leHRlbmQoe30sIGIpLCBvcHRzOiBtLmV4dGVuZCghMCwgeyBzcGVjaWFsRWFzaW5nOiB7fSB9LCBjKSwgb3JpZ2luYWxQcm9wZXJ0aWVzOiBiLCBvcmlnaW5hbE9wdGlvbnM6IGMsIHN0YXJ0VGltZTogJGIgfHwgZmMoKSwgZHVyYXRpb246IGMuZHVyYXRpb24sIHR3ZWVuczogW10sIGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiAoYiwgYykgeyB2YXIgZCA9IG0uVHdlZW4oYSwgai5vcHRzLCBiLCBjLCBqLm9wdHMuc3BlY2lhbEVhc2luZ1tiXSB8fCBqLm9wdHMuZWFzaW5nKTsgcmV0dXJuIGoudHdlZW5zLnB1c2goZCksIGQgfSwgc3RvcDogZnVuY3Rpb24gKGIpIHsgdmFyIGMgPSAwLCBkID0gYiA/IGoudHdlZW5zLmxlbmd0aCA6IDA7IGlmIChlKSByZXR1cm4gdGhpczsgZm9yIChlID0gITA7IGQgPiBjOyBjKyspIGoudHdlZW5zW2NdLnJ1bigxKTsgcmV0dXJuIGIgPyBoLnJlc29sdmVXaXRoKGEsIFtqLCBiXSkgOiBoLnJlamVjdFdpdGgoYSwgW2osIGJdKSwgdGhpcyB9IH0pLCBrID0gai5wcm9wczsgZm9yIChqYyhrLCBqLm9wdHMuc3BlY2lhbEVhc2luZykgOyBnID4gZjsgZisrKSBpZiAoZCA9IGRjW2ZdLmNhbGwoaiwgYSwgaywgai5vcHRzKSkgcmV0dXJuIGQ7IHJldHVybiBtLm1hcChrLCBoYywgaiksIG0uaXNGdW5jdGlvbihqLm9wdHMuc3RhcnQpICYmIGoub3B0cy5zdGFydC5jYWxsKGEsIGopLCBtLmZ4LnRpbWVyKG0uZXh0ZW5kKGksIHsgZWxlbTogYSwgYW5pbTogaiwgcXVldWU6IGoub3B0cy5xdWV1ZSB9KSksIGoucHJvZ3Jlc3Moai5vcHRzLnByb2dyZXNzKS5kb25lKGoub3B0cy5kb25lLCBqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKSB9IG0uQW5pbWF0aW9uID0gbS5leHRlbmQoa2MsIHsgdHdlZW5lcjogZnVuY3Rpb24gKGEsIGIpIHsgbS5pc0Z1bmN0aW9uKGEpID8gKGIgPSBhLCBhID0gWyIqIl0pIDogYSA9IGEuc3BsaXQoIiAiKTsgZm9yICh2YXIgYywgZCA9IDAsIGUgPSBhLmxlbmd0aDsgZSA+IGQ7IGQrKykgYyA9IGFbZF0sIGVjW2NdID0gZWNbY10gfHwgW10sIGVjW2NdLnVuc2hpZnQoYikgfSwgcHJlZmlsdGVyOiBmdW5jdGlvbiAoYSwgYikgeyBiID8gZGMudW5zaGlmdChhKSA6IGRjLnB1c2goYSkgfSB9KSwgbS5zcGVlZCA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gYSAmJiAib2JqZWN0IiA9PSB0eXBlb2YgYSA/IG0uZXh0ZW5kKHt9LCBhKSA6IHsgY29tcGxldGU6IGMgfHwgIWMgJiYgYiB8fCBtLmlzRnVuY3Rpb24oYSkgJiYgYSwgZHVyYXRpb246IGEsIGVhc2luZzogYyAmJiBiIHx8IGIgJiYgIW0uaXNGdW5jdGlvbihiKSAmJiBiIH07IHJldHVybiBkLmR1cmF0aW9uID0gbS5meC5vZmYgPyAwIDogIm51bWJlciIgPT0gdHlwZW9mIGQuZHVyYXRpb24gPyBkLmR1cmF0aW9uIDogZC5kdXJhdGlvbiBpbiBtLmZ4LnNwZWVkcyA/IG0uZnguc3BlZWRzW2QuZHVyYXRpb25dIDogbS5meC5zcGVlZHMuX2RlZmF1bHQsIChudWxsID09IGQucXVldWUgfHwgZC5xdWV1ZSA9PT0gITApICYmIChkLnF1ZXVlID0gImZ4IiksIGQub2xkID0gZC5jb21wbGV0ZSwgZC5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsgbS5pc0Z1bmN0aW9uKGQub2xkKSAmJiBkLm9sZC5jYWxsKHRoaXMpLCBkLnF1ZXVlICYmIG0uZGVxdWV1ZSh0aGlzLCBkLnF1ZXVlKSB9LCBkIH0sIG0uZm4uZXh0ZW5kKHsgZmFkZVRvOiBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gdGhpcy5maWx0ZXIoVSkuY3NzKCJvcGFjaXR5IiwgMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoeyBvcGFjaXR5OiBiIH0sIGEsIGMsIGQpIH0sIGFuaW1hdGU6IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHZhciBlID0gbS5pc0VtcHR5T2JqZWN0KGEpLCBmID0gbS5zcGVlZChiLCBjLCBkKSwgZyA9IGZ1bmN0aW9uICgpIHsgdmFyIGIgPSBrYyh0aGlzLCBtLmV4dGVuZCh7fSwgYSksIGYpOyAoZSB8fCBtLl9kYXRhKHRoaXMsICJmaW5pc2giKSkgJiYgYi5zdG9wKCEwKSB9OyByZXR1cm4gZy5maW5pc2ggPSBnLCBlIHx8IGYucXVldWUgPT09ICExID8gdGhpcy5lYWNoKGcpIDogdGhpcy5xdWV1ZShmLnF1ZXVlLCBnKSB9LCBzdG9wOiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5zdG9wOyBkZWxldGUgYS5zdG9wLCBiKGMpIH07IHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgYSAmJiAoYyA9IGIsIGIgPSBhLCBhID0gdm9pZCAwKSwgYiAmJiBhICE9PSAhMSAmJiB0aGlzLnF1ZXVlKGEgfHwgImZ4IiwgW10pLCB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgYiA9ICEwLCBlID0gbnVsbCAhPSBhICYmIGEgKyAicXVldWVIb29rcyIsIGYgPSBtLnRpbWVycywgZyA9IG0uX2RhdGEodGhpcyk7IGlmIChlKSBnW2VdICYmIGdbZV0uc3RvcCAmJiBkKGdbZV0pOyBlbHNlIGZvciAoZSBpbiBnKSBnW2VdICYmIGdbZV0uc3RvcCAmJiBjYy50ZXN0KGUpICYmIGQoZ1tlXSk7IGZvciAoZSA9IGYubGVuZ3RoOyBlLS07KSBmW2VdLmVsZW0gIT09IHRoaXMgfHwgbnVsbCAhPSBhICYmIGZbZV0ucXVldWUgIT09IGEgfHwgKGZbZV0uYW5pbS5zdG9wKGMpLCBiID0gITEsIGYuc3BsaWNlKGUsIDEpKTsgKGIgfHwgIWMpICYmIG0uZGVxdWV1ZSh0aGlzLCBhKSB9KSB9LCBmaW5pc2g6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhICE9PSAhMSAmJiAoYSA9IGEgfHwgImZ4IiksIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBiLCBjID0gbS5fZGF0YSh0aGlzKSwgZCA9IGNbYSArICJxdWV1ZSJdLCBlID0gY1thICsgInF1ZXVlSG9va3MiXSwgZiA9IG0udGltZXJzLCBnID0gZCA/IGQubGVuZ3RoIDogMDsgZm9yIChjLmZpbmlzaCA9ICEwLCBtLnF1ZXVlKHRoaXMsIGEsIFtdKSwgZSAmJiBlLnN0b3AgJiYgZS5zdG9wLmNhbGwodGhpcywgITApLCBiID0gZi5sZW5ndGg7IGItLTspIGZbYl0uZWxlbSA9PT0gdGhpcyAmJiBmW2JdLnF1ZXVlID09PSBhICYmIChmW2JdLmFuaW0uc3RvcCghMCksIGYuc3BsaWNlKGIsIDEpKTsgZm9yIChiID0gMDsgZyA+IGI7IGIrKykgZFtiXSAmJiBkW2JdLmZpbmlzaCAmJiBkW2JdLmZpbmlzaC5jYWxsKHRoaXMpOyBkZWxldGUgYy5maW5pc2ggfSkgfSB9KSwgbS5lYWNoKFsidG9nZ2xlIiwgInNob3ciLCAiaGlkZSJdLCBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IG0uZm5bYl07IG0uZm5bYl0gPSBmdW5jdGlvbiAoYSwgZCwgZSkgeyByZXR1cm4gbnVsbCA9PSBhIHx8ICJib29sZWFuIiA9PSB0eXBlb2YgYSA/IGMuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRoaXMuYW5pbWF0ZShnYyhiLCAhMCksIGEsIGQsIGUpIH0gfSksIG0uZWFjaCh7IHNsaWRlRG93bjogZ2MoInNob3ciKSwgc2xpZGVVcDogZ2MoImhpZGUiKSwgc2xpZGVUb2dnbGU6IGdjKCJ0b2dnbGUiKSwgZmFkZUluOiB7IG9wYWNpdHk6ICJzaG93IiB9LCBmYWRlT3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9LCBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0gfSwgZnVuY3Rpb24gKGEsIGIpIHsgbS5mblthXSA9IGZ1bmN0aW9uIChhLCBjLCBkKSB7IHJldHVybiB0aGlzLmFuaW1hdGUoYiwgYSwgYywgZCkgfSB9KSwgbS50aW1lcnMgPSBbXSwgbS5meC50aWNrID0gZnVuY3Rpb24gKCkgeyB2YXIgYSwgYiA9IG0udGltZXJzLCBjID0gMDsgZm9yICgkYiA9IG0ubm93KCkgOyBjIDwgYi5sZW5ndGg7IGMrKykgYSA9IGJbY10sIGEoKSB8fCBiW2NdICE9PSBhIHx8IGIuc3BsaWNlKGMtLSwgMSk7IGIubGVuZ3RoIHx8IG0uZnguc3RvcCgpLCAkYiA9IHZvaWQgMCB9LCBtLmZ4LnRpbWVyID0gZnVuY3Rpb24gKGEpIHsgbS50aW1lcnMucHVzaChhKSwgYSgpID8gbS5meC5zdGFydCgpIDogbS50aW1lcnMucG9wKCkgfSwgbS5meC5pbnRlcnZhbCA9IDEzLCBtLmZ4LnN0YXJ0ID0gZnVuY3Rpb24gKCkgeyBfYiB8fCAoX2IgPSBzZXRJbnRlcnZhbChtLmZ4LnRpY2ssIG0uZnguaW50ZXJ2YWwpKSB9LCBtLmZ4LnN0b3AgPSBmdW5jdGlvbiAoKSB7IGNsZWFySW50ZXJ2YWwoX2IpLCBfYiA9IG51bGwgfSwgbS5meC5zcGVlZHMgPSB7IHNsb3c6IDYwMCwgZmFzdDogMjAwLCBfZGVmYXVsdDogNDAwIH0sIG0uZm4uZGVsYXkgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSA9IG0uZnggPyBtLmZ4LnNwZWVkc1thXSB8fCBhIDogYSwgYiA9IGIgfHwgImZ4IiwgdGhpcy5xdWV1ZShiLCBmdW5jdGlvbiAoYiwgYykgeyB2YXIgZCA9IHNldFRpbWVvdXQoYiwgYSk7IGMuc3RvcCA9IGZ1bmN0aW9uICgpIHsgY2xlYXJUaW1lb3V0KGQpIH0gfSkgfSwgZnVuY3Rpb24gKCkgeyB2YXIgYSwgYiwgYywgZCwgZTsgYiA9IHkuY3JlYXRlRWxlbWVudCgiZGl2IiksIGIuc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCAidCIpLCBiLmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFibGU+PFwvdGFibGU+PGEgaHJlZj0nL2EnPmE8XC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsIGQgPSBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sIGMgPSB5LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLCBlID0gYy5hcHBlbmRDaGlsZCh5LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSwgYSA9IGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sIGQuc3R5bGUuY3NzVGV4dCA9ICJ0b3A6MXB4Iiwgay5nZXRTZXRBdHRyaWJ1dGUgPSAidCIgIT09IGIuY2xhc3NOYW1lLCBrLnN0eWxlID0gL3RvcC8udGVzdChkLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksIGsuaHJlZk5vcm1hbGl6ZWQgPSAiL2EiID09PSBkLmdldEF0dHJpYnV0ZSgiaHJlZiIpLCBrLmNoZWNrT24gPSAhIWEudmFsdWUsIGsub3B0U2VsZWN0ZWQgPSBlLnNlbGVjdGVkLCBrLmVuY3R5cGUgPSAhIXkuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsIGMuZGlzYWJsZWQgPSAhMCwgay5vcHREaXNhYmxlZCA9ICFlLmRpc2FibGVkLCBhID0geS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLCBhLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiIiksIGsuaW5wdXQgPSAiIiA9PT0gYS5nZXRBdHRyaWJ1dGUoInZhbHVlIiksIGEudmFsdWUgPSAidCIsIGEuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInJhZGlvIiksIGsucmFkaW9WYWx1ZSA9ICJ0IiA9PT0gYS52YWx1ZSB9KCk7IHZhciBsYyA9IC9cci9nOyBtLmZuLmV4dGVuZCh7IHZhbDogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMsIGQsIGUgPSB0aGlzWzBdOyB7IGlmIChhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZCA9IG0uaXNGdW5jdGlvbihhKSwgdGhpcy5lYWNoKGZ1bmN0aW9uIChjKSB7IHZhciBlOyAxID09PSB0aGlzLm5vZGVUeXBlICYmIChlID0gZCA/IGEuY2FsbCh0aGlzLCBjLCBtKHRoaXMpLnZhbCgpKSA6IGEsIG51bGwgPT0gZSA/IGUgPSAiIiA6ICJudW1iZXIiID09IHR5cGVvZiBlID8gZSArPSAiIiA6IG0uaXNBcnJheShlKSAmJiAoZSA9IG0ubWFwKGUsIGZ1bmN0aW9uIChhKSB7IHJldHVybiBudWxsID09IGEgPyAiIiA6IGEgKyAiIiB9KSksIGIgPSBtLnZhbEhvb2tzW3RoaXMudHlwZV0gfHwgbS52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLCBiICYmICJzZXQiIGluIGIgJiYgdm9pZCAwICE9PSBiLnNldCh0aGlzLCBlLCAidmFsdWUiKSB8fCAodGhpcy52YWx1ZSA9IGUpKSB9KTsgaWYgKGUpIHJldHVybiBiID0gbS52YWxIb29rc1tlLnR5cGVdIHx8IG0udmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSwgYiAmJiAiZ2V0IiBpbiBiICYmIHZvaWQgMCAhPT0gKGMgPSBiLmdldChlLCAidmFsdWUiKSkgPyBjIDogKGMgPSBlLnZhbHVlLCAic3RyaW5nIiA9PSB0eXBlb2YgYyA/IGMucmVwbGFjZShsYywgIiIpIDogbnVsbCA9PSBjID8gIiIgOiBjKSB9IH0gfSksIG0uZXh0ZW5kKHsgdmFsSG9va3M6IHsgb3B0aW9uOiB7IGdldDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBtLmZpbmQuYXR0cihhLCAidmFsdWUiKTsgcmV0dXJuIG51bGwgIT0gYiA/IGIgOiBtLnRyaW0obS50ZXh0KGEpKSB9IH0sIHNlbGVjdDogeyBnZXQ6IGZ1bmN0aW9uIChhKSB7IGZvciAodmFyIGIsIGMsIGQgPSBhLm9wdGlvbnMsIGUgPSBhLnNlbGVjdGVkSW5kZXgsIGYgPSAic2VsZWN0LW9uZSIgPT09IGEudHlwZSB8fCAwID4gZSwgZyA9IGYgPyBudWxsIDogW10sIGggPSBmID8gZSArIDEgOiBkLmxlbmd0aCwgaSA9IDAgPiBlID8gaCA6IGYgPyBlIDogMDsgaCA+IGk7IGkrKykgaWYgKGMgPSBkW2ldLCAhKCFjLnNlbGVjdGVkICYmIGkgIT09IGUgfHwgKGsub3B0RGlzYWJsZWQgPyBjLmRpc2FibGVkIDogbnVsbCAhPT0gYy5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpIHx8IGMucGFyZW50Tm9kZS5kaXNhYmxlZCAmJiBtLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwgIm9wdGdyb3VwIikpKSB7IGlmIChiID0gbShjKS52YWwoKSwgZikgcmV0dXJuIGI7IGcucHVzaChiKSB9IHJldHVybiBnIH0sIHNldDogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQsIGUgPSBhLm9wdGlvbnMsIGYgPSBtLm1ha2VBcnJheShiKSwgZyA9IGUubGVuZ3RoOyB3aGlsZSAoZy0tKSBpZiAoZCA9IGVbZ10sIG0uaW5BcnJheShtLnZhbEhvb2tzLm9wdGlvbi5nZXQoZCksIGYpID49IDApIHRyeSB7IGQuc2VsZWN0ZWQgPSBjID0gITAgfSBjYXRjaCAoaCkgeyBkLnNjcm9sbEhlaWdodCB9IGVsc2UgZC5zZWxlY3RlZCA9ICExOyByZXR1cm4gYyB8fCAoYS5zZWxlY3RlZEluZGV4ID0gLTEpLCBlIH0gfSB9IH0pLCBtLmVhY2goWyJyYWRpbyIsICJjaGVja2JveCJdLCBmdW5jdGlvbiAoKSB7IG0udmFsSG9va3NbdGhpc10gPSB7IHNldDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIG0uaXNBcnJheShiKSA/IGEuY2hlY2tlZCA9IG0uaW5BcnJheShtKGEpLnZhbCgpLCBiKSA+PSAwIDogdm9pZCAwIH0gfSwgay5jaGVja09uIHx8IChtLnZhbEhvb2tzW3RoaXNdLmdldCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBudWxsID09PSBhLmdldEF0dHJpYnV0ZSgidmFsdWUiKSA/ICJvbiIgOiBhLnZhbHVlIH0pIH0pOyB2YXIgbWMsIG5jLCBvYyA9IG0uZXhwci5hdHRySGFuZGxlLCBwYyA9IC9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2ksIHFjID0gay5nZXRTZXRBdHRyaWJ1dGUsIHJjID0gay5pbnB1dDsgbS5mbi5leHRlbmQoeyBhdHRyOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gVih0aGlzLCBtLmF0dHIsIGEsIGIsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9LCByZW1vdmVBdHRyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgbS5yZW1vdmVBdHRyKHRoaXMsIGEpIH0pIH0gfSksIG0uZXh0ZW5kKHsgYXR0cjogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUsIGYgPSBhLm5vZGVUeXBlOyBpZiAoYSAmJiAzICE9PSBmICYmIDggIT09IGYgJiYgMiAhPT0gZikgcmV0dXJuIHR5cGVvZiBhLmdldEF0dHJpYnV0ZSA9PT0gSyA/IG0ucHJvcChhLCBiLCBjKSA6ICgxID09PSBmICYmIG0uaXNYTUxEb2MoYSkgfHwgKGIgPSBiLnRvTG93ZXJDYXNlKCksIGQgPSBtLmF0dHJIb29rc1tiXSB8fCAobS5leHByLm1hdGNoLmJvb2wudGVzdChiKSA/IG5jIDogbWMpKSwgdm9pZCAwID09PSBjID8gZCAmJiAiZ2V0IiBpbiBkICYmIG51bGwgIT09IChlID0gZC5nZXQoYSwgYikpID8gZSA6IChlID0gbS5maW5kLmF0dHIoYSwgYiksIG51bGwgPT0gZSA/IHZvaWQgMCA6IGUpIDogbnVsbCAhPT0gYyA/IGQgJiYgInNldCIgaW4gZCAmJiB2b2lkIDAgIT09IChlID0gZC5zZXQoYSwgYywgYikpID8gZSA6IChhLnNldEF0dHJpYnV0ZShiLCBjICsgIiIpLCBjKSA6IHZvaWQgbS5yZW1vdmVBdHRyKGEsIGIpKSB9LCByZW1vdmVBdHRyOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCwgZSA9IDAsIGYgPSBiICYmIGIubWF0Y2goRSk7IGlmIChmICYmIDEgPT09IGEubm9kZVR5cGUpIHdoaWxlIChjID0gZltlKytdKSBkID0gbS5wcm9wRml4W2NdIHx8IGMsIG0uZXhwci5tYXRjaC5ib29sLnRlc3QoYykgPyByYyAmJiBxYyB8fCAhcGMudGVzdChjKSA/IGFbZF0gPSAhMSA6IGFbbS5jYW1lbENhc2UoImRlZmF1bHQtIiArIGMpXSA9IGFbZF0gPSAhMSA6IG0uYXR0cihhLCBjLCAiIiksIGEucmVtb3ZlQXR0cmlidXRlKHFjID8gYyA6IGQpIH0sIGF0dHJIb29rczogeyB0eXBlOiB7IHNldDogZnVuY3Rpb24gKGEsIGIpIHsgaWYgKCFrLnJhZGlvVmFsdWUgJiYgInJhZGlvIiA9PT0gYiAmJiBtLm5vZGVOYW1lKGEsICJpbnB1dCIpKSB7IHZhciBjID0gYS52YWx1ZTsgcmV0dXJuIGEuc2V0QXR0cmlidXRlKCJ0eXBlIiwgYiksIGMgJiYgKGEudmFsdWUgPSBjKSwgYiB9IH0gfSB9IH0pLCBuYyA9IHsgc2V0OiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gYiA9PT0gITEgPyBtLnJlbW92ZUF0dHIoYSwgYykgOiByYyAmJiBxYyB8fCAhcGMudGVzdChjKSA/IGEuc2V0QXR0cmlidXRlKCFxYyAmJiBtLnByb3BGaXhbY10gfHwgYywgYykgOiBhW20uY2FtZWxDYXNlKCJkZWZhdWx0LSIgKyBjKV0gPSBhW2NdID0gITAsIGMgfSB9LCBtLmVhY2gobS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksIGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gb2NbYl0gfHwgbS5maW5kLmF0dHI7IG9jW2JdID0gcmMgJiYgcWMgfHwgIXBjLnRlc3QoYikgPyBmdW5jdGlvbiAoYSwgYiwgZCkgeyB2YXIgZSwgZjsgcmV0dXJuIGQgfHwgKGYgPSBvY1tiXSwgb2NbYl0gPSBlLCBlID0gbnVsbCAhPSBjKGEsIGIsIGQpID8gYi50b0xvd2VyQ2FzZSgpIDogbnVsbCwgb2NbYl0gPSBmKSwgZSB9IDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGMgPyB2b2lkIDAgOiBhW20uY2FtZWxDYXNlKCJkZWZhdWx0LSIgKyBiKV0gPyBiLnRvTG93ZXJDYXNlKCkgOiBudWxsIH0gfSksIHJjICYmIHFjIHx8IChtLmF0dHJIb29rcy52YWx1ZSA9IHsgc2V0OiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gbS5ub2RlTmFtZShhLCAiaW5wdXQiKSA/IHZvaWQgKGEuZGVmYXVsdFZhbHVlID0gYikgOiBtYyAmJiBtYy5zZXQoYSwgYiwgYykgfSB9KSwgcWMgfHwgKG1jID0geyBzZXQ6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gYS5nZXRBdHRyaWJ1dGVOb2RlKGMpOyByZXR1cm4gZCB8fCBhLnNldEF0dHJpYnV0ZU5vZGUoZCA9IGEub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoYykpLCBkLnZhbHVlID0gYiArPSAiIiwgInZhbHVlIiA9PT0gYyB8fCBiID09PSBhLmdldEF0dHJpYnV0ZShjKSA/IGIgOiB2b2lkIDAgfSB9LCBvYy5pZCA9IG9jLm5hbWUgPSBvYy5jb29yZHMgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgcmV0dXJuIGMgPyB2b2lkIDAgOiAoZCA9IGEuZ2V0QXR0cmlidXRlTm9kZShiKSkgJiYgIiIgIT09IGQudmFsdWUgPyBkLnZhbHVlIDogbnVsbCB9LCBtLnZhbEhvb2tzLmJ1dHRvbiA9IHsgZ2V0OiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IGEuZ2V0QXR0cmlidXRlTm9kZShiKTsgcmV0dXJuIGMgJiYgYy5zcGVjaWZpZWQgPyBjLnZhbHVlIDogdm9pZCAwIH0sIHNldDogbWMuc2V0IH0sIG0uYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZSA9IHsgc2V0OiBmdW5jdGlvbiAoYSwgYiwgYykgeyBtYy5zZXQoYSwgIiIgPT09IGIgPyAhMSA6IGIsIGMpIH0gfSwgbS5lYWNoKFsid2lkdGgiLCAiaGVpZ2h0Il0sIGZ1bmN0aW9uIChhLCBiKSB7IG0uYXR0ckhvb2tzW2JdID0geyBzZXQ6IGZ1bmN0aW9uIChhLCBjKSB7IHJldHVybiAiIiA9PT0gYyA/IChhLnNldEF0dHJpYnV0ZShiLCAiYXV0byIpLCBjKSA6IHZvaWQgMCB9IH0gfSkpLCBrLnN0eWxlIHx8IChtLmF0dHJIb29rcy5zdHlsZSA9IHsgZ2V0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5zdHlsZS5jc3NUZXh0IHx8IHZvaWQgMCB9LCBzZXQ6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLnN0eWxlLmNzc1RleHQgPSBiICsgIiIgfSB9KTsgdmFyIHNjID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksIHRjID0gL14oPzphfGFyZWEpJC9pOyBtLmZuLmV4dGVuZCh7IHByb3A6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBWKHRoaXMsIG0ucHJvcCwgYSwgYiwgYXJndW1lbnRzLmxlbmd0aCA+IDEpIH0sIHJlbW92ZVByb3A6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID0gbS5wcm9wRml4W2FdIHx8IGEsIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHRyeSB7IHRoaXNbYV0gPSB2b2lkIDAsIGRlbGV0ZSB0aGlzW2FdIH0gY2F0Y2ggKGIpIHsgfSB9KSB9IH0pLCBtLmV4dGVuZCh7IHByb3BGaXg6IHsgImZvciI6ICJodG1sRm9yIiwgImNsYXNzIjogImNsYXNzTmFtZSIgfSwgcHJvcDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUsIGYsIGcgPSBhLm5vZGVUeXBlOyBpZiAoYSAmJiAzICE9PSBnICYmIDggIT09IGcgJiYgMiAhPT0gZykgcmV0dXJuIGYgPSAxICE9PSBnIHx8ICFtLmlzWE1MRG9jKGEpLCBmICYmIChiID0gbS5wcm9wRml4W2JdIHx8IGIsIGUgPSBtLnByb3BIb29rc1tiXSksIHZvaWQgMCAhPT0gYyA/IGUgJiYgInNldCIgaW4gZSAmJiB2b2lkIDAgIT09IChkID0gZS5zZXQoYSwgYywgYikpID8gZCA6IGFbYl0gPSBjIDogZSAmJiAiZ2V0IiBpbiBlICYmIG51bGwgIT09IChkID0gZS5nZXQoYSwgYikpID8gZCA6IGFbYl0gfSwgcHJvcEhvb2tzOiB7IHRhYkluZGV4OiB7IGdldDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBtLmZpbmQuYXR0cihhLCAidGFiaW5kZXgiKTsgcmV0dXJuIGIgPyBwYXJzZUludChiLCAxMCkgOiBzYy50ZXN0KGEubm9kZU5hbWUpIHx8IHRjLnRlc3QoYS5ub2RlTmFtZSkgJiYgYS5ocmVmID8gMCA6IC0xIH0gfSB9IH0pLCBrLmhyZWZOb3JtYWxpemVkIHx8IG0uZWFjaChbImhyZWYiLCAic3JjIl0sIGZ1bmN0aW9uIChhLCBiKSB7IG0ucHJvcEhvb2tzW2JdID0geyBnZXQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmdldEF0dHJpYnV0ZShiLCA0KSB9IH0gfSksIGsub3B0U2VsZWN0ZWQgfHwgKG0ucHJvcEhvb2tzLnNlbGVjdGVkID0geyBnZXQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5wYXJlbnROb2RlOyByZXR1cm4gYiAmJiAoYi5zZWxlY3RlZEluZGV4LCBiLnBhcmVudE5vZGUgJiYgYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpLCBudWxsIH0gfSksIG0uZWFjaChbInRhYkluZGV4IiwgInJlYWRPbmx5IiwgIm1heExlbmd0aCIsICJjZWxsU3BhY2luZyIsICJjZWxsUGFkZGluZyIsICJyb3dTcGFuIiwgImNvbFNwYW4iLCAidXNlTWFwIiwgImZyYW1lQm9yZGVyIiwgImNvbnRlbnRFZGl0YWJsZSJdLCBmdW5jdGlvbiAoKSB7IG0ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldID0gdGhpcyB9KSwgay5lbmN0eXBlIHx8IChtLnByb3BGaXguZW5jdHlwZSA9ICJlbmNvZGluZyIpOyB2YXIgdWMgPSAvW1x0XHJcblxmXS9nOyBtLmZuLmV4dGVuZCh7IGFkZENsYXNzOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYywgZCwgZSwgZiwgZywgaCA9IDAsIGkgPSB0aGlzLmxlbmd0aCwgaiA9ICJzdHJpbmciID09IHR5cGVvZiBhICYmIGE7IGlmIChtLmlzRnVuY3Rpb24oYSkpIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKGIpIHsgbSh0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcywgYiwgdGhpcy5jbGFzc05hbWUpKSB9KTsgaWYgKGopIGZvciAoYiA9IChhIHx8ICIiKS5tYXRjaChFKSB8fCBbXTsgaSA+IGg7IGgrKykgaWYgKGMgPSB0aGlzW2hdLCBkID0gMSA9PT0gYy5ub2RlVHlwZSAmJiAoYy5jbGFzc05hbWUgPyAoIiAiICsgYy5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UodWMsICIgIikgOiAiICIpKSB7IGYgPSAwOyB3aGlsZSAoZSA9IGJbZisrXSkgZC5pbmRleE9mKCIgIiArIGUgKyAiICIpIDwgMCAmJiAoZCArPSBlICsgIiAiKTsgZyA9IG0udHJpbShkKSwgYy5jbGFzc05hbWUgIT09IGcgJiYgKGMuY2xhc3NOYW1lID0gZykgfSByZXR1cm4gdGhpcyB9LCByZW1vdmVDbGFzczogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMsIGQsIGUsIGYsIGcsIGggPSAwLCBpID0gdGhpcy5sZW5ndGgsIGogPSAwID09PSBhcmd1bWVudHMubGVuZ3RoIHx8ICJzdHJpbmciID09IHR5cGVvZiBhICYmIGE7IGlmIChtLmlzRnVuY3Rpb24oYSkpIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKGIpIHsgbSh0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcywgYiwgdGhpcy5jbGFzc05hbWUpKSB9KTsgaWYgKGopIGZvciAoYiA9IChhIHx8ICIiKS5tYXRjaChFKSB8fCBbXTsgaSA+IGg7IGgrKykgaWYgKGMgPSB0aGlzW2hdLCBkID0gMSA9PT0gYy5ub2RlVHlwZSAmJiAoYy5jbGFzc05hbWUgPyAoIiAiICsgYy5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UodWMsICIgIikgOiAiIikpIHsgZiA9IDA7IHdoaWxlIChlID0gYltmKytdKSB3aGlsZSAoZC5pbmRleE9mKCIgIiArIGUgKyAiICIpID49IDApIGQgPSBkLnJlcGxhY2UoIiAiICsgZSArICIgIiwgIiAiKTsgZyA9IGEgPyBtLnRyaW0oZCkgOiAiIiwgYy5jbGFzc05hbWUgIT09IGcgJiYgKGMuY2xhc3NOYW1lID0gZykgfSByZXR1cm4gdGhpcyB9LCB0b2dnbGVDbGFzczogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSB0eXBlb2YgYTsgcmV0dXJuICJib29sZWFuIiA9PSB0eXBlb2YgYiAmJiAic3RyaW5nIiA9PT0gYyA/IGIgPyB0aGlzLmFkZENsYXNzKGEpIDogdGhpcy5yZW1vdmVDbGFzcyhhKSA6IHRoaXMuZWFjaChtLmlzRnVuY3Rpb24oYSkgPyBmdW5jdGlvbiAoYykgeyBtKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLCBjLCB0aGlzLmNsYXNzTmFtZSwgYiksIGIpIH0gOiBmdW5jdGlvbiAoKSB7IGlmICgic3RyaW5nIiA9PT0gYykgeyB2YXIgYiwgZCA9IDAsIGUgPSBtKHRoaXMpLCBmID0gYS5tYXRjaChFKSB8fCBbXTsgd2hpbGUgKGIgPSBmW2QrK10pIGUuaGFzQ2xhc3MoYikgPyBlLnJlbW92ZUNsYXNzKGIpIDogZS5hZGRDbGFzcyhiKSB9IGVsc2UgKGMgPT09IEsgfHwgImJvb2xlYW4iID09PSBjKSAmJiAodGhpcy5jbGFzc05hbWUgJiYgbS5fZGF0YSh0aGlzLCAiX19jbGFzc05hbWVfXyIsIHRoaXMuY2xhc3NOYW1lKSwgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCBhID09PSAhMSA/ICIiIDogbS5fZGF0YSh0aGlzLCAiX19jbGFzc05hbWVfXyIpIHx8ICIiKSB9KSB9LCBoYXNDbGFzczogZnVuY3Rpb24gKGEpIHsgZm9yICh2YXIgYiA9ICIgIiArIGEgKyAiICIsIGMgPSAwLCBkID0gdGhpcy5sZW5ndGg7IGQgPiBjOyBjKyspIGlmICgxID09PSB0aGlzW2NdLm5vZGVUeXBlICYmICgiICIgKyB0aGlzW2NdLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSh1YywgIiAiKS5pbmRleE9mKGIpID49IDApIHJldHVybiAhMDsgcmV0dXJuICExIH0gfSksIG0uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSwgZnVuY3Rpb24gKGEsIGIpIHsgbS5mbltiXSA9IGZ1bmN0aW9uIChhLCBjKSB7IHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/IHRoaXMub24oYiwgbnVsbCwgYSwgYykgOiB0aGlzLnRyaWdnZXIoYikgfSB9KSwgbS5mbi5leHRlbmQoeyBob3ZlcjogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGIgfHwgYSkgfSwgYmluZDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIHRoaXMub24oYSwgbnVsbCwgYiwgYykgfSwgdW5iaW5kOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcy5vZmYoYSwgbnVsbCwgYikgfSwgZGVsZWdhdGU6IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiB0aGlzLm9uKGIsIGEsIGMsIGQpIH0sIHVuZGVsZWdhdGU6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiAxID09PSBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy5vZmYoYSwgIioqIikgOiB0aGlzLm9mZihiLCBhIHx8ICIqKiIsIGMpIH0gfSk7IHZhciB2YyA9IG0ubm93KCksIHdjID0gL1w/LywgeGMgPSAvKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nOyBtLnBhcnNlSlNPTiA9IGZ1bmN0aW9uIChiKSB7IGlmIChhLkpTT04gJiYgYS5KU09OLnBhcnNlKSByZXR1cm4gYS5KU09OLnBhcnNlKGIgKyAiIik7IHZhciBjLCBkID0gbnVsbCwgZSA9IG0udHJpbShiICsgIiIpOyByZXR1cm4gZSAmJiAhbS50cmltKGUucmVwbGFjZSh4YywgZnVuY3Rpb24gKGEsIGIsIGUsIGYpIHsgcmV0dXJuIGMgJiYgYiAmJiAoZCA9IDApLCAwID09PSBkID8gYSA6IChjID0gZSB8fCBiLCBkICs9ICFmIC0gIWUsICIiKSB9KSkgPyBGdW5jdGlvbigicmV0dXJuICIgKyBlKSgpIDogbS5lcnJvcigiSW52YWxpZCBKU09OOiAiICsgYikgfSwgbS5wYXJzZVhNTCA9IGZ1bmN0aW9uIChiKSB7IHZhciBjLCBkOyBpZiAoIWIgfHwgInN0cmluZyIgIT0gdHlwZW9mIGIpIHJldHVybiBudWxsOyB0cnkgeyBhLkRPTVBhcnNlciA/IChkID0gbmV3IERPTVBhcnNlciwgYyA9IGQucGFyc2VGcm9tU3RyaW5nKGIsICJ0ZXh0L3htbCIpKSA6IChjID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSwgYy5hc3luYyA9ICJmYWxzZSIsIGMubG9hZFhNTChiKSkgfSBjYXRjaCAoZSkgeyBjID0gdm9pZCAwIH0gcmV0dXJuIGMgJiYgYy5kb2N1bWVudEVsZW1lbnQgJiYgIWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoIHx8IG0uZXJyb3IoIkludmFsaWQgWE1MOiAiICsgYiksIGMgfTsgdmFyIHljLCB6YywgQWMgPSAvIy4qJC8sIEJjID0gLyhbPyZdKV89W14mXSovLCBDYyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvZ20sIERjID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sIEVjID0gL14oPzpHRVR8SEVBRCkkLywgRmMgPSAvXlwvXC8vLCBHYyA9IC9eKFtcdy4rLV0rOikoPzpcL1wvKD86W15cLz8jXSpAfCkoW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLCBIYyA9IHt9LCBJYyA9IHt9LCBKYyA9ICIqLyIuY29uY2F0KCIqIik7IHRyeSB7IHpjID0gbG9jYXRpb24uaHJlZiB9IGNhdGNoIChLYykgeyB6YyA9IHkuY3JlYXRlRWxlbWVudCgiYSIpLCB6Yy5ocmVmID0gIiIsIHpjID0gemMuaHJlZiB9IHljID0gR2MuZXhlYyh6Yy50b0xvd2VyQ2FzZSgpKSB8fCBbXTsgZnVuY3Rpb24gTGMoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGIsIGMpIHsgInN0cmluZyIgIT0gdHlwZW9mIGIgJiYgKGMgPSBiLCBiID0gIioiKTsgdmFyIGQsIGUgPSAwLCBmID0gYi50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpIHx8IFtdOyBpZiAobS5pc0Z1bmN0aW9uKGMpKSB3aGlsZSAoZCA9IGZbZSsrXSkgIisiID09PSBkLmNoYXJBdCgwKSA/IChkID0gZC5zbGljZSgxKSB8fCAiKiIsIChhW2RdID0gYVtkXSB8fCBbXSkudW5zaGlmdChjKSkgOiAoYVtkXSA9IGFbZF0gfHwgW10pLnB1c2goYykgfSB9IGZ1bmN0aW9uIE1jKGEsIGIsIGMsIGQpIHsgdmFyIGUgPSB7fSwgZiA9IGEgPT09IEljOyBmdW5jdGlvbiBnKGgpIHsgdmFyIGk7IHJldHVybiBlW2hdID0gITAsIG0uZWFjaChhW2hdIHx8IFtdLCBmdW5jdGlvbiAoYSwgaCkgeyB2YXIgaiA9IGgoYiwgYywgZCk7IHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgaiB8fCBmIHx8IGVbal0gPyBmID8gIShpID0gaikgOiB2b2lkIDAgOiAoYi5kYXRhVHlwZXMudW5zaGlmdChqKSwgZyhqKSwgITEpIH0pLCBpIH0gcmV0dXJuIGcoYi5kYXRhVHlwZXNbMF0pIHx8ICFlWyIqIl0gJiYgZygiKiIpIH0gZnVuY3Rpb24gTmMoYSwgYikgeyB2YXIgYywgZCwgZSA9IG0uYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9OyBmb3IgKGQgaW4gYikgdm9pZCAwICE9PSBiW2RdICYmICgoZVtkXSA/IGEgOiBjIHx8IChjID0ge30pKVtkXSA9IGJbZF0pOyByZXR1cm4gYyAmJiBtLmV4dGVuZCghMCwgYSwgYyksIGEgfSBmdW5jdGlvbiBPYyhhLCBiLCBjKSB7IHZhciBkLCBlLCBmLCBnLCBoID0gYS5jb250ZW50cywgaSA9IGEuZGF0YVR5cGVzOyB3aGlsZSAoIioiID09PSBpWzBdKSBpLnNoaWZ0KCksIHZvaWQgMCA9PT0gZSAmJiAoZSA9IGEubWltZVR5cGUgfHwgYi5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpOyBpZiAoZSkgZm9yIChnIGluIGgpIGlmIChoW2ddICYmIGhbZ10udGVzdChlKSkgeyBpLnVuc2hpZnQoZyk7IGJyZWFrIH0gaWYgKGlbMF0gaW4gYykgZiA9IGlbMF07IGVsc2UgeyBmb3IgKGcgaW4gYykgeyBpZiAoIWlbMF0gfHwgYS5jb252ZXJ0ZXJzW2cgKyAiICIgKyBpWzBdXSkgeyBmID0gZzsgYnJlYWsgfSBkIHx8IChkID0gZykgfSBmID0gZiB8fCBkIH0gcmV0dXJuIGYgPyAoZiAhPT0gaVswXSAmJiBpLnVuc2hpZnQoZiksIGNbZl0pIDogdm9pZCAwIH0gZnVuY3Rpb24gUGMoYSwgYiwgYywgZCkgeyB2YXIgZSwgZiwgZywgaCwgaSwgaiA9IHt9LCBrID0gYS5kYXRhVHlwZXMuc2xpY2UoKTsgaWYgKGtbMV0pIGZvciAoZyBpbiBhLmNvbnZlcnRlcnMpIGpbZy50b0xvd2VyQ2FzZSgpXSA9IGEuY29udmVydGVyc1tnXTsgZiA9IGsuc2hpZnQoKTsgd2hpbGUgKGYpIGlmIChhLnJlc3BvbnNlRmllbGRzW2ZdICYmIChjW2EucmVzcG9uc2VGaWVsZHNbZl1dID0gYiksICFpICYmIGQgJiYgYS5kYXRhRmlsdGVyICYmIChiID0gYS5kYXRhRmlsdGVyKGIsIGEuZGF0YVR5cGUpKSwgaSA9IGYsIGYgPSBrLnNoaWZ0KCkpIGlmICgiKiIgPT09IGYpIGYgPSBpOyBlbHNlIGlmICgiKiIgIT09IGkgJiYgaSAhPT0gZikgeyBpZiAoZyA9IGpbaSArICIgIiArIGZdIHx8IGpbIiogIiArIGZdLCAhZykgZm9yIChlIGluIGopIGlmIChoID0gZS5zcGxpdCgiICIpLCBoWzFdID09PSBmICYmIChnID0galtpICsgIiAiICsgaFswXV0gfHwgalsiKiAiICsgaFswXV0pKSB7IGcgPT09ICEwID8gZyA9IGpbZV0gOiBqW2VdICE9PSAhMCAmJiAoZiA9IGhbMF0sIGsudW5zaGlmdChoWzFdKSk7IGJyZWFrIH0gaWYgKGcgIT09ICEwKSBpZiAoZyAmJiBhWyJ0aHJvd3MiXSkgYiA9IGcoYik7IGVsc2UgdHJ5IHsgYiA9IGcoYikgfSBjYXRjaCAobCkgeyByZXR1cm4geyBzdGF0ZTogInBhcnNlcmVycm9yIiwgZXJyb3I6IGcgPyBsIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgaSArICIgdG8gIiArIGYgfSB9IH0gcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogYiB9IH0gbS5leHRlbmQoeyBhY3RpdmU6IDAsIGxhc3RNb2RpZmllZDoge30sIGV0YWc6IHt9LCBhamF4U2V0dGluZ3M6IHsgdXJsOiB6YywgdHlwZTogIkdFVCIsIGlzTG9jYWw6IERjLnRlc3QoeWNbMV0pLCBnbG9iYWw6ICEwLCBwcm9jZXNzRGF0YTogITAsIGFzeW5jOiAhMCwgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLCBhY2NlcHRzOiB7ICIqIjogSmMsIHRleHQ6ICJ0ZXh0L3BsYWluIiwgaHRtbDogInRleHQvaHRtbCIsIHhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLCBqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiB9LCBjb250ZW50czogeyB4bWw6IC94bWwvLCBodG1sOiAvaHRtbC8sIGpzb246IC9qc29uLyB9LCByZXNwb25zZUZpZWxkczogeyB4bWw6ICJyZXNwb25zZVhNTCIsIHRleHQ6ICJyZXNwb25zZVRleHQiLCBqc29uOiAicmVzcG9uc2VKU09OIiB9LCBjb252ZXJ0ZXJzOiB7ICIqIHRleHQiOiBTdHJpbmcsICJ0ZXh0IGh0bWwiOiAhMCwgInRleHQganNvbiI6IG0ucGFyc2VKU09OLCAidGV4dCB4bWwiOiBtLnBhcnNlWE1MIH0sIGZsYXRPcHRpb25zOiB7IHVybDogITAsIGNvbnRleHQ6ICEwIH0gfSwgYWpheFNldHVwOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYiA/IE5jKE5jKGEsIG0uYWpheFNldHRpbmdzKSwgYikgOiBOYyhtLmFqYXhTZXR0aW5ncywgYSkgfSwgYWpheFByZWZpbHRlcjogTGMoSGMpLCBhamF4VHJhbnNwb3J0OiBMYyhJYyksIGFqYXg6IGZ1bmN0aW9uIChhLCBiKSB7ICJvYmplY3QiID09IHR5cGVvZiBhICYmIChiID0gYSwgYSA9IHZvaWQgMCksIGIgPSBiIHx8IHt9OyB2YXIgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgayA9IG0uYWpheFNldHVwKHt9LCBiKSwgbCA9IGsuY29udGV4dCB8fCBrLCBuID0gay5jb250ZXh0ICYmIChsLm5vZGVUeXBlIHx8IGwuanF1ZXJ5KSA/IG0obCkgOiBtLmV2ZW50LCBvID0gbS5EZWZlcnJlZCgpLCBwID0gbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksIHEgPSBrLnN0YXR1c0NvZGUgfHwge30sIHIgPSB7fSwgcyA9IHt9LCB0ID0gMCwgdSA9ICJjYW5jZWxlZCIsIHYgPSB7IHJlYWR5U3RhdGU6IDAsIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbiAoYSkgeyB2YXIgYjsgaWYgKDIgPT09IHQpIHsgaWYgKCFqKSB7IGogPSB7fTsgd2hpbGUgKGIgPSBDYy5leGVjKGYpKSBqW2JbMV0udG9Mb3dlckNhc2UoKV0gPSBiWzJdIH0gYiA9IGpbYS50b0xvd2VyQ2FzZSgpXSB9IHJldHVybiBudWxsID09IGIgPyBudWxsIDogYiB9LCBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDIgPT09IHQgPyBmIDogbnVsbCB9LCBzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IGEudG9Mb3dlckNhc2UoKTsgcmV0dXJuIHQgfHwgKGEgPSBzW2NdID0gc1tjXSB8fCBhLCByW2FdID0gYiksIHRoaXMgfSwgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHQgfHwgKGsubWltZVR5cGUgPSBhKSwgdGhpcyB9LCBzdGF0dXNDb2RlOiBmdW5jdGlvbiAoYSkgeyB2YXIgYjsgaWYgKGEpIGlmICgyID4gdCkgZm9yIChiIGluIGEpIHFbYl0gPSBbcVtiXSwgYVtiXV07IGVsc2Ugdi5hbHdheXMoYVt2LnN0YXR1c10pOyByZXR1cm4gdGhpcyB9LCBhYm9ydDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhIHx8IHU7IHJldHVybiBpICYmIGkuYWJvcnQoYiksIHgoMCwgYiksIHRoaXMgfSB9OyBpZiAoby5wcm9taXNlKHYpLmNvbXBsZXRlID0gcC5hZGQsIHYuc3VjY2VzcyA9IHYuZG9uZSwgdi5lcnJvciA9IHYuZmFpbCwgay51cmwgPSAoKGEgfHwgay51cmwgfHwgemMpICsgIiIpLnJlcGxhY2UoQWMsICIiKS5yZXBsYWNlKEZjLCB5Y1sxXSArICIvLyIpLCBrLnR5cGUgPSBiLm1ldGhvZCB8fCBiLnR5cGUgfHwgay5tZXRob2QgfHwgay50eXBlLCBrLmRhdGFUeXBlcyA9IG0udHJpbShrLmRhdGFUeXBlIHx8ICIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChFKSB8fCBbIiJdLCBudWxsID09IGsuY3Jvc3NEb21haW4gJiYgKGMgPSBHYy5leGVjKGsudXJsLnRvTG93ZXJDYXNlKCkpLCBrLmNyb3NzRG9tYWluID0gISghYyB8fCBjWzFdID09PSB5Y1sxXSAmJiBjWzJdID09PSB5Y1syXSAmJiAoY1szXSB8fCAoImh0dHA6IiA9PT0gY1sxXSA/ICI4MCIgOiAiNDQzIikpID09PSAoeWNbM10gfHwgKCJodHRwOiIgPT09IHljWzFdID8gIjgwIiA6ICI0NDMiKSkpKSwgay5kYXRhICYmIGsucHJvY2Vzc0RhdGEgJiYgInN0cmluZyIgIT0gdHlwZW9mIGsuZGF0YSAmJiAoay5kYXRhID0gbS5wYXJhbShrLmRhdGEsIGsudHJhZGl0aW9uYWwpKSwgTWMoSGMsIGssIGIsIHYpLCAyID09PSB0KSByZXR1cm4gdjsgaCA9IGsuZ2xvYmFsLCBoICYmIDAgPT09IG0uYWN0aXZlKysgJiYgbS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSwgay50eXBlID0gay50eXBlLnRvVXBwZXJDYXNlKCksIGsuaGFzQ29udGVudCA9ICFFYy50ZXN0KGsudHlwZSksIGUgPSBrLnVybCwgay5oYXNDb250ZW50IHx8IChrLmRhdGEgJiYgKGUgPSBrLnVybCArPSAod2MudGVzdChlKSA/ICImIiA6ICI/IikgKyBrLmRhdGEsIGRlbGV0ZSBrLmRhdGEpLCBrLmNhY2hlID09PSAhMSAmJiAoay51cmwgPSBCYy50ZXN0KGUpID8gZS5yZXBsYWNlKEJjLCAiJDFfPSIgKyB2YysrKSA6IGUgKyAod2MudGVzdChlKSA/ICImIiA6ICI/IikgKyAiXz0iICsgdmMrKykpLCBrLmlmTW9kaWZpZWQgJiYgKG0ubGFzdE1vZGlmaWVkW2VdICYmIHYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLCBtLmxhc3RNb2RpZmllZFtlXSksIG0uZXRhZ1tlXSAmJiB2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLCBtLmV0YWdbZV0pKSwgKGsuZGF0YSAmJiBrLmhhc0NvbnRlbnQgJiYgay5jb250ZW50VHlwZSAhPT0gITEgfHwgYi5jb250ZW50VHlwZSkgJiYgdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCBrLmNvbnRlbnRUeXBlKSwgdi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCBrLmRhdGFUeXBlc1swXSAmJiBrLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dID8gay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXSArICgiKiIgIT09IGsuZGF0YVR5cGVzWzBdID8gIiwgIiArIEpjICsgIjsgcT0wLjAxIiA6ICIiKSA6IGsuYWNjZXB0c1siKiJdKTsgZm9yIChkIGluIGsuaGVhZGVycykgdi5zZXRSZXF1ZXN0SGVhZGVyKGQsIGsuaGVhZGVyc1tkXSk7IGlmIChrLmJlZm9yZVNlbmQgJiYgKGsuYmVmb3JlU2VuZC5jYWxsKGwsIHYsIGspID09PSAhMSB8fCAyID09PSB0KSkgcmV0dXJuIHYuYWJvcnQoKTsgdSA9ICJhYm9ydCI7IGZvciAoZCBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9KSB2W2RdKGtbZF0pOyBpZiAoaSA9IE1jKEljLCBrLCBiLCB2KSkgeyB2LnJlYWR5U3RhdGUgPSAxLCBoICYmIG4udHJpZ2dlcigiYWpheFNlbmQiLCBbdiwga10pLCBrLmFzeW5jICYmIGsudGltZW91dCA+IDAgJiYgKGcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdi5hYm9ydCgidGltZW91dCIpIH0sIGsudGltZW91dCkpOyB0cnkgeyB0ID0gMSwgaS5zZW5kKHIsIHgpIH0gY2F0Y2ggKHcpIHsgaWYgKCEoMiA+IHQpKSB0aHJvdyB3OyB4KC0xLCB3KSB9IH0gZWxzZSB4KC0xLCAiTm8gVHJhbnNwb3J0Iik7IGZ1bmN0aW9uIHgoYSwgYiwgYywgZCkgeyB2YXIgaiwgciwgcywgdSwgdywgeCA9IGI7IDIgIT09IHQgJiYgKHQgPSAyLCBnICYmIGNsZWFyVGltZW91dChnKSwgaSA9IHZvaWQgMCwgZiA9IGQgfHwgIiIsIHYucmVhZHlTdGF0ZSA9IGEgPiAwID8gNCA6IDAsIGogPSBhID49IDIwMCAmJiAzMDAgPiBhIHx8IDMwNCA9PT0gYSwgYyAmJiAodSA9IE9jKGssIHYsIGMpKSwgdSA9IFBjKGssIHUsIHYsIGopLCBqID8gKGsuaWZNb2RpZmllZCAmJiAodyA9IHYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSwgdyAmJiAobS5sYXN0TW9kaWZpZWRbZV0gPSB3KSwgdyA9IHYuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSwgdyAmJiAobS5ldGFnW2VdID0gdykpLCAyMDQgPT09IGEgfHwgIkhFQUQiID09PSBrLnR5cGUgPyB4ID0gIm5vY29udGVudCIgOiAzMDQgPT09IGEgPyB4ID0gIm5vdG1vZGlmaWVkIiA6ICh4ID0gdS5zdGF0ZSwgciA9IHUuZGF0YSwgcyA9IHUuZXJyb3IsIGogPSAhcykpIDogKHMgPSB4LCAoYSB8fCAheCkgJiYgKHggPSAiZXJyb3IiLCAwID4gYSAmJiAoYSA9IDApKSksIHYuc3RhdHVzID0gYSwgdi5zdGF0dXNUZXh0ID0gKGIgfHwgeCkgKyAiIiwgaiA/IG8ucmVzb2x2ZVdpdGgobCwgW3IsIHgsIHZdKSA6IG8ucmVqZWN0V2l0aChsLCBbdiwgeCwgc10pLCB2LnN0YXR1c0NvZGUocSksIHEgPSB2b2lkIDAsIGggJiYgbi50cmlnZ2VyKGogPyAiYWpheFN1Y2Nlc3MiIDogImFqYXhFcnJvciIsIFt2LCBrLCBqID8gciA6IHNdKSwgcC5maXJlV2l0aChsLCBbdiwgeF0pLCBoICYmIChuLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsIFt2LCBrXSksIC0tbS5hY3RpdmUgfHwgbS5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSkgfSByZXR1cm4gdiB9LCBnZXRKU09OOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gbS5nZXQoYSwgYiwgYywgImpzb24iKSB9LCBnZXRTY3JpcHQ6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBtLmdldChhLCB2b2lkIDAsIGIsICJzY3JpcHQiKSB9IH0pLCBtLmVhY2goWyJnZXQiLCAicG9zdCJdLCBmdW5jdGlvbiAoYSwgYikgeyBtW2JdID0gZnVuY3Rpb24gKGEsIGMsIGQsIGUpIHsgcmV0dXJuIG0uaXNGdW5jdGlvbihjKSAmJiAoZSA9IGUgfHwgZCwgZCA9IGMsIGMgPSB2b2lkIDApLCBtLmFqYXgoeyB1cmw6IGEsIHR5cGU6IGIsIGRhdGFUeXBlOiBlLCBkYXRhOiBjLCBzdWNjZXNzOiBkIH0pIH0gfSksIG0uZWFjaChbImFqYXhTdGFydCIsICJhamF4U3RvcCIsICJhamF4Q29tcGxldGUiLCAiYWpheEVycm9yIiwgImFqYXhTdWNjZXNzIiwgImFqYXhTZW5kIl0sIGZ1bmN0aW9uIChhLCBiKSB7IG0uZm5bYl0gPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5vbihiLCBhKSB9IH0pLCBtLl9ldmFsVXJsID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0uYWpheCh7IHVybDogYSwgdHlwZTogIkdFVCIsIGRhdGFUeXBlOiAic2NyaXB0IiwgYXN5bmM6ICExLCBnbG9iYWw6ICExLCAidGhyb3dzIjogITAgfSkgfSwgbS5mbi5leHRlbmQoeyB3cmFwQWxsOiBmdW5jdGlvbiAoYSkgeyBpZiAobS5pc0Z1bmN0aW9uKGEpKSByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uIChiKSB7IG0odGhpcykud3JhcEFsbChhLmNhbGwodGhpcywgYikpIH0pOyBpZiAodGhpc1swXSkgeyB2YXIgYiA9IG0oYSwgdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7IHRoaXNbMF0ucGFyZW50Tm9kZSAmJiBiLmluc2VydEJlZm9yZSh0aGlzWzBdKSwgYi5tYXAoZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHRoaXM7IHdoaWxlIChhLmZpcnN0Q2hpbGQgJiYgMSA9PT0gYS5maXJzdENoaWxkLm5vZGVUeXBlKSBhID0gYS5maXJzdENoaWxkOyByZXR1cm4gYSB9KS5hcHBlbmQodGhpcykgfSByZXR1cm4gdGhpcyB9LCB3cmFwSW5uZXI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLmVhY2gobS5pc0Z1bmN0aW9uKGEpID8gZnVuY3Rpb24gKGIpIHsgbSh0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsIGIpKSB9IDogZnVuY3Rpb24gKCkgeyB2YXIgYiA9IG0odGhpcyksIGMgPSBiLmNvbnRlbnRzKCk7IGMubGVuZ3RoID8gYy53cmFwQWxsKGEpIDogYi5hcHBlbmQoYSkgfSkgfSwgd3JhcDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBtLmlzRnVuY3Rpb24oYSk7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKGMpIHsgbSh0aGlzKS53cmFwQWxsKGIgPyBhLmNhbGwodGhpcywgYykgOiBhKSB9KSB9LCB1bndyYXA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbiAoKSB7IG0ubm9kZU5hbWUodGhpcywgImJvZHkiKSB8fCBtKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2RlcykgfSkuZW5kKCkgfSB9KSwgbS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEub2Zmc2V0V2lkdGggPD0gMCAmJiBhLm9mZnNldEhlaWdodCA8PSAwIHx8ICFrLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpICYmICJub25lIiA9PT0gKGEuc3R5bGUgJiYgYS5zdHlsZS5kaXNwbGF5IHx8IG0uY3NzKGEsICJkaXNwbGF5IikpIH0sIG0uZXhwci5maWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gIW0uZXhwci5maWx0ZXJzLmhpZGRlbihhKSB9OyB2YXIgUWMgPSAvJTIwL2csIFJjID0gL1xbXF0kLywgU2MgPSAvXHI/XG4vZywgVGMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksIFVjID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pOyBmdW5jdGlvbiBWYyhhLCBiLCBjLCBkKSB7IHZhciBlOyBpZiAobS5pc0FycmF5KGIpKSBtLmVhY2goYiwgZnVuY3Rpb24gKGIsIGUpIHsgYyB8fCBSYy50ZXN0KGEpID8gZChhLCBlKSA6IFZjKGEgKyAiWyIgKyAoIm9iamVjdCIgPT0gdHlwZW9mIGUgPyBiIDogIiIpICsgIl0iLCBlLCBjLCBkKSB9KTsgZWxzZSBpZiAoYyB8fCAib2JqZWN0IiAhPT0gbS50eXBlKGIpKSBkKGEsIGIpOyBlbHNlIGZvciAoZSBpbiBiKSBWYyhhICsgIlsiICsgZSArICJdIiwgYltlXSwgYywgZCkgfSBtLnBhcmFtID0gZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQgPSBbXSwgZSA9IGZ1bmN0aW9uIChhLCBiKSB7IGIgPSBtLmlzRnVuY3Rpb24oYikgPyBiKCkgOiBudWxsID09IGIgPyAiIiA6IGIsIGRbZC5sZW5ndGhdID0gZW5jb2RlVVJJQ29tcG9uZW50KGEpICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGIpIH07IGlmICh2b2lkIDAgPT09IGIgJiYgKGIgPSBtLmFqYXhTZXR0aW5ncyAmJiBtLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksIG0uaXNBcnJheShhKSB8fCBhLmpxdWVyeSAmJiAhbS5pc1BsYWluT2JqZWN0KGEpKSBtLmVhY2goYSwgZnVuY3Rpb24gKCkgeyBlKHRoaXMubmFtZSwgdGhpcy52YWx1ZSkgfSk7IGVsc2UgZm9yIChjIGluIGEpIFZjKGMsIGFbY10sIGIsIGUpOyByZXR1cm4gZC5qb2luKCImIikucmVwbGFjZShRYywgIisiKSB9LCBtLmZuLmV4dGVuZCh7IHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpIH0sIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoKSB7IHZhciBhID0gbS5wcm9wKHRoaXMsICJlbGVtZW50cyIpOyByZXR1cm4gYSA/IG0ubWFrZUFycmF5KGEpIDogdGhpcyB9KS5maWx0ZXIoZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHRoaXMudHlwZTsgcmV0dXJuIHRoaXMubmFtZSAmJiAhbSh0aGlzKS5pcygiOmRpc2FibGVkIikgJiYgVWMudGVzdCh0aGlzLm5vZGVOYW1lKSAmJiAhVGMudGVzdChhKSAmJiAodGhpcy5jaGVja2VkIHx8ICFXLnRlc3QoYSkpIH0pLm1hcChmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IG0odGhpcykudmFsKCk7IHJldHVybiBudWxsID09IGMgPyBudWxsIDogbS5pc0FycmF5KGMpID8gbS5tYXAoYywgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHsgbmFtZTogYi5uYW1lLCB2YWx1ZTogYS5yZXBsYWNlKFNjLCAiXHJcbiIpIH0gfSkgOiB7IG5hbWU6IGIubmFtZSwgdmFsdWU6IGMucmVwbGFjZShTYywgIlxyXG4iKSB9IH0pLmdldCgpIH0gfSksIG0uYWpheFNldHRpbmdzLnhociA9IHZvaWQgMCAhPT0gYS5BY3RpdmVYT2JqZWN0ID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gIXRoaXMuaXNMb2NhbCAmJiAvXihnZXR8cG9zdHxoZWFkfHB1dHxkZWxldGV8b3B0aW9ucykkL2kudGVzdCh0aGlzLnR5cGUpICYmIFpjKCkgfHwgJGMoKSB9IDogWmM7IHZhciBXYyA9IDAsIFhjID0ge30sIFljID0gbS5hamF4U2V0dGluZ3MueGhyKCk7IGEuQWN0aXZlWE9iamVjdCAmJiBtKGEpLm9uKCJ1bmxvYWQiLCBmdW5jdGlvbiAoKSB7IGZvciAodmFyIGEgaW4gWGMpIFhjW2FdKHZvaWQgMCwgITApIH0pLCBrLmNvcnMgPSAhIVljICYmICJ3aXRoQ3JlZGVudGlhbHMiIGluIFljLCBZYyA9IGsuYWpheCA9ICEhWWMsIFljICYmIG0uYWpheFRyYW5zcG9ydChmdW5jdGlvbiAoYSkgeyBpZiAoIWEuY3Jvc3NEb21haW4gfHwgay5jb3JzKSB7IHZhciBiOyByZXR1cm4geyBzZW5kOiBmdW5jdGlvbiAoYywgZCkgeyB2YXIgZSwgZiA9IGEueGhyKCksIGcgPSArK1djOyBpZiAoZi5vcGVuKGEudHlwZSwgYS51cmwsIGEuYXN5bmMsIGEudXNlcm5hbWUsIGEucGFzc3dvcmQpLCBhLnhockZpZWxkcykgZm9yIChlIGluIGEueGhyRmllbGRzKSBmW2VdID0gYS54aHJGaWVsZHNbZV07IGEubWltZVR5cGUgJiYgZi5vdmVycmlkZU1pbWVUeXBlICYmIGYub3ZlcnJpZGVNaW1lVHlwZShhLm1pbWVUeXBlKSwgYS5jcm9zc0RvbWFpbiB8fCBjWyJYLVJlcXVlc3RlZC1XaXRoIl0gfHwgKGNbIlgtUmVxdWVzdGVkLVdpdGgiXSA9ICJYTUxIdHRwUmVxdWVzdCIpOyBmb3IgKGUgaW4gYykgdm9pZCAwICE9PSBjW2VdICYmIGYuc2V0UmVxdWVzdEhlYWRlcihlLCBjW2VdICsgIiIpOyBmLnNlbmQoYS5oYXNDb250ZW50ICYmIGEuZGF0YSB8fCBudWxsKSwgYiA9IGZ1bmN0aW9uIChjLCBlKSB7IHZhciBoLCBpLCBqOyBpZiAoYiAmJiAoZSB8fCA0ID09PSBmLnJlYWR5U3RhdGUpKSBpZiAoZGVsZXRlIFhjW2ddLCBiID0gdm9pZCAwLCBmLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG0ubm9vcCwgZSkgNCAhPT0gZi5yZWFkeVN0YXRlICYmIGYuYWJvcnQoKTsgZWxzZSB7IGogPSB7fSwgaCA9IGYuc3RhdHVzLCAic3RyaW5nIiA9PSB0eXBlb2YgZi5yZXNwb25zZVRleHQgJiYgKGoudGV4dCA9IGYucmVzcG9uc2VUZXh0KTsgdHJ5IHsgaSA9IGYuc3RhdHVzVGV4dCB9IGNhdGNoIChrKSB7IGkgPSAiIiB9IGggfHwgIWEuaXNMb2NhbCB8fCBhLmNyb3NzRG9tYWluID8gMTIyMyA9PT0gaCAmJiAoaCA9IDIwNCkgOiBoID0gai50ZXh0ID8gMjAwIDogNDA0IH0gaiAmJiBkKGgsIGksIGosIGYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIH0sIGEuYXN5bmMgPyA0ID09PSBmLnJlYWR5U3RhdGUgPyBzZXRUaW1lb3V0KGIpIDogZi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBYY1tnXSA9IGIgOiBiKCkgfSwgYWJvcnQ6IGZ1bmN0aW9uICgpIHsgYiAmJiBiKHZvaWQgMCwgITApIH0gfSB9IH0pOyBmdW5jdGlvbiBaYygpIHsgdHJ5IHsgcmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0IH0gY2F0Y2ggKGIpIHsgfSB9IGZ1bmN0aW9uICRjKCkgeyB0cnkgeyByZXR1cm4gbmV3IGEuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKSB9IGNhdGNoIChiKSB7IH0gfSBtLmFqYXhTZXR1cCh7IGFjY2VwdHM6IHsgc2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiIH0sIGNvbnRlbnRzOiB7IHNjcmlwdDogLyg/OmphdmF8ZWNtYSlzY3JpcHQvIH0sIGNvbnZlcnRlcnM6IHsgInRleHQgc2NyaXB0IjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0uZ2xvYmFsRXZhbChhKSwgYSB9IH0gfSksIG0uYWpheFByZWZpbHRlcigic2NyaXB0IiwgZnVuY3Rpb24gKGEpIHsgdm9pZCAwID09PSBhLmNhY2hlICYmIChhLmNhY2hlID0gITEpLCBhLmNyb3NzRG9tYWluICYmIChhLnR5cGUgPSAiR0VUIiwgYS5nbG9iYWwgPSAhMSkgfSksIG0uYWpheFRyYW5zcG9ydCgic2NyaXB0IiwgZnVuY3Rpb24gKGEpIHsgaWYgKGEuY3Jvc3NEb21haW4pIHsgdmFyIGIsIGMgPSB5LmhlYWQgfHwgbSgiaGVhZCIpWzBdIHx8IHkuZG9jdW1lbnRFbGVtZW50OyByZXR1cm4geyBzZW5kOiBmdW5jdGlvbiAoZCwgZSkgeyBiID0geS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSwgYi5hc3luYyA9ICEwLCBhLnNjcmlwdENoYXJzZXQgJiYgKGIuY2hhcnNldCA9IGEuc2NyaXB0Q2hhcnNldCksIGIuc3JjID0gYS51cmwsIGIub25sb2FkID0gYi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoYSwgYykgeyAoYyB8fCAhYi5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkgJiYgKGIub25sb2FkID0gYi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsLCBiLnBhcmVudE5vZGUgJiYgYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLCBiID0gbnVsbCwgYyB8fCBlKDIwMCwgInN1Y2Nlc3MiKSkgfSwgYy5pbnNlcnRCZWZvcmUoYiwgYy5maXJzdENoaWxkKSB9LCBhYm9ydDogZnVuY3Rpb24gKCkgeyBiICYmIGIub25sb2FkKHZvaWQgMCwgITApIH0gfSB9IH0pOyB2YXIgX2MgPSBbXSwgYWQgPSAvKD0pXD8oPz0mfCQpfFw/XD8vOyBtLmFqYXhTZXR1cCh7IGpzb25wOiAiY2FsbGJhY2siLCBqc29ucENhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gX2MucG9wKCkgfHwgbS5leHBhbmRvICsgIl8iICsgdmMrKzsgcmV0dXJuIHRoaXNbYV0gPSAhMCwgYSB9IH0pLCBtLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLCBmdW5jdGlvbiAoYiwgYywgZCkgeyB2YXIgZSwgZiwgZywgaCA9IGIuanNvbnAgIT09ICExICYmIChhZC50ZXN0KGIudXJsKSA/ICJ1cmwiIDogInN0cmluZyIgPT0gdHlwZW9mIGIuZGF0YSAmJiAhKGIuY29udGVudFR5cGUgfHwgIiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpICYmIGFkLnRlc3QoYi5kYXRhKSAmJiAiZGF0YSIpOyByZXR1cm4gaCB8fCAianNvbnAiID09PSBiLmRhdGFUeXBlc1swXSA/IChlID0gYi5qc29ucENhbGxiYWNrID0gbS5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjaykgPyBiLmpzb25wQ2FsbGJhY2soKSA6IGIuanNvbnBDYWxsYmFjaywgaCA/IGJbaF0gPSBiW2hdLnJlcGxhY2UoYWQsICIkMSIgKyBlKSA6IGIuanNvbnAgIT09ICExICYmIChiLnVybCArPSAod2MudGVzdChiLnVybCkgPyAiJiIgOiAiPyIpICsgYi5qc29ucCArICI9IiArIGUpLCBiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBnIHx8IG0uZXJyb3IoZSArICIgd2FzIG5vdCBjYWxsZWQiKSwgZ1swXSB9LCBiLmRhdGFUeXBlc1swXSA9ICJqc29uIiwgZiA9IGFbZV0sIGFbZV0gPSBmdW5jdGlvbiAoKSB7IGcgPSBhcmd1bWVudHMgfSwgZC5hbHdheXMoZnVuY3Rpb24gKCkgeyBhW2VdID0gZiwgYltlXSAmJiAoYi5qc29ucENhbGxiYWNrID0gYy5qc29ucENhbGxiYWNrLCBfYy5wdXNoKGUpKSwgZyAmJiBtLmlzRnVuY3Rpb24oZikgJiYgZihnWzBdKSwgZyA9IGYgPSB2b2lkIDAgfSksICJzY3JpcHQiKSA6IHZvaWQgMCB9KSwgbS5wYXJzZUhUTUwgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyBpZiAoIWEgfHwgInN0cmluZyIgIT0gdHlwZW9mIGEpIHJldHVybiBudWxsOyAiYm9vbGVhbiIgPT0gdHlwZW9mIGIgJiYgKGMgPSBiLCBiID0gITEpLCBiID0gYiB8fCB5OyB2YXIgZCA9IHUuZXhlYyhhKSwgZSA9ICFjICYmIFtdOyByZXR1cm4gZCA/IFtiLmNyZWF0ZUVsZW1lbnQoZFsxXSldIDogKGQgPSBtLmJ1aWxkRnJhZ21lbnQoW2FdLCBiLCBlKSwgZSAmJiBlLmxlbmd0aCAmJiBtKGUpLnJlbW92ZSgpLCBtLm1lcmdlKFtdLCBkLmNoaWxkTm9kZXMpKSB9OyB2YXIgYmQgPSBtLmZuLmxvYWQ7IG0uZm4ubG9hZCA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IGlmICgic3RyaW5nIiAhPSB0eXBlb2YgYSAmJiBiZCkgcmV0dXJuIGJkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IHZhciBkLCBlLCBmLCBnID0gdGhpcywgaCA9IGEuaW5kZXhPZigiICIpOyByZXR1cm4gaCA+PSAwICYmIChkID0gbS50cmltKGEuc2xpY2UoaCwgYS5sZW5ndGgpKSwgYSA9IGEuc2xpY2UoMCwgaCkpLCBtLmlzRnVuY3Rpb24oYikgPyAoYyA9IGIsIGIgPSB2b2lkIDApIDogYiAmJiAib2JqZWN0IiA9PSB0eXBlb2YgYiAmJiAoZiA9ICJQT1NUIiksIGcubGVuZ3RoID4gMCAmJiBtLmFqYXgoeyB1cmw6IGEsIHR5cGU6IGYsIGRhdGFUeXBlOiAiaHRtbCIsIGRhdGE6IGIgfSkuZG9uZShmdW5jdGlvbiAoYSkgeyBlID0gYXJndW1lbnRzLCBnLmh0bWwoZCA/IG0oIjxkaXY+IikuYXBwZW5kKG0ucGFyc2VIVE1MKGEpKS5maW5kKGQpIDogYSkgfSkuY29tcGxldGUoYyAmJiBmdW5jdGlvbiAoYSwgYikgeyBnLmVhY2goYywgZSB8fCBbYS5yZXNwb25zZVRleHQsIGIsIGFdKSB9KSwgdGhpcyB9LCBtLmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBtLmdyZXAobS50aW1lcnMsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBhID09PSBiLmVsZW0gfSkubGVuZ3RoIH07IHZhciBjZCA9IGEuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OyBmdW5jdGlvbiBkZChhKSB7IHJldHVybiBtLmlzV2luZG93KGEpID8gYSA6IDkgPT09IGEubm9kZVR5cGUgPyBhLmRlZmF1bHRWaWV3IHx8IGEucGFyZW50V2luZG93IDogITEgfSBtLm9mZnNldCA9IHsgc2V0T2Zmc2V0OiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCwgZSwgZiwgZywgaCwgaSwgaiwgayA9IG0uY3NzKGEsICJwb3NpdGlvbiIpLCBsID0gbShhKSwgbiA9IHt9OyAic3RhdGljIiA9PT0gayAmJiAoYS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSIpLCBoID0gbC5vZmZzZXQoKSwgZiA9IG0uY3NzKGEsICJ0b3AiKSwgaSA9IG0uY3NzKGEsICJsZWZ0IiksIGogPSAoImFic29sdXRlIiA9PT0gayB8fCAiZml4ZWQiID09PSBrKSAmJiBtLmluQXJyYXkoImF1dG8iLCBbZiwgaV0pID4gLTEsIGogPyAoZCA9IGwucG9zaXRpb24oKSwgZyA9IGQudG9wLCBlID0gZC5sZWZ0KSA6IChnID0gcGFyc2VGbG9hdChmKSB8fCAwLCBlID0gcGFyc2VGbG9hdChpKSB8fCAwKSwgbS5pc0Z1bmN0aW9uKGIpICYmIChiID0gYi5jYWxsKGEsIGMsIGgpKSwgbnVsbCAhPSBiLnRvcCAmJiAobi50b3AgPSBiLnRvcCAtIGgudG9wICsgZyksIG51bGwgIT0gYi5sZWZ0ICYmIChuLmxlZnQgPSBiLmxlZnQgLSBoLmxlZnQgKyBlKSwgInVzaW5nIiBpbiBiID8gYi51c2luZy5jYWxsKGEsIG4pIDogbC5jc3MobikgfSB9LCBtLmZuLmV4dGVuZCh7IG9mZnNldDogZnVuY3Rpb24gKGEpIHsgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB2b2lkIDAgPT09IGEgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uIChiKSB7IG0ub2Zmc2V0LnNldE9mZnNldCh0aGlzLCBhLCBiKSB9KTsgdmFyIGIsIGMsIGQgPSB7IHRvcDogMCwgbGVmdDogMCB9LCBlID0gdGhpc1swXSwgZiA9IGUgJiYgZS5vd25lckRvY3VtZW50OyBpZiAoZikgcmV0dXJuIGIgPSBmLmRvY3VtZW50RWxlbWVudCwgbS5jb250YWlucyhiLCBlKSA/ICh0eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09IEsgJiYgKGQgPSBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSwgYyA9IGRkKGYpLCB7IHRvcDogZC50b3AgKyAoYy5wYWdlWU9mZnNldCB8fCBiLnNjcm9sbFRvcCkgLSAoYi5jbGllbnRUb3AgfHwgMCksIGxlZnQ6IGQubGVmdCArIChjLnBhZ2VYT2Zmc2V0IHx8IGIuc2Nyb2xsTGVmdCkgLSAoYi5jbGllbnRMZWZ0IHx8IDApIH0pIDogZCB9LCBwb3NpdGlvbjogZnVuY3Rpb24gKCkgeyBpZiAodGhpc1swXSkgeyB2YXIgYSwgYiwgYyA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sIGQgPSB0aGlzWzBdOyByZXR1cm4gImZpeGVkIiA9PT0gbS5jc3MoZCwgInBvc2l0aW9uIikgPyBiID0gZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IChhID0gdGhpcy5vZmZzZXRQYXJlbnQoKSwgYiA9IHRoaXMub2Zmc2V0KCksIG0ubm9kZU5hbWUoYVswXSwgImh0bWwiKSB8fCAoYyA9IGEub2Zmc2V0KCkpLCBjLnRvcCArPSBtLmNzcyhhWzBdLCAiYm9yZGVyVG9wV2lkdGgiLCAhMCksIGMubGVmdCArPSBtLmNzcyhhWzBdLCAiYm9yZGVyTGVmdFdpZHRoIiwgITApKSwgeyB0b3A6IGIudG9wIC0gYy50b3AgLSBtLmNzcyhkLCAibWFyZ2luVG9wIiwgITApLCBsZWZ0OiBiLmxlZnQgLSBjLmxlZnQgLSBtLmNzcyhkLCAibWFyZ2luTGVmdCIsICEwKSB9IH0gfSwgb2Zmc2V0UGFyZW50OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoKSB7IHZhciBhID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgY2Q7IHdoaWxlIChhICYmICFtLm5vZGVOYW1lKGEsICJodG1sIikgJiYgInN0YXRpYyIgPT09IG0uY3NzKGEsICJwb3NpdGlvbiIpKSBhID0gYS5vZmZzZXRQYXJlbnQ7IHJldHVybiBhIHx8IGNkIH0pIH0gfSksIG0uZWFjaCh7IHNjcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0IiB9LCBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IC9ZLy50ZXN0KGIpOyBtLmZuW2FdID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIFYodGhpcywgZnVuY3Rpb24gKGEsIGQsIGUpIHsgdmFyIGYgPSBkZChhKTsgcmV0dXJuIHZvaWQgMCA9PT0gZSA/IGYgPyBiIGluIGYgPyBmW2JdIDogZi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZF0gOiBhW2RdIDogdm9pZCAoZiA/IGYuc2Nyb2xsVG8oYyA/IG0oZikuc2Nyb2xsTGVmdCgpIDogZSwgYyA/IGUgOiBtKGYpLnNjcm9sbFRvcCgpKSA6IGFbZF0gPSBlKSB9LCBhLCBkLCBhcmd1bWVudHMubGVuZ3RoLCBudWxsKSB9IH0pLCBtLmVhY2goWyJ0b3AiLCAibGVmdCJdLCBmdW5jdGlvbiAoYSwgYikgeyBtLmNzc0hvb2tzW2JdID0gTGIoay5waXhlbFBvc2l0aW9uLCBmdW5jdGlvbiAoYSwgYykgeyByZXR1cm4gYyA/IChjID0gSmIoYSwgYiksIEhiLnRlc3QoYykgPyBtKGEpLnBvc2l0aW9uKClbYl0gKyAicHgiIDogYykgOiB2b2lkIDAgfSkgfSksIG0uZWFjaCh7IEhlaWdodDogImhlaWdodCIsIFdpZHRoOiAid2lkdGgiIH0sIGZ1bmN0aW9uIChhLCBiKSB7IG0uZWFjaCh7IHBhZGRpbmc6ICJpbm5lciIgKyBhLCBjb250ZW50OiBiLCAiIjogIm91dGVyIiArIGEgfSwgZnVuY3Rpb24gKGMsIGQpIHsgbS5mbltkXSA9IGZ1bmN0aW9uIChkLCBlKSB7IHZhciBmID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoYyB8fCAiYm9vbGVhbiIgIT0gdHlwZW9mIGQpLCBnID0gYyB8fCAoZCA9PT0gITAgfHwgZSA9PT0gITAgPyAibWFyZ2luIiA6ICJib3JkZXIiKTsgcmV0dXJuIFYodGhpcywgZnVuY3Rpb24gKGIsIGMsIGQpIHsgdmFyIGU7IHJldHVybiBtLmlzV2luZG93KGIpID8gYi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIgKyBhXSA6IDkgPT09IGIubm9kZVR5cGUgPyAoZSA9IGIuZG9jdW1lbnRFbGVtZW50LCBNYXRoLm1heChiLmJvZHlbInNjcm9sbCIgKyBhXSwgZVsic2Nyb2xsIiArIGFdLCBiLmJvZHlbIm9mZnNldCIgKyBhXSwgZVsib2Zmc2V0IiArIGFdLCBlWyJjbGllbnQiICsgYV0pKSA6IHZvaWQgMCA9PT0gZCA/IG0uY3NzKGIsIGMsIGcpIDogbS5zdHlsZShiLCBjLCBkLCBnKSB9LCBiLCBmID8gZCA6IHZvaWQgMCwgZiwgbnVsbCkgfSB9KSB9KSwgbS5mbi5zaXplID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5sZW5ndGggfSwgbS5mbi5hbmRTZWxmID0gbS5mbi5hZGRCYWNrLCAiZnVuY3Rpb24iID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCAmJiBkZWZpbmUoImpxdWVyeSIsIFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBtIH0pOyB2YXIgZWQgPSBhLmpRdWVyeSwgZmQgPSBhLiQ7IHJldHVybiBtLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoYikgeyByZXR1cm4gYS4kID09PSBtICYmIChhLiQgPSBmZCksIGIgJiYgYS5qUXVlcnkgPT09IG0gJiYgKGEualF1ZXJ5ID0gZWQpLCBtIH0sIHR5cGVvZiBiID09PSBLICYmIChhLmpRdWVyeSA9IGEuJCA9IG0pLCBtDQp9KTsNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCi8qISBqUXVlcnkgTWlncmF0ZSB2MS4yLjEgfCAoYykgMjAwNSwgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCmpRdWVyeS5taWdyYXRlTXV0ZT09PXZvaWQgMCYmKGpRdWVyeS5taWdyYXRlTXV0ZT0hMCksZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIobil7dmFyIHI9dC5jb25zb2xlO2lbbl18fChpW25dPSEwLGUubWlncmF0ZVdhcm5pbmdzLnB1c2gobiksciYmci53YXJuJiYhZS5taWdyYXRlTXV0ZSYmKHIud2FybigiSlFNSUdSQVRFOiAiK24pLGUubWlncmF0ZVRyYWNlJiZyLnRyYWNlJiZyLnRyYWNlKCkpKX1mdW5jdGlvbiBhKHQsYSxpLG8pe2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByKG8pLGl9LHNldDpmdW5jdGlvbihlKXtyKG8pLGk9ZX19KSxufWNhdGNoKHMpe31lLl9kZWZpbmVQcm9wZXJ0eUJyb2tlbj0hMCx0W2FdPWl9dmFyIGk9e307ZS5taWdyYXRlV2FybmluZ3M9W10sIWUubWlncmF0ZU11dGUmJnQuY29uc29sZSYmdC5jb25zb2xlLmxvZyYmdC5jb25zb2xlLmxvZygiSlFNSUdSQVRFOiBMb2dnaW5nIGlzIGFjdGl2ZSIpLGUubWlncmF0ZVRyYWNlPT09biYmKGUubWlncmF0ZVRyYWNlPSEwKSxlLm1pZ3JhdGVSZXNldD1mdW5jdGlvbigpe2k9e30sZS5taWdyYXRlV2FybmluZ3MubGVuZ3RoPTB9LCJCYWNrQ29tcGF0Ij09PWRvY3VtZW50LmNvbXBhdE1vZGUmJnIoImpRdWVyeSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFF1aXJrcyBNb2RlIik7dmFyIG89ZSgiPGlucHV0Lz4iLHtzaXplOjF9KS5hdHRyKCJzaXplIikmJmUuYXR0ckZuLHM9ZS5hdHRyLHU9ZS5hdHRySG9va3MudmFsdWUmJmUuYXR0ckhvb2tzLnZhbHVlLmdldHx8ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sYz1lLmF0dHJIb29rcy52YWx1ZSYmZS5hdHRySG9va3MudmFsdWUuc2V0fHxmdW5jdGlvbigpe3JldHVybiBufSxsPS9eKD86aW5wdXR8YnV0dG9uKSQvaSxkPS9eWzIzOF0kLyxwPS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLGY9L14oPzpjaGVja2VkfHNlbGVjdGVkKSQvaTthKGUsImF0dHJGbiIsb3x8e30sImpRdWVyeS5hdHRyRm4gaXMgZGVwcmVjYXRlZCIpLGUuYXR0cj1mdW5jdGlvbih0LGEsaSx1KXt2YXIgYz1hLnRvTG93ZXJDYXNlKCksZz10JiZ0Lm5vZGVUeXBlO3JldHVybiB1JiYoND5zLmxlbmd0aCYmcigialF1ZXJ5LmZuLmF0dHIoIHByb3BzLCBwYXNzICkgaXMgZGVwcmVjYXRlZCIpLHQmJiFkLnRlc3QoZykmJihvP2EgaW4gbzplLmlzRnVuY3Rpb24oZS5mblthXSkpKT9lKHQpW2FdKGkpOigidHlwZSI9PT1hJiZpIT09biYmbC50ZXN0KHQubm9kZU5hbWUpJiZ0LnBhcmVudE5vZGUmJnIoIkNhbid0IGNoYW5nZSB0aGUgJ3R5cGUnIG9mIGFuIGlucHV0IG9yIGJ1dHRvbiBpbiBJRSA2LzcvOCIpLCFlLmF0dHJIb29rc1tjXSYmcC50ZXN0KGMpJiYoZS5hdHRySG9va3NbY109e2dldDpmdW5jdGlvbih0LHIpe3ZhciBhLGk9ZS5wcm9wKHQscik7cmV0dXJuIGk9PT0hMHx8ImJvb2xlYW4iIT10eXBlb2YgaSYmKGE9dC5nZXRBdHRyaWJ1dGVOb2RlKHIpKSYmYS5ub2RlVmFsdWUhPT0hMT9yLnRvTG93ZXJDYXNlKCk6bn0sc2V0OmZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gbj09PSExP2UucmVtb3ZlQXR0cih0LHIpOihhPWUucHJvcEZpeFtyXXx8cixhIGluIHQmJih0W2FdPSEwKSx0LnNldEF0dHJpYnV0ZShyLHIudG9Mb3dlckNhc2UoKSkpLHJ9fSxmLnRlc3QoYykmJnIoImpRdWVyeS5mbi5hdHRyKCciK2MrIicpIG1heSB1c2UgcHJvcGVydHkgaW5zdGVhZCBvZiBhdHRyaWJ1dGUiKSkscy5jYWxsKGUsdCxhLGkpKX0sZS5hdHRySG9va3MudmFsdWU9e2dldDpmdW5jdGlvbihlLHQpe3ZhciBuPShlLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKTtyZXR1cm4iYnV0dG9uIj09PW4/dS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KCJpbnB1dCIhPT1uJiYib3B0aW9uIiE9PW4mJnIoImpRdWVyeS5mbi5hdHRyKCd2YWx1ZScpIG5vIGxvbmdlciBnZXRzIHByb3BlcnRpZXMiKSx0IGluIGU/ZS52YWx1ZTpudWxsKX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIGE9KGUubm9kZU5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiJidXR0b24iPT09YT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTooImlucHV0IiE9PWEmJiJvcHRpb24iIT09YSYmcigialF1ZXJ5LmZuLmF0dHIoJ3ZhbHVlJywgdmFsKSBubyBsb25nZXIgc2V0cyBwcm9wZXJ0aWVzIiksZS52YWx1ZT10LG4pfX07dmFyIGcsaCx2PWUuZm4uaW5pdCxtPWUucGFyc2VKU09OLHk9L14oW148XSopKDxbXHdcV10rPikoW14+XSopJC87ZS5mbi5pbml0PWZ1bmN0aW9uKHQsbixhKXt2YXIgaTtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0JiYhZS5pc1BsYWluT2JqZWN0KG4pJiYoaT15LmV4ZWMoZS50cmltKHQpKSkmJmlbMF0mJigiPCIhPT10LmNoYXJBdCgwKSYmcigiJChodG1sKSBIVE1MIHN0cmluZ3MgbXVzdCBzdGFydCB3aXRoICc8JyBjaGFyYWN0ZXIiKSxpWzNdJiZyKCIkKGh0bWwpIEhUTUwgdGV4dCBhZnRlciBsYXN0IHRhZyBpcyBpZ25vcmVkIiksIiMiPT09aVswXS5jaGFyQXQoMCkmJihyKCJIVE1MIHN0cmluZyBjYW5ub3Qgc3RhcnQgd2l0aCBhICcjJyBjaGFyYWN0ZXIiKSxlLmVycm9yKCJKUU1JR1JBVEU6IEludmFsaWQgc2VsZWN0b3Igc3RyaW5nIChYU1MpIikpLG4mJm4uY29udGV4dCYmKG49bi5jb250ZXh0KSxlLnBhcnNlSFRNTCk/di5jYWxsKHRoaXMsZS5wYXJzZUhUTUwoaVsyXSxuLCEwKSxuLGEpOnYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm4sZS5wYXJzZUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fG51bGw9PT1lP20uYXBwbHkodGhpcyxhcmd1bWVudHMpOihyKCJqUXVlcnkucGFyc2VKU09OIHJlcXVpcmVzIGEgdmFsaWQgSlNPTiBzdHJpbmciKSxudWxsKX0sZS51YU1hdGNoPWZ1bmN0aW9uKGUpe2U9ZS50b0xvd2VyQ2FzZSgpO3ZhciB0PS8oY2hyb21lKVsgXC9dKFtcdy5dKykvLmV4ZWMoZSl8fC8od2Via2l0KVsgXC9dKFtcdy5dKykvLmV4ZWMoZSl8fC8ob3BlcmEpKD86Lip2ZXJzaW9ufClbIFwvXShbXHcuXSspLy5leGVjKGUpfHwvKG1zaWUpIChbXHcuXSspLy5leGVjKGUpfHwwPmUuaW5kZXhPZigiY29tcGF0aWJsZSIpJiYvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspfCkvLmV4ZWMoZSl8fFtdO3JldHVybnticm93c2VyOnRbMV18fCIiLHZlcnNpb246dFsyXXx8IjAifX0sZS5icm93c2VyfHwoZz1lLnVhTWF0Y2gobmF2aWdhdG9yLnVzZXJBZ2VudCksaD17fSxnLmJyb3dzZXImJihoW2cuYnJvd3Nlcl09ITAsaC52ZXJzaW9uPWcudmVyc2lvbiksaC5jaHJvbWU/aC53ZWJraXQ9ITA6aC53ZWJraXQmJihoLnNhZmFyaT0hMCksZS5icm93c2VyPWgpLGEoZSwiYnJvd3NlciIsZS5icm93c2VyLCJqUXVlcnkuYnJvd3NlciBpcyBkZXByZWNhdGVkIiksZS5zdWI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbil7cmV0dXJuIG5ldyB0LmZuLmluaXQoZSxuKX1lLmV4dGVuZCghMCx0LHRoaXMpLHQuc3VwZXJjbGFzcz10aGlzLHQuZm49dC5wcm90b3R5cGU9dGhpcygpLHQuZm4uY29uc3RydWN0b3I9dCx0LnN1Yj10aGlzLnN1Yix0LmZuLmluaXQ9ZnVuY3Rpb24ocixhKXtyZXR1cm4gYSYmYSBpbnN0YW5jZW9mIGUmJiEoYSBpbnN0YW5jZW9mIHQpJiYoYT10KGEpKSxlLmZuLmluaXQuY2FsbCh0aGlzLHIsYSxuKX0sdC5mbi5pbml0LnByb3RvdHlwZT10LmZuO3ZhciBuPXQoZG9jdW1lbnQpO3JldHVybiByKCJqUXVlcnkuc3ViKCkgaXMgZGVwcmVjYXRlZCIpLHR9LGUuYWpheFNldHVwKHtjb252ZXJ0ZXJzOnsidGV4dCBqc29uIjplLnBhcnNlSlNPTn19KTt2YXIgYj1lLmZuLmRhdGE7ZS5mbi5kYXRhPWZ1bmN0aW9uKHQpe3ZhciBhLGksbz10aGlzWzBdO3JldHVybiFvfHwiZXZlbnRzIiE9PXR8fDEhPT1hcmd1bWVudHMubGVuZ3RofHwoYT1lLmRhdGEobyx0KSxpPWUuX2RhdGEobyx0KSxhIT09biYmYSE9PWl8fGk9PT1uKT9iLmFwcGx5KHRoaXMsYXJndW1lbnRzKToocigiVXNlIG9mIGpRdWVyeS5mbi5kYXRhKCdldmVudHMnKSBpcyBkZXByZWNhdGVkIiksaSl9O3ZhciBqPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksdz1lLmZuLmFuZFNlbGZ8fGUuZm4uYWRkQmFjaztlLmZuLmFuZFNlbGY9ZnVuY3Rpb24oKXtyZXR1cm4gcigialF1ZXJ5LmZuLmFuZFNlbGYoKSByZXBsYWNlZCBieSBqUXVlcnkuZm4uYWRkQmFjaygpIiksdy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuY2xlYW58fChlLmNsZWFuPWZ1bmN0aW9uKHQsYSxpLG8pe2E9YXx8ZG9jdW1lbnQsYT0hYS5ub2RlVHlwZSYmYVswXXx8YSxhPWEub3duZXJEb2N1bWVudHx8YSxyKCJqUXVlcnkuY2xlYW4oKSBpcyBkZXByZWNhdGVkIik7dmFyIHMsdSxjLGwsZD1bXTtpZihlLm1lcmdlKGQsZS5idWlsZEZyYWdtZW50KHQsYSkuY2hpbGROb2RlcyksaSlmb3IoYz1mdW5jdGlvbihlKXtyZXR1cm4hZS50eXBlfHxqLnRlc3QoZS50eXBlKT9vP28ucHVzaChlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpOmUpOmkuYXBwZW5kQ2hpbGQoZSk6bn0scz0wO251bGwhPSh1PWRbc10pO3MrKyllLm5vZGVOYW1lKHUsInNjcmlwdCIpJiZjKHUpfHwoaS5hcHBlbmRDaGlsZCh1KSx1LmdldEVsZW1lbnRzQnlUYWdOYW1lIT09biYmKGw9ZS5ncmVwKGUubWVyZ2UoW10sdS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpLGMpLGQuc3BsaWNlLmFwcGx5KGQsW3MrMSwwXS5jb25jYXQobCkpLHMrPWwubGVuZ3RoKSk7cmV0dXJuIGR9KTt2YXIgUT1lLmV2ZW50LmFkZCx4PWUuZXZlbnQucmVtb3ZlLGs9ZS5ldmVudC50cmlnZ2VyLE49ZS5mbi50b2dnbGUsVD1lLmZuLmxpdmUsTT1lLmZuLmRpZSxTPSJhamF4U3RhcnR8YWpheFN0b3B8YWpheFNlbmR8YWpheENvbXBsZXRlfGFqYXhFcnJvcnxhamF4U3VjY2VzcyIsQz1SZWdFeHAoIlxcYig/OiIrUysiKVxcYiIpLEg9Lyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxiLyxBPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8ZS5ldmVudC5zcGVjaWFsLmhvdmVyP3Q6KEgudGVzdCh0KSYmcigiJ2hvdmVyJyBwc2V1ZG8tZXZlbnQgaXMgZGVwcmVjYXRlZCwgdXNlICdtb3VzZWVudGVyIG1vdXNlbGVhdmUnIiksdCYmdC5yZXBsYWNlKEgsIm1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiKSl9O2UuZXZlbnQucHJvcHMmJiJhdHRyQ2hhbmdlIiE9PWUuZXZlbnQucHJvcHNbMF0mJmUuZXZlbnQucHJvcHMudW5zaGlmdCgiYXR0ckNoYW5nZSIsImF0dHJOYW1lIiwicmVsYXRlZE5vZGUiLCJzcmNFbGVtZW50IiksZS5ldmVudC5kaXNwYXRjaCYmYShlLmV2ZW50LCJoYW5kbGUiLGUuZXZlbnQuZGlzcGF0Y2gsImpRdWVyeS5ldmVudC5oYW5kbGUgaXMgdW5kb2N1bWVudGVkIGFuZCBkZXByZWNhdGVkIiksZS5ldmVudC5hZGQ9ZnVuY3Rpb24oZSx0LG4sYSxpKXtlIT09ZG9jdW1lbnQmJkMudGVzdCh0KSYmcigiQUpBWCBldmVudHMgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGRvY3VtZW50OiAiK3QpLFEuY2FsbCh0aGlzLGUsQSh0fHwiIiksbixhLGkpfSxlLmV2ZW50LnJlbW92ZT1mdW5jdGlvbihlLHQsbixyLGEpe3guY2FsbCh0aGlzLGUsQSh0KXx8IiIsbixyLGEpfSxlLmZuLmVycm9yPWZ1bmN0aW9uKCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiByKCJqUXVlcnkuZm4uZXJyb3IoKSBpcyBkZXByZWNhdGVkIiksZS5zcGxpY2UoMCwwLCJlcnJvciIpLGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5iaW5kLmFwcGx5KHRoaXMsZSk6KHRoaXMudHJpZ2dlckhhbmRsZXIuYXBwbHkodGhpcyxlKSx0aGlzKX0sZS5mbi50b2dnbGU9ZnVuY3Rpb24odCxuKXtpZighZS5pc0Z1bmN0aW9uKHQpfHwhZS5pc0Z1bmN0aW9uKG4pKXJldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyKCJqUXVlcnkuZm4udG9nZ2xlKGhhbmRsZXIsIGhhbmRsZXIuLi4pIGlzIGRlcHJlY2F0ZWQiKTt2YXIgYT1hcmd1bWVudHMsaT10Lmd1aWR8fGUuZ3VpZCsrLG89MCxzPWZ1bmN0aW9uKG4pe3ZhciByPShlLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK3QuZ3VpZCl8fDApJW87cmV0dXJuIGUuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrdC5ndWlkLHIrMSksbi5wcmV2ZW50RGVmYXVsdCgpLGFbcl0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwhMX07Zm9yKHMuZ3VpZD1pO2EubGVuZ3RoPm87KWFbbysrXS5ndWlkPWk7cmV0dXJuIHRoaXMuY2xpY2socyl9LGUuZm4ubGl2ZT1mdW5jdGlvbih0LG4sYSl7cmV0dXJuIHIoImpRdWVyeS5mbi5saXZlKCkgaXMgZGVwcmVjYXRlZCIpLFQ/VC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KGUodGhpcy5jb250ZXh0KS5vbih0LHRoaXMuc2VsZWN0b3IsbixhKSx0aGlzKX0sZS5mbi5kaWU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcigialF1ZXJ5LmZuLmRpZSgpIGlzIGRlcHJlY2F0ZWQiKSxNP00uYXBwbHkodGhpcyxhcmd1bWVudHMpOihlKHRoaXMuY29udGV4dCkub2ZmKHQsdGhpcy5zZWxlY3Rvcnx8IioqIixuKSx0aGlzKX0sZS5ldmVudC50cmlnZ2VyPWZ1bmN0aW9uKGUsdCxuLGEpe3JldHVybiBufHxDLnRlc3QoZSl8fHIoIkdsb2JhbCBldmVudHMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgZGVwcmVjYXRlZCIpLGsuY2FsbCh0aGlzLGUsdCxufHxkb2N1bWVudCxhKX0sZS5lYWNoKFMuc3BsaXQoInwiKSxmdW5jdGlvbih0LG4pe2UuZXZlbnQuc3BlY2lhbFtuXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0IT09ZG9jdW1lbnQmJihlLmV2ZW50LmFkZChkb2N1bWVudCxuKyIuIitlLmd1aWQsZnVuY3Rpb24oKXtlLmV2ZW50LnRyaWdnZXIobixudWxsLHQsITApfSksZS5fZGF0YSh0aGlzLG4sZS5ndWlkKyspKSwhMX0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PWRvY3VtZW50JiZlLmV2ZW50LnJlbW92ZShkb2N1bWVudCxuKyIuIitlLl9kYXRhKHRoaXMsbikpLCExfX19KX0oalF1ZXJ5LHdpbmRvdyk7DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovLyBqUXVlcnkgTWFzayBQbHVnaW4gdjEuMy4yCi8vIGdpdGh1Yi5jb20vaWdvcmVzY29iYXIvalF1ZXJ5LU1hc2stUGx1Z2luCihmdW5jdGlvbihjKXt2YXIgdz1mdW5jdGlvbihhLGQsZSl7dmFyIGY9dGhpczthPWMoYSk7dmFyIGw7ZD0iZnVuY3Rpb24iPT10eXBlb2YgZD9kKGEudmFsKCksdm9pZCAwLGEsZSk6ZDtmLmluaXQ9ZnVuY3Rpb24oKXtlPWV8fHt9O2YuYnlQYXNzS2V5cz1bOCw5LDE2LDM2LDM3LDM4LDM5LDQwLDQ2LDkxXTtmLnRyYW5zbGF0aW9uPXswOntwYXR0ZXJuOi9cZC99LDk6e3BhdHRlcm46L1xkLyxvcHRpb25hbDohMH0sIiMiOntwYXR0ZXJuOi9cZC8scmVjdXJzaXZlOiEwfSxBOntwYXR0ZXJuOi9bYS16QS1aMC05XS99LFM6e3BhdHRlcm46L1thLXpBLVpdL319O2YudHJhbnNsYXRpb249Yy5leHRlbmQoe30sZi50cmFuc2xhdGlvbixlLnRyYW5zbGF0aW9uKTtmPWMuZXh0ZW5kKCEwLHt9LGYsZSk7YS5lYWNoKGZ1bmN0aW9uKCl7ITEhPT1lLm1heGxlbmd0aCYmYS5hdHRyKCJtYXhsZW5ndGgiLGQubGVuZ3RoKTthLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpO2cuZGVzdHJveUV2ZW50cygpOwpnLmV2ZW50cygpO2cudmFsKGcuZ2V0TWFza2VkKCkpfSl9O3ZhciBnPXtldmVudHM6ZnVuY3Rpb24oKXthLm9uKCJrZXlkb3duLm1hc2siLGZ1bmN0aW9uKCl7bD1nLnZhbCgpfSk7YS5vbigia2V5dXAubWFzayIsZy5iZWhhdmlvdXIpO2Eub24oInBhc3RlLm1hc2siLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2Eua2V5ZG93bigpLmtleXVwKCl9LDEwMCl9KX0sZGVzdHJveUV2ZW50czpmdW5jdGlvbigpe2Eub2ZmKCJrZXlkb3duLm1hc2siKS5vZmYoImtleXVwLm1hc2siKS5vZmYoInBhc3RlLm1hc2siKX0sdmFsOmZ1bmN0aW9uKHYpe3ZhciBkPSJpbnB1dCI9PT1hLmdldCgwKS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIDA8YXJndW1lbnRzLmxlbmd0aD9kP2EudmFsKHYpOmEudGV4dCh2KTpkP2EudmFsKCk6YS50ZXh0KCl9LGJlaGF2aW91cjpmdW5jdGlvbihhKXthPWF8fHdpbmRvdy5ldmVudDtpZigtMT09PWMuaW5BcnJheShhLmtleUNvZGV8fGEud2hpY2gsCmYuYnlQYXNzS2V5cykpcmV0dXJuIGcudmFsKGcuZ2V0TWFza2VkKCkpLGcuY2FsbGJhY2tzKGEpfSxnZXRNYXNrZWQ6ZnVuY3Rpb24oKXt2YXIgYT1bXSxjPWcudmFsKCksYj0wLHE9ZC5sZW5ndGgsaD0wLGw9Yy5sZW5ndGgsaz0xLHI9InB1c2giLG09LTEsbixzO2UucmV2ZXJzZT8ocj0idW5zaGlmdCIsaz0tMSxuPTAsYj1xLTEsaD1sLTEscz1mdW5jdGlvbigpe3JldHVybi0xPGImJi0xPGh9KToobj1xLTEscz1mdW5jdGlvbigpe3JldHVybiBiPHEmJmg8bH0pO2Zvcig7cygpOyl7dmFyIHQ9ZC5jaGFyQXQoYiksdT1jLmNoYXJBdChoKSxwPWYudHJhbnNsYXRpb25bdF07cD8odS5tYXRjaChwLnBhdHRlcm4pPyhhW3JdKHUpLHAucmVjdXJzaXZlJiYoLTE9PW0/bT1iOmI9PW4mJihiPW0tayksbj09bSYmKGItPWspKSxiKz1rKTpwLm9wdGlvbmFsJiYoYis9ayxoLT1rKSxoKz1rKTooYVtyXSh0KSx1PT10JiYoaCs9ayksYis9ayl9cmV0dXJuIGEuam9pbigiIil9LGNhbGxiYWNrczpmdW5jdGlvbihmKXt2YXIgYz0KZy52YWwoKSxiPWcudmFsKCkhPT1sO2lmKCEwPT09YiYmImZ1bmN0aW9uIj09dHlwZW9mIGUub25DaGFuZ2UpZS5vbkNoYW5nZShjLGYsYSxlKTtpZighMD09PWImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uS2V5UHJlc3MpZS5vbktleVByZXNzKGMsZixhLGUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZS5vbkNvbXBsZXRlJiZjLmxlbmd0aD09PWQubGVuZ3RoKWUub25Db21wbGV0ZShjLGYsYSxlKX19O2YucmVtb3ZlPWZ1bmN0aW9uKCl7Zy5kZXN0cm95RXZlbnRzKCk7Zy52YWwoZi5nZXRDbGVhblZhbCgpKS5yZW1vdmVBdHRyKCJtYXhsZW5ndGgiKX07Zi5nZXRDbGVhblZhbD1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxjPWcudmFsKCksYj0wLGU9ZC5sZW5ndGg7YjxlO2IrKylmLnRyYW5zbGF0aW9uW2QuY2hhckF0KGIpXSYmYS5wdXNoKGMuY2hhckF0KGIpKTtyZXR1cm4gYS5qb2luKCIiKX07Zi5pbml0KCl9O2MuZm4ubWFzaz1mdW5jdGlvbihhLGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjKHRoaXMpLmRhdGEoIm1hc2siLApuZXcgdyh0aGlzLGEsZCkpfSl9O2MuZm4udW5tYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXtjKHRoaXMpLmRhdGEoIm1hc2siKS5yZW1vdmUoKX1jYXRjaChhKXt9fSl9O2MoImlucHV0W2RhdGEtbWFza10iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9Yyh0aGlzKSxkPXt9OyJ0cnVlIj09PWEuYXR0cigiZGF0YS1tYXNrLXJldmVyc2UiKSYmKGQucmV2ZXJzZT0hMCk7ImZhbHNlIj09PWEuYXR0cigiZGF0YS1tYXNrLW1heGxlbmd0aCIpJiYoZC5tYXhsZW5ndGg9ITEpO2EubWFzayhhLmF0dHIoImRhdGEtbWFzayIpLGQpfSl9KSh3aW5kb3cualF1ZXJ5fHx3aW5kb3cuWmVwdG8pOwoNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoJDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovKiEgalF1ZXJ5IFVJIC0gdjEuMTAuNCAtIDIwMTQtMDEtMTcNCiogaHR0cDovL2pxdWVyeXVpLmNvbQ0KKiBJbmNsdWRlczoganF1ZXJ5LnVpLmNvcmUuanMsIGpxdWVyeS51aS53aWRnZXQuanMsIGpxdWVyeS51aS5tb3VzZS5qcywganF1ZXJ5LnVpLnBvc2l0aW9uLmpzLCBqcXVlcnkudWkuYWNjb3JkaW9uLmpzLCBqcXVlcnkudWkuYXV0b2NvbXBsZXRlLmpzLCBqcXVlcnkudWkuYnV0dG9uLmpzLCBqcXVlcnkudWkuZGF0ZXBpY2tlci5qcywganF1ZXJ5LnVpLmRpYWxvZy5qcywganF1ZXJ5LnVpLmRyYWdnYWJsZS5qcywganF1ZXJ5LnVpLmRyb3BwYWJsZS5qcywganF1ZXJ5LnVpLmVmZmVjdC5qcywganF1ZXJ5LnVpLmVmZmVjdC1ibGluZC5qcywganF1ZXJ5LnVpLmVmZmVjdC1ib3VuY2UuanMsIGpxdWVyeS51aS5lZmZlY3QtY2xpcC5qcywganF1ZXJ5LnVpLmVmZmVjdC1kcm9wLmpzLCBqcXVlcnkudWkuZWZmZWN0LWV4cGxvZGUuanMsIGpxdWVyeS51aS5lZmZlY3QtZmFkZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1mb2xkLmpzLCBqcXVlcnkudWkuZWZmZWN0LWhpZ2hsaWdodC5qcywganF1ZXJ5LnVpLmVmZmVjdC1wdWxzYXRlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXNjYWxlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXNoYWtlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXNsaWRlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXRyYW5zZmVyLmpzLCBqcXVlcnkudWkubWVudS5qcywganF1ZXJ5LnVpLnByb2dyZXNzYmFyLmpzLCBqcXVlcnkudWkucmVzaXphYmxlLmpzLCBqcXVlcnkudWkuc2VsZWN0YWJsZS5qcywganF1ZXJ5LnVpLnNsaWRlci5qcywganF1ZXJ5LnVpLnNvcnRhYmxlLmpzLCBqcXVlcnkudWkuc3Bpbm5lci5qcywganF1ZXJ5LnVpLnRhYnMuanMsIGpxdWVyeS51aS50b29sdGlwLmpzDQoqIENvcHlyaWdodCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLw0KDQooZnVuY3Rpb24gKGUsIHQpIHsgZnVuY3Rpb24gaSh0LCBpKSB7IHZhciBzLCBhLCBvLCByID0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gImFyZWEiID09PSByID8gKHMgPSB0LnBhcmVudE5vZGUsIGEgPSBzLm5hbWUsIHQuaHJlZiAmJiBhICYmICJtYXAiID09PSBzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPyAobyA9IGUoImltZ1t1c2VtYXA9IyIgKyBhICsgIl0iKVswXSwgISFvICYmIG4obykpIDogITEpIDogKC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdC8udGVzdChyKSA/ICF0LmRpc2FibGVkIDogImEiID09PSByID8gdC5ocmVmIHx8IGkgOiBpKSAmJiBuKHQpIH0gZnVuY3Rpb24gbih0KSB7IHJldHVybiBlLmV4cHIuZmlsdGVycy52aXNpYmxlKHQpICYmICFlKHQpLnBhcmVudHMoKS5hZGRCYWNrKCkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuICJoaWRkZW4iID09PSBlLmNzcyh0aGlzLCAidmlzaWJpbGl0eSIpIH0pLmxlbmd0aCB9IHZhciBzID0gMCwgYSA9IC9edWktaWQtXGQrJC87IGUudWkgPSBlLnVpIHx8IHt9LCBlLmV4dGVuZChlLnVpLCB7IHZlcnNpb246ICIxLjEwLjQiLCBrZXlDb2RlOiB7IEJBQ0tTUEFDRTogOCwgQ09NTUE6IDE4OCwgREVMRVRFOiA0NiwgRE9XTjogNDAsIEVORDogMzUsIEVOVEVSOiAxMywgRVNDQVBFOiAyNywgSE9NRTogMzYsIExFRlQ6IDM3LCBOVU1QQURfQUREOiAxMDcsIE5VTVBBRF9ERUNJTUFMOiAxMTAsIE5VTVBBRF9ESVZJREU6IDExMSwgTlVNUEFEX0VOVEVSOiAxMDgsIE5VTVBBRF9NVUxUSVBMWTogMTA2LCBOVU1QQURfU1VCVFJBQ1Q6IDEwOSwgUEFHRV9ET1dOOiAzNCwgUEFHRV9VUDogMzMsIFBFUklPRDogMTkwLCBSSUdIVDogMzksIFNQQUNFOiAzMiwgVEFCOiA5LCBVUDogMzggfSB9KSwgZS5mbi5leHRlbmQoeyBmb2N1czogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChpLCBuKSB7IHJldHVybiAibnVtYmVyIiA9PSB0eXBlb2YgaSA/IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpczsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGUodCkuZm9jdXMoKSwgbiAmJiBuLmNhbGwodCkgfSwgaSkgfSkgOiB0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfSB9KGUuZm4uZm9jdXMpLCBzY3JvbGxQYXJlbnQ6IGZ1bmN0aW9uICgpIHsgdmFyIHQ7IHJldHVybiB0ID0gZS51aS5pZSAmJiAvKHN0YXRpY3xyZWxhdGl2ZSkvLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpIHx8IC9hYnNvbHV0ZS8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSkgPyB0aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gLyhyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZCkvLnRlc3QoZS5jc3ModGhpcywgInBvc2l0aW9uIikpICYmIC8oYXV0b3xzY3JvbGwpLy50ZXN0KGUuY3NzKHRoaXMsICJvdmVyZmxvdyIpICsgZS5jc3ModGhpcywgIm92ZXJmbG93LXkiKSArIGUuY3NzKHRoaXMsICJvdmVyZmxvdy14IikpIH0pLmVxKDApIDogdGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIC8oYXV0b3xzY3JvbGwpLy50ZXN0KGUuY3NzKHRoaXMsICJvdmVyZmxvdyIpICsgZS5jc3ModGhpcywgIm92ZXJmbG93LXkiKSArIGUuY3NzKHRoaXMsICJvdmVyZmxvdy14IikpIH0pLmVxKDApLCAvZml4ZWQvLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpIHx8ICF0Lmxlbmd0aCA/IGUoZG9jdW1lbnQpIDogdCB9LCB6SW5kZXg6IGZ1bmN0aW9uIChpKSB7IGlmIChpICE9PSB0KSByZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsIGkpOyBpZiAodGhpcy5sZW5ndGgpIGZvciAodmFyIG4sIHMsIGEgPSBlKHRoaXNbMF0pIDsgYS5sZW5ndGggJiYgYVswXSAhPT0gZG9jdW1lbnQ7KSB7IGlmIChuID0gYS5jc3MoInBvc2l0aW9uIiksICgiYWJzb2x1dGUiID09PSBuIHx8ICJyZWxhdGl2ZSIgPT09IG4gfHwgImZpeGVkIiA9PT0gbikgJiYgKHMgPSBwYXJzZUludChhLmNzcygiekluZGV4IiksIDEwKSwgIWlzTmFOKHMpICYmIDAgIT09IHMpKSByZXR1cm4gczsgYSA9IGEucGFyZW50KCkgfSByZXR1cm4gMCB9LCB1bmlxdWVJZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdGhpcy5pZCB8fCAodGhpcy5pZCA9ICJ1aS1pZC0iICsgKytzKSB9KSB9LCByZW1vdmVVbmlxdWVJZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgYS50ZXN0KHRoaXMuaWQpICYmIGUodGhpcykucmVtb3ZlQXR0cigiaWQiKSB9KSB9IH0pLCBlLmV4dGVuZChlLmV4cHJbIjoiXSwgeyBkYXRhOiBlLmV4cHIuY3JlYXRlUHNldWRvID8gZS5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbiAodCkgeyByZXR1cm4gZnVuY3Rpb24gKGkpIHsgcmV0dXJuICEhZS5kYXRhKGksIHQpIH0gfSkgOiBmdW5jdGlvbiAodCwgaSwgbikgeyByZXR1cm4gISFlLmRhdGEodCwgblszXSkgfSwgZm9jdXNhYmxlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gaSh0LCAhaXNOYU4oZS5hdHRyKHQsICJ0YWJpbmRleCIpKSkgfSwgdGFiYmFibGU6IGZ1bmN0aW9uICh0KSB7IHZhciBuID0gZS5hdHRyKHQsICJ0YWJpbmRleCIpLCBzID0gaXNOYU4obik7IHJldHVybiAocyB8fCBuID49IDApICYmIGkodCwgIXMpIH0gfSksIGUoIjxhPiIpLm91dGVyV2lkdGgoMSkuanF1ZXJ5IHx8IGUuZWFjaChbIldpZHRoIiwgIkhlaWdodCJdLCBmdW5jdGlvbiAoaSwgbikgeyBmdW5jdGlvbiBzKHQsIGksIG4sIHMpIHsgcmV0dXJuIGUuZWFjaChhLCBmdW5jdGlvbiAoKSB7IGkgLT0gcGFyc2VGbG9hdChlLmNzcyh0LCAicGFkZGluZyIgKyB0aGlzKSkgfHwgMCwgbiAmJiAoaSAtPSBwYXJzZUZsb2F0KGUuY3NzKHQsICJib3JkZXIiICsgdGhpcyArICJXaWR0aCIpKSB8fCAwKSwgcyAmJiAoaSAtPSBwYXJzZUZsb2F0KGUuY3NzKHQsICJtYXJnaW4iICsgdGhpcykpIHx8IDApIH0pLCBpIH0gdmFyIGEgPSAiV2lkdGgiID09PSBuID8gWyJMZWZ0IiwgIlJpZ2h0Il0gOiBbIlRvcCIsICJCb3R0b20iXSwgbyA9IG4udG9Mb3dlckNhc2UoKSwgciA9IHsgaW5uZXJXaWR0aDogZS5mbi5pbm5lcldpZHRoLCBpbm5lckhlaWdodDogZS5mbi5pbm5lckhlaWdodCwgb3V0ZXJXaWR0aDogZS5mbi5vdXRlcldpZHRoLCBvdXRlckhlaWdodDogZS5mbi5vdXRlckhlaWdodCB9OyBlLmZuWyJpbm5lciIgKyBuXSA9IGZ1bmN0aW9uIChpKSB7IHJldHVybiBpID09PSB0ID8gclsiaW5uZXIiICsgbl0uY2FsbCh0aGlzKSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IGUodGhpcykuY3NzKG8sIHModGhpcywgaSkgKyAicHgiKSB9KSB9LCBlLmZuWyJvdXRlciIgKyBuXSA9IGZ1bmN0aW9uICh0LCBpKSB7IHJldHVybiAibnVtYmVyIiAhPSB0eXBlb2YgdCA/IHJbIm91dGVyIiArIG5dLmNhbGwodGhpcywgdCkgOiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBlKHRoaXMpLmNzcyhvLCBzKHRoaXMsIHQsICEwLCBpKSArICJweCIpIH0pIH0gfSksIGUuZm4uYWRkQmFjayB8fCAoZS5mbi5hZGRCYWNrID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMuYWRkKG51bGwgPT0gZSA/IHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpIH0pLCBlKCI8YT4iKS5kYXRhKCJhLWIiLCAiYSIpLnJlbW92ZURhdGEoImEtYiIpLmRhdGEoImEtYiIpICYmIChlLmZuLnJlbW92ZURhdGEgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0LmNhbGwodGhpcywgZS5jYW1lbENhc2UoaSkpIDogdC5jYWxsKHRoaXMpIH0gfShlLmZuLnJlbW92ZURhdGEpKSwgZS51aS5pZSA9ICEhL21zaWUgW1x3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksIGUuc3VwcG9ydC5zZWxlY3RzdGFydCA9ICJvbnNlbGVjdHN0YXJ0IiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgZS5mbi5leHRlbmQoeyBkaXNhYmxlU2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmJpbmQoKGUuc3VwcG9ydC5zZWxlY3RzdGFydCA/ICJzZWxlY3RzdGFydCIgOiAibW91c2Vkb3duIikgKyAiLnVpLWRpc2FibGVTZWxlY3Rpb24iLCBmdW5jdGlvbiAoZSkgeyBlLnByZXZlbnREZWZhdWx0KCkgfSkgfSwgZW5hYmxlU2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnVuYmluZCgiLnVpLWRpc2FibGVTZWxlY3Rpb24iKSB9IH0pLCBlLmV4dGVuZChlLnVpLCB7IHBsdWdpbjogeyBhZGQ6IGZ1bmN0aW9uICh0LCBpLCBuKSB7IHZhciBzLCBhID0gZS51aVt0XS5wcm90b3R5cGU7IGZvciAocyBpbiBuKSBhLnBsdWdpbnNbc10gPSBhLnBsdWdpbnNbc10gfHwgW10sIGEucGx1Z2luc1tzXS5wdXNoKFtpLCBuW3NdXSkgfSwgY2FsbDogZnVuY3Rpb24gKGUsIHQsIGkpIHsgdmFyIG4sIHMgPSBlLnBsdWdpbnNbdF07IGlmIChzICYmIGUuZWxlbWVudFswXS5wYXJlbnROb2RlICYmIDExICE9PSBlLmVsZW1lbnRbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZSkgZm9yIChuID0gMDsgcy5sZW5ndGggPiBuOyBuKyspIGUub3B0aW9uc1tzW25dWzBdXSAmJiBzW25dWzFdLmFwcGx5KGUuZWxlbWVudCwgaSkgfSB9LCBoYXNTY3JvbGw6IGZ1bmN0aW9uICh0LCBpKSB7IGlmICgiaGlkZGVuIiA9PT0gZSh0KS5jc3MoIm92ZXJmbG93IikpIHJldHVybiAhMTsgdmFyIG4gPSBpICYmICJsZWZ0IiA9PT0gaSA/ICJzY3JvbGxMZWZ0IiA6ICJzY3JvbGxUb3AiLCBzID0gITE7IHJldHVybiB0W25dID4gMCA/ICEwIDogKHRbbl0gPSAxLCBzID0gdFtuXSA+IDAsIHRbbl0gPSAwLCBzKSB9IH0pIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCwgZSkgeyB2YXIgaSA9IDAsIHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsIG4gPSB0LmNsZWFuRGF0YTsgdC5jbGVhbkRhdGEgPSBmdW5jdGlvbiAoZSkgeyBmb3IgKHZhciBpLCBzID0gMDsgbnVsbCAhPSAoaSA9IGVbc10pIDsgcysrKSB0cnkgeyB0KGkpLnRyaWdnZXJIYW5kbGVyKCJyZW1vdmUiKSB9IGNhdGNoIChvKSB7IH0gbihlKSB9LCB0LndpZGdldCA9IGZ1bmN0aW9uIChpLCBzLCBuKSB7IHZhciBvLCBhLCByLCBoLCBsID0ge30sIGMgPSBpLnNwbGl0KCIuIilbMF07IGkgPSBpLnNwbGl0KCIuIilbMV0sIG8gPSBjICsgIi0iICsgaSwgbiB8fCAobiA9IHMsIHMgPSB0LldpZGdldCksIHQuZXhwclsiOiJdW28udG9Mb3dlckNhc2UoKV0gPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gISF0LmRhdGEoZSwgbykgfSwgdFtjXSA9IHRbY10gfHwge30sIGEgPSB0W2NdW2ldLCByID0gdFtjXVtpXSA9IGZ1bmN0aW9uICh0LCBpKSB7IHJldHVybiB0aGlzLl9jcmVhdGVXaWRnZXQgPyAoYXJndW1lbnRzLmxlbmd0aCAmJiB0aGlzLl9jcmVhdGVXaWRnZXQodCwgaSksIGUpIDogbmV3IHIodCwgaSkgfSwgdC5leHRlbmQociwgYSwgeyB2ZXJzaW9uOiBuLnZlcnNpb24sIF9wcm90bzogdC5leHRlbmQoe30sIG4pLCBfY2hpbGRDb25zdHJ1Y3RvcnM6IFtdIH0pLCBoID0gbmV3IHMsIGgub3B0aW9ucyA9IHQud2lkZ2V0LmV4dGVuZCh7fSwgaC5vcHRpb25zKSwgdC5lYWNoKG4sIGZ1bmN0aW9uIChpLCBuKSB7IHJldHVybiB0LmlzRnVuY3Rpb24obikgPyAobFtpXSA9IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBzLnByb3RvdHlwZVtpXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0sIGUgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gcy5wcm90b3R5cGVbaV0uYXBwbHkodGhpcywgdCkgfTsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIGksIHMgPSB0aGlzLl9zdXBlciwgbyA9IHRoaXMuX3N1cGVyQXBwbHk7IHJldHVybiB0aGlzLl9zdXBlciA9IHQsIHRoaXMuX3N1cGVyQXBwbHkgPSBlLCBpID0gbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLl9zdXBlciA9IHMsIHRoaXMuX3N1cGVyQXBwbHkgPSBvLCBpIH0gfSgpLCBlKSA6IChsW2ldID0gbiwgZSkgfSksIHIucHJvdG90eXBlID0gdC53aWRnZXQuZXh0ZW5kKGgsIHsgd2lkZ2V0RXZlbnRQcmVmaXg6IGEgPyBoLndpZGdldEV2ZW50UHJlZml4IHx8IGkgOiBpIH0sIGwsIHsgY29uc3RydWN0b3I6IHIsIG5hbWVzcGFjZTogYywgd2lkZ2V0TmFtZTogaSwgd2lkZ2V0RnVsbE5hbWU6IG8gfSksIGEgPyAodC5lYWNoKGEuX2NoaWxkQ29uc3RydWN0b3JzLCBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IGkucHJvdG90eXBlOyB0LndpZGdldChzLm5hbWVzcGFjZSArICIuIiArIHMud2lkZ2V0TmFtZSwgciwgaS5fcHJvdG8pIH0pLCBkZWxldGUgYS5fY2hpbGRDb25zdHJ1Y3RvcnMpIDogcy5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChyKSwgdC53aWRnZXQuYnJpZGdlKGksIHIpIH0sIHQud2lkZ2V0LmV4dGVuZCA9IGZ1bmN0aW9uIChpKSB7IGZvciAodmFyIG4sIG8sIGEgPSBzLmNhbGwoYXJndW1lbnRzLCAxKSwgciA9IDAsIGggPSBhLmxlbmd0aDsgaCA+IHI7IHIrKykgZm9yIChuIGluIGFbcl0pIG8gPSBhW3JdW25dLCBhW3JdLmhhc093blByb3BlcnR5KG4pICYmIG8gIT09IGUgJiYgKGlbbl0gPSB0LmlzUGxhaW5PYmplY3QobykgPyB0LmlzUGxhaW5PYmplY3QoaVtuXSkgPyB0LndpZGdldC5leHRlbmQoe30sIGlbbl0sIG8pIDogdC53aWRnZXQuZXh0ZW5kKHt9LCBvKSA6IG8pOyByZXR1cm4gaSB9LCB0LndpZGdldC5icmlkZ2UgPSBmdW5jdGlvbiAoaSwgbikgeyB2YXIgbyA9IG4ucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lIHx8IGk7IHQuZm5baV0gPSBmdW5jdGlvbiAoYSkgeyB2YXIgciA9ICJzdHJpbmciID09IHR5cGVvZiBhLCBoID0gcy5jYWxsKGFyZ3VtZW50cywgMSksIGwgPSB0aGlzOyByZXR1cm4gYSA9ICFyICYmIGgubGVuZ3RoID8gdC53aWRnZXQuZXh0ZW5kLmFwcGx5KG51bGwsIFthXS5jb25jYXQoaCkpIDogYSwgciA/IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBzLCBuID0gdC5kYXRhKHRoaXMsIG8pOyByZXR1cm4gbiA/IHQuaXNGdW5jdGlvbihuW2FdKSAmJiAiXyIgIT09IGEuY2hhckF0KDApID8gKHMgPSBuW2FdLmFwcGx5KG4sIGgpLCBzICE9PSBuICYmIHMgIT09IGUgPyAobCA9IHMgJiYgcy5qcXVlcnkgPyBsLnB1c2hTdGFjayhzLmdldCgpKSA6IHMsICExKSA6IGUpIDogdC5lcnJvcigibm8gc3VjaCBtZXRob2QgJyIgKyBhICsgIicgZm9yICIgKyBpICsgIiB3aWRnZXQgaW5zdGFuY2UiKSA6IHQuZXJyb3IoImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gIiArIGkgKyAiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyAiICsgImF0dGVtcHRlZCB0byBjYWxsIG1ldGhvZCAnIiArIGEgKyAiJyIpIH0pIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0LmRhdGEodGhpcywgbyk7IGUgPyBlLm9wdGlvbihhIHx8IHt9KS5faW5pdCgpIDogdC5kYXRhKHRoaXMsIG8sIG5ldyBuKGEsIHRoaXMpKSB9KSwgbCB9IH0sIHQuV2lkZ2V0ID0gZnVuY3Rpb24gKCkgeyB9LCB0LldpZGdldC5fY2hpbGRDb25zdHJ1Y3RvcnMgPSBbXSwgdC5XaWRnZXQucHJvdG90eXBlID0geyB3aWRnZXROYW1lOiAid2lkZ2V0Iiwgd2lkZ2V0RXZlbnRQcmVmaXg6ICIiLCBkZWZhdWx0RWxlbWVudDogIjxkaXY+Iiwgb3B0aW9uczogeyBkaXNhYmxlZDogITEsIGNyZWF0ZTogbnVsbCB9LCBfY3JlYXRlV2lkZ2V0OiBmdW5jdGlvbiAoZSwgcykgeyBzID0gdChzIHx8IHRoaXMuZGVmYXVsdEVsZW1lbnQgfHwgdGhpcylbMF0sIHRoaXMuZWxlbWVudCA9IHQocyksIHRoaXMudXVpZCA9IGkrKywgdGhpcy5ldmVudE5hbWVzcGFjZSA9ICIuIiArIHRoaXMud2lkZ2V0TmFtZSArIHRoaXMudXVpZCwgdGhpcy5vcHRpb25zID0gdC53aWRnZXQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIHRoaXMuX2dldENyZWF0ZU9wdGlvbnMoKSwgZSksIHRoaXMuYmluZGluZ3MgPSB0KCksIHRoaXMuaG92ZXJhYmxlID0gdCgpLCB0aGlzLmZvY3VzYWJsZSA9IHQoKSwgcyAhPT0gdGhpcyAmJiAodC5kYXRhKHMsIHRoaXMud2lkZ2V0RnVsbE5hbWUsIHRoaXMpLCB0aGlzLl9vbighMCwgdGhpcy5lbGVtZW50LCB7IHJlbW92ZTogZnVuY3Rpb24gKHQpIHsgdC50YXJnZXQgPT09IHMgJiYgdGhpcy5kZXN0cm95KCkgfSB9KSwgdGhpcy5kb2N1bWVudCA9IHQocy5zdHlsZSA/IHMub3duZXJEb2N1bWVudCA6IHMuZG9jdW1lbnQgfHwgcyksIHRoaXMud2luZG93ID0gdCh0aGlzLmRvY3VtZW50WzBdLmRlZmF1bHRWaWV3IHx8IHRoaXMuZG9jdW1lbnRbMF0ucGFyZW50V2luZG93KSksIHRoaXMuX2NyZWF0ZSgpLCB0aGlzLl90cmlnZ2VyKCJjcmVhdGUiLCBudWxsLCB0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSksIHRoaXMuX2luaXQoKSB9LCBfZ2V0Q3JlYXRlT3B0aW9uczogdC5ub29wLCBfZ2V0Q3JlYXRlRXZlbnREYXRhOiB0Lm5vb3AsIF9jcmVhdGU6IHQubm9vcCwgX2luaXQ6IHQubm9vcCwgZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLl9kZXN0cm95KCksIHRoaXMuZWxlbWVudC51bmJpbmQodGhpcy5ldmVudE5hbWVzcGFjZSkucmVtb3ZlRGF0YSh0aGlzLndpZGdldE5hbWUpLnJlbW92ZURhdGEodGhpcy53aWRnZXRGdWxsTmFtZSkucmVtb3ZlRGF0YSh0LmNhbWVsQ2FzZSh0aGlzLndpZGdldEZ1bGxOYW1lKSksIHRoaXMud2lkZ2V0KCkudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lICsgIi1kaXNhYmxlZCAiICsgInVpLXN0YXRlLWRpc2FibGVkIiksIHRoaXMuYmluZGluZ3MudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLCB0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgdGhpcy5mb2N1c2FibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikgfSwgX2Rlc3Ryb3k6IHQubm9vcCwgd2lkZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVsZW1lbnQgfSwgb3B0aW9uOiBmdW5jdGlvbiAoaSwgcykgeyB2YXIgbiwgbywgYSwgciA9IGk7IGlmICgwID09PSBhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdC53aWRnZXQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMpOyBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGkpIGlmIChyID0ge30sIG4gPSBpLnNwbGl0KCIuIiksIGkgPSBuLnNoaWZ0KCksIG4ubGVuZ3RoKSB7IGZvciAobyA9IHJbaV0gPSB0LndpZGdldC5leHRlbmQoe30sIHRoaXMub3B0aW9uc1tpXSksIGEgPSAwOyBuLmxlbmd0aCAtIDEgPiBhOyBhKyspIG9bblthXV0gPSBvW25bYV1dIHx8IHt9LCBvID0gb1tuW2FdXTsgaWYgKGkgPSBuLnBvcCgpLCAxID09PSBhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gb1tpXSA9PT0gZSA/IG51bGwgOiBvW2ldOyBvW2ldID0gcyB9IGVsc2UgeyBpZiAoMSA9PT0gYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMub3B0aW9uc1tpXSA9PT0gZSA/IG51bGwgOiB0aGlzLm9wdGlvbnNbaV07IHJbaV0gPSBzIH0gcmV0dXJuIHRoaXMuX3NldE9wdGlvbnMociksIHRoaXMgfSwgX3NldE9wdGlvbnM6IGZ1bmN0aW9uICh0KSB7IHZhciBlOyBmb3IgKGUgaW4gdCkgdGhpcy5fc2V0T3B0aW9uKGUsIHRbZV0pOyByZXR1cm4gdGhpcyB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdGhpcy5vcHRpb25zW3RdID0gZSwgImRpc2FibGVkIiA9PT0gdCAmJiAodGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lICsgIi1kaXNhYmxlZCB1aS1zdGF0ZS1kaXNhYmxlZCIsICEhZSkuYXR0cigiYXJpYS1kaXNhYmxlZCIsIGUpLCB0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgdGhpcy5mb2N1c2FibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikpLCB0aGlzIH0sIGVuYWJsZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsICExKSB9LCBkaXNhYmxlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIiwgITApIH0sIF9vbjogZnVuY3Rpb24gKGksIHMsIG4pIHsgdmFyIG8sIGEgPSB0aGlzOyAiYm9vbGVhbiIgIT0gdHlwZW9mIGkgJiYgKG4gPSBzLCBzID0gaSwgaSA9ICExKSwgbiA/IChzID0gbyA9IHQocyksIHRoaXMuYmluZGluZ3MgPSB0aGlzLmJpbmRpbmdzLmFkZChzKSkgOiAobiA9IHMsIHMgPSB0aGlzLmVsZW1lbnQsIG8gPSB0aGlzLndpZGdldCgpKSwgdC5lYWNoKG4sIGZ1bmN0aW9uIChuLCByKSB7IGZ1bmN0aW9uIGgoKSB7IHJldHVybiBpIHx8IGEub3B0aW9ucy5kaXNhYmxlZCAhPT0gITAgJiYgIXQodGhpcykuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikgPyAoInN0cmluZyIgPT0gdHlwZW9mIHIgPyBhW3JdIDogcikuYXBwbHkoYSwgYXJndW1lbnRzKSA6IGUgfSAic3RyaW5nIiAhPSB0eXBlb2YgciAmJiAoaC5ndWlkID0gci5ndWlkID0gci5ndWlkIHx8IGguZ3VpZCB8fCB0Lmd1aWQrKyk7IHZhciBsID0gbi5tYXRjaCgvXihcdyspXHMqKC4qKSQvKSwgYyA9IGxbMV0gKyBhLmV2ZW50TmFtZXNwYWNlLCB1ID0gbFsyXTsgdSA/IG8uZGVsZWdhdGUodSwgYywgaCkgOiBzLmJpbmQoYywgaCkgfSkgfSwgX29mZjogZnVuY3Rpb24gKHQsIGUpIHsgZSA9IChlIHx8ICIiKS5zcGxpdCgiICIpLmpvaW4odGhpcy5ldmVudE5hbWVzcGFjZSArICIgIikgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCB0LnVuYmluZChlKS51bmRlbGVnYXRlKGUpIH0sIF9kZWxheTogZnVuY3Rpb24gKHQsIGUpIHsgZnVuY3Rpb24gaSgpIHsgcmV0dXJuICgic3RyaW5nIiA9PSB0eXBlb2YgdCA/IHNbdF0gOiB0KS5hcHBseShzLCBhcmd1bWVudHMpIH0gdmFyIHMgPSB0aGlzOyByZXR1cm4gc2V0VGltZW91dChpLCBlIHx8IDApIH0sIF9ob3ZlcmFibGU6IGZ1bmN0aW9uIChlKSB7IHRoaXMuaG92ZXJhYmxlID0gdGhpcy5ob3ZlcmFibGUuYWRkKGUpLCB0aGlzLl9vbihlLCB7IG1vdXNlZW50ZXI6IGZ1bmN0aW9uIChlKSB7IHQoZS5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSB9LCBtb3VzZWxlYXZlOiBmdW5jdGlvbiAoZSkgeyB0KGUuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIikgfSB9KSB9LCBfZm9jdXNhYmxlOiBmdW5jdGlvbiAoZSkgeyB0aGlzLmZvY3VzYWJsZSA9IHRoaXMuZm9jdXNhYmxlLmFkZChlKSwgdGhpcy5fb24oZSwgeyBmb2N1c2luOiBmdW5jdGlvbiAoZSkgeyB0KGUuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikgfSwgZm9jdXNvdXQ6IGZ1bmN0aW9uIChlKSB7IHQoZS5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSB9IH0pIH0sIF90cmlnZ2VyOiBmdW5jdGlvbiAoZSwgaSwgcykgeyB2YXIgbiwgbywgYSA9IHRoaXMub3B0aW9uc1tlXTsgaWYgKHMgPSBzIHx8IHt9LCBpID0gdC5FdmVudChpKSwgaS50eXBlID0gKGUgPT09IHRoaXMud2lkZ2V0RXZlbnRQcmVmaXggPyBlIDogdGhpcy53aWRnZXRFdmVudFByZWZpeCArIGUpLnRvTG93ZXJDYXNlKCksIGkudGFyZ2V0ID0gdGhpcy5lbGVtZW50WzBdLCBvID0gaS5vcmlnaW5hbEV2ZW50KSBmb3IgKG4gaW4gbykgbiBpbiBpIHx8IChpW25dID0gb1tuXSk7IHJldHVybiB0aGlzLmVsZW1lbnQudHJpZ2dlcihpLCBzKSwgISh0LmlzRnVuY3Rpb24oYSkgJiYgYS5hcHBseSh0aGlzLmVsZW1lbnRbMF0sIFtpXS5jb25jYXQocykpID09PSAhMSB8fCBpLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB9IH0sIHQuZWFjaCh7IHNob3c6ICJmYWRlSW4iLCBoaWRlOiAiZmFkZU91dCIgfSwgZnVuY3Rpb24gKGUsIGkpIHsgdC5XaWRnZXQucHJvdG90eXBlWyJfIiArIGVdID0gZnVuY3Rpb24gKHMsIG4sIG8pIHsgInN0cmluZyIgPT0gdHlwZW9mIG4gJiYgKG4gPSB7IGVmZmVjdDogbiB9KTsgdmFyIGEsIHIgPSBuID8gbiA9PT0gITAgfHwgIm51bWJlciIgPT0gdHlwZW9mIG4gPyBpIDogbi5lZmZlY3QgfHwgaSA6IGU7IG4gPSBuIHx8IHt9LCAibnVtYmVyIiA9PSB0eXBlb2YgbiAmJiAobiA9IHsgZHVyYXRpb246IG4gfSksIGEgPSAhdC5pc0VtcHR5T2JqZWN0KG4pLCBuLmNvbXBsZXRlID0gbywgbi5kZWxheSAmJiBzLmRlbGF5KG4uZGVsYXkpLCBhICYmIHQuZWZmZWN0cyAmJiB0LmVmZmVjdHMuZWZmZWN0W3JdID8gc1tlXShuKSA6IHIgIT09IGUgJiYgc1tyXSA/IHNbcl0obi5kdXJhdGlvbiwgbi5lYXNpbmcsIG8pIDogcy5xdWV1ZShmdW5jdGlvbiAoaSkgeyB0KHRoaXMpW2VdKCksIG8gJiYgby5jYWxsKHNbMF0pLCBpKCkgfSkgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSAhMTsgdChkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbiAoKSB7IGUgPSAhMSB9KSwgdC53aWRnZXQoInVpLm1vdXNlIiwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgb3B0aW9uczogeyBjYW5jZWw6ICJpbnB1dCx0ZXh0YXJlYSxidXR0b24sc2VsZWN0LG9wdGlvbiIsIGRpc3RhbmNlOiAxLCBkZWxheTogMCB9LCBfbW91c2VJbml0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpczsgdGhpcy5lbGVtZW50LmJpbmQoIm1vdXNlZG93bi4iICsgdGhpcy53aWRnZXROYW1lLCBmdW5jdGlvbiAodCkgeyByZXR1cm4gZS5fbW91c2VEb3duKHQpIH0pLmJpbmQoImNsaWNrLiIgKyB0aGlzLndpZGdldE5hbWUsIGZ1bmN0aW9uIChpKSB7IHJldHVybiAhMCA9PT0gdC5kYXRhKGkudGFyZ2V0LCBlLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IikgPyAodC5yZW1vdmVEYXRhKGkudGFyZ2V0LCBlLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IiksIGkuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksICExKSA6IHVuZGVmaW5lZCB9KSwgdGhpcy5zdGFydGVkID0gITEgfSwgX21vdXNlRGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQudW5iaW5kKCIuIiArIHRoaXMud2lkZ2V0TmFtZSksIHRoaXMuX21vdXNlTW92ZURlbGVnYXRlICYmIHQoZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLiIgKyB0aGlzLndpZGdldE5hbWUsIHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS51bmJpbmQoIm1vdXNldXAuIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VVcERlbGVnYXRlKSB9LCBfbW91c2VEb3duOiBmdW5jdGlvbiAoaSkgeyBpZiAoIWUpIHsgdGhpcy5fbW91c2VTdGFydGVkICYmIHRoaXMuX21vdXNlVXAoaSksIHRoaXMuX21vdXNlRG93bkV2ZW50ID0gaTsgdmFyIHMgPSB0aGlzLCBuID0gMSA9PT0gaS53aGljaCwgYSA9ICJzdHJpbmciID09IHR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsICYmIGkudGFyZ2V0Lm5vZGVOYW1lID8gdChpLnRhcmdldCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuY2FuY2VsKS5sZW5ndGggOiAhMTsgcmV0dXJuIG4gJiYgIWEgJiYgdGhpcy5fbW91c2VDYXB0dXJlKGkpID8gKHRoaXMubW91c2VEZWxheU1ldCA9ICF0aGlzLm9wdGlvbnMuZGVsYXksIHRoaXMubW91c2VEZWxheU1ldCB8fCAodGhpcy5fbW91c2VEZWxheVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHMubW91c2VEZWxheU1ldCA9ICEwIH0sIHRoaXMub3B0aW9ucy5kZWxheSkpLCB0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGkpICYmIHRoaXMuX21vdXNlRGVsYXlNZXQoaSkgJiYgKHRoaXMuX21vdXNlU3RhcnRlZCA9IHRoaXMuX21vdXNlU3RhcnQoaSkgIT09ICExLCAhdGhpcy5fbW91c2VTdGFydGVkKSA/IChpLnByZXZlbnREZWZhdWx0KCksICEwKSA6ICghMCA9PT0gdC5kYXRhKGkudGFyZ2V0LCB0aGlzLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IikgJiYgdC5yZW1vdmVEYXRhKGkudGFyZ2V0LCB0aGlzLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IiksIHRoaXMuX21vdXNlTW92ZURlbGVnYXRlID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHMuX21vdXNlTW92ZSh0KSB9LCB0aGlzLl9tb3VzZVVwRGVsZWdhdGUgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gcy5fbW91c2VVcCh0KSB9LCB0KGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUuIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLmJpbmQoIm1vdXNldXAuIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VVcERlbGVnYXRlKSwgaS5wcmV2ZW50RGVmYXVsdCgpLCBlID0gITAsICEwKSkgOiAhMCB9IH0sIF9tb3VzZU1vdmU6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0LnVpLmllICYmICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IDkgPiBkb2N1bWVudC5kb2N1bWVudE1vZGUpICYmICFlLmJ1dHRvbiA/IHRoaXMuX21vdXNlVXAoZSkgOiB0aGlzLl9tb3VzZVN0YXJ0ZWQgPyAodGhpcy5fbW91c2VEcmFnKGUpLCBlLnByZXZlbnREZWZhdWx0KCkpIDogKHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoZSkgJiYgdGhpcy5fbW91c2VEZWxheU1ldChlKSAmJiAodGhpcy5fbW91c2VTdGFydGVkID0gdGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVudCwgZSkgIT09ICExLCB0aGlzLl9tb3VzZVN0YXJ0ZWQgPyB0aGlzLl9tb3VzZURyYWcoZSkgOiB0aGlzLl9tb3VzZVVwKGUpKSwgIXRoaXMuX21vdXNlU3RhcnRlZCkgfSwgX21vdXNlVXA6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0KGRvY3VtZW50KS51bmJpbmQoIm1vdXNlbW92ZS4iICsgdGhpcy53aWRnZXROYW1lLCB0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIgKyB0aGlzLndpZGdldE5hbWUsIHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksIHRoaXMuX21vdXNlU3RhcnRlZCAmJiAodGhpcy5fbW91c2VTdGFydGVkID0gITEsIGUudGFyZ2V0ID09PSB0aGlzLl9tb3VzZURvd25FdmVudC50YXJnZXQgJiYgdC5kYXRhKGUudGFyZ2V0LCB0aGlzLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IiwgITApLCB0aGlzLl9tb3VzZVN0b3AoZSkpLCAhMSB9LCBfbW91c2VEaXN0YW5jZU1ldDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYIC0gdC5wYWdlWCksIE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZIC0gdC5wYWdlWSkpID49IHRoaXMub3B0aW9ucy5kaXN0YW5jZSB9LCBfbW91c2VEZWxheU1ldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0IH0sIF9tb3VzZVN0YXJ0OiBmdW5jdGlvbiAoKSB7IH0sIF9tb3VzZURyYWc6IGZ1bmN0aW9uICgpIHsgfSwgX21vdXNlU3RvcDogZnVuY3Rpb24gKCkgeyB9LCBfbW91c2VDYXB0dXJlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhMCB9IH0pIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCwgZSkgeyBmdW5jdGlvbiBpKHQsIGUsIGkpIHsgcmV0dXJuIFtwYXJzZUZsb2F0KHRbMF0pICogKHAudGVzdCh0WzBdKSA/IGUgLyAxMDAgOiAxKSwgcGFyc2VGbG9hdCh0WzFdKSAqIChwLnRlc3QodFsxXSkgPyBpIC8gMTAwIDogMSldIH0gZnVuY3Rpb24gcyhlLCBpKSB7IHJldHVybiBwYXJzZUludCh0LmNzcyhlLCBpKSwgMTApIHx8IDAgfSBmdW5jdGlvbiBuKGUpIHsgdmFyIGkgPSBlWzBdOyByZXR1cm4gOSA9PT0gaS5ub2RlVHlwZSA/IHsgd2lkdGg6IGUud2lkdGgoKSwgaGVpZ2h0OiBlLmhlaWdodCgpLCBvZmZzZXQ6IHsgdG9wOiAwLCBsZWZ0OiAwIH0gfSA6IHQuaXNXaW5kb3coaSkgPyB7IHdpZHRoOiBlLndpZHRoKCksIGhlaWdodDogZS5oZWlnaHQoKSwgb2Zmc2V0OiB7IHRvcDogZS5zY3JvbGxUb3AoKSwgbGVmdDogZS5zY3JvbGxMZWZ0KCkgfSB9IDogaS5wcmV2ZW50RGVmYXVsdCA/IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgb2Zmc2V0OiB7IHRvcDogaS5wYWdlWSwgbGVmdDogaS5wYWdlWCB9IH0gOiB7IHdpZHRoOiBlLm91dGVyV2lkdGgoKSwgaGVpZ2h0OiBlLm91dGVySGVpZ2h0KCksIG9mZnNldDogZS5vZmZzZXQoKSB9IH0gdC51aSA9IHQudWkgfHwge307IHZhciBhLCBvID0gTWF0aC5tYXgsIHIgPSBNYXRoLmFicywgbCA9IE1hdGgucm91bmQsIGggPSAvbGVmdHxjZW50ZXJ8cmlnaHQvLCBjID0gL3RvcHxjZW50ZXJ8Ym90dG9tLywgdSA9IC9bXCtcLV1cZCsoXC5bXGRdKyk/JT8vLCBkID0gL15cdysvLCBwID0gLyUkLywgZiA9IHQuZm4ucG9zaXRpb247IHQucG9zaXRpb24gPSB7IHNjcm9sbGJhcldpZHRoOiBmdW5jdGlvbiAoKSB7IGlmIChhICE9PSBlKSByZXR1cm4gYTsgdmFyIGksIHMsIG4gPSB0KCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuOyc+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMHB4O3dpZHRoOmF1dG87Jz48XC9kaXY+PFwvZGl2PiIpLCBvID0gbi5jaGlsZHJlbigpWzBdOyByZXR1cm4gdCgiYm9keSIpLmFwcGVuZChuKSwgaSA9IG8ub2Zmc2V0V2lkdGgsIG4uY3NzKCJvdmVyZmxvdyIsICJzY3JvbGwiKSwgcyA9IG8ub2Zmc2V0V2lkdGgsIGkgPT09IHMgJiYgKHMgPSBuWzBdLmNsaWVudFdpZHRoKSwgbi5yZW1vdmUoKSwgYSA9IGkgLSBzIH0sIGdldFNjcm9sbEluZm86IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gZS5pc1dpbmRvdyB8fCBlLmlzRG9jdW1lbnQgPyAiIiA6IGUuZWxlbWVudC5jc3MoIm92ZXJmbG93LXgiKSwgcyA9IGUuaXNXaW5kb3cgfHwgZS5pc0RvY3VtZW50ID8gIiIgOiBlLmVsZW1lbnQuY3NzKCJvdmVyZmxvdy15IiksIG4gPSAic2Nyb2xsIiA9PT0gaSB8fCAiYXV0byIgPT09IGkgJiYgZS53aWR0aCA8IGUuZWxlbWVudFswXS5zY3JvbGxXaWR0aCwgYSA9ICJzY3JvbGwiID09PSBzIHx8ICJhdXRvIiA9PT0gcyAmJiBlLmhlaWdodCA8IGUuZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ7IHJldHVybiB7IHdpZHRoOiBhID8gdC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpIDogMCwgaGVpZ2h0OiBuID8gdC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpIDogMCB9IH0sIGdldFdpdGhpbkluZm86IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdChlIHx8IHdpbmRvdyksIHMgPSB0LmlzV2luZG93KGlbMF0pLCBuID0gISFpWzBdICYmIDkgPT09IGlbMF0ubm9kZVR5cGU7IHJldHVybiB7IGVsZW1lbnQ6IGksIGlzV2luZG93OiBzLCBpc0RvY3VtZW50OiBuLCBvZmZzZXQ6IGkub2Zmc2V0KCkgfHwgeyBsZWZ0OiAwLCB0b3A6IDAgfSwgc2Nyb2xsTGVmdDogaS5zY3JvbGxMZWZ0KCksIHNjcm9sbFRvcDogaS5zY3JvbGxUb3AoKSwgd2lkdGg6IHMgPyBpLndpZHRoKCkgOiBpLm91dGVyV2lkdGgoKSwgaGVpZ2h0OiBzID8gaS5oZWlnaHQoKSA6IGkub3V0ZXJIZWlnaHQoKSB9IH0gfSwgdC5mbi5wb3NpdGlvbiA9IGZ1bmN0aW9uIChlKSB7IGlmICghZSB8fCAhZS5vZikgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgZSA9IHQuZXh0ZW5kKHt9LCBlKTsgdmFyIGEsIHAsIGcsIG0sIHYsIF8sIGIgPSB0KGUub2YpLCB5ID0gdC5wb3NpdGlvbi5nZXRXaXRoaW5JbmZvKGUud2l0aGluKSwgayA9IHQucG9zaXRpb24uZ2V0U2Nyb2xsSW5mbyh5KSwgdyA9IChlLmNvbGxpc2lvbiB8fCAiZmxpcCIpLnNwbGl0KCIgIiksIEQgPSB7fTsgcmV0dXJuIF8gPSBuKGIpLCBiWzBdLnByZXZlbnREZWZhdWx0ICYmIChlLmF0ID0gImxlZnQgdG9wIiksIHAgPSBfLndpZHRoLCBnID0gXy5oZWlnaHQsIG0gPSBfLm9mZnNldCwgdiA9IHQuZXh0ZW5kKHt9LCBtKSwgdC5lYWNoKFsibXkiLCAiYXQiXSwgZnVuY3Rpb24gKCkgeyB2YXIgdCwgaSwgcyA9IChlW3RoaXNdIHx8ICIiKS5zcGxpdCgiICIpOyAxID09PSBzLmxlbmd0aCAmJiAocyA9IGgudGVzdChzWzBdKSA/IHMuY29uY2F0KFsiY2VudGVyIl0pIDogYy50ZXN0KHNbMF0pID8gWyJjZW50ZXIiXS5jb25jYXQocykgOiBbImNlbnRlciIsICJjZW50ZXIiXSksIHNbMF0gPSBoLnRlc3Qoc1swXSkgPyBzWzBdIDogImNlbnRlciIsIHNbMV0gPSBjLnRlc3Qoc1sxXSkgPyBzWzFdIDogImNlbnRlciIsIHQgPSB1LmV4ZWMoc1swXSksIGkgPSB1LmV4ZWMoc1sxXSksIERbdGhpc10gPSBbdCA/IHRbMF0gOiAwLCBpID8gaVswXSA6IDBdLCBlW3RoaXNdID0gW2QuZXhlYyhzWzBdKVswXSwgZC5leGVjKHNbMV0pWzBdXSB9KSwgMSA9PT0gdy5sZW5ndGggJiYgKHdbMV0gPSB3WzBdKSwgInJpZ2h0IiA9PT0gZS5hdFswXSA/IHYubGVmdCArPSBwIDogImNlbnRlciIgPT09IGUuYXRbMF0gJiYgKHYubGVmdCArPSBwIC8gMiksICJib3R0b20iID09PSBlLmF0WzFdID8gdi50b3AgKz0gZyA6ICJjZW50ZXIiID09PSBlLmF0WzFdICYmICh2LnRvcCArPSBnIC8gMiksIGEgPSBpKEQuYXQsIHAsIGcpLCB2LmxlZnQgKz0gYVswXSwgdi50b3AgKz0gYVsxXSwgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIG4sIGgsIGMgPSB0KHRoaXMpLCB1ID0gYy5vdXRlcldpZHRoKCksIGQgPSBjLm91dGVySGVpZ2h0KCksIGYgPSBzKHRoaXMsICJtYXJnaW5MZWZ0IiksIF8gPSBzKHRoaXMsICJtYXJnaW5Ub3AiKSwgeCA9IHUgKyBmICsgcyh0aGlzLCAibWFyZ2luUmlnaHQiKSArIGsud2lkdGgsIEMgPSBkICsgXyArIHModGhpcywgIm1hcmdpbkJvdHRvbSIpICsgay5oZWlnaHQsIE0gPSB0LmV4dGVuZCh7fSwgdiksIFQgPSBpKEQubXksIGMub3V0ZXJXaWR0aCgpLCBjLm91dGVySGVpZ2h0KCkpOyAicmlnaHQiID09PSBlLm15WzBdID8gTS5sZWZ0IC09IHUgOiAiY2VudGVyIiA9PT0gZS5teVswXSAmJiAoTS5sZWZ0IC09IHUgLyAyKSwgImJvdHRvbSIgPT09IGUubXlbMV0gPyBNLnRvcCAtPSBkIDogImNlbnRlciIgPT09IGUubXlbMV0gJiYgKE0udG9wIC09IGQgLyAyKSwgTS5sZWZ0ICs9IFRbMF0sIE0udG9wICs9IFRbMV0sIHQuc3VwcG9ydC5vZmZzZXRGcmFjdGlvbnMgfHwgKE0ubGVmdCA9IGwoTS5sZWZ0KSwgTS50b3AgPSBsKE0udG9wKSksIG4gPSB7IG1hcmdpbkxlZnQ6IGYsIG1hcmdpblRvcDogXyB9LCB0LmVhY2goWyJsZWZ0IiwgInRvcCJdLCBmdW5jdGlvbiAoaSwgcykgeyB0LnVpLnBvc2l0aW9uW3dbaV1dICYmIHQudWkucG9zaXRpb25bd1tpXV1bc10oTSwgeyB0YXJnZXRXaWR0aDogcCwgdGFyZ2V0SGVpZ2h0OiBnLCBlbGVtV2lkdGg6IHUsIGVsZW1IZWlnaHQ6IGQsIGNvbGxpc2lvblBvc2l0aW9uOiBuLCBjb2xsaXNpb25XaWR0aDogeCwgY29sbGlzaW9uSGVpZ2h0OiBDLCBvZmZzZXQ6IFthWzBdICsgVFswXSwgYVsxXSArIFRbMV1dLCBteTogZS5teSwgYXQ6IGUuYXQsIHdpdGhpbjogeSwgZWxlbTogYyB9KSB9KSwgZS51c2luZyAmJiAoaCA9IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gbS5sZWZ0IC0gTS5sZWZ0LCBzID0gaSArIHAgLSB1LCBuID0gbS50b3AgLSBNLnRvcCwgYSA9IG4gKyBnIC0gZCwgbCA9IHsgdGFyZ2V0OiB7IGVsZW1lbnQ6IGIsIGxlZnQ6IG0ubGVmdCwgdG9wOiBtLnRvcCwgd2lkdGg6IHAsIGhlaWdodDogZyB9LCBlbGVtZW50OiB7IGVsZW1lbnQ6IGMsIGxlZnQ6IE0ubGVmdCwgdG9wOiBNLnRvcCwgd2lkdGg6IHUsIGhlaWdodDogZCB9LCBob3Jpem9udGFsOiAwID4gcyA/ICJsZWZ0IiA6IGkgPiAwID8gInJpZ2h0IiA6ICJjZW50ZXIiLCB2ZXJ0aWNhbDogMCA+IGEgPyAidG9wIiA6IG4gPiAwID8gImJvdHRvbSIgOiAibWlkZGxlIiB9OyB1ID4gcCAmJiBwID4gcihpICsgcykgJiYgKGwuaG9yaXpvbnRhbCA9ICJjZW50ZXIiKSwgZCA+IGcgJiYgZyA+IHIobiArIGEpICYmIChsLnZlcnRpY2FsID0gIm1pZGRsZSIpLCBsLmltcG9ydGFudCA9IG8ocihpKSwgcihzKSkgPiBvKHIobiksIHIoYSkpID8gImhvcml6b250YWwiIDogInZlcnRpY2FsIiwgZS51c2luZy5jYWxsKHRoaXMsIHQsIGwpIH0pLCBjLm9mZnNldCh0LmV4dGVuZChNLCB7IHVzaW5nOiBoIH0pKSB9KSB9LCB0LnVpLnBvc2l0aW9uID0geyBmaXQ6IHsgbGVmdDogZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGksIHMgPSBlLndpdGhpbiwgbiA9IHMuaXNXaW5kb3cgPyBzLnNjcm9sbExlZnQgOiBzLm9mZnNldC5sZWZ0LCBhID0gcy53aWR0aCwgciA9IHQubGVmdCAtIGUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCwgbCA9IG4gLSByLCBoID0gciArIGUuY29sbGlzaW9uV2lkdGggLSBhIC0gbjsgZS5jb2xsaXNpb25XaWR0aCA+IGEgPyBsID4gMCAmJiAwID49IGggPyAoaSA9IHQubGVmdCArIGwgKyBlLmNvbGxpc2lvbldpZHRoIC0gYSAtIG4sIHQubGVmdCArPSBsIC0gaSkgOiB0LmxlZnQgPSBoID4gMCAmJiAwID49IGwgPyBuIDogbCA+IGggPyBuICsgYSAtIGUuY29sbGlzaW9uV2lkdGggOiBuIDogbCA+IDAgPyB0LmxlZnQgKz0gbCA6IGggPiAwID8gdC5sZWZ0IC09IGggOiB0LmxlZnQgPSBvKHQubGVmdCAtIHIsIHQubGVmdCkgfSwgdG9wOiBmdW5jdGlvbiAodCwgZSkgeyB2YXIgaSwgcyA9IGUud2l0aGluLCBuID0gcy5pc1dpbmRvdyA/IHMuc2Nyb2xsVG9wIDogcy5vZmZzZXQudG9wLCBhID0gZS53aXRoaW4uaGVpZ2h0LCByID0gdC50b3AgLSBlLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCwgbCA9IG4gLSByLCBoID0gciArIGUuY29sbGlzaW9uSGVpZ2h0IC0gYSAtIG47IGUuY29sbGlzaW9uSGVpZ2h0ID4gYSA/IGwgPiAwICYmIDAgPj0gaCA/IChpID0gdC50b3AgKyBsICsgZS5jb2xsaXNpb25IZWlnaHQgLSBhIC0gbiwgdC50b3AgKz0gbCAtIGkpIDogdC50b3AgPSBoID4gMCAmJiAwID49IGwgPyBuIDogbCA+IGggPyBuICsgYSAtIGUuY29sbGlzaW9uSGVpZ2h0IDogbiA6IGwgPiAwID8gdC50b3AgKz0gbCA6IGggPiAwID8gdC50b3AgLT0gaCA6IHQudG9wID0gbyh0LnRvcCAtIHIsIHQudG9wKSB9IH0sIGZsaXA6IHsgbGVmdDogZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGksIHMsIG4gPSBlLndpdGhpbiwgYSA9IG4ub2Zmc2V0LmxlZnQgKyBuLnNjcm9sbExlZnQsIG8gPSBuLndpZHRoLCBsID0gbi5pc1dpbmRvdyA/IG4uc2Nyb2xsTGVmdCA6IG4ub2Zmc2V0LmxlZnQsIGggPSB0LmxlZnQgLSBlLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsIGMgPSBoIC0gbCwgdSA9IGggKyBlLmNvbGxpc2lvbldpZHRoIC0gbyAtIGwsIGQgPSAibGVmdCIgPT09IGUubXlbMF0gPyAtZS5lbGVtV2lkdGggOiAicmlnaHQiID09PSBlLm15WzBdID8gZS5lbGVtV2lkdGggOiAwLCBwID0gImxlZnQiID09PSBlLmF0WzBdID8gZS50YXJnZXRXaWR0aCA6ICJyaWdodCIgPT09IGUuYXRbMF0gPyAtZS50YXJnZXRXaWR0aCA6IDAsIGYgPSAtMiAqIGUub2Zmc2V0WzBdOyAwID4gYyA/IChpID0gdC5sZWZ0ICsgZCArIHAgKyBmICsgZS5jb2xsaXNpb25XaWR0aCAtIG8gLSBhLCAoMCA+IGkgfHwgcihjKSA+IGkpICYmICh0LmxlZnQgKz0gZCArIHAgKyBmKSkgOiB1ID4gMCAmJiAocyA9IHQubGVmdCAtIGUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCArIGQgKyBwICsgZiAtIGwsIChzID4gMCB8fCB1ID4gcihzKSkgJiYgKHQubGVmdCArPSBkICsgcCArIGYpKSB9LCB0b3A6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpLCBzLCBuID0gZS53aXRoaW4sIGEgPSBuLm9mZnNldC50b3AgKyBuLnNjcm9sbFRvcCwgbyA9IG4uaGVpZ2h0LCBsID0gbi5pc1dpbmRvdyA/IG4uc2Nyb2xsVG9wIDogbi5vZmZzZXQudG9wLCBoID0gdC50b3AgLSBlLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCwgYyA9IGggLSBsLCB1ID0gaCArIGUuY29sbGlzaW9uSGVpZ2h0IC0gbyAtIGwsIGQgPSAidG9wIiA9PT0gZS5teVsxXSwgcCA9IGQgPyAtZS5lbGVtSGVpZ2h0IDogImJvdHRvbSIgPT09IGUubXlbMV0gPyBlLmVsZW1IZWlnaHQgOiAwLCBmID0gInRvcCIgPT09IGUuYXRbMV0gPyBlLnRhcmdldEhlaWdodCA6ICJib3R0b20iID09PSBlLmF0WzFdID8gLWUudGFyZ2V0SGVpZ2h0IDogMCwgZyA9IC0yICogZS5vZmZzZXRbMV07IDAgPiBjID8gKHMgPSB0LnRvcCArIHAgKyBmICsgZyArIGUuY29sbGlzaW9uSGVpZ2h0IC0gbyAtIGEsIHQudG9wICsgcCArIGYgKyBnID4gYyAmJiAoMCA+IHMgfHwgcihjKSA+IHMpICYmICh0LnRvcCArPSBwICsgZiArIGcpKSA6IHUgPiAwICYmIChpID0gdC50b3AgLSBlLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCArIHAgKyBmICsgZyAtIGwsIHQudG9wICsgcCArIGYgKyBnID4gdSAmJiAoaSA+IDAgfHwgdSA+IHIoaSkpICYmICh0LnRvcCArPSBwICsgZiArIGcpKSB9IH0sIGZsaXBmaXQ6IHsgbGVmdDogZnVuY3Rpb24gKCkgeyB0LnVpLnBvc2l0aW9uLmZsaXAubGVmdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0LnVpLnBvc2l0aW9uLmZpdC5sZWZ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfSwgdG9wOiBmdW5jdGlvbiAoKSB7IHQudWkucG9zaXRpb24uZmxpcC50b3AuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdC51aS5wb3NpdGlvbi5maXQudG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfSB9IH0sIGZ1bmN0aW9uICgpIHsgdmFyIGUsIGksIHMsIG4sIGEsIG8gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLCByID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG8gPyAiZGl2IiA6ICJib2R5IiksIHMgPSB7IHZpc2liaWxpdHk6ICJoaWRkZW4iLCB3aWR0aDogMCwgaGVpZ2h0OiAwLCBib3JkZXI6IDAsIG1hcmdpbjogMCwgYmFja2dyb3VuZDogIm5vbmUiIH0sIG8gJiYgdC5leHRlbmQocywgeyBwb3NpdGlvbjogImFic29sdXRlIiwgbGVmdDogIi0xMDAwcHgiLCB0b3A6ICItMTAwMHB4IiB9KTsgZm9yIChhIGluIHMpIGUuc3R5bGVbYV0gPSBzW2FdOyBlLmFwcGVuZENoaWxkKHIpLCBpID0gbyB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGkuaW5zZXJ0QmVmb3JlKGUsIGkuZmlyc3RDaGlsZCksIHIuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEwLjc0MzIyMjJweDsiLCBuID0gdChyKS5vZmZzZXQoKS5sZWZ0LCB0LnN1cHBvcnQub2Zmc2V0RnJhY3Rpb25zID0gbiA+IDEwICYmIDExID4gbiwgZS5pbm5lckhUTUwgPSAiIiwgaS5yZW1vdmVDaGlsZChlKSB9KCkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gMCwgaSA9IHt9LCBhID0ge307IGkuaGVpZ2h0ID0gaS5wYWRkaW5nVG9wID0gaS5wYWRkaW5nQm90dG9tID0gaS5ib3JkZXJUb3BXaWR0aCA9IGkuYm9yZGVyQm90dG9tV2lkdGggPSAiaGlkZSIsIGEuaGVpZ2h0ID0gYS5wYWRkaW5nVG9wID0gYS5wYWRkaW5nQm90dG9tID0gYS5ib3JkZXJUb3BXaWR0aCA9IGEuYm9yZGVyQm90dG9tV2lkdGggPSAic2hvdyIsIGUud2lkZ2V0KCJ1aS5hY2NvcmRpb24iLCB7IHZlcnNpb246ICIxLjEwLjQiLCBvcHRpb25zOiB7IGFjdGl2ZTogMCwgYW5pbWF0ZToge30sIGNvbGxhcHNpYmxlOiAhMSwgZXZlbnQ6ICJjbGljayIsIGhlYWRlcjogIj4gbGkgPiA6Zmlyc3QtY2hpbGQsPiA6bm90KGxpKTpldmVuIiwgaGVpZ2h0U3R5bGU6ICJhdXRvIiwgaWNvbnM6IHsgYWN0aXZlSGVhZGVyOiAidWktaWNvbi10cmlhbmdsZS0xLXMiLCBoZWFkZXI6ICJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIgfSwgYWN0aXZhdGU6IG51bGwsIGJlZm9yZUFjdGl2YXRlOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzLm9wdGlvbnM7IHRoaXMucHJldlNob3cgPSB0aGlzLnByZXZIaWRlID0gZSgpLCB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikuYXR0cigicm9sZSIsICJ0YWJsaXN0IiksIHQuY29sbGFwc2libGUgfHwgdC5hY3RpdmUgIT09ICExICYmIG51bGwgIT0gdC5hY3RpdmUgfHwgKHQuYWN0aXZlID0gMCksIHRoaXMuX3Byb2Nlc3NQYW5lbHMoKSwgMCA+IHQuYWN0aXZlICYmICh0LmFjdGl2ZSArPSB0aGlzLmhlYWRlcnMubGVuZ3RoKSwgdGhpcy5fcmVmcmVzaCgpIH0sIF9nZXRDcmVhdGVFdmVudERhdGE6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgaGVhZGVyOiB0aGlzLmFjdGl2ZSwgcGFuZWw6IHRoaXMuYWN0aXZlLmxlbmd0aCA/IHRoaXMuYWN0aXZlLm5leHQoKSA6IGUoKSwgY29udGVudDogdGhpcy5hY3RpdmUubGVuZ3RoID8gdGhpcy5hY3RpdmUubmV4dCgpIDogZSgpIH0gfSwgX2NyZWF0ZUljb25zOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5vcHRpb25zLmljb25zOyB0ICYmIChlKCI8c3Bhbj4iKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1pY29uIHVpLWljb24gIiArIHQuaGVhZGVyKS5wcmVwZW5kVG8odGhpcy5oZWFkZXJzKSwgdGhpcy5hY3RpdmUuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyh0LmhlYWRlcikuYWRkQ2xhc3ModC5hY3RpdmVIZWFkZXIpLCB0aGlzLmhlYWRlcnMuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpKSB9LCBfZGVzdHJveUljb25zOiBmdW5jdGlvbiAoKSB7IHRoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWljb25zIikuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmUoKSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB2YXIgZTsgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLnJlbW92ZUF0dHIoInJvbGUiKSwgdGhpcy5oZWFkZXJzLnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyIHVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLWhlbHBlci1yZXNldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1leHBhbmRlZCIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5lYWNoKGZ1bmN0aW9uICgpIHsgL151aS1hY2NvcmRpb24vLnRlc3QodGhpcy5pZCkgJiYgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoImlkIikgfSksIHRoaXMuX2Rlc3Ryb3lJY29ucygpLCBlID0gdGhpcy5oZWFkZXJzLm5leHQoKS5jc3MoImRpc3BsYXkiLCAiIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIHVpLWFjY29yZGlvbi1jb250ZW50IHVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCIpLmVhY2goZnVuY3Rpb24gKCkgeyAvXnVpLWFjY29yZGlvbi8udGVzdCh0aGlzLmlkKSAmJiB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSB9KSwgImNvbnRlbnQiICE9PSB0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUgJiYgZS5jc3MoImhlaWdodCIsICIiKSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gImFjdGl2ZSIgPT09IGUgPyAodGhpcy5fYWN0aXZhdGUodCksIHVuZGVmaW5lZCkgOiAoImV2ZW50IiA9PT0gZSAmJiAodGhpcy5vcHRpb25zLmV2ZW50ICYmIHRoaXMuX29mZih0aGlzLmhlYWRlcnMsIHRoaXMub3B0aW9ucy5ldmVudCksIHRoaXMuX3NldHVwRXZlbnRzKHQpKSwgdGhpcy5fc3VwZXIoZSwgdCksICJjb2xsYXBzaWJsZSIgIT09IGUgfHwgdCB8fCB0aGlzLm9wdGlvbnMuYWN0aXZlICE9PSAhMSB8fCB0aGlzLl9hY3RpdmF0ZSgwKSwgImljb25zIiA9PT0gZSAmJiAodGhpcy5fZGVzdHJveUljb25zKCksIHQgJiYgdGhpcy5fY3JlYXRlSWNvbnMoKSksICJkaXNhYmxlZCIgPT09IGUgJiYgdGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCAhIXQpLCB1bmRlZmluZWQpIH0sIF9rZXlkb3duOiBmdW5jdGlvbiAodCkgeyBpZiAoIXQuYWx0S2V5ICYmICF0LmN0cmxLZXkpIHsgdmFyIGkgPSBlLnVpLmtleUNvZGUsIGEgPSB0aGlzLmhlYWRlcnMubGVuZ3RoLCBzID0gdGhpcy5oZWFkZXJzLmluZGV4KHQudGFyZ2V0KSwgbiA9ICExOyBzd2l0Y2ggKHQua2V5Q29kZSkgeyBjYXNlIGkuUklHSFQ6IGNhc2UgaS5ET1dOOiBuID0gdGhpcy5oZWFkZXJzWyhzICsgMSkgJSBhXTsgYnJlYWs7IGNhc2UgaS5MRUZUOiBjYXNlIGkuVVA6IG4gPSB0aGlzLmhlYWRlcnNbKHMgLSAxICsgYSkgJSBhXTsgYnJlYWs7IGNhc2UgaS5TUEFDRTogY2FzZSBpLkVOVEVSOiB0aGlzLl9ldmVudEhhbmRsZXIodCk7IGJyZWFrOyBjYXNlIGkuSE9NRTogbiA9IHRoaXMuaGVhZGVyc1swXTsgYnJlYWs7IGNhc2UgaS5FTkQ6IG4gPSB0aGlzLmhlYWRlcnNbYSAtIDFdIH0gbiAmJiAoZSh0LnRhcmdldCkuYXR0cigidGFiSW5kZXgiLCAtMSksIGUobikuYXR0cigidGFiSW5kZXgiLCAwKSwgbi5mb2N1cygpLCB0LnByZXZlbnREZWZhdWx0KCkpIH0gfSwgX3BhbmVsS2V5RG93bjogZnVuY3Rpb24gKHQpIHsgdC5rZXlDb2RlID09PSBlLnVpLmtleUNvZGUuVVAgJiYgdC5jdHJsS2V5ICYmIGUodC5jdXJyZW50VGFyZ2V0KS5wcmV2KCkuZm9jdXMoKSB9LCByZWZyZXNoOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5vcHRpb25zOyB0aGlzLl9wcm9jZXNzUGFuZWxzKCksIHQuYWN0aXZlID09PSAhMSAmJiB0LmNvbGxhcHNpYmxlID09PSAhMCB8fCAhdGhpcy5oZWFkZXJzLmxlbmd0aCA/ICh0LmFjdGl2ZSA9ICExLCB0aGlzLmFjdGl2ZSA9IGUoKSkgOiB0LmFjdGl2ZSA9PT0gITEgPyB0aGlzLl9hY3RpdmF0ZSgwKSA6IHRoaXMuYWN0aXZlLmxlbmd0aCAmJiAhZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sIHRoaXMuYWN0aXZlWzBdKSA/IHRoaXMuaGVhZGVycy5sZW5ndGggPT09IHRoaXMuaGVhZGVycy5maW5kKCIudWktc3RhdGUtZGlzYWJsZWQiKS5sZW5ndGggPyAodC5hY3RpdmUgPSAhMSwgdGhpcy5hY3RpdmUgPSBlKCkpIDogdGhpcy5fYWN0aXZhdGUoTWF0aC5tYXgoMCwgdC5hY3RpdmUgLSAxKSkgOiB0LmFjdGl2ZSA9IHRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmFjdGl2ZSksIHRoaXMuX2Rlc3Ryb3lJY29ucygpLCB0aGlzLl9yZWZyZXNoKCkgfSwgX3Byb2Nlc3NQYW5lbHM6IGZ1bmN0aW9uICgpIHsgdGhpcy5oZWFkZXJzID0gdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhlYWRlcikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXIgdWktaGVscGVyLXJlc2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLCB0aGlzLmhlYWRlcnMubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudCB1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmZpbHRlcigiOm5vdCgudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlKSIpLmhpZGUoKSB9LCBfcmVmcmVzaDogZnVuY3Rpb24gKCkgeyB2YXIgaSwgYSA9IHRoaXMub3B0aW9ucywgcyA9IGEuaGVpZ2h0U3R5bGUsIG4gPSB0aGlzLmVsZW1lbnQucGFyZW50KCksIHIgPSB0aGlzLmFjY29yZGlvbklkID0gInVpLWFjY29yZGlvbi0iICsgKHRoaXMuZWxlbWVudC5hdHRyKCJpZCIpIHx8ICsrdCk7IHRoaXMuYWN0aXZlID0gdGhpcy5fZmluZEFjdGl2ZShhLmFjdGl2ZSkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIikucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSwgdGhpcy5hY3RpdmUubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKS5zaG93KCksIHRoaXMuaGVhZGVycy5hdHRyKCJyb2xlIiwgInRhYiIpLmVhY2goZnVuY3Rpb24gKHQpIHsgdmFyIGkgPSBlKHRoaXMpLCBhID0gaS5hdHRyKCJpZCIpLCBzID0gaS5uZXh0KCksIG4gPSBzLmF0dHIoImlkIik7IGEgfHwgKGEgPSByICsgIi1oZWFkZXItIiArIHQsIGkuYXR0cigiaWQiLCBhKSksIG4gfHwgKG4gPSByICsgIi1wYW5lbC0iICsgdCwgcy5hdHRyKCJpZCIsIG4pKSwgaS5hdHRyKCJhcmlhLWNvbnRyb2xzIiwgbiksIHMuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IiwgYSkgfSkubmV4dCgpLmF0dHIoInJvbGUiLCAidGFicGFuZWwiKSwgdGhpcy5oZWFkZXJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7ICJhcmlhLXNlbGVjdGVkIjogImZhbHNlIiwgImFyaWEtZXhwYW5kZWQiOiAiZmFsc2UiLCB0YWJJbmRleDogLTEgfSkubmV4dCgpLmF0dHIoeyAiYXJpYS1oaWRkZW4iOiAidHJ1ZSIgfSkuaGlkZSgpLCB0aGlzLmFjdGl2ZS5sZW5ndGggPyB0aGlzLmFjdGl2ZS5hdHRyKHsgImFyaWEtc2VsZWN0ZWQiOiAidHJ1ZSIsICJhcmlhLWV4cGFuZGVkIjogInRydWUiLCB0YWJJbmRleDogMCB9KS5uZXh0KCkuYXR0cih7ICJhcmlhLWhpZGRlbiI6ICJmYWxzZSIgfSkgOiB0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLCAwKSwgdGhpcy5fY3JlYXRlSWNvbnMoKSwgdGhpcy5fc2V0dXBFdmVudHMoYS5ldmVudCksICJmaWxsIiA9PT0gcyA/IChpID0gbi5oZWlnaHQoKSwgdGhpcy5lbGVtZW50LnNpYmxpbmdzKCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgdCA9IGUodGhpcyksIGEgPSB0LmNzcygicG9zaXRpb24iKTsgImFic29sdXRlIiAhPT0gYSAmJiAiZml4ZWQiICE9PSBhICYmIChpIC09IHQub3V0ZXJIZWlnaHQoITApKSB9KSwgdGhpcy5oZWFkZXJzLmVhY2goZnVuY3Rpb24gKCkgeyBpIC09IGUodGhpcykub3V0ZXJIZWlnaHQoITApIH0pLCB0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24gKCkgeyBlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLCBpIC0gZSh0aGlzKS5pbm5lckhlaWdodCgpICsgZSh0aGlzKS5oZWlnaHQoKSkpIH0pLmNzcygib3ZlcmZsb3ciLCAiYXV0byIpKSA6ICJhdXRvIiA9PT0gcyAmJiAoaSA9IDAsIHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbiAoKSB7IGkgPSBNYXRoLm1heChpLCBlKHRoaXMpLmNzcygiaGVpZ2h0IiwgIiIpLmhlaWdodCgpKSB9KS5oZWlnaHQoaSkpIH0sIF9hY3RpdmF0ZTogZnVuY3Rpb24gKHQpIHsgdmFyIGkgPSB0aGlzLl9maW5kQWN0aXZlKHQpWzBdOyBpICE9PSB0aGlzLmFjdGl2ZVswXSAmJiAoaSA9IGkgfHwgdGhpcy5hY3RpdmVbMF0sIHRoaXMuX2V2ZW50SGFuZGxlcih7IHRhcmdldDogaSwgY3VycmVudFRhcmdldDogaSwgcHJldmVudERlZmF1bHQ6IGUubm9vcCB9KSkgfSwgX2ZpbmRBY3RpdmU6IGZ1bmN0aW9uICh0KSB7IHJldHVybiAibnVtYmVyIiA9PSB0eXBlb2YgdCA/IHRoaXMuaGVhZGVycy5lcSh0KSA6IGUoKSB9LCBfc2V0dXBFdmVudHM6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0geyBrZXlkb3duOiAiX2tleWRvd24iIH07IHQgJiYgZS5lYWNoKHQuc3BsaXQoIiAiKSwgZnVuY3Rpb24gKGUsIHQpIHsgaVt0XSA9ICJfZXZlbnRIYW5kbGVyIiB9KSwgdGhpcy5fb2ZmKHRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSkpLCB0aGlzLl9vbih0aGlzLmhlYWRlcnMsIGkpLCB0aGlzLl9vbih0aGlzLmhlYWRlcnMubmV4dCgpLCB7IGtleWRvd246ICJfcGFuZWxLZXlEb3duIiB9KSwgdGhpcy5faG92ZXJhYmxlKHRoaXMuaGVhZGVycyksIHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmhlYWRlcnMpIH0sIF9ldmVudEhhbmRsZXI6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gdGhpcy5vcHRpb25zLCBhID0gdGhpcy5hY3RpdmUsIHMgPSBlKHQuY3VycmVudFRhcmdldCksIG4gPSBzWzBdID09PSBhWzBdLCByID0gbiAmJiBpLmNvbGxhcHNpYmxlLCBvID0gciA/IGUoKSA6IHMubmV4dCgpLCBoID0gYS5uZXh0KCksIGQgPSB7IG9sZEhlYWRlcjogYSwgb2xkUGFuZWw6IGgsIG5ld0hlYWRlcjogciA/IGUoKSA6IHMsIG5ld1BhbmVsOiBvIH07IHQucHJldmVudERlZmF1bHQoKSwgbiAmJiAhaS5jb2xsYXBzaWJsZSB8fCB0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsIHQsIGQpID09PSAhMSB8fCAoaS5hY3RpdmUgPSByID8gITEgOiB0aGlzLmhlYWRlcnMuaW5kZXgocyksIHRoaXMuYWN0aXZlID0gbiA/IGUoKSA6IHMsIHRoaXMuX3RvZ2dsZShkKSwgYS5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksIGkuaWNvbnMgJiYgYS5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKGkuaWNvbnMuYWN0aXZlSGVhZGVyKS5hZGRDbGFzcyhpLmljb25zLmhlYWRlciksIG4gfHwgKHMucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKSwgaS5pY29ucyAmJiBzLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3MoaS5pY29ucy5oZWFkZXIpLmFkZENsYXNzKGkuaWNvbnMuYWN0aXZlSGVhZGVyKSwgcy5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpKSkgfSwgX3RvZ2dsZTogZnVuY3Rpb24gKHQpIHsgdmFyIGkgPSB0Lm5ld1BhbmVsLCBhID0gdGhpcy5wcmV2U2hvdy5sZW5ndGggPyB0aGlzLnByZXZTaG93IDogdC5vbGRQYW5lbDsgdGhpcy5wcmV2U2hvdy5hZGQodGhpcy5wcmV2SGlkZSkuc3RvcCghMCwgITApLCB0aGlzLnByZXZTaG93ID0gaSwgdGhpcy5wcmV2SGlkZSA9IGEsIHRoaXMub3B0aW9ucy5hbmltYXRlID8gdGhpcy5fYW5pbWF0ZShpLCBhLCB0KSA6IChhLmhpZGUoKSwgaS5zaG93KCksIHRoaXMuX3RvZ2dsZUNvbXBsZXRlKHQpKSwgYS5hdHRyKHsgImFyaWEtaGlkZGVuIjogInRydWUiIH0pLCBhLnByZXYoKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwgImZhbHNlIiksIGkubGVuZ3RoICYmIGEubGVuZ3RoID8gYS5wcmV2KCkuYXR0cih7IHRhYkluZGV4OiAtMSwgImFyaWEtZXhwYW5kZWQiOiAiZmFsc2UiIH0pIDogaS5sZW5ndGggJiYgdGhpcy5oZWFkZXJzLmZpbHRlcihmdW5jdGlvbiAoKSB7IHJldHVybiAwID09PSBlKHRoaXMpLmF0dHIoInRhYkluZGV4IikgfSkuYXR0cigidGFiSW5kZXgiLCAtMSksIGkuYXR0cigiYXJpYS1oaWRkZW4iLCAiZmFsc2UiKS5wcmV2KCkuYXR0cih7ICJhcmlhLXNlbGVjdGVkIjogInRydWUiLCB0YWJJbmRleDogMCwgImFyaWEtZXhwYW5kZWQiOiAidHJ1ZSIgfSkgfSwgX2FuaW1hdGU6IGZ1bmN0aW9uIChlLCB0LCBzKSB7IHZhciBuLCByLCBvLCBoID0gdGhpcywgZCA9IDAsIGMgPSBlLmxlbmd0aCAmJiAoIXQubGVuZ3RoIHx8IGUuaW5kZXgoKSA8IHQuaW5kZXgoKSksIGwgPSB0aGlzLm9wdGlvbnMuYW5pbWF0ZSB8fCB7fSwgdSA9IGMgJiYgbC5kb3duIHx8IGwsIHYgPSBmdW5jdGlvbiAoKSB7IGguX3RvZ2dsZUNvbXBsZXRlKHMpIH07IHJldHVybiAibnVtYmVyIiA9PSB0eXBlb2YgdSAmJiAobyA9IHUpLCAic3RyaW5nIiA9PSB0eXBlb2YgdSAmJiAociA9IHUpLCByID0gciB8fCB1LmVhc2luZyB8fCBsLmVhc2luZywgbyA9IG8gfHwgdS5kdXJhdGlvbiB8fCBsLmR1cmF0aW9uLCB0Lmxlbmd0aCA/IGUubGVuZ3RoID8gKG4gPSBlLnNob3coKS5vdXRlckhlaWdodCgpLCB0LmFuaW1hdGUoaSwgeyBkdXJhdGlvbjogbywgZWFzaW5nOiByLCBzdGVwOiBmdW5jdGlvbiAoZSwgdCkgeyB0Lm5vdyA9IE1hdGgucm91bmQoZSkgfSB9KSwgZS5oaWRlKCkuYW5pbWF0ZShhLCB7IGR1cmF0aW9uOiBvLCBlYXNpbmc6IHIsIGNvbXBsZXRlOiB2LCBzdGVwOiBmdW5jdGlvbiAoZSwgaSkgeyBpLm5vdyA9IE1hdGgucm91bmQoZSksICJoZWlnaHQiICE9PSBpLnByb3AgPyBkICs9IGkubm93IDogImNvbnRlbnQiICE9PSBoLm9wdGlvbnMuaGVpZ2h0U3R5bGUgJiYgKGkubm93ID0gTWF0aC5yb3VuZChuIC0gdC5vdXRlckhlaWdodCgpIC0gZCksIGQgPSAwKSB9IH0pLCB1bmRlZmluZWQpIDogdC5hbmltYXRlKGksIG8sIHIsIHYpIDogZS5hbmltYXRlKGEsIG8sIHIsIHYpIH0sIF90b2dnbGVDb21wbGV0ZTogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLm9sZFBhbmVsOyB0LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKS5wcmV2KCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci10b3AiKS5hZGRDbGFzcygidWktY29ybmVyLWFsbCIpLCB0Lmxlbmd0aCAmJiAodC5wYXJlbnQoKVswXS5jbGFzc05hbWUgPSB0LnBhcmVudCgpWzBdLmNsYXNzTmFtZSksIHRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIiwgbnVsbCwgZSkgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKGUpIHsgZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIsIHsgdmVyc2lvbjogIjEuMTAuNCIsIGRlZmF1bHRFbGVtZW50OiAiPGlucHV0PiIsIG9wdGlvbnM6IHsgYXBwZW5kVG86IG51bGwsIGF1dG9Gb2N1czogITEsIGRlbGF5OiAzMDAsIG1pbkxlbmd0aDogMSwgcG9zaXRpb246IHsgbXk6ICJsZWZ0IHRvcCIsIGF0OiAibGVmdCBib3R0b20iLCBjb2xsaXNpb246ICJub25lIiB9LCBzb3VyY2U6IG51bGwsIGNoYW5nZTogbnVsbCwgY2xvc2U6IG51bGwsIGZvY3VzOiBudWxsLCBvcGVuOiBudWxsLCByZXNwb25zZTogbnVsbCwgc2VhcmNoOiBudWxsLCBzZWxlY3Q6IG51bGwgfSwgcmVxdWVzdEluZGV4OiAwLCBwZW5kaW5nOiAwLCBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7IHZhciB0LCBpLCBzLCBuID0gdGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIGEgPSAidGV4dGFyZWEiID09PSBuLCBvID0gImlucHV0IiA9PT0gbjsgdGhpcy5pc011bHRpTGluZSA9IGEgPyAhMCA6IG8gPyAhMSA6IHRoaXMuZWxlbWVudC5wcm9wKCJpc0NvbnRlbnRFZGl0YWJsZSIpLCB0aGlzLnZhbHVlTWV0aG9kID0gdGhpcy5lbGVtZW50W2EgfHwgbyA/ICJ2YWwiIDogInRleHQiXSwgdGhpcy5pc05ld01lbnUgPSAhMCwgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCAib2ZmIiksIHRoaXMuX29uKHRoaXMuZWxlbWVudCwgeyBrZXlkb3duOiBmdW5jdGlvbiAobikgeyBpZiAodGhpcy5lbGVtZW50LnByb3AoInJlYWRPbmx5IikpIHJldHVybiB0ID0gITAsIHMgPSAhMCwgaSA9ICEwLCB1bmRlZmluZWQ7IHQgPSAhMSwgcyA9ICExLCBpID0gITE7IHZhciBhID0gZS51aS5rZXlDb2RlOyBzd2l0Y2ggKG4ua2V5Q29kZSkgeyBjYXNlIGEuUEFHRV9VUDogdCA9ICEwLCB0aGlzLl9tb3ZlKCJwcmV2aW91c1BhZ2UiLCBuKTsgYnJlYWs7IGNhc2UgYS5QQUdFX0RPV046IHQgPSAhMCwgdGhpcy5fbW92ZSgibmV4dFBhZ2UiLCBuKTsgYnJlYWs7IGNhc2UgYS5VUDogdCA9ICEwLCB0aGlzLl9rZXlFdmVudCgicHJldmlvdXMiLCBuKTsgYnJlYWs7IGNhc2UgYS5ET1dOOiB0ID0gITAsIHRoaXMuX2tleUV2ZW50KCJuZXh0Iiwgbik7IGJyZWFrOyBjYXNlIGEuRU5URVI6IGNhc2UgYS5OVU1QQURfRU5URVI6IHRoaXMubWVudS5hY3RpdmUgJiYgKHQgPSAhMCwgbi5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLm1lbnUuc2VsZWN0KG4pKTsgYnJlYWs7IGNhc2UgYS5UQUI6IHRoaXMubWVudS5hY3RpdmUgJiYgdGhpcy5tZW51LnNlbGVjdChuKTsgYnJlYWs7IGNhc2UgYS5FU0NBUEU6IHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpICYmICh0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLCB0aGlzLmNsb3NlKG4pLCBuLnByZXZlbnREZWZhdWx0KCkpOyBicmVhazsgZGVmYXVsdDogaSA9ICEwLCB0aGlzLl9zZWFyY2hUaW1lb3V0KG4pIH0gfSwga2V5cHJlc3M6IGZ1bmN0aW9uIChzKSB7IGlmICh0KSByZXR1cm4gdCA9ICExLCAoIXRoaXMuaXNNdWx0aUxpbmUgfHwgdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpICYmIHMucHJldmVudERlZmF1bHQoKSwgdW5kZWZpbmVkOyBpZiAoIWkpIHsgdmFyIG4gPSBlLnVpLmtleUNvZGU7IHN3aXRjaCAocy5rZXlDb2RlKSB7IGNhc2Ugbi5QQUdFX1VQOiB0aGlzLl9tb3ZlKCJwcmV2aW91c1BhZ2UiLCBzKTsgYnJlYWs7IGNhc2Ugbi5QQUdFX0RPV046IHRoaXMuX21vdmUoIm5leHRQYWdlIiwgcyk7IGJyZWFrOyBjYXNlIG4uVVA6IHRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIsIHMpOyBicmVhazsgY2FzZSBuLkRPV046IHRoaXMuX2tleUV2ZW50KCJuZXh0IiwgcykgfSB9IH0sIGlucHV0OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gcyA/IChzID0gITEsIGUucHJldmVudERlZmF1bHQoKSwgdW5kZWZpbmVkKSA6ICh0aGlzLl9zZWFyY2hUaW1lb3V0KGUpLCB1bmRlZmluZWQpIH0sIGZvY3VzOiBmdW5jdGlvbiAoKSB7IHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbCwgdGhpcy5wcmV2aW91cyA9IHRoaXMuX3ZhbHVlKCkgfSwgYmx1cjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMuY2FuY2VsQmx1ciA/IChkZWxldGUgdGhpcy5jYW5jZWxCbHVyLCB1bmRlZmluZWQpIDogKGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksIHRoaXMuY2xvc2UoZSksIHRoaXMuX2NoYW5nZShlKSwgdW5kZWZpbmVkKSB9IH0pLCB0aGlzLl9pbml0U291cmNlKCksIHRoaXMubWVudSA9IGUoIjx1bD4iKS5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlIHVpLWZyb250IikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSkubWVudSh7IHJvbGU6IG51bGwgfSkuaGlkZSgpLmRhdGEoInVpLW1lbnUiKSwgdGhpcy5fb24odGhpcy5tZW51LmVsZW1lbnQsIHsgbW91c2Vkb3duOiBmdW5jdGlvbiAodCkgeyB0LnByZXZlbnREZWZhdWx0KCksIHRoaXMuY2FuY2VsQmx1ciA9ICEwLCB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IGRlbGV0ZSB0aGlzLmNhbmNlbEJsdXIgfSk7IHZhciBpID0gdGhpcy5tZW51LmVsZW1lbnRbMF07IGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKS5sZW5ndGggfHwgdGhpcy5fZGVsYXkoZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXM7IHRoaXMuZG9jdW1lbnQub25lKCJtb3VzZWRvd24iLCBmdW5jdGlvbiAocykgeyBzLnRhcmdldCA9PT0gdC5lbGVtZW50WzBdIHx8IHMudGFyZ2V0ID09PSBpIHx8IGUuY29udGFpbnMoaSwgcy50YXJnZXQpIHx8IHQuY2xvc2UoKSB9KSB9KSB9LCBtZW51Zm9jdXM6IGZ1bmN0aW9uICh0LCBpKSB7IGlmICh0aGlzLmlzTmV3TWVudSAmJiAodGhpcy5pc05ld01lbnUgPSAhMSwgdC5vcmlnaW5hbEV2ZW50ICYmIC9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKSkgcmV0dXJuIHRoaXMubWVudS5ibHVyKCksIHRoaXMuZG9jdW1lbnQub25lKCJtb3VzZW1vdmUiLCBmdW5jdGlvbiAoKSB7IGUodC50YXJnZXQpLnRyaWdnZXIodC5vcmlnaW5hbEV2ZW50KSB9KSwgdW5kZWZpbmVkOyB2YXIgcyA9IGkuaXRlbS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIpOyAhMSAhPT0gdGhpcy5fdHJpZ2dlcigiZm9jdXMiLCB0LCB7IGl0ZW06IHMgfSkgPyB0Lm9yaWdpbmFsRXZlbnQgJiYgL15rZXkvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpICYmIHRoaXMuX3ZhbHVlKHMudmFsdWUpIDogdGhpcy5saXZlUmVnaW9uLnRleHQocy52YWx1ZSkgfSwgbWVudXNlbGVjdDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIGkgPSB0Lml0ZW0uZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iKSwgcyA9IHRoaXMucHJldmlvdXM7IHRoaXMuZWxlbWVudFswXSAhPT0gdGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50ICYmICh0aGlzLmVsZW1lbnQuZm9jdXMoKSwgdGhpcy5wcmV2aW91cyA9IHMsIHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgdGhpcy5wcmV2aW91cyA9IHMsIHRoaXMuc2VsZWN0ZWRJdGVtID0gaSB9KSksICExICE9PSB0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLCBlLCB7IGl0ZW06IGkgfSkgJiYgdGhpcy5fdmFsdWUoaS52YWx1ZSksIHRoaXMudGVybSA9IHRoaXMuX3ZhbHVlKCksIHRoaXMuY2xvc2UoZSksIHRoaXMuc2VsZWN0ZWRJdGVtID0gaSB9IH0pLCB0aGlzLmxpdmVSZWdpb24gPSBlKCI8c3Bhbj4iLCB7IHJvbGU6ICJzdGF0dXMiLCAiYXJpYS1saXZlIjogInBvbGl0ZSIgfSkuYWRkQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQpLCB0aGlzLl9vbih0aGlzLndpbmRvdywgeyBiZWZvcmV1bmxvYWQ6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpIH0gfSkgfSwgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHsgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSwgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKSwgdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksIHRoaXMubGl2ZVJlZ2lvbi5yZW1vdmUoKSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAoZSwgdCkgeyB0aGlzLl9zdXBlcihlLCB0KSwgInNvdXJjZSIgPT09IGUgJiYgdGhpcy5faW5pdFNvdXJjZSgpLCAiYXBwZW5kVG8iID09PSBlICYmIHRoaXMubWVudS5lbGVtZW50LmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLCAiZGlzYWJsZWQiID09PSBlICYmIHQgJiYgdGhpcy54aHIgJiYgdGhpcy54aHIuYWJvcnQoKSB9LCBfYXBwZW5kVG86IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzLm9wdGlvbnMuYXBwZW5kVG87IHJldHVybiB0ICYmICh0ID0gdC5qcXVlcnkgfHwgdC5ub2RlVHlwZSA/IGUodCkgOiB0aGlzLmRvY3VtZW50LmZpbmQodCkuZXEoMCkpLCB0IHx8ICh0ID0gdGhpcy5lbGVtZW50LmNsb3Nlc3QoIi51aS1mcm9udCIpKSwgdC5sZW5ndGggfHwgKHQgPSB0aGlzLmRvY3VtZW50WzBdLmJvZHkpLCB0IH0sIF9pbml0U291cmNlOiBmdW5jdGlvbiAoKSB7IHZhciB0LCBpLCBzID0gdGhpczsgZS5pc0FycmF5KHRoaXMub3B0aW9ucy5zb3VyY2UpID8gKHQgPSB0aGlzLm9wdGlvbnMuc291cmNlLCB0aGlzLnNvdXJjZSA9IGZ1bmN0aW9uIChpLCBzKSB7IHMoZS51aS5hdXRvY29tcGxldGUuZmlsdGVyKHQsIGkudGVybSkpIH0pIDogInN0cmluZyIgPT0gdHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2UgPyAoaSA9IHRoaXMub3B0aW9ucy5zb3VyY2UsIHRoaXMuc291cmNlID0gZnVuY3Rpb24gKHQsIG4pIHsgcy54aHIgJiYgcy54aHIuYWJvcnQoKSwgcy54aHIgPSBlLmFqYXgoeyB1cmw6IGksIGRhdGE6IHQsIGRhdGFUeXBlOiAianNvbiIsIHN1Y2Nlc3M6IGZ1bmN0aW9uIChlKSB7IG4oZSkgfSwgZXJyb3I6IGZ1bmN0aW9uICgpIHsgbihbXSkgfSB9KSB9KSA6IHRoaXMuc291cmNlID0gdGhpcy5vcHRpb25zLnNvdXJjZSB9LCBfc2VhcmNoVGltZW91dDogZnVuY3Rpb24gKGUpIHsgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSwgdGhpcy5zZWFyY2hpbmcgPSB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IHRoaXMudGVybSAhPT0gdGhpcy5fdmFsdWUoKSAmJiAodGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsLCB0aGlzLnNlYXJjaChudWxsLCBlKSkgfSwgdGhpcy5vcHRpb25zLmRlbGF5KSB9LCBzZWFyY2g6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiBlID0gbnVsbCAhPSBlID8gZSA6IHRoaXMuX3ZhbHVlKCksIHRoaXMudGVybSA9IHRoaXMuX3ZhbHVlKCksIGUubGVuZ3RoIDwgdGhpcy5vcHRpb25zLm1pbkxlbmd0aCA/IHRoaXMuY2xvc2UodCkgOiB0aGlzLl90cmlnZ2VyKCJzZWFyY2giLCB0KSAhPT0gITEgPyB0aGlzLl9zZWFyY2goZSkgOiB1bmRlZmluZWQgfSwgX3NlYXJjaDogZnVuY3Rpb24gKGUpIHsgdGhpcy5wZW5kaW5nKyssIHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlLWxvYWRpbmciKSwgdGhpcy5jYW5jZWxTZWFyY2ggPSAhMSwgdGhpcy5zb3VyY2UoeyB0ZXJtOiBlIH0sIHRoaXMuX3Jlc3BvbnNlKCkpIH0sIF9yZXNwb25zZTogZnVuY3Rpb24gKCkgeyB2YXIgdCA9ICsrdGhpcy5yZXF1ZXN0SW5kZXg7IHJldHVybiBlLnByb3h5KGZ1bmN0aW9uIChlKSB7IHQgPT09IHRoaXMucmVxdWVzdEluZGV4ICYmIHRoaXMuX19yZXNwb25zZShlKSwgdGhpcy5wZW5kaW5nLS0sIHRoaXMucGVuZGluZyB8fCB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIikgfSwgdGhpcykgfSwgX19yZXNwb25zZTogZnVuY3Rpb24gKGUpIHsgZSAmJiAoZSA9IHRoaXMuX25vcm1hbGl6ZShlKSksIHRoaXMuX3RyaWdnZXIoInJlc3BvbnNlIiwgbnVsbCwgeyBjb250ZW50OiBlIH0pLCAhdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIGUgJiYgZS5sZW5ndGggJiYgIXRoaXMuY2FuY2VsU2VhcmNoID8gKHRoaXMuX3N1Z2dlc3QoZSksIHRoaXMuX3RyaWdnZXIoIm9wZW4iKSkgOiB0aGlzLl9jbG9zZSgpIH0sIGNsb3NlOiBmdW5jdGlvbiAoZSkgeyB0aGlzLmNhbmNlbFNlYXJjaCA9ICEwLCB0aGlzLl9jbG9zZShlKSB9LCBfY2xvc2U6IGZ1bmN0aW9uIChlKSB7IHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpICYmICh0aGlzLm1lbnUuZWxlbWVudC5oaWRlKCksIHRoaXMubWVudS5ibHVyKCksIHRoaXMuaXNOZXdNZW51ID0gITAsIHRoaXMuX3RyaWdnZXIoImNsb3NlIiwgZSkpIH0sIF9jaGFuZ2U6IGZ1bmN0aW9uIChlKSB7IHRoaXMucHJldmlvdXMgIT09IHRoaXMuX3ZhbHVlKCkgJiYgdGhpcy5fdHJpZ2dlcigiY2hhbmdlIiwgZSwgeyBpdGVtOiB0aGlzLnNlbGVjdGVkSXRlbSB9KSB9LCBfbm9ybWFsaXplOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5sZW5ndGggJiYgdFswXS5sYWJlbCAmJiB0WzBdLnZhbHVlID8gdCA6IGUubWFwKHQsIGZ1bmN0aW9uICh0KSB7IHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgdCA/IHsgbGFiZWw6IHQsIHZhbHVlOiB0IH0gOiBlLmV4dGVuZCh7IGxhYmVsOiB0LmxhYmVsIHx8IHQudmFsdWUsIHZhbHVlOiB0LnZhbHVlIHx8IHQubGFiZWwgfSwgdCkgfSkgfSwgX3N1Z2dlc3Q6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gdGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKTsgdGhpcy5fcmVuZGVyTWVudShpLCB0KSwgdGhpcy5pc05ld01lbnUgPSAhMCwgdGhpcy5tZW51LnJlZnJlc2goKSwgaS5zaG93KCksIHRoaXMuX3Jlc2l6ZU1lbnUoKSwgaS5wb3NpdGlvbihlLmV4dGVuZCh7IG9mOiB0aGlzLmVsZW1lbnQgfSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uKSksIHRoaXMub3B0aW9ucy5hdXRvRm9jdXMgJiYgdGhpcy5tZW51Lm5leHQoKSB9LCBfcmVzaXplTWVudTogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMubWVudS5lbGVtZW50OyBlLm91dGVyV2lkdGgoTWF0aC5tYXgoZS53aWR0aCgiIikub3V0ZXJXaWR0aCgpICsgMSwgdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSkpIH0sIF9yZW5kZXJNZW51OiBmdW5jdGlvbiAodCwgaSkgeyB2YXIgcyA9IHRoaXM7IGUuZWFjaChpLCBmdW5jdGlvbiAoZSwgaSkgeyBzLl9yZW5kZXJJdGVtRGF0YSh0LCBpKSB9KSB9LCBfcmVuZGVySXRlbURhdGE6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiB0aGlzLl9yZW5kZXJJdGVtKGUsIHQpLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIiwgdCkgfSwgX3JlbmRlckl0ZW06IGZ1bmN0aW9uICh0LCBpKSB7IHJldHVybiBlKCI8bGk+IikuYXBwZW5kKGUoIjxhPiIpLnRleHQoaS5sYWJlbCkpLmFwcGVuZFRvKHQpIH0sIF9tb3ZlOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikgPyB0aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSAmJiAvXnByZXZpb3VzLy50ZXN0KGUpIHx8IHRoaXMubWVudS5pc0xhc3RJdGVtKCkgJiYgL15uZXh0Ly50ZXN0KGUpID8gKHRoaXMuX3ZhbHVlKHRoaXMudGVybSksIHRoaXMubWVudS5ibHVyKCksIHVuZGVmaW5lZCkgOiAodGhpcy5tZW51W2VdKHQpLCB1bmRlZmluZWQpIDogKHRoaXMuc2VhcmNoKG51bGwsIHQpLCB1bmRlZmluZWQpIH0sIHdpZGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5tZW51LmVsZW1lbnQgfSwgX3ZhbHVlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCwgYXJndW1lbnRzKSB9LCBfa2V5RXZlbnQ6IGZ1bmN0aW9uIChlLCB0KSB7ICghdGhpcy5pc011bHRpTGluZSB8fCB0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSkgJiYgKHRoaXMuX21vdmUoZSwgdCksIHQucHJldmVudERlZmF1bHQoKSkgfSB9KSwgZS5leHRlbmQoZS51aS5hdXRvY29tcGxldGUsIHsgZXNjYXBlUmVnZXg6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csICJcXCQmIikgfSwgZmlsdGVyOiBmdW5jdGlvbiAodCwgaSkgeyB2YXIgcyA9IFJlZ0V4cChlLnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleChpKSwgImkiKTsgcmV0dXJuIGUuZ3JlcCh0LCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gcy50ZXN0KGUubGFiZWwgfHwgZS52YWx1ZSB8fCBlKSB9KSB9IH0pLCBlLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIiwgZS51aS5hdXRvY29tcGxldGUsIHsgb3B0aW9uczogeyBtZXNzYWdlczogeyBub1Jlc3VsdHM6ICJObyBzZWFyY2ggcmVzdWx0cy4iLCByZXN1bHRzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSArIChlID4gMSA/ICIgcmVzdWx0cyBhcmUiIDogIiByZXN1bHQgaXMiKSArICIgYXZhaWxhYmxlLCB1c2UgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBuYXZpZ2F0ZS4iIH0gfSB9LCBfX3Jlc3BvbnNlOiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgdGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgfHwgdGhpcy5jYW5jZWxTZWFyY2ggfHwgKHQgPSBlICYmIGUubGVuZ3RoID8gdGhpcy5vcHRpb25zLm1lc3NhZ2VzLnJlc3VsdHMoZS5sZW5ndGgpIDogdGhpcy5vcHRpb25zLm1lc3NhZ2VzLm5vUmVzdWx0cywgdGhpcy5saXZlUmVnaW9uLnRleHQodCkpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uIChlKSB7IHZhciB0LCBpID0gInVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiwgbiA9ICJ1aS1idXR0b24taWNvbnMtb25seSB1aS1idXR0b24taWNvbi1vbmx5IHVpLWJ1dHRvbi10ZXh0LWljb25zIHVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSB1aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSB1aS1idXR0b24tdGV4dC1vbmx5IiwgcyA9IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBlKHRoaXMpOyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdC5maW5kKCI6dWktYnV0dG9uIikuYnV0dG9uKCJyZWZyZXNoIikgfSwgMSkgfSwgYSA9IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gdC5uYW1lLCBuID0gdC5mb3JtLCBzID0gZShbXSk7IHJldHVybiBpICYmIChpID0gaS5yZXBsYWNlKC8nL2csICJcXCciKSwgcyA9IG4gPyBlKG4pLmZpbmQoIltuYW1lPSciICsgaSArICInXSIpIDogZSgiW25hbWU9JyIgKyBpICsgIiddIiwgdC5vd25lckRvY3VtZW50KS5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gIXRoaXMuZm9ybSB9KSksIHMgfTsgZS53aWRnZXQoInVpLmJ1dHRvbiIsIHsgdmVyc2lvbjogIjEuMTAuNCIsIGRlZmF1bHRFbGVtZW50OiAiPGJ1dHRvbj4iLCBvcHRpb25zOiB7IGRpc2FibGVkOiBudWxsLCB0ZXh0OiAhMCwgbGFiZWw6IG51bGwsIGljb25zOiB7IHByaW1hcnk6IG51bGwsIHNlY29uZGFyeTogbnVsbCB9IH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LmNsb3Nlc3QoImZvcm0iKS51bmJpbmQoInJlc2V0IiArIHRoaXMuZXZlbnROYW1lc3BhY2UpLmJpbmQoInJlc2V0IiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIHMpLCAiYm9vbGVhbiIgIT0gdHlwZW9mIHRoaXMub3B0aW9ucy5kaXNhYmxlZCA/IHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9ICEhdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIikgOiB0aGlzLmVsZW1lbnQucHJvcCgiZGlzYWJsZWQiLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLCB0aGlzLl9kZXRlcm1pbmVCdXR0b25UeXBlKCksIHRoaXMuaGFzVGl0bGUgPSAhIXRoaXMuYnV0dG9uRWxlbWVudC5hdHRyKCJ0aXRsZSIpOyB2YXIgbiA9IHRoaXMsIG8gPSB0aGlzLm9wdGlvbnMsIHIgPSAiY2hlY2tib3giID09PSB0aGlzLnR5cGUgfHwgInJhZGlvIiA9PT0gdGhpcy50eXBlLCBoID0gciA/ICIiIDogInVpLXN0YXRlLWFjdGl2ZSI7IG51bGwgPT09IG8ubGFiZWwgJiYgKG8ubGFiZWwgPSAiaW5wdXQiID09PSB0aGlzLnR5cGUgPyB0aGlzLmJ1dHRvbkVsZW1lbnQudmFsKCkgOiB0aGlzLmJ1dHRvbkVsZW1lbnQuaHRtbCgpKSwgdGhpcy5faG92ZXJhYmxlKHRoaXMuYnV0dG9uRWxlbWVudCksIHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhpKS5hdHRyKCJyb2xlIiwgImJ1dHRvbiIpLmJpbmQoIm1vdXNlZW50ZXIiICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24gKCkgeyBvLmRpc2FibGVkIHx8IHRoaXMgPT09IHQgJiYgZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikgfSkuYmluZCgibW91c2VsZWF2ZSIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbiAoKSB7IG8uZGlzYWJsZWQgfHwgZSh0aGlzKS5yZW1vdmVDbGFzcyhoKSB9KS5iaW5kKCJjbGljayIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbiAoZSkgeyBvLmRpc2FibGVkICYmIChlLnByZXZlbnREZWZhdWx0KCksIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpIH0pLCB0aGlzLl9vbih7IGZvY3VzOiBmdW5jdGlvbiAoKSB7IHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKSB9LCBibHVyOiBmdW5jdGlvbiAoKSB7IHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSB9IH0pLCByICYmIHRoaXMuZWxlbWVudC5iaW5kKCJjaGFuZ2UiICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24gKCkgeyBuLnJlZnJlc2goKSB9KSwgImNoZWNrYm94IiA9PT0gdGhpcy50eXBlID8gdGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG8uZGlzYWJsZWQgPyAhMSA6IHVuZGVmaW5lZCB9KSA6ICJyYWRpbyIgPT09IHRoaXMudHlwZSA/IHRoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJjbGljayIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbiAoKSB7IGlmIChvLmRpc2FibGVkKSByZXR1cm4gITE7IGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLCBuLmJ1dHRvbkVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIiwgInRydWUiKTsgdmFyIHQgPSBuLmVsZW1lbnRbMF07IGEodCkubm90KHQpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF0gfSkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsICJmYWxzZSIpIH0pIDogKHRoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJtb3VzZWRvd24iICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gby5kaXNhYmxlZCA/ICExIDogKGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLCB0ID0gdGhpcywgbi5kb2N1bWVudC5vbmUoIm1vdXNldXAiLCBmdW5jdGlvbiAoKSB7IHQgPSBudWxsIH0pLCB1bmRlZmluZWQpIH0pLmJpbmQoIm1vdXNldXAiICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gby5kaXNhYmxlZCA/ICExIDogKGUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLCB1bmRlZmluZWQpIH0pLmJpbmQoImtleWRvd24iICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24gKHQpIHsgcmV0dXJuIG8uZGlzYWJsZWQgPyAhMSA6ICgodC5rZXlDb2RlID09PSBlLnVpLmtleUNvZGUuU1BBQ0UgfHwgdC5rZXlDb2RlID09PSBlLnVpLmtleUNvZGUuRU5URVIpICYmIGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLCB1bmRlZmluZWQpIH0pLmJpbmQoImtleXVwIiArIHRoaXMuZXZlbnROYW1lc3BhY2UgKyAiIGJsdXIiICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24gKCkgeyBlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSB9KSwgdGhpcy5idXR0b25FbGVtZW50LmlzKCJhIikgJiYgdGhpcy5idXR0b25FbGVtZW50LmtleXVwKGZ1bmN0aW9uICh0KSB7IHQua2V5Q29kZSA9PT0gZS51aS5rZXlDb2RlLlNQQUNFICYmIGUodGhpcykuY2xpY2soKSB9KSksIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLCBvLmRpc2FibGVkKSwgdGhpcy5fcmVzZXRCdXR0b24oKSB9LCBfZGV0ZXJtaW5lQnV0dG9uVHlwZTogZnVuY3Rpb24gKCkgeyB2YXIgZSwgdCwgaTsgdGhpcy50eXBlID0gdGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKSA/ICJjaGVja2JveCIgOiB0aGlzLmVsZW1lbnQuaXMoIlt0eXBlPXJhZGlvXSIpID8gInJhZGlvIiA6IHRoaXMuZWxlbWVudC5pcygiaW5wdXQiKSA/ICJpbnB1dCIgOiAiYnV0dG9uIiwgImNoZWNrYm94IiA9PT0gdGhpcy50eXBlIHx8ICJyYWRpbyIgPT09IHRoaXMudHlwZSA/IChlID0gdGhpcy5lbGVtZW50LnBhcmVudHMoKS5sYXN0KCksIHQgPSAibGFiZWxbZm9yPSciICsgdGhpcy5lbGVtZW50LmF0dHIoImlkIikgKyAiJ10iLCB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBlLmZpbmQodCksIHRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGggfHwgKGUgPSBlLmxlbmd0aCA/IGUuc2libGluZ3MoKSA6IHRoaXMuZWxlbWVudC5zaWJsaW5ncygpLCB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBlLmZpbHRlcih0KSwgdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aCB8fCAodGhpcy5idXR0b25FbGVtZW50ID0gZS5maW5kKHQpKSksIHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIiksIGkgPSB0aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIiksIGkgJiYgdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSwgdGhpcy5idXR0b25FbGVtZW50LnByb3AoImFyaWEtcHJlc3NlZCIsIGkpKSA6IHRoaXMuYnV0dG9uRWxlbWVudCA9IHRoaXMuZWxlbWVudCB9LCB3aWRnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuYnV0dG9uRWxlbWVudCB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLCB0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoaSArICIgdWktc3RhdGUtYWN0aXZlICIgKyBuKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1wcmVzc2VkIikuaHRtbCh0aGlzLmJ1dHRvbkVsZW1lbnQuZmluZCgiLnVpLWJ1dHRvbi10ZXh0IikuaHRtbCgpKSwgdGhpcy5oYXNUaXRsZSB8fCB0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQXR0cigidGl0bGUiKSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5fc3VwZXIoZSwgdCksICJkaXNhYmxlZCIgPT09IGUgPyAodGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwgISF0KSwgdCAmJiB0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIiksIHVuZGVmaW5lZCkgOiAodGhpcy5fcmVzZXRCdXR0b24oKSwgdW5kZWZpbmVkKSB9LCByZWZyZXNoOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5lbGVtZW50LmlzKCJpbnB1dCwgYnV0dG9uIikgPyB0aGlzLmVsZW1lbnQuaXMoIjpkaXNhYmxlZCIpIDogdGhpcy5lbGVtZW50Lmhhc0NsYXNzKCJ1aS1idXR0b24tZGlzYWJsZWQiKTsgdCAhPT0gdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLCB0KSwgInJhZGlvIiA9PT0gdGhpcy50eXBlID8gYSh0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24gKCkgeyBlKHRoaXMpLmlzKCI6Y2hlY2tlZCIpID8gZSh0aGlzKS5idXR0b24oIndpZGdldCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCAidHJ1ZSIpIDogZSh0aGlzKS5idXR0b24oIndpZGdldCIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCAiZmFsc2UiKSB9KSA6ICJjaGVja2JveCIgPT09IHRoaXMudHlwZSAmJiAodGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpID8gdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCAidHJ1ZSIpIDogdGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCAiZmFsc2UiKSkgfSwgX3Jlc2V0QnV0dG9uOiBmdW5jdGlvbiAoKSB7IGlmICgiaW5wdXQiID09PSB0aGlzLnR5cGUpIHJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwgJiYgdGhpcy5lbGVtZW50LnZhbCh0aGlzLm9wdGlvbnMubGFiZWwpLCB1bmRlZmluZWQ7IHZhciB0ID0gdGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKG4pLCBpID0gZSgiPHNwYW4+PFwvc3Bhbj4iLCB0aGlzLmRvY3VtZW50WzBdKS5hZGRDbGFzcygidWktYnV0dG9uLXRleHQiKS5odG1sKHRoaXMub3B0aW9ucy5sYWJlbCkuYXBwZW5kVG8odC5lbXB0eSgpKS50ZXh0KCksIHMgPSB0aGlzLm9wdGlvbnMuaWNvbnMsIGEgPSBzLnByaW1hcnkgJiYgcy5zZWNvbmRhcnksIG8gPSBbXTsgcy5wcmltYXJ5IHx8IHMuc2Vjb25kYXJ5ID8gKHRoaXMub3B0aW9ucy50ZXh0ICYmIG8ucHVzaCgidWktYnV0dG9uLXRleHQtaWNvbiIgKyAoYSA/ICJzIiA6IHMucHJpbWFyeSA/ICItcHJpbWFyeSIgOiAiLXNlY29uZGFyeSIpKSwgcy5wcmltYXJ5ICYmIHQucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiICsgcy5wcmltYXJ5ICsgIic+PFwvc3Bhbj4iKSwgcy5zZWNvbmRhcnkgJiYgdC5hcHBlbmQoIjxzcGFuIGNsYXNzPSd1aS1idXR0b24taWNvbi1zZWNvbmRhcnkgdWktaWNvbiAiICsgcy5zZWNvbmRhcnkgKyAiJz48XC9zcGFuPiIpLCB0aGlzLm9wdGlvbnMudGV4dCB8fCAoby5wdXNoKGEgPyAidWktYnV0dG9uLWljb25zLW9ubHkiIDogInVpLWJ1dHRvbi1pY29uLW9ubHkiKSwgdGhpcy5oYXNUaXRsZSB8fCB0LmF0dHIoInRpdGxlIiwgZS50cmltKGkpKSkpIDogby5wdXNoKCJ1aS1idXR0b24tdGV4dC1vbmx5IiksIHQuYWRkQ2xhc3Moby5qb2luKCIgIikpIH0gfSksIGUud2lkZ2V0KCJ1aS5idXR0b25zZXQiLCB7IHZlcnNpb246ICIxLjEwLjQiLCBvcHRpb25zOiB7IGl0ZW1zOiAiYnV0dG9uLCBpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGlucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSwgYSwgOmRhdGEodWktYnV0dG9uKSIgfSwgX2NyZWF0ZTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWJ1dHRvbnNldCIpIH0sIF9pbml0OiBmdW5jdGlvbiAoKSB7IHRoaXMucmVmcmVzaCgpIH0sIF9zZXRPcHRpb246IGZ1bmN0aW9uIChlLCB0KSB7ICJkaXNhYmxlZCIgPT09IGUgJiYgdGhpcy5idXR0b25zLmJ1dHRvbigib3B0aW9uIiwgZSwgdCksIHRoaXMuX3N1cGVyKGUsIHQpIH0sIHJlZnJlc2g6IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSAicnRsIiA9PT0gdGhpcy5lbGVtZW50LmNzcygiZGlyZWN0aW9uIik7IHRoaXMuYnV0dG9ucyA9IHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlsdGVyKCI6dWktYnV0dG9uIikuYnV0dG9uKCJyZWZyZXNoIikuZW5kKCkubm90KCI6dWktYnV0dG9uIikuYnV0dG9uKCkuZW5kKCkubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXSB9KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5maWx0ZXIoIjpmaXJzdCIpLmFkZENsYXNzKHQgPyAidWktY29ybmVyLXJpZ2h0IiA6ICJ1aS1jb3JuZXItbGVmdCIpLmVuZCgpLmZpbHRlcigiOmxhc3QiKS5hZGRDbGFzcyh0ID8gInVpLWNvcm5lci1sZWZ0IiA6ICJ1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5lbmQoKSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWJ1dHRvbnNldCIpLCB0aGlzLmJ1dHRvbnMubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXSB9KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZW5kKCkuYnV0dG9uKCJkZXN0cm95IikgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKGUsIHQpIHsNCiAgICBmdW5jdGlvbiBpKCkgeyB0aGlzLl9jdXJJbnN0ID0gbnVsbCwgdGhpcy5fa2V5RXZlbnQgPSAhMSwgdGhpcy5fZGlzYWJsZWRJbnB1dHMgPSBbXSwgdGhpcy5fZGF0ZXBpY2tlclNob3dpbmcgPSAhMSwgdGhpcy5faW5EaWFsb2cgPSAhMSwgdGhpcy5fbWFpbkRpdklkID0gInVpLWRhdGVwaWNrZXItZGl2IiwgdGhpcy5faW5saW5lQ2xhc3MgPSAidWktZGF0ZXBpY2tlci1pbmxpbmUiLCB0aGlzLl9hcHBlbmRDbGFzcyA9ICJ1aS1kYXRlcGlja2VyLWFwcGVuZCIsIHRoaXMuX3RyaWdnZXJDbGFzcyA9ICJ1aS1kYXRlcGlja2VyLXRyaWdnZXIiLCB0aGlzLl9kaWFsb2dDbGFzcyA9ICJ1aS1kYXRlcGlja2VyLWRpYWxvZyIsIHRoaXMuX2Rpc2FibGVDbGFzcyA9ICJ1aS1kYXRlcGlja2VyLWRpc2FibGVkIiwgdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MgPSAidWktZGF0ZXBpY2tlci11bnNlbGVjdGFibGUiLCB0aGlzLl9jdXJyZW50Q2xhc3MgPSAidWktZGF0ZXBpY2tlci1jdXJyZW50LWRheSIsIHRoaXMuX2RheU92ZXJDbGFzcyA9ICJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyIiwgdGhpcy5yZWdpb25hbCA9IFtdLCB0aGlzLnJlZ2lvbmFsWyIiXSA9IHsgY2xvc2VUZXh0OiAiRG9uZSIsIHByZXZUZXh0OiAiUHJldiIsIG5leHRUZXh0OiAiTmV4dCIsIGN1cnJlbnRUZXh0OiAiVG9kYXkiLCBtb250aE5hbWVzOiBbIkphbnVhcnkiLCAiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwiLCAiTWF5IiwgIkp1bmUiLCAiSnVseSIsICJBdWd1c3QiLCAiU2VwdGVtYmVyIiwgIk9jdG9iZXIiLCAiTm92ZW1iZXIiLCAiRGVjZW1iZXIiXSwgbW9udGhOYW1lc1Nob3J0OiBbIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIl0sIGRheU5hbWVzOiBbIlN1bmRheSIsICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5Il0sIGRheU5hbWVzU2hvcnQ6IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0Il0sIGRheU5hbWVzTWluOiBbIlN1IiwgIk1vIiwgIlR1IiwgIldlIiwgIlRoIiwgIkZyIiwgIlNhIl0sIHdlZWtIZWFkZXI6ICJXayIsIGRhdGVGb3JtYXQ6ICJtbS9kZC95eSIsIGZpcnN0RGF5OiAwLCBpc1JUTDogITEsIHNob3dNb250aEFmdGVyWWVhcjogITEsIHllYXJTdWZmaXg6ICIiIH0sIHRoaXMuX2RlZmF1bHRzID0geyBzaG93T246ICJmb2N1cyIsIHNob3dBbmltOiAiZmFkZUluIiwgc2hvd09wdGlvbnM6IHt9LCBkZWZhdWx0RGF0ZTogbnVsbCwgYXBwZW5kVGV4dDogIiIsIGJ1dHRvblRleHQ6ICIuLi4iLCBidXR0b25JbWFnZTogIiIsIGJ1dHRvbkltYWdlT25seTogITEsIGhpZGVJZk5vUHJldk5leHQ6ICExLCBuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0OiAhMSwgZ290b0N1cnJlbnQ6ICExLCBjaGFuZ2VNb250aDogITEsIGNoYW5nZVllYXI6ICExLCB5ZWFyUmFuZ2U6ICJjLTEwOmMrMTAiLCBzaG93T3RoZXJNb250aHM6ICExLCBzZWxlY3RPdGhlck1vbnRoczogITEsIHNob3dXZWVrOiAhMSwgY2FsY3VsYXRlV2VlazogdGhpcy5pc284NjAxV2Vlaywgc2hvcnRZZWFyQ3V0b2ZmOiAiKzEwIiwgbWluRGF0ZTogbnVsbCwgbWF4RGF0ZTogbnVsbCwgZHVyYXRpb246ICJmYXN0IiwgYmVmb3JlU2hvd0RheTogbnVsbCwgYmVmb3JlU2hvdzogbnVsbCwgb25TZWxlY3Q6IG51bGwsIG9uQ2hhbmdlTW9udGhZZWFyOiBudWxsLCBvbkNsb3NlOiBudWxsLCBudW1iZXJPZk1vbnRoczogMSwgc2hvd0N1cnJlbnRBdFBvczogMCwgc3RlcE1vbnRoczogMSwgc3RlcEJpZ01vbnRoczogMTIsIGFsdEZpZWxkOiAiIiwgYWx0Rm9ybWF0OiAiIiwgY29uc3RyYWluSW5wdXQ6ICEwLCBzaG93QnV0dG9uUGFuZWw6ICExLCBhdXRvU2l6ZTogITEsIGRpc2FibGVkOiAhMSB9LCBlLmV4dGVuZCh0aGlzLl9kZWZhdWx0cywgdGhpcy5yZWdpb25hbFsiIl0pLCB0aGlzLmRwRGl2ID0gYShlKCI8ZGl2IGlkPSciICsgdGhpcy5fbWFpbkRpdklkICsgIicgY2xhc3M9J3VpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48XC9kaXY+IikpIH0gZnVuY3Rpb24gYSh0KSB7IHZhciBpID0gImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSI7IHJldHVybiB0LmRlbGVnYXRlKGksICJtb3VzZW91dCIsIGZ1bmN0aW9uICgpIHsgZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgLTEgIT09IHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpICYmIGUodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLCAtMSAhPT0gdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikgJiYgZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIikgfSkuZGVsZWdhdGUoaSwgIm1vdXNlb3ZlciIsIGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihuLmlubGluZSA/IHQucGFyZW50KClbMF0gOiBuLmlucHV0WzBdKSB8fCAoZSh0aGlzKS5wYXJlbnRzKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpLmZpbmQoImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgLTEgIT09IHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpICYmIGUodGhpcykuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLCAtMSAhPT0gdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikgJiYgZSh0aGlzKS5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIikpIH0pIH0gZnVuY3Rpb24gcyh0LCBpKSB7IGUuZXh0ZW5kKHQsIGkpOyBmb3IgKHZhciBhIGluIGkpIG51bGwgPT0gaVthXSAmJiAodFthXSA9IGlbYV0pOyByZXR1cm4gdCB9IGUuZXh0ZW5kKGUudWksIHsgZGF0ZXBpY2tlcjogeyB2ZXJzaW9uOiAiMS4xMC40IiB9IH0pOyB2YXIgbiwgciA9ICJkYXRlcGlja2VyIjsgZS5leHRlbmQoaS5wcm90b3R5cGUsIHsNCiAgICAgICAgbWFya2VyQ2xhc3NOYW1lOiAiaGFzRGF0ZXBpY2tlciIsIG1heFJvd3M6IDQsIF93aWRnZXREYXRlcGlja2VyOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmRwRGl2IH0sIHNldERlZmF1bHRzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gcyh0aGlzLl9kZWZhdWx0cywgZSB8fCB7fSksIHRoaXMgfSwgX2F0dGFjaERhdGVwaWNrZXI6IGZ1bmN0aW9uICh0LCBpKSB7IHZhciBhLCBzLCBuOyBhID0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBzID0gImRpdiIgPT09IGEgfHwgInNwYW4iID09PSBhLCB0LmlkIHx8ICh0aGlzLnV1aWQgKz0gMSwgdC5pZCA9ICJkcCIgKyB0aGlzLnV1aWQpLCBuID0gdGhpcy5fbmV3SW5zdChlKHQpLCBzKSwgbi5zZXR0aW5ncyA9IGUuZXh0ZW5kKHt9LCBpIHx8IHt9KSwgImlucHV0IiA9PT0gYSA/IHRoaXMuX2Nvbm5lY3REYXRlcGlja2VyKHQsIG4pIDogcyAmJiB0aGlzLl9pbmxpbmVEYXRlcGlja2VyKHQsIG4pIH0sIF9uZXdJbnN0OiBmdW5jdGlvbiAodCwgaSkgeyB2YXIgcyA9IHRbMF0uaWQucmVwbGFjZSgvKFteQS1aYS16MC05X1wtXSkvZywgIlxcXFwkMSIpOyByZXR1cm4geyBpZDogcywgaW5wdXQ6IHQsIHNlbGVjdGVkRGF5OiAwLCBzZWxlY3RlZE1vbnRoOiAwLCBzZWxlY3RlZFllYXI6IDAsIGRyYXdNb250aDogMCwgZHJhd1llYXI6IDAsIGlubGluZTogaSwgZHBEaXY6IGkgPyBhKGUoIjxkaXYgY2xhc3M9JyIgKyB0aGlzLl9pbmxpbmVDbGFzcyArICIgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjxcL2Rpdj4iKSkgOiB0aGlzLmRwRGl2IH0gfSwgX2Nvbm5lY3REYXRlcGlja2VyOiBmdW5jdGlvbiAodCwgaSkgeyB2YXIgYSA9IGUodCk7IGkuYXBwZW5kID0gZShbXSksIGkudHJpZ2dlciA9IGUoW10pLCBhLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSB8fCAodGhpcy5fYXR0YWNobWVudHMoYSwgaSksIGEuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmtleWRvd24odGhpcy5fZG9LZXlEb3duKS5rZXlwcmVzcyh0aGlzLl9kb0tleVByZXNzKS5rZXl1cCh0aGlzLl9kb0tleVVwKSwgdGhpcy5fYXV0b1NpemUoaSksIGUuZGF0YSh0LCByLCBpKSwgaS5zZXR0aW5ncy5kaXNhYmxlZCAmJiB0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcih0KSkgfSwgX2F0dGFjaG1lbnRzOiBmdW5jdGlvbiAodCwgaSkgeyB2YXIgYSwgcywgbiwgciA9IHRoaXMuX2dldChpLCAiYXBwZW5kVGV4dCIpLCBvID0gdGhpcy5fZ2V0KGksICJpc1JUTCIpOyBpLmFwcGVuZCAmJiBpLmFwcGVuZC5yZW1vdmUoKSwgciAmJiAoaS5hcHBlbmQgPSBlKCI8c3BhbiBjbGFzcz0nIiArIHRoaXMuX2FwcGVuZENsYXNzICsgIic+IiArIHIgKyAiPFwvc3Bhbj4iKSwgdFtvID8gImJlZm9yZSIgOiAiYWZ0ZXIiXShpLmFwcGVuZCkpLCB0LnVuYmluZCgiZm9jdXMiLCB0aGlzLl9zaG93RGF0ZXBpY2tlciksIGkudHJpZ2dlciAmJiBpLnRyaWdnZXIucmVtb3ZlKCksIGEgPSB0aGlzLl9nZXQoaSwgInNob3dPbiIpLCAoImZvY3VzIiA9PT0gYSB8fCAiYm90aCIgPT09IGEpICYmIHQuZm9jdXModGhpcy5fc2hvd0RhdGVwaWNrZXIpLCAoImJ1dHRvbiIgPT09IGEgfHwgImJvdGgiID09PSBhKSAmJiAocyA9IHRoaXMuX2dldChpLCAiYnV0dG9uVGV4dCIpLCBuID0gdGhpcy5fZ2V0KGksICJidXR0b25JbWFnZSIpLCBpLnRyaWdnZXIgPSBlKHRoaXMuX2dldChpLCAiYnV0dG9uSW1hZ2VPbmx5IikgPyBlKCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoeyBzcmM6IG4sIGFsdDogcywgdGl0bGU6IHMgfSkgOiBlKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PFwvYnV0dG9uPiIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuaHRtbChuID8gZSgiPGltZy8+IikuYXR0cih7IHNyYzogbiwgYWx0OiBzLCB0aXRsZTogcyB9KSA6IHMpKSwgdFtvID8gImJlZm9yZSIgOiAiYWZ0ZXIiXShpLnRyaWdnZXIpLCBpLnRyaWdnZXIuY2xpY2soZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiBlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCA9PT0gdFswXSA/IGUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSA6IGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgJiYgZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQgIT09IHRbMF0gPyAoZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCBlLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pKSA6IGUuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodFswXSksICExIH0pKSB9LCBfYXV0b1NpemU6IGZ1bmN0aW9uIChlKSB7IGlmICh0aGlzLl9nZXQoZSwgImF1dG9TaXplIikgJiYgIWUuaW5saW5lKSB7IHZhciB0LCBpLCBhLCBzLCBuID0gbmV3IERhdGUoMjAwOSwgMTEsIDIwKSwgciA9IHRoaXMuX2dldChlLCAiZGF0ZUZvcm1hdCIpOyByLm1hdGNoKC9bRE1dLykgJiYgKHQgPSBmdW5jdGlvbiAoZSkgeyBmb3IgKGkgPSAwLCBhID0gMCwgcyA9IDA7IGUubGVuZ3RoID4gczsgcysrKSBlW3NdLmxlbmd0aCA+IGkgJiYgKGkgPSBlW3NdLmxlbmd0aCwgYSA9IHMpOyByZXR1cm4gYSB9LCBuLnNldE1vbnRoKHQodGhpcy5fZ2V0KGUsIHIubWF0Y2goL01NLykgPyAibW9udGhOYW1lcyIgOiAibW9udGhOYW1lc1Nob3J0IikpKSwgbi5zZXREYXRlKHQodGhpcy5fZ2V0KGUsIHIubWF0Y2goL0RELykgPyAiZGF5TmFtZXMiIDogImRheU5hbWVzU2hvcnQiKSkgKyAyMCAtIG4uZ2V0RGF5KCkpKSwgZS5pbnB1dC5hdHRyKCJzaXplIiwgdGhpcy5fZm9ybWF0RGF0ZShlLCBuKS5sZW5ndGgpIH0gfSwgX2lubGluZURhdGVwaWNrZXI6IGZ1bmN0aW9uICh0LCBpKSB7IHZhciBhID0gZSh0KTsgYS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkgfHwgKGEuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChpLmRwRGl2KSwgZS5kYXRhKHQsIHIsIGkpLCB0aGlzLl9zZXREYXRlKGksIHRoaXMuX2dldERlZmF1bHREYXRlKGkpLCAhMCksIHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksIHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSwgaS5zZXR0aW5ncy5kaXNhYmxlZCAmJiB0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcih0KSwgaS5kcERpdi5jc3MoImRpc3BsYXkiLCAiYmxvY2siKSkgfSwgX2RpYWxvZ0RhdGVwaWNrZXI6IGZ1bmN0aW9uICh0LCBpLCBhLCBuLCBvKSB7IHZhciB1LCBjLCBoLCBsLCBkLCBwID0gdGhpcy5fZGlhbG9nSW5zdDsgcmV0dXJuIHAgfHwgKHRoaXMudXVpZCArPSAxLCB1ID0gImRwIiArIHRoaXMudXVpZCwgdGhpcy5fZGlhbG9nSW5wdXQgPSBlKCI8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9JyIgKyB1ICsgIicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IHdpZHRoOiAwcHg7Jy8+IiksIHRoaXMuX2RpYWxvZ0lucHV0LmtleWRvd24odGhpcy5fZG9LZXlEb3duKSwgZSgiYm9keSIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCksIHAgPSB0aGlzLl9kaWFsb2dJbnN0ID0gdGhpcy5fbmV3SW5zdCh0aGlzLl9kaWFsb2dJbnB1dCwgITEpLCBwLnNldHRpbmdzID0ge30sIGUuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSwgciwgcCkpLCBzKHAuc2V0dGluZ3MsIG4gfHwge30pLCBpID0gaSAmJiBpLmNvbnN0cnVjdG9yID09PSBEYXRlID8gdGhpcy5fZm9ybWF0RGF0ZShwLCBpKSA6IGksIHRoaXMuX2RpYWxvZ0lucHV0LnZhbChpKSwgdGhpcy5fcG9zID0gbyA/IG8ubGVuZ3RoID8gbyA6IFtvLnBhZ2VYLCBvLnBhZ2VZXSA6IG51bGwsIHRoaXMuX3BvcyB8fCAoYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgaCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIGwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsIGQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLCB0aGlzLl9wb3MgPSBbYyAvIDIgLSAxMDAgKyBsLCBoIC8gMiAtIDE1MCArIGRdKSwgdGhpcy5fZGlhbG9nSW5wdXQuY3NzKCJsZWZ0IiwgdGhpcy5fcG9zWzBdICsgMjAgKyAicHgiKS5jc3MoInRvcCIsIHRoaXMuX3Bvc1sxXSArICJweCIpLCBwLnNldHRpbmdzLm9uU2VsZWN0ID0gYSwgdGhpcy5faW5EaWFsb2cgPSAhMCwgdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyksIHRoaXMuX3Nob3dEYXRlcGlja2VyKHRoaXMuX2RpYWxvZ0lucHV0WzBdKSwgZS5ibG9ja1VJICYmIGUuYmxvY2tVSSh0aGlzLmRwRGl2KSwgZS5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLCByLCBwKSwgdGhpcyB9LCBfZGVzdHJveURhdGVwaWNrZXI6IGZ1bmN0aW9uICh0KSB7IHZhciBpLCBhID0gZSh0KSwgcyA9IGUuZGF0YSh0LCByKTsgYS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkgJiYgKGkgPSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIGUucmVtb3ZlRGF0YSh0LCByKSwgImlucHV0IiA9PT0gaSA/IChzLmFwcGVuZC5yZW1vdmUoKSwgcy50cmlnZ2VyLnJlbW92ZSgpLCBhLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS51bmJpbmQoImZvY3VzIiwgdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZCgia2V5ZG93biIsIHRoaXMuX2RvS2V5RG93bikudW5iaW5kKCJrZXlwcmVzcyIsIHRoaXMuX2RvS2V5UHJlc3MpLnVuYmluZCgia2V5dXAiLCB0aGlzLl9kb0tleVVwKSkgOiAoImRpdiIgPT09IGkgfHwgInNwYW4iID09PSBpKSAmJiBhLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpKSB9LCBfZW5hYmxlRGF0ZXBpY2tlcjogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEsIHMgPSBlKHQpLCBuID0gZS5kYXRhKHQsIHIpOyBzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSAmJiAoaSA9IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgImlucHV0IiA9PT0gaSA/ICh0LmRpc2FibGVkID0gITEsIG4udHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24gKCkgeyB0aGlzLmRpc2FibGVkID0gITEgfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3MoeyBvcGFjaXR5OiAiMS4wIiwgY3Vyc29yOiAiIiB9KSkgOiAoImRpdiIgPT09IGkgfHwgInNwYW4iID09PSBpKSAmJiAoYSA9IHMuY2hpbGRyZW4oIi4iICsgdGhpcy5faW5saW5lQ2xhc3MpLCBhLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksIGEuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIiKS5wcm9wKCJkaXNhYmxlZCIsICExKSksIHRoaXMuX2Rpc2FibGVkSW5wdXRzID0gZS5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID09PSB0ID8gbnVsbCA6IGUgfSkpIH0sIF9kaXNhYmxlRGF0ZXBpY2tlcjogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEsIHMgPSBlKHQpLCBuID0gZS5kYXRhKHQsIHIpOyBzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSAmJiAoaSA9IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgImlucHV0IiA9PT0gaSA/ICh0LmRpc2FibGVkID0gITAsIG4udHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24gKCkgeyB0aGlzLmRpc2FibGVkID0gITAgfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3MoeyBvcGFjaXR5OiAiMC41IiwgY3Vyc29yOiAiZGVmYXVsdCIgfSkpIDogKCJkaXYiID09PSBpIHx8ICJzcGFuIiA9PT0gaSkgJiYgKGEgPSBzLmNoaWxkcmVuKCIuIiArIHRoaXMuX2lubGluZUNsYXNzKSwgYS5jaGlsZHJlbigpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLCBhLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCAhMCkpLCB0aGlzLl9kaXNhYmxlZElucHV0cyA9IGUubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA9PT0gdCA/IG51bGwgOiBlIH0pLCB0aGlzLl9kaXNhYmxlZElucHV0c1t0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGhdID0gdCkgfSwgX2lzRGlzYWJsZWREYXRlcGlja2VyOiBmdW5jdGlvbiAoZSkgeyBpZiAoIWUpIHJldHVybiAhMTsgZm9yICh2YXIgdCA9IDA7IHRoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aCA+IHQ7IHQrKykgaWYgKHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RdID09PSBlKSByZXR1cm4gITA7IHJldHVybiAhMSB9LCBfZ2V0SW5zdDogZnVuY3Rpb24gKHQpIHsgdHJ5IHsgcmV0dXJuIGUuZGF0YSh0LCByKSB9IGNhdGNoIChpKSB7IHRocm93ICJNaXNzaW5nIGluc3RhbmNlIGRhdGEgZm9yIHRoaXMgZGF0ZXBpY2tlciIgfSB9LCBfb3B0aW9uRGF0ZXBpY2tlcjogZnVuY3Rpb24gKGksIGEsIG4pIHsgdmFyIHIsIG8sIHUsIGMsIGggPSB0aGlzLl9nZXRJbnN0KGkpOyByZXR1cm4gMiA9PT0gYXJndW1lbnRzLmxlbmd0aCAmJiAic3RyaW5nIiA9PSB0eXBlb2YgYSA/ICJkZWZhdWx0cyIgPT09IGEgPyBlLmV4dGVuZCh7fSwgZS5kYXRlcGlja2VyLl9kZWZhdWx0cykgOiBoID8gImFsbCIgPT09IGEgPyBlLmV4dGVuZCh7fSwgaC5zZXR0aW5ncykgOiB0aGlzLl9nZXQoaCwgYSkgOiBudWxsIDogKHIgPSBhIHx8IHt9LCAic3RyaW5nIiA9PSB0eXBlb2YgYSAmJiAociA9IHt9LCByW2FdID0gbiksIGggJiYgKHRoaXMuX2N1ckluc3QgPT09IGggJiYgdGhpcy5faGlkZURhdGVwaWNrZXIoKSwgbyA9IHRoaXMuX2dldERhdGVEYXRlcGlja2VyKGksICEwKSwgdSA9IHRoaXMuX2dldE1pbk1heERhdGUoaCwgIm1pbiIpLCBjID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShoLCAibWF4IiksIHMoaC5zZXR0aW5ncywgciksIG51bGwgIT09IHUgJiYgci5kYXRlRm9ybWF0ICE9PSB0ICYmIHIubWluRGF0ZSA9PT0gdCAmJiAoaC5zZXR0aW5ncy5taW5EYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShoLCB1KSksIG51bGwgIT09IGMgJiYgci5kYXRlRm9ybWF0ICE9PSB0ICYmIHIubWF4RGF0ZSA9PT0gdCAmJiAoaC5zZXR0aW5ncy5tYXhEYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShoLCBjKSksICJkaXNhYmxlZCIgaW4gciAmJiAoci5kaXNhYmxlZCA/IHRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGkpIDogdGhpcy5fZW5hYmxlRGF0ZXBpY2tlcihpKSksIHRoaXMuX2F0dGFjaG1lbnRzKGUoaSksIGgpLCB0aGlzLl9hdXRvU2l6ZShoKSwgdGhpcy5fc2V0RGF0ZShoLCBvKSwgdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGgpLCB0aGlzLl91cGRhdGVEYXRlcGlja2VyKGgpKSwgdCkgfSwgX2NoYW5nZURhdGVwaWNrZXI6IGZ1bmN0aW9uIChlLCB0LCBpKSB7IHRoaXMuX29wdGlvbkRhdGVwaWNrZXIoZSwgdCwgaSkgfSwgX3JlZnJlc2hEYXRlcGlja2VyOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXMuX2dldEluc3QoZSk7IHQgJiYgdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KSB9LCBfc2V0RGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBpID0gdGhpcy5fZ2V0SW5zdChlKTsgaSAmJiAodGhpcy5fc2V0RGF0ZShpLCB0KSwgdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSwgdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpKSB9LCBfZ2V0RGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBpID0gdGhpcy5fZ2V0SW5zdChlKTsgcmV0dXJuIGkgJiYgIWkuaW5saW5lICYmIHRoaXMuX3NldERhdGVGcm9tRmllbGQoaSwgdCksIGkgPyB0aGlzLl9nZXREYXRlKGkpIDogbnVsbCB9LCBfZG9LZXlEb3duOiBmdW5jdGlvbiAodCkgeyB2YXIgaSwgYSwgcywgbiA9IGUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCksIHIgPSAhMCwgbyA9IG4uZHBEaXYuaXMoIi51aS1kYXRlcGlja2VyLXJ0bCIpOyBpZiAobi5fa2V5RXZlbnQgPSAhMCwgZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZykgc3dpdGNoICh0LmtleUNvZGUpIHsgY2FzZSA5OiBlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksIHIgPSAhMTsgYnJlYWs7IGNhc2UgMTM6IHJldHVybiBzID0gZSgidGQuIiArIGUuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzICsgIjpub3QoLiIgKyBlLmRhdGVwaWNrZXIuX2N1cnJlbnRDbGFzcyArICIpIiwgbi5kcERpdiksIHNbMF0gJiYgZS5kYXRlcGlja2VyLl9zZWxlY3REYXkodC50YXJnZXQsIG4uc2VsZWN0ZWRNb250aCwgbi5zZWxlY3RlZFllYXIsIHNbMF0pLCBpID0gZS5kYXRlcGlja2VyLl9nZXQobiwgIm9uU2VsZWN0IiksIGkgPyAoYSA9IGUuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShuKSwgaS5hcHBseShuLmlucHV0ID8gbi5pbnB1dFswXSA6IG51bGwsIFthLCBuXSkpIDogZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCAhMTsgY2FzZSAyNzogZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpOyBicmVhazsgY2FzZSAzMzogZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LCB0LmN0cmxLZXkgPyAtZS5kYXRlcGlja2VyLl9nZXQobiwgInN0ZXBCaWdNb250aHMiKSA6IC1lLmRhdGVwaWNrZXIuX2dldChuLCAic3RlcE1vbnRocyIpLCAiTSIpOyBicmVhazsgY2FzZSAzNDogZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LCB0LmN0cmxLZXkgPyArZS5kYXRlcGlja2VyLl9nZXQobiwgInN0ZXBCaWdNb250aHMiKSA6ICtlLmRhdGVwaWNrZXIuX2dldChuLCAic3RlcE1vbnRocyIpLCAiTSIpOyBicmVhazsgY2FzZSAzNTogKHQuY3RybEtleSB8fCB0Lm1ldGFLZXkpICYmIGUuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKHQudGFyZ2V0KSwgciA9IHQuY3RybEtleSB8fCB0Lm1ldGFLZXk7IGJyZWFrOyBjYXNlIDM2OiAodC5jdHJsS2V5IHx8IHQubWV0YUtleSkgJiYgZS5kYXRlcGlja2VyLl9nb3RvVG9kYXkodC50YXJnZXQpLCByID0gdC5jdHJsS2V5IHx8IHQubWV0YUtleTsgYnJlYWs7IGNhc2UgMzc6ICh0LmN0cmxLZXkgfHwgdC5tZXRhS2V5KSAmJiBlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsIG8gPyAxIDogLTEsICJEIiksIHIgPSB0LmN0cmxLZXkgfHwgdC5tZXRhS2V5LCB0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5ICYmIGUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCwgdC5jdHJsS2V5ID8gLWUuZGF0ZXBpY2tlci5fZ2V0KG4sICJzdGVwQmlnTW9udGhzIikgOiAtZS5kYXRlcGlja2VyLl9nZXQobiwgInN0ZXBNb250aHMiKSwgIk0iKTsgYnJlYWs7IGNhc2UgMzg6ICh0LmN0cmxLZXkgfHwgdC5tZXRhS2V5KSAmJiBlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsIC03LCAiRCIpLCByID0gdC5jdHJsS2V5IHx8IHQubWV0YUtleTsgYnJlYWs7IGNhc2UgMzk6ICh0LmN0cmxLZXkgfHwgdC5tZXRhS2V5KSAmJiBlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsIG8gPyAtMSA6IDEsICJEIiksIHIgPSB0LmN0cmxLZXkgfHwgdC5tZXRhS2V5LCB0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5ICYmIGUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCwgdC5jdHJsS2V5ID8gK2UuZGF0ZXBpY2tlci5fZ2V0KG4sICJzdGVwQmlnTW9udGhzIikgOiArZS5kYXRlcGlja2VyLl9nZXQobiwgInN0ZXBNb250aHMiKSwgIk0iKTsgYnJlYWs7IGNhc2UgNDA6ICh0LmN0cmxLZXkgfHwgdC5tZXRhS2V5KSAmJiBlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsIDcsICJEIiksIHIgPSB0LmN0cmxLZXkgfHwgdC5tZXRhS2V5OyBicmVhazsgZGVmYXVsdDogciA9ICExIH0gZWxzZSAzNiA9PT0gdC5rZXlDb2RlICYmIHQuY3RybEtleSA/IGUuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodGhpcykgOiByID0gITE7IHIgJiYgKHQucHJldmVudERlZmF1bHQoKSwgdC5zdG9wUHJvcGFnYXRpb24oKSkgfSwgX2RvS2V5UHJlc3M6IGZ1bmN0aW9uIChpKSB7IHZhciBhLCBzLCBuID0gZS5kYXRlcGlja2VyLl9nZXRJbnN0KGkudGFyZ2V0KTsgcmV0dXJuIGUuZGF0ZXBpY2tlci5fZ2V0KG4sICJjb25zdHJhaW5JbnB1dCIpID8gKGEgPSBlLmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnMoZS5kYXRlcGlja2VyLl9nZXQobiwgImRhdGVGb3JtYXQiKSksIHMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG51bGwgPT0gaS5jaGFyQ29kZSA/IGkua2V5Q29kZSA6IGkuY2hhckNvZGUpLCBpLmN0cmxLZXkgfHwgaS5tZXRhS2V5IHx8ICIgIiA+IHMgfHwgIWEgfHwgYS5pbmRleE9mKHMpID4gLTEpIDogdCB9LCBfZG9LZXlVcDogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEgPSBlLmRhdGVwaWNrZXIuX2dldEluc3QodC50YXJnZXQpOyBpZiAoYS5pbnB1dC52YWwoKSAhPT0gYS5sYXN0VmFsKSB0cnkgeyBpID0gZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldChhLCAiZGF0ZUZvcm1hdCIpLCBhLmlucHV0ID8gYS5pbnB1dC52YWwoKSA6IG51bGwsIGUuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKGEpKSwgaSAmJiAoZS5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKGEpLCBlLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShhKSwgZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGEpKSB9IGNhdGNoIChzKSB7IH0gcmV0dXJuICEwIH0sIF9zaG93RGF0ZXBpY2tlcjogZnVuY3Rpb24gKHQpIHsgaWYgKHQgPSB0LnRhcmdldCB8fCB0LCAiaW5wdXQiICE9PSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgKHQgPSBlKCJpbnB1dCIsIHQucGFyZW50Tm9kZSlbMF0pLCAhZS5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcih0KSAmJiBlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCAhPT0gdCkgeyB2YXIgaSwgYSwgbiwgciwgbywgdSwgYzsgaSA9IGUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0KSwgZS5kYXRlcGlja2VyLl9jdXJJbnN0ICYmIGUuZGF0ZXBpY2tlci5fY3VySW5zdCAhPT0gaSAmJiAoZS5kYXRlcGlja2VyLl9jdXJJbnN0LmRwRGl2LnN0b3AoITAsICEwKSwgaSAmJiBlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmIGUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoZS5kYXRlcGlja2VyLl9jdXJJbnN0LmlucHV0WzBdKSksIGEgPSBlLmRhdGVwaWNrZXIuX2dldChpLCAiYmVmb3JlU2hvdyIpLCBuID0gYSA/IGEuYXBwbHkodCwgW3QsIGldKSA6IHt9LCBuICE9PSAhMSAmJiAocyhpLnNldHRpbmdzLCBuKSwgaS5sYXN0VmFsID0gbnVsbCwgZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQgPSB0LCBlLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQoaSksIGUuZGF0ZXBpY2tlci5faW5EaWFsb2cgJiYgKHQudmFsdWUgPSAiIiksIGUuZGF0ZXBpY2tlci5fcG9zIHx8IChlLmRhdGVwaWNrZXIuX3BvcyA9IGUuZGF0ZXBpY2tlci5fZmluZFBvcyh0KSwgZS5kYXRlcGlja2VyLl9wb3NbMV0gKz0gdC5vZmZzZXRIZWlnaHQpLCByID0gITEsIGUodCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24gKCkgeyByZXR1cm4gciB8PSAiZml4ZWQiID09PSBlKHRoaXMpLmNzcygicG9zaXRpb24iKSwgIXIgfSksIG8gPSB7IGxlZnQ6IGUuZGF0ZXBpY2tlci5fcG9zWzBdLCB0b3A6IGUuZGF0ZXBpY2tlci5fcG9zWzFdIH0sIGUuZGF0ZXBpY2tlci5fcG9zID0gbnVsbCwgaS5kcERpdi5lbXB0eSgpLCBpLmRwRGl2LmNzcyh7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCBkaXNwbGF5OiAiYmxvY2siLCB0b3A6ICItMTAwMHB4IiB9KSwgZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGkpLCBvID0gZS5kYXRlcGlja2VyLl9jaGVja09mZnNldChpLCBvLCByKSwgaS5kcERpdi5jc3MoeyBwb3NpdGlvbjogZS5kYXRlcGlja2VyLl9pbkRpYWxvZyAmJiBlLmJsb2NrVUkgPyAic3RhdGljIiA6IHIgPyAiZml4ZWQiIDogImFic29sdXRlIiwgZGlzcGxheTogIm5vbmUiLCBsZWZ0OiBvLmxlZnQgKyAicHgiLCB0b3A6IG8udG9wICsgInB4IiB9KSwgaS5pbmxpbmUgfHwgKHUgPSBlLmRhdGVwaWNrZXIuX2dldChpLCAic2hvd0FuaW0iKSwgYyA9IGUuZGF0ZXBpY2tlci5fZ2V0KGksICJkdXJhdGlvbiIpLCBpLmRwRGl2LnpJbmRleChlKHQpLnpJbmRleCgpICsgMSksIGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgPSAhMCwgZS5lZmZlY3RzICYmIGUuZWZmZWN0cy5lZmZlY3RbdV0gPyBpLmRwRGl2LnNob3codSwgZS5kYXRlcGlja2VyLl9nZXQoaSwgInNob3dPcHRpb25zIiksIGMpIDogaS5kcERpdlt1IHx8ICJzaG93Il0odSA/IGMgOiBudWxsKSwgZS5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KGkpICYmIGkuaW5wdXQuZm9jdXMoKSwgZS5kYXRlcGlja2VyLl9jdXJJbnN0ID0gaSkpIH0gfSwgX3VwZGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uICh0KSB7IHRoaXMubWF4Um93cyA9IDQsIG4gPSB0LCB0LmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVyYXRlSFRNTCh0KSksIHRoaXMuX2F0dGFjaEhhbmRsZXJzKHQpLCB0LmRwRGl2LmZpbmQoIi4iICsgdGhpcy5fZGF5T3ZlckNsYXNzICsgIiBhIikubW91c2VvdmVyKCk7IHZhciBpLCBhID0gdGhpcy5fZ2V0TnVtYmVyT2ZNb250aHModCksIHMgPSBhWzFdLCByID0gMTc7IHQuZHBEaXYucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00Iikud2lkdGgoIiIpLCBzID4gMSAmJiB0LmRwRGl2LmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLSIgKyBzKS5jc3MoIndpZHRoIiwgciAqIHMgKyAiZW0iKSwgdC5kcERpdlsoMSAhPT0gYVswXSB8fCAxICE9PSBhWzFdID8gImFkZCIgOiAicmVtb3ZlIikgKyAiQ2xhc3MiXSgidWktZGF0ZXBpY2tlci1tdWx0aSIpLCB0LmRwRGl2Wyh0aGlzLl9nZXQodCwgImlzUlRMIikgPyAiYWRkIiA6ICJyZW1vdmUiKSArICJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLXJ0bCIpLCB0ID09PSBlLmRhdGVwaWNrZXIuX2N1ckluc3QgJiYgZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiBlLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQodCkgJiYgdC5pbnB1dC5mb2N1cygpLCB0LnllYXJzaHRtbCAmJiAoaSA9IHQueWVhcnNodG1sLCBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaSA9PT0gdC55ZWFyc2h0bWwgJiYgdC55ZWFyc2h0bWwgJiYgdC5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgodC55ZWFyc2h0bWwpLCBpID0gdC55ZWFyc2h0bWwgPSBudWxsIH0sIDApKSB9LCBfc2hvdWxkRm9jdXNJbnB1dDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuaW5wdXQgJiYgZS5pbnB1dC5pcygiOnZpc2libGUiKSAmJiAhZS5pbnB1dC5pcygiOmRpc2FibGVkIikgJiYgIWUuaW5wdXQuaXMoIjpmb2N1cyIpIH0sIF9jaGVja09mZnNldDogZnVuY3Rpb24gKHQsIGksIGEpIHsgdmFyIHMgPSB0LmRwRGl2Lm91dGVyV2lkdGgoKSwgbiA9IHQuZHBEaXYub3V0ZXJIZWlnaHQoKSwgciA9IHQuaW5wdXQgPyB0LmlucHV0Lm91dGVyV2lkdGgoKSA6IDAsIG8gPSB0LmlucHV0ID8gdC5pbnB1dC5vdXRlckhlaWdodCgpIDogMCwgdSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCArIChhID8gMCA6IGUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksIGMgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgKGEgPyAwIDogZShkb2N1bWVudCkuc2Nyb2xsVG9wKCkpOyByZXR1cm4gaS5sZWZ0IC09IHRoaXMuX2dldCh0LCAiaXNSVEwiKSA/IHMgLSByIDogMCwgaS5sZWZ0IC09IGEgJiYgaS5sZWZ0ID09PSB0LmlucHV0Lm9mZnNldCgpLmxlZnQgPyBlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkgOiAwLCBpLnRvcCAtPSBhICYmIGkudG9wID09PSB0LmlucHV0Lm9mZnNldCgpLnRvcCArIG8gPyBlKGRvY3VtZW50KS5zY3JvbGxUb3AoKSA6IDAsIGkubGVmdCAtPSBNYXRoLm1pbihpLmxlZnQsIGkubGVmdCArIHMgPiB1ICYmIHUgPiBzID8gTWF0aC5hYnMoaS5sZWZ0ICsgcyAtIHUpIDogMCksIGkudG9wIC09IE1hdGgubWluKGkudG9wLCBpLnRvcCArIG4gPiBjICYmIGMgPiBuID8gTWF0aC5hYnMobiArIG8pIDogMCksIGkgfSwgX2ZpbmRQb3M6IGZ1bmN0aW9uICh0KSB7IGZvciAodmFyIGksIGEgPSB0aGlzLl9nZXRJbnN0KHQpLCBzID0gdGhpcy5fZ2V0KGEsICJpc1JUTCIpIDsgdCAmJiAoImhpZGRlbiIgPT09IHQudHlwZSB8fCAxICE9PSB0Lm5vZGVUeXBlIHx8IGUuZXhwci5maWx0ZXJzLmhpZGRlbih0KSkgOykgdCA9IHRbcyA/ICJwcmV2aW91c1NpYmxpbmciIDogIm5leHRTaWJsaW5nIl07IHJldHVybiBpID0gZSh0KS5vZmZzZXQoKSwgW2kubGVmdCwgaS50b3BdIH0sIF9oaWRlRGF0ZXBpY2tlcjogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEsIHMsIG4sIG8gPSB0aGlzLl9jdXJJbnN0OyAhbyB8fCB0ICYmIG8gIT09IGUuZGF0YSh0LCByKSB8fCB0aGlzLl9kYXRlcGlja2VyU2hvd2luZyAmJiAoaSA9IHRoaXMuX2dldChvLCAic2hvd0FuaW0iKSwgYSA9IHRoaXMuX2dldChvLCAiZHVyYXRpb24iKSwgcyA9IGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl90aWR5RGlhbG9nKG8pIH0sIGUuZWZmZWN0cyAmJiAoZS5lZmZlY3RzLmVmZmVjdFtpXSB8fCBlLmVmZmVjdHNbaV0pID8gby5kcERpdi5oaWRlKGksIGUuZGF0ZXBpY2tlci5fZ2V0KG8sICJzaG93T3B0aW9ucyIpLCBhLCBzKSA6IG8uZHBEaXZbInNsaWRlRG93biIgPT09IGkgPyAic2xpZGVVcCIgOiAiZmFkZUluIiA9PT0gaSA/ICJmYWRlT3V0IiA6ICJoaWRlIl0oaSA/IGEgOiBudWxsLCBzKSwgaSB8fCBzKCksIHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nID0gITEsIG4gPSB0aGlzLl9nZXQobywgIm9uQ2xvc2UiKSwgbiAmJiBuLmFwcGx5KG8uaW5wdXQgPyBvLmlucHV0WzBdIDogbnVsbCwgW28uaW5wdXQgPyBvLmlucHV0LnZhbCgpIDogIiIsIG9dKSwgdGhpcy5fbGFzdElucHV0ID0gbnVsbCwgdGhpcy5faW5EaWFsb2cgJiYgKHRoaXMuX2RpYWxvZ0lucHV0LmNzcyh7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCBsZWZ0OiAiMCIsIHRvcDogIi0xMDBweCIgfSksIGUuYmxvY2tVSSAmJiAoZS51bmJsb2NrVUkoKSwgZSgiYm9keSIpLmFwcGVuZCh0aGlzLmRwRGl2KSkpLCB0aGlzLl9pbkRpYWxvZyA9ICExKSB9LCBfdGlkeURpYWxvZzogZnVuY3Rpb24gKGUpIHsgZS5kcERpdi5yZW1vdmVDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcykudW5iaW5kKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpIH0sIF9jaGVja0V4dGVybmFsQ2xpY2s6IGZ1bmN0aW9uICh0KSB7IGlmIChlLmRhdGVwaWNrZXIuX2N1ckluc3QpIHsgdmFyIGkgPSBlKHQudGFyZ2V0KSwgYSA9IGUuZGF0ZXBpY2tlci5fZ2V0SW5zdChpWzBdKTsgKGlbMF0uaWQgIT09IGUuZGF0ZXBpY2tlci5fbWFpbkRpdklkICYmIDAgPT09IGkucGFyZW50cygiIyIgKyBlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoICYmICFpLmhhc0NsYXNzKGUuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpICYmICFpLmNsb3Nlc3QoIi4iICsgZS5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aCAmJiBlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmICghZS5kYXRlcGlja2VyLl9pbkRpYWxvZyB8fCAhZS5ibG9ja1VJKSB8fCBpLmhhc0NsYXNzKGUuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpICYmIGUuZGF0ZXBpY2tlci5fY3VySW5zdCAhPT0gYSkgJiYgZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpIH0gfSwgX2FkanVzdERhdGU6IGZ1bmN0aW9uICh0LCBpLCBhKSB7IHZhciBzID0gZSh0KSwgbiA9IHRoaXMuX2dldEluc3Qoc1swXSk7IHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKHNbMF0pIHx8ICh0aGlzLl9hZGp1c3RJbnN0RGF0ZShuLCBpICsgKCJNIiA9PT0gYSA/IHRoaXMuX2dldChuLCAic2hvd0N1cnJlbnRBdFBvcyIpIDogMCksIGEpLCB0aGlzLl91cGRhdGVEYXRlcGlja2VyKG4pKSB9LCBfZ290b1RvZGF5OiBmdW5jdGlvbiAodCkgeyB2YXIgaSwgYSA9IGUodCksIHMgPSB0aGlzLl9nZXRJbnN0KGFbMF0pOyB0aGlzLl9nZXQocywgImdvdG9DdXJyZW50IikgJiYgcy5jdXJyZW50RGF5ID8gKHMuc2VsZWN0ZWREYXkgPSBzLmN1cnJlbnREYXksIHMuZHJhd01vbnRoID0gcy5zZWxlY3RlZE1vbnRoID0gcy5jdXJyZW50TW9udGgsIHMuZHJhd1llYXIgPSBzLnNlbGVjdGVkWWVhciA9IHMuY3VycmVudFllYXIpIDogKGkgPSBuZXcgRGF0ZSwgcy5zZWxlY3RlZERheSA9IGkuZ2V0RGF0ZSgpLCBzLmRyYXdNb250aCA9IHMuc2VsZWN0ZWRNb250aCA9IGkuZ2V0TW9udGgoKSwgcy5kcmF3WWVhciA9IHMuc2VsZWN0ZWRZZWFyID0gaS5nZXRGdWxsWWVhcigpKSwgdGhpcy5fbm90aWZ5Q2hhbmdlKHMpLCB0aGlzLl9hZGp1c3REYXRlKGEpIH0sIF9zZWxlY3RNb250aFllYXI6IGZ1bmN0aW9uICh0LCBpLCBhKSB7IHZhciBzID0gZSh0KSwgbiA9IHRoaXMuX2dldEluc3Qoc1swXSk7IG5bInNlbGVjdGVkIiArICgiTSIgPT09IGEgPyAiTW9udGgiIDogIlllYXIiKV0gPSBuWyJkcmF3IiArICgiTSIgPT09IGEgPyAiTW9udGgiIDogIlllYXIiKV0gPSBwYXJzZUludChpLm9wdGlvbnNbaS5zZWxlY3RlZEluZGV4XS52YWx1ZSwgMTApLCB0aGlzLl9ub3RpZnlDaGFuZ2UobiksIHRoaXMuX2FkanVzdERhdGUocykgfSwgX3NlbGVjdERheTogZnVuY3Rpb24gKHQsIGksIGEsIHMpIHsgdmFyIG4sIHIgPSBlKHQpOyBlKHMpLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKSB8fCB0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihyWzBdKSB8fCAobiA9IHRoaXMuX2dldEluc3QoclswXSksIG4uc2VsZWN0ZWREYXkgPSBuLmN1cnJlbnREYXkgPSBlKCJhIiwgcykuaHRtbCgpLCBuLnNlbGVjdGVkTW9udGggPSBuLmN1cnJlbnRNb250aCA9IGksIG4uc2VsZWN0ZWRZZWFyID0gbi5jdXJyZW50WWVhciA9IGEsIHRoaXMuX3NlbGVjdERhdGUodCwgdGhpcy5fZm9ybWF0RGF0ZShuLCBuLmN1cnJlbnREYXksIG4uY3VycmVudE1vbnRoLCBuLmN1cnJlbnRZZWFyKSkpIH0sIF9jbGVhckRhdGU6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gZSh0KTsgdGhpcy5fc2VsZWN0RGF0ZShpLCAiIikgfSwgX3NlbGVjdERhdGU6IGZ1bmN0aW9uICh0LCBpKSB7IHZhciBhLCBzID0gZSh0KSwgbiA9IHRoaXMuX2dldEluc3Qoc1swXSk7IGkgPSBudWxsICE9IGkgPyBpIDogdGhpcy5fZm9ybWF0RGF0ZShuKSwgbi5pbnB1dCAmJiBuLmlucHV0LnZhbChpKSwgdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKG4pLCBhID0gdGhpcy5fZ2V0KG4sICJvblNlbGVjdCIpLCBhID8gYS5hcHBseShuLmlucHV0ID8gbi5pbnB1dFswXSA6IG51bGwsIFtpLCBuXSkgOiBuLmlucHV0ICYmIG4uaW5wdXQudHJpZ2dlcigiY2hhbmdlIiksIG4uaW5saW5lID8gdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihuKSA6ICh0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLCB0aGlzLl9sYXN0SW5wdXQgPSBuLmlucHV0WzBdLCAib2JqZWN0IiAhPSB0eXBlb2Ygbi5pbnB1dFswXSAmJiBuLmlucHV0LmZvY3VzKCksIHRoaXMuX2xhc3RJbnB1dCA9IG51bGwpIH0sIF91cGRhdGVBbHRlcm5hdGU6IGZ1bmN0aW9uICh0KSB7IHZhciBpLCBhLCBzLCBuID0gdGhpcy5fZ2V0KHQsICJhbHRGaWVsZCIpOyBuICYmIChpID0gdGhpcy5fZ2V0KHQsICJhbHRGb3JtYXQiKSB8fCB0aGlzLl9nZXQodCwgImRhdGVGb3JtYXQiKSwgYSA9IHRoaXMuX2dldERhdGUodCksIHMgPSB0aGlzLmZvcm1hdERhdGUoaSwgYSwgdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKSwgZShuKS5lYWNoKGZ1bmN0aW9uICgpIHsgZSh0aGlzKS52YWwocykgfSkpIH0sIG5vV2Vla2VuZHM6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5nZXREYXkoKTsgcmV0dXJuIFt0ID4gMCAmJiA2ID4gdCwgIiJdIH0sIGlzbzg2MDFXZWVrOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgaSA9IG5ldyBEYXRlKGUuZ2V0VGltZSgpKTsgcmV0dXJuIGkuc2V0RGF0ZShpLmdldERhdGUoKSArIDQgLSAoaS5nZXREYXkoKSB8fCA3KSksIHQgPSBpLmdldFRpbWUoKSwgaS5zZXRNb250aCgwKSwgaS5zZXREYXRlKDEpLCBNYXRoLmZsb29yKE1hdGgucm91bmQoKHQgLSBpKSAvIDg2NGU1KSAvIDcpICsgMSB9LCBwYXJzZURhdGU6IGZ1bmN0aW9uIChpLCBhLCBzKSB7IGlmIChudWxsID09IGkgfHwgbnVsbCA9PSBhKSB0aHJvdyAiSW52YWxpZCBhcmd1bWVudHMiOyBpZiAoYSA9ICJvYmplY3QiID09IHR5cGVvZiBhID8gIiIgKyBhIDogYSArICIiLCAiIiA9PT0gYSkgcmV0dXJuIG51bGw7IHZhciBuLCByLCBvLCB1LCBjID0gMCwgaCA9IChzID8gcy5zaG9ydFllYXJDdXRvZmYgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5zaG9ydFllYXJDdXRvZmYsIGwgPSAic3RyaW5nIiAhPSB0eXBlb2YgaCA/IGggOiAobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkgJSAxMDAgKyBwYXJzZUludChoLCAxMCksIGQgPSAocyA/IHMuZGF5TmFtZXNTaG9ydCA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsIHAgPSAocyA/IHMuZGF5TmFtZXMgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcywgZyA9IChzID8gcy5tb250aE5hbWVzU2hvcnQgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsIG0gPSAocyA/IHMubW9udGhOYW1lcyA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsIGYgPSAtMSwgXyA9IC0xLCB2ID0gLTEsIGsgPSAtMSwgeSA9ICExLCBiID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBpLmxlbmd0aCA+IG4gKyAxICYmIGkuY2hhckF0KG4gKyAxKSA9PT0gZTsgcmV0dXJuIHQgJiYgbisrLCB0IH0sIEQgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGIoZSksIGkgPSAiQCIgPT09IGUgPyAxNCA6ICIhIiA9PT0gZSA/IDIwIDogInkiID09PSBlICYmIHQgPyA0IDogIm8iID09PSBlID8gMyA6IDIsIHMgPSBSZWdFeHAoIl5cXGR7MSwiICsgaSArICJ9IiksIG4gPSBhLnN1YnN0cmluZyhjKS5tYXRjaChzKTsgaWYgKCFuKSB0aHJvdyAiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gIiArIGM7IHJldHVybiBjICs9IG5bMF0ubGVuZ3RoLCBwYXJzZUludChuWzBdLCAxMCkgfSwgdyA9IGZ1bmN0aW9uIChpLCBzLCBuKSB7IHZhciByID0gLTEsIG8gPSBlLm1hcChiKGkpID8gbiA6IHMsIGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiBbW3QsIGVdXSB9KS5zb3J0KGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiAtKGVbMV0ubGVuZ3RoIC0gdFsxXS5sZW5ndGgpIH0pOyBpZiAoZS5lYWNoKG8sIGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gaVsxXTsgcmV0dXJuIGEuc3Vic3RyKGMsIHMubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09PSBzLnRvTG93ZXJDYXNlKCkgPyAociA9IGlbMF0sIGMgKz0gcy5sZW5ndGgsICExKSA6IHQgfSksIC0xICE9PSByKSByZXR1cm4gciArIDE7IHRocm93ICJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gIiArIGMgfSwgTSA9IGZ1bmN0aW9uICgpIHsgaWYgKGEuY2hhckF0KGMpICE9PSBpLmNoYXJBdChuKSkgdGhyb3cgIlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiAiICsgYzsgYysrIH07IGZvciAobiA9IDA7IGkubGVuZ3RoID4gbjsgbisrKSBpZiAoeSkgIiciICE9PSBpLmNoYXJBdChuKSB8fCBiKCInIikgPyBNKCkgOiB5ID0gITE7IGVsc2Ugc3dpdGNoIChpLmNoYXJBdChuKSkgeyBjYXNlICJkIjogdiA9IEQoImQiKTsgYnJlYWs7IGNhc2UgIkQiOiB3KCJEIiwgZCwgcCk7IGJyZWFrOyBjYXNlICJvIjogayA9IEQoIm8iKTsgYnJlYWs7IGNhc2UgIm0iOiBfID0gRCgibSIpOyBicmVhazsgY2FzZSAiTSI6IF8gPSB3KCJNIiwgZywgbSk7IGJyZWFrOyBjYXNlICJ5IjogZiA9IEQoInkiKTsgYnJlYWs7IGNhc2UgIkAiOiB1ID0gbmV3IERhdGUoRCgiQCIpKSwgZiA9IHUuZ2V0RnVsbFllYXIoKSwgXyA9IHUuZ2V0TW9udGgoKSArIDEsIHYgPSB1LmdldERhdGUoKTsgYnJlYWs7IGNhc2UgIiEiOiB1ID0gbmV3IERhdGUoKEQoIiEiKSAtIHRoaXMuX3RpY2tzVG8xOTcwKSAvIDFlNCksIGYgPSB1LmdldEZ1bGxZZWFyKCksIF8gPSB1LmdldE1vbnRoKCkgKyAxLCB2ID0gdS5nZXREYXRlKCk7IGJyZWFrOyBjYXNlICInIjogYigiJyIpID8gTSgpIDogeSA9ICEwOyBicmVhazsgZGVmYXVsdDogTSgpIH0gaWYgKGEubGVuZ3RoID4gYyAmJiAobyA9IGEuc3Vic3RyKGMpLCAhL15ccysvLnRlc3QobykpKSB0aHJvdyAiRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiAiICsgbzsgaWYgKC0xID09PSBmID8gZiA9IChuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSA6IDEwMCA+IGYgJiYgKGYgKz0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpIC0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpICUgMTAwICsgKGwgPj0gZiA/IDAgOiAtMTAwKSksIGsgPiAtMSkgZm9yIChfID0gMSwgdiA9IGs7IDspIHsgaWYgKHIgPSB0aGlzLl9nZXREYXlzSW5Nb250aChmLCBfIC0gMSksIHIgPj0gdikgYnJlYWs7IF8rKywgdiAtPSByIH0gaWYgKHUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShmLCBfIC0gMSwgdikpLCB1LmdldEZ1bGxZZWFyKCkgIT09IGYgfHwgdS5nZXRNb250aCgpICsgMSAhPT0gXyB8fCB1LmdldERhdGUoKSAhPT0gdikgdGhyb3cgIkludmFsaWQgZGF0ZSI7IHJldHVybiB1IH0sIEFUT006ICJ5eS1tbS1kZCIsIENPT0tJRTogIkQsIGRkIE0geXkiLCBJU09fODYwMTogInl5LW1tLWRkIiwgUkZDXzgyMjogIkQsIGQgTSB5IiwgUkZDXzg1MDogIkRELCBkZC1NLXkiLCBSRkNfMTAzNjogIkQsIGQgTSB5IiwgUkZDXzExMjM6ICJELCBkIE0geXkiLCBSRkNfMjgyMjogIkQsIGQgTSB5eSIsIFJTUzogIkQsIGQgTSB5IiwgVElDS1M6ICIhIiwgVElNRVNUQU1QOiAiQCIsIFczQzogInl5LW1tLWRkIiwgX3RpY2tzVG8xOTcwOiAxZTcgKiA2MCAqIDYwICogMjQgKiAoNzE4Njg1ICsgTWF0aC5mbG9vcig0OTIuNSkgLSBNYXRoLmZsb29yKDE5LjcpICsgTWF0aC5mbG9vcig0LjkyNSkpLCBmb3JtYXREYXRlOiBmdW5jdGlvbiAoZSwgdCwgaSkgeyBpZiAoIXQpIHJldHVybiAiIjsgdmFyIGEsIHMgPSAoaSA/IGkuZGF5TmFtZXNTaG9ydCA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsIG4gPSAoaSA/IGkuZGF5TmFtZXMgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcywgciA9IChpID8gaS5tb250aE5hbWVzU2hvcnQgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsIG8gPSAoaSA/IGkubW9udGhOYW1lcyA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsIHUgPSBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IGUubGVuZ3RoID4gYSArIDEgJiYgZS5jaGFyQXQoYSArIDEpID09PSB0OyByZXR1cm4gaSAmJiBhKyssIGkgfSwgYyA9IGZ1bmN0aW9uIChlLCB0LCBpKSB7IHZhciBhID0gIiIgKyB0OyBpZiAodShlKSkgZm9yICg7IGkgPiBhLmxlbmd0aDspIGEgPSAiMCIgKyBhOyByZXR1cm4gYSB9LCBoID0gZnVuY3Rpb24gKGUsIHQsIGksIGEpIHsgcmV0dXJuIHUoZSkgPyBhW3RdIDogaVt0XSB9LCBsID0gIiIsIGQgPSAhMTsgaWYgKHQpIGZvciAoYSA9IDA7IGUubGVuZ3RoID4gYTsgYSsrKSBpZiAoZCkgIiciICE9PSBlLmNoYXJBdChhKSB8fCB1KCInIikgPyBsICs9IGUuY2hhckF0KGEpIDogZCA9ICExOyBlbHNlIHN3aXRjaCAoZS5jaGFyQXQoYSkpIHsgY2FzZSAiZCI6IGwgKz0gYygiZCIsIHQuZ2V0RGF0ZSgpLCAyKTsgYnJlYWs7IGNhc2UgIkQiOiBsICs9IGgoIkQiLCB0LmdldERheSgpLCBzLCBuKTsgYnJlYWs7IGNhc2UgIm8iOiBsICs9IGMoIm8iLCBNYXRoLnJvdW5kKChuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksIHQuZ2V0TW9udGgoKSwgdC5nZXREYXRlKCkpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSwgMCwgMCkuZ2V0VGltZSgpKSAvIDg2NGU1KSwgMyk7IGJyZWFrOyBjYXNlICJtIjogbCArPSBjKCJtIiwgdC5nZXRNb250aCgpICsgMSwgMik7IGJyZWFrOyBjYXNlICJNIjogbCArPSBoKCJNIiwgdC5nZXRNb250aCgpLCByLCBvKTsgYnJlYWs7IGNhc2UgInkiOiBsICs9IHUoInkiKSA/IHQuZ2V0RnVsbFllYXIoKSA6ICgxMCA+IHQuZ2V0WWVhcigpICUgMTAwID8gIjAiIDogIiIpICsgdC5nZXRZZWFyKCkgJSAxMDA7IGJyZWFrOyBjYXNlICJAIjogbCArPSB0LmdldFRpbWUoKTsgYnJlYWs7IGNhc2UgIiEiOiBsICs9IDFlNCAqIHQuZ2V0VGltZSgpICsgdGhpcy5fdGlja3NUbzE5NzA7IGJyZWFrOyBjYXNlICInIjogdSgiJyIpID8gbCArPSAiJyIgOiBkID0gITA7IGJyZWFrOyBkZWZhdWx0OiBsICs9IGUuY2hhckF0KGEpIH0gcmV0dXJuIGwgfSwgX3Bvc3NpYmxlQ2hhcnM6IGZ1bmN0aW9uIChlKSB7IHZhciB0LCBpID0gIiIsIGEgPSAhMSwgcyA9IGZ1bmN0aW9uIChpKSB7IHZhciBhID0gZS5sZW5ndGggPiB0ICsgMSAmJiBlLmNoYXJBdCh0ICsgMSkgPT09IGk7IHJldHVybiBhICYmIHQrKywgYSB9OyBmb3IgKHQgPSAwOyBlLmxlbmd0aCA+IHQ7IHQrKykgaWYgKGEpICInIiAhPT0gZS5jaGFyQXQodCkgfHwgcygiJyIpID8gaSArPSBlLmNoYXJBdCh0KSA6IGEgPSAhMTsgZWxzZSBzd2l0Y2ggKGUuY2hhckF0KHQpKSB7IGNhc2UgImQiOiBjYXNlICJtIjogY2FzZSAieSI6IGNhc2UgIkAiOiBpICs9ICIwMTIzNDU2Nzg5IjsgYnJlYWs7IGNhc2UgIkQiOiBjYXNlICJNIjogcmV0dXJuIG51bGw7IGNhc2UgIiciOiBzKCInIikgPyBpICs9ICInIiA6IGEgPSAhMDsgYnJlYWs7IGRlZmF1bHQ6IGkgKz0gZS5jaGFyQXQodCkgfSByZXR1cm4gaSB9LCBfZ2V0OiBmdW5jdGlvbiAoZSwgaSkgeyByZXR1cm4gZS5zZXR0aW5nc1tpXSAhPT0gdCA/IGUuc2V0dGluZ3NbaV0gOiB0aGlzLl9kZWZhdWx0c1tpXSB9LCBfc2V0RGF0ZUZyb21GaWVsZDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKGUuaW5wdXQudmFsKCkgIT09IGUubGFzdFZhbCkgeyB2YXIgaSA9IHRoaXMuX2dldChlLCAiZGF0ZUZvcm1hdCIpLCBhID0gZS5sYXN0VmFsID0gZS5pbnB1dCA/IGUuaW5wdXQudmFsKCkgOiBudWxsLCBzID0gdGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksIG4gPSBzLCByID0gdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpOyB0cnkgeyBuID0gdGhpcy5wYXJzZURhdGUoaSwgYSwgcikgfHwgcyB9IGNhdGNoIChvKSB7IGEgPSB0ID8gIiIgOiBhIH0gZS5zZWxlY3RlZERheSA9IG4uZ2V0RGF0ZSgpLCBlLmRyYXdNb250aCA9IGUuc2VsZWN0ZWRNb250aCA9IG4uZ2V0TW9udGgoKSwgZS5kcmF3WWVhciA9IGUuc2VsZWN0ZWRZZWFyID0gbi5nZXRGdWxsWWVhcigpLCBlLmN1cnJlbnREYXkgPSBhID8gbi5nZXREYXRlKCkgOiAwLCBlLmN1cnJlbnRNb250aCA9IGEgPyBuLmdldE1vbnRoKCkgOiAwLCBlLmN1cnJlbnRZZWFyID0gYSA/IG4uZ2V0RnVsbFllYXIoKSA6IDAsIHRoaXMuX2FkanVzdEluc3REYXRlKGUpIH0gfSwgX2dldERlZmF1bHREYXRlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5fcmVzdHJpY3RNaW5NYXgoZSwgdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLCB0aGlzLl9nZXQoZSwgImRlZmF1bHREYXRlIiksIG5ldyBEYXRlKSkgfSwgX2RldGVybWluZURhdGU6IGZ1bmN0aW9uICh0LCBpLCBhKSB7IHZhciBzID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBuZXcgRGF0ZTsgcmV0dXJuIHQuc2V0RGF0ZSh0LmdldERhdGUoKSArIGUpLCB0IH0sIG4gPSBmdW5jdGlvbiAoaSkgeyB0cnkgeyByZXR1cm4gZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldCh0LCAiZGF0ZUZvcm1hdCIpLCBpLCBlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0KSkgfSBjYXRjaCAoYSkgeyB9IGZvciAodmFyIHMgPSAoaS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eYy8pID8gZS5kYXRlcGlja2VyLl9nZXREYXRlKHQpIDogbnVsbCkgfHwgbmV3IERhdGUsIG4gPSBzLmdldEZ1bGxZZWFyKCksIHIgPSBzLmdldE1vbnRoKCksIG8gPSBzLmdldERhdGUoKSwgdSA9IC8oWytcLV0/WzAtOV0rKVxzKihkfER8d3xXfG18TXx5fFkpPy9nLCBjID0gdS5leGVjKGkpIDsgYzspIHsgc3dpdGNoIChjWzJdIHx8ICJkIikgeyBjYXNlICJkIjogY2FzZSAiRCI6IG8gKz0gcGFyc2VJbnQoY1sxXSwgMTApOyBicmVhazsgY2FzZSAidyI6IGNhc2UgIlciOiBvICs9IDcgKiBwYXJzZUludChjWzFdLCAxMCk7IGJyZWFrOyBjYXNlICJtIjogY2FzZSAiTSI6IHIgKz0gcGFyc2VJbnQoY1sxXSwgMTApLCBvID0gTWF0aC5taW4obywgZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLCByKSk7IGJyZWFrOyBjYXNlICJ5IjogY2FzZSAiWSI6IG4gKz0gcGFyc2VJbnQoY1sxXSwgMTApLCBvID0gTWF0aC5taW4obywgZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLCByKSkgfSBjID0gdS5leGVjKGkpIH0gcmV0dXJuIG5ldyBEYXRlKG4sIHIsIG8pIH0sIHIgPSBudWxsID09IGkgfHwgIiIgPT09IGkgPyBhIDogInN0cmluZyIgPT0gdHlwZW9mIGkgPyBuKGkpIDogIm51bWJlciIgPT0gdHlwZW9mIGkgPyBpc05hTihpKSA/IGEgOiBzKGkpIDogbmV3IERhdGUoaS5nZXRUaW1lKCkpOyByZXR1cm4gciA9IHIgJiYgIkludmFsaWQgRGF0ZSIgPT0gIiIgKyByID8gYSA6IHIsIHIgJiYgKHIuc2V0SG91cnMoMCksIHIuc2V0TWludXRlcygwKSwgci5zZXRTZWNvbmRzKDApLCByLnNldE1pbGxpc2Vjb25kcygwKSksIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KHIpIH0sIF9kYXlsaWdodFNhdmluZ0FkanVzdDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyAoZS5zZXRIb3VycyhlLmdldEhvdXJzKCkgPiAxMiA/IGUuZ2V0SG91cnMoKSArIDIgOiAwKSwgZSkgOiBudWxsIH0sIF9zZXREYXRlOiBmdW5jdGlvbiAoZSwgdCwgaSkgeyB2YXIgYSA9ICF0LCBzID0gZS5zZWxlY3RlZE1vbnRoLCBuID0gZS5zZWxlY3RlZFllYXIsIHIgPSB0aGlzLl9yZXN0cmljdE1pbk1heChlLCB0aGlzLl9kZXRlcm1pbmVEYXRlKGUsIHQsIG5ldyBEYXRlKSk7IGUuc2VsZWN0ZWREYXkgPSBlLmN1cnJlbnREYXkgPSByLmdldERhdGUoKSwgZS5kcmF3TW9udGggPSBlLnNlbGVjdGVkTW9udGggPSBlLmN1cnJlbnRNb250aCA9IHIuZ2V0TW9udGgoKSwgZS5kcmF3WWVhciA9IGUuc2VsZWN0ZWRZZWFyID0gZS5jdXJyZW50WWVhciA9IHIuZ2V0RnVsbFllYXIoKSwgcyA9PT0gZS5zZWxlY3RlZE1vbnRoICYmIG4gPT09IGUuc2VsZWN0ZWRZZWFyIHx8IGkgfHwgdGhpcy5fbm90aWZ5Q2hhbmdlKGUpLCB0aGlzLl9hZGp1c3RJbnN0RGF0ZShlKSwgZS5pbnB1dCAmJiBlLmlucHV0LnZhbChhID8gIiIgOiB0aGlzLl9mb3JtYXREYXRlKGUpKSB9LCBfZ2V0RGF0ZTogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSAhZS5jdXJyZW50WWVhciB8fCBlLmlucHV0ICYmICIiID09PSBlLmlucHV0LnZhbCgpID8gbnVsbCA6IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsIGUuY3VycmVudE1vbnRoLCBlLmN1cnJlbnREYXkpKTsgcmV0dXJuIHQgfSwgX2F0dGFjaEhhbmRsZXJzOiBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IHRoaXMuX2dldCh0LCAic3RlcE1vbnRocyIpLCBhID0gIiMiICsgdC5pZC5yZXBsYWNlKC9cXFxcL2csICJcXCIpOyB0LmRwRGl2LmZpbmQoIltkYXRhLWhhbmRsZXJdIikubWFwKGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB7IHByZXY6IGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGEsIC1pLCAiTSIpIH0sIG5leHQ6IGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGEsICtpLCAiTSIpIH0sIGhpZGU6IGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpIH0sIHRvZGF5OiBmdW5jdGlvbiAoKSB7IGUuZGF0ZXBpY2tlci5fZ290b1RvZGF5KGEpIH0sIHNlbGVjdERheTogZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3REYXkoYSwgK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLW1vbnRoIiksICt0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS15ZWFyIiksIHRoaXMpLCAhMSB9LCBzZWxlY3RNb250aDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIoYSwgdGhpcywgIk0iKSwgITEgfSwgc2VsZWN0WWVhcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIoYSwgdGhpcywgIlkiKSwgITEgfSB9OyBlKHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtZXZlbnQiKSwgdFt0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1oYW5kbGVyIildKSB9KSB9LCBfZ2VuZXJhdGVIVE1MOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgaSwgYSwgcywgbiwgciwgbywgdSwgYywgaCwgbCwgZCwgcCwgZywgbSwgZiwgXywgdiwgaywgeSwgYiwgRCwgdywgTSwgQywgeCwgSSwgTiwgVCwgQSwgRSwgUywgWSwgRiwgUCwgTywgaiwgSywgUiwgSCA9IG5ldyBEYXRlLCBXID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoSC5nZXRGdWxsWWVhcigpLCBILmdldE1vbnRoKCksIEguZ2V0RGF0ZSgpKSksIEwgPSB0aGlzLl9nZXQoZSwgImlzUlRMIiksIFUgPSB0aGlzLl9nZXQoZSwgInNob3dCdXR0b25QYW5lbCIpLCBCID0gdGhpcy5fZ2V0KGUsICJoaWRlSWZOb1ByZXZOZXh0IiksIHogPSB0aGlzLl9nZXQoZSwgIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXQiKSwgcSA9IHRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLCBHID0gdGhpcy5fZ2V0KGUsICJzaG93Q3VycmVudEF0UG9zIiksIEogPSB0aGlzLl9nZXQoZSwgInN0ZXBNb250aHMiKSwgUSA9IDEgIT09IHFbMF0gfHwgMSAhPT0gcVsxXSwgViA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGUuY3VycmVudERheSA/IG5ldyBEYXRlKGUuY3VycmVudFllYXIsIGUuY3VycmVudE1vbnRoLCBlLmN1cnJlbnREYXkpIDogbmV3IERhdGUoOTk5OSwgOSwgOSkpLCAkID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShlLCAibWluIiksIFggPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGUsICJtYXgiKSwgWiA9IGUuZHJhd01vbnRoIC0gRywgZXQgPSBlLmRyYXdZZWFyOyBpZiAoMCA+IFogJiYgKFogKz0gMTIsIGV0LS0pLCBYKSBmb3IgKHQgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShYLmdldEZ1bGxZZWFyKCksIFguZ2V0TW9udGgoKSAtIHFbMF0gKiBxWzFdICsgMSwgWC5nZXREYXRlKCkpKSwgdCA9ICQgJiYgJCA+IHQgPyAkIDogdDsgdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsIFosIDEpKSA+IHQ7KSBaLS0sIDAgPiBaICYmIChaID0gMTEsIGV0LS0pOyBmb3IgKGUuZHJhd01vbnRoID0gWiwgZS5kcmF3WWVhciA9IGV0LCBpID0gdGhpcy5fZ2V0KGUsICJwcmV2VGV4dCIpLCBpID0geiA/IHRoaXMuZm9ybWF0RGF0ZShpLCB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCwgWiAtIEosIDEpKSwgdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKSA6IGksIGEgPSB0aGlzLl9jYW5BZGp1c3RNb250aChlLCAtMSwgZXQsIFopID8gIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSdwcmV2JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9JyIgKyBpICsgIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIiArIChMID8gImUiIDogInciKSArICInPiIgKyBpICsgIjxcL3NwYW4+PFwvYT4iIDogQiA/ICIiIDogIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9JyIgKyBpICsgIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIiArIChMID8gImUiIDogInciKSArICInPiIgKyBpICsgIjxcL3NwYW4+PFwvYT4iLCBzID0gdGhpcy5fZ2V0KGUsICJuZXh0VGV4dCIpLCBzID0geiA/IHRoaXMuZm9ybWF0RGF0ZShzLCB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCwgWiArIEosIDEpKSwgdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKSA6IHMsIG4gPSB0aGlzLl9jYW5BZGp1c3RNb250aChlLCAxLCBldCwgWikgPyAiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J25leHQnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIiArIHMgKyAiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iICsgKEwgPyAidyIgOiAiZSIpICsgIic+IiArIHMgKyAiPFwvc3Bhbj48XC9hPiIgOiBCID8gIiIgOiAiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIiArIHMgKyAiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iICsgKEwgPyAidyIgOiAiZSIpICsgIic+IiArIHMgKyAiPFwvc3Bhbj48XC9hPiIsIHIgPSB0aGlzLl9nZXQoZSwgImN1cnJlbnRUZXh0IiksIG8gPSB0aGlzLl9nZXQoZSwgImdvdG9DdXJyZW50IikgJiYgZS5jdXJyZW50RGF5ID8gViA6IFcsIHIgPSB6ID8gdGhpcy5mb3JtYXREYXRlKHIsIG8sIHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSkgOiByLCB1ID0gZS5pbmxpbmUgPyAiIiA6ICI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0naGlkZScgZGF0YS1ldmVudD0nY2xpY2snPiIgKyB0aGlzLl9nZXQoZSwgImNsb3NlVGV4dCIpICsgIjxcL2J1dHRvbj4iLCBjID0gVSA/ICI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQnPiIgKyAoTCA/IHUgOiAiIikgKyAodGhpcy5faXNJblJhbmdlKGUsIG8pID8gIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJz4iICsgciArICI8XC9idXR0b24+IiA6ICIiKSArIChMID8gIiIgOiB1KSArICI8XC9kaXY+IiA6ICIiLCBoID0gcGFyc2VJbnQodGhpcy5fZ2V0KGUsICJmaXJzdERheSIpLCAxMCksIGggPSBpc05hTihoKSA/IDAgOiBoLCBsID0gdGhpcy5fZ2V0KGUsICJzaG93V2VlayIpLCBkID0gdGhpcy5fZ2V0KGUsICJkYXlOYW1lcyIpLCBwID0gdGhpcy5fZ2V0KGUsICJkYXlOYW1lc01pbiIpLCBnID0gdGhpcy5fZ2V0KGUsICJtb250aE5hbWVzIiksIG0gPSB0aGlzLl9nZXQoZSwgIm1vbnRoTmFtZXNTaG9ydCIpLCBmID0gdGhpcy5fZ2V0KGUsICJiZWZvcmVTaG93RGF5IiksIF8gPSB0aGlzLl9nZXQoZSwgInNob3dPdGhlck1vbnRocyIpLCB2ID0gdGhpcy5fZ2V0KGUsICJzZWxlY3RPdGhlck1vbnRocyIpLCBrID0gdGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksIHkgPSAiIiwgRCA9IDA7IHFbMF0gPiBEOyBEKyspIHsgZm9yICh3ID0gIiIsIHRoaXMubWF4Um93cyA9IDQsIE0gPSAwOyBxWzFdID4gTTsgTSsrKSB7IGlmIChDID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsIFosIGUuc2VsZWN0ZWREYXkpKSwgeCA9ICIgdWktY29ybmVyLWFsbCIsIEkgPSAiIiwgUSkgeyBpZiAoSSArPSAiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1ncm91cCIsIHFbMV0gPiAxKSBzd2l0Y2ggKE0pIHsgY2FzZSAwOiBJICs9ICIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdCIsIHggPSAiIHVpLWNvcm5lci0iICsgKEwgPyAicmlnaHQiIDogImxlZnQiKTsgYnJlYWs7IGNhc2UgcVsxXSAtIDE6IEkgKz0gIiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QiLCB4ID0gIiB1aS1jb3JuZXItIiArIChMID8gImxlZnQiIDogInJpZ2h0Iik7IGJyZWFrOyBkZWZhdWx0OiBJICs9ICIgdWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUiLCB4ID0gIiIgfSBJICs9ICInPiIgfSBmb3IgKEkgKz0gIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IiArIHggKyAiJz4iICsgKC9hbGx8bGVmdC8udGVzdCh4KSAmJiAwID09PSBEID8gTCA/IG4gOiBhIDogIiIpICsgKC9hbGx8cmlnaHQvLnRlc3QoeCkgJiYgMCA9PT0gRCA/IEwgPyBhIDogbiA6ICIiKSArIHRoaXMuX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyKGUsIFosIGV0LCAkLCBYLCBEID4gMCB8fCBNID4gMCwgZywgbSkgKyAiPFwvZGl2Pjx0YWJsZSBjbGFzcz0ndWktZGF0ZXBpY2tlci1jYWxlbmRhcic+PHRoZWFkPiIgKyAiPHRyPiIsIE4gPSBsID8gIjx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+IiArIHRoaXMuX2dldChlLCAid2Vla0hlYWRlciIpICsgIjxcL3RoPiIgOiAiIiwgYiA9IDA7IDcgPiBiOyBiKyspIFQgPSAoYiArIGgpICUgNywgTiArPSAiPHRoIiArICgoYiArIGggKyA2KSAlIDcgPj0gNSA/ICIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnIiA6ICIiKSArICI+IiArICI8c3BhbiB0aXRsZT0nIiArIGRbVF0gKyAiJz4iICsgcFtUXSArICI8XC9zcGFuPjxcL3RoPiI7IGZvciAoSSArPSBOICsgIjxcL3RyPjxcL3RoZWFkPjx0Ym9keT4iLCBBID0gdGhpcy5fZ2V0RGF5c0luTW9udGgoZXQsIFopLCBldCA9PT0gZS5zZWxlY3RlZFllYXIgJiYgWiA9PT0gZS5zZWxlY3RlZE1vbnRoICYmIChlLnNlbGVjdGVkRGF5ID0gTWF0aC5taW4oZS5zZWxlY3RlZERheSwgQSkpLCBFID0gKHRoaXMuX2dldEZpcnN0RGF5T2ZNb250aChldCwgWikgLSBoICsgNykgJSA3LCBTID0gTWF0aC5jZWlsKChFICsgQSkgLyA3KSwgWSA9IFEgPyB0aGlzLm1heFJvd3MgPiBTID8gdGhpcy5tYXhSb3dzIDogUyA6IFMsIHRoaXMubWF4Um93cyA9IFksIEYgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCwgWiwgMSAtIEUpKSwgUCA9IDA7IFkgPiBQOyBQKyspIHsgZm9yIChJICs9ICI8dHI+IiwgTyA9IGwgPyAiPHRkIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz4iICsgdGhpcy5fZ2V0KGUsICJjYWxjdWxhdGVXZWVrIikoRikgKyAiPFwvdGQ+IiA6ICIiLCBiID0gMDsgNyA+IGI7IGIrKykgaiA9IGYgPyBmLmFwcGx5KGUuaW5wdXQgPyBlLmlucHV0WzBdIDogbnVsbCwgW0ZdKSA6IFshMCwgIiJdLCBLID0gRi5nZXRNb250aCgpICE9PSBaLCBSID0gSyAmJiAhdiB8fCAhalswXSB8fCAkICYmICQgPiBGIHx8IFggJiYgRiA+IFgsIE8gKz0gIjx0ZCBjbGFzcz0nIiArICgoYiArIGggKyA2KSAlIDcgPj0gNSA/ICIgdWktZGF0ZXBpY2tlci13ZWVrLWVuZCIgOiAiIikgKyAoSyA/ICIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aCIgOiAiIikgKyAoRi5nZXRUaW1lKCkgPT09IEMuZ2V0VGltZSgpICYmIFogPT09IGUuc2VsZWN0ZWRNb250aCAmJiBlLl9rZXlFdmVudCB8fCBrLmdldFRpbWUoKSA9PT0gRi5nZXRUaW1lKCkgJiYgay5nZXRUaW1lKCkgPT09IEMuZ2V0VGltZSgpID8gIiAiICsgdGhpcy5fZGF5T3ZlckNsYXNzIDogIiIpICsgKFIgPyAiICIgKyB0aGlzLl91bnNlbGVjdGFibGVDbGFzcyArICIgdWktc3RhdGUtZGlzYWJsZWQiIDogIiIpICsgKEsgJiYgIV8gPyAiIiA6ICIgIiArIGpbMV0gKyAoRi5nZXRUaW1lKCkgPT09IFYuZ2V0VGltZSgpID8gIiAiICsgdGhpcy5fY3VycmVudENsYXNzIDogIiIpICsgKEYuZ2V0VGltZSgpID09PSBXLmdldFRpbWUoKSA/ICIgdWktZGF0ZXBpY2tlci10b2RheSIgOiAiIikpICsgIiciICsgKEsgJiYgIV8gfHwgIWpbMl0gPyAiIiA6ICIgdGl0bGU9JyIgKyBqWzJdLnJlcGxhY2UoLycvZywgIiYjMzk7IikgKyAiJyIpICsgKFIgPyAiIiA6ICIgZGF0YS1oYW5kbGVyPSdzZWxlY3REYXknIGRhdGEtZXZlbnQ9J2NsaWNrJyBkYXRhLW1vbnRoPSciICsgRi5nZXRNb250aCgpICsgIicgZGF0YS15ZWFyPSciICsgRi5nZXRGdWxsWWVhcigpICsgIiciKSArICI+IiArIChLICYmICFfID8gIiYjeGEwOyIgOiBSID8gIjxzcGFuIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0Jz4iICsgRi5nZXREYXRlKCkgKyAiPFwvc3Bhbj4iIDogIjxhIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0IiArIChGLmdldFRpbWUoKSA9PT0gVy5nZXRUaW1lKCkgPyAiIHVpLXN0YXRlLWhpZ2hsaWdodCIgOiAiIikgKyAoRi5nZXRUaW1lKCkgPT09IFYuZ2V0VGltZSgpID8gIiB1aS1zdGF0ZS1hY3RpdmUiIDogIiIpICsgKEsgPyAiIHVpLXByaW9yaXR5LXNlY29uZGFyeSIgOiAiIikgKyAiJyBocmVmPScjJz4iICsgRi5nZXREYXRlKCkgKyAiPFwvYT4iKSArICI8XC90ZD4iLCBGLnNldERhdGUoRi5nZXREYXRlKCkgKyAxKSwgRiA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KEYpOyBJICs9IE8gKyAiPFwvdHI+IiB9IForKywgWiA+IDExICYmIChaID0gMCwgZXQrKyksIEkgKz0gIjxcL3Rib2R5PjxcL3RhYmxlPiIgKyAoUSA/ICI8XC9kaXY+IiArIChxWzBdID4gMCAmJiBNID09PSBxWzFdIC0gMSA/ICI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXJvdy1icmVhayc+PFwvZGl2PiIgOiAiIikgOiAiIiksIHcgKz0gSSB9IHkgKz0gdyB9IHJldHVybiB5ICs9IGMsIGUuX2tleUV2ZW50ID0gITEsIHkgfSwgX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOiBmdW5jdGlvbiAoZSwgdCwgaSwgYSwgcywgbiwgciwgbykgew0KICAgICAgICAgICAgdmFyIHUsIGMsIGgsIGwsIGQsIHAsIGcsIG0sIGYgPSB0aGlzLl9nZXQoZSwgImNoYW5nZU1vbnRoIiksIF8gPSB0aGlzLl9nZXQoZSwgImNoYW5nZVllYXIiKSwgdiA9IHRoaXMuX2dldChlLCAic2hvd01vbnRoQWZ0ZXJZZWFyIiksIGsgPSAiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci10aXRsZSc+IiwgeSA9ICIiOyBpZiAobiB8fCAhZikgeSArPSAiPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPiIgKyByW3RdICsgIjxcL3NwYW4+IjsgZWxzZSB7IGZvciAodSA9IGEgJiYgYS5nZXRGdWxsWWVhcigpID09PSBpLCBjID0gcyAmJiBzLmdldEZ1bGxZZWFyKCkgPT09IGksIHkgKz0gIjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnIGRhdGEtaGFuZGxlcj0nc2VsZWN0TW9udGgnIGRhdGEtZXZlbnQ9J2NoYW5nZSc+IiwgaCA9IDA7IDEyID4gaDsgaCsrKSAoIXUgfHwgaCA+PSBhLmdldE1vbnRoKCkpICYmICghYyB8fCBzLmdldE1vbnRoKCkgPj0gaCkgJiYgKHkgKz0gIjxvcHRpb24gdmFsdWU9JyIgKyBoICsgIiciICsgKGggPT09IHQgPyAiIHNlbGVjdGVkPSdzZWxlY3RlZCciIDogIiIpICsgIj4iICsgb1toXSArICI8XC9vcHRpb24+Iik7IHkgKz0gIjxcL3NlbGVjdD4iIH0gaWYgKHYgfHwgKGsgKz0geSArICghbiAmJiBmICYmIF8gPyAiIiA6ICImI3hhMDsiKSksICFlLnllYXJzaHRtbCkgaWYgKGUueWVhcnNodG1sID0gIiIsIG4gfHwgIV8pIGsgKz0gIjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInPiIgKyBpICsgIjxcL3NwYW4+IjsgZWxzZSB7DQogICAgICAgICAgICAgICAgZm9yIChsID0gdGhpcy5fZ2V0KGUsICJ5ZWFyUmFuZ2UiKS5zcGxpdCgiOiIpLCBkID0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLCBwID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICB2YXIgdCA9IGUubWF0Y2goL2NbK1wtXS4qLykgPyBpICsgcGFyc2VJbnQoZS5zdWJzdHJpbmcoMSksIDEwKSA6IGUubWF0Y2goL1srXC1dLiovKSA/IGQgKyBwYXJzZUludChlLCAxMCkgOiBwYXJzZUludChlLCAxMCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHQpID8gZCA6IHQNCiAgICAgICAgICAgICAgICB9LCBnID0gcChsWzBdKSwgbSA9IE1hdGgubWF4KGcsIHAobFsxXSB8fCAiIikpLCBnID0gYSA/IE1hdGgubWF4KGcsIGEuZ2V0RnVsbFllYXIoKSkgOiBnLCBtID0gcyA/IE1hdGgubWluKG0sIHMuZ2V0RnVsbFllYXIoKSkgOiBtLCBlLnllYXJzaHRtbCArPSAiPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJyBkYXRhLWhhbmRsZXI9J3NlbGVjdFllYXInIGRhdGEtZXZlbnQ9J2NoYW5nZSc+IjsgbSA+PSBnOyBnKyspIGUueWVhcnNodG1sICs9ICI8b3B0aW9uIHZhbHVlPSciICsgZyArICInIiArIChnID09PSBpID8gIiBzZWxlY3RlZD0nc2VsZWN0ZWQnIiA6ICIiKSArICI+IiArIGcgKyAiPFwvb3B0aW9uPiI7IGUueWVhcnNodG1sICs9ICI8XC9zZWxlY3Q+IiwgayArPSBlLnllYXJzaHRtbCwgZS55ZWFyc2h0bWwgPSBudWxsDQogICAgICAgICAgICB9IHJldHVybiBrICs9IHRoaXMuX2dldChlLCAieWVhclN1ZmZpeCIpLCB2ICYmIChrICs9ICghbiAmJiBmICYmIF8gPyAiIiA6ICImI3hhMDsiKSArIHkpLCBrICs9ICI8XC9kaXY+Ig0KICAgICAgICB9LCBfYWRqdXN0SW5zdERhdGU6IGZ1bmN0aW9uIChlLCB0LCBpKSB7IHZhciBhID0gZS5kcmF3WWVhciArICgiWSIgPT09IGkgPyB0IDogMCksIHMgPSBlLmRyYXdNb250aCArICgiTSIgPT09IGkgPyB0IDogMCksIG4gPSBNYXRoLm1pbihlLnNlbGVjdGVkRGF5LCB0aGlzLl9nZXREYXlzSW5Nb250aChhLCBzKSkgKyAoIkQiID09PSBpID8gdCA6IDApLCByID0gdGhpcy5fcmVzdHJpY3RNaW5NYXgoZSwgdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoYSwgcywgbikpKTsgZS5zZWxlY3RlZERheSA9IHIuZ2V0RGF0ZSgpLCBlLmRyYXdNb250aCA9IGUuc2VsZWN0ZWRNb250aCA9IHIuZ2V0TW9udGgoKSwgZS5kcmF3WWVhciA9IGUuc2VsZWN0ZWRZZWFyID0gci5nZXRGdWxsWWVhcigpLCAoIk0iID09PSBpIHx8ICJZIiA9PT0gaSkgJiYgdGhpcy5fbm90aWZ5Q2hhbmdlKGUpIH0sIF9yZXN0cmljdE1pbk1heDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIGkgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGUsICJtaW4iKSwgYSA9IHRoaXMuX2dldE1pbk1heERhdGUoZSwgIm1heCIpLCBzID0gaSAmJiBpID4gdCA/IGkgOiB0OyByZXR1cm4gYSAmJiBzID4gYSA/IGEgOiBzIH0sIF9ub3RpZnlDaGFuZ2U6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdGhpcy5fZ2V0KGUsICJvbkNoYW5nZU1vbnRoWWVhciIpOyB0ICYmIHQuYXBwbHkoZS5pbnB1dCA/IGUuaW5wdXRbMF0gOiBudWxsLCBbZS5zZWxlY3RlZFllYXIsIGUuc2VsZWN0ZWRNb250aCArIDEsIGVdKSB9LCBfZ2V0TnVtYmVyT2ZNb250aHM6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdGhpcy5fZ2V0KGUsICJudW1iZXJPZk1vbnRocyIpOyByZXR1cm4gbnVsbCA9PSB0ID8gWzEsIDFdIDogIm51bWJlciIgPT0gdHlwZW9mIHQgPyBbMSwgdF0gOiB0IH0sIF9nZXRNaW5NYXhEYXRlOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLCB0aGlzLl9nZXQoZSwgdCArICJEYXRlIiksIG51bGwpIH0sIF9nZXREYXlzSW5Nb250aDogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIDMyIC0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZSwgdCwgMzIpKS5nZXREYXRlKCkgfSwgX2dldEZpcnN0RGF5T2ZNb250aDogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIG5ldyBEYXRlKGUsIHQsIDEpLmdldERheSgpIH0sIF9jYW5BZGp1c3RNb250aDogZnVuY3Rpb24gKGUsIHQsIGksIGEpIHsgdmFyIHMgPSB0aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSwgbiA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGksIGEgKyAoMCA+IHQgPyB0IDogc1swXSAqIHNbMV0pLCAxKSk7IHJldHVybiAwID4gdCAmJiBuLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgobi5nZXRGdWxsWWVhcigpLCBuLmdldE1vbnRoKCkpKSwgdGhpcy5faXNJblJhbmdlKGUsIG4pIH0sIF9pc0luUmFuZ2U6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBpLCBhLCBzID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShlLCAibWluIiksIG4gPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGUsICJtYXgiKSwgciA9IG51bGwsIG8gPSBudWxsLCB1ID0gdGhpcy5fZ2V0KGUsICJ5ZWFyUmFuZ2UiKTsgcmV0dXJuIHUgJiYgKGkgPSB1LnNwbGl0KCI6IiksIGEgPSAobmV3IERhdGUpLmdldEZ1bGxZZWFyKCksIHIgPSBwYXJzZUludChpWzBdLCAxMCksIG8gPSBwYXJzZUludChpWzFdLCAxMCksIGlbMF0ubWF0Y2goL1srXC1dLiovKSAmJiAociArPSBhKSwgaVsxXS5tYXRjaCgvWytcLV0uKi8pICYmIChvICs9IGEpKSwgKCFzIHx8IHQuZ2V0VGltZSgpID49IHMuZ2V0VGltZSgpKSAmJiAoIW4gfHwgdC5nZXRUaW1lKCkgPD0gbi5nZXRUaW1lKCkpICYmICghciB8fCB0LmdldEZ1bGxZZWFyKCkgPj0gcikgJiYgKCFvIHx8IG8gPj0gdC5nZXRGdWxsWWVhcigpKSB9LCBfZ2V0Rm9ybWF0Q29uZmlnOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXMuX2dldChlLCAic2hvcnRZZWFyQ3V0b2ZmIik7IHJldHVybiB0ID0gInN0cmluZyIgIT0gdHlwZW9mIHQgPyB0IDogKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpICUgMTAwICsgcGFyc2VJbnQodCwgMTApLCB7IHNob3J0WWVhckN1dG9mZjogdCwgZGF5TmFtZXNTaG9ydDogdGhpcy5fZ2V0KGUsICJkYXlOYW1lc1Nob3J0IiksIGRheU5hbWVzOiB0aGlzLl9nZXQoZSwgImRheU5hbWVzIiksIG1vbnRoTmFtZXNTaG9ydDogdGhpcy5fZ2V0KGUsICJtb250aE5hbWVzU2hvcnQiKSwgbW9udGhOYW1lczogdGhpcy5fZ2V0KGUsICJtb250aE5hbWVzIikgfSB9LCBfZm9ybWF0RGF0ZTogZnVuY3Rpb24gKGUsIHQsIGksIGEpIHsgdCB8fCAoZS5jdXJyZW50RGF5ID0gZS5zZWxlY3RlZERheSwgZS5jdXJyZW50TW9udGggPSBlLnNlbGVjdGVkTW9udGgsIGUuY3VycmVudFllYXIgPSBlLnNlbGVjdGVkWWVhcik7IHZhciBzID0gdCA/ICJvYmplY3QiID09IHR5cGVvZiB0ID8gdCA6IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGEsIGksIHQpKSA6IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsIGUuY3VycmVudE1vbnRoLCBlLmN1cnJlbnREYXkpKTsgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQoZSwgImRhdGVGb3JtYXQiKSwgcywgdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKSB9DQogICAgfSksIGUuZm4uZGF0ZXBpY2tlciA9IGZ1bmN0aW9uICh0KSB7IGlmICghdGhpcy5sZW5ndGgpIHJldHVybiB0aGlzOyBlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQgfHwgKGUoZG9jdW1lbnQpLm1vdXNlZG93bihlLmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljayksIGUuZGF0ZXBpY2tlci5pbml0aWFsaXplZCA9ICEwKSwgMCA9PT0gZSgiIyIgKyBlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoICYmIGUoImJvZHkiKS5hcHBlbmQoZS5kYXRlcGlja2VyLmRwRGl2KTsgdmFyIGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyByZXR1cm4gInN0cmluZyIgIT0gdHlwZW9mIHQgfHwgImlzRGlzYWJsZWQiICE9PSB0ICYmICJnZXREYXRlIiAhPT0gdCAmJiAid2lkZ2V0IiAhPT0gdCA/ICJvcHRpb24iID09PSB0ICYmIDIgPT09IGFyZ3VtZW50cy5sZW5ndGggJiYgInN0cmluZyIgPT0gdHlwZW9mIGFyZ3VtZW50c1sxXSA/IGUuZGF0ZXBpY2tlclsiXyIgKyB0ICsgIkRhdGVwaWNrZXIiXS5hcHBseShlLmRhdGVwaWNrZXIsIFt0aGlzWzBdXS5jb25jYXQoaSkpIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgInN0cmluZyIgPT0gdHlwZW9mIHQgPyBlLmRhdGVwaWNrZXJbIl8iICsgdCArICJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLCBbdGhpc10uY29uY2F0KGkpKSA6IGUuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLCB0KSB9KSA6IGUuZGF0ZXBpY2tlclsiXyIgKyB0ICsgIkRhdGVwaWNrZXIiXS5hcHBseShlLmRhdGVwaWNrZXIsIFt0aGlzWzBdXS5jb25jYXQoaSkpIH0sIGUuZGF0ZXBpY2tlciA9IG5ldyBpLCBlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQgPSAhMSwgZS5kYXRlcGlja2VyLnV1aWQgPSAobmV3IERhdGUpLmdldFRpbWUoKSwgZS5kYXRlcGlja2VyLnZlcnNpb24gPSAiMS4xMC40Ig0KfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uIChlKSB7IHZhciB0ID0geyBidXR0b25zOiAhMCwgaGVpZ2h0OiAhMCwgbWF4SGVpZ2h0OiAhMCwgbWF4V2lkdGg6ICEwLCBtaW5IZWlnaHQ6ICEwLCBtaW5XaWR0aDogITAsIHdpZHRoOiAhMCB9LCBpID0geyBtYXhIZWlnaHQ6ICEwLCBtYXhXaWR0aDogITAsIG1pbkhlaWdodDogITAsIG1pbldpZHRoOiAhMCB9OyBlLndpZGdldCgidWkuZGlhbG9nIiwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgb3B0aW9uczogeyBhcHBlbmRUbzogImJvZHkiLCBhdXRvT3BlbjogITAsIGJ1dHRvbnM6IFtdLCBjbG9zZU9uRXNjYXBlOiAhMCwgY2xvc2VUZXh0OiAiY2xvc2UiLCBkaWFsb2dDbGFzczogIiIsIGRyYWdnYWJsZTogITAsIGhpZGU6IG51bGwsIGhlaWdodDogImF1dG8iLCBtYXhIZWlnaHQ6IG51bGwsIG1heFdpZHRoOiBudWxsLCBtaW5IZWlnaHQ6IDE1MCwgbWluV2lkdGg6IDE1MCwgbW9kYWw6ICExLCBwb3NpdGlvbjogeyBteTogImNlbnRlciIsIGF0OiAiY2VudGVyIiwgb2Y6IHdpbmRvdywgY29sbGlzaW9uOiAiZml0IiwgdXNpbmc6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gZSh0aGlzKS5jc3ModCkub2Zmc2V0KCkudG9wOyAwID4gaSAmJiBlKHRoaXMpLmNzcygidG9wIiwgdC50b3AgLSBpKSB9IH0sIHJlc2l6YWJsZTogITAsIHNob3c6IG51bGwsIHRpdGxlOiBudWxsLCB3aWR0aDogMzAwLCBiZWZvcmVDbG9zZTogbnVsbCwgY2xvc2U6IG51bGwsIGRyYWc6IG51bGwsIGRyYWdTdGFydDogbnVsbCwgZHJhZ1N0b3A6IG51bGwsIGZvY3VzOiBudWxsLCBvcGVuOiBudWxsLCByZXNpemU6IG51bGwsIHJlc2l6ZVN0YXJ0OiBudWxsLCByZXNpemVTdG9wOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5vcmlnaW5hbENzcyA9IHsgZGlzcGxheTogdGhpcy5lbGVtZW50WzBdLnN0eWxlLmRpc3BsYXksIHdpZHRoOiB0aGlzLmVsZW1lbnRbMF0uc3R5bGUud2lkdGgsIG1pbkhlaWdodDogdGhpcy5lbGVtZW50WzBdLnN0eWxlLm1pbkhlaWdodCwgbWF4SGVpZ2h0OiB0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWF4SGVpZ2h0LCBoZWlnaHQ6IHRoaXMuZWxlbWVudFswXS5zdHlsZS5oZWlnaHQgfSwgdGhpcy5vcmlnaW5hbFBvc2l0aW9uID0geyBwYXJlbnQ6IHRoaXMuZWxlbWVudC5wYXJlbnQoKSwgaW5kZXg6IHRoaXMuZWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMuZWxlbWVudCkgfSwgdGhpcy5vcmlnaW5hbFRpdGxlID0gdGhpcy5lbGVtZW50LmF0dHIoInRpdGxlIiksIHRoaXMub3B0aW9ucy50aXRsZSA9IHRoaXMub3B0aW9ucy50aXRsZSB8fCB0aGlzLm9yaWdpbmFsVGl0bGUsIHRoaXMuX2NyZWF0ZVdyYXBwZXIoKSwgdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKCJ0aXRsZSIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLCB0aGlzLl9jcmVhdGVUaXRsZWJhcigpLCB0aGlzLl9jcmVhdGVCdXR0b25QYW5lKCksIHRoaXMub3B0aW9ucy5kcmFnZ2FibGUgJiYgZS5mbi5kcmFnZ2FibGUgJiYgdGhpcy5fbWFrZURyYWdnYWJsZSgpLCB0aGlzLm9wdGlvbnMucmVzaXphYmxlICYmIGUuZm4ucmVzaXphYmxlICYmIHRoaXMuX21ha2VSZXNpemFibGUoKSwgdGhpcy5faXNPcGVuID0gITEgfSwgX2luaXQ6IGZ1bmN0aW9uICgpIHsgdGhpcy5vcHRpb25zLmF1dG9PcGVuICYmIHRoaXMub3BlbigpIH0sIF9hcHBlbmRUbzogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMub3B0aW9ucy5hcHBlbmRUbzsgcmV0dXJuIHQgJiYgKHQuanF1ZXJ5IHx8IHQubm9kZVR5cGUpID8gZSh0KSA6IHRoaXMuZG9jdW1lbnQuZmluZCh0IHx8ICJib2R5IikuZXEoMCkgfSwgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIHQgPSB0aGlzLm9yaWdpbmFsUG9zaXRpb247IHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCksIHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmNzcyh0aGlzLm9yaWdpbmFsQ3NzKS5kZXRhY2goKSwgdGhpcy51aURpYWxvZy5zdG9wKCEwLCAhMCkucmVtb3ZlKCksIHRoaXMub3JpZ2luYWxUaXRsZSAmJiB0aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiLCB0aGlzLm9yaWdpbmFsVGl0bGUpLCBlID0gdC5wYXJlbnQuY2hpbGRyZW4oKS5lcSh0LmluZGV4KSwgZS5sZW5ndGggJiYgZVswXSAhPT0gdGhpcy5lbGVtZW50WzBdID8gZS5iZWZvcmUodGhpcy5lbGVtZW50KSA6IHQucGFyZW50LmFwcGVuZCh0aGlzLmVsZW1lbnQpIH0sIHdpZGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy51aURpYWxvZyB9LCBkaXNhYmxlOiBlLm5vb3AsIGVuYWJsZTogZS5ub29wLCBjbG9zZTogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEgPSB0aGlzOyBpZiAodGhpcy5faXNPcGVuICYmIHRoaXMuX3RyaWdnZXIoImJlZm9yZUNsb3NlIiwgdCkgIT09ICExKSB7IGlmICh0aGlzLl9pc09wZW4gPSAhMSwgdGhpcy5fZGVzdHJveU92ZXJsYXkoKSwgIXRoaXMub3BlbmVyLmZpbHRlcigiOmZvY3VzYWJsZSIpLmZvY3VzKCkubGVuZ3RoKSB0cnkgeyBpID0gdGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50LCBpICYmICJib2R5IiAhPT0gaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICYmIGUoaSkuYmx1cigpIH0gY2F0Y2ggKHMpIHsgfSB0aGlzLl9oaWRlKHRoaXMudWlEaWFsb2csIHRoaXMub3B0aW9ucy5oaWRlLCBmdW5jdGlvbiAoKSB7IGEuX3RyaWdnZXIoImNsb3NlIiwgdCkgfSkgfSB9LCBpc09wZW46IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2lzT3BlbiB9LCBtb3ZlVG9Ub3A6IGZ1bmN0aW9uICgpIHsgdGhpcy5fbW92ZVRvVG9wKCkgfSwgX21vdmVUb1RvcDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIGkgPSAhIXRoaXMudWlEaWFsb2cubmV4dEFsbCgiOnZpc2libGUiKS5pbnNlcnRCZWZvcmUodGhpcy51aURpYWxvZykubGVuZ3RoOyByZXR1cm4gaSAmJiAhdCAmJiB0aGlzLl90cmlnZ2VyKCJmb2N1cyIsIGUpLCBpIH0sIG9wZW46IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzOyByZXR1cm4gdGhpcy5faXNPcGVuID8gKHRoaXMuX21vdmVUb1RvcCgpICYmIHRoaXMuX2ZvY3VzVGFiYmFibGUoKSwgdW5kZWZpbmVkKSA6ICh0aGlzLl9pc09wZW4gPSAhMCwgdGhpcy5vcGVuZXIgPSBlKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCksIHRoaXMuX3NpemUoKSwgdGhpcy5fcG9zaXRpb24oKSwgdGhpcy5fY3JlYXRlT3ZlcmxheSgpLCB0aGlzLl9tb3ZlVG9Ub3AobnVsbCwgITApLCB0aGlzLl9zaG93KHRoaXMudWlEaWFsb2csIHRoaXMub3B0aW9ucy5zaG93LCBmdW5jdGlvbiAoKSB7IHQuX2ZvY3VzVGFiYmFibGUoKSwgdC5fdHJpZ2dlcigiZm9jdXMiKSB9KSwgdGhpcy5fdHJpZ2dlcigib3BlbiIpLCB1bmRlZmluZWQpIH0sIF9mb2N1c1RhYmJhYmxlOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5lbGVtZW50LmZpbmQoIlthdXRvZm9jdXNdIik7IGUubGVuZ3RoIHx8IChlID0gdGhpcy5lbGVtZW50LmZpbmQoIjp0YWJiYWJsZSIpKSwgZS5sZW5ndGggfHwgKGUgPSB0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5maW5kKCI6dGFiYmFibGUiKSksIGUubGVuZ3RoIHx8IChlID0gdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuZmlsdGVyKCI6dGFiYmFibGUiKSksIGUubGVuZ3RoIHx8IChlID0gdGhpcy51aURpYWxvZyksIGUuZXEoMCkuZm9jdXMoKSB9LCBfa2VlcEZvY3VzOiBmdW5jdGlvbiAodCkgeyBmdW5jdGlvbiBpKCkgeyB2YXIgdCA9IHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCwgaSA9IHRoaXMudWlEaWFsb2dbMF0gPT09IHQgfHwgZS5jb250YWlucyh0aGlzLnVpRGlhbG9nWzBdLCB0KTsgaSB8fCB0aGlzLl9mb2N1c1RhYmJhYmxlKCkgfSB0LnByZXZlbnREZWZhdWx0KCksIGkuY2FsbCh0aGlzKSwgdGhpcy5fZGVsYXkoaSkgfSwgX2NyZWF0ZVdyYXBwZXI6IGZ1bmN0aW9uICgpIHsgdGhpcy51aURpYWxvZyA9IGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS1mcm9udCAiICsgdGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5oaWRlKCkuYXR0cih7IHRhYkluZGV4OiAtMSwgcm9sZTogImRpYWxvZyIgfSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksIHRoaXMuX29uKHRoaXMudWlEaWFsb2csIHsga2V5ZG93bjogZnVuY3Rpb24gKHQpIHsgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjYXBlICYmICF0LmlzRGVmYXVsdFByZXZlbnRlZCgpICYmIHQua2V5Q29kZSAmJiB0LmtleUNvZGUgPT09IGUudWkua2V5Q29kZS5FU0NBUEUpIHJldHVybiB0LnByZXZlbnREZWZhdWx0KCksIHRoaXMuY2xvc2UodCksIHVuZGVmaW5lZDsgaWYgKHQua2V5Q29kZSA9PT0gZS51aS5rZXlDb2RlLlRBQikgeyB2YXIgaSA9IHRoaXMudWlEaWFsb2cuZmluZCgiOnRhYmJhYmxlIiksIGEgPSBpLmZpbHRlcigiOmZpcnN0IiksIHMgPSBpLmZpbHRlcigiOmxhc3QiKTsgdC50YXJnZXQgIT09IHNbMF0gJiYgdC50YXJnZXQgIT09IHRoaXMudWlEaWFsb2dbMF0gfHwgdC5zaGlmdEtleSA/IHQudGFyZ2V0ICE9PSBhWzBdICYmIHQudGFyZ2V0ICE9PSB0aGlzLnVpRGlhbG9nWzBdIHx8ICF0LnNoaWZ0S2V5IHx8IChzLmZvY3VzKDEpLCB0LnByZXZlbnREZWZhdWx0KCkpIDogKGEuZm9jdXMoMSksIHQucHJldmVudERlZmF1bHQoKSkgfSB9LCBtb3VzZWRvd246IGZ1bmN0aW9uIChlKSB7IHRoaXMuX21vdmVUb1RvcChlKSAmJiB0aGlzLl9mb2N1c1RhYmJhYmxlKCkgfSB9KSwgdGhpcy5lbGVtZW50LmZpbmQoIlthcmlhLWRlc2NyaWJlZGJ5XSIpLmxlbmd0aCB8fCB0aGlzLnVpRGlhbG9nLmF0dHIoeyAiYXJpYS1kZXNjcmliZWRieSI6IHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoImlkIikgfSkgfSwgX2NyZWF0ZVRpdGxlYmFyOiBmdW5jdGlvbiAoKSB7IHZhciB0OyB0aGlzLnVpRGlhbG9nVGl0bGViYXIgPSBlKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1jbGVhcmZpeCIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nKSwgdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyLCB7IG1vdXNlZG93bjogZnVuY3Rpb24gKHQpIHsgZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIpIHx8IHRoaXMudWlEaWFsb2cuZm9jdXMoKSB9IH0pLCB0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZSA9IGUoIjxidXR0b24gdHlwZT0nYnV0dG9uJz48XC9idXR0b24+IikuYnV0dG9uKHsgbGFiZWw6IHRoaXMub3B0aW9ucy5jbG9zZVRleHQsIGljb25zOiB7IHByaW1hcnk6ICJ1aS1pY29uLWNsb3NldGhpY2siIH0sIHRleHQ6ICExIH0pLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLCB0aGlzLl9vbih0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZSwgeyBjbGljazogZnVuY3Rpb24gKGUpIHsgZS5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLmNsb3NlKGUpIH0gfSksIHQgPSBlKCI8c3Bhbj4iKS51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGUiKS5wcmVwZW5kVG8odGhpcy51aURpYWxvZ1RpdGxlYmFyKSwgdGhpcy5fdGl0bGUodCksIHRoaXMudWlEaWFsb2cuYXR0cih7ICJhcmlhLWxhYmVsbGVkYnkiOiB0LmF0dHIoImlkIikgfSkgfSwgX3RpdGxlOiBmdW5jdGlvbiAoZSkgeyB0aGlzLm9wdGlvbnMudGl0bGUgfHwgZS5odG1sKCImIzE2MDsiKSwgZS50ZXh0KHRoaXMub3B0aW9ucy50aXRsZSkgfSwgX2NyZWF0ZUJ1dHRvblBhbmU6IGZ1bmN0aW9uICgpIHsgdGhpcy51aURpYWxvZ0J1dHRvblBhbmUgPSBlKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXgiKSwgdGhpcy51aUJ1dHRvblNldCA9IGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zZXQiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZSksIHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKSB9LCBfY3JlYXRlQnV0dG9uczogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMsIGkgPSB0aGlzLm9wdGlvbnMuYnV0dG9uczsgcmV0dXJuIHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLCB0aGlzLnVpQnV0dG9uU2V0LmVtcHR5KCksIGUuaXNFbXB0eU9iamVjdChpKSB8fCBlLmlzQXJyYXkoaSkgJiYgIWkubGVuZ3RoID8gKHRoaXMudWlEaWFsb2cucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIiksIHVuZGVmaW5lZCkgOiAoZS5lYWNoKGksIGZ1bmN0aW9uIChpLCBhKSB7IHZhciBzLCBuOyBhID0gZS5pc0Z1bmN0aW9uKGEpID8geyBjbGljazogYSwgdGV4dDogaSB9IDogYSwgYSA9IGUuZXh0ZW5kKHsgdHlwZTogImJ1dHRvbiIgfSwgYSksIHMgPSBhLmNsaWNrLCBhLmNsaWNrID0gZnVuY3Rpb24gKCkgeyBzLmFwcGx5KHQuZWxlbWVudFswXSwgYXJndW1lbnRzKSB9LCBuID0geyBpY29uczogYS5pY29ucywgdGV4dDogYS5zaG93VGV4dCB9LCBkZWxldGUgYS5pY29ucywgZGVsZXRlIGEuc2hvd1RleHQsIGUoIjxidXR0b24+PFwvYnV0dG9uPiIsIGEpLmJ1dHRvbihuKS5hcHBlbmRUbyh0LnVpQnV0dG9uU2V0KSB9KSwgdGhpcy51aURpYWxvZy5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnMiKSwgdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuYXBwZW5kVG8odGhpcy51aURpYWxvZyksIHVuZGVmaW5lZCkgfSwgX21ha2VEcmFnZ2FibGU6IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gdChlKSB7IHJldHVybiB7IHBvc2l0aW9uOiBlLnBvc2l0aW9uLCBvZmZzZXQ6IGUub2Zmc2V0IH0gfSB2YXIgaSA9IHRoaXMsIGEgPSB0aGlzLm9wdGlvbnM7IHRoaXMudWlEaWFsb2cuZHJhZ2dhYmxlKHsgY2FuY2VsOiAiLnVpLWRpYWxvZy1jb250ZW50LCAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIiwgaGFuZGxlOiAiLnVpLWRpYWxvZy10aXRsZWJhciIsIGNvbnRhaW5tZW50OiAiZG9jdW1lbnQiLCBzdGFydDogZnVuY3Rpb24gKGEsIHMpIHsgZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksIGkuX2Jsb2NrRnJhbWVzKCksIGkuX3RyaWdnZXIoImRyYWdTdGFydCIsIGEsIHQocykpIH0sIGRyYWc6IGZ1bmN0aW9uIChlLCBhKSB7IGkuX3RyaWdnZXIoImRyYWciLCBlLCB0KGEpKSB9LCBzdG9wOiBmdW5jdGlvbiAocywgbikgeyBhLnBvc2l0aW9uID0gW24ucG9zaXRpb24ubGVmdCAtIGkuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLCBuLnBvc2l0aW9uLnRvcCAtIGkuZG9jdW1lbnQuc2Nyb2xsVG9wKCldLCBlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctZHJhZ2dpbmciKSwgaS5fdW5ibG9ja0ZyYW1lcygpLCBpLl90cmlnZ2VyKCJkcmFnU3RvcCIsIHMsIHQobikpIH0gfSkgfSwgX21ha2VSZXNpemFibGU6IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gdChlKSB7IHJldHVybiB7IG9yaWdpbmFsUG9zaXRpb246IGUub3JpZ2luYWxQb3NpdGlvbiwgb3JpZ2luYWxTaXplOiBlLm9yaWdpbmFsU2l6ZSwgcG9zaXRpb246IGUucG9zaXRpb24sIHNpemU6IGUuc2l6ZSB9IH0gdmFyIGkgPSB0aGlzLCBhID0gdGhpcy5vcHRpb25zLCBzID0gYS5yZXNpemFibGUsIG4gPSB0aGlzLnVpRGlhbG9nLmNzcygicG9zaXRpb24iKSwgciA9ICJzdHJpbmciID09IHR5cGVvZiBzID8gcyA6ICJuLGUscyx3LHNlLHN3LG5lLG53IjsgdGhpcy51aURpYWxvZy5yZXNpemFibGUoeyBjYW5jZWw6ICIudWktZGlhbG9nLWNvbnRlbnQiLCBjb250YWlubWVudDogImRvY3VtZW50IiwgYWxzb1Jlc2l6ZTogdGhpcy5lbGVtZW50LCBtYXhXaWR0aDogYS5tYXhXaWR0aCwgbWF4SGVpZ2h0OiBhLm1heEhlaWdodCwgbWluV2lkdGg6IGEubWluV2lkdGgsIG1pbkhlaWdodDogdGhpcy5fbWluSGVpZ2h0KCksIGhhbmRsZXM6IHIsIHN0YXJ0OiBmdW5jdGlvbiAoYSwgcykgeyBlKHRoaXMpLmFkZENsYXNzKCJ1aS1kaWFsb2ctcmVzaXppbmciKSwgaS5fYmxvY2tGcmFtZXMoKSwgaS5fdHJpZ2dlcigicmVzaXplU3RhcnQiLCBhLCB0KHMpKSB9LCByZXNpemU6IGZ1bmN0aW9uIChlLCBhKSB7IGkuX3RyaWdnZXIoInJlc2l6ZSIsIGUsIHQoYSkpIH0sIHN0b3A6IGZ1bmN0aW9uIChzLCBuKSB7IGEuaGVpZ2h0ID0gZSh0aGlzKS5oZWlnaHQoKSwgYS53aWR0aCA9IGUodGhpcykud2lkdGgoKSwgZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksIGkuX3VuYmxvY2tGcmFtZXMoKSwgaS5fdHJpZ2dlcigicmVzaXplU3RvcCIsIHMsIHQobikpIH0gfSkuY3NzKCJwb3NpdGlvbiIsIG4pIH0sIF9taW5IZWlnaHQ6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLm9wdGlvbnM7IHJldHVybiAiYXV0byIgPT09IGUuaGVpZ2h0ID8gZS5taW5IZWlnaHQgOiBNYXRoLm1pbihlLm1pbkhlaWdodCwgZS5oZWlnaHQpIH0sIF9wb3NpdGlvbjogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMudWlEaWFsb2cuaXMoIjp2aXNpYmxlIik7IGUgfHwgdGhpcy51aURpYWxvZy5zaG93KCksIHRoaXMudWlEaWFsb2cucG9zaXRpb24odGhpcy5vcHRpb25zLnBvc2l0aW9uKSwgZSB8fCB0aGlzLnVpRGlhbG9nLmhpZGUoKSB9LCBfc2V0T3B0aW9uczogZnVuY3Rpb24gKGEpIHsgdmFyIHMgPSB0aGlzLCBuID0gITEsIHIgPSB7fTsgZS5lYWNoKGEsIGZ1bmN0aW9uIChlLCBhKSB7IHMuX3NldE9wdGlvbihlLCBhKSwgZSBpbiB0ICYmIChuID0gITApLCBlIGluIGkgJiYgKHJbZV0gPSBhKSB9KSwgbiAmJiAodGhpcy5fc2l6ZSgpLCB0aGlzLl9wb3NpdGlvbigpKSwgdGhpcy51aURpYWxvZy5pcygiOmRhdGEodWktcmVzaXphYmxlKSIpICYmIHRoaXMudWlEaWFsb2cucmVzaXphYmxlKCJvcHRpb24iLCByKSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgaSwgYSwgcyA9IHRoaXMudWlEaWFsb2c7ICJkaWFsb2dDbGFzcyIgPT09IGUgJiYgcy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZGlhbG9nQ2xhc3MpLmFkZENsYXNzKHQpLCAiZGlzYWJsZWQiICE9PSBlICYmICh0aGlzLl9zdXBlcihlLCB0KSwgImFwcGVuZFRvIiA9PT0gZSAmJiB0aGlzLnVpRGlhbG9nLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLCAiYnV0dG9ucyIgPT09IGUgJiYgdGhpcy5fY3JlYXRlQnV0dG9ucygpLCAiY2xvc2VUZXh0IiA9PT0gZSAmJiB0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oeyBsYWJlbDogIiIgKyB0IH0pLCAiZHJhZ2dhYmxlIiA9PT0gZSAmJiAoaSA9IHMuaXMoIjpkYXRhKHVpLWRyYWdnYWJsZSkiKSwgaSAmJiAhdCAmJiBzLmRyYWdnYWJsZSgiZGVzdHJveSIpLCAhaSAmJiB0ICYmIHRoaXMuX21ha2VEcmFnZ2FibGUoKSksICJwb3NpdGlvbiIgPT09IGUgJiYgdGhpcy5fcG9zaXRpb24oKSwgInJlc2l6YWJsZSIgPT09IGUgJiYgKGEgPSBzLmlzKCI6ZGF0YSh1aS1yZXNpemFibGUpIiksIGEgJiYgIXQgJiYgcy5yZXNpemFibGUoImRlc3Ryb3kiKSwgYSAmJiAic3RyaW5nIiA9PSB0eXBlb2YgdCAmJiBzLnJlc2l6YWJsZSgib3B0aW9uIiwgImhhbmRsZXMiLCB0KSwgYSB8fCB0ID09PSAhMSB8fCB0aGlzLl9tYWtlUmVzaXphYmxlKCkpLCAidGl0bGUiID09PSBlICYmIHRoaXMuX3RpdGxlKHRoaXMudWlEaWFsb2dUaXRsZWJhci5maW5kKCIudWktZGlhbG9nLXRpdGxlIikpKSB9LCBfc2l6ZTogZnVuY3Rpb24gKCkgeyB2YXIgZSwgdCwgaSwgYSA9IHRoaXMub3B0aW9uczsgdGhpcy5lbGVtZW50LnNob3coKS5jc3MoeyB3aWR0aDogImF1dG8iLCBtaW5IZWlnaHQ6IDAsIG1heEhlaWdodDogIm5vbmUiLCBoZWlnaHQ6IDAgfSksIGEubWluV2lkdGggPiBhLndpZHRoICYmIChhLndpZHRoID0gYS5taW5XaWR0aCksIGUgPSB0aGlzLnVpRGlhbG9nLmNzcyh7IGhlaWdodDogImF1dG8iLCB3aWR0aDogYS53aWR0aCB9KS5vdXRlckhlaWdodCgpLCB0ID0gTWF0aC5tYXgoMCwgYS5taW5IZWlnaHQgLSBlKSwgaSA9ICJudW1iZXIiID09IHR5cGVvZiBhLm1heEhlaWdodCA/IE1hdGgubWF4KDAsIGEubWF4SGVpZ2h0IC0gZSkgOiAibm9uZSIsICJhdXRvIiA9PT0gYS5oZWlnaHQgPyB0aGlzLmVsZW1lbnQuY3NzKHsgbWluSGVpZ2h0OiB0LCBtYXhIZWlnaHQ6IGksIGhlaWdodDogImF1dG8iIH0pIDogdGhpcy5lbGVtZW50LmhlaWdodChNYXRoLm1heCgwLCBhLmhlaWdodCAtIGUpKSwgdGhpcy51aURpYWxvZy5pcygiOmRhdGEodWktcmVzaXphYmxlKSIpICYmIHRoaXMudWlEaWFsb2cucmVzaXphYmxlKCJvcHRpb24iLCAibWluSGVpZ2h0IiwgdGhpcy5fbWluSGVpZ2h0KCkpIH0sIF9ibG9ja0ZyYW1lczogZnVuY3Rpb24gKCkgeyB0aGlzLmlmcmFtZUJsb2NrcyA9IHRoaXMuZG9jdW1lbnQuZmluZCgiaWZyYW1lIikubWFwKGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBlKHRoaXMpOyByZXR1cm4gZSgiPGRpdj4iKS5jc3MoeyBwb3NpdGlvbjogImFic29sdXRlIiwgd2lkdGg6IHQub3V0ZXJXaWR0aCgpLCBoZWlnaHQ6IHQub3V0ZXJIZWlnaHQoKSB9KS5hcHBlbmRUbyh0LnBhcmVudCgpKS5vZmZzZXQodC5vZmZzZXQoKSlbMF0gfSkgfSwgX3VuYmxvY2tGcmFtZXM6IGZ1bmN0aW9uICgpIHsgdGhpcy5pZnJhbWVCbG9ja3MgJiYgKHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpLCBkZWxldGUgdGhpcy5pZnJhbWVCbG9ja3MpIH0sIF9hbGxvd0ludGVyYWN0aW9uOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLWRpYWxvZyIpLmxlbmd0aCA/ICEwIDogISFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGF0ZXBpY2tlciIpLmxlbmd0aCB9LCBfY3JlYXRlT3ZlcmxheTogZnVuY3Rpb24gKCkgeyBpZiAodGhpcy5vcHRpb25zLm1vZGFsKSB7IHZhciB0ID0gdGhpcywgaSA9IHRoaXMud2lkZ2V0RnVsbE5hbWU7IGUudWkuZGlhbG9nLm92ZXJsYXlJbnN0YW5jZXMgfHwgdGhpcy5fZGVsYXkoZnVuY3Rpb24gKCkgeyBlLnVpLmRpYWxvZy5vdmVybGF5SW5zdGFuY2VzICYmIHRoaXMuZG9jdW1lbnQuYmluZCgiZm9jdXNpbi5kaWFsb2ciLCBmdW5jdGlvbiAoYSkgeyB0Ll9hbGxvd0ludGVyYWN0aW9uKGEpIHx8IChhLnByZXZlbnREZWZhdWx0KCksIGUoIi51aS1kaWFsb2c6dmlzaWJsZTpsYXN0IC51aS1kaWFsb2ctY29udGVudCIpLmRhdGEoaSkuX2ZvY3VzVGFiYmFibGUoKSkgfSkgfSksIHRoaXMub3ZlcmxheSA9IGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXdpZGdldC1vdmVybGF5IHVpLWZyb250IikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksIHRoaXMuX29uKHRoaXMub3ZlcmxheSwgeyBtb3VzZWRvd246ICJfa2VlcEZvY3VzIiB9KSwgZS51aS5kaWFsb2cub3ZlcmxheUluc3RhbmNlcysrIH0gfSwgX2Rlc3Ryb3lPdmVybGF5OiBmdW5jdGlvbiAoKSB7IHRoaXMub3B0aW9ucy5tb2RhbCAmJiB0aGlzLm92ZXJsYXkgJiYgKGUudWkuZGlhbG9nLm92ZXJsYXlJbnN0YW5jZXMtLSwgZS51aS5kaWFsb2cub3ZlcmxheUluc3RhbmNlcyB8fCB0aGlzLmRvY3VtZW50LnVuYmluZCgiZm9jdXNpbi5kaWFsb2ciKSwgdGhpcy5vdmVybGF5LnJlbW92ZSgpLCB0aGlzLm92ZXJsYXkgPSBudWxsKSB9IH0pLCBlLnVpLmRpYWxvZy5vdmVybGF5SW5zdGFuY2VzID0gMCwgZS51aUJhY2tDb21wYXQgIT09ICExICYmIGUud2lkZ2V0KCJ1aS5kaWFsb2ciLCBlLnVpLmRpYWxvZywgeyBfcG9zaXRpb246IGZ1bmN0aW9uICgpIHsgdmFyIHQsIGkgPSB0aGlzLm9wdGlvbnMucG9zaXRpb24sIGEgPSBbXSwgcyA9IFswLCAwXTsgaSA/ICgoInN0cmluZyIgPT0gdHlwZW9mIGkgfHwgIm9iamVjdCIgPT0gdHlwZW9mIGkgJiYgIjAiIGluIGkpICYmIChhID0gaS5zcGxpdCA/IGkuc3BsaXQoIiAiKSA6IFtpWzBdLCBpWzFdXSwgMSA9PT0gYS5sZW5ndGggJiYgKGFbMV0gPSBhWzBdKSwgZS5lYWNoKFsibGVmdCIsICJ0b3AiXSwgZnVuY3Rpb24gKGUsIHQpIHsgK2FbZV0gPT09IGFbZV0gJiYgKHNbZV0gPSBhW2VdLCBhW2VdID0gdCkgfSksIGkgPSB7IG15OiBhWzBdICsgKDAgPiBzWzBdID8gc1swXSA6ICIrIiArIHNbMF0pICsgIiAiICsgYVsxXSArICgwID4gc1sxXSA/IHNbMV0gOiAiKyIgKyBzWzFdKSwgYXQ6IGEuam9pbigiICIpIH0pLCBpID0gZS5leHRlbmQoe30sIGUudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uLCBpKSkgOiBpID0gZS51aS5kaWFsb2cucHJvdG90eXBlLm9wdGlvbnMucG9zaXRpb24sIHQgPSB0aGlzLnVpRGlhbG9nLmlzKCI6dmlzaWJsZSIpLCB0IHx8IHRoaXMudWlEaWFsb2cuc2hvdygpLCB0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKGkpLCB0IHx8IHRoaXMudWlEaWFsb2cuaGlkZSgpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IHQud2lkZ2V0KCJ1aS5kcmFnZ2FibGUiLCB0LnVpLm1vdXNlLCB7IHZlcnNpb246ICIxLjEwLjQiLCB3aWRnZXRFdmVudFByZWZpeDogImRyYWciLCBvcHRpb25zOiB7IGFkZENsYXNzZXM6ICEwLCBhcHBlbmRUbzogInBhcmVudCIsIGF4aXM6ICExLCBjb25uZWN0VG9Tb3J0YWJsZTogITEsIGNvbnRhaW5tZW50OiAhMSwgY3Vyc29yOiAiYXV0byIsIGN1cnNvckF0OiAhMSwgZ3JpZDogITEsIGhhbmRsZTogITEsIGhlbHBlcjogIm9yaWdpbmFsIiwgaWZyYW1lRml4OiAhMSwgb3BhY2l0eTogITEsIHJlZnJlc2hQb3NpdGlvbnM6ICExLCByZXZlcnQ6ICExLCByZXZlcnREdXJhdGlvbjogNTAwLCBzY29wZTogImRlZmF1bHQiLCBzY3JvbGw6ICEwLCBzY3JvbGxTZW5zaXRpdml0eTogMjAsIHNjcm9sbFNwZWVkOiAyMCwgc25hcDogITEsIHNuYXBNb2RlOiAiYm90aCIsIHNuYXBUb2xlcmFuY2U6IDIwLCBzdGFjazogITEsIHpJbmRleDogITEsIGRyYWc6IG51bGwsIHN0YXJ0OiBudWxsLCBzdG9wOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgIm9yaWdpbmFsIiAhPT0gdGhpcy5vcHRpb25zLmhlbHBlciB8fCAvXig/OnJ8YXxmKS8udGVzdCh0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpKSB8fCAodGhpcy5lbGVtZW50WzBdLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIiksIHRoaXMub3B0aW9ucy5hZGRDbGFzc2VzICYmIHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlIiksIHRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1kaXNhYmxlZCIpLCB0aGlzLl9tb3VzZUluaXQoKSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZSB1aS1kcmFnZ2FibGUtZHJhZ2dpbmcgdWktZHJhZ2dhYmxlLWRpc2FibGVkIiksIHRoaXMuX21vdXNlRGVzdHJveSgpIH0sIF9tb3VzZUNhcHR1cmU6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcy5vcHRpb25zOyByZXR1cm4gdGhpcy5oZWxwZXIgfHwgaS5kaXNhYmxlZCB8fCB0KGUudGFyZ2V0KS5jbG9zZXN0KCIudWktcmVzaXphYmxlLWhhbmRsZSIpLmxlbmd0aCA+IDAgPyAhMSA6ICh0aGlzLmhhbmRsZSA9IHRoaXMuX2dldEhhbmRsZShlKSwgdGhpcy5oYW5kbGUgPyAodChpLmlmcmFtZUZpeCA9PT0gITAgPyAiaWZyYW1lIiA6IGkuaWZyYW1lRml4KS5lYWNoKGZ1bmN0aW9uICgpIHsgdCgiPGRpdiBjbGFzcz0ndWktZHJhZ2dhYmxlLWlmcmFtZUZpeCcgc3R5bGU9J2JhY2tncm91bmQ6ICNmZmY7Jz48XC9kaXY+IikuY3NzKHsgd2lkdGg6IHRoaXMub2Zmc2V0V2lkdGggKyAicHgiLCBoZWlnaHQ6IHRoaXMub2Zmc2V0SGVpZ2h0ICsgInB4IiwgcG9zaXRpb246ICJhYnNvbHV0ZSIsIG9wYWNpdHk6ICIwLjAwMSIsIHpJbmRleDogMWUzIH0pLmNzcyh0KHRoaXMpLm9mZnNldCgpKS5hcHBlbmRUbygiYm9keSIpIH0pLCAhMCkgOiAhMSkgfSwgX21vdXNlU3RhcnQ6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcy5vcHRpb25zOyByZXR1cm4gdGhpcy5oZWxwZXIgPSB0aGlzLl9jcmVhdGVIZWxwZXIoZSksIHRoaXMuaGVscGVyLmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSwgdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLCB0LnVpLmRkbWFuYWdlciAmJiAodC51aS5kZG1hbmFnZXIuY3VycmVudCA9IHRoaXMpLCB0aGlzLl9jYWNoZU1hcmdpbnMoKSwgdGhpcy5jc3NQb3NpdGlvbiA9IHRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSwgdGhpcy5zY3JvbGxQYXJlbnQgPSB0aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSwgdGhpcy5vZmZzZXRQYXJlbnQgPSB0aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKSwgdGhpcy5vZmZzZXRQYXJlbnRDc3NQb3NpdGlvbiA9IHRoaXMub2Zmc2V0UGFyZW50LmNzcygicG9zaXRpb24iKSwgdGhpcy5vZmZzZXQgPSB0aGlzLnBvc2l0aW9uQWJzID0gdGhpcy5lbGVtZW50Lm9mZnNldCgpLCB0aGlzLm9mZnNldCA9IHsgdG9wOiB0aGlzLm9mZnNldC50b3AgLSB0aGlzLm1hcmdpbnMudG9wLCBsZWZ0OiB0aGlzLm9mZnNldC5sZWZ0IC0gdGhpcy5tYXJnaW5zLmxlZnQgfSwgdGhpcy5vZmZzZXQuc2Nyb2xsID0gITEsIHQuZXh0ZW5kKHRoaXMub2Zmc2V0LCB7IGNsaWNrOiB7IGxlZnQ6IGUucGFnZVggLSB0aGlzLm9mZnNldC5sZWZ0LCB0b3A6IGUucGFnZVkgLSB0aGlzLm9mZnNldC50b3AgfSwgcGFyZW50OiB0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSwgcmVsYXRpdmU6IHRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkgfSksIHRoaXMub3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gPSB0aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLCB0aGlzLm9yaWdpbmFsUGFnZVggPSBlLnBhZ2VYLCB0aGlzLm9yaWdpbmFsUGFnZVkgPSBlLnBhZ2VZLCBpLmN1cnNvckF0ICYmIHRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoaS5jdXJzb3JBdCksIHRoaXMuX3NldENvbnRhaW5tZW50KCksIHRoaXMuX3RyaWdnZXIoInN0YXJ0IiwgZSkgPT09ICExID8gKHRoaXMuX2NsZWFyKCksICExKSA6ICh0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksIHQudWkuZGRtYW5hZ2VyICYmICFpLmRyb3BCZWhhdmlvdXIgJiYgdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcywgZSksIHRoaXMuX21vdXNlRHJhZyhlLCAhMCksIHQudWkuZGRtYW5hZ2VyICYmIHQudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLCBlKSwgITApIH0sIF9tb3VzZURyYWc6IGZ1bmN0aW9uIChlLCBpKSB7IGlmICgiZml4ZWQiID09PSB0aGlzLm9mZnNldFBhcmVudENzc1Bvc2l0aW9uICYmICh0aGlzLm9mZnNldC5wYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSksIHRoaXMucG9zaXRpb24gPSB0aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLCB0aGlzLnBvc2l0aW9uQWJzID0gdGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksICFpKSB7IHZhciBzID0gdGhpcy5fdWlIYXNoKCk7IGlmICh0aGlzLl90cmlnZ2VyKCJkcmFnIiwgZSwgcykgPT09ICExKSByZXR1cm4gdGhpcy5fbW91c2VVcCh7fSksICExOyB0aGlzLnBvc2l0aW9uID0gcy5wb3NpdGlvbiB9IHJldHVybiB0aGlzLm9wdGlvbnMuYXhpcyAmJiAieSIgPT09IHRoaXMub3B0aW9ucy5heGlzIHx8ICh0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0ID0gdGhpcy5wb3NpdGlvbi5sZWZ0ICsgInB4IiksIHRoaXMub3B0aW9ucy5heGlzICYmICJ4IiA9PT0gdGhpcy5vcHRpb25zLmF4aXMgfHwgKHRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcCA9IHRoaXMucG9zaXRpb24udG9wICsgInB4IiksIHQudWkuZGRtYW5hZ2VyICYmIHQudWkuZGRtYW5hZ2VyLmRyYWcodGhpcywgZSksICExIH0sIF9tb3VzZVN0b3A6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcywgcyA9ICExOyByZXR1cm4gdC51aS5kZG1hbmFnZXIgJiYgIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyICYmIChzID0gdC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLCBlKSksIHRoaXMuZHJvcHBlZCAmJiAocyA9IHRoaXMuZHJvcHBlZCwgdGhpcy5kcm9wcGVkID0gITEpLCAib3JpZ2luYWwiICE9PSB0aGlzLm9wdGlvbnMuaGVscGVyIHx8IHQuY29udGFpbnModGhpcy5lbGVtZW50WzBdLm93bmVyRG9jdW1lbnQsIHRoaXMuZWxlbWVudFswXSkgPyAoImludmFsaWQiID09PSB0aGlzLm9wdGlvbnMucmV2ZXJ0ICYmICFzIHx8ICJ2YWxpZCIgPT09IHRoaXMub3B0aW9ucy5yZXZlcnQgJiYgcyB8fCB0aGlzLm9wdGlvbnMucmV2ZXJ0ID09PSAhMCB8fCB0LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnJldmVydCkgJiYgdGhpcy5vcHRpb25zLnJldmVydC5jYWxsKHRoaXMuZWxlbWVudCwgcykgPyB0KHRoaXMuaGVscGVyKS5hbmltYXRlKHRoaXMub3JpZ2luYWxQb3NpdGlvbiwgcGFyc2VJbnQodGhpcy5vcHRpb25zLnJldmVydER1cmF0aW9uLCAxMCksIGZ1bmN0aW9uICgpIHsgaS5fdHJpZ2dlcigic3RvcCIsIGUpICE9PSAhMSAmJiBpLl9jbGVhcigpIH0pIDogdGhpcy5fdHJpZ2dlcigic3RvcCIsIGUpICE9PSAhMSAmJiB0aGlzLl9jbGVhcigpLCAhMSkgOiAhMSB9LCBfbW91c2VVcDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHQoImRpdi51aS1kcmFnZ2FibGUtaWZyYW1lRml4IikuZWFjaChmdW5jdGlvbiAoKSB7IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKSB9KSwgdC51aS5kZG1hbmFnZXIgJiYgdC51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcywgZSksIHQudWkubW91c2UucHJvdG90eXBlLl9tb3VzZVVwLmNhbGwodGhpcywgZSkgfSwgY2FuY2VsOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmhlbHBlci5pcygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpID8gdGhpcy5fbW91c2VVcCh7fSkgOiB0aGlzLl9jbGVhcigpLCB0aGlzIH0sIF9nZXRIYW5kbGU6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aGlzLm9wdGlvbnMuaGFuZGxlID8gISF0KGUudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oYW5kbGUpKS5sZW5ndGggOiAhMCB9LCBfY3JlYXRlSGVscGVyOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMub3B0aW9ucywgcyA9IHQuaXNGdW5jdGlvbihpLmhlbHBlcikgPyB0KGkuaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSwgW2VdKSkgOiAiY2xvbmUiID09PSBpLmhlbHBlciA/IHRoaXMuZWxlbWVudC5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIikgOiB0aGlzLmVsZW1lbnQ7IHJldHVybiBzLnBhcmVudHMoImJvZHkiKS5sZW5ndGggfHwgcy5hcHBlbmRUbygicGFyZW50IiA9PT0gaS5hcHBlbmRUbyA/IHRoaXMuZWxlbWVudFswXS5wYXJlbnROb2RlIDogaS5hcHBlbmRUbyksIHNbMF0gPT09IHRoaXMuZWxlbWVudFswXSB8fCAvKGZpeGVkfGFic29sdXRlKS8udGVzdChzLmNzcygicG9zaXRpb24iKSkgfHwgcy5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIiksIHMgfSwgX2FkanVzdE9mZnNldEZyb21IZWxwZXI6IGZ1bmN0aW9uIChlKSB7ICJzdHJpbmciID09IHR5cGVvZiBlICYmIChlID0gZS5zcGxpdCgiICIpKSwgdC5pc0FycmF5KGUpICYmIChlID0geyBsZWZ0OiArZVswXSwgdG9wOiArZVsxXSB8fCAwIH0pLCAibGVmdCIgaW4gZSAmJiAodGhpcy5vZmZzZXQuY2xpY2subGVmdCA9IGUubGVmdCArIHRoaXMubWFyZ2lucy5sZWZ0KSwgInJpZ2h0IiBpbiBlICYmICh0aGlzLm9mZnNldC5jbGljay5sZWZ0ID0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAtIGUucmlnaHQgKyB0aGlzLm1hcmdpbnMubGVmdCksICJ0b3AiIGluIGUgJiYgKHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA9IGUudG9wICsgdGhpcy5tYXJnaW5zLnRvcCksICJib3R0b20iIGluIGUgJiYgKHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA9IHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0IC0gZS5ib3R0b20gKyB0aGlzLm1hcmdpbnMudG9wKSB9LCBfZ2V0UGFyZW50T2Zmc2V0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7IHJldHVybiAiYWJzb2x1dGUiID09PSB0aGlzLmNzc1Bvc2l0aW9uICYmIHRoaXMuc2Nyb2xsUGFyZW50WzBdICE9PSBkb2N1bWVudCAmJiB0LmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLCB0aGlzLm9mZnNldFBhcmVudFswXSkgJiYgKGUubGVmdCArPSB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksIGUudG9wICs9IHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwgKHRoaXMub2Zmc2V0UGFyZW50WzBdID09PSBkb2N1bWVudC5ib2R5IHx8IHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUgJiYgImh0bWwiID09PSB0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgJiYgdC51aS5pZSkgJiYgKGUgPSB7IHRvcDogMCwgbGVmdDogMCB9KSwgeyB0b3A6IGUudG9wICsgKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwgMTApIHx8IDApLCBsZWZ0OiBlLmxlZnQgKyAocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwgMTApIHx8IDApIH0gfSwgX2dldFJlbGF0aXZlT2Zmc2V0OiBmdW5jdGlvbiAoKSB7IGlmICgicmVsYXRpdmUiID09PSB0aGlzLmNzc1Bvc2l0aW9uKSB7IHZhciB0ID0gdGhpcy5lbGVtZW50LnBvc2l0aW9uKCk7IHJldHVybiB7IHRvcDogdC50b3AgLSAocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwgMTApIHx8IDApICsgdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksIGxlZnQ6IHQubGVmdCAtIChwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwgMTApIHx8IDApICsgdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpIH0gfSByZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfSB9LCBfY2FjaGVNYXJnaW5zOiBmdW5jdGlvbiAoKSB7IHRoaXMubWFyZ2lucyA9IHsgbGVmdDogcGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLCAxMCkgfHwgMCwgdG9wOiBwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwgMTApIHx8IDAsIHJpZ2h0OiBwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5SaWdodCIpLCAxMCkgfHwgMCwgYm90dG9tOiBwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKSwgMTApIHx8IDAgfSB9LCBfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczogZnVuY3Rpb24gKCkgeyB0aGlzLmhlbHBlclByb3BvcnRpb25zID0geyB3aWR0aDogdGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVscGVyLm91dGVySGVpZ2h0KCkgfSB9LCBfc2V0Q29udGFpbm1lbnQ6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIGksIHMsIG4gPSB0aGlzLm9wdGlvbnM7IHJldHVybiBuLmNvbnRhaW5tZW50ID8gIndpbmRvdyIgPT09IG4uY29udGFpbm1lbnQgPyAodGhpcy5jb250YWlubWVudCA9IFt0KHdpbmRvdykuc2Nyb2xsTGVmdCgpIC0gdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCAtIHRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LCB0KHdpbmRvdykuc2Nyb2xsVG9wKCkgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgLSB0aGlzLm9mZnNldC5wYXJlbnQudG9wLCB0KHdpbmRvdykuc2Nyb2xsTGVmdCgpICsgdCh3aW5kb3cpLndpZHRoKCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC0gdGhpcy5tYXJnaW5zLmxlZnQsIHQod2luZG93KS5zY3JvbGxUb3AoKSArICh0KHdpbmRvdykuaGVpZ2h0KCkgfHwgZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtIHRoaXMubWFyZ2lucy50b3BdLCB1bmRlZmluZWQpIDogImRvY3VtZW50IiA9PT0gbi5jb250YWlubWVudCA/ICh0aGlzLmNvbnRhaW5tZW50ID0gWzAsIDAsIHQoZG9jdW1lbnQpLndpZHRoKCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC0gdGhpcy5tYXJnaW5zLmxlZnQsICh0KGRvY3VtZW50KS5oZWlnaHQoKSB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0IC0gdGhpcy5tYXJnaW5zLnRvcF0sIHVuZGVmaW5lZCkgOiBuLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yID09PSBBcnJheSA/ICh0aGlzLmNvbnRhaW5tZW50ID0gbi5jb250YWlubWVudCwgdW5kZWZpbmVkKSA6ICgicGFyZW50IiA9PT0gbi5jb250YWlubWVudCAmJiAobi5jb250YWlubWVudCA9IHRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLCBpID0gdChuLmNvbnRhaW5tZW50KSwgcyA9IGlbMF0sIHMgJiYgKGUgPSAiaGlkZGVuIiAhPT0gaS5jc3MoIm92ZXJmbG93IiksIHRoaXMuY29udGFpbm1lbnQgPSBbKHBhcnNlSW50KGkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwgMTApIHx8IDApICsgKHBhcnNlSW50KGkuY3NzKCJwYWRkaW5nTGVmdCIpLCAxMCkgfHwgMCksIChwYXJzZUludChpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwgMTApIHx8IDApICsgKHBhcnNlSW50KGkuY3NzKCJwYWRkaW5nVG9wIiksIDEwKSB8fCAwKSwgKGUgPyBNYXRoLm1heChzLnNjcm9sbFdpZHRoLCBzLm9mZnNldFdpZHRoKSA6IHMub2Zmc2V0V2lkdGgpIC0gKHBhcnNlSW50KGkuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksIDEwKSB8fCAwKSAtIChwYXJzZUludChpLmNzcygicGFkZGluZ1JpZ2h0IiksIDEwKSB8fCAwKSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSB0aGlzLm1hcmdpbnMubGVmdCAtIHRoaXMubWFyZ2lucy5yaWdodCwgKGUgPyBNYXRoLm1heChzLnNjcm9sbEhlaWdodCwgcy5vZmZzZXRIZWlnaHQpIDogcy5vZmZzZXRIZWlnaHQpIC0gKHBhcnNlSW50KGkuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLCAxMCkgfHwgMCkgLSAocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdCb3R0b20iKSwgMTApIHx8IDApIC0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSB0aGlzLm1hcmdpbnMudG9wIC0gdGhpcy5tYXJnaW5zLmJvdHRvbV0sIHRoaXMucmVsYXRpdmVfY29udGFpbmVyID0gaSksIHVuZGVmaW5lZCkgOiAodGhpcy5jb250YWlubWVudCA9IG51bGwsIHVuZGVmaW5lZCkgfSwgX2NvbnZlcnRQb3NpdGlvblRvOiBmdW5jdGlvbiAoZSwgaSkgeyBpIHx8IChpID0gdGhpcy5wb3NpdGlvbik7IHZhciBzID0gImFic29sdXRlIiA9PT0gZSA/IDEgOiAtMSwgbiA9ICJhYnNvbHV0ZSIgIT09IHRoaXMuY3NzUG9zaXRpb24gfHwgdGhpcy5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmIHQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sIHRoaXMub2Zmc2V0UGFyZW50WzBdKSA/IHRoaXMuc2Nyb2xsUGFyZW50IDogdGhpcy5vZmZzZXRQYXJlbnQ7IHJldHVybiB0aGlzLm9mZnNldC5zY3JvbGwgfHwgKHRoaXMub2Zmc2V0LnNjcm9sbCA9IHsgdG9wOiBuLnNjcm9sbFRvcCgpLCBsZWZ0OiBuLnNjcm9sbExlZnQoKSB9KSwgeyB0b3A6IGkudG9wICsgdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wICogcyArIHRoaXMub2Zmc2V0LnBhcmVudC50b3AgKiBzIC0gKCJmaXhlZCIgPT09IHRoaXMuY3NzUG9zaXRpb24gPyAtdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkgOiB0aGlzLm9mZnNldC5zY3JvbGwudG9wKSAqIHMsIGxlZnQ6IGkubGVmdCArIHRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQgKiBzICsgdGhpcy5vZmZzZXQucGFyZW50LmxlZnQgKiBzIC0gKCJmaXhlZCIgPT09IHRoaXMuY3NzUG9zaXRpb24gPyAtdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpIDogdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQpICogcyB9IH0sIF9nZW5lcmF0ZVBvc2l0aW9uOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSwgcywgbiwgYSwgbyA9IHRoaXMub3B0aW9ucywgciA9ICJhYnNvbHV0ZSIgIT09IHRoaXMuY3NzUG9zaXRpb24gfHwgdGhpcy5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmIHQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sIHRoaXMub2Zmc2V0UGFyZW50WzBdKSA/IHRoaXMuc2Nyb2xsUGFyZW50IDogdGhpcy5vZmZzZXRQYXJlbnQsIGwgPSBlLnBhZ2VYLCBoID0gZS5wYWdlWTsgcmV0dXJuIHRoaXMub2Zmc2V0LnNjcm9sbCB8fCAodGhpcy5vZmZzZXQuc2Nyb2xsID0geyB0b3A6IHIuc2Nyb2xsVG9wKCksIGxlZnQ6IHIuc2Nyb2xsTGVmdCgpIH0pLCB0aGlzLm9yaWdpbmFsUG9zaXRpb24gJiYgKHRoaXMuY29udGFpbm1lbnQgJiYgKHRoaXMucmVsYXRpdmVfY29udGFpbmVyID8gKHMgPSB0aGlzLnJlbGF0aXZlX2NvbnRhaW5lci5vZmZzZXQoKSwgaSA9IFt0aGlzLmNvbnRhaW5tZW50WzBdICsgcy5sZWZ0LCB0aGlzLmNvbnRhaW5tZW50WzFdICsgcy50b3AsIHRoaXMuY29udGFpbm1lbnRbMl0gKyBzLmxlZnQsIHRoaXMuY29udGFpbm1lbnRbM10gKyBzLnRvcF0pIDogaSA9IHRoaXMuY29udGFpbm1lbnQsIGUucGFnZVggLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0IDwgaVswXSAmJiAobCA9IGlbMF0gKyB0aGlzLm9mZnNldC5jbGljay5sZWZ0KSwgZS5wYWdlWSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA8IGlbMV0gJiYgKGggPSBpWzFdICsgdGhpcy5vZmZzZXQuY2xpY2sudG9wKSwgZS5wYWdlWCAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPiBpWzJdICYmIChsID0gaVsyXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLCBlLnBhZ2VZIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID4gaVszXSAmJiAoaCA9IGlbM10gKyB0aGlzLm9mZnNldC5jbGljay50b3ApKSwgby5ncmlkICYmIChuID0gby5ncmlkWzFdID8gdGhpcy5vcmlnaW5hbFBhZ2VZICsgTWF0aC5yb3VuZCgoaCAtIHRoaXMub3JpZ2luYWxQYWdlWSkgLyBvLmdyaWRbMV0pICogby5ncmlkWzFdIDogdGhpcy5vcmlnaW5hbFBhZ2VZLCBoID0gaSA/IG4gLSB0aGlzLm9mZnNldC5jbGljay50b3AgPj0gaVsxXSB8fCBuIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID4gaVszXSA/IG4gOiBuIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID49IGlbMV0gPyBuIC0gby5ncmlkWzFdIDogbiArIG8uZ3JpZFsxXSA6IG4sIGEgPSBvLmdyaWRbMF0gPyB0aGlzLm9yaWdpbmFsUGFnZVggKyBNYXRoLnJvdW5kKChsIC0gdGhpcy5vcmlnaW5hbFBhZ2VYKSAvIG8uZ3JpZFswXSkgKiBvLmdyaWRbMF0gOiB0aGlzLm9yaWdpbmFsUGFnZVgsIGwgPSBpID8gYSAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPj0gaVswXSB8fCBhIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+IGlbMl0gPyBhIDogYSAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPj0gaVswXSA/IGEgLSBvLmdyaWRbMF0gOiBhICsgby5ncmlkWzBdIDogYSkpLCB7IHRvcDogaCAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCAtIHRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCAtIHRoaXMub2Zmc2V0LnBhcmVudC50b3AgKyAoImZpeGVkIiA9PT0gdGhpcy5jc3NQb3NpdGlvbiA/IC10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSA6IHRoaXMub2Zmc2V0LnNjcm9sbC50b3ApLCBsZWZ0OiBsIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCAtIHRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQgLSB0aGlzLm9mZnNldC5wYXJlbnQubGVmdCArICgiZml4ZWQiID09PSB0aGlzLmNzc1Bvc2l0aW9uID8gLXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSA6IHRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KSB9IH0sIF9jbGVhcjogZnVuY3Rpb24gKCkgeyB0aGlzLmhlbHBlci5yZW1vdmVDbGFzcygidWktZHJhZ2dhYmxlLWRyYWdnaW5nIiksIHRoaXMuaGVscGVyWzBdID09PSB0aGlzLmVsZW1lbnRbMF0gfHwgdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsIHx8IHRoaXMuaGVscGVyLnJlbW92ZSgpLCB0aGlzLmhlbHBlciA9IG51bGwsIHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbCA9ICExIH0sIF90cmlnZ2VyOiBmdW5jdGlvbiAoZSwgaSwgcykgeyByZXR1cm4gcyA9IHMgfHwgdGhpcy5fdWlIYXNoKCksIHQudWkucGx1Z2luLmNhbGwodGhpcywgZSwgW2ksIHNdKSwgImRyYWciID09PSBlICYmICh0aGlzLnBvc2l0aW9uQWJzID0gdGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIikpLCB0LldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLCBlLCBpLCBzKSB9LCBwbHVnaW5zOiB7fSwgX3VpSGFzaDogZnVuY3Rpb24gKCkgeyByZXR1cm4geyBoZWxwZXI6IHRoaXMuaGVscGVyLCBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbiwgb3JpZ2luYWxQb3NpdGlvbjogdGhpcy5vcmlnaW5hbFBvc2l0aW9uLCBvZmZzZXQ6IHRoaXMucG9zaXRpb25BYnMgfSB9IH0pLCB0LnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsICJjb25uZWN0VG9Tb3J0YWJsZSIsIHsgc3RhcnQ6IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKSwgbiA9IHMub3B0aW9ucywgYSA9IHQuZXh0ZW5kKHt9LCBpLCB7IGl0ZW06IHMuZWxlbWVudCB9KTsgcy5zb3J0YWJsZXMgPSBbXSwgdChuLmNvbm5lY3RUb1NvcnRhYmxlKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGkgPSB0LmRhdGEodGhpcywgInVpLXNvcnRhYmxlIik7IGkgJiYgIWkub3B0aW9ucy5kaXNhYmxlZCAmJiAocy5zb3J0YWJsZXMucHVzaCh7IGluc3RhbmNlOiBpLCBzaG91bGRSZXZlcnQ6IGkub3B0aW9ucy5yZXZlcnQgfSksIGkucmVmcmVzaFBvc2l0aW9ucygpLCBpLl90cmlnZ2VyKCJhY3RpdmF0ZSIsIGUsIGEpKSB9KSB9LCBzdG9wOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIiksIG4gPSB0LmV4dGVuZCh7fSwgaSwgeyBpdGVtOiBzLmVsZW1lbnQgfSk7IHQuZWFjaChzLnNvcnRhYmxlcywgZnVuY3Rpb24gKCkgeyB0aGlzLmluc3RhbmNlLmlzT3ZlciA/ICh0aGlzLmluc3RhbmNlLmlzT3ZlciA9IDAsIHMuY2FuY2VsSGVscGVyUmVtb3ZhbCA9ICEwLCB0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWwgPSAhMSwgdGhpcy5zaG91bGRSZXZlcnQgJiYgKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQgPSB0aGlzLnNob3VsZFJldmVydCksIHRoaXMuaW5zdGFuY2UuX21vdXNlU3RvcChlKSwgdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlciA9IHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLCAib3JpZ2luYWwiID09PSBzLm9wdGlvbnMuaGVscGVyICYmIHRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0uY3NzKHsgdG9wOiAiYXV0byIsIGxlZnQ6ICJhdXRvIiB9KSkgOiAodGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsID0gITEsIHRoaXMuaW5zdGFuY2UuX3RyaWdnZXIoImRlYWN0aXZhdGUiLCBlLCBuKSkgfSkgfSwgZHJhZzogZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMgPSB0KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLCBuID0gdGhpczsgdC5lYWNoKHMuc29ydGFibGVzLCBmdW5jdGlvbiAoKSB7IHZhciBhID0gITEsIG8gPSB0aGlzOyB0aGlzLmluc3RhbmNlLnBvc2l0aW9uQWJzID0gcy5wb3NpdGlvbkFicywgdGhpcy5pbnN0YW5jZS5oZWxwZXJQcm9wb3J0aW9ucyA9IHMuaGVscGVyUHJvcG9ydGlvbnMsIHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrID0gcy5vZmZzZXQuY2xpY2ssIHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpICYmIChhID0gITAsIHQuZWFjaChzLnNvcnRhYmxlcywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5pbnN0YW5jZS5wb3NpdGlvbkFicyA9IHMucG9zaXRpb25BYnMsIHRoaXMuaW5zdGFuY2UuaGVscGVyUHJvcG9ydGlvbnMgPSBzLmhlbHBlclByb3BvcnRpb25zLCB0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljayA9IHMub2Zmc2V0LmNsaWNrLCB0aGlzICE9PSBvICYmIHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpICYmIHQuY29udGFpbnMoby5pbnN0YW5jZS5lbGVtZW50WzBdLCB0aGlzLmluc3RhbmNlLmVsZW1lbnRbMF0pICYmIChhID0gITEpLCBhIH0pKSwgYSA/ICh0aGlzLmluc3RhbmNlLmlzT3ZlciB8fCAodGhpcy5pbnN0YW5jZS5pc092ZXIgPSAxLCB0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtID0gdChuKS5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIikuYXBwZW5kVG8odGhpcy5pbnN0YW5jZS5lbGVtZW50KS5kYXRhKCJ1aS1zb3J0YWJsZS1pdGVtIiwgITApLCB0aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlciA9IHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXIsIHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpLmhlbHBlclswXSB9LCBlLnRhcmdldCA9IHRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW1bMF0sIHRoaXMuaW5zdGFuY2UuX21vdXNlQ2FwdHVyZShlLCAhMCksIHRoaXMuaW5zdGFuY2UuX21vdXNlU3RhcnQoZSwgITAsICEwKSwgdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2sudG9wID0gcy5vZmZzZXQuY2xpY2sudG9wLCB0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay5sZWZ0ID0gcy5vZmZzZXQuY2xpY2subGVmdCwgdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQgLT0gcy5vZmZzZXQucGFyZW50LmxlZnQgLSB0aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQubGVmdCwgdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCAtPSBzLm9mZnNldC5wYXJlbnQudG9wIC0gdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCwgcy5fdHJpZ2dlcigidG9Tb3J0YWJsZSIsIGUpLCBzLmRyb3BwZWQgPSB0aGlzLmluc3RhbmNlLmVsZW1lbnQsIHMuY3VycmVudEl0ZW0gPSBzLmVsZW1lbnQsIHRoaXMuaW5zdGFuY2UuZnJvbU91dHNpZGUgPSBzKSwgdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbSAmJiB0aGlzLmluc3RhbmNlLl9tb3VzZURyYWcoZSkpIDogdGhpcy5pbnN0YW5jZS5pc092ZXIgJiYgKHRoaXMuaW5zdGFuY2UuaXNPdmVyID0gMCwgdGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsID0gITAsIHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQgPSAhMSwgdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigib3V0IiwgZSwgdGhpcy5pbnN0YW5jZS5fdWlIYXNoKHRoaXMuaW5zdGFuY2UpKSwgdGhpcy5pbnN0YW5jZS5fbW91c2VTdG9wKGUsICEwKSwgdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlciA9IHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLCB0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtLnJlbW92ZSgpLCB0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyICYmIHRoaXMuaW5zdGFuY2UucGxhY2Vob2xkZXIucmVtb3ZlKCksIHMuX3RyaWdnZXIoImZyb21Tb3J0YWJsZSIsIGUpLCBzLmRyb3BwZWQgPSAhMSkgfSkgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAiY3Vyc29yIiwgeyBzdGFydDogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQoImJvZHkiKSwgaSA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIikub3B0aW9uczsgZS5jc3MoImN1cnNvciIpICYmIChpLl9jdXJzb3IgPSBlLmNzcygiY3Vyc29yIikpLCBlLmNzcygiY3Vyc29yIiwgaS5jdXJzb3IpIH0sIHN0b3A6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLm9wdGlvbnM7IGUuX2N1cnNvciAmJiB0KCJib2R5IikuY3NzKCJjdXJzb3IiLCBlLl9jdXJzb3IpIH0gfSksIHQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwgIm9wYWNpdHkiLCB7IHN0YXJ0OiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQoaS5oZWxwZXIpLCBuID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zOyBzLmNzcygib3BhY2l0eSIpICYmIChuLl9vcGFjaXR5ID0gcy5jc3MoIm9wYWNpdHkiKSksIHMuY3NzKCJvcGFjaXR5Iiwgbi5vcGFjaXR5KSB9LCBzdG9wOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIikub3B0aW9uczsgcy5fb3BhY2l0eSAmJiB0KGkuaGVscGVyKS5jc3MoIm9wYWNpdHkiLCBzLl9vcGFjaXR5KSB9IH0pLCB0LnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsICJzY3JvbGwiLCB7IHN0YXJ0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKTsgZS5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmICJIVE1MIiAhPT0gZS5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSAmJiAoZS5vdmVyZmxvd09mZnNldCA9IGUuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSB9LCBkcmFnOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIiksIHMgPSBpLm9wdGlvbnMsIG4gPSAhMTsgaS5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmICJIVE1MIiAhPT0gaS5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSA/IChzLmF4aXMgJiYgIngiID09PSBzLmF4aXMgfHwgKGkub3ZlcmZsb3dPZmZzZXQudG9wICsgaS5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0IC0gZS5wYWdlWSA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgPyBpLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AgPSBuID0gaS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wICsgcy5zY3JvbGxTcGVlZCA6IGUucGFnZVkgLSBpLm92ZXJmbG93T2Zmc2V0LnRvcCA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgJiYgKGkuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCA9IG4gPSBpLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AgLSBzLnNjcm9sbFNwZWVkKSksIHMuYXhpcyAmJiAieSIgPT09IHMuYXhpcyB8fCAoaS5vdmVyZmxvd09mZnNldC5sZWZ0ICsgaS5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGggLSBlLnBhZ2VYIDwgcy5zY3JvbGxTZW5zaXRpdml0eSA/IGkuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQgPSBuID0gaS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCArIHMuc2Nyb2xsU3BlZWQgOiBlLnBhZ2VYIC0gaS5vdmVyZmxvd09mZnNldC5sZWZ0IDwgcy5zY3JvbGxTZW5zaXRpdml0eSAmJiAoaS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCA9IG4gPSBpLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0IC0gcy5zY3JvbGxTcGVlZCkpKSA6IChzLmF4aXMgJiYgIngiID09PSBzLmF4aXMgfHwgKGUucGFnZVkgLSB0KGRvY3VtZW50KS5zY3JvbGxUb3AoKSA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgPyBuID0gdChkb2N1bWVudCkuc2Nyb2xsVG9wKHQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpIC0gcy5zY3JvbGxTcGVlZCkgOiB0KHdpbmRvdykuaGVpZ2h0KCkgLSAoZS5wYWdlWSAtIHQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKSA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgJiYgKG4gPSB0KGRvY3VtZW50KS5zY3JvbGxUb3AodChkb2N1bWVudCkuc2Nyb2xsVG9wKCkgKyBzLnNjcm9sbFNwZWVkKSkpLCBzLmF4aXMgJiYgInkiID09PSBzLmF4aXMgfHwgKGUucGFnZVggLSB0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkgPCBzLnNjcm9sbFNlbnNpdGl2aXR5ID8gbiA9IHQoZG9jdW1lbnQpLnNjcm9sbExlZnQodChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpIC0gcy5zY3JvbGxTcGVlZCkgOiB0KHdpbmRvdykud2lkdGgoKSAtIChlLnBhZ2VYIC0gdChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgJiYgKG4gPSB0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KHQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSArIHMuc2Nyb2xsU3BlZWQpKSkpLCBuICE9PSAhMSAmJiB0LnVpLmRkbWFuYWdlciAmJiAhcy5kcm9wQmVoYXZpb3VyICYmIHQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGksIGUpIH0gfSksIHQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwgInNuYXAiLCB7IHN0YXJ0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKSwgaSA9IGUub3B0aW9uczsgZS5zbmFwRWxlbWVudHMgPSBbXSwgdChpLnNuYXAuY29uc3RydWN0b3IgIT09IFN0cmluZyA/IGkuc25hcC5pdGVtcyB8fCAiOmRhdGEodWktZHJhZ2dhYmxlKSIgOiBpLnNuYXApLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgaSA9IHQodGhpcyksIHMgPSBpLm9mZnNldCgpOyB0aGlzICE9PSBlLmVsZW1lbnRbMF0gJiYgZS5zbmFwRWxlbWVudHMucHVzaCh7IGl0ZW06IHRoaXMsIHdpZHRoOiBpLm91dGVyV2lkdGgoKSwgaGVpZ2h0OiBpLm91dGVySGVpZ2h0KCksIHRvcDogcy50b3AsIGxlZnQ6IHMubGVmdCB9KSB9KSB9LCBkcmFnOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcywgbiwgYSwgbywgciwgbCwgaCwgYywgdSwgZCwgcCA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIiksIGcgPSBwLm9wdGlvbnMsIGYgPSBnLnNuYXBUb2xlcmFuY2UsIG0gPSBpLm9mZnNldC5sZWZ0LCBfID0gbSArIHAuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsIHYgPSBpLm9mZnNldC50b3AsIGIgPSB2ICsgcC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7IGZvciAodSA9IHAuc25hcEVsZW1lbnRzLmxlbmd0aCAtIDE7IHUgPj0gMDsgdS0tKSByID0gcC5zbmFwRWxlbWVudHNbdV0ubGVmdCwgbCA9IHIgKyBwLnNuYXBFbGVtZW50c1t1XS53aWR0aCwgaCA9IHAuc25hcEVsZW1lbnRzW3VdLnRvcCwgYyA9IGggKyBwLnNuYXBFbGVtZW50c1t1XS5oZWlnaHQsIHIgLSBmID4gXyB8fCBtID4gbCArIGYgfHwgaCAtIGYgPiBiIHx8IHYgPiBjICsgZiB8fCAhdC5jb250YWlucyhwLnNuYXBFbGVtZW50c1t1XS5pdGVtLm93bmVyRG9jdW1lbnQsIHAuc25hcEVsZW1lbnRzW3VdLml0ZW0pID8gKHAuc25hcEVsZW1lbnRzW3VdLnNuYXBwaW5nICYmIHAub3B0aW9ucy5zbmFwLnJlbGVhc2UgJiYgcC5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHAuZWxlbWVudCwgZSwgdC5leHRlbmQocC5fdWlIYXNoKCksIHsgc25hcEl0ZW06IHAuc25hcEVsZW1lbnRzW3VdLml0ZW0gfSkpLCBwLnNuYXBFbGVtZW50c1t1XS5zbmFwcGluZyA9ICExKSA6ICgiaW5uZXIiICE9PSBnLnNuYXBNb2RlICYmIChzID0gZiA+PSBNYXRoLmFicyhoIC0gYiksIG4gPSBmID49IE1hdGguYWJzKGMgLSB2KSwgYSA9IGYgPj0gTWF0aC5hYnMociAtIF8pLCBvID0gZiA+PSBNYXRoLmFicyhsIC0gbSksIHMgJiYgKGkucG9zaXRpb24udG9wID0gcC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIiwgeyB0b3A6IGggLSBwLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCwgbGVmdDogMCB9KS50b3AgLSBwLm1hcmdpbnMudG9wKSwgbiAmJiAoaS5wb3NpdGlvbi50b3AgPSBwLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLCB7IHRvcDogYywgbGVmdDogMCB9KS50b3AgLSBwLm1hcmdpbnMudG9wKSwgYSAmJiAoaS5wb3NpdGlvbi5sZWZ0ID0gcC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIiwgeyB0b3A6IDAsIGxlZnQ6IHIgLSBwLmhlbHBlclByb3BvcnRpb25zLndpZHRoIH0pLmxlZnQgLSBwLm1hcmdpbnMubGVmdCksIG8gJiYgKGkucG9zaXRpb24ubGVmdCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiAwLCBsZWZ0OiBsIH0pLmxlZnQgLSBwLm1hcmdpbnMubGVmdCkpLCBkID0gcyB8fCBuIHx8IGEgfHwgbywgIm91dGVyIiAhPT0gZy5zbmFwTW9kZSAmJiAocyA9IGYgPj0gTWF0aC5hYnMoaCAtIHYpLCBuID0gZiA+PSBNYXRoLmFicyhjIC0gYiksIGEgPSBmID49IE1hdGguYWJzKHIgLSBtKSwgbyA9IGYgPj0gTWF0aC5hYnMobCAtIF8pLCBzICYmIChpLnBvc2l0aW9uLnRvcCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiBoLCBsZWZ0OiAwIH0pLnRvcCAtIHAubWFyZ2lucy50b3ApLCBuICYmIChpLnBvc2l0aW9uLnRvcCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiBjIC0gcC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsIGxlZnQ6IDAgfSkudG9wIC0gcC5tYXJnaW5zLnRvcCksIGEgJiYgKGkucG9zaXRpb24ubGVmdCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiAwLCBsZWZ0OiByIH0pLmxlZnQgLSBwLm1hcmdpbnMubGVmdCksIG8gJiYgKGkucG9zaXRpb24ubGVmdCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiAwLCBsZWZ0OiBsIC0gcC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCB9KS5sZWZ0IC0gcC5tYXJnaW5zLmxlZnQpKSwgIXAuc25hcEVsZW1lbnRzW3VdLnNuYXBwaW5nICYmIChzIHx8IG4gfHwgYSB8fCBvIHx8IGQpICYmIHAub3B0aW9ucy5zbmFwLnNuYXAgJiYgcC5vcHRpb25zLnNuYXAuc25hcC5jYWxsKHAuZWxlbWVudCwgZSwgdC5leHRlbmQocC5fdWlIYXNoKCksIHsgc25hcEl0ZW06IHAuc25hcEVsZW1lbnRzW3VdLml0ZW0gfSkpLCBwLnNuYXBFbGVtZW50c1t1XS5zbmFwcGluZyA9IHMgfHwgbiB8fCBhIHx8IG8gfHwgZCkgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAic3RhY2siLCB7IHN0YXJ0OiBmdW5jdGlvbiAoKSB7IHZhciBlLCBpID0gdGhpcy5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zLCBzID0gdC5tYWtlQXJyYXkodChpLnN0YWNrKSkuc29ydChmdW5jdGlvbiAoZSwgaSkgeyByZXR1cm4gKHBhcnNlSW50KHQoZSkuY3NzKCJ6SW5kZXgiKSwgMTApIHx8IDApIC0gKHBhcnNlSW50KHQoaSkuY3NzKCJ6SW5kZXgiKSwgMTApIHx8IDApIH0pOyBzLmxlbmd0aCAmJiAoZSA9IHBhcnNlSW50KHQoc1swXSkuY3NzKCJ6SW5kZXgiKSwgMTApIHx8IDAsIHQocykuZWFjaChmdW5jdGlvbiAoaSkgeyB0KHRoaXMpLmNzcygiekluZGV4IiwgZSArIGkpIH0pLCB0aGlzLmNzcygiekluZGV4IiwgZSArIHMubGVuZ3RoKSkgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAiekluZGV4IiwgeyBzdGFydDogZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMgPSB0KGkuaGVscGVyKSwgbiA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIikub3B0aW9uczsgcy5jc3MoInpJbmRleCIpICYmIChuLl96SW5kZXggPSBzLmNzcygiekluZGV4IikpLCBzLmNzcygiekluZGV4Iiwgbi56SW5kZXgpIH0sIHN0b3A6IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zOyBzLl96SW5kZXggJiYgdChpLmhlbHBlcikuY3NzKCJ6SW5kZXgiLCBzLl96SW5kZXgpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IGZ1bmN0aW9uIGUodCwgZSwgaSkgeyByZXR1cm4gdCA+IGUgJiYgZSArIGkgPiB0IH0gdC53aWRnZXQoInVpLmRyb3BwYWJsZSIsIHsgdmVyc2lvbjogIjEuMTAuNCIsIHdpZGdldEV2ZW50UHJlZml4OiAiZHJvcCIsIG9wdGlvbnM6IHsgYWNjZXB0OiAiKiIsIGFjdGl2ZUNsYXNzOiAhMSwgYWRkQ2xhc3NlczogITAsIGdyZWVkeTogITEsIGhvdmVyQ2xhc3M6ICExLCBzY29wZTogImRlZmF1bHQiLCB0b2xlcmFuY2U6ICJpbnRlcnNlY3QiLCBhY3RpdmF0ZTogbnVsbCwgZGVhY3RpdmF0ZTogbnVsbCwgZHJvcDogbnVsbCwgb3V0OiBudWxsLCBvdmVyOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIGkgPSB0aGlzLm9wdGlvbnMsIHMgPSBpLmFjY2VwdDsgdGhpcy5pc292ZXIgPSAhMSwgdGhpcy5pc291dCA9ICEwLCB0aGlzLmFjY2VwdCA9IHQuaXNGdW5jdGlvbihzKSA/IHMgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5pcyhzKSB9LCB0aGlzLnByb3BvcnRpb25zID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChlID0gYXJndW1lbnRzWzBdLCB1bmRlZmluZWQpIDogZSA/IGUgOiBlID0geyB3aWR0aDogdGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLCBoZWlnaHQ6IHRoaXMuZWxlbWVudFswXS5vZmZzZXRIZWlnaHQgfSB9LCB0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2kuc2NvcGVdID0gdC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tpLnNjb3BlXSB8fCBbXSwgdC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tpLnNjb3BlXS5wdXNoKHRoaXMpLCBpLmFkZENsYXNzZXMgJiYgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcm9wcGFibGUiKSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyBmb3IgKHZhciBlID0gMCwgaSA9IHQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTsgaS5sZW5ndGggPiBlOyBlKyspIGlbZV0gPT09IHRoaXMgJiYgaS5zcGxpY2UoZSwgMSk7IHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktZHJvcHBhYmxlIHVpLWRyb3BwYWJsZS1kaXNhYmxlZCIpIH0sIF9zZXRPcHRpb246IGZ1bmN0aW9uIChlLCBpKSB7ICJhY2NlcHQiID09PSBlICYmICh0aGlzLmFjY2VwdCA9IHQuaXNGdW5jdGlvbihpKSA/IGkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5pcyhpKSB9KSwgdC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSB9LCBfYWN0aXZhdGU6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdC51aS5kZG1hbmFnZXIuY3VycmVudDsgdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICYmIHRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLCBpICYmIHRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIiwgZSwgdGhpcy51aShpKSkgfSwgX2RlYWN0aXZhdGU6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdC51aS5kZG1hbmFnZXIuY3VycmVudDsgdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICYmIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLCBpICYmIHRoaXMuX3RyaWdnZXIoImRlYWN0aXZhdGUiLCBlLCB0aGlzLnVpKGkpKSB9LCBfb3ZlcjogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0LnVpLmRkbWFuYWdlci5jdXJyZW50OyBpICYmIChpLmN1cnJlbnRJdGVtIHx8IGkuZWxlbWVudClbMF0gIT09IHRoaXMuZWxlbWVudFswXSAmJiB0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSwgaS5jdXJyZW50SXRlbSB8fCBpLmVsZW1lbnQpICYmICh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyAmJiB0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLCB0aGlzLl90cmlnZ2VyKCJvdmVyIiwgZSwgdGhpcy51aShpKSkpIH0sIF9vdXQ6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdC51aS5kZG1hbmFnZXIuY3VycmVudDsgaSAmJiAoaS5jdXJyZW50SXRlbSB8fCBpLmVsZW1lbnQpWzBdICE9PSB0aGlzLmVsZW1lbnRbMF0gJiYgdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sIGkuY3VycmVudEl0ZW0gfHwgaS5lbGVtZW50KSAmJiAodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MgJiYgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSwgdGhpcy5fdHJpZ2dlcigib3V0IiwgZSwgdGhpcy51aShpKSkpIH0sIF9kcm9wOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IGkgfHwgdC51aS5kZG1hbmFnZXIuY3VycmVudCwgbiA9ICExOyByZXR1cm4gcyAmJiAocy5jdXJyZW50SXRlbSB8fCBzLmVsZW1lbnQpWzBdICE9PSB0aGlzLmVsZW1lbnRbMF0gPyAodGhpcy5lbGVtZW50LmZpbmQoIjpkYXRhKHVpLWRyb3BwYWJsZSkiKS5ub3QoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0LmRhdGEodGhpcywgInVpLWRyb3BwYWJsZSIpOyByZXR1cm4gZS5vcHRpb25zLmdyZWVkeSAmJiAhZS5vcHRpb25zLmRpc2FibGVkICYmIGUub3B0aW9ucy5zY29wZSA9PT0gcy5vcHRpb25zLnNjb3BlICYmIGUuYWNjZXB0LmNhbGwoZS5lbGVtZW50WzBdLCBzLmN1cnJlbnRJdGVtIHx8IHMuZWxlbWVudCkgJiYgdC51aS5pbnRlcnNlY3QocywgdC5leHRlbmQoZSwgeyBvZmZzZXQ6IGUuZWxlbWVudC5vZmZzZXQoKSB9KSwgZS5vcHRpb25zLnRvbGVyYW5jZSkgPyAobiA9ICEwLCAhMSkgOiB1bmRlZmluZWQgfSksIG4gPyAhMSA6IHRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLCBzLmN1cnJlbnRJdGVtIHx8IHMuZWxlbWVudCkgPyAodGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICYmIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLCB0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyAmJiB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLCB0aGlzLl90cmlnZ2VyKCJkcm9wIiwgZSwgdGhpcy51aShzKSksIHRoaXMuZWxlbWVudCkgOiAhMSkgOiAhMSB9LCB1aTogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHsgZHJhZ2dhYmxlOiB0LmN1cnJlbnRJdGVtIHx8IHQuZWxlbWVudCwgaGVscGVyOiB0LmhlbHBlciwgcG9zaXRpb246IHQucG9zaXRpb24sIG9mZnNldDogdC5wb3NpdGlvbkFicyB9IH0gfSksIHQudWkuaW50ZXJzZWN0ID0gZnVuY3Rpb24gKHQsIGksIHMpIHsgaWYgKCFpLm9mZnNldCkgcmV0dXJuICExOyB2YXIgbiwgYSwgbyA9ICh0LnBvc2l0aW9uQWJzIHx8IHQucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQsIHIgPSAodC5wb3NpdGlvbkFicyB8fCB0LnBvc2l0aW9uLmFic29sdXRlKS50b3AsIGwgPSBvICsgdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCwgaCA9IHIgKyB0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodCwgYyA9IGkub2Zmc2V0LmxlZnQsIHUgPSBpLm9mZnNldC50b3AsIGQgPSBjICsgaS5wcm9wb3J0aW9ucygpLndpZHRoLCBwID0gdSArIGkucHJvcG9ydGlvbnMoKS5oZWlnaHQ7IHN3aXRjaCAocykgeyBjYXNlICJmaXQiOiByZXR1cm4gbyA+PSBjICYmIGQgPj0gbCAmJiByID49IHUgJiYgcCA+PSBoOyBjYXNlICJpbnRlcnNlY3QiOiByZXR1cm4gbyArIHQuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLyAyID4gYyAmJiBkID4gbCAtIHQuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLyAyICYmIHIgKyB0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAvIDIgPiB1ICYmIHAgPiBoIC0gdC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLyAyOyBjYXNlICJwb2ludGVyIjogcmV0dXJuIG4gPSAodC5wb3NpdGlvbkFicyB8fCB0LnBvc2l0aW9uLmFic29sdXRlKS5sZWZ0ICsgKHQuY2xpY2tPZmZzZXQgfHwgdC5vZmZzZXQuY2xpY2spLmxlZnQsIGEgPSAodC5wb3NpdGlvbkFicyB8fCB0LnBvc2l0aW9uLmFic29sdXRlKS50b3AgKyAodC5jbGlja09mZnNldCB8fCB0Lm9mZnNldC5jbGljaykudG9wLCBlKGEsIHUsIGkucHJvcG9ydGlvbnMoKS5oZWlnaHQpICYmIGUobiwgYywgaS5wcm9wb3J0aW9ucygpLndpZHRoKTsgY2FzZSAidG91Y2giOiByZXR1cm4gKHIgPj0gdSAmJiBwID49IHIgfHwgaCA+PSB1ICYmIHAgPj0gaCB8fCB1ID4gciAmJiBoID4gcCkgJiYgKG8gPj0gYyAmJiBkID49IG8gfHwgbCA+PSBjICYmIGQgPj0gbCB8fCBjID4gbyAmJiBsID4gZCk7IGRlZmF1bHQ6IHJldHVybiAhMSB9IH0sIHQudWkuZGRtYW5hZ2VyID0geyBjdXJyZW50OiBudWxsLCBkcm9wcGFibGVzOiB7ICJkZWZhdWx0IjogW10gfSwgcHJlcGFyZU9mZnNldHM6IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzLCBuLCBhID0gdC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlLm9wdGlvbnMuc2NvcGVdIHx8IFtdLCBvID0gaSA/IGkudHlwZSA6IG51bGwsIHIgPSAoZS5jdXJyZW50SXRlbSB8fCBlLmVsZW1lbnQpLmZpbmQoIjpkYXRhKHVpLWRyb3BwYWJsZSkiKS5hZGRCYWNrKCk7IHQ6IGZvciAocyA9IDA7IGEubGVuZ3RoID4gczsgcysrKSBpZiAoIShhW3NdLm9wdGlvbnMuZGlzYWJsZWQgfHwgZSAmJiAhYVtzXS5hY2NlcHQuY2FsbChhW3NdLmVsZW1lbnRbMF0sIGUuY3VycmVudEl0ZW0gfHwgZS5lbGVtZW50KSkpIHsgZm9yIChuID0gMDsgci5sZW5ndGggPiBuOyBuKyspIGlmIChyW25dID09PSBhW3NdLmVsZW1lbnRbMF0pIHsgYVtzXS5wcm9wb3J0aW9ucygpLmhlaWdodCA9IDA7IGNvbnRpbnVlIHQgfSBhW3NdLnZpc2libGUgPSAibm9uZSIgIT09IGFbc10uZWxlbWVudC5jc3MoImRpc3BsYXkiKSwgYVtzXS52aXNpYmxlICYmICgibW91c2Vkb3duIiA9PT0gbyAmJiBhW3NdLl9hY3RpdmF0ZS5jYWxsKGFbc10sIGkpLCBhW3NdLm9mZnNldCA9IGFbc10uZWxlbWVudC5vZmZzZXQoKSwgYVtzXS5wcm9wb3J0aW9ucyh7IHdpZHRoOiBhW3NdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsIGhlaWdodDogYVtzXS5lbGVtZW50WzBdLm9mZnNldEhlaWdodCB9KSkgfSB9LCBkcm9wOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9ICExOyByZXR1cm4gdC5lYWNoKCh0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Uub3B0aW9ucy5zY29wZV0gfHwgW10pLnNsaWNlKCksIGZ1bmN0aW9uICgpIHsgdGhpcy5vcHRpb25zICYmICghdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIHRoaXMudmlzaWJsZSAmJiB0LnVpLmludGVyc2VjdChlLCB0aGlzLCB0aGlzLm9wdGlvbnMudG9sZXJhbmNlKSAmJiAocyA9IHRoaXMuX2Ryb3AuY2FsbCh0aGlzLCBpKSB8fCBzKSwgIXRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiB0aGlzLnZpc2libGUgJiYgdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sIGUuY3VycmVudEl0ZW0gfHwgZS5lbGVtZW50KSAmJiAodGhpcy5pc291dCA9ICEwLCB0aGlzLmlzb3ZlciA9ICExLCB0aGlzLl9kZWFjdGl2YXRlLmNhbGwodGhpcywgaSkpKSB9KSwgcyB9LCBkcmFnU3RhcnQ6IGZ1bmN0aW9uIChlLCBpKSB7IGUuZWxlbWVudC5wYXJlbnRzVW50aWwoImJvZHkiKS5iaW5kKCJzY3JvbGwuZHJvcHBhYmxlIiwgZnVuY3Rpb24gKCkgeyBlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyB8fCB0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLCBpKSB9KSB9LCBkcmFnOiBmdW5jdGlvbiAoZSwgaSkgeyBlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyAmJiB0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLCBpKSwgdC5lYWNoKHQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZS5vcHRpb25zLnNjb3BlXSB8fCBbXSwgZnVuY3Rpb24gKCkgeyBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiAhdGhpcy5ncmVlZHlDaGlsZCAmJiB0aGlzLnZpc2libGUpIHsgdmFyIHMsIG4sIGEsIG8gPSB0LnVpLmludGVyc2VjdChlLCB0aGlzLCB0aGlzLm9wdGlvbnMudG9sZXJhbmNlKSwgciA9ICFvICYmIHRoaXMuaXNvdmVyID8gImlzb3V0IiA6IG8gJiYgIXRoaXMuaXNvdmVyID8gImlzb3ZlciIgOiBudWxsOyByICYmICh0aGlzLm9wdGlvbnMuZ3JlZWR5ICYmIChuID0gdGhpcy5vcHRpb25zLnNjb3BlLCBhID0gdGhpcy5lbGVtZW50LnBhcmVudHMoIjpkYXRhKHVpLWRyb3BwYWJsZSkiKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gdC5kYXRhKHRoaXMsICJ1aS1kcm9wcGFibGUiKS5vcHRpb25zLnNjb3BlID09PSBuIH0pLCBhLmxlbmd0aCAmJiAocyA9IHQuZGF0YShhWzBdLCAidWktZHJvcHBhYmxlIiksIHMuZ3JlZWR5Q2hpbGQgPSAiaXNvdmVyIiA9PT0gcikpLCBzICYmICJpc292ZXIiID09PSByICYmIChzLmlzb3ZlciA9ICExLCBzLmlzb3V0ID0gITAsIHMuX291dC5jYWxsKHMsIGkpKSwgdGhpc1tyXSA9ICEwLCB0aGlzWyJpc291dCIgPT09IHIgPyAiaXNvdmVyIiA6ICJpc291dCJdID0gITEsIHRoaXNbImlzb3ZlciIgPT09IHIgPyAiX292ZXIiIDogIl9vdXQiXS5jYWxsKHRoaXMsIGkpLCBzICYmICJpc291dCIgPT09IHIgJiYgKHMuaXNvdXQgPSAhMSwgcy5pc292ZXIgPSAhMCwgcy5fb3Zlci5jYWxsKHMsIGkpKSkgfSB9KSB9LCBkcmFnU3RvcDogZnVuY3Rpb24gKGUsIGkpIHsgZS5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLnVuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIpLCBlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyB8fCB0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLCBpKSB9IH0gfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpID0gInVpLWVmZmVjdHMtIjsgdC5lZmZlY3RzID0geyBlZmZlY3Q6IHt9IH0sIGZ1bmN0aW9uICh0LCBlKSB7IGZ1bmN0aW9uIGkodCwgZSwgaSkgeyB2YXIgcyA9IHVbZS50eXBlXSB8fCB7fTsgcmV0dXJuIG51bGwgPT0gdCA/IGkgfHwgIWUuZGVmID8gbnVsbCA6IGUuZGVmIDogKHQgPSBzLmZsb29yID8gfn50IDogcGFyc2VGbG9hdCh0KSwgaXNOYU4odCkgPyBlLmRlZiA6IHMubW9kID8gKHQgKyBzLm1vZCkgJSBzLm1vZCA6IDAgPiB0ID8gMCA6IHQgPiBzLm1heCA/IHMubWF4IDogdCkgfSBmdW5jdGlvbiBzKGkpIHsgdmFyIHMgPSBoKCksIG4gPSBzLl9yZ2JhID0gW107IHJldHVybiBpID0gaS50b0xvd2VyQ2FzZSgpLCBmKGwsIGZ1bmN0aW9uICh0LCBhKSB7IHZhciBvLCByID0gYS5yZS5leGVjKGkpLCBsID0gciAmJiBhLnBhcnNlKHIpLCBoID0gYS5zcGFjZSB8fCAicmdiYSI7IHJldHVybiBsID8gKG8gPSBzW2hdKGwpLCBzW2NbaF0uY2FjaGVdID0gb1tjW2hdLmNhY2hlXSwgbiA9IHMuX3JnYmEgPSBvLl9yZ2JhLCAhMSkgOiBlIH0pLCBuLmxlbmd0aCA/ICgiMCwwLDAsMCIgPT09IG4uam9pbigpICYmIHQuZXh0ZW5kKG4sIGEudHJhbnNwYXJlbnQpLCBzKSA6IGFbaV0gfSBmdW5jdGlvbiBuKHQsIGUsIGkpIHsgcmV0dXJuIGkgPSAoaSArIDEpICUgMSwgMSA+IDYgKiBpID8gdCArIDYgKiAoZSAtIHQpICogaSA6IDEgPiAyICogaSA/IGUgOiAyID4gMyAqIGkgPyB0ICsgNiAqIChlIC0gdCkgKiAoMiAvIDMgLSBpKSA6IHQgfSB2YXIgYSwgbyA9ICJiYWNrZ3JvdW5kQ29sb3IgYm9yZGVyQm90dG9tQ29sb3IgYm9yZGVyTGVmdENvbG9yIGJvcmRlclJpZ2h0Q29sb3IgYm9yZGVyVG9wQ29sb3IgY29sb3IgY29sdW1uUnVsZUNvbG9yIG91dGxpbmVDb2xvciB0ZXh0RGVjb3JhdGlvbkNvbG9yIHRleHRFbXBoYXNpc0NvbG9yIiwgciA9IC9eKFtcLStdKT1ccyooXGQrXC4/XGQqKS8sIGwgPSBbeyByZTogL3JnYmE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLywgcGFyc2U6IGZ1bmN0aW9uICh0KSB7IHJldHVybiBbdFsxXSwgdFsyXSwgdFszXSwgdFs0XV0gfSB9LCB7IHJlOiAvcmdiYT9cKFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqKD86LFxzKihcZD8oPzpcLlxkKyk/KVxzKik/XCkvLCBwYXJzZTogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIFsyLjU1ICogdFsxXSwgMi41NSAqIHRbMl0sIDIuNTUgKiB0WzNdLCB0WzRdXSB9IH0sIHsgcmU6IC8jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pLywgcGFyc2U6IGZ1bmN0aW9uICh0KSB7IHJldHVybiBbcGFyc2VJbnQodFsxXSwgMTYpLCBwYXJzZUludCh0WzJdLCAxNiksIHBhcnNlSW50KHRbM10sIDE2KV0gfSB9LCB7IHJlOiAvIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKS8sIHBhcnNlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gW3BhcnNlSW50KHRbMV0gKyB0WzFdLCAxNiksIHBhcnNlSW50KHRbMl0gKyB0WzJdLCAxNiksIHBhcnNlSW50KHRbM10gKyB0WzNdLCAxNildIH0gfSwgeyByZTogL2hzbGE/XChccyooXGQrKD86XC5cZCspPylccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyooPzosXHMqKFxkPyg/OlwuXGQrKT8pXHMqKT9cKS8sIHNwYWNlOiAiaHNsYSIsIHBhcnNlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gW3RbMV0sIHRbMl0gLyAxMDAsIHRbM10gLyAxMDAsIHRbNF1dIH0gfV0sIGggPSB0LkNvbG9yID0gZnVuY3Rpb24gKGUsIGksIHMsIG4pIHsgcmV0dXJuIG5ldyB0LkNvbG9yLmZuLnBhcnNlKGUsIGksIHMsIG4pIH0sIGMgPSB7IHJnYmE6IHsgcHJvcHM6IHsgcmVkOiB7IGlkeDogMCwgdHlwZTogImJ5dGUiIH0sIGdyZWVuOiB7IGlkeDogMSwgdHlwZTogImJ5dGUiIH0sIGJsdWU6IHsgaWR4OiAyLCB0eXBlOiAiYnl0ZSIgfSB9IH0sIGhzbGE6IHsgcHJvcHM6IHsgaHVlOiB7IGlkeDogMCwgdHlwZTogImRlZ3JlZXMiIH0sIHNhdHVyYXRpb246IHsgaWR4OiAxLCB0eXBlOiAicGVyY2VudCIgfSwgbGlnaHRuZXNzOiB7IGlkeDogMiwgdHlwZTogInBlcmNlbnQiIH0gfSB9IH0sIHUgPSB7ICJieXRlIjogeyBmbG9vcjogITAsIG1heDogMjU1IH0sIHBlcmNlbnQ6IHsgbWF4OiAxIH0sIGRlZ3JlZXM6IHsgbW9kOiAzNjAsIGZsb29yOiAhMCB9IH0sIGQgPSBoLnN1cHBvcnQgPSB7fSwgcCA9IHQoIjxwPiIpWzBdLCBmID0gdC5lYWNoOyBwLnN0eWxlLmNzc1RleHQgPSAiYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEsMSwxLC41KSIsIGQucmdiYSA9IHAuc3R5bGUuYmFja2dyb3VuZENvbG9yLmluZGV4T2YoInJnYmEiKSA+IC0xLCBmKGMsIGZ1bmN0aW9uICh0LCBlKSB7IGUuY2FjaGUgPSAiXyIgKyB0LCBlLnByb3BzLmFscGhhID0geyBpZHg6IDMsIHR5cGU6ICJwZXJjZW50IiwgZGVmOiAxIH0gfSksIGguZm4gPSB0LmV4dGVuZChoLnByb3RvdHlwZSwgeyBwYXJzZTogZnVuY3Rpb24gKG4sIG8sIHIsIGwpIHsgaWYgKG4gPT09IGUpIHJldHVybiB0aGlzLl9yZ2JhID0gW251bGwsIG51bGwsIG51bGwsIG51bGxdLCB0aGlzOyAobi5qcXVlcnkgfHwgbi5ub2RlVHlwZSkgJiYgKG4gPSB0KG4pLmNzcyhvKSwgbyA9IGUpOyB2YXIgdSA9IHRoaXMsIGQgPSB0LnR5cGUobiksIHAgPSB0aGlzLl9yZ2JhID0gW107IHJldHVybiBvICE9PSBlICYmIChuID0gW24sIG8sIHIsIGxdLCBkID0gImFycmF5IiksICJzdHJpbmciID09PSBkID8gdGhpcy5wYXJzZShzKG4pIHx8IGEuX2RlZmF1bHQpIDogImFycmF5IiA9PT0gZCA/IChmKGMucmdiYS5wcm9wcywgZnVuY3Rpb24gKHQsIGUpIHsgcFtlLmlkeF0gPSBpKG5bZS5pZHhdLCBlKSB9KSwgdGhpcykgOiAib2JqZWN0IiA9PT0gZCA/IChuIGluc3RhbmNlb2YgaCA/IGYoYywgZnVuY3Rpb24gKHQsIGUpIHsgbltlLmNhY2hlXSAmJiAodVtlLmNhY2hlXSA9IG5bZS5jYWNoZV0uc2xpY2UoKSkgfSkgOiBmKGMsIGZ1bmN0aW9uIChlLCBzKSB7IHZhciBhID0gcy5jYWNoZTsgZihzLnByb3BzLCBmdW5jdGlvbiAodCwgZSkgeyBpZiAoIXVbYV0gJiYgcy50bykgeyBpZiAoImFscGhhIiA9PT0gdCB8fCBudWxsID09IG5bdF0pIHJldHVybjsgdVthXSA9IHMudG8odS5fcmdiYSkgfSB1W2FdW2UuaWR4XSA9IGkoblt0XSwgZSwgITApIH0pLCB1W2FdICYmIDAgPiB0LmluQXJyYXkobnVsbCwgdVthXS5zbGljZSgwLCAzKSkgJiYgKHVbYV1bM10gPSAxLCBzLmZyb20gJiYgKHUuX3JnYmEgPSBzLmZyb20odVthXSkpKSB9KSwgdGhpcykgOiBlIH0sIGlzOiBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IGgodCksIHMgPSAhMCwgbiA9IHRoaXM7IHJldHVybiBmKGMsIGZ1bmN0aW9uICh0LCBhKSB7IHZhciBvLCByID0gaVthLmNhY2hlXTsgcmV0dXJuIHIgJiYgKG8gPSBuW2EuY2FjaGVdIHx8IGEudG8gJiYgYS50byhuLl9yZ2JhKSB8fCBbXSwgZihhLnByb3BzLCBmdW5jdGlvbiAodCwgaSkgeyByZXR1cm4gbnVsbCAhPSByW2kuaWR4XSA/IHMgPSByW2kuaWR4XSA9PT0gb1tpLmlkeF0gOiBlIH0pKSwgcyB9KSwgcyB9LCBfc3BhY2U6IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBbXSwgZSA9IHRoaXM7IHJldHVybiBmKGMsIGZ1bmN0aW9uIChpLCBzKSB7IGVbcy5jYWNoZV0gJiYgdC5wdXNoKGkpIH0pLCB0LnBvcCgpIH0sIHRyYW5zaXRpb246IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBzID0gaCh0KSwgbiA9IHMuX3NwYWNlKCksIGEgPSBjW25dLCBvID0gMCA9PT0gdGhpcy5hbHBoYSgpID8gaCgidHJhbnNwYXJlbnQiKSA6IHRoaXMsIHIgPSBvW2EuY2FjaGVdIHx8IGEudG8oby5fcmdiYSksIGwgPSByLnNsaWNlKCk7IHJldHVybiBzID0gc1thLmNhY2hlXSwgZihhLnByb3BzLCBmdW5jdGlvbiAodCwgbikgeyB2YXIgYSA9IG4uaWR4LCBvID0gclthXSwgaCA9IHNbYV0sIGMgPSB1W24udHlwZV0gfHwge307IG51bGwgIT09IGggJiYgKG51bGwgPT09IG8gPyBsW2FdID0gaCA6IChjLm1vZCAmJiAoaCAtIG8gPiBjLm1vZCAvIDIgPyBvICs9IGMubW9kIDogbyAtIGggPiBjLm1vZCAvIDIgJiYgKG8gLT0gYy5tb2QpKSwgbFthXSA9IGkoKGggLSBvKSAqIGUgKyBvLCBuKSkpIH0pLCB0aGlzW25dKGwpIH0sIGJsZW5kOiBmdW5jdGlvbiAoZSkgeyBpZiAoMSA9PT0gdGhpcy5fcmdiYVszXSkgcmV0dXJuIHRoaXM7IHZhciBpID0gdGhpcy5fcmdiYS5zbGljZSgpLCBzID0gaS5wb3AoKSwgbiA9IGgoZSkuX3JnYmE7IHJldHVybiBoKHQubWFwKGksIGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiAoMSAtIHMpICogbltlXSArIHMgKiB0IH0pKSB9LCB0b1JnYmFTdHJpbmc6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSAicmdiYSgiLCBpID0gdC5tYXAodGhpcy5fcmdiYSwgZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIG51bGwgPT0gdCA/IGUgPiAyID8gMSA6IDAgOiB0IH0pOyByZXR1cm4gMSA9PT0gaVszXSAmJiAoaS5wb3AoKSwgZSA9ICJyZ2IoIiksIGUgKyBpLmpvaW4oKSArICIpIiB9LCB0b0hzbGFTdHJpbmc6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSAiaHNsYSgiLCBpID0gdC5tYXAodGhpcy5oc2xhKCksIGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiBudWxsID09IHQgJiYgKHQgPSBlID4gMiA/IDEgOiAwKSwgZSAmJiAzID4gZSAmJiAodCA9IE1hdGgucm91bmQoMTAwICogdCkgKyAiJSIpLCB0IH0pOyByZXR1cm4gMSA9PT0gaVszXSAmJiAoaS5wb3AoKSwgZSA9ICJoc2woIiksIGUgKyBpLmpvaW4oKSArICIpIiB9LCB0b0hleFN0cmluZzogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0aGlzLl9yZ2JhLnNsaWNlKCksIHMgPSBpLnBvcCgpOyByZXR1cm4gZSAmJiBpLnB1c2gofn4oMjU1ICogcykpLCAiIyIgKyB0Lm1hcChpLCBmdW5jdGlvbiAodCkgeyByZXR1cm4gdCA9ICh0IHx8IDApLnRvU3RyaW5nKDE2KSwgMSA9PT0gdC5sZW5ndGggPyAiMCIgKyB0IDogdCB9KS5qb2luKCIiKSB9LCB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMCA9PT0gdGhpcy5fcmdiYVszXSA/ICJ0cmFuc3BhcmVudCIgOiB0aGlzLnRvUmdiYVN0cmluZygpIH0gfSksIGguZm4ucGFyc2UucHJvdG90eXBlID0gaC5mbiwgYy5oc2xhLnRvID0gZnVuY3Rpb24gKHQpIHsgaWYgKG51bGwgPT0gdFswXSB8fCBudWxsID09IHRbMV0gfHwgbnVsbCA9PSB0WzJdKSByZXR1cm4gW251bGwsIG51bGwsIG51bGwsIHRbM11dOyB2YXIgZSwgaSwgcyA9IHRbMF0gLyAyNTUsIG4gPSB0WzFdIC8gMjU1LCBhID0gdFsyXSAvIDI1NSwgbyA9IHRbM10sIHIgPSBNYXRoLm1heChzLCBuLCBhKSwgbCA9IE1hdGgubWluKHMsIG4sIGEpLCBoID0gciAtIGwsIGMgPSByICsgbCwgdSA9IC41ICogYzsgcmV0dXJuIGUgPSBsID09PSByID8gMCA6IHMgPT09IHIgPyA2MCAqIChuIC0gYSkgLyBoICsgMzYwIDogbiA9PT0gciA/IDYwICogKGEgLSBzKSAvIGggKyAxMjAgOiA2MCAqIChzIC0gbikgLyBoICsgMjQwLCBpID0gMCA9PT0gaCA/IDAgOiAuNSA+PSB1ID8gaCAvIGMgOiBoIC8gKDIgLSBjKSwgW01hdGgucm91bmQoZSkgJSAzNjAsIGksIHUsIG51bGwgPT0gbyA/IDEgOiBvXSB9LCBjLmhzbGEuZnJvbSA9IGZ1bmN0aW9uICh0KSB7IGlmIChudWxsID09IHRbMF0gfHwgbnVsbCA9PSB0WzFdIHx8IG51bGwgPT0gdFsyXSkgcmV0dXJuIFtudWxsLCBudWxsLCBudWxsLCB0WzNdXTsgdmFyIGUgPSB0WzBdIC8gMzYwLCBpID0gdFsxXSwgcyA9IHRbMl0sIGEgPSB0WzNdLCBvID0gLjUgPj0gcyA/IHMgKiAoMSArIGkpIDogcyArIGkgLSBzICogaSwgciA9IDIgKiBzIC0gbzsgcmV0dXJuIFtNYXRoLnJvdW5kKDI1NSAqIG4ociwgbywgZSArIDEgLyAzKSksIE1hdGgucm91bmQoMjU1ICogbihyLCBvLCBlKSksIE1hdGgucm91bmQoMjU1ICogbihyLCBvLCBlIC0gMSAvIDMpKSwgYV0gfSwgZihjLCBmdW5jdGlvbiAocywgbikgeyB2YXIgYSA9IG4ucHJvcHMsIG8gPSBuLmNhY2hlLCBsID0gbi50bywgYyA9IG4uZnJvbTsgaC5mbltzXSA9IGZ1bmN0aW9uIChzKSB7IGlmIChsICYmICF0aGlzW29dICYmICh0aGlzW29dID0gbCh0aGlzLl9yZ2JhKSksIHMgPT09IGUpIHJldHVybiB0aGlzW29dLnNsaWNlKCk7IHZhciBuLCByID0gdC50eXBlKHMpLCB1ID0gImFycmF5IiA9PT0gciB8fCAib2JqZWN0IiA9PT0gciA/IHMgOiBhcmd1bWVudHMsIGQgPSB0aGlzW29dLnNsaWNlKCk7IHJldHVybiBmKGEsIGZ1bmN0aW9uICh0LCBlKSB7IHZhciBzID0gdVsib2JqZWN0IiA9PT0gciA/IHQgOiBlLmlkeF07IG51bGwgPT0gcyAmJiAocyA9IGRbZS5pZHhdKSwgZFtlLmlkeF0gPSBpKHMsIGUpIH0pLCBjID8gKG4gPSBoKGMoZCkpLCBuW29dID0gZCwgbikgOiBoKGQpIH0sIGYoYSwgZnVuY3Rpb24gKGUsIGkpIHsgaC5mbltlXSB8fCAoaC5mbltlXSA9IGZ1bmN0aW9uIChuKSB7IHZhciBhLCBvID0gdC50eXBlKG4pLCBsID0gImFscGhhIiA9PT0gZSA/IHRoaXMuX2hzbGEgPyAiaHNsYSIgOiAicmdiYSIgOiBzLCBoID0gdGhpc1tsXSgpLCBjID0gaFtpLmlkeF07IHJldHVybiAidW5kZWZpbmVkIiA9PT0gbyA/IGMgOiAoImZ1bmN0aW9uIiA9PT0gbyAmJiAobiA9IG4uY2FsbCh0aGlzLCBjKSwgbyA9IHQudHlwZShuKSksIG51bGwgPT0gbiAmJiBpLmVtcHR5ID8gdGhpcyA6ICgic3RyaW5nIiA9PT0gbyAmJiAoYSA9IHIuZXhlYyhuKSwgYSAmJiAobiA9IGMgKyBwYXJzZUZsb2F0KGFbMl0pICogKCIrIiA9PT0gYVsxXSA/IDEgOiAtMSkpKSwgaFtpLmlkeF0gPSBuLCB0aGlzW2xdKGgpKSkgfSkgfSkgfSksIGguaG9vayA9IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gZS5zcGxpdCgiICIpOyBmKGksIGZ1bmN0aW9uIChlLCBpKSB7IHQuY3NzSG9va3NbaV0gPSB7IHNldDogZnVuY3Rpb24gKGUsIG4pIHsgdmFyIGEsIG8sIHIgPSAiIjsgaWYgKCJ0cmFuc3BhcmVudCIgIT09IG4gJiYgKCJzdHJpbmciICE9PSB0LnR5cGUobikgfHwgKGEgPSBzKG4pKSkpIHsgaWYgKG4gPSBoKGEgfHwgbiksICFkLnJnYmEgJiYgMSAhPT0gbi5fcmdiYVszXSkgeyBmb3IgKG8gPSAiYmFja2dyb3VuZENvbG9yIiA9PT0gaSA/IGUucGFyZW50Tm9kZSA6IGU7ICgiIiA9PT0gciB8fCAidHJhbnNwYXJlbnQiID09PSByKSAmJiBvICYmIG8uc3R5bGU7KSB0cnkgeyByID0gdC5jc3MobywgImJhY2tncm91bmRDb2xvciIpLCBvID0gby5wYXJlbnROb2RlIH0gY2F0Y2ggKGwpIHsgfSBuID0gbi5ibGVuZChyICYmICJ0cmFuc3BhcmVudCIgIT09IHIgPyByIDogIl9kZWZhdWx0IikgfSBuID0gbi50b1JnYmFTdHJpbmcoKSB9IHRyeSB7IGUuc3R5bGVbaV0gPSBuIH0gY2F0Y2ggKGwpIHsgfSB9IH0sIHQuZnguc3RlcFtpXSA9IGZ1bmN0aW9uIChlKSB7IGUuY29sb3JJbml0IHx8IChlLnN0YXJ0ID0gaChlLmVsZW0sIGkpLCBlLmVuZCA9IGgoZS5lbmQpLCBlLmNvbG9ySW5pdCA9ICEwKSwgdC5jc3NIb29rc1tpXS5zZXQoZS5lbGVtLCBlLnN0YXJ0LnRyYW5zaXRpb24oZS5lbmQsIGUucG9zKSkgfSB9KSB9LCBoLmhvb2sobyksIHQuY3NzSG9va3MuYm9yZGVyQ29sb3IgPSB7IGV4cGFuZDogZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSB7fTsgcmV0dXJuIGYoWyJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiXSwgZnVuY3Rpb24gKGksIHMpIHsgZVsiYm9yZGVyIiArIHMgKyAiQ29sb3IiXSA9IHQgfSksIGUgfSB9LCBhID0gdC5Db2xvci5uYW1lcyA9IHsgYXF1YTogIiMwMGZmZmYiLCBibGFjazogIiMwMDAwMDAiLCBibHVlOiAiIzAwMDBmZiIsIGZ1Y2hzaWE6ICIjZmYwMGZmIiwgZ3JheTogIiM4MDgwODAiLCBncmVlbjogIiMwMDgwMDAiLCBsaW1lOiAiIzAwZmYwMCIsIG1hcm9vbjogIiM4MDAwMDAiLCBuYXZ5OiAiIzAwMDA4MCIsIG9saXZlOiAiIzgwODAwMCIsIHB1cnBsZTogIiM4MDAwODAiLCByZWQ6ICIjZmYwMDAwIiwgc2lsdmVyOiAiI2MwYzBjMCIsIHRlYWw6ICIjMDA4MDgwIiwgd2hpdGU6ICIjZmZmZmZmIiwgeWVsbG93OiAiI2ZmZmYwMCIsIHRyYW5zcGFyZW50OiBbbnVsbCwgbnVsbCwgbnVsbCwgMF0sIF9kZWZhdWx0OiAiI2ZmZmZmZiIgfSB9KGpRdWVyeSksIGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gaShlKSB7IHZhciBpLCBzLCBuID0gZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ID8gZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSwgbnVsbCkgOiBlLmN1cnJlbnRTdHlsZSwgYSA9IHt9OyBpZiAobiAmJiBuLmxlbmd0aCAmJiBuWzBdICYmIG5bblswXV0pIGZvciAocyA9IG4ubGVuZ3RoOyBzLS07KSBpID0gbltzXSwgInN0cmluZyIgPT0gdHlwZW9mIG5baV0gJiYgKGFbdC5jYW1lbENhc2UoaSldID0gbltpXSk7IGVsc2UgZm9yIChpIGluIG4pICJzdHJpbmciID09IHR5cGVvZiBuW2ldICYmIChhW2ldID0gbltpXSk7IHJldHVybiBhIH0gZnVuY3Rpb24gcyhlLCBpKSB7IHZhciBzLCBuLCBvID0ge307IGZvciAocyBpbiBpKSBuID0gaVtzXSwgZVtzXSAhPT0gbiAmJiAoYVtzXSB8fCAodC5meC5zdGVwW3NdIHx8ICFpc05hTihwYXJzZUZsb2F0KG4pKSkgJiYgKG9bc10gPSBuKSk7IHJldHVybiBvIH0gdmFyIG4gPSBbImFkZCIsICJyZW1vdmUiLCAidG9nZ2xlIl0sIGEgPSB7IGJvcmRlcjogMSwgYm9yZGVyQm90dG9tOiAxLCBib3JkZXJDb2xvcjogMSwgYm9yZGVyTGVmdDogMSwgYm9yZGVyUmlnaHQ6IDEsIGJvcmRlclRvcDogMSwgYm9yZGVyV2lkdGg6IDEsIG1hcmdpbjogMSwgcGFkZGluZzogMSB9OyB0LmVhY2goWyJib3JkZXJMZWZ0U3R5bGUiLCAiYm9yZGVyUmlnaHRTdHlsZSIsICJib3JkZXJCb3R0b21TdHlsZSIsICJib3JkZXJUb3BTdHlsZSJdLCBmdW5jdGlvbiAoZSwgaSkgeyB0LmZ4LnN0ZXBbaV0gPSBmdW5jdGlvbiAodCkgeyAoIm5vbmUiICE9PSB0LmVuZCAmJiAhdC5zZXRBdHRyIHx8IDEgPT09IHQucG9zICYmICF0LnNldEF0dHIpICYmIChqUXVlcnkuc3R5bGUodC5lbGVtLCBpLCB0LmVuZCksIHQuc2V0QXR0ciA9ICEwKSB9IH0pLCB0LmZuLmFkZEJhY2sgfHwgKHQuZm4uYWRkQmFjayA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0aGlzLmFkZChudWxsID09IHQgPyB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKHQpKSB9KSwgdC5lZmZlY3RzLmFuaW1hdGVDbGFzcyA9IGZ1bmN0aW9uIChlLCBhLCBvLCByKSB7IHZhciBsID0gdC5zcGVlZChhLCBvLCByKTsgcmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24gKCkgeyB2YXIgYSwgbyA9IHQodGhpcyksIHIgPSBvLmF0dHIoImNsYXNzIikgfHwgIiIsIGggPSBsLmNoaWxkcmVuID8gby5maW5kKCIqIikuYWRkQmFjaygpIDogbzsgaCA9IGgubWFwKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpOyByZXR1cm4geyBlbDogZSwgc3RhcnQ6IGkodGhpcykgfSB9KSwgYSA9IGZ1bmN0aW9uICgpIHsgdC5lYWNoKG4sIGZ1bmN0aW9uICh0LCBpKSB7IGVbaV0gJiYgb1tpICsgIkNsYXNzIl0oZVtpXSkgfSkgfSwgYSgpLCBoID0gaC5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lbmQgPSBpKHRoaXMuZWxbMF0pLCB0aGlzLmRpZmYgPSBzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKSwgdGhpcyB9KSwgby5hdHRyKCJjbGFzcyIsIHIpLCBoID0gaC5tYXAoZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMsIGkgPSB0LkRlZmVycmVkKCksIHMgPSB0LmV4dGVuZCh7fSwgbCwgeyBxdWV1ZTogITEsIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IGkucmVzb2x2ZShlKSB9IH0pOyByZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZiwgcyksIGkucHJvbWlzZSgpIH0pLCB0LndoZW4uYXBwbHkodCwgaC5nZXQoKSkuZG9uZShmdW5jdGlvbiAoKSB7IGEoKSwgdC5lYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMuZWw7IHQuZWFjaCh0aGlzLmRpZmYsIGZ1bmN0aW9uICh0KSB7IGUuY3NzKHQsICIiKSB9KSB9KSwgbC5jb21wbGV0ZS5jYWxsKG9bMF0pIH0pIH0pIH0sIHQuZm4uZXh0ZW5kKHsgYWRkQ2xhc3M6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBmdW5jdGlvbiAoaSwgcywgbiwgYSkgeyByZXR1cm4gcyA/IHQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLCB7IGFkZDogaSB9LCBzLCBuLCBhKSA6IGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9IH0odC5mbi5hZGRDbGFzcyksIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZnVuY3Rpb24gKGksIHMsIG4sIGEpIHsgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gdC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMsIHsgcmVtb3ZlOiBpIH0sIHMsIG4sIGEpIDogZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0gfSh0LmZuLnJlbW92ZUNsYXNzKSwgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uIChpKSB7IHJldHVybiBmdW5jdGlvbiAocywgbiwgYSwgbywgcikgeyByZXR1cm4gImJvb2xlYW4iID09IHR5cGVvZiBuIHx8IG4gPT09IGUgPyBhID8gdC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMsIG4gPyB7IGFkZDogcyB9IDogeyByZW1vdmU6IHMgfSwgYSwgbywgcikgOiBpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcywgeyB0b2dnbGU6IHMgfSwgbiwgYSwgbykgfSB9KHQuZm4udG9nZ2xlQ2xhc3MpLCBzd2l0Y2hDbGFzczogZnVuY3Rpb24gKGUsIGksIHMsIG4sIGEpIHsgcmV0dXJuIHQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLCB7IGFkZDogaSwgcmVtb3ZlOiBlIH0sIHMsIG4sIGEpIH0gfSkgfSgpLCBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIHMoZSwgaSwgcywgbikgeyByZXR1cm4gdC5pc1BsYWluT2JqZWN0KGUpICYmIChpID0gZSwgZSA9IGUuZWZmZWN0KSwgZSA9IHsgZWZmZWN0OiBlIH0sIG51bGwgPT0gaSAmJiAoaSA9IHt9KSwgdC5pc0Z1bmN0aW9uKGkpICYmIChuID0gaSwgcyA9IG51bGwsIGkgPSB7fSksICgibnVtYmVyIiA9PSB0eXBlb2YgaSB8fCB0LmZ4LnNwZWVkc1tpXSkgJiYgKG4gPSBzLCBzID0gaSwgaSA9IHt9KSwgdC5pc0Z1bmN0aW9uKHMpICYmIChuID0gcywgcyA9IG51bGwpLCBpICYmIHQuZXh0ZW5kKGUsIGkpLCBzID0gcyB8fCBpLmR1cmF0aW9uLCBlLmR1cmF0aW9uID0gdC5meC5vZmYgPyAwIDogIm51bWJlciIgPT0gdHlwZW9mIHMgPyBzIDogcyBpbiB0LmZ4LnNwZWVkcyA/IHQuZnguc3BlZWRzW3NdIDogdC5meC5zcGVlZHMuX2RlZmF1bHQsIGUuY29tcGxldGUgPSBuIHx8IGkuY29tcGxldGUsIGUgfSBmdW5jdGlvbiBuKGUpIHsgcmV0dXJuICFlIHx8ICJudW1iZXIiID09IHR5cGVvZiBlIHx8IHQuZnguc3BlZWRzW2VdID8gITAgOiAic3RyaW5nIiAhPSB0eXBlb2YgZSB8fCB0LmVmZmVjdHMuZWZmZWN0W2VdID8gdC5pc0Z1bmN0aW9uKGUpID8gITAgOiAib2JqZWN0IiAhPSB0eXBlb2YgZSB8fCBlLmVmZmVjdCA/ICExIDogITAgOiAhMCB9IHQuZXh0ZW5kKHQuZWZmZWN0cywgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgc2F2ZTogZnVuY3Rpb24gKHQsIGUpIHsgZm9yICh2YXIgcyA9IDA7IGUubGVuZ3RoID4gczsgcysrKSBudWxsICE9PSBlW3NdICYmIHQuZGF0YShpICsgZVtzXSwgdFswXS5zdHlsZVtlW3NdXSkgfSwgcmVzdG9yZTogZnVuY3Rpb24gKHQsIHMpIHsgdmFyIG4sIGE7IGZvciAoYSA9IDA7IHMubGVuZ3RoID4gYTsgYSsrKSBudWxsICE9PSBzW2FdICYmIChuID0gdC5kYXRhKGkgKyBzW2FdKSwgbiA9PT0gZSAmJiAobiA9ICIiKSwgdC5jc3Moc1thXSwgbikpIH0sIHNldE1vZGU6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiAidG9nZ2xlIiA9PT0gZSAmJiAoZSA9IHQuaXMoIjpoaWRkZW4iKSA/ICJzaG93IiA6ICJoaWRlIiksIGUgfSwgZ2V0QmFzZWxpbmU6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpLCBzOyBzd2l0Y2ggKHRbMF0pIHsgY2FzZSAidG9wIjogaSA9IDA7IGJyZWFrOyBjYXNlICJtaWRkbGUiOiBpID0gLjU7IGJyZWFrOyBjYXNlICJib3R0b20iOiBpID0gMTsgYnJlYWs7IGRlZmF1bHQ6IGkgPSB0WzBdIC8gZS5oZWlnaHQgfSBzd2l0Y2ggKHRbMV0pIHsgY2FzZSAibGVmdCI6IHMgPSAwOyBicmVhazsgY2FzZSAiY2VudGVyIjogcyA9IC41OyBicmVhazsgY2FzZSAicmlnaHQiOiBzID0gMTsgYnJlYWs7IGRlZmF1bHQ6IHMgPSB0WzFdIC8gZS53aWR0aCB9IHJldHVybiB7IHg6IHMsIHk6IGkgfSB9LCBjcmVhdGVXcmFwcGVyOiBmdW5jdGlvbiAoZSkgeyBpZiAoZS5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKSByZXR1cm4gZS5wYXJlbnQoKTsgdmFyIGkgPSB7IHdpZHRoOiBlLm91dGVyV2lkdGgoITApLCBoZWlnaHQ6IGUub3V0ZXJIZWlnaHQoITApLCAiZmxvYXQiOiBlLmNzcygiZmxvYXQiKSB9LCBzID0gdCgiPGRpdj48XC9kaXY+IikuYWRkQ2xhc3MoInVpLWVmZmVjdHMtd3JhcHBlciIpLmNzcyh7IGZvbnRTaXplOiAiMTAwJSIsIGJhY2tncm91bmQ6ICJ0cmFuc3BhcmVudCIsIGJvcmRlcjogIm5vbmUiLCBtYXJnaW46IDAsIHBhZGRpbmc6IDAgfSksIG4gPSB7IHdpZHRoOiBlLndpZHRoKCksIGhlaWdodDogZS5oZWlnaHQoKSB9LCBhID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsgdHJ5IHsgYS5pZCB9IGNhdGNoIChvKSB7IGEgPSBkb2N1bWVudC5ib2R5IH0gcmV0dXJuIGUud3JhcChzKSwgKGVbMF0gPT09IGEgfHwgdC5jb250YWlucyhlWzBdLCBhKSkgJiYgdChhKS5mb2N1cygpLCBzID0gZS5wYXJlbnQoKSwgInN0YXRpYyIgPT09IGUuY3NzKCJwb3NpdGlvbiIpID8gKHMuY3NzKHsgcG9zaXRpb246ICJyZWxhdGl2ZSIgfSksIGUuY3NzKHsgcG9zaXRpb246ICJyZWxhdGl2ZSIgfSkpIDogKHQuZXh0ZW5kKGksIHsgcG9zaXRpb246IGUuY3NzKCJwb3NpdGlvbiIpLCB6SW5kZXg6IGUuY3NzKCJ6LWluZGV4IikgfSksIHQuZWFjaChbInRvcCIsICJsZWZ0IiwgImJvdHRvbSIsICJyaWdodCJdLCBmdW5jdGlvbiAodCwgcykgeyBpW3NdID0gZS5jc3MocyksIGlzTmFOKHBhcnNlSW50KGlbc10sIDEwKSkgJiYgKGlbc10gPSAiYXV0byIpIH0pLCBlLmNzcyh7IHBvc2l0aW9uOiAicmVsYXRpdmUiLCB0b3A6IDAsIGxlZnQ6IDAsIHJpZ2h0OiAiYXV0byIsIGJvdHRvbTogImF1dG8iIH0pKSwgZS5jc3MobiksIHMuY3NzKGkpLnNob3coKSB9LCByZW1vdmVXcmFwcGVyOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7IHJldHVybiBlLnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIikgJiYgKGUucGFyZW50KCkucmVwbGFjZVdpdGgoZSksIChlWzBdID09PSBpIHx8IHQuY29udGFpbnMoZVswXSwgaSkpICYmIHQoaSkuZm9jdXMoKSksIGUgfSwgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gKGUsIGksIHMsIG4pIHsgcmV0dXJuIG4gPSBuIHx8IHt9LCB0LmVhY2goaSwgZnVuY3Rpb24gKHQsIGkpIHsgdmFyIGEgPSBlLmNzc1VuaXQoaSk7IGFbMF0gPiAwICYmIChuW2ldID0gYVswXSAqIHMgKyBhWzFdKSB9KSwgbiB9IH0pLCB0LmZuLmV4dGVuZCh7IGVmZmVjdDogZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBlKGUpIHsgZnVuY3Rpb24gcygpIHsgdC5pc0Z1bmN0aW9uKGEpICYmIGEuY2FsbChuWzBdKSwgdC5pc0Z1bmN0aW9uKGUpICYmIGUoKSB9IHZhciBuID0gdCh0aGlzKSwgYSA9IGkuY29tcGxldGUsIHIgPSBpLm1vZGU7IChuLmlzKCI6aGlkZGVuIikgPyAiaGlkZSIgPT09IHIgOiAic2hvdyIgPT09IHIpID8gKG5bcl0oKSwgcygpKSA6IG8uY2FsbChuWzBdLCBpLCBzKSB9IHZhciBpID0gcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBuID0gaS5tb2RlLCBhID0gaS5xdWV1ZSwgbyA9IHQuZWZmZWN0cy5lZmZlY3RbaS5lZmZlY3RdOyByZXR1cm4gdC5meC5vZmYgfHwgIW8gPyBuID8gdGhpc1tuXShpLmR1cmF0aW9uLCBpLmNvbXBsZXRlKSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IGkuY29tcGxldGUgJiYgaS5jb21wbGV0ZS5jYWxsKHRoaXMpIH0pIDogYSA9PT0gITEgPyB0aGlzLmVhY2goZSkgOiB0aGlzLnF1ZXVlKGEgfHwgImZ4IiwgZSkgfSwgc2hvdzogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IGlmIChuKGUpKSByZXR1cm4gdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB2YXIgaSA9IHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgcmV0dXJuIGkubW9kZSA9ICJzaG93IiwgdGhpcy5lZmZlY3QuY2FsbCh0aGlzLCBpKSB9IH0odC5mbi5zaG93KSwgaGlkZTogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IGlmIChuKGUpKSByZXR1cm4gdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB2YXIgaSA9IHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgcmV0dXJuIGkubW9kZSA9ICJoaWRlIiwgdGhpcy5lZmZlY3QuY2FsbCh0aGlzLCBpKSB9IH0odC5mbi5oaWRlKSwgdG9nZ2xlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgaWYgKG4oZSkgfHwgImJvb2xlYW4iID09IHR5cGVvZiBlKSByZXR1cm4gdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB2YXIgaSA9IHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgcmV0dXJuIGkubW9kZSA9ICJ0b2dnbGUiLCB0aGlzLmVmZmVjdC5jYWxsKHRoaXMsIGkpIH0gfSh0LmZuLnRvZ2dsZSksIGNzc1VuaXQ6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcy5jc3MoZSksIHMgPSBbXTsgcmV0dXJuIHQuZWFjaChbImVtIiwgInB4IiwgIiUiLCAicHQiXSwgZnVuY3Rpb24gKHQsIGUpIHsgaS5pbmRleE9mKGUpID4gMCAmJiAocyA9IFtwYXJzZUZsb2F0KGkpLCBlXSkgfSksIHMgfSB9KSB9KCksIGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB7fTsgdC5lYWNoKFsiUXVhZCIsICJDdWJpYyIsICJRdWFydCIsICJRdWludCIsICJFeHBvIl0sIGZ1bmN0aW9uICh0LCBpKSB7IGVbaV0gPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gTWF0aC5wb3coZSwgdCArIDIpIH0gfSksIHQuZXh0ZW5kKGUsIHsgU2luZTogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIDEgLSBNYXRoLmNvcyh0ICogTWF0aC5QSSAvIDIpIH0sIENpcmM6IGZ1bmN0aW9uICh0KSB7IHJldHVybiAxIC0gTWF0aC5zcXJ0KDEgLSB0ICogdCkgfSwgRWxhc3RpYzogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIDAgPT09IHQgfHwgMSA9PT0gdCA/IHQgOiAtTWF0aC5wb3coMiwgOCAqICh0IC0gMSkpICogTWF0aC5zaW4oKDgwICogKHQgLSAxKSAtIDcuNSkgKiBNYXRoLlBJIC8gMTUpIH0sIEJhY2s6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0ICogdCAqICgzICogdCAtIDIpIH0sIEJvdW5jZTogZnVuY3Rpb24gKHQpIHsgZm9yICh2YXIgZSwgaSA9IDQ7ICgoZSA9IE1hdGgucG93KDIsIC0taSkpIC0gMSkgLyAxMSA+IHQ7KTsgcmV0dXJuIDEgLyBNYXRoLnBvdyg0LCAzIC0gaSkgLSA3LjU2MjUgKiBNYXRoLnBvdygoMyAqIGUgLSAyKSAvIDIyIC0gdCwgMikgfSB9KSwgdC5lYWNoKGUsIGZ1bmN0aW9uIChlLCBpKSB7IHQuZWFzaW5nWyJlYXNlSW4iICsgZV0gPSBpLCB0LmVhc2luZ1siZWFzZU91dCIgKyBlXSA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiAxIC0gaSgxIC0gdCkgfSwgdC5lYXNpbmdbImVhc2VJbk91dCIgKyBlXSA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiAuNSA+IHQgPyBpKDIgKiB0KSAvIDIgOiAxIC0gaSgtMiAqIHQgKyAyKSAvIDIgfSB9KSB9KCkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IHZhciBlID0gL3VwfGRvd258dmVydGljYWwvLCBpID0gL3VwfGxlZnR8dmVydGljYWx8aG9yaXpvbnRhbC87IHQuZWZmZWN0cy5lZmZlY3QuYmxpbmQgPSBmdW5jdGlvbiAocywgbikgeyB2YXIgYSwgbywgciwgbCA9IHQodGhpcyksIGggPSBbInBvc2l0aW9uIiwgInRvcCIsICJib3R0b20iLCAibGVmdCIsICJyaWdodCIsICJoZWlnaHQiLCAid2lkdGgiXSwgYyA9IHQuZWZmZWN0cy5zZXRNb2RlKGwsIHMubW9kZSB8fCAiaGlkZSIpLCB1ID0gcy5kaXJlY3Rpb24gfHwgInVwIiwgZCA9IGUudGVzdCh1KSwgcCA9IGQgPyAiaGVpZ2h0IiA6ICJ3aWR0aCIsIGYgPSBkID8gInRvcCIgOiAibGVmdCIsIGcgPSBpLnRlc3QodSksIG0gPSB7fSwgdiA9ICJzaG93IiA9PT0gYzsgbC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpID8gdC5lZmZlY3RzLnNhdmUobC5wYXJlbnQoKSwgaCkgOiB0LmVmZmVjdHMuc2F2ZShsLCBoKSwgbC5zaG93KCksIGEgPSB0LmVmZmVjdHMuY3JlYXRlV3JhcHBlcihsKS5jc3MoeyBvdmVyZmxvdzogImhpZGRlbiIgfSksIG8gPSBhW3BdKCksIHIgPSBwYXJzZUZsb2F0KGEuY3NzKGYpKSB8fCAwLCBtW3BdID0gdiA/IG8gOiAwLCBnIHx8IChsLmNzcyhkID8gImJvdHRvbSIgOiAicmlnaHQiLCAwKS5jc3MoZCA/ICJ0b3AiIDogImxlZnQiLCAiYXV0byIpLmNzcyh7IHBvc2l0aW9uOiAiYWJzb2x1dGUiIH0pLCBtW2ZdID0gdiA/IHIgOiBvICsgciksIHYgJiYgKGEuY3NzKHAsIDApLCBnIHx8IGEuY3NzKGYsIHIgKyBvKSksIGEuYW5pbWF0ZShtLCB7IGR1cmF0aW9uOiBzLmR1cmF0aW9uLCBlYXNpbmc6IHMuZWFzaW5nLCBxdWV1ZTogITEsIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7ICJoaWRlIiA9PT0gYyAmJiBsLmhpZGUoKSwgdC5lZmZlY3RzLnJlc3RvcmUobCwgaCksIHQuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGwpLCBuKCkgfSB9KSB9IH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyB0LmVmZmVjdHMuZWZmZWN0LmJvdW5jZSA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzLCBuLCBhLCBvID0gdCh0aGlzKSwgciA9IFsicG9zaXRpb24iLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgImhlaWdodCIsICJ3aWR0aCJdLCBsID0gdC5lZmZlY3RzLnNldE1vZGUobywgZS5tb2RlIHx8ICJlZmZlY3QiKSwgaCA9ICJoaWRlIiA9PT0gbCwgYyA9ICJzaG93IiA9PT0gbCwgdSA9IGUuZGlyZWN0aW9uIHx8ICJ1cCIsIGQgPSBlLmRpc3RhbmNlLCBwID0gZS50aW1lcyB8fCA1LCBmID0gMiAqIHAgKyAoYyB8fCBoID8gMSA6IDApLCBnID0gZS5kdXJhdGlvbiAvIGYsIG0gPSBlLmVhc2luZywgdiA9ICJ1cCIgPT09IHUgfHwgImRvd24iID09PSB1ID8gInRvcCIgOiAibGVmdCIsIF8gPSAidXAiID09PSB1IHx8ICJsZWZ0IiA9PT0gdSwgYiA9IG8ucXVldWUoKSwgeSA9IGIubGVuZ3RoOyBmb3IgKChjIHx8IGgpICYmIHIucHVzaCgib3BhY2l0eSIpLCB0LmVmZmVjdHMuc2F2ZShvLCByKSwgby5zaG93KCksIHQuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLCBkIHx8IChkID0gb1sidG9wIiA9PT0gdiA/ICJvdXRlckhlaWdodCIgOiAib3V0ZXJXaWR0aCJdKCkgLyAzKSwgYyAmJiAoYSA9IHsgb3BhY2l0eTogMSB9LCBhW3ZdID0gMCwgby5jc3MoIm9wYWNpdHkiLCAwKS5jc3ModiwgXyA/IDIgKiAtZCA6IDIgKiBkKS5hbmltYXRlKGEsIGcsIG0pKSwgaCAmJiAoZCAvPSBNYXRoLnBvdygyLCBwIC0gMSkpLCBhID0ge30sIGFbdl0gPSAwLCBzID0gMDsgcCA+IHM7IHMrKykgbiA9IHt9LCBuW3ZdID0gKF8gPyAiLT0iIDogIis9IikgKyBkLCBvLmFuaW1hdGUobiwgZywgbSkuYW5pbWF0ZShhLCBnLCBtKSwgZCA9IGggPyAyICogZCA6IGQgLyAyOyBoICYmIChuID0geyBvcGFjaXR5OiAwIH0sIG5bdl0gPSAoXyA/ICItPSIgOiAiKz0iKSArIGQsIG8uYW5pbWF0ZShuLCBnLCBtKSksIG8ucXVldWUoZnVuY3Rpb24gKCkgeyBoICYmIG8uaGlkZSgpLCB0LmVmZmVjdHMucmVzdG9yZShvLCByKSwgdC5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksIGkoKSB9KSwgeSA+IDEgJiYgYi5zcGxpY2UuYXBwbHkoYiwgWzEsIDBdLmNvbmNhdChiLnNwbGljZSh5LCBmICsgMSkpKSwgby5kZXF1ZXVlKCkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC5jbGlwID0gZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMsIG4sIGEsIG8gPSB0KHRoaXMpLCByID0gWyJwb3NpdGlvbiIsICJ0b3AiLCAiYm90dG9tIiwgImxlZnQiLCAicmlnaHQiLCAiaGVpZ2h0IiwgIndpZHRoIl0sIGwgPSB0LmVmZmVjdHMuc2V0TW9kZShvLCBlLm1vZGUgfHwgImhpZGUiKSwgaCA9ICJzaG93IiA9PT0gbCwgYyA9IGUuZGlyZWN0aW9uIHx8ICJ2ZXJ0aWNhbCIsIHUgPSAidmVydGljYWwiID09PSBjLCBkID0gdSA/ICJoZWlnaHQiIDogIndpZHRoIiwgcCA9IHUgPyAidG9wIiA6ICJsZWZ0IiwgZiA9IHt9OyB0LmVmZmVjdHMuc2F2ZShvLCByKSwgby5zaG93KCksIHMgPSB0LmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKS5jc3MoeyBvdmVyZmxvdzogImhpZGRlbiIgfSksIG4gPSAiSU1HIiA9PT0gb1swXS50YWdOYW1lID8gcyA6IG8sIGEgPSBuW2RdKCksIGggJiYgKG4uY3NzKGQsIDApLCBuLmNzcyhwLCBhIC8gMikpLCBmW2RdID0gaCA/IGEgOiAwLCBmW3BdID0gaCA/IDAgOiBhIC8gMiwgbi5hbmltYXRlKGYsIHsgcXVldWU6ICExLCBkdXJhdGlvbjogZS5kdXJhdGlvbiwgZWFzaW5nOiBlLmVhc2luZywgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgaCB8fCBvLmhpZGUoKSwgdC5lZmZlY3RzLnJlc3RvcmUobywgciksIHQuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKG8pLCBpKCkgfSB9KSB9IH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyB0LmVmZmVjdHMuZWZmZWN0LmRyb3AgPSBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcywgbiA9IHQodGhpcyksIGEgPSBbInBvc2l0aW9uIiwgInRvcCIsICJib3R0b20iLCAibGVmdCIsICJyaWdodCIsICJvcGFjaXR5IiwgImhlaWdodCIsICJ3aWR0aCJdLCBvID0gdC5lZmZlY3RzLnNldE1vZGUobiwgZS5tb2RlIHx8ICJoaWRlIiksIHIgPSAic2hvdyIgPT09IG8sIGwgPSBlLmRpcmVjdGlvbiB8fCAibGVmdCIsIGggPSAidXAiID09PSBsIHx8ICJkb3duIiA9PT0gbCA/ICJ0b3AiIDogImxlZnQiLCBjID0gInVwIiA9PT0gbCB8fCAibGVmdCIgPT09IGwgPyAicG9zIiA6ICJuZWciLCB1ID0geyBvcGFjaXR5OiByID8gMSA6IDAgfTsgdC5lZmZlY3RzLnNhdmUobiwgYSksIG4uc2hvdygpLCB0LmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKSwgcyA9IGUuZGlzdGFuY2UgfHwgblsidG9wIiA9PT0gaCA/ICJvdXRlckhlaWdodCIgOiAib3V0ZXJXaWR0aCJdKCEwKSAvIDIsIHIgJiYgbi5jc3MoIm9wYWNpdHkiLCAwKS5jc3MoaCwgInBvcyIgPT09IGMgPyAtcyA6IHMpLCB1W2hdID0gKHIgPyAicG9zIiA9PT0gYyA/ICIrPSIgOiAiLT0iIDogInBvcyIgPT09IGMgPyAiLT0iIDogIis9IikgKyBzLCBuLmFuaW1hdGUodSwgeyBxdWV1ZTogITEsIGR1cmF0aW9uOiBlLmR1cmF0aW9uLCBlYXNpbmc6IGUuZWFzaW5nLCBjb21wbGV0ZTogZnVuY3Rpb24gKCkgeyAiaGlkZSIgPT09IG8gJiYgbi5oaWRlKCksIHQuZWZmZWN0cy5yZXN0b3JlKG4sIGEpLCB0LmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSwgaSgpIH0gfSkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC5leHBsb2RlID0gZnVuY3Rpb24gKGUsIGkpIHsgZnVuY3Rpb24gcygpIHsgYi5wdXNoKHRoaXMpLCBiLmxlbmd0aCA9PT0gdSAqIGQgJiYgbigpIH0gZnVuY3Rpb24gbigpIHsgcC5jc3MoeyB2aXNpYmlsaXR5OiAidmlzaWJsZSIgfSksIHQoYikucmVtb3ZlKCksIGcgfHwgcC5oaWRlKCksIGkoKSB9IHZhciBhLCBvLCByLCBsLCBoLCBjLCB1ID0gZS5waWVjZXMgPyBNYXRoLnJvdW5kKE1hdGguc3FydChlLnBpZWNlcykpIDogMywgZCA9IHUsIHAgPSB0KHRoaXMpLCBmID0gdC5lZmZlY3RzLnNldE1vZGUocCwgZS5tb2RlIHx8ICJoaWRlIiksIGcgPSAic2hvdyIgPT09IGYsIG0gPSBwLnNob3coKS5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIikub2Zmc2V0KCksIHYgPSBNYXRoLmNlaWwocC5vdXRlcldpZHRoKCkgLyBkKSwgXyA9IE1hdGguY2VpbChwLm91dGVySGVpZ2h0KCkgLyB1KSwgYiA9IFtdOyBmb3IgKGEgPSAwOyB1ID4gYTsgYSsrKSBmb3IgKGwgPSBtLnRvcCArIGEgKiBfLCBjID0gYSAtICh1IC0gMSkgLyAyLCBvID0gMDsgZCA+IG87IG8rKykgciA9IG0ubGVmdCArIG8gKiB2LCBoID0gbyAtIChkIC0gMSkgLyAyLCBwLmNsb25lKCkuYXBwZW5kVG8oImJvZHkiKS53cmFwKCI8ZGl2PjxcL2Rpdj4iKS5jc3MoeyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogInZpc2libGUiLCBsZWZ0OiAtbyAqIHYsIHRvcDogLWEgKiBfIH0pLnBhcmVudCgpLmFkZENsYXNzKCJ1aS1lZmZlY3RzLWV4cGxvZGUiKS5jc3MoeyBwb3NpdGlvbjogImFic29sdXRlIiwgb3ZlcmZsb3c6ICJoaWRkZW4iLCB3aWR0aDogdiwgaGVpZ2h0OiBfLCBsZWZ0OiByICsgKGcgPyBoICogdiA6IDApLCB0b3A6IGwgKyAoZyA/IGMgKiBfIDogMCksIG9wYWNpdHk6IGcgPyAwIDogMSB9KS5hbmltYXRlKHsgbGVmdDogciArIChnID8gMCA6IGggKiB2KSwgdG9wOiBsICsgKGcgPyAwIDogYyAqIF8pLCBvcGFjaXR5OiBnID8gMSA6IDAgfSwgZS5kdXJhdGlvbiB8fCA1MDAsIGUuZWFzaW5nLCBzKSB9IH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyB0LmVmZmVjdHMuZWZmZWN0LmZhZGUgPSBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQodGhpcyksIG4gPSB0LmVmZmVjdHMuc2V0TW9kZShzLCBlLm1vZGUgfHwgInRvZ2dsZSIpOyBzLmFuaW1hdGUoeyBvcGFjaXR5OiBuIH0sIHsgcXVldWU6ICExLCBkdXJhdGlvbjogZS5kdXJhdGlvbiwgZWFzaW5nOiBlLmVhc2luZywgY29tcGxldGU6IGkgfSkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC5mb2xkID0gZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMsIG4sIGEgPSB0KHRoaXMpLCBvID0gWyJwb3NpdGlvbiIsICJ0b3AiLCAiYm90dG9tIiwgImxlZnQiLCAicmlnaHQiLCAiaGVpZ2h0IiwgIndpZHRoIl0sIHIgPSB0LmVmZmVjdHMuc2V0TW9kZShhLCBlLm1vZGUgfHwgImhpZGUiKSwgbCA9ICJzaG93IiA9PT0gciwgaCA9ICJoaWRlIiA9PT0gciwgYyA9IGUuc2l6ZSB8fCAxNSwgdSA9IC8oWzAtOV0rKSUvLmV4ZWMoYyksIGQgPSAhIWUuaG9yaXpGaXJzdCwgcCA9IGwgIT09IGQsIGYgPSBwID8gWyJ3aWR0aCIsICJoZWlnaHQiXSA6IFsiaGVpZ2h0IiwgIndpZHRoIl0sIGcgPSBlLmR1cmF0aW9uIC8gMiwgbSA9IHt9LCB2ID0ge307IHQuZWZmZWN0cy5zYXZlKGEsIG8pLCBhLnNob3coKSwgcyA9IHQuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGEpLmNzcyh7IG92ZXJmbG93OiAiaGlkZGVuIiB9KSwgbiA9IHAgPyBbcy53aWR0aCgpLCBzLmhlaWdodCgpXSA6IFtzLmhlaWdodCgpLCBzLndpZHRoKCldLCB1ICYmIChjID0gcGFyc2VJbnQodVsxXSwgMTApIC8gMTAwICogbltoID8gMCA6IDFdKSwgbCAmJiBzLmNzcyhkID8geyBoZWlnaHQ6IDAsIHdpZHRoOiBjIH0gOiB7IGhlaWdodDogYywgd2lkdGg6IDAgfSksIG1bZlswXV0gPSBsID8gblswXSA6IGMsIHZbZlsxXV0gPSBsID8gblsxXSA6IDAsIHMuYW5pbWF0ZShtLCBnLCBlLmVhc2luZykuYW5pbWF0ZSh2LCBnLCBlLmVhc2luZywgZnVuY3Rpb24gKCkgeyBoICYmIGEuaGlkZSgpLCB0LmVmZmVjdHMucmVzdG9yZShhLCBvKSwgdC5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYSksIGkoKSB9KSB9IH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyB0LmVmZmVjdHMuZWZmZWN0LmhpZ2hsaWdodCA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gdCh0aGlzKSwgbiA9IFsiYmFja2dyb3VuZEltYWdlIiwgImJhY2tncm91bmRDb2xvciIsICJvcGFjaXR5Il0sIGEgPSB0LmVmZmVjdHMuc2V0TW9kZShzLCBlLm1vZGUgfHwgInNob3ciKSwgbyA9IHsgYmFja2dyb3VuZENvbG9yOiBzLmNzcygiYmFja2dyb3VuZENvbG9yIikgfTsgImhpZGUiID09PSBhICYmIChvLm9wYWNpdHkgPSAwKSwgdC5lZmZlY3RzLnNhdmUocywgbiksIHMuc2hvdygpLmNzcyh7IGJhY2tncm91bmRJbWFnZTogIm5vbmUiLCBiYWNrZ3JvdW5kQ29sb3I6IGUuY29sb3IgfHwgIiNmZmZmOTkiIH0pLmFuaW1hdGUobywgeyBxdWV1ZTogITEsIGR1cmF0aW9uOiBlLmR1cmF0aW9uLCBlYXNpbmc6IGUuZWFzaW5nLCBjb21wbGV0ZTogZnVuY3Rpb24gKCkgeyAiaGlkZSIgPT09IGEgJiYgcy5oaWRlKCksIHQuZWZmZWN0cy5yZXN0b3JlKHMsIG4pLCBpKCkgfSB9KSB9IH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyB0LmVmZmVjdHMuZWZmZWN0LnB1bHNhdGUgPSBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcywgbiA9IHQodGhpcyksIGEgPSB0LmVmZmVjdHMuc2V0TW9kZShuLCBlLm1vZGUgfHwgInNob3ciKSwgbyA9ICJzaG93IiA9PT0gYSwgciA9ICJoaWRlIiA9PT0gYSwgbCA9IG8gfHwgImhpZGUiID09PSBhLCBoID0gMiAqIChlLnRpbWVzIHx8IDUpICsgKGwgPyAxIDogMCksIGMgPSBlLmR1cmF0aW9uIC8gaCwgdSA9IDAsIGQgPSBuLnF1ZXVlKCksIHAgPSBkLmxlbmd0aDsgZm9yICgobyB8fCAhbi5pcygiOnZpc2libGUiKSkgJiYgKG4uY3NzKCJvcGFjaXR5IiwgMCkuc2hvdygpLCB1ID0gMSksIHMgPSAxOyBoID4gczsgcysrKSBuLmFuaW1hdGUoeyBvcGFjaXR5OiB1IH0sIGMsIGUuZWFzaW5nKSwgdSA9IDEgLSB1OyBuLmFuaW1hdGUoeyBvcGFjaXR5OiB1IH0sIGMsIGUuZWFzaW5nKSwgbi5xdWV1ZShmdW5jdGlvbiAoKSB7IHIgJiYgbi5oaWRlKCksIGkoKSB9KSwgcCA+IDEgJiYgZC5zcGxpY2UuYXBwbHkoZCwgWzEsIDBdLmNvbmNhdChkLnNwbGljZShwLCBoICsgMSkpKSwgbi5kZXF1ZXVlKCkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC5wdWZmID0gZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMgPSB0KHRoaXMpLCBuID0gdC5lZmZlY3RzLnNldE1vZGUocywgZS5tb2RlIHx8ICJoaWRlIiksIGEgPSAiaGlkZSIgPT09IG4sIG8gPSBwYXJzZUludChlLnBlcmNlbnQsIDEwKSB8fCAxNTAsIHIgPSBvIC8gMTAwLCBsID0geyBoZWlnaHQ6IHMuaGVpZ2h0KCksIHdpZHRoOiBzLndpZHRoKCksIG91dGVySGVpZ2h0OiBzLm91dGVySGVpZ2h0KCksIG91dGVyV2lkdGg6IHMub3V0ZXJXaWR0aCgpIH07IHQuZXh0ZW5kKGUsIHsgZWZmZWN0OiAic2NhbGUiLCBxdWV1ZTogITEsIGZhZGU6ICEwLCBtb2RlOiBuLCBjb21wbGV0ZTogaSwgcGVyY2VudDogYSA/IG8gOiAxMDAsIGZyb206IGEgPyBsIDogeyBoZWlnaHQ6IGwuaGVpZ2h0ICogciwgd2lkdGg6IGwud2lkdGggKiByLCBvdXRlckhlaWdodDogbC5vdXRlckhlaWdodCAqIHIsIG91dGVyV2lkdGg6IGwub3V0ZXJXaWR0aCAqIHIgfSB9KSwgcy5lZmZlY3QoZSkgfSwgdC5lZmZlY3RzLmVmZmVjdC5zY2FsZSA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gdCh0aGlzKSwgbiA9IHQuZXh0ZW5kKCEwLCB7fSwgZSksIGEgPSB0LmVmZmVjdHMuc2V0TW9kZShzLCBlLm1vZGUgfHwgImVmZmVjdCIpLCBvID0gcGFyc2VJbnQoZS5wZXJjZW50LCAxMCkgfHwgKDAgPT09IHBhcnNlSW50KGUucGVyY2VudCwgMTApID8gMCA6ICJoaWRlIiA9PT0gYSA/IDAgOiAxMDApLCByID0gZS5kaXJlY3Rpb24gfHwgImJvdGgiLCBsID0gZS5vcmlnaW4sIGggPSB7IGhlaWdodDogcy5oZWlnaHQoKSwgd2lkdGg6IHMud2lkdGgoKSwgb3V0ZXJIZWlnaHQ6IHMub3V0ZXJIZWlnaHQoKSwgb3V0ZXJXaWR0aDogcy5vdXRlcldpZHRoKCkgfSwgYyA9IHsgeTogImhvcml6b250YWwiICE9PSByID8gbyAvIDEwMCA6IDEsIHg6ICJ2ZXJ0aWNhbCIgIT09IHIgPyBvIC8gMTAwIDogMSB9OyBuLmVmZmVjdCA9ICJzaXplIiwgbi5xdWV1ZSA9ICExLCBuLmNvbXBsZXRlID0gaSwgImVmZmVjdCIgIT09IGEgJiYgKG4ub3JpZ2luID0gbCB8fCBbIm1pZGRsZSIsICJjZW50ZXIiXSwgbi5yZXN0b3JlID0gITApLCBuLmZyb20gPSBlLmZyb20gfHwgKCJzaG93IiA9PT0gYSA/IHsgaGVpZ2h0OiAwLCB3aWR0aDogMCwgb3V0ZXJIZWlnaHQ6IDAsIG91dGVyV2lkdGg6IDAgfSA6IGgpLCBuLnRvID0geyBoZWlnaHQ6IGguaGVpZ2h0ICogYy55LCB3aWR0aDogaC53aWR0aCAqIGMueCwgb3V0ZXJIZWlnaHQ6IGgub3V0ZXJIZWlnaHQgKiBjLnksIG91dGVyV2lkdGg6IGgub3V0ZXJXaWR0aCAqIGMueCB9LCBuLmZhZGUgJiYgKCJzaG93IiA9PT0gYSAmJiAobi5mcm9tLm9wYWNpdHkgPSAwLCBuLnRvLm9wYWNpdHkgPSAxKSwgImhpZGUiID09PSBhICYmIChuLmZyb20ub3BhY2l0eSA9IDEsIG4udG8ub3BhY2l0eSA9IDApKSwgcy5lZmZlY3QobikgfSwgdC5lZmZlY3RzLmVmZmVjdC5zaXplID0gZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMsIG4sIGEsIG8gPSB0KHRoaXMpLCByID0gWyJwb3NpdGlvbiIsICJ0b3AiLCAiYm90dG9tIiwgImxlZnQiLCAicmlnaHQiLCAid2lkdGgiLCAiaGVpZ2h0IiwgIm92ZXJmbG93IiwgIm9wYWNpdHkiXSwgbCA9IFsicG9zaXRpb24iLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgIm92ZXJmbG93IiwgIm9wYWNpdHkiXSwgaCA9IFsid2lkdGgiLCAiaGVpZ2h0IiwgIm92ZXJmbG93Il0sIGMgPSBbImZvbnRTaXplIl0sIHUgPSBbImJvcmRlclRvcFdpZHRoIiwgImJvcmRlckJvdHRvbVdpZHRoIiwgInBhZGRpbmdUb3AiLCAicGFkZGluZ0JvdHRvbSJdLCBkID0gWyJib3JkZXJMZWZ0V2lkdGgiLCAiYm9yZGVyUmlnaHRXaWR0aCIsICJwYWRkaW5nTGVmdCIsICJwYWRkaW5nUmlnaHQiXSwgcCA9IHQuZWZmZWN0cy5zZXRNb2RlKG8sIGUubW9kZSB8fCAiZWZmZWN0IiksIGYgPSBlLnJlc3RvcmUgfHwgImVmZmVjdCIgIT09IHAsIGcgPSBlLnNjYWxlIHx8ICJib3RoIiwgbSA9IGUub3JpZ2luIHx8IFsibWlkZGxlIiwgImNlbnRlciJdLCB2ID0gby5jc3MoInBvc2l0aW9uIiksIF8gPSBmID8gciA6IGwsIGIgPSB7IGhlaWdodDogMCwgd2lkdGg6IDAsIG91dGVySGVpZ2h0OiAwLCBvdXRlcldpZHRoOiAwIH07ICJzaG93IiA9PT0gcCAmJiBvLnNob3coKSwgcyA9IHsgaGVpZ2h0OiBvLmhlaWdodCgpLCB3aWR0aDogby53aWR0aCgpLCBvdXRlckhlaWdodDogby5vdXRlckhlaWdodCgpLCBvdXRlcldpZHRoOiBvLm91dGVyV2lkdGgoKSB9LCAidG9nZ2xlIiA9PT0gZS5tb2RlICYmICJzaG93IiA9PT0gcCA/IChvLmZyb20gPSBlLnRvIHx8IGIsIG8udG8gPSBlLmZyb20gfHwgcykgOiAoby5mcm9tID0gZS5mcm9tIHx8ICgic2hvdyIgPT09IHAgPyBiIDogcyksIG8udG8gPSBlLnRvIHx8ICgiaGlkZSIgPT09IHAgPyBiIDogcykpLCBhID0geyBmcm9tOiB7IHk6IG8uZnJvbS5oZWlnaHQgLyBzLmhlaWdodCwgeDogby5mcm9tLndpZHRoIC8gcy53aWR0aCB9LCB0bzogeyB5OiBvLnRvLmhlaWdodCAvIHMuaGVpZ2h0LCB4OiBvLnRvLndpZHRoIC8gcy53aWR0aCB9IH0sICgiYm94IiA9PT0gZyB8fCAiYm90aCIgPT09IGcpICYmIChhLmZyb20ueSAhPT0gYS50by55ICYmIChfID0gXy5jb25jYXQodSksIG8uZnJvbSA9IHQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sIHUsIGEuZnJvbS55LCBvLmZyb20pLCBvLnRvID0gdC5lZmZlY3RzLnNldFRyYW5zaXRpb24obywgdSwgYS50by55LCBvLnRvKSksIGEuZnJvbS54ICE9PSBhLnRvLnggJiYgKF8gPSBfLmNvbmNhdChkKSwgby5mcm9tID0gdC5lZmZlY3RzLnNldFRyYW5zaXRpb24obywgZCwgYS5mcm9tLngsIG8uZnJvbSksIG8udG8gPSB0LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLCBkLCBhLnRvLngsIG8udG8pKSksICgiY29udGVudCIgPT09IGcgfHwgImJvdGgiID09PSBnKSAmJiBhLmZyb20ueSAhPT0gYS50by55ICYmIChfID0gXy5jb25jYXQoYykuY29uY2F0KGgpLCBvLmZyb20gPSB0LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLCBjLCBhLmZyb20ueSwgby5mcm9tKSwgby50byA9IHQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sIGMsIGEudG8ueSwgby50bykpLCB0LmVmZmVjdHMuc2F2ZShvLCBfKSwgby5zaG93KCksIHQuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLCBvLmNzcygib3ZlcmZsb3ciLCAiaGlkZGVuIikuY3NzKG8uZnJvbSksIG0gJiYgKG4gPSB0LmVmZmVjdHMuZ2V0QmFzZWxpbmUobSwgcyksIG8uZnJvbS50b3AgPSAocy5vdXRlckhlaWdodCAtIG8ub3V0ZXJIZWlnaHQoKSkgKiBuLnksIG8uZnJvbS5sZWZ0ID0gKHMub3V0ZXJXaWR0aCAtIG8ub3V0ZXJXaWR0aCgpKSAqIG4ueCwgby50by50b3AgPSAocy5vdXRlckhlaWdodCAtIG8udG8ub3V0ZXJIZWlnaHQpICogbi55LCBvLnRvLmxlZnQgPSAocy5vdXRlcldpZHRoIC0gby50by5vdXRlcldpZHRoKSAqIG4ueCksIG8uY3NzKG8uZnJvbSksICgiY29udGVudCIgPT09IGcgfHwgImJvdGgiID09PSBnKSAmJiAodSA9IHUuY29uY2F0KFsibWFyZ2luVG9wIiwgIm1hcmdpbkJvdHRvbSJdKS5jb25jYXQoYyksIGQgPSBkLmNvbmNhdChbIm1hcmdpbkxlZnQiLCAibWFyZ2luUmlnaHQiXSksIGggPSByLmNvbmNhdCh1KS5jb25jYXQoZCksIG8uZmluZCgiKlt3aWR0aF0iKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGkgPSB0KHRoaXMpLCBzID0geyBoZWlnaHQ6IGkuaGVpZ2h0KCksIHdpZHRoOiBpLndpZHRoKCksIG91dGVySGVpZ2h0OiBpLm91dGVySGVpZ2h0KCksIG91dGVyV2lkdGg6IGkub3V0ZXJXaWR0aCgpIH07IGYgJiYgdC5lZmZlY3RzLnNhdmUoaSwgaCksIGkuZnJvbSA9IHsgaGVpZ2h0OiBzLmhlaWdodCAqIGEuZnJvbS55LCB3aWR0aDogcy53aWR0aCAqIGEuZnJvbS54LCBvdXRlckhlaWdodDogcy5vdXRlckhlaWdodCAqIGEuZnJvbS55LCBvdXRlcldpZHRoOiBzLm91dGVyV2lkdGggKiBhLmZyb20ueCB9LCBpLnRvID0geyBoZWlnaHQ6IHMuaGVpZ2h0ICogYS50by55LCB3aWR0aDogcy53aWR0aCAqIGEudG8ueCwgb3V0ZXJIZWlnaHQ6IHMuaGVpZ2h0ICogYS50by55LCBvdXRlcldpZHRoOiBzLndpZHRoICogYS50by54IH0sIGEuZnJvbS55ICE9PSBhLnRvLnkgJiYgKGkuZnJvbSA9IHQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksIHUsIGEuZnJvbS55LCBpLmZyb20pLCBpLnRvID0gdC5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSwgdSwgYS50by55LCBpLnRvKSksIGEuZnJvbS54ICE9PSBhLnRvLnggJiYgKGkuZnJvbSA9IHQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksIGQsIGEuZnJvbS54LCBpLmZyb20pLCBpLnRvID0gdC5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSwgZCwgYS50by54LCBpLnRvKSksIGkuY3NzKGkuZnJvbSksIGkuYW5pbWF0ZShpLnRvLCBlLmR1cmF0aW9uLCBlLmVhc2luZywgZnVuY3Rpb24gKCkgeyBmICYmIHQuZWZmZWN0cy5yZXN0b3JlKGksIGgpIH0pIH0pKSwgby5hbmltYXRlKG8udG8sIHsgcXVldWU6ICExLCBkdXJhdGlvbjogZS5kdXJhdGlvbiwgZWFzaW5nOiBlLmVhc2luZywgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgMCA9PT0gby50by5vcGFjaXR5ICYmIG8uY3NzKCJvcGFjaXR5Iiwgby5mcm9tLm9wYWNpdHkpLCAiaGlkZSIgPT09IHAgJiYgby5oaWRlKCksIHQuZWZmZWN0cy5yZXN0b3JlKG8sIF8pLCBmIHx8ICgic3RhdGljIiA9PT0gdiA/IG8uY3NzKHsgcG9zaXRpb246ICJyZWxhdGl2ZSIsIHRvcDogby50by50b3AsIGxlZnQ6IG8udG8ubGVmdCB9KSA6IHQuZWFjaChbInRvcCIsICJsZWZ0Il0sIGZ1bmN0aW9uICh0LCBlKSB7IG8uY3NzKGUsIGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gcGFyc2VJbnQoaSwgMTApLCBuID0gdCA/IG8udG8ubGVmdCA6IG8udG8udG9wOyByZXR1cm4gImF1dG8iID09PSBpID8gbiArICJweCIgOiBzICsgbiArICJweCIgfSkgfSkpLCB0LmVmZmVjdHMucmVtb3ZlV3JhcHBlcihvKSwgaSgpIH0gfSkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC5zaGFrZSA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzLCBuID0gdCh0aGlzKSwgYSA9IFsicG9zaXRpb24iLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgImhlaWdodCIsICJ3aWR0aCJdLCBvID0gdC5lZmZlY3RzLnNldE1vZGUobiwgZS5tb2RlIHx8ICJlZmZlY3QiKSwgciA9IGUuZGlyZWN0aW9uIHx8ICJsZWZ0IiwgbCA9IGUuZGlzdGFuY2UgfHwgMjAsIGggPSBlLnRpbWVzIHx8IDMsIGMgPSAyICogaCArIDEsIHUgPSBNYXRoLnJvdW5kKGUuZHVyYXRpb24gLyBjKSwgZCA9ICJ1cCIgPT09IHIgfHwgImRvd24iID09PSByID8gInRvcCIgOiAibGVmdCIsIHAgPSAidXAiID09PSByIHx8ICJsZWZ0IiA9PT0gciwgZiA9IHt9LCBnID0ge30sIG0gPSB7fSwgdiA9IG4ucXVldWUoKSwgXyA9IHYubGVuZ3RoOyBmb3IgKHQuZWZmZWN0cy5zYXZlKG4sIGEpLCBuLnNob3coKSwgdC5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobiksIGZbZF0gPSAocCA/ICItPSIgOiAiKz0iKSArIGwsIGdbZF0gPSAocCA/ICIrPSIgOiAiLT0iKSArIDIgKiBsLCBtW2RdID0gKHAgPyAiLT0iIDogIis9IikgKyAyICogbCwgbi5hbmltYXRlKGYsIHUsIGUuZWFzaW5nKSwgcyA9IDE7IGggPiBzOyBzKyspIG4uYW5pbWF0ZShnLCB1LCBlLmVhc2luZykuYW5pbWF0ZShtLCB1LCBlLmVhc2luZyk7IG4uYW5pbWF0ZShnLCB1LCBlLmVhc2luZykuYW5pbWF0ZShmLCB1IC8gMiwgZS5lYXNpbmcpLnF1ZXVlKGZ1bmN0aW9uICgpIHsgImhpZGUiID09PSBvICYmIG4uaGlkZSgpLCB0LmVmZmVjdHMucmVzdG9yZShuLCBhKSwgdC5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksIGkoKSB9KSwgXyA+IDEgJiYgdi5zcGxpY2UuYXBwbHkodiwgWzEsIDBdLmNvbmNhdCh2LnNwbGljZShfLCBjICsgMSkpKSwgbi5kZXF1ZXVlKCkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC5zbGlkZSA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzLCBuID0gdCh0aGlzKSwgYSA9IFsicG9zaXRpb24iLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgIndpZHRoIiwgImhlaWdodCJdLCBvID0gdC5lZmZlY3RzLnNldE1vZGUobiwgZS5tb2RlIHx8ICJzaG93IiksIHIgPSAic2hvdyIgPT09IG8sIGwgPSBlLmRpcmVjdGlvbiB8fCAibGVmdCIsIGggPSAidXAiID09PSBsIHx8ICJkb3duIiA9PT0gbCA/ICJ0b3AiIDogImxlZnQiLCBjID0gInVwIiA9PT0gbCB8fCAibGVmdCIgPT09IGwsIHUgPSB7fTsgdC5lZmZlY3RzLnNhdmUobiwgYSksIG4uc2hvdygpLCBzID0gZS5kaXN0YW5jZSB8fCBuWyJ0b3AiID09PSBoID8gIm91dGVySGVpZ2h0IiA6ICJvdXRlcldpZHRoIl0oITApLCB0LmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKS5jc3MoeyBvdmVyZmxvdzogImhpZGRlbiIgfSksIHIgJiYgbi5jc3MoaCwgYyA/IGlzTmFOKHMpID8gIi0iICsgcyA6IC1zIDogcyksIHVbaF0gPSAociA/IGMgPyAiKz0iIDogIi09IiA6IGMgPyAiLT0iIDogIis9IikgKyBzLCBuLmFuaW1hdGUodSwgeyBxdWV1ZTogITEsIGR1cmF0aW9uOiBlLmR1cmF0aW9uLCBlYXNpbmc6IGUuZWFzaW5nLCBjb21wbGV0ZTogZnVuY3Rpb24gKCkgeyAiaGlkZSIgPT09IG8gJiYgbi5oaWRlKCksIHQuZWZmZWN0cy5yZXN0b3JlKG4sIGEpLCB0LmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSwgaSgpIH0gfSkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC50cmFuc2ZlciA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gdCh0aGlzKSwgbiA9IHQoZS50byksIGEgPSAiZml4ZWQiID09PSBuLmNzcygicG9zaXRpb24iKSwgbyA9IHQoImJvZHkiKSwgciA9IGEgPyBvLnNjcm9sbFRvcCgpIDogMCwgbCA9IGEgPyBvLnNjcm9sbExlZnQoKSA6IDAsIGggPSBuLm9mZnNldCgpLCBjID0geyB0b3A6IGgudG9wIC0gciwgbGVmdDogaC5sZWZ0IC0gbCwgaGVpZ2h0OiBuLmlubmVySGVpZ2h0KCksIHdpZHRoOiBuLmlubmVyV2lkdGgoKSB9LCB1ID0gcy5vZmZzZXQoKSwgZCA9IHQoIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjxcL2Rpdj4iKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhlLmNsYXNzTmFtZSkuY3NzKHsgdG9wOiB1LnRvcCAtIHIsIGxlZnQ6IHUubGVmdCAtIGwsIGhlaWdodDogcy5pbm5lckhlaWdodCgpLCB3aWR0aDogcy5pbm5lcldpZHRoKCksIHBvc2l0aW9uOiBhID8gImZpeGVkIiA6ICJhYnNvbHV0ZSIgfSkuYW5pbWF0ZShjLCBlLmR1cmF0aW9uLCBlLmVhc2luZywgZnVuY3Rpb24gKCkgeyBkLnJlbW92ZSgpLCBpKCkgfSkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC53aWRnZXQoInVpLm1lbnUiLCB7IHZlcnNpb246ICIxLjEwLjQiLCBkZWZhdWx0RWxlbWVudDogIjx1bD4iLCBkZWxheTogMzAwLCBvcHRpb25zOiB7IGljb25zOiB7IHN1Ym1lbnU6ICJ1aS1pY29uLWNhcmF0LTEtZSIgfSwgbWVudXM6ICJ1bCIsIHBvc2l0aW9uOiB7IG15OiAibGVmdCB0b3AiLCBhdDogInJpZ2h0IHRvcCIgfSwgcm9sZTogIm1lbnUiLCBibHVyOiBudWxsLCBmb2N1czogbnVsbCwgc2VsZWN0OiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5hY3RpdmVNZW51ID0gdGhpcy5lbGVtZW50LCB0aGlzLm1vdXNlSGFuZGxlZCA9ICExLCB0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwgISF0aGlzLmVsZW1lbnQuZmluZCgiLnVpLWljb24iKS5sZW5ndGgpLmF0dHIoeyByb2xlOiB0aGlzLm9wdGlvbnMucm9sZSwgdGFiSW5kZXg6IDAgfSkuYmluZCgiY2xpY2siICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgdC5wcm94eShmdW5jdGlvbiAodCkgeyB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgdC5wcmV2ZW50RGVmYXVsdCgpIH0sIHRoaXMpKSwgdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwgInRydWUiKSwgdGhpcy5fb24oeyAibW91c2Vkb3duIC51aS1tZW51LWl0ZW0gPiBhIjogZnVuY3Rpb24gKHQpIHsgdC5wcmV2ZW50RGVmYXVsdCgpIH0sICJjbGljayAudWktc3RhdGUtZGlzYWJsZWQgPiBhIjogZnVuY3Rpb24gKHQpIHsgdC5wcmV2ZW50RGVmYXVsdCgpIH0sICJjbGljayAudWktbWVudS1pdGVtOmhhcyhhKSI6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdChlLnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpOyAhdGhpcy5tb3VzZUhhbmRsZWQgJiYgaS5ub3QoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLmxlbmd0aCAmJiAodGhpcy5zZWxlY3QoZSksIGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAodGhpcy5tb3VzZUhhbmRsZWQgPSAhMCksIGkuaGFzKCIudWktbWVudSIpLmxlbmd0aCA/IHRoaXMuZXhwYW5kKGUpIDogIXRoaXMuZWxlbWVudC5pcygiOmZvY3VzIikgJiYgdCh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoIi51aS1tZW51IikubGVuZ3RoICYmICh0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLCBbITBdKSwgdGhpcy5hY3RpdmUgJiYgMSA9PT0gdGhpcy5hY3RpdmUucGFyZW50cygiLnVpLW1lbnUiKS5sZW5ndGggJiYgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpKSkgfSwgIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbSI6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdChlLmN1cnJlbnRUYXJnZXQpOyBpLnNpYmxpbmdzKCkuY2hpbGRyZW4oIi51aS1zdGF0ZS1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksIHRoaXMuZm9jdXMoZSwgaSkgfSwgbW91c2VsZWF2ZTogImNvbGxhcHNlQWxsIiwgIm1vdXNlbGVhdmUgLnVpLW1lbnUiOiAiY29sbGFwc2VBbGwiLCBmb2N1czogZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGkgPSB0aGlzLmFjdGl2ZSB8fCB0aGlzLmVsZW1lbnQuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5lcSgwKTsgZSB8fCB0aGlzLmZvY3VzKHQsIGkpIH0sIGJsdXI6IGZ1bmN0aW9uIChlKSB7IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sIHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkgfHwgdGhpcy5jb2xsYXBzZUFsbChlKSB9KSB9LCBrZXlkb3duOiAiX2tleWRvd24iIH0pLCB0aGlzLnJlZnJlc2goKSwgdGhpcy5fb24odGhpcy5kb2N1bWVudCwgeyBjbGljazogZnVuY3Rpb24gKGUpIHsgdChlLnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGggfHwgdGhpcy5jb2xsYXBzZUFsbChlKSwgdGhpcy5tb3VzZUhhbmRsZWQgPSAhMSB9IH0pIH0sIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7IHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKS5maW5kKCIudWktbWVudSIpLmFkZEJhY2soKS5yZW1vdmVDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS1tZW51LWljb25zIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1leHBhbmRlZCIpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLnJlbW92ZVVuaXF1ZUlkKCkuc2hvdygpLCB0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtaXRlbSIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWl0ZW0iKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLmNoaWxkcmVuKCJhIikucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGFzcG9wdXAiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcyk7IGUuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IikgJiYgZS5yZW1vdmUoKSB9KSwgdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWRpdmlkZXIiKS5yZW1vdmVDbGFzcygidWktbWVudS1kaXZpZGVyIHVpLXdpZGdldC1jb250ZW50IikgfSwgX2tleWRvd246IGZ1bmN0aW9uIChlKSB7IGZ1bmN0aW9uIGkodCkgeyByZXR1cm4gdC5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCAiXFwkJiIpIH0gdmFyIHMsIG4sIGEsIG8sIHIsIGwgPSAhMDsgc3dpdGNoIChlLmtleUNvZGUpIHsgY2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDogdGhpcy5wcmV2aW91c1BhZ2UoZSk7IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046IHRoaXMubmV4dFBhZ2UoZSk7IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5IT01FOiB0aGlzLl9tb3ZlKCJmaXJzdCIsICJmaXJzdCIsIGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuRU5EOiB0aGlzLl9tb3ZlKCJsYXN0IiwgImxhc3QiLCBlKTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLlVQOiB0aGlzLnByZXZpb3VzKGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuRE9XTjogdGhpcy5uZXh0KGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuTEVGVDogdGhpcy5jb2xsYXBzZShlKTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOiB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpICYmIHRoaXMuZXhwYW5kKGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuRU5URVI6IGNhc2UgdC51aS5rZXlDb2RlLlNQQUNFOiB0aGlzLl9hY3RpdmF0ZShlKTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLkVTQ0FQRTogdGhpcy5jb2xsYXBzZShlKTsgYnJlYWs7IGRlZmF1bHQ6IGwgPSAhMSwgbiA9IHRoaXMucHJldmlvdXNGaWx0ZXIgfHwgIiIsIGEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksIG8gPSAhMSwgY2xlYXJUaW1lb3V0KHRoaXMuZmlsdGVyVGltZXIpLCBhID09PSBuID8gbyA9ICEwIDogYSA9IG4gKyBhLCByID0gUmVnRXhwKCJeIiArIGkoYSksICJpIiksIHMgPSB0aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gci50ZXN0KHQodGhpcykuY2hpbGRyZW4oImEiKS50ZXh0KCkpIH0pLCBzID0gbyAmJiAtMSAhPT0gcy5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpID8gdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpIDogcywgcy5sZW5ndGggfHwgKGEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksIHIgPSBSZWdFeHAoIl4iICsgaShhKSwgImkiKSwgcyA9IHRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcihmdW5jdGlvbiAoKSB7IHJldHVybiByLnRlc3QodCh0aGlzKS5jaGlsZHJlbigiYSIpLnRleHQoKSkgfSkpLCBzLmxlbmd0aCA/ICh0aGlzLmZvY3VzKGUsIHMpLCBzLmxlbmd0aCA+IDEgPyAodGhpcy5wcmV2aW91c0ZpbHRlciA9IGEsIHRoaXMuZmlsdGVyVGltZXIgPSB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IGRlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyIH0sIDFlMykpIDogZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXIpIDogZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXIgfSBsICYmIGUucHJldmVudERlZmF1bHQoKSB9LCBfYWN0aXZhdGU6IGZ1bmN0aW9uICh0KSB7IHRoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSB8fCAodGhpcy5hY3RpdmUuY2hpbGRyZW4oImFbYXJpYS1oYXNwb3B1cD0ndHJ1ZSddIikubGVuZ3RoID8gdGhpcy5leHBhbmQodCkgOiB0aGlzLnNlbGVjdCh0KSkgfSwgcmVmcmVzaDogZnVuY3Rpb24gKCkgeyB2YXIgZSwgaSA9IHRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LCBzID0gdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLm1lbnVzKTsgdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwgISF0aGlzLmVsZW1lbnQuZmluZCgiLnVpLWljb24iKS5sZW5ndGgpLCBzLmZpbHRlcigiOm5vdCgudWktbWVudSkiKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLmhpZGUoKS5hdHRyKHsgcm9sZTogdGhpcy5vcHRpb25zLnJvbGUsICJhcmlhLWhpZGRlbiI6ICJ0cnVlIiwgImFyaWEtZXhwYW5kZWQiOiAiZmFsc2UiIH0pLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcyksIHMgPSBlLnByZXYoImEiKSwgbiA9IHQoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1tZW51LWljb24gdWktaWNvbiAiICsgaSkuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IiwgITApOyBzLmF0dHIoImFyaWEtaGFzcG9wdXAiLCAidHJ1ZSIpLnByZXBlbmQobiksIGUuYXR0cigiYXJpYS1sYWJlbGxlZGJ5Iiwgcy5hdHRyKCJpZCIpKSB9KSwgZSA9IHMuYWRkKHRoaXMuZWxlbWVudCksIGUuY2hpbGRyZW4oIjpub3QoLnVpLW1lbnUtaXRlbSk6aGFzKGEpIikuYWRkQ2xhc3MoInVpLW1lbnUtaXRlbSIpLmF0dHIoInJvbGUiLCAicHJlc2VudGF0aW9uIikuY2hpbGRyZW4oImEiKS51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1jb3JuZXItYWxsIikuYXR0cih7IHRhYkluZGV4OiAtMSwgcm9sZTogdGhpcy5faXRlbVJvbGUoKSB9KSwgZS5jaGlsZHJlbigiOm5vdCgudWktbWVudS1pdGVtKSIpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcyk7IC9bXlwtXHUyMDE0XHUyMDEzXHNdLy50ZXN0KGUudGV4dCgpKSB8fCBlLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCB1aS1tZW51LWRpdmlkZXIiKSB9KSwgZS5jaGlsZHJlbigiLnVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsICJ0cnVlIiksIHRoaXMuYWN0aXZlICYmICF0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSwgdGhpcy5hY3RpdmVbMF0pICYmIHRoaXMuYmx1cigpIH0sIF9pdGVtUm9sZTogZnVuY3Rpb24gKCkgeyByZXR1cm4geyBtZW51OiAibWVudWl0ZW0iLCBsaXN0Ym94OiAib3B0aW9uIiB9W3RoaXMub3B0aW9ucy5yb2xlXSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAodCwgZSkgeyAiaWNvbnMiID09PSB0ICYmIHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUpLmFkZENsYXNzKGUuc3VibWVudSksIHRoaXMuX3N1cGVyKHQsIGUpIH0sIGZvY3VzOiBmdW5jdGlvbiAodCwgZSkgeyB2YXIgaSwgczsgdGhpcy5ibHVyKHQsIHQgJiYgImZvY3VzIiA9PT0gdC50eXBlKSwgdGhpcy5fc2Nyb2xsSW50b1ZpZXcoZSksIHRoaXMuYWN0aXZlID0gZS5maXJzdCgpLCBzID0gdGhpcy5hY3RpdmUuY2hpbGRyZW4oImEiKS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKSwgdGhpcy5vcHRpb25zLnJvbGUgJiYgdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsIHMuYXR0cigiaWQiKSksIHRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKS5jaGlsZHJlbigiYTpmaXJzdCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSwgdCAmJiAia2V5ZG93biIgPT09IHQudHlwZSA/IHRoaXMuX2Nsb3NlKCkgOiB0aGlzLnRpbWVyID0gdGhpcy5fZGVsYXkoZnVuY3Rpb24gKCkgeyB0aGlzLl9jbG9zZSgpIH0sIHRoaXMuZGVsYXkpLCBpID0gZS5jaGlsZHJlbigiLnVpLW1lbnUiKSwgaS5sZW5ndGggJiYgdCAmJiAvXm1vdXNlLy50ZXN0KHQudHlwZSkgJiYgdGhpcy5fc3RhcnRPcGVuaW5nKGkpLCB0aGlzLmFjdGl2ZU1lbnUgPSBlLnBhcmVudCgpLCB0aGlzLl90cmlnZ2VyKCJmb2N1cyIsIHQsIHsgaXRlbTogZSB9KSB9LCBfc2Nyb2xsSW50b1ZpZXc6IGZ1bmN0aW9uIChlKSB7IHZhciBpLCBzLCBuLCBhLCBvLCByOyB0aGlzLl9oYXNTY3JvbGwoKSAmJiAoaSA9IHBhcnNlRmxvYXQodC5jc3ModGhpcy5hY3RpdmVNZW51WzBdLCAiYm9yZGVyVG9wV2lkdGgiKSkgfHwgMCwgcyA9IHBhcnNlRmxvYXQodC5jc3ModGhpcy5hY3RpdmVNZW51WzBdLCAicGFkZGluZ1RvcCIpKSB8fCAwLCBuID0gZS5vZmZzZXQoKS50b3AgLSB0aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wIC0gaSAtIHMsIGEgPSB0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKCksIG8gPSB0aGlzLmFjdGl2ZU1lbnUuaGVpZ2h0KCksIHIgPSBlLmhlaWdodCgpLCAwID4gbiA/IHRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoYSArIG4pIDogbiArIHIgPiBvICYmIHRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoYSArIG4gLSBvICsgcikpIH0sIGJsdXI6IGZ1bmN0aW9uICh0LCBlKSB7IGUgfHwgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLCB0aGlzLmFjdGl2ZSAmJiAodGhpcy5hY3RpdmUuY2hpbGRyZW4oImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSwgdGhpcy5hY3RpdmUgPSBudWxsLCB0aGlzLl90cmlnZ2VyKCJibHVyIiwgdCwgeyBpdGVtOiB0aGlzLmFjdGl2ZSB9KSkgfSwgX3N0YXJ0T3BlbmluZzogZnVuY3Rpb24gKHQpIHsgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLCAidHJ1ZSIgPT09IHQuYXR0cigiYXJpYS1oaWRkZW4iKSAmJiAodGhpcy50aW1lciA9IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgdGhpcy5fY2xvc2UoKSwgdGhpcy5fb3Blbih0KSB9LCB0aGlzLmRlbGF5KSkgfSwgX29wZW46IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdC5leHRlbmQoeyBvZjogdGhpcy5hY3RpdmUgfSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uKTsgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLCB0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUiKS5ub3QoZS5wYXJlbnRzKCIudWktbWVudSIpKS5oaWRlKCkuYXR0cigiYXJpYS1oaWRkZW4iLCAidHJ1ZSIpLCBlLnNob3coKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCAidHJ1ZSIpLnBvc2l0aW9uKGkpIH0sIGNvbGxhcHNlQWxsOiBmdW5jdGlvbiAoZSwgaSkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lciksIHRoaXMudGltZXIgPSB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IHZhciBzID0gaSA/IHRoaXMuZWxlbWVudCA6IHQoZSAmJiBlLnRhcmdldCkuY2xvc2VzdCh0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUiKSk7IHMubGVuZ3RoIHx8IChzID0gdGhpcy5lbGVtZW50KSwgdGhpcy5fY2xvc2UocyksIHRoaXMuYmx1cihlKSwgdGhpcy5hY3RpdmVNZW51ID0gcyB9LCB0aGlzLmRlbGF5KSB9LCBfY2xvc2U6IGZ1bmN0aW9uICh0KSB7IHQgfHwgKHQgPSB0aGlzLmFjdGl2ZSA/IHRoaXMuYWN0aXZlLnBhcmVudCgpIDogdGhpcy5lbGVtZW50KSwgdC5maW5kKCIudWktbWVudSIpLmhpZGUoKS5hdHRyKCJhcmlhLWhpZGRlbiIsICJ0cnVlIikuYXR0cigiYXJpYS1leHBhbmRlZCIsICJmYWxzZSIpLmVuZCgpLmZpbmQoImEudWktc3RhdGUtYWN0aXZlIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpIH0sIGNvbGxhcHNlOiBmdW5jdGlvbiAodCkgeyB2YXIgZSA9IHRoaXMuYWN0aXZlICYmIHRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iLCB0aGlzLmVsZW1lbnQpOyBlICYmIGUubGVuZ3RoICYmICh0aGlzLl9jbG9zZSgpLCB0aGlzLmZvY3VzKHQsIGUpKSB9LCBleHBhbmQ6IGZ1bmN0aW9uICh0KSB7IHZhciBlID0gdGhpcy5hY3RpdmUgJiYgdGhpcy5hY3RpdmUuY2hpbGRyZW4oIi51aS1tZW51ICIpLmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlyc3QoKTsgZSAmJiBlLmxlbmd0aCAmJiAodGhpcy5fb3BlbihlLnBhcmVudCgpKSwgdGhpcy5fZGVsYXkoZnVuY3Rpb24gKCkgeyB0aGlzLmZvY3VzKHQsIGUpIH0pKSB9LCBuZXh0OiBmdW5jdGlvbiAodCkgeyB0aGlzLl9tb3ZlKCJuZXh0IiwgImZpcnN0IiwgdCkgfSwgcHJldmlvdXM6IGZ1bmN0aW9uICh0KSB7IHRoaXMuX21vdmUoInByZXYiLCAibGFzdCIsIHQpIH0sIGlzRmlyc3RJdGVtOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aCB9LCBpc0xhc3RJdGVtOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aCB9LCBfbW92ZTogZnVuY3Rpb24gKHQsIGUsIGkpIHsgdmFyIHM7IHRoaXMuYWN0aXZlICYmIChzID0gImZpcnN0IiA9PT0gdCB8fCAibGFzdCIgPT09IHQgPyB0aGlzLmFjdGl2ZVsiZmlyc3QiID09PSB0ID8gInByZXZBbGwiIDogIm5leHRBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKC0xKSA6IHRoaXMuYWN0aXZlW3QgKyAiQWxsIl0oIi51aS1tZW51LWl0ZW0iKS5lcSgwKSksIHMgJiYgcy5sZW5ndGggJiYgdGhpcy5hY3RpdmUgfHwgKHMgPSB0aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKVtlXSgpKSwgdGhpcy5mb2N1cyhpLCBzKSB9LCBuZXh0UGFnZTogZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMsIG47IHJldHVybiB0aGlzLmFjdGl2ZSA/ICh0aGlzLmlzTGFzdEl0ZW0oKSB8fCAodGhpcy5faGFzU2Nyb2xsKCkgPyAocyA9IHRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCwgbiA9IHRoaXMuZWxlbWVudC5oZWlnaHQoKSwgdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24gKCkgeyByZXR1cm4gaSA9IHQodGhpcyksIDAgPiBpLm9mZnNldCgpLnRvcCAtIHMgLSBuIH0pLCB0aGlzLmZvY3VzKGUsIGkpKSA6IHRoaXMuZm9jdXMoZSwgdGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIilbdGhpcy5hY3RpdmUgPyAibGFzdCIgOiAiZmlyc3QiXSgpKSksIHVuZGVmaW5lZCkgOiAodGhpcy5uZXh0KGUpLCB1bmRlZmluZWQpIH0sIHByZXZpb3VzUGFnZTogZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMsIG47IHJldHVybiB0aGlzLmFjdGl2ZSA/ICh0aGlzLmlzRmlyc3RJdGVtKCkgfHwgKHRoaXMuX2hhc1Njcm9sbCgpID8gKHMgPSB0aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3AsIG4gPSB0aGlzLmVsZW1lbnQuaGVpZ2h0KCksIHRoaXMuYWN0aXZlLnByZXZBbGwoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSB0KHRoaXMpLCBpLm9mZnNldCgpLnRvcCAtIHMgKyBuID4gMCB9KSwgdGhpcy5mb2N1cyhlLCBpKSkgOiB0aGlzLmZvY3VzKGUsIHRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpcnN0KCkpKSwgdW5kZWZpbmVkKSA6ICh0aGlzLm5leHQoZSksIHVuZGVmaW5lZCkgfSwgX2hhc1Njcm9sbDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkgPCB0aGlzLmVsZW1lbnQucHJvcCgic2Nyb2xsSGVpZ2h0IikgfSwgc2VsZWN0OiBmdW5jdGlvbiAoZSkgeyB0aGlzLmFjdGl2ZSA9IHRoaXMuYWN0aXZlIHx8IHQoZS50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTsgdmFyIGkgPSB7IGl0ZW06IHRoaXMuYWN0aXZlIH07IHRoaXMuYWN0aXZlLmhhcygiLnVpLW1lbnUiKS5sZW5ndGggfHwgdGhpcy5jb2xsYXBzZUFsbChlLCAhMCksIHRoaXMuX3RyaWdnZXIoInNlbGVjdCIsIGUsIGkpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0LCBlKSB7IHQud2lkZ2V0KCJ1aS5wcm9ncmVzc2JhciIsIHsgdmVyc2lvbjogIjEuMTAuNCIsIG9wdGlvbnM6IHsgbWF4OiAxMDAsIHZhbHVlOiAwLCBjaGFuZ2U6IG51bGwsIGNvbXBsZXRlOiBudWxsIH0sIG1pbjogMCwgX2NyZWF0ZTogZnVuY3Rpb24gKCkgeyB0aGlzLm9sZFZhbHVlID0gdGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5fY29uc3RyYWluZWRWYWx1ZSgpLCB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikuYXR0cih7IHJvbGU6ICJwcm9ncmVzc2JhciIsICJhcmlhLXZhbHVlbWluIjogdGhpcy5taW4gfSksIHRoaXMudmFsdWVEaXYgPSB0KCI8ZGl2IGNsYXNzPSd1aS1wcm9ncmVzc2Jhci12YWx1ZSB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1sZWZ0Jz48XC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSwgdGhpcy5fcmVmcmVzaFZhbHVlKCkgfSwgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSwgdGhpcy52YWx1ZURpdi5yZW1vdmUoKSB9LCB2YWx1ZTogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQgPT09IGUgPyB0aGlzLm9wdGlvbnMudmFsdWUgOiAodGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5fY29uc3RyYWluZWRWYWx1ZSh0KSwgdGhpcy5fcmVmcmVzaFZhbHVlKCksIGUpIH0sIF9jb25zdHJhaW5lZFZhbHVlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdCA9PT0gZSAmJiAodCA9IHRoaXMub3B0aW9ucy52YWx1ZSksIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IHQgPT09ICExLCAibnVtYmVyIiAhPSB0eXBlb2YgdCAmJiAodCA9IDApLCB0aGlzLmluZGV0ZXJtaW5hdGUgPyAhMSA6IE1hdGgubWluKHRoaXMub3B0aW9ucy5tYXgsIE1hdGgubWF4KHRoaXMubWluLCB0KSkgfSwgX3NldE9wdGlvbnM6IGZ1bmN0aW9uICh0KSB7IHZhciBlID0gdC52YWx1ZTsgZGVsZXRlIHQudmFsdWUsIHRoaXMuX3N1cGVyKHQpLCB0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLl9jb25zdHJhaW5lZFZhbHVlKGUpLCB0aGlzLl9yZWZyZXNoVmFsdWUoKSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAodCwgZSkgeyAibWF4IiA9PT0gdCAmJiAoZSA9IE1hdGgubWF4KHRoaXMubWluLCBlKSksIHRoaXMuX3N1cGVyKHQsIGUpIH0sIF9wZXJjZW50YWdlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGUgPyAxMDAgOiAxMDAgKiAodGhpcy5vcHRpb25zLnZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMub3B0aW9ucy5tYXggLSB0aGlzLm1pbikgfSwgX3JlZnJlc2hWYWx1ZTogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMub3B0aW9ucy52YWx1ZSwgaSA9IHRoaXMuX3BlcmNlbnRhZ2UoKTsgdGhpcy52YWx1ZURpdi50b2dnbGUodGhpcy5pbmRldGVybWluYXRlIHx8IGUgPiB0aGlzLm1pbikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1yaWdodCIsIGUgPT09IHRoaXMub3B0aW9ucy5tYXgpLndpZHRoKGkudG9GaXhlZCgwKSArICIlIiksIHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktcHJvZ3Jlc3NiYXItaW5kZXRlcm1pbmF0ZSIsIHRoaXMuaW5kZXRlcm1pbmF0ZSksIHRoaXMuaW5kZXRlcm1pbmF0ZSA/ICh0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW5vdyIpLCB0aGlzLm92ZXJsYXlEaXYgfHwgKHRoaXMub3ZlcmxheURpdiA9IHQoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLW92ZXJsYXknPjxcL2Rpdj4iKS5hcHBlbmRUbyh0aGlzLnZhbHVlRGl2KSkpIDogKHRoaXMuZWxlbWVudC5hdHRyKHsgImFyaWEtdmFsdWVtYXgiOiB0aGlzLm9wdGlvbnMubWF4LCAiYXJpYS12YWx1ZW5vdyI6IGUgfSksIHRoaXMub3ZlcmxheURpdiAmJiAodGhpcy5vdmVybGF5RGl2LnJlbW92ZSgpLCB0aGlzLm92ZXJsYXlEaXYgPSBudWxsKSksIHRoaXMub2xkVmFsdWUgIT09IGUgJiYgKHRoaXMub2xkVmFsdWUgPSBlLCB0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiKSksIGUgPT09IHRoaXMub3B0aW9ucy5tYXggJiYgdGhpcy5fdHJpZ2dlcigiY29tcGxldGUiKSB9IH0pIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyBmdW5jdGlvbiBlKHQpIHsgcmV0dXJuIHBhcnNlSW50KHQsIDEwKSB8fCAwIH0gZnVuY3Rpb24gaSh0KSB7IHJldHVybiAhaXNOYU4ocGFyc2VJbnQodCwgMTApKSB9IHQud2lkZ2V0KCJ1aS5yZXNpemFibGUiLCB0LnVpLm1vdXNlLCB7IHZlcnNpb246ICIxLjEwLjQiLCB3aWRnZXRFdmVudFByZWZpeDogInJlc2l6ZSIsIG9wdGlvbnM6IHsgYWxzb1Jlc2l6ZTogITEsIGFuaW1hdGU6ICExLCBhbmltYXRlRHVyYXRpb246ICJzbG93IiwgYW5pbWF0ZUVhc2luZzogInN3aW5nIiwgYXNwZWN0UmF0aW86ICExLCBhdXRvSGlkZTogITEsIGNvbnRhaW5tZW50OiAhMSwgZ2hvc3Q6ICExLCBncmlkOiAhMSwgaGFuZGxlczogImUscyxzZSIsIGhlbHBlcjogITEsIG1heEhlaWdodDogbnVsbCwgbWF4V2lkdGg6IG51bGwsIG1pbkhlaWdodDogMTAsIG1pbldpZHRoOiAxMCwgekluZGV4OiA5MCwgcmVzaXplOiBudWxsLCBzdGFydDogbnVsbCwgc3RvcDogbnVsbCB9LCBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7IHZhciBlLCBpLCBzLCBuLCBhLCBvID0gdGhpcywgciA9IHRoaXMub3B0aW9uczsgaWYgKHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktcmVzaXphYmxlIiksIHQuZXh0ZW5kKHRoaXMsIHsgX2FzcGVjdFJhdGlvOiAhIXIuYXNwZWN0UmF0aW8sIGFzcGVjdFJhdGlvOiByLmFzcGVjdFJhdGlvLCBvcmlnaW5hbEVsZW1lbnQ6IHRoaXMuZWxlbWVudCwgX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHM6IFtdLCBfaGVscGVyOiByLmhlbHBlciB8fCByLmdob3N0IHx8IHIuYW5pbWF0ZSA/IHIuaGVscGVyIHx8ICJ1aS1yZXNpemFibGUtaGVscGVyIiA6IG51bGwgfSksIHRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvY2FudmFzfHRleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b258aW1nL2kpICYmICh0aGlzLmVsZW1lbnQud3JhcCh0KCI8ZGl2IGNsYXNzPSd1aS13cmFwcGVyJyBzdHlsZT0nb3ZlcmZsb3c6IGhpZGRlbjsnPjxcL2Rpdj4iKS5jc3MoeyBwb3NpdGlvbjogdGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSwgd2lkdGg6IHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksIGhlaWdodDogdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksIHRvcDogdGhpcy5lbGVtZW50LmNzcygidG9wIiksIGxlZnQ6IHRoaXMuZWxlbWVudC5jc3MoImxlZnQiKSB9KSksIHRoaXMuZWxlbWVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnQoKS5kYXRhKCJ1aS1yZXNpemFibGUiLCB0aGlzLmVsZW1lbnQuZGF0YSgidWktcmVzaXphYmxlIikpLCB0aGlzLmVsZW1lbnRJc1dyYXBwZXIgPSAhMCwgdGhpcy5lbGVtZW50LmNzcyh7IG1hcmdpbkxlZnQ6IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLCBtYXJnaW5Ub3A6IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luVG9wIiksIG1hcmdpblJpZ2h0OiB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksIG1hcmdpbkJvdHRvbTogdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKSB9KSwgdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHsgbWFyZ2luTGVmdDogMCwgbWFyZ2luVG9wOiAwLCBtYXJnaW5SaWdodDogMCwgbWFyZ2luQm90dG9tOiAwIH0pLCB0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUgPSB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIpLCB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsICJub25lIiksIHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMucHVzaCh0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoeyBwb3NpdGlvbjogInN0YXRpYyIsIHpvb206IDEsIGRpc3BsYXk6ICJibG9jayIgfSkpLCB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoeyBtYXJnaW46IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luIikgfSksIHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLCB0aGlzLmhhbmRsZXMgPSByLmhhbmRsZXMgfHwgKHQoIi51aS1yZXNpemFibGUtaGFuZGxlIiwgdGhpcy5lbGVtZW50KS5sZW5ndGggPyB7IG46ICIudWktcmVzaXphYmxlLW4iLCBlOiAiLnVpLXJlc2l6YWJsZS1lIiwgczogIi51aS1yZXNpemFibGUtcyIsIHc6ICIudWktcmVzaXphYmxlLXciLCBzZTogIi51aS1yZXNpemFibGUtc2UiLCBzdzogIi51aS1yZXNpemFibGUtc3ciLCBuZTogIi51aS1yZXNpemFibGUtbmUiLCBudzogIi51aS1yZXNpemFibGUtbnciIH0gOiAiZSxzLHNlIiksIHRoaXMuaGFuZGxlcy5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSBmb3IgKCJhbGwiID09PSB0aGlzLmhhbmRsZXMgJiYgKHRoaXMuaGFuZGxlcyA9ICJuLGUscyx3LHNlLHN3LG5lLG53IiksIGUgPSB0aGlzLmhhbmRsZXMuc3BsaXQoIiwiKSwgdGhpcy5oYW5kbGVzID0ge30sIGkgPSAwOyBlLmxlbmd0aCA+IGk7IGkrKykgcyA9IHQudHJpbShlW2ldKSwgYSA9ICJ1aS1yZXNpemFibGUtIiArIHMsIG4gPSB0KCI8ZGl2IGNsYXNzPSd1aS1yZXNpemFibGUtaGFuZGxlICIgKyBhICsgIic+PFwvZGl2PiIpLCBuLmNzcyh7IHpJbmRleDogci56SW5kZXggfSksICJzZSIgPT09IHMgJiYgbi5hZGRDbGFzcygidWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZSIpLCB0aGlzLmhhbmRsZXNbc10gPSAiLnVpLXJlc2l6YWJsZS0iICsgcywgdGhpcy5lbGVtZW50LmFwcGVuZChuKTsgdGhpcy5fcmVuZGVyQXhpcyA9IGZ1bmN0aW9uIChlKSB7IHZhciBpLCBzLCBuLCBhOyBlID0gZSB8fCB0aGlzLmVsZW1lbnQ7IGZvciAoaSBpbiB0aGlzLmhhbmRsZXMpIHRoaXMuaGFuZGxlc1tpXS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nICYmICh0aGlzLmhhbmRsZXNbaV0gPSB0KHRoaXMuaGFuZGxlc1tpXSwgdGhpcy5lbGVtZW50KS5zaG93KCkpLCB0aGlzLmVsZW1lbnRJc1dyYXBwZXIgJiYgdGhpcy5vcmlnaW5hbEVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL3RleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b24vaSkgJiYgKHMgPSB0KHRoaXMuaGFuZGxlc1tpXSwgdGhpcy5lbGVtZW50KSwgYSA9IC9zd3xuZXxud3xzZXxufHMvLnRlc3QoaSkgPyBzLm91dGVySGVpZ2h0KCkgOiBzLm91dGVyV2lkdGgoKSwgbiA9IFsicGFkZGluZyIsIC9uZXxud3xuLy50ZXN0KGkpID8gIlRvcCIgOiAvc2V8c3d8cy8udGVzdChpKSA/ICJCb3R0b20iIDogL15lJC8udGVzdChpKSA/ICJSaWdodCIgOiAiTGVmdCJdLmpvaW4oIiIpLCBlLmNzcyhuLCBhKSwgdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksIHQodGhpcy5oYW5kbGVzW2ldKS5sZW5ndGggfSwgdGhpcy5fcmVuZGVyQXhpcyh0aGlzLmVsZW1lbnQpLCB0aGlzLl9oYW5kbGVzID0gdCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiLCB0aGlzLmVsZW1lbnQpLmRpc2FibGVTZWxlY3Rpb24oKSwgdGhpcy5faGFuZGxlcy5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgeyBvLnJlc2l6aW5nIHx8ICh0aGlzLmNsYXNzTmFtZSAmJiAobiA9IHRoaXMuY2xhc3NOYW1lLm1hdGNoKC91aS1yZXNpemFibGUtKHNlfHN3fG5lfG53fG58ZXxzfHcpL2kpKSwgby5heGlzID0gbiAmJiBuWzFdID8gblsxXSA6ICJzZSIpIH0pLCByLmF1dG9IaWRlICYmICh0aGlzLl9oYW5kbGVzLmhpZGUoKSwgdCh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKS5tb3VzZWVudGVyKGZ1bmN0aW9uICgpIHsgci5kaXNhYmxlZCB8fCAodCh0aGlzKS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIiksIG8uX2hhbmRsZXMuc2hvdygpKSB9KS5tb3VzZWxlYXZlKGZ1bmN0aW9uICgpIHsgci5kaXNhYmxlZCB8fCBvLnJlc2l6aW5nIHx8ICh0KHRoaXMpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSwgby5faGFuZGxlcy5oaWRlKCkpIH0pKSwgdGhpcy5fbW91c2VJbml0KCkgfSwgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHsgdGhpcy5fbW91c2VEZXN0cm95KCk7IHZhciBlLCBpID0gZnVuY3Rpb24gKGUpIHsgdChlKS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlIHVpLXJlc2l6YWJsZS1kaXNhYmxlZCB1aS1yZXNpemFibGUtcmVzaXppbmciKS5yZW1vdmVEYXRhKCJyZXNpemFibGUiKS5yZW1vdmVEYXRhKCJ1aS1yZXNpemFibGUiKS51bmJpbmQoIi5yZXNpemFibGUiKS5maW5kKCIudWktcmVzaXphYmxlLWhhbmRsZSIpLnJlbW92ZSgpIH07IHJldHVybiB0aGlzLmVsZW1lbnRJc1dyYXBwZXIgJiYgKGkodGhpcy5lbGVtZW50KSwgZSA9IHRoaXMuZWxlbWVudCwgdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHsgcG9zaXRpb246IGUuY3NzKCJwb3NpdGlvbiIpLCB3aWR0aDogZS5vdXRlcldpZHRoKCksIGhlaWdodDogZS5vdXRlckhlaWdodCgpLCB0b3A6IGUuY3NzKCJ0b3AiKSwgbGVmdDogZS5jc3MoImxlZnQiKSB9KS5pbnNlcnRBZnRlcihlKSwgZS5yZW1vdmUoKSksIHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiwgdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKSwgaSh0aGlzLm9yaWdpbmFsRWxlbWVudCksIHRoaXMgfSwgX21vdXNlQ2FwdHVyZTogZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMsIG4gPSAhMTsgZm9yIChpIGluIHRoaXMuaGFuZGxlcykgcyA9IHQodGhpcy5oYW5kbGVzW2ldKVswXSwgKHMgPT09IGUudGFyZ2V0IHx8IHQuY29udGFpbnMocywgZS50YXJnZXQpKSAmJiAobiA9ICEwKTsgcmV0dXJuICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgbiB9LCBfbW91c2VTdGFydDogZnVuY3Rpb24gKGkpIHsgdmFyIHMsIG4sIGEsIG8gPSB0aGlzLm9wdGlvbnMsIHIgPSB0aGlzLmVsZW1lbnQucG9zaXRpb24oKSwgaCA9IHRoaXMuZWxlbWVudDsgcmV0dXJuIHRoaXMucmVzaXppbmcgPSAhMCwgL2Fic29sdXRlLy50ZXN0KGguY3NzKCJwb3NpdGlvbiIpKSA/IGguY3NzKHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHRvcDogaC5jc3MoInRvcCIpLCBsZWZ0OiBoLmNzcygibGVmdCIpIH0pIDogaC5pcygiLnVpLWRyYWdnYWJsZSIpICYmIGguY3NzKHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHRvcDogci50b3AsIGxlZnQ6IHIubGVmdCB9KSwgdGhpcy5fcmVuZGVyUHJveHkoKSwgcyA9IGUodGhpcy5oZWxwZXIuY3NzKCJsZWZ0IikpLCBuID0gZSh0aGlzLmhlbHBlci5jc3MoInRvcCIpKSwgby5jb250YWlubWVudCAmJiAocyArPSB0KG8uY29udGFpbm1lbnQpLnNjcm9sbExlZnQoKSB8fCAwLCBuICs9IHQoby5jb250YWlubWVudCkuc2Nyb2xsVG9wKCkgfHwgMCksIHRoaXMub2Zmc2V0ID0gdGhpcy5oZWxwZXIub2Zmc2V0KCksIHRoaXMucG9zaXRpb24gPSB7IGxlZnQ6IHMsIHRvcDogbiB9LCB0aGlzLnNpemUgPSB0aGlzLl9oZWxwZXIgPyB7IHdpZHRoOiB0aGlzLmhlbHBlci53aWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVscGVyLmhlaWdodCgpIH0gOiB7IHdpZHRoOiBoLndpZHRoKCksIGhlaWdodDogaC5oZWlnaHQoKSB9LCB0aGlzLm9yaWdpbmFsU2l6ZSA9IHRoaXMuX2hlbHBlciA/IHsgd2lkdGg6IGgub3V0ZXJXaWR0aCgpLCBoZWlnaHQ6IGgub3V0ZXJIZWlnaHQoKSB9IDogeyB3aWR0aDogaC53aWR0aCgpLCBoZWlnaHQ6IGguaGVpZ2h0KCkgfSwgdGhpcy5vcmlnaW5hbFBvc2l0aW9uID0geyBsZWZ0OiBzLCB0b3A6IG4gfSwgdGhpcy5zaXplRGlmZiA9IHsgd2lkdGg6IGgub3V0ZXJXaWR0aCgpIC0gaC53aWR0aCgpLCBoZWlnaHQ6IGgub3V0ZXJIZWlnaHQoKSAtIGguaGVpZ2h0KCkgfSwgdGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24gPSB7IGxlZnQ6IGkucGFnZVgsIHRvcDogaS5wYWdlWSB9LCB0aGlzLmFzcGVjdFJhdGlvID0gIm51bWJlciIgPT0gdHlwZW9mIG8uYXNwZWN0UmF0aW8gPyBvLmFzcGVjdFJhdGlvIDogdGhpcy5vcmlnaW5hbFNpemUud2lkdGggLyB0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQgfHwgMSwgYSA9IHQoIi51aS1yZXNpemFibGUtIiArIHRoaXMuYXhpcykuY3NzKCJjdXJzb3IiKSwgdCgiYm9keSIpLmNzcygiY3Vyc29yIiwgImF1dG8iID09PSBhID8gdGhpcy5heGlzICsgIi1yZXNpemUiIDogYSksIGguYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLCB0aGlzLl9wcm9wYWdhdGUoInN0YXJ0IiwgaSksICEwIH0sIF9tb3VzZURyYWc6IGZ1bmN0aW9uIChlKSB7IHZhciBpLCBzID0gdGhpcy5oZWxwZXIsIG4gPSB7fSwgYSA9IHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uLCBvID0gdGhpcy5heGlzLCByID0gdGhpcy5wb3NpdGlvbi50b3AsIGggPSB0aGlzLnBvc2l0aW9uLmxlZnQsIGwgPSB0aGlzLnNpemUud2lkdGgsIGMgPSB0aGlzLnNpemUuaGVpZ2h0LCB1ID0gZS5wYWdlWCAtIGEubGVmdCB8fCAwLCBkID0gZS5wYWdlWSAtIGEudG9wIHx8IDAsIHAgPSB0aGlzLl9jaGFuZ2Vbb107IHJldHVybiBwID8gKGkgPSBwLmFwcGx5KHRoaXMsIFtlLCB1LCBkXSksIHRoaXMuX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzKGUuc2hpZnRLZXkpLCAodGhpcy5fYXNwZWN0UmF0aW8gfHwgZS5zaGlmdEtleSkgJiYgKGkgPSB0aGlzLl91cGRhdGVSYXRpbyhpLCBlKSksIGkgPSB0aGlzLl9yZXNwZWN0U2l6ZShpLCBlKSwgdGhpcy5fdXBkYXRlQ2FjaGUoaSksIHRoaXMuX3Byb3BhZ2F0ZSgicmVzaXplIiwgZSksIHRoaXMucG9zaXRpb24udG9wICE9PSByICYmIChuLnRvcCA9IHRoaXMucG9zaXRpb24udG9wICsgInB4IiksIHRoaXMucG9zaXRpb24ubGVmdCAhPT0gaCAmJiAobi5sZWZ0ID0gdGhpcy5wb3NpdGlvbi5sZWZ0ICsgInB4IiksIHRoaXMuc2l6ZS53aWR0aCAhPT0gbCAmJiAobi53aWR0aCA9IHRoaXMuc2l6ZS53aWR0aCArICJweCIpLCB0aGlzLnNpemUuaGVpZ2h0ICE9PSBjICYmIChuLmhlaWdodCA9IHRoaXMuc2l6ZS5oZWlnaHQgKyAicHgiKSwgcy5jc3MobiksICF0aGlzLl9oZWxwZXIgJiYgdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGggJiYgdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSwgdC5pc0VtcHR5T2JqZWN0KG4pIHx8IHRoaXMuX3RyaWdnZXIoInJlc2l6ZSIsIGUsIHRoaXMudWkoKSksICExKSA6ICExIH0sIF9tb3VzZVN0b3A6IGZ1bmN0aW9uIChlKSB7IHRoaXMucmVzaXppbmcgPSAhMTsgdmFyIGksIHMsIG4sIGEsIG8sIHIsIGgsIGwgPSB0aGlzLm9wdGlvbnMsIGMgPSB0aGlzOyByZXR1cm4gdGhpcy5faGVscGVyICYmIChpID0gdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cywgcyA9IGkubGVuZ3RoICYmIC90ZXh0YXJlYS9pLnRlc3QoaVswXS5ub2RlTmFtZSksIG4gPSBzICYmIHQudWkuaGFzU2Nyb2xsKGlbMF0sICJsZWZ0IikgPyAwIDogYy5zaXplRGlmZi5oZWlnaHQsIGEgPSBzID8gMCA6IGMuc2l6ZURpZmYud2lkdGgsIG8gPSB7IHdpZHRoOiBjLmhlbHBlci53aWR0aCgpIC0gYSwgaGVpZ2h0OiBjLmhlbHBlci5oZWlnaHQoKSAtIG4gfSwgciA9IHBhcnNlSW50KGMuZWxlbWVudC5jc3MoImxlZnQiKSwgMTApICsgKGMucG9zaXRpb24ubGVmdCAtIGMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KSB8fCBudWxsLCBoID0gcGFyc2VJbnQoYy5lbGVtZW50LmNzcygidG9wIiksIDEwKSArIChjLnBvc2l0aW9uLnRvcCAtIGMub3JpZ2luYWxQb3NpdGlvbi50b3ApIHx8IG51bGwsIGwuYW5pbWF0ZSB8fCB0aGlzLmVsZW1lbnQuY3NzKHQuZXh0ZW5kKG8sIHsgdG9wOiBoLCBsZWZ0OiByIH0pKSwgYy5oZWxwZXIuaGVpZ2h0KGMuc2l6ZS5oZWlnaHQpLCBjLmhlbHBlci53aWR0aChjLnNpemUud2lkdGgpLCB0aGlzLl9oZWxwZXIgJiYgIWwuYW5pbWF0ZSAmJiB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSwgdCgiYm9keSIpLmNzcygiY3Vyc29yIiwgImF1dG8iKSwgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSwgdGhpcy5fcHJvcGFnYXRlKCJzdG9wIiwgZSksIHRoaXMuX2hlbHBlciAmJiB0aGlzLmhlbHBlci5yZW1vdmUoKSwgITEgfSwgX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzOiBmdW5jdGlvbiAodCkgeyB2YXIgZSwgcywgbiwgYSwgbywgciA9IHRoaXMub3B0aW9uczsgbyA9IHsgbWluV2lkdGg6IGkoci5taW5XaWR0aCkgPyByLm1pbldpZHRoIDogMCwgbWF4V2lkdGg6IGkoci5tYXhXaWR0aCkgPyByLm1heFdpZHRoIDogMSAvIDAsIG1pbkhlaWdodDogaShyLm1pbkhlaWdodCkgPyByLm1pbkhlaWdodCA6IDAsIG1heEhlaWdodDogaShyLm1heEhlaWdodCkgPyByLm1heEhlaWdodCA6IDEgLyAwIH0sICh0aGlzLl9hc3BlY3RSYXRpbyB8fCB0KSAmJiAoZSA9IG8ubWluSGVpZ2h0ICogdGhpcy5hc3BlY3RSYXRpbywgbiA9IG8ubWluV2lkdGggLyB0aGlzLmFzcGVjdFJhdGlvLCBzID0gby5tYXhIZWlnaHQgKiB0aGlzLmFzcGVjdFJhdGlvLCBhID0gby5tYXhXaWR0aCAvIHRoaXMuYXNwZWN0UmF0aW8sIGUgPiBvLm1pbldpZHRoICYmIChvLm1pbldpZHRoID0gZSksIG4gPiBvLm1pbkhlaWdodCAmJiAoby5taW5IZWlnaHQgPSBuKSwgby5tYXhXaWR0aCA+IHMgJiYgKG8ubWF4V2lkdGggPSBzKSwgby5tYXhIZWlnaHQgPiBhICYmIChvLm1heEhlaWdodCA9IGEpKSwgdGhpcy5fdkJvdW5kYXJpZXMgPSBvIH0sIF91cGRhdGVDYWNoZTogZnVuY3Rpb24gKHQpIHsgdGhpcy5vZmZzZXQgPSB0aGlzLmhlbHBlci5vZmZzZXQoKSwgaSh0LmxlZnQpICYmICh0aGlzLnBvc2l0aW9uLmxlZnQgPSB0LmxlZnQpLCBpKHQudG9wKSAmJiAodGhpcy5wb3NpdGlvbi50b3AgPSB0LnRvcCksIGkodC5oZWlnaHQpICYmICh0aGlzLnNpemUuaGVpZ2h0ID0gdC5oZWlnaHQpLCBpKHQud2lkdGgpICYmICh0aGlzLnNpemUud2lkdGggPSB0LndpZHRoKSB9LCBfdXBkYXRlUmF0aW86IGZ1bmN0aW9uICh0KSB7IHZhciBlID0gdGhpcy5wb3NpdGlvbiwgcyA9IHRoaXMuc2l6ZSwgbiA9IHRoaXMuYXhpczsgcmV0dXJuIGkodC5oZWlnaHQpID8gdC53aWR0aCA9IHQuaGVpZ2h0ICogdGhpcy5hc3BlY3RSYXRpbyA6IGkodC53aWR0aCkgJiYgKHQuaGVpZ2h0ID0gdC53aWR0aCAvIHRoaXMuYXNwZWN0UmF0aW8pLCAic3ciID09PSBuICYmICh0LmxlZnQgPSBlLmxlZnQgKyAocy53aWR0aCAtIHQud2lkdGgpLCB0LnRvcCA9IG51bGwpLCAibnciID09PSBuICYmICh0LnRvcCA9IGUudG9wICsgKHMuaGVpZ2h0IC0gdC5oZWlnaHQpLCB0LmxlZnQgPSBlLmxlZnQgKyAocy53aWR0aCAtIHQud2lkdGgpKSwgdCB9LCBfcmVzcGVjdFNpemU6IGZ1bmN0aW9uICh0KSB7IHZhciBlID0gdGhpcy5fdkJvdW5kYXJpZXMsIHMgPSB0aGlzLmF4aXMsIG4gPSBpKHQud2lkdGgpICYmIGUubWF4V2lkdGggJiYgZS5tYXhXaWR0aCA8IHQud2lkdGgsIGEgPSBpKHQuaGVpZ2h0KSAmJiBlLm1heEhlaWdodCAmJiBlLm1heEhlaWdodCA8IHQuaGVpZ2h0LCBvID0gaSh0LndpZHRoKSAmJiBlLm1pbldpZHRoICYmIGUubWluV2lkdGggPiB0LndpZHRoLCByID0gaSh0LmhlaWdodCkgJiYgZS5taW5IZWlnaHQgJiYgZS5taW5IZWlnaHQgPiB0LmhlaWdodCwgaCA9IHRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0ICsgdGhpcy5vcmlnaW5hbFNpemUud2lkdGgsIGwgPSB0aGlzLnBvc2l0aW9uLnRvcCArIHRoaXMuc2l6ZS5oZWlnaHQsIGMgPSAvc3d8bnd8dy8udGVzdChzKSwgdSA9IC9ud3xuZXxuLy50ZXN0KHMpOyByZXR1cm4gbyAmJiAodC53aWR0aCA9IGUubWluV2lkdGgpLCByICYmICh0LmhlaWdodCA9IGUubWluSGVpZ2h0KSwgbiAmJiAodC53aWR0aCA9IGUubWF4V2lkdGgpLCBhICYmICh0LmhlaWdodCA9IGUubWF4SGVpZ2h0KSwgbyAmJiBjICYmICh0LmxlZnQgPSBoIC0gZS5taW5XaWR0aCksIG4gJiYgYyAmJiAodC5sZWZ0ID0gaCAtIGUubWF4V2lkdGgpLCByICYmIHUgJiYgKHQudG9wID0gbCAtIGUubWluSGVpZ2h0KSwgYSAmJiB1ICYmICh0LnRvcCA9IGwgLSBlLm1heEhlaWdodCksIHQud2lkdGggfHwgdC5oZWlnaHQgfHwgdC5sZWZ0IHx8ICF0LnRvcCA/IHQud2lkdGggfHwgdC5oZWlnaHQgfHwgdC50b3AgfHwgIXQubGVmdCB8fCAodC5sZWZ0ID0gbnVsbCkgOiB0LnRvcCA9IG51bGwsIHQgfSwgX3Byb3BvcnRpb25hbGx5UmVzaXplOiBmdW5jdGlvbiAoKSB7IGlmICh0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCkgeyB2YXIgdCwgZSwgaSwgcywgbiwgYSA9IHRoaXMuaGVscGVyIHx8IHRoaXMuZWxlbWVudDsgZm9yICh0ID0gMDsgdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGggPiB0OyB0KyspIHsgaWYgKG4gPSB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzW3RdLCAhdGhpcy5ib3JkZXJEaWYpIGZvciAodGhpcy5ib3JkZXJEaWYgPSBbXSwgaSA9IFtuLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwgbi5jc3MoImJvcmRlclJpZ2h0V2lkdGgiKSwgbi5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksIG4uY3NzKCJib3JkZXJMZWZ0V2lkdGgiKV0sIHMgPSBbbi5jc3MoInBhZGRpbmdUb3AiKSwgbi5jc3MoInBhZGRpbmdSaWdodCIpLCBuLmNzcygicGFkZGluZ0JvdHRvbSIpLCBuLmNzcygicGFkZGluZ0xlZnQiKV0sIGUgPSAwOyBpLmxlbmd0aCA+IGU7IGUrKykgdGhpcy5ib3JkZXJEaWZbZV0gPSAocGFyc2VJbnQoaVtlXSwgMTApIHx8IDApICsgKHBhcnNlSW50KHNbZV0sIDEwKSB8fCAwKTsgbi5jc3MoeyBoZWlnaHQ6IGEuaGVpZ2h0KCkgLSB0aGlzLmJvcmRlckRpZlswXSAtIHRoaXMuYm9yZGVyRGlmWzJdIHx8IDAsIHdpZHRoOiBhLndpZHRoKCkgLSB0aGlzLmJvcmRlckRpZlsxXSAtIHRoaXMuYm9yZGVyRGlmWzNdIHx8IDAgfSkgfSB9IH0sIF9yZW5kZXJQcm94eTogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMuZWxlbWVudCwgaSA9IHRoaXMub3B0aW9uczsgdGhpcy5lbGVtZW50T2Zmc2V0ID0gZS5vZmZzZXQoKSwgdGhpcy5faGVscGVyID8gKHRoaXMuaGVscGVyID0gdGhpcy5oZWxwZXIgfHwgdCgiPGRpdiBzdHlsZT0nb3ZlcmZsb3c6aGlkZGVuOyc+PFwvZGl2PiIpLCB0aGlzLmhlbHBlci5hZGRDbGFzcyh0aGlzLl9oZWxwZXIpLmNzcyh7IHdpZHRoOiB0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpIC0gMSwgaGVpZ2h0OiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSAtIDEsIHBvc2l0aW9uOiAiYWJzb2x1dGUiLCBsZWZ0OiB0aGlzLmVsZW1lbnRPZmZzZXQubGVmdCArICJweCIsIHRvcDogdGhpcy5lbGVtZW50T2Zmc2V0LnRvcCArICJweCIsIHpJbmRleDogKytpLnpJbmRleCB9KSwgdGhpcy5oZWxwZXIuYXBwZW5kVG8oImJvZHkiKS5kaXNhYmxlU2VsZWN0aW9uKCkpIDogdGhpcy5oZWxwZXIgPSB0aGlzLmVsZW1lbnQgfSwgX2NoYW5nZTogeyBlOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4geyB3aWR0aDogdGhpcy5vcmlnaW5hbFNpemUud2lkdGggKyBlIH0gfSwgdzogZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGkgPSB0aGlzLm9yaWdpbmFsU2l6ZSwgcyA9IHRoaXMub3JpZ2luYWxQb3NpdGlvbjsgcmV0dXJuIHsgbGVmdDogcy5sZWZ0ICsgZSwgd2lkdGg6IGkud2lkdGggLSBlIH0gfSwgbjogZnVuY3Rpb24gKHQsIGUsIGkpIHsgdmFyIHMgPSB0aGlzLm9yaWdpbmFsU2l6ZSwgbiA9IHRoaXMub3JpZ2luYWxQb3NpdGlvbjsgcmV0dXJuIHsgdG9wOiBuLnRvcCArIGksIGhlaWdodDogcy5oZWlnaHQgLSBpIH0gfSwgczogZnVuY3Rpb24gKHQsIGUsIGkpIHsgcmV0dXJuIHsgaGVpZ2h0OiB0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQgKyBpIH0gfSwgc2U6IGZ1bmN0aW9uIChlLCBpLCBzKSB7IHJldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLCBbZSwgaSwgc10pKSB9LCBzdzogZnVuY3Rpb24gKGUsIGksIHMpIHsgcmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsIFtlLCBpLCBzXSkpIH0sIG5lOiBmdW5jdGlvbiAoZSwgaSwgcykgeyByZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcywgW2UsIGksIHNdKSkgfSwgbnc6IGZ1bmN0aW9uIChlLCBpLCBzKSB7IHJldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLCBbZSwgaSwgc10pKSB9IH0sIF9wcm9wYWdhdGU6IGZ1bmN0aW9uIChlLCBpKSB7IHQudWkucGx1Z2luLmNhbGwodGhpcywgZSwgW2ksIHRoaXMudWkoKV0pLCAicmVzaXplIiAhPT0gZSAmJiB0aGlzLl90cmlnZ2VyKGUsIGksIHRoaXMudWkoKSkgfSwgcGx1Z2luczoge30sIHVpOiBmdW5jdGlvbiAoKSB7IHJldHVybiB7IG9yaWdpbmFsRWxlbWVudDogdGhpcy5vcmlnaW5hbEVsZW1lbnQsIGVsZW1lbnQ6IHRoaXMuZWxlbWVudCwgaGVscGVyOiB0aGlzLmhlbHBlciwgcG9zaXRpb246IHRoaXMucG9zaXRpb24sIHNpemU6IHRoaXMuc2l6ZSwgb3JpZ2luYWxTaXplOiB0aGlzLm9yaWdpbmFsU2l6ZSwgb3JpZ2luYWxQb3NpdGlvbjogdGhpcy5vcmlnaW5hbFBvc2l0aW9uIH0gfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCAiYW5pbWF0ZSIsIHsgc3RvcDogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLCBzID0gaS5vcHRpb25zLCBuID0gaS5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cywgYSA9IG4ubGVuZ3RoICYmIC90ZXh0YXJlYS9pLnRlc3QoblswXS5ub2RlTmFtZSksIG8gPSBhICYmIHQudWkuaGFzU2Nyb2xsKG5bMF0sICJsZWZ0IikgPyAwIDogaS5zaXplRGlmZi5oZWlnaHQsIHIgPSBhID8gMCA6IGkuc2l6ZURpZmYud2lkdGgsIGggPSB7IHdpZHRoOiBpLnNpemUud2lkdGggLSByLCBoZWlnaHQ6IGkuc2l6ZS5oZWlnaHQgLSBvIH0sIGwgPSBwYXJzZUludChpLmVsZW1lbnQuY3NzKCJsZWZ0IiksIDEwKSArIChpLnBvc2l0aW9uLmxlZnQgLSBpLm9yaWdpbmFsUG9zaXRpb24ubGVmdCkgfHwgbnVsbCwgYyA9IHBhcnNlSW50KGkuZWxlbWVudC5jc3MoInRvcCIpLCAxMCkgKyAoaS5wb3NpdGlvbi50b3AgLSBpLm9yaWdpbmFsUG9zaXRpb24udG9wKSB8fCBudWxsOyBpLmVsZW1lbnQuYW5pbWF0ZSh0LmV4dGVuZChoLCBjICYmIGwgPyB7IHRvcDogYywgbGVmdDogbCB9IDoge30pLCB7IGR1cmF0aW9uOiBzLmFuaW1hdGVEdXJhdGlvbiwgZWFzaW5nOiBzLmFuaW1hdGVFYXNpbmcsIHN0ZXA6IGZ1bmN0aW9uICgpIHsgdmFyIHMgPSB7IHdpZHRoOiBwYXJzZUludChpLmVsZW1lbnQuY3NzKCJ3aWR0aCIpLCAxMCksIGhlaWdodDogcGFyc2VJbnQoaS5lbGVtZW50LmNzcygiaGVpZ2h0IiksIDEwKSwgdG9wOiBwYXJzZUludChpLmVsZW1lbnQuY3NzKCJ0b3AiKSwgMTApLCBsZWZ0OiBwYXJzZUludChpLmVsZW1lbnQuY3NzKCJsZWZ0IiksIDEwKSB9OyBuICYmIG4ubGVuZ3RoICYmIHQoblswXSkuY3NzKHsgd2lkdGg6IHMud2lkdGgsIGhlaWdodDogcy5oZWlnaHQgfSksIGkuX3VwZGF0ZUNhY2hlKHMpLCBpLl9wcm9wYWdhdGUoInJlc2l6ZSIsIGUpIH0gfSkgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCAiY29udGFpbm1lbnQiLCB7IHN0YXJ0OiBmdW5jdGlvbiAoKSB7IHZhciBpLCBzLCBuLCBhLCBvLCByLCBoLCBsID0gdCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSwgYyA9IGwub3B0aW9ucywgdSA9IGwuZWxlbWVudCwgZCA9IGMuY29udGFpbm1lbnQsIHAgPSBkIGluc3RhbmNlb2YgdCA/IGQuZ2V0KDApIDogL3BhcmVudC8udGVzdChkKSA/IHUucGFyZW50KCkuZ2V0KDApIDogZDsgcCAmJiAobC5jb250YWluZXJFbGVtZW50ID0gdChwKSwgL2RvY3VtZW50Ly50ZXN0KGQpIHx8IGQgPT09IGRvY3VtZW50ID8gKGwuY29udGFpbmVyT2Zmc2V0ID0geyBsZWZ0OiAwLCB0b3A6IDAgfSwgbC5jb250YWluZXJQb3NpdGlvbiA9IHsgbGVmdDogMCwgdG9wOiAwIH0sIGwucGFyZW50RGF0YSA9IHsgZWxlbWVudDogdChkb2N1bWVudCksIGxlZnQ6IDAsIHRvcDogMCwgd2lkdGg6IHQoZG9jdW1lbnQpLndpZHRoKCksIGhlaWdodDogdChkb2N1bWVudCkuaGVpZ2h0KCkgfHwgZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCB9KSA6IChpID0gdChwKSwgcyA9IFtdLCB0KFsiVG9wIiwgIlJpZ2h0IiwgIkxlZnQiLCAiQm90dG9tIl0pLmVhY2goZnVuY3Rpb24gKHQsIG4pIHsgc1t0XSA9IGUoaS5jc3MoInBhZGRpbmciICsgbikpIH0pLCBsLmNvbnRhaW5lck9mZnNldCA9IGkub2Zmc2V0KCksIGwuY29udGFpbmVyUG9zaXRpb24gPSBpLnBvc2l0aW9uKCksIGwuY29udGFpbmVyU2l6ZSA9IHsgaGVpZ2h0OiBpLmlubmVySGVpZ2h0KCkgLSBzWzNdLCB3aWR0aDogaS5pbm5lcldpZHRoKCkgLSBzWzFdIH0sIG4gPSBsLmNvbnRhaW5lck9mZnNldCwgYSA9IGwuY29udGFpbmVyU2l6ZS5oZWlnaHQsIG8gPSBsLmNvbnRhaW5lclNpemUud2lkdGgsIHIgPSB0LnVpLmhhc1Njcm9sbChwLCAibGVmdCIpID8gcC5zY3JvbGxXaWR0aCA6IG8sIGggPSB0LnVpLmhhc1Njcm9sbChwKSA/IHAuc2Nyb2xsSGVpZ2h0IDogYSwgbC5wYXJlbnREYXRhID0geyBlbGVtZW50OiBwLCBsZWZ0OiBuLmxlZnQsIHRvcDogbi50b3AsIHdpZHRoOiByLCBoZWlnaHQ6IGggfSkpIH0sIHJlc2l6ZTogZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMsIG4sIGEsIG8gPSB0KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLCByID0gby5vcHRpb25zLCBoID0gby5jb250YWluZXJPZmZzZXQsIGwgPSBvLnBvc2l0aW9uLCBjID0gby5fYXNwZWN0UmF0aW8gfHwgZS5zaGlmdEtleSwgdSA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sIGQgPSBvLmNvbnRhaW5lckVsZW1lbnQ7IGRbMF0gIT09IGRvY3VtZW50ICYmIC9zdGF0aWMvLnRlc3QoZC5jc3MoInBvc2l0aW9uIikpICYmICh1ID0gaCksIGwubGVmdCA8IChvLl9oZWxwZXIgPyBoLmxlZnQgOiAwKSAmJiAoby5zaXplLndpZHRoID0gby5zaXplLndpZHRoICsgKG8uX2hlbHBlciA/IG8ucG9zaXRpb24ubGVmdCAtIGgubGVmdCA6IG8ucG9zaXRpb24ubGVmdCAtIHUubGVmdCksIGMgJiYgKG8uc2l6ZS5oZWlnaHQgPSBvLnNpemUud2lkdGggLyBvLmFzcGVjdFJhdGlvKSwgby5wb3NpdGlvbi5sZWZ0ID0gci5oZWxwZXIgPyBoLmxlZnQgOiAwKSwgbC50b3AgPCAoby5faGVscGVyID8gaC50b3AgOiAwKSAmJiAoby5zaXplLmhlaWdodCA9IG8uc2l6ZS5oZWlnaHQgKyAoby5faGVscGVyID8gby5wb3NpdGlvbi50b3AgLSBoLnRvcCA6IG8ucG9zaXRpb24udG9wKSwgYyAmJiAoby5zaXplLndpZHRoID0gby5zaXplLmhlaWdodCAqIG8uYXNwZWN0UmF0aW8pLCBvLnBvc2l0aW9uLnRvcCA9IG8uX2hlbHBlciA/IGgudG9wIDogMCksIG8ub2Zmc2V0LmxlZnQgPSBvLnBhcmVudERhdGEubGVmdCArIG8ucG9zaXRpb24ubGVmdCwgby5vZmZzZXQudG9wID0gby5wYXJlbnREYXRhLnRvcCArIG8ucG9zaXRpb24udG9wLCBpID0gTWF0aC5hYnMoKG8uX2hlbHBlciA/IG8ub2Zmc2V0LmxlZnQgLSB1LmxlZnQgOiBvLm9mZnNldC5sZWZ0IC0gdS5sZWZ0KSArIG8uc2l6ZURpZmYud2lkdGgpLCBzID0gTWF0aC5hYnMoKG8uX2hlbHBlciA/IG8ub2Zmc2V0LnRvcCAtIHUudG9wIDogby5vZmZzZXQudG9wIC0gaC50b3ApICsgby5zaXplRGlmZi5oZWlnaHQpLCBuID0gby5jb250YWluZXJFbGVtZW50LmdldCgwKSA9PT0gby5lbGVtZW50LnBhcmVudCgpLmdldCgwKSwgYSA9IC9yZWxhdGl2ZXxhYnNvbHV0ZS8udGVzdChvLmNvbnRhaW5lckVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpKSwgbiAmJiBhICYmIChpIC09IE1hdGguYWJzKG8ucGFyZW50RGF0YS5sZWZ0KSksIGkgKyBvLnNpemUud2lkdGggPj0gby5wYXJlbnREYXRhLndpZHRoICYmIChvLnNpemUud2lkdGggPSBvLnBhcmVudERhdGEud2lkdGggLSBpLCBjICYmIChvLnNpemUuaGVpZ2h0ID0gby5zaXplLndpZHRoIC8gby5hc3BlY3RSYXRpbykpLCBzICsgby5zaXplLmhlaWdodCA+PSBvLnBhcmVudERhdGEuaGVpZ2h0ICYmIChvLnNpemUuaGVpZ2h0ID0gby5wYXJlbnREYXRhLmhlaWdodCAtIHMsIGMgJiYgKG8uc2l6ZS53aWR0aCA9IG8uc2l6ZS5oZWlnaHQgKiBvLmFzcGVjdFJhdGlvKSkgfSwgc3RvcDogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIiksIGkgPSBlLm9wdGlvbnMsIHMgPSBlLmNvbnRhaW5lck9mZnNldCwgbiA9IGUuY29udGFpbmVyUG9zaXRpb24sIGEgPSBlLmNvbnRhaW5lckVsZW1lbnQsIG8gPSB0KGUuaGVscGVyKSwgciA9IG8ub2Zmc2V0KCksIGggPSBvLm91dGVyV2lkdGgoKSAtIGUuc2l6ZURpZmYud2lkdGgsIGwgPSBvLm91dGVySGVpZ2h0KCkgLSBlLnNpemVEaWZmLmhlaWdodDsgZS5faGVscGVyICYmICFpLmFuaW1hdGUgJiYgL3JlbGF0aXZlLy50ZXN0KGEuY3NzKCJwb3NpdGlvbiIpKSAmJiB0KHRoaXMpLmNzcyh7IGxlZnQ6IHIubGVmdCAtIG4ubGVmdCAtIHMubGVmdCwgd2lkdGg6IGgsIGhlaWdodDogbCB9KSwgZS5faGVscGVyICYmICFpLmFuaW1hdGUgJiYgL3N0YXRpYy8udGVzdChhLmNzcygicG9zaXRpb24iKSkgJiYgdCh0aGlzKS5jc3MoeyBsZWZ0OiByLmxlZnQgLSBuLmxlZnQgLSBzLmxlZnQsIHdpZHRoOiBoLCBoZWlnaHQ6IGwgfSkgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCAiYWxzb1Jlc2l6ZSIsIHsgc3RhcnQ6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLCBpID0gZS5vcHRpb25zLCBzID0gZnVuY3Rpb24gKGUpIHsgdChlKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpOyBlLmRhdGEoInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplIiwgeyB3aWR0aDogcGFyc2VJbnQoZS53aWR0aCgpLCAxMCksIGhlaWdodDogcGFyc2VJbnQoZS5oZWlnaHQoKSwgMTApLCBsZWZ0OiBwYXJzZUludChlLmNzcygibGVmdCIpLCAxMCksIHRvcDogcGFyc2VJbnQoZS5jc3MoInRvcCIpLCAxMCkgfSkgfSkgfTsgIm9iamVjdCIgIT0gdHlwZW9mIGkuYWxzb1Jlc2l6ZSB8fCBpLmFsc29SZXNpemUucGFyZW50Tm9kZSA/IHMoaS5hbHNvUmVzaXplKSA6IGkuYWxzb1Jlc2l6ZS5sZW5ndGggPyAoaS5hbHNvUmVzaXplID0gaS5hbHNvUmVzaXplWzBdLCBzKGkuYWxzb1Jlc2l6ZSkpIDogdC5lYWNoKGkuYWxzb1Jlc2l6ZSwgZnVuY3Rpb24gKHQpIHsgcyh0KSB9KSB9LCByZXNpemU6IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gdCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSwgbiA9IHMub3B0aW9ucywgYSA9IHMub3JpZ2luYWxTaXplLCBvID0gcy5vcmlnaW5hbFBvc2l0aW9uLCByID0geyBoZWlnaHQ6IHMuc2l6ZS5oZWlnaHQgLSBhLmhlaWdodCB8fCAwLCB3aWR0aDogcy5zaXplLndpZHRoIC0gYS53aWR0aCB8fCAwLCB0b3A6IHMucG9zaXRpb24udG9wIC0gby50b3AgfHwgMCwgbGVmdDogcy5wb3NpdGlvbi5sZWZ0IC0gby5sZWZ0IHx8IDAgfSwgaCA9IGZ1bmN0aW9uIChlLCBzKSB7IHQoZSkuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKSwgbiA9IHQodGhpcykuZGF0YSgidWktcmVzaXphYmxlLWFsc29yZXNpemUiKSwgYSA9IHt9LCBvID0gcyAmJiBzLmxlbmd0aCA/IHMgOiBlLnBhcmVudHMoaS5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aCA/IFsid2lkdGgiLCAiaGVpZ2h0Il0gOiBbIndpZHRoIiwgImhlaWdodCIsICJ0b3AiLCAibGVmdCJdOyB0LmVhY2gobywgZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGkgPSAobltlXSB8fCAwKSArIChyW2VdIHx8IDApOyBpICYmIGkgPj0gMCAmJiAoYVtlXSA9IGkgfHwgbnVsbCkgfSksIGUuY3NzKGEpIH0pIH07ICJvYmplY3QiICE9IHR5cGVvZiBuLmFsc29SZXNpemUgfHwgbi5hbHNvUmVzaXplLm5vZGVUeXBlID8gaChuLmFsc29SZXNpemUpIDogdC5lYWNoKG4uYWxzb1Jlc2l6ZSwgZnVuY3Rpb24gKHQsIGUpIHsgaCh0LCBlKSB9KSB9LCBzdG9wOiBmdW5jdGlvbiAoKSB7IHQodGhpcykucmVtb3ZlRGF0YSgicmVzaXphYmxlLWFsc29yZXNpemUiKSB9IH0pLCB0LnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsICJnaG9zdCIsIHsgc3RhcnQ6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLCBpID0gZS5vcHRpb25zLCBzID0gZS5zaXplOyBlLmdob3N0ID0gZS5vcmlnaW5hbEVsZW1lbnQuY2xvbmUoKSwgZS5naG9zdC5jc3MoeyBvcGFjaXR5OiAuMjUsIGRpc3BsYXk6ICJibG9jayIsIHBvc2l0aW9uOiAicmVsYXRpdmUiLCBoZWlnaHQ6IHMuaGVpZ2h0LCB3aWR0aDogcy53aWR0aCwgbWFyZ2luOiAwLCBsZWZ0OiAwLCB0b3A6IDAgfSkuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1naG9zdCIpLmFkZENsYXNzKCJzdHJpbmciID09IHR5cGVvZiBpLmdob3N0ID8gaS5naG9zdCA6ICIiKSwgZS5naG9zdC5hcHBlbmRUbyhlLmhlbHBlcikgfSwgcmVzaXplOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKTsgZS5naG9zdCAmJiBlLmdob3N0LmNzcyh7IHBvc2l0aW9uOiAicmVsYXRpdmUiLCBoZWlnaHQ6IGUuc2l6ZS5oZWlnaHQsIHdpZHRoOiBlLnNpemUud2lkdGggfSkgfSwgc3RvcDogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIik7IGUuZ2hvc3QgJiYgZS5oZWxwZXIgJiYgZS5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKGUuZ2hvc3QuZ2V0KDApKSB9IH0pLCB0LnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsICJncmlkIiwgeyByZXNpemU6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLCBpID0gZS5vcHRpb25zLCBzID0gZS5zaXplLCBuID0gZS5vcmlnaW5hbFNpemUsIGEgPSBlLm9yaWdpbmFsUG9zaXRpb24sIG8gPSBlLmF4aXMsIHIgPSAibnVtYmVyIiA9PSB0eXBlb2YgaS5ncmlkID8gW2kuZ3JpZCwgaS5ncmlkXSA6IGkuZ3JpZCwgaCA9IHJbMF0gfHwgMSwgbCA9IHJbMV0gfHwgMSwgYyA9IE1hdGgucm91bmQoKHMud2lkdGggLSBuLndpZHRoKSAvIGgpICogaCwgdSA9IE1hdGgucm91bmQoKHMuaGVpZ2h0IC0gbi5oZWlnaHQpIC8gbCkgKiBsLCBkID0gbi53aWR0aCArIGMsIHAgPSBuLmhlaWdodCArIHUsIGYgPSBpLm1heFdpZHRoICYmIGQgPiBpLm1heFdpZHRoLCBnID0gaS5tYXhIZWlnaHQgJiYgcCA+IGkubWF4SGVpZ2h0LCBtID0gaS5taW5XaWR0aCAmJiBpLm1pbldpZHRoID4gZCwgdiA9IGkubWluSGVpZ2h0ICYmIGkubWluSGVpZ2h0ID4gcDsgaS5ncmlkID0gciwgbSAmJiAoZCArPSBoKSwgdiAmJiAocCArPSBsKSwgZiAmJiAoZCAtPSBoKSwgZyAmJiAocCAtPSBsKSwgL14oc2V8c3xlKSQvLnRlc3QobykgPyAoZS5zaXplLndpZHRoID0gZCwgZS5zaXplLmhlaWdodCA9IHApIDogL14obmUpJC8udGVzdChvKSA/IChlLnNpemUud2lkdGggPSBkLCBlLnNpemUuaGVpZ2h0ID0gcCwgZS5wb3NpdGlvbi50b3AgPSBhLnRvcCAtIHUpIDogL14oc3cpJC8udGVzdChvKSA/IChlLnNpemUud2lkdGggPSBkLCBlLnNpemUuaGVpZ2h0ID0gcCwgZS5wb3NpdGlvbi5sZWZ0ID0gYS5sZWZ0IC0gYykgOiAocCAtIGwgPiAwID8gKGUuc2l6ZS5oZWlnaHQgPSBwLCBlLnBvc2l0aW9uLnRvcCA9IGEudG9wIC0gdSkgOiAoZS5zaXplLmhlaWdodCA9IGwsIGUucG9zaXRpb24udG9wID0gYS50b3AgKyBuLmhlaWdodCAtIGwpLCBkIC0gaCA+IDAgPyAoZS5zaXplLndpZHRoID0gZCwgZS5wb3NpdGlvbi5sZWZ0ID0gYS5sZWZ0IC0gYykgOiAoZS5zaXplLndpZHRoID0gaCwgZS5wb3NpdGlvbi5sZWZ0ID0gYS5sZWZ0ICsgbi53aWR0aCAtIGgpKSB9IH0pIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyB0LndpZGdldCgidWkuc2VsZWN0YWJsZSIsIHQudWkubW91c2UsIHsgdmVyc2lvbjogIjEuMTAuNCIsIG9wdGlvbnM6IHsgYXBwZW5kVG86ICJib2R5IiwgYXV0b1JlZnJlc2g6ICEwLCBkaXN0YW5jZTogMCwgZmlsdGVyOiAiKiIsIHRvbGVyYW5jZTogInRvdWNoIiwgc2VsZWN0ZWQ6IG51bGwsIHNlbGVjdGluZzogbnVsbCwgc3RhcnQ6IG51bGwsIHN0b3A6IG51bGwsIHVuc2VsZWN0ZWQ6IG51bGwsIHVuc2VsZWN0aW5nOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIGkgPSB0aGlzOyB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGFibGUiKSwgdGhpcy5kcmFnZ2VkID0gITEsIHRoaXMucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHsgZSA9IHQoaS5vcHRpb25zLmZpbHRlciwgaS5lbGVtZW50WzBdKSwgZS5hZGRDbGFzcygidWktc2VsZWN0ZWUiKSwgZS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLCBpID0gZS5vZmZzZXQoKTsgdC5kYXRhKHRoaXMsICJzZWxlY3RhYmxlLWl0ZW0iLCB7IGVsZW1lbnQ6IHRoaXMsICRlbGVtZW50OiBlLCBsZWZ0OiBpLmxlZnQsIHRvcDogaS50b3AsIHJpZ2h0OiBpLmxlZnQgKyBlLm91dGVyV2lkdGgoKSwgYm90dG9tOiBpLnRvcCArIGUub3V0ZXJIZWlnaHQoKSwgc3RhcnRzZWxlY3RlZDogITEsIHNlbGVjdGVkOiBlLmhhc0NsYXNzKCJ1aS1zZWxlY3RlZCIpLCBzZWxlY3Rpbmc6IGUuaGFzQ2xhc3MoInVpLXNlbGVjdGluZyIpLCB1bnNlbGVjdGluZzogZS5oYXNDbGFzcygidWktdW5zZWxlY3RpbmciKSB9KSB9KSB9LCB0aGlzLnJlZnJlc2goKSwgdGhpcy5zZWxlY3RlZXMgPSBlLmFkZENsYXNzKCJ1aS1zZWxlY3RlZSIpLCB0aGlzLl9tb3VzZUluaXQoKSwgdGhpcy5oZWxwZXIgPSB0KCI8ZGl2IGNsYXNzPSd1aS1zZWxlY3RhYmxlLWhlbHBlcic+PFwvZGl2PiIpIH0sIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7IHRoaXMuc2VsZWN0ZWVzLnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZSIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUtaXRlbSIpLCB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGFibGUgdWktc2VsZWN0YWJsZS1kaXNhYmxlZCIpLCB0aGlzLl9tb3VzZURlc3Ryb3koKSB9LCBfbW91c2VTdGFydDogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0aGlzLCBzID0gdGhpcy5vcHRpb25zOyB0aGlzLm9wb3MgPSBbZS5wYWdlWCwgZS5wYWdlWV0sIHRoaXMub3B0aW9ucy5kaXNhYmxlZCB8fCAodGhpcy5zZWxlY3RlZXMgPSB0KHMuZmlsdGVyLCB0aGlzLmVsZW1lbnRbMF0pLCB0aGlzLl90cmlnZ2VyKCJzdGFydCIsIGUpLCB0KHMuYXBwZW5kVG8pLmFwcGVuZCh0aGlzLmhlbHBlciksIHRoaXMuaGVscGVyLmNzcyh7IGxlZnQ6IGUucGFnZVgsIHRvcDogZS5wYWdlWSwgd2lkdGg6IDAsIGhlaWdodDogMCB9KSwgcy5hdXRvUmVmcmVzaCAmJiB0aGlzLnJlZnJlc2goKSwgdGhpcy5zZWxlY3RlZXMuZmlsdGVyKCIudWktc2VsZWN0ZWQiKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHMgPSB0LmRhdGEodGhpcywgInNlbGVjdGFibGUtaXRlbSIpOyBzLnN0YXJ0c2VsZWN0ZWQgPSAhMCwgZS5tZXRhS2V5IHx8IGUuY3RybEtleSB8fCAocy4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSwgcy5zZWxlY3RlZCA9ICExLCBzLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBzLnVuc2VsZWN0aW5nID0gITAsIGkuX3RyaWdnZXIoInVuc2VsZWN0aW5nIiwgZSwgeyB1bnNlbGVjdGluZzogcy5lbGVtZW50IH0pKSB9KSwgdChlLnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHMsIG4gPSB0LmRhdGEodGhpcywgInNlbGVjdGFibGUtaXRlbSIpOyByZXR1cm4gbiA/IChzID0gIWUubWV0YUtleSAmJiAhZS5jdHJsS2V5IHx8ICFuLiRlbGVtZW50Lmhhc0NsYXNzKCJ1aS1zZWxlY3RlZCIpLCBuLiRlbGVtZW50LnJlbW92ZUNsYXNzKHMgPyAidWktdW5zZWxlY3RpbmciIDogInVpLXNlbGVjdGVkIikuYWRkQ2xhc3MocyA/ICJ1aS1zZWxlY3RpbmciIDogInVpLXVuc2VsZWN0aW5nIiksIG4udW5zZWxlY3RpbmcgPSAhcywgbi5zZWxlY3RpbmcgPSBzLCBuLnNlbGVjdGVkID0gcywgcyA/IGkuX3RyaWdnZXIoInNlbGVjdGluZyIsIGUsIHsgc2VsZWN0aW5nOiBuLmVsZW1lbnQgfSkgOiBpLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsIGUsIHsgdW5zZWxlY3Rpbmc6IG4uZWxlbWVudCB9KSwgITEpIDogdW5kZWZpbmVkIH0pKSB9LCBfbW91c2VEcmFnOiBmdW5jdGlvbiAoZSkgeyBpZiAodGhpcy5kcmFnZ2VkID0gITAsICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHsgdmFyIGksIHMgPSB0aGlzLCBuID0gdGhpcy5vcHRpb25zLCBhID0gdGhpcy5vcG9zWzBdLCBvID0gdGhpcy5vcG9zWzFdLCByID0gZS5wYWdlWCwgbCA9IGUucGFnZVk7IHJldHVybiBhID4gciAmJiAoaSA9IHIsIHIgPSBhLCBhID0gaSksIG8gPiBsICYmIChpID0gbCwgbCA9IG8sIG8gPSBpKSwgdGhpcy5oZWxwZXIuY3NzKHsgbGVmdDogYSwgdG9wOiBvLCB3aWR0aDogciAtIGEsIGhlaWdodDogbCAtIG8gfSksIHRoaXMuc2VsZWN0ZWVzLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgaSA9IHQuZGF0YSh0aGlzLCAic2VsZWN0YWJsZS1pdGVtIiksIGggPSAhMTsgaSAmJiBpLmVsZW1lbnQgIT09IHMuZWxlbWVudFswXSAmJiAoInRvdWNoIiA9PT0gbi50b2xlcmFuY2UgPyBoID0gIShpLmxlZnQgPiByIHx8IGEgPiBpLnJpZ2h0IHx8IGkudG9wID4gbCB8fCBvID4gaS5ib3R0b20pIDogImZpdCIgPT09IG4udG9sZXJhbmNlICYmIChoID0gaS5sZWZ0ID4gYSAmJiByID4gaS5yaWdodCAmJiBpLnRvcCA+IG8gJiYgbCA+IGkuYm90dG9tKSwgaCA/IChpLnNlbGVjdGVkICYmIChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLCBpLnNlbGVjdGVkID0gITEpLCBpLnVuc2VsZWN0aW5nICYmIChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBpLnVuc2VsZWN0aW5nID0gITEpLCBpLnNlbGVjdGluZyB8fCAoaS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0aW5nIiksIGkuc2VsZWN0aW5nID0gITAsIHMuX3RyaWdnZXIoInNlbGVjdGluZyIsIGUsIHsgc2VsZWN0aW5nOiBpLmVsZW1lbnQgfSkpKSA6IChpLnNlbGVjdGluZyAmJiAoKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpICYmIGkuc3RhcnRzZWxlY3RlZCA/IChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSwgaS5zZWxlY3RpbmcgPSAhMSwgaS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSwgaS5zZWxlY3RlZCA9ICEwKSA6IChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSwgaS5zZWxlY3RpbmcgPSAhMSwgaS5zdGFydHNlbGVjdGVkICYmIChpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBpLnVuc2VsZWN0aW5nID0gITApLCBzLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsIGUsIHsgdW5zZWxlY3Rpbmc6IGkuZWxlbWVudCB9KSkpLCBpLnNlbGVjdGVkICYmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5IHx8IGkuc3RhcnRzZWxlY3RlZCB8fCAoaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSwgaS5zZWxlY3RlZCA9ICExLCBpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBpLnVuc2VsZWN0aW5nID0gITAsIHMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIiwgZSwgeyB1bnNlbGVjdGluZzogaS5lbGVtZW50IH0pKSkpKSB9KSwgITEgfSB9LCBfbW91c2VTdG9wOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXM7IHJldHVybiB0aGlzLmRyYWdnZWQgPSAhMSwgdCgiLnVpLXVuc2VsZWN0aW5nIiwgdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHMgPSB0LmRhdGEodGhpcywgInNlbGVjdGFibGUtaXRlbSIpOyBzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBzLnVuc2VsZWN0aW5nID0gITEsIHMuc3RhcnRzZWxlY3RlZCA9ICExLCBpLl90cmlnZ2VyKCJ1bnNlbGVjdGVkIiwgZSwgeyB1bnNlbGVjdGVkOiBzLmVsZW1lbnQgfSkgfSksIHQoIi51aS1zZWxlY3RpbmciLCB0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgcyA9IHQuZGF0YSh0aGlzLCAic2VsZWN0YWJsZS1pdGVtIik7IHMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLmFkZENsYXNzKCJ1aS1zZWxlY3RlZCIpLCBzLnNlbGVjdGluZyA9ICExLCBzLnNlbGVjdGVkID0gITAsIHMuc3RhcnRzZWxlY3RlZCA9ICEwLCBpLl90cmlnZ2VyKCJzZWxlY3RlZCIsIGUsIHsgc2VsZWN0ZWQ6IHMuZWxlbWVudCB9KSB9KSwgdGhpcy5fdHJpZ2dlcigic3RvcCIsIGUpLCB0aGlzLmhlbHBlci5yZW1vdmUoKSwgITEgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSA1OyB0LndpZGdldCgidWkuc2xpZGVyIiwgdC51aS5tb3VzZSwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgd2lkZ2V0RXZlbnRQcmVmaXg6ICJzbGlkZSIsIG9wdGlvbnM6IHsgYW5pbWF0ZTogITEsIGRpc3RhbmNlOiAwLCBtYXg6IDEwMCwgbWluOiAwLCBvcmllbnRhdGlvbjogImhvcml6b250YWwiLCByYW5nZTogITEsIHN0ZXA6IDEsIHZhbHVlOiAwLCB2YWx1ZXM6IG51bGwsIGNoYW5nZTogbnVsbCwgc2xpZGU6IG51bGwsIHN0YXJ0OiBudWxsLCBzdG9wOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5fa2V5U2xpZGluZyA9ICExLCB0aGlzLl9tb3VzZVNsaWRpbmcgPSAhMSwgdGhpcy5fYW5pbWF0ZU9mZiA9ICEwLCB0aGlzLl9oYW5kbGVJbmRleCA9IG51bGwsIHRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksIHRoaXMuX21vdXNlSW5pdCgpLCB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItIiArIHRoaXMub3JpZW50YXRpb24gKyAiIHVpLXdpZGdldCIgKyAiIHVpLXdpZGdldC1jb250ZW50IiArICIgdWktY29ybmVyLWFsbCIpLCB0aGlzLl9yZWZyZXNoKCksIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLCB0aGlzLl9hbmltYXRlT2ZmID0gITEgfSwgX3JlZnJlc2g6IGZ1bmN0aW9uICgpIHsgdGhpcy5fY3JlYXRlUmFuZ2UoKSwgdGhpcy5fY3JlYXRlSGFuZGxlcygpLCB0aGlzLl9zZXR1cEV2ZW50cygpLCB0aGlzLl9yZWZyZXNoVmFsdWUoKSB9LCBfY3JlYXRlSGFuZGxlczogZnVuY3Rpb24gKCkgeyB2YXIgZSwgaSwgcyA9IHRoaXMub3B0aW9ucywgbiA9IHRoaXMuZWxlbWVudC5maW5kKCIudWktc2xpZGVyLWhhbmRsZSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSwgYSA9ICI8YSBjbGFzcz0ndWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnIGhyZWY9JyMnPjxcL2E+IiwgbyA9IFtdOyBmb3IgKGkgPSBzLnZhbHVlcyAmJiBzLnZhbHVlcy5sZW5ndGggfHwgMSwgbi5sZW5ndGggPiBpICYmIChuLnNsaWNlKGkpLnJlbW92ZSgpLCBuID0gbi5zbGljZSgwLCBpKSksIGUgPSBuLmxlbmd0aDsgaSA+IGU7IGUrKykgby5wdXNoKGEpOyB0aGlzLmhhbmRsZXMgPSBuLmFkZCh0KG8uam9pbigiIikpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCkpLCB0aGlzLmhhbmRsZSA9IHRoaXMuaGFuZGxlcy5lcSgwKSwgdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24gKGUpIHsgdCh0aGlzKS5kYXRhKCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4IiwgZSkgfSkgfSwgX2NyZWF0ZVJhbmdlOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5vcHRpb25zLCBpID0gIiI7IGUucmFuZ2UgPyAoZS5yYW5nZSA9PT0gITAgJiYgKGUudmFsdWVzID8gZS52YWx1ZXMubGVuZ3RoICYmIDIgIT09IGUudmFsdWVzLmxlbmd0aCA/IGUudmFsdWVzID0gW2UudmFsdWVzWzBdLCBlLnZhbHVlc1swXV0gOiB0LmlzQXJyYXkoZS52YWx1ZXMpICYmIChlLnZhbHVlcyA9IGUudmFsdWVzLnNsaWNlKDApKSA6IGUudmFsdWVzID0gW3RoaXMuX3ZhbHVlTWluKCksIHRoaXMuX3ZhbHVlTWluKCldKSwgdGhpcy5yYW5nZSAmJiB0aGlzLnJhbmdlLmxlbmd0aCA/IHRoaXMucmFuZ2UucmVtb3ZlQ2xhc3MoInVpLXNsaWRlci1yYW5nZS1taW4gdWktc2xpZGVyLXJhbmdlLW1heCIpLmNzcyh7IGxlZnQ6ICIiLCBib3R0b206ICIiIH0pIDogKHRoaXMucmFuZ2UgPSB0KCI8ZGl2PjxcL2Rpdj4iKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLCBpID0gInVpLXNsaWRlci1yYW5nZSB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKSwgdGhpcy5yYW5nZS5hZGRDbGFzcyhpICsgKCJtaW4iID09PSBlLnJhbmdlIHx8ICJtYXgiID09PSBlLnJhbmdlID8gIiB1aS1zbGlkZXItcmFuZ2UtIiArIGUucmFuZ2UgOiAiIikpKSA6ICh0aGlzLnJhbmdlICYmIHRoaXMucmFuZ2UucmVtb3ZlKCksIHRoaXMucmFuZ2UgPSBudWxsKSB9LCBfc2V0dXBFdmVudHM6IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzLmhhbmRsZXMuYWRkKHRoaXMucmFuZ2UpLmZpbHRlcigiYSIpOyB0aGlzLl9vZmYodCksIHRoaXMuX29uKHQsIHRoaXMuX2hhbmRsZUV2ZW50cyksIHRoaXMuX2hvdmVyYWJsZSh0KSwgdGhpcy5fZm9jdXNhYmxlKHQpIH0sIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7IHRoaXMuaGFuZGxlcy5yZW1vdmUoKSwgdGhpcy5yYW5nZSAmJiB0aGlzLnJhbmdlLnJlbW92ZSgpLCB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWwgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKSwgdGhpcy5fbW91c2VEZXN0cm95KCkgfSwgX21vdXNlQ2FwdHVyZTogZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMsIG4sIGEsIG8sIHIsIGwsIGgsIHUgPSB0aGlzLCBjID0gdGhpcy5vcHRpb25zOyByZXR1cm4gYy5kaXNhYmxlZCA/ICExIDogKHRoaXMuZWxlbWVudFNpemUgPSB7IHdpZHRoOiB0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLCBoZWlnaHQ6IHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpIH0sIHRoaXMuZWxlbWVudE9mZnNldCA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKSwgaSA9IHsgeDogZS5wYWdlWCwgeTogZS5wYWdlWSB9LCBzID0gdGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKGkpLCBuID0gdGhpcy5fdmFsdWVNYXgoKSAtIHRoaXMuX3ZhbHVlTWluKCkgKyAxLCB0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IE1hdGguYWJzKHMgLSB1LnZhbHVlcyhlKSk7IChuID4gaSB8fCBuID09PSBpICYmIChlID09PSB1Ll9sYXN0Q2hhbmdlZFZhbHVlIHx8IHUudmFsdWVzKGUpID09PSBjLm1pbikpICYmIChuID0gaSwgYSA9IHQodGhpcyksIG8gPSBlKSB9KSwgciA9IHRoaXMuX3N0YXJ0KGUsIG8pLCByID09PSAhMSA/ICExIDogKHRoaXMuX21vdXNlU2xpZGluZyA9ICEwLCB0aGlzLl9oYW5kbGVJbmRleCA9IG8sIGEuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmZvY3VzKCksIGwgPSBhLm9mZnNldCgpLCBoID0gIXQoZS50YXJnZXQpLnBhcmVudHMoKS5hZGRCYWNrKCkuaXMoIi51aS1zbGlkZXItaGFuZGxlIiksIHRoaXMuX2NsaWNrT2Zmc2V0ID0gaCA/IHsgbGVmdDogMCwgdG9wOiAwIH0gOiB7IGxlZnQ6IGUucGFnZVggLSBsLmxlZnQgLSBhLndpZHRoKCkgLyAyLCB0b3A6IGUucGFnZVkgLSBsLnRvcCAtIGEuaGVpZ2h0KCkgLyAyIC0gKHBhcnNlSW50KGEuY3NzKCJib3JkZXJUb3BXaWR0aCIpLCAxMCkgfHwgMCkgLSAocGFyc2VJbnQoYS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksIDEwKSB8fCAwKSArIChwYXJzZUludChhLmNzcygibWFyZ2luVG9wIiksIDEwKSB8fCAwKSB9LCB0aGlzLmhhbmRsZXMuaGFzQ2xhc3MoInVpLXN0YXRlLWhvdmVyIikgfHwgdGhpcy5fc2xpZGUoZSwgbywgcyksIHRoaXMuX2FuaW1hdGVPZmYgPSAhMCwgITApKSB9LCBfbW91c2VTdGFydDogZnVuY3Rpb24gKCkgeyByZXR1cm4gITAgfSwgX21vdXNlRHJhZzogZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSB7IHg6IHQucGFnZVgsIHk6IHQucGFnZVkgfSwgaSA9IHRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShlKTsgcmV0dXJuIHRoaXMuX3NsaWRlKHQsIHRoaXMuX2hhbmRsZUluZGV4LCBpKSwgITEgfSwgX21vdXNlU3RvcDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHRoaXMuaGFuZGxlcy5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksIHRoaXMuX21vdXNlU2xpZGluZyA9ICExLCB0aGlzLl9zdG9wKHQsIHRoaXMuX2hhbmRsZUluZGV4KSwgdGhpcy5fY2hhbmdlKHQsIHRoaXMuX2hhbmRsZUluZGV4KSwgdGhpcy5faGFuZGxlSW5kZXggPSBudWxsLCB0aGlzLl9jbGlja09mZnNldCA9IG51bGwsIHRoaXMuX2FuaW1hdGVPZmYgPSAhMSwgITEgfSwgX2RldGVjdE9yaWVudGF0aW9uOiBmdW5jdGlvbiAoKSB7IHRoaXMub3JpZW50YXRpb24gPSAidmVydGljYWwiID09PSB0aGlzLm9wdGlvbnMub3JpZW50YXRpb24gPyAidmVydGljYWwiIDogImhvcml6b250YWwiIH0sIF9ub3JtVmFsdWVGcm9tTW91c2U6IGZ1bmN0aW9uICh0KSB7IHZhciBlLCBpLCBzLCBuLCBhOyByZXR1cm4gImhvcml6b250YWwiID09PSB0aGlzLm9yaWVudGF0aW9uID8gKGUgPSB0aGlzLmVsZW1lbnRTaXplLndpZHRoLCBpID0gdC54IC0gdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQgLSAodGhpcy5fY2xpY2tPZmZzZXQgPyB0aGlzLl9jbGlja09mZnNldC5sZWZ0IDogMCkpIDogKGUgPSB0aGlzLmVsZW1lbnRTaXplLmhlaWdodCwgaSA9IHQueSAtIHRoaXMuZWxlbWVudE9mZnNldC50b3AgLSAodGhpcy5fY2xpY2tPZmZzZXQgPyB0aGlzLl9jbGlja09mZnNldC50b3AgOiAwKSksIHMgPSBpIC8gZSwgcyA+IDEgJiYgKHMgPSAxKSwgMCA+IHMgJiYgKHMgPSAwKSwgInZlcnRpY2FsIiA9PT0gdGhpcy5vcmllbnRhdGlvbiAmJiAocyA9IDEgLSBzKSwgbiA9IHRoaXMuX3ZhbHVlTWF4KCkgLSB0aGlzLl92YWx1ZU1pbigpLCBhID0gdGhpcy5fdmFsdWVNaW4oKSArIHMgKiBuLCB0aGlzLl90cmltQWxpZ25WYWx1ZShhKSB9LCBfc3RhcnQ6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpID0geyBoYW5kbGU6IHRoaXMuaGFuZGxlc1tlXSwgdmFsdWU6IHRoaXMudmFsdWUoKSB9OyByZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyAmJiB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCAmJiAoaS52YWx1ZSA9IHRoaXMudmFsdWVzKGUpLCBpLnZhbHVlcyA9IHRoaXMudmFsdWVzKCkpLCB0aGlzLl90cmlnZ2VyKCJzdGFydCIsIHQsIGkpIH0sIF9zbGlkZTogZnVuY3Rpb24gKHQsIGUsIGkpIHsgdmFyIHMsIG4sIGE7IHRoaXMub3B0aW9ucy52YWx1ZXMgJiYgdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGggPyAocyA9IHRoaXMudmFsdWVzKGUgPyAwIDogMSksIDIgPT09IHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5yYW5nZSA9PT0gITAgJiYgKDAgPT09IGUgJiYgaSA+IHMgfHwgMSA9PT0gZSAmJiBzID4gaSkgJiYgKGkgPSBzKSwgaSAhPT0gdGhpcy52YWx1ZXMoZSkgJiYgKG4gPSB0aGlzLnZhbHVlcygpLCBuW2VdID0gaSwgYSA9IHRoaXMuX3RyaWdnZXIoInNsaWRlIiwgdCwgeyBoYW5kbGU6IHRoaXMuaGFuZGxlc1tlXSwgdmFsdWU6IGksIHZhbHVlczogbiB9KSwgcyA9IHRoaXMudmFsdWVzKGUgPyAwIDogMSksIGEgIT09ICExICYmIHRoaXMudmFsdWVzKGUsIGkpKSkgOiBpICE9PSB0aGlzLnZhbHVlKCkgJiYgKGEgPSB0aGlzLl90cmlnZ2VyKCJzbGlkZSIsIHQsIHsgaGFuZGxlOiB0aGlzLmhhbmRsZXNbZV0sIHZhbHVlOiBpIH0pLCBhICE9PSAhMSAmJiB0aGlzLnZhbHVlKGkpKSB9LCBfc3RvcDogZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGkgPSB7IGhhbmRsZTogdGhpcy5oYW5kbGVzW2VdLCB2YWx1ZTogdGhpcy52YWx1ZSgpIH07IHRoaXMub3B0aW9ucy52YWx1ZXMgJiYgdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGggJiYgKGkudmFsdWUgPSB0aGlzLnZhbHVlcyhlKSwgaS52YWx1ZXMgPSB0aGlzLnZhbHVlcygpKSwgdGhpcy5fdHJpZ2dlcigic3RvcCIsIHQsIGkpIH0sIF9jaGFuZ2U6IGZ1bmN0aW9uICh0LCBlKSB7IGlmICghdGhpcy5fa2V5U2xpZGluZyAmJiAhdGhpcy5fbW91c2VTbGlkaW5nKSB7IHZhciBpID0geyBoYW5kbGU6IHRoaXMuaGFuZGxlc1tlXSwgdmFsdWU6IHRoaXMudmFsdWUoKSB9OyB0aGlzLm9wdGlvbnMudmFsdWVzICYmIHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoICYmIChpLnZhbHVlID0gdGhpcy52YWx1ZXMoZSksIGkudmFsdWVzID0gdGhpcy52YWx1ZXMoKSksIHRoaXMuX2xhc3RDaGFuZ2VkVmFsdWUgPSBlLCB0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLCB0LCBpKSB9IH0sIHZhbHVlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLl90cmltQWxpZ25WYWx1ZSh0KSwgdGhpcy5fcmVmcmVzaFZhbHVlKCksIHRoaXMuX2NoYW5nZShudWxsLCAwKSwgdW5kZWZpbmVkKSA6IHRoaXMuX3ZhbHVlKCkgfSwgdmFsdWVzOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcywgbiwgYTsgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSByZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlc1tlXSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKGkpLCB0aGlzLl9yZWZyZXNoVmFsdWUoKSwgdGhpcy5fY2hhbmdlKG51bGwsIGUpLCB1bmRlZmluZWQ7IGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMuX3ZhbHVlcygpOyBpZiAoIXQuaXNBcnJheShhcmd1bWVudHNbMF0pKSByZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyAmJiB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCA/IHRoaXMuX3ZhbHVlcyhlKSA6IHRoaXMudmFsdWUoKTsgZm9yIChzID0gdGhpcy5vcHRpb25zLnZhbHVlcywgbiA9IGFyZ3VtZW50c1swXSwgYSA9IDA7IHMubGVuZ3RoID4gYTsgYSArPSAxKSBzW2FdID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoblthXSksIHRoaXMuX2NoYW5nZShudWxsLCBhKTsgdGhpcy5fcmVmcmVzaFZhbHVlKCkgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMsIG4gPSAwOyBzd2l0Y2ggKCJyYW5nZSIgPT09IGUgJiYgdGhpcy5vcHRpb25zLnJhbmdlID09PSAhMCAmJiAoIm1pbiIgPT09IGkgPyAodGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5fdmFsdWVzKDApLCB0aGlzLm9wdGlvbnMudmFsdWVzID0gbnVsbCkgOiAibWF4IiA9PT0gaSAmJiAodGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5fdmFsdWVzKHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoIC0gMSksIHRoaXMub3B0aW9ucy52YWx1ZXMgPSBudWxsKSksIHQuaXNBcnJheSh0aGlzLm9wdGlvbnMudmFsdWVzKSAmJiAobiA9IHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKSwgdC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgZSkgeyBjYXNlICJvcmllbnRhdGlvbiI6IHRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIikuYWRkQ2xhc3MoInVpLXNsaWRlci0iICsgdGhpcy5vcmllbnRhdGlvbiksIHRoaXMuX3JlZnJlc2hWYWx1ZSgpOyBicmVhazsgY2FzZSAidmFsdWUiOiB0aGlzLl9hbmltYXRlT2ZmID0gITAsIHRoaXMuX3JlZnJlc2hWYWx1ZSgpLCB0aGlzLl9jaGFuZ2UobnVsbCwgMCksIHRoaXMuX2FuaW1hdGVPZmYgPSAhMTsgYnJlYWs7IGNhc2UgInZhbHVlcyI6IGZvciAodGhpcy5fYW5pbWF0ZU9mZiA9ICEwLCB0aGlzLl9yZWZyZXNoVmFsdWUoKSwgcyA9IDA7IG4gPiBzOyBzICs9IDEpIHRoaXMuX2NoYW5nZShudWxsLCBzKTsgdGhpcy5fYW5pbWF0ZU9mZiA9ICExOyBicmVhazsgY2FzZSAibWluIjogY2FzZSAibWF4IjogdGhpcy5fYW5pbWF0ZU9mZiA9ICEwLCB0aGlzLl9yZWZyZXNoVmFsdWUoKSwgdGhpcy5fYW5pbWF0ZU9mZiA9ICExOyBicmVhazsgY2FzZSAicmFuZ2UiOiB0aGlzLl9hbmltYXRlT2ZmID0gITAsIHRoaXMuX3JlZnJlc2goKSwgdGhpcy5fYW5pbWF0ZU9mZiA9ICExIH0gfSwgX3ZhbHVlOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5vcHRpb25zLnZhbHVlOyByZXR1cm4gdCA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKHQpIH0sIF92YWx1ZXM6IGZ1bmN0aW9uICh0KSB7IHZhciBlLCBpLCBzOyBpZiAoYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGUgPSB0aGlzLm9wdGlvbnMudmFsdWVzW3RdLCBlID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoZSk7IGlmICh0aGlzLm9wdGlvbnMudmFsdWVzICYmIHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKSB7IGZvciAoaSA9IHRoaXMub3B0aW9ucy52YWx1ZXMuc2xpY2UoKSwgcyA9IDA7IGkubGVuZ3RoID4gczsgcyArPSAxKSBpW3NdID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoaVtzXSk7IHJldHVybiBpIH0gcmV0dXJuIFtdIH0sIF90cmltQWxpZ25WYWx1ZTogZnVuY3Rpb24gKHQpIHsgaWYgKHRoaXMuX3ZhbHVlTWluKCkgPj0gdCkgcmV0dXJuIHRoaXMuX3ZhbHVlTWluKCk7IGlmICh0ID49IHRoaXMuX3ZhbHVlTWF4KCkpIHJldHVybiB0aGlzLl92YWx1ZU1heCgpOyB2YXIgZSA9IHRoaXMub3B0aW9ucy5zdGVwID4gMCA/IHRoaXMub3B0aW9ucy5zdGVwIDogMSwgaSA9ICh0IC0gdGhpcy5fdmFsdWVNaW4oKSkgJSBlLCBzID0gdCAtIGk7IHJldHVybiAyICogTWF0aC5hYnMoaSkgPj0gZSAmJiAocyArPSBpID4gMCA/IGUgOiAtZSksIHBhcnNlRmxvYXQocy50b0ZpeGVkKDUpKSB9LCBfdmFsdWVNaW46IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMub3B0aW9ucy5taW4gfSwgX3ZhbHVlTWF4OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm9wdGlvbnMubWF4IH0sIF9yZWZyZXNoVmFsdWU6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIGksIHMsIG4sIGEsIG8gPSB0aGlzLm9wdGlvbnMucmFuZ2UsIHIgPSB0aGlzLm9wdGlvbnMsIGwgPSB0aGlzLCBoID0gdGhpcy5fYW5pbWF0ZU9mZiA/ICExIDogci5hbmltYXRlLCB1ID0ge307IHRoaXMub3B0aW9ucy52YWx1ZXMgJiYgdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGggPyB0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbiAocykgeyBpID0gMTAwICogKChsLnZhbHVlcyhzKSAtIGwuX3ZhbHVlTWluKCkpIC8gKGwuX3ZhbHVlTWF4KCkgLSBsLl92YWx1ZU1pbigpKSksIHVbImhvcml6b250YWwiID09PSBsLm9yaWVudGF0aW9uID8gImxlZnQiIDogImJvdHRvbSJdID0gaSArICIlIiwgdCh0aGlzKS5zdG9wKDEsIDEpW2ggPyAiYW5pbWF0ZSIgOiAiY3NzIl0odSwgci5hbmltYXRlKSwgbC5vcHRpb25zLnJhbmdlID09PSAhMCAmJiAoImhvcml6b250YWwiID09PSBsLm9yaWVudGF0aW9uID8gKDAgPT09IHMgJiYgbC5yYW5nZS5zdG9wKDEsIDEpW2ggPyAiYW5pbWF0ZSIgOiAiY3NzIl0oeyBsZWZ0OiBpICsgIiUiIH0sIHIuYW5pbWF0ZSksIDEgPT09IHMgJiYgbC5yYW5nZVtoID8gImFuaW1hdGUiIDogImNzcyJdKHsgd2lkdGg6IGkgLSBlICsgIiUiIH0sIHsgcXVldWU6ICExLCBkdXJhdGlvbjogci5hbmltYXRlIH0pKSA6ICgwID09PSBzICYmIGwucmFuZ2Uuc3RvcCgxLCAxKVtoID8gImFuaW1hdGUiIDogImNzcyJdKHsgYm90dG9tOiBpICsgIiUiIH0sIHIuYW5pbWF0ZSksIDEgPT09IHMgJiYgbC5yYW5nZVtoID8gImFuaW1hdGUiIDogImNzcyJdKHsgaGVpZ2h0OiBpIC0gZSArICIlIiB9LCB7IHF1ZXVlOiAhMSwgZHVyYXRpb246IHIuYW5pbWF0ZSB9KSkpLCBlID0gaSB9KSA6IChzID0gdGhpcy52YWx1ZSgpLCBuID0gdGhpcy5fdmFsdWVNaW4oKSwgYSA9IHRoaXMuX3ZhbHVlTWF4KCksIGkgPSBhICE9PSBuID8gMTAwICogKChzIC0gbikgLyAoYSAtIG4pKSA6IDAsIHVbImhvcml6b250YWwiID09PSB0aGlzLm9yaWVudGF0aW9uID8gImxlZnQiIDogImJvdHRvbSJdID0gaSArICIlIiwgdGhpcy5oYW5kbGUuc3RvcCgxLCAxKVtoID8gImFuaW1hdGUiIDogImNzcyJdKHUsIHIuYW5pbWF0ZSksICJtaW4iID09PSBvICYmICJob3Jpem9udGFsIiA9PT0gdGhpcy5vcmllbnRhdGlvbiAmJiB0aGlzLnJhbmdlLnN0b3AoMSwgMSlbaCA/ICJhbmltYXRlIiA6ICJjc3MiXSh7IHdpZHRoOiBpICsgIiUiIH0sIHIuYW5pbWF0ZSksICJtYXgiID09PSBvICYmICJob3Jpem9udGFsIiA9PT0gdGhpcy5vcmllbnRhdGlvbiAmJiB0aGlzLnJhbmdlW2ggPyAiYW5pbWF0ZSIgOiAiY3NzIl0oeyB3aWR0aDogMTAwIC0gaSArICIlIiB9LCB7IHF1ZXVlOiAhMSwgZHVyYXRpb246IHIuYW5pbWF0ZSB9KSwgIm1pbiIgPT09IG8gJiYgInZlcnRpY2FsIiA9PT0gdGhpcy5vcmllbnRhdGlvbiAmJiB0aGlzLnJhbmdlLnN0b3AoMSwgMSlbaCA/ICJhbmltYXRlIiA6ICJjc3MiXSh7IGhlaWdodDogaSArICIlIiB9LCByLmFuaW1hdGUpLCAibWF4IiA9PT0gbyAmJiAidmVydGljYWwiID09PSB0aGlzLm9yaWVudGF0aW9uICYmIHRoaXMucmFuZ2VbaCA/ICJhbmltYXRlIiA6ICJjc3MiXSh7IGhlaWdodDogMTAwIC0gaSArICIlIiB9LCB7IHF1ZXVlOiAhMSwgZHVyYXRpb246IHIuYW5pbWF0ZSB9KSkgfSwgX2hhbmRsZUV2ZW50czogeyBrZXlkb3duOiBmdW5jdGlvbiAoaSkgeyB2YXIgcywgbiwgYSwgbywgciA9IHQoaS50YXJnZXQpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiKTsgc3dpdGNoIChpLmtleUNvZGUpIHsgY2FzZSB0LnVpLmtleUNvZGUuSE9NRTogY2FzZSB0LnVpLmtleUNvZGUuRU5EOiBjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOiBjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046IGNhc2UgdC51aS5rZXlDb2RlLlVQOiBjYXNlIHQudWkua2V5Q29kZS5SSUdIVDogY2FzZSB0LnVpLmtleUNvZGUuRE9XTjogY2FzZSB0LnVpLmtleUNvZGUuTEVGVDogaWYgKGkucHJldmVudERlZmF1bHQoKSwgIXRoaXMuX2tleVNsaWRpbmcgJiYgKHRoaXMuX2tleVNsaWRpbmcgPSAhMCwgdChpLnRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLCBzID0gdGhpcy5fc3RhcnQoaSwgciksIHMgPT09ICExKSkgcmV0dXJuIH0gc3dpdGNoIChvID0gdGhpcy5vcHRpb25zLnN0ZXAsIG4gPSBhID0gdGhpcy5vcHRpb25zLnZhbHVlcyAmJiB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCA/IHRoaXMudmFsdWVzKHIpIDogdGhpcy52YWx1ZSgpLCBpLmtleUNvZGUpIHsgY2FzZSB0LnVpLmtleUNvZGUuSE9NRTogYSA9IHRoaXMuX3ZhbHVlTWluKCk7IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5FTkQ6IGEgPSB0aGlzLl92YWx1ZU1heCgpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDogYSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKG4gKyAodGhpcy5fdmFsdWVNYXgoKSAtIHRoaXMuX3ZhbHVlTWluKCkpIC8gZSk7IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046IGEgPSB0aGlzLl90cmltQWxpZ25WYWx1ZShuIC0gKHRoaXMuX3ZhbHVlTWF4KCkgLSB0aGlzLl92YWx1ZU1pbigpKSAvIGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuVVA6IGNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOiBpZiAobiA9PT0gdGhpcy5fdmFsdWVNYXgoKSkgcmV0dXJuOyBhID0gdGhpcy5fdHJpbUFsaWduVmFsdWUobiArIG8pOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuRE9XTjogY2FzZSB0LnVpLmtleUNvZGUuTEVGVDogaWYgKG4gPT09IHRoaXMuX3ZhbHVlTWluKCkpIHJldHVybjsgYSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKG4gLSBvKSB9IHRoaXMuX3NsaWRlKGksIHIsIGEpIH0sIGNsaWNrOiBmdW5jdGlvbiAodCkgeyB0LnByZXZlbnREZWZhdWx0KCkgfSwga2V5dXA6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdChlLnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpOyB0aGlzLl9rZXlTbGlkaW5nICYmICh0aGlzLl9rZXlTbGlkaW5nID0gITEsIHRoaXMuX3N0b3AoZSwgaSksIHRoaXMuX2NoYW5nZShlLCBpKSwgdChlLnRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpKSB9IH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IGZ1bmN0aW9uIGUodCwgZSwgaSkgeyByZXR1cm4gdCA+IGUgJiYgZSArIGkgPiB0IH0gZnVuY3Rpb24gaSh0KSB7IHJldHVybiAvbGVmdHxyaWdodC8udGVzdCh0LmNzcygiZmxvYXQiKSkgfHwgL2lubGluZXx0YWJsZS1jZWxsLy50ZXN0KHQuY3NzKCJkaXNwbGF5IikpIH0gdC53aWRnZXQoInVpLnNvcnRhYmxlIiwgdC51aS5tb3VzZSwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgd2lkZ2V0RXZlbnRQcmVmaXg6ICJzb3J0IiwgcmVhZHk6ICExLCBvcHRpb25zOiB7IGFwcGVuZFRvOiAicGFyZW50IiwgYXhpczogITEsIGNvbm5lY3RXaXRoOiAhMSwgY29udGFpbm1lbnQ6ICExLCBjdXJzb3I6ICJhdXRvIiwgY3Vyc29yQXQ6ICExLCBkcm9wT25FbXB0eTogITAsIGZvcmNlUGxhY2Vob2xkZXJTaXplOiAhMSwgZm9yY2VIZWxwZXJTaXplOiAhMSwgZ3JpZDogITEsIGhhbmRsZTogITEsIGhlbHBlcjogIm9yaWdpbmFsIiwgaXRlbXM6ICI+ICoiLCBvcGFjaXR5OiAhMSwgcGxhY2Vob2xkZXI6ICExLCByZXZlcnQ6ICExLCBzY3JvbGw6ICEwLCBzY3JvbGxTZW5zaXRpdml0eTogMjAsIHNjcm9sbFNwZWVkOiAyMCwgc2NvcGU6ICJkZWZhdWx0IiwgdG9sZXJhbmNlOiAiaW50ZXJzZWN0IiwgekluZGV4OiAxZTMsIGFjdGl2YXRlOiBudWxsLCBiZWZvcmVTdG9wOiBudWxsLCBjaGFuZ2U6IG51bGwsIGRlYWN0aXZhdGU6IG51bGwsIG91dDogbnVsbCwgb3ZlcjogbnVsbCwgcmVjZWl2ZTogbnVsbCwgcmVtb3ZlOiBudWxsLCBzb3J0OiBudWxsLCBzdGFydDogbnVsbCwgc3RvcDogbnVsbCwgdXBkYXRlOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzLm9wdGlvbnM7IHRoaXMuY29udGFpbmVyQ2FjaGUgPSB7fSwgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zb3J0YWJsZSIpLCB0aGlzLnJlZnJlc2goKSwgdGhpcy5mbG9hdGluZyA9IHRoaXMuaXRlbXMubGVuZ3RoID8gIngiID09PSB0LmF4aXMgfHwgaSh0aGlzLml0ZW1zWzBdLml0ZW0pIDogITEsIHRoaXMub2Zmc2V0ID0gdGhpcy5lbGVtZW50Lm9mZnNldCgpLCB0aGlzLl9tb3VzZUluaXQoKSwgdGhpcy5yZWFkeSA9ICEwIH0sIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7IHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc29ydGFibGUgdWktc29ydGFibGUtZGlzYWJsZWQiKSwgdGhpcy5fbW91c2VEZXN0cm95KCk7IGZvciAodmFyIHQgPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7IHQgPj0gMDsgdC0tKSB0aGlzLml0ZW1zW3RdLml0ZW0ucmVtb3ZlRGF0YSh0aGlzLndpZGdldE5hbWUgKyAiLWl0ZW0iKTsgcmV0dXJuIHRoaXMgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKGUsIGkpIHsgImRpc2FibGVkIiA9PT0gZSA/ICh0aGlzLm9wdGlvbnNbZV0gPSBpLCB0aGlzLndpZGdldCgpLnRvZ2dsZUNsYXNzKCJ1aS1zb3J0YWJsZS1kaXNhYmxlZCIsICEhaSkpIDogdC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSB9LCBfbW91c2VDYXB0dXJlOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IG51bGwsIG4gPSAhMSwgbyA9IHRoaXM7IHJldHVybiB0aGlzLnJldmVydGluZyA/ICExIDogdGhpcy5vcHRpb25zLmRpc2FibGVkIHx8ICJzdGF0aWMiID09PSB0aGlzLm9wdGlvbnMudHlwZSA/ICExIDogKHRoaXMuX3JlZnJlc2hJdGVtcyhlKSwgdChlLnRhcmdldCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24gKCkgeyByZXR1cm4gdC5kYXRhKHRoaXMsIG8ud2lkZ2V0TmFtZSArICItaXRlbSIpID09PSBvID8gKHMgPSB0KHRoaXMpLCAhMSkgOiB1bmRlZmluZWQgfSksIHQuZGF0YShlLnRhcmdldCwgby53aWRnZXROYW1lICsgIi1pdGVtIikgPT09IG8gJiYgKHMgPSB0KGUudGFyZ2V0KSksIHMgPyAhdGhpcy5vcHRpb25zLmhhbmRsZSB8fCBpIHx8ICh0KHRoaXMub3B0aW9ucy5oYW5kbGUsIHMpLmZpbmQoIioiKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbiAoKSB7IHRoaXMgPT09IGUudGFyZ2V0ICYmIChuID0gITApIH0pLCBuKSA/ICh0aGlzLmN1cnJlbnRJdGVtID0gcywgdGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKSwgITApIDogITEgOiAhMSkgfSwgX21vdXNlU3RhcnQ6IGZ1bmN0aW9uIChlLCBpLCBzKSB7IHZhciBuLCBvLCBhID0gdGhpcy5vcHRpb25zOyBpZiAodGhpcy5jdXJyZW50Q29udGFpbmVyID0gdGhpcywgdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksIHRoaXMuaGVscGVyID0gdGhpcy5fY3JlYXRlSGVscGVyKGUpLCB0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksIHRoaXMuX2NhY2hlTWFyZ2lucygpLCB0aGlzLnNjcm9sbFBhcmVudCA9IHRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgpLCB0aGlzLm9mZnNldCA9IHRoaXMuY3VycmVudEl0ZW0ub2Zmc2V0KCksIHRoaXMub2Zmc2V0ID0geyB0b3A6IHRoaXMub2Zmc2V0LnRvcCAtIHRoaXMubWFyZ2lucy50b3AsIGxlZnQ6IHRoaXMub2Zmc2V0LmxlZnQgLSB0aGlzLm1hcmdpbnMubGVmdCB9LCB0LmV4dGVuZCh0aGlzLm9mZnNldCwgeyBjbGljazogeyBsZWZ0OiBlLnBhZ2VYIC0gdGhpcy5vZmZzZXQubGVmdCwgdG9wOiBlLnBhZ2VZIC0gdGhpcy5vZmZzZXQudG9wIH0sIHBhcmVudDogdGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCksIHJlbGF0aXZlOiB0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpIH0pLCB0aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIiksIHRoaXMuY3NzUG9zaXRpb24gPSB0aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksIHRoaXMub3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2dlbmVyYXRlUG9zaXRpb24oZSksIHRoaXMub3JpZ2luYWxQYWdlWCA9IGUucGFnZVgsIHRoaXMub3JpZ2luYWxQYWdlWSA9IGUucGFnZVksIGEuY3Vyc29yQXQgJiYgdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihhLmN1cnNvckF0KSwgdGhpcy5kb21Qb3NpdGlvbiA9IHsgcHJldjogdGhpcy5jdXJyZW50SXRlbS5wcmV2KClbMF0sIHBhcmVudDogdGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXSB9LCB0aGlzLmhlbHBlclswXSAhPT0gdGhpcy5jdXJyZW50SXRlbVswXSAmJiB0aGlzLmN1cnJlbnRJdGVtLmhpZGUoKSwgdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSwgYS5jb250YWlubWVudCAmJiB0aGlzLl9zZXRDb250YWlubWVudCgpLCBhLmN1cnNvciAmJiAiYXV0byIgIT09IGEuY3Vyc29yICYmIChvID0gdGhpcy5kb2N1bWVudC5maW5kKCJib2R5IiksIHRoaXMuc3RvcmVkQ3Vyc29yID0gby5jc3MoImN1cnNvciIpLCBvLmNzcygiY3Vyc29yIiwgYS5jdXJzb3IpLCB0aGlzLnN0b3JlZFN0eWxlc2hlZXQgPSB0KCI8c3R5bGU+KnsgY3Vyc29yOiAiICsgYS5jdXJzb3IgKyAiICFpbXBvcnRhbnQ7IH08XC9zdHlsZT4iKS5hcHBlbmRUbyhvKSksIGEub3BhY2l0eSAmJiAodGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikgJiYgKHRoaXMuX3N0b3JlZE9wYWNpdHkgPSB0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSksIHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsIGEub3BhY2l0eSkpLCBhLnpJbmRleCAmJiAodGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSAmJiAodGhpcy5fc3RvcmVkWkluZGV4ID0gdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSksIHRoaXMuaGVscGVyLmNzcygiekluZGV4IiwgYS56SW5kZXgpKSwgdGhpcy5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmICJIVE1MIiAhPT0gdGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSAmJiAodGhpcy5vdmVyZmxvd09mZnNldCA9IHRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSwgdGhpcy5fdHJpZ2dlcigic3RhcnQiLCBlLCB0aGlzLl91aUhhc2goKSksIHRoaXMuX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnMgfHwgdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLCAhcykgZm9yIChuID0gdGhpcy5jb250YWluZXJzLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSB0aGlzLmNvbnRhaW5lcnNbbl0uX3RyaWdnZXIoImFjdGl2YXRlIiwgZSwgdGhpcy5fdWlIYXNoKHRoaXMpKTsgcmV0dXJuIHQudWkuZGRtYW5hZ2VyICYmICh0LnVpLmRkbWFuYWdlci5jdXJyZW50ID0gdGhpcyksIHQudWkuZGRtYW5hZ2VyICYmICFhLmRyb3BCZWhhdmlvdXIgJiYgdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcywgZSksIHRoaXMuZHJhZ2dpbmcgPSAhMCwgdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpLCB0aGlzLl9tb3VzZURyYWcoZSksICEwIH0sIF9tb3VzZURyYWc6IGZ1bmN0aW9uIChlKSB7IHZhciBpLCBzLCBuLCBvLCBhID0gdGhpcy5vcHRpb25zLCByID0gITE7IGZvciAodGhpcy5wb3NpdGlvbiA9IHRoaXMuX2dlbmVyYXRlUG9zaXRpb24oZSksIHRoaXMucG9zaXRpb25BYnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSwgdGhpcy5sYXN0UG9zaXRpb25BYnMgfHwgKHRoaXMubGFzdFBvc2l0aW9uQWJzID0gdGhpcy5wb3NpdGlvbkFicyksIHRoaXMub3B0aW9ucy5zY3JvbGwgJiYgKHRoaXMuc2Nyb2xsUGFyZW50WzBdICE9PSBkb2N1bWVudCAmJiAiSFRNTCIgIT09IHRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUgPyAodGhpcy5vdmVyZmxvd09mZnNldC50b3AgKyB0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQgLSBlLnBhZ2VZIDwgYS5zY3JvbGxTZW5zaXRpdml0eSA/IHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCA9IHIgPSB0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AgKyBhLnNjcm9sbFNwZWVkIDogZS5wYWdlWSAtIHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wIDwgYS5zY3JvbGxTZW5zaXRpdml0eSAmJiAodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wID0gciA9IHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCAtIGEuc2Nyb2xsU3BlZWQpLCB0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQgKyB0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aCAtIGUucGFnZVggPCBhLnNjcm9sbFNlbnNpdGl2aXR5ID8gdGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCA9IHIgPSB0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0ICsgYS5zY3JvbGxTcGVlZCA6IGUucGFnZVggLSB0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQgPCBhLnNjcm9sbFNlbnNpdGl2aXR5ICYmICh0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0ID0gciA9IHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQgLSBhLnNjcm9sbFNwZWVkKSkgOiAoZS5wYWdlWSAtIHQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpIDwgYS5zY3JvbGxTZW5zaXRpdml0eSA/IHIgPSB0KGRvY3VtZW50KS5zY3JvbGxUb3AodChkb2N1bWVudCkuc2Nyb2xsVG9wKCkgLSBhLnNjcm9sbFNwZWVkKSA6IHQod2luZG93KS5oZWlnaHQoKSAtIChlLnBhZ2VZIC0gdChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpIDwgYS5zY3JvbGxTZW5zaXRpdml0eSAmJiAociA9IHQoZG9jdW1lbnQpLnNjcm9sbFRvcCh0KGRvY3VtZW50KS5zY3JvbGxUb3AoKSArIGEuc2Nyb2xsU3BlZWQpKSwgZS5wYWdlWCAtIHQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSA8IGEuc2Nyb2xsU2Vuc2l0aXZpdHkgPyByID0gdChkb2N1bWVudCkuc2Nyb2xsTGVmdCh0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkgLSBhLnNjcm9sbFNwZWVkKSA6IHQod2luZG93KS53aWR0aCgpIC0gKGUucGFnZVggLSB0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpIDwgYS5zY3JvbGxTZW5zaXRpdml0eSAmJiAociA9IHQoZG9jdW1lbnQpLnNjcm9sbExlZnQodChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpICsgYS5zY3JvbGxTcGVlZCkpKSwgciAhPT0gITEgJiYgdC51aS5kZG1hbmFnZXIgJiYgIWEuZHJvcEJlaGF2aW91ciAmJiB0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLCBlKSksIHRoaXMucG9zaXRpb25BYnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSwgdGhpcy5vcHRpb25zLmF4aXMgJiYgInkiID09PSB0aGlzLm9wdGlvbnMuYXhpcyB8fCAodGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdCA9IHRoaXMucG9zaXRpb24ubGVmdCArICJweCIpLCB0aGlzLm9wdGlvbnMuYXhpcyAmJiAieCIgPT09IHRoaXMub3B0aW9ucy5heGlzIHx8ICh0aGlzLmhlbHBlclswXS5zdHlsZS50b3AgPSB0aGlzLnBvc2l0aW9uLnRvcCArICJweCIpLCBpID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKHMgPSB0aGlzLml0ZW1zW2ldLCBuID0gcy5pdGVtWzBdLCBvID0gdGhpcy5faW50ZXJzZWN0c1dpdGhQb2ludGVyKHMpLCBvICYmIHMuaW5zdGFuY2UgPT09IHRoaXMuY3VycmVudENvbnRhaW5lciAmJiBuICE9PSB0aGlzLmN1cnJlbnRJdGVtWzBdICYmIHRoaXMucGxhY2Vob2xkZXJbMSA9PT0gbyA/ICJuZXh0IiA6ICJwcmV2Il0oKVswXSAhPT0gbiAmJiAhdC5jb250YWlucyh0aGlzLnBsYWNlaG9sZGVyWzBdLCBuKSAmJiAoInNlbWktZHluYW1pYyIgPT09IHRoaXMub3B0aW9ucy50eXBlID8gIXQuY29udGFpbnModGhpcy5lbGVtZW50WzBdLCBuKSA6ICEwKSkgeyBpZiAodGhpcy5kaXJlY3Rpb24gPSAxID09PSBvID8gImRvd24iIDogInVwIiwgInBvaW50ZXIiICE9PSB0aGlzLm9wdGlvbnMudG9sZXJhbmNlICYmICF0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKHMpKSBicmVhazsgdGhpcy5fcmVhcnJhbmdlKGUsIHMpLCB0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLCBlLCB0aGlzLl91aUhhc2goKSk7IGJyZWFrIH0gcmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKGUpLCB0LnVpLmRkbWFuYWdlciAmJiB0LnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsIGUpLCB0aGlzLl90cmlnZ2VyKCJzb3J0IiwgZSwgdGhpcy5fdWlIYXNoKCkpLCB0aGlzLmxhc3RQb3NpdGlvbkFicyA9IHRoaXMucG9zaXRpb25BYnMsICExIH0sIF9tb3VzZVN0b3A6IGZ1bmN0aW9uIChlLCBpKSB7IGlmIChlKSB7IGlmICh0LnVpLmRkbWFuYWdlciAmJiAhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXIgJiYgdC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLCBlKSwgdGhpcy5vcHRpb25zLnJldmVydCkgeyB2YXIgcyA9IHRoaXMsIG4gPSB0aGlzLnBsYWNlaG9sZGVyLm9mZnNldCgpLCBvID0gdGhpcy5vcHRpb25zLmF4aXMsIGEgPSB7fTsgbyAmJiAieCIgIT09IG8gfHwgKGEubGVmdCA9IG4ubGVmdCAtIHRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0IC0gdGhpcy5tYXJnaW5zLmxlZnQgKyAodGhpcy5vZmZzZXRQYXJlbnRbMF0gPT09IGRvY3VtZW50LmJvZHkgPyAwIDogdGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCkpLCBvICYmICJ5IiAhPT0gbyB8fCAoYS50b3AgPSBuLnRvcCAtIHRoaXMub2Zmc2V0LnBhcmVudC50b3AgLSB0aGlzLm1hcmdpbnMudG9wICsgKHRoaXMub2Zmc2V0UGFyZW50WzBdID09PSBkb2N1bWVudC5ib2R5ID8gMCA6IHRoaXMub2Zmc2V0UGFyZW50WzBdLnNjcm9sbFRvcCkpLCB0aGlzLnJldmVydGluZyA9ICEwLCB0KHRoaXMuaGVscGVyKS5hbmltYXRlKGEsIHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnQsIDEwKSB8fCA1MDAsIGZ1bmN0aW9uICgpIHsgcy5fY2xlYXIoZSkgfSkgfSBlbHNlIHRoaXMuX2NsZWFyKGUsIGkpOyByZXR1cm4gITEgfSB9LCBjYW5jZWw6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMuZHJhZ2dpbmcpIHsgdGhpcy5fbW91c2VVcCh7IHRhcmdldDogbnVsbCB9KSwgIm9yaWdpbmFsIiA9PT0gdGhpcy5vcHRpb25zLmhlbHBlciA/IHRoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpIDogdGhpcy5jdXJyZW50SXRlbS5zaG93KCk7IGZvciAodmFyIGUgPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMTsgZSA+PSAwOyBlLS0pIHRoaXMuY29udGFpbmVyc1tlXS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsIG51bGwsIHRoaXMuX3VpSGFzaCh0aGlzKSksIHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZS5vdmVyICYmICh0aGlzLmNvbnRhaW5lcnNbZV0uX3RyaWdnZXIoIm91dCIsIG51bGwsIHRoaXMuX3VpSGFzaCh0aGlzKSksIHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZS5vdmVyID0gMCkgfSByZXR1cm4gdGhpcy5wbGFjZWhvbGRlciAmJiAodGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlICYmIHRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSwgIm9yaWdpbmFsIiAhPT0gdGhpcy5vcHRpb25zLmhlbHBlciAmJiB0aGlzLmhlbHBlciAmJiB0aGlzLmhlbHBlclswXS5wYXJlbnROb2RlICYmIHRoaXMuaGVscGVyLnJlbW92ZSgpLCB0LmV4dGVuZCh0aGlzLCB7IGhlbHBlcjogbnVsbCwgZHJhZ2dpbmc6ICExLCByZXZlcnRpbmc6ICExLCBfbm9GaW5hbFNvcnQ6IG51bGwgfSksIHRoaXMuZG9tUG9zaXRpb24ucHJldiA/IHQodGhpcy5kb21Qb3NpdGlvbi5wcmV2KS5hZnRlcih0aGlzLmN1cnJlbnRJdGVtKSA6IHQodGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQpLnByZXBlbmQodGhpcy5jdXJyZW50SXRlbSkpLCB0aGlzIH0sIHNlcmlhbGl6ZTogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KGUgJiYgZS5jb25uZWN0ZWQpLCBzID0gW107IHJldHVybiBlID0gZSB8fCB7fSwgdChpKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGkgPSAodChlLml0ZW0gfHwgdGhpcykuYXR0cihlLmF0dHJpYnV0ZSB8fCAiaWQiKSB8fCAiIikubWF0Y2goZS5leHByZXNzaW9uIHx8IC8oLispW1wtPV9dKC4rKS8pOyBpICYmIHMucHVzaCgoZS5rZXkgfHwgaVsxXSArICJbXSIpICsgIj0iICsgKGUua2V5ICYmIGUuZXhwcmVzc2lvbiA/IGlbMV0gOiBpWzJdKSkgfSksICFzLmxlbmd0aCAmJiBlLmtleSAmJiBzLnB1c2goZS5rZXkgKyAiPSIpLCBzLmpvaW4oIiYiKSB9LCB0b0FycmF5OiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoZSAmJiBlLmNvbm5lY3RlZCksIHMgPSBbXTsgcmV0dXJuIGUgPSBlIHx8IHt9LCBpLmVhY2goZnVuY3Rpb24gKCkgeyBzLnB1c2godChlLml0ZW0gfHwgdGhpcykuYXR0cihlLmF0dHJpYnV0ZSB8fCAiaWQiKSB8fCAiIikgfSksIHMgfSwgX2ludGVyc2VjdHNXaXRoOiBmdW5jdGlvbiAodCkgeyB2YXIgZSA9IHRoaXMucG9zaXRpb25BYnMubGVmdCwgaSA9IGUgKyB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLCBzID0gdGhpcy5wb3NpdGlvbkFicy50b3AsIG4gPSBzICsgdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsIG8gPSB0LmxlZnQsIGEgPSBvICsgdC53aWR0aCwgciA9IHQudG9wLCBoID0gciArIHQuaGVpZ2h0LCBsID0gdGhpcy5vZmZzZXQuY2xpY2sudG9wLCBjID0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCwgdSA9ICJ4IiA9PT0gdGhpcy5vcHRpb25zLmF4aXMgfHwgcyArIGwgPiByICYmIGggPiBzICsgbCwgZCA9ICJ5IiA9PT0gdGhpcy5vcHRpb25zLmF4aXMgfHwgZSArIGMgPiBvICYmIGEgPiBlICsgYywgcCA9IHUgJiYgZDsgcmV0dXJuICJwb2ludGVyIiA9PT0gdGhpcy5vcHRpb25zLnRvbGVyYW5jZSB8fCB0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVycyB8fCAicG9pbnRlciIgIT09IHRoaXMub3B0aW9ucy50b2xlcmFuY2UgJiYgdGhpcy5oZWxwZXJQcm9wb3J0aW9uc1t0aGlzLmZsb2F0aW5nID8gIndpZHRoIiA6ICJoZWlnaHQiXSA+IHRbdGhpcy5mbG9hdGluZyA/ICJ3aWR0aCIgOiAiaGVpZ2h0Il0gPyBwIDogZSArIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLyAyID4gbyAmJiBhID4gaSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLyAyICYmIHMgKyB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAvIDIgPiByICYmIGggPiBuIC0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLyAyIH0sIF9pbnRlcnNlY3RzV2l0aFBvaW50ZXI6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gIngiID09PSB0aGlzLm9wdGlvbnMuYXhpcyB8fCBlKHRoaXMucG9zaXRpb25BYnMudG9wICsgdGhpcy5vZmZzZXQuY2xpY2sudG9wLCB0LnRvcCwgdC5oZWlnaHQpLCBzID0gInkiID09PSB0aGlzLm9wdGlvbnMuYXhpcyB8fCBlKHRoaXMucG9zaXRpb25BYnMubGVmdCArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsIHQubGVmdCwgdC53aWR0aCksIG4gPSBpICYmIHMsIG8gPSB0aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSwgYSA9IHRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7IHJldHVybiBuID8gdGhpcy5mbG9hdGluZyA/IGEgJiYgInJpZ2h0IiA9PT0gYSB8fCAiZG93biIgPT09IG8gPyAyIDogMSA6IG8gJiYgKCJkb3duIiA9PT0gbyA/IDIgOiAxKSA6ICExIH0sIF9pbnRlcnNlY3RzV2l0aFNpZGVzOiBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IGUodGhpcy5wb3NpdGlvbkFicy50b3AgKyB0aGlzLm9mZnNldC5jbGljay50b3AsIHQudG9wICsgdC5oZWlnaHQgLyAyLCB0LmhlaWdodCksIHMgPSBlKHRoaXMucG9zaXRpb25BYnMubGVmdCArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsIHQubGVmdCArIHQud2lkdGggLyAyLCB0LndpZHRoKSwgbiA9IHRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLCBvID0gdGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTsgcmV0dXJuIHRoaXMuZmxvYXRpbmcgJiYgbyA/ICJyaWdodCIgPT09IG8gJiYgcyB8fCAibGVmdCIgPT09IG8gJiYgIXMgOiBuICYmICgiZG93biIgPT09IG4gJiYgaSB8fCAidXAiID09PSBuICYmICFpKSB9LCBfZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5wb3NpdGlvbkFicy50b3AgLSB0aGlzLmxhc3RQb3NpdGlvbkFicy50b3A7IHJldHVybiAwICE9PSB0ICYmICh0ID4gMCA/ICJkb3duIiA6ICJ1cCIpIH0sIF9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbjogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMucG9zaXRpb25BYnMubGVmdCAtIHRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7IHJldHVybiAwICE9PSB0ICYmICh0ID4gMCA/ICJyaWdodCIgOiAibGVmdCIpIH0sIHJlZnJlc2g6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0aGlzLl9yZWZyZXNoSXRlbXModCksIHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLCB0aGlzIH0sIF9jb25uZWN0V2l0aDogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMub3B0aW9uczsgcmV0dXJuIHQuY29ubmVjdFdpdGguY29uc3RydWN0b3IgPT09IFN0cmluZyA/IFt0LmNvbm5lY3RXaXRoXSA6IHQuY29ubmVjdFdpdGggfSwgX2dldEl0ZW1zQXNqUXVlcnk6IGZ1bmN0aW9uIChlKSB7IGZ1bmN0aW9uIGkoKSB7IHIucHVzaCh0aGlzKSB9IHZhciBzLCBuLCBvLCBhLCByID0gW10sIGggPSBbXSwgbCA9IHRoaXMuX2Nvbm5lY3RXaXRoKCk7IGlmIChsICYmIGUpIGZvciAocyA9IGwubGVuZ3RoIC0gMTsgcyA+PSAwOyBzLS0pIGZvciAobyA9IHQobFtzXSksIG4gPSBvLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBhID0gdC5kYXRhKG9bbl0sIHRoaXMud2lkZ2V0RnVsbE5hbWUpLCBhICYmIGEgIT09IHRoaXMgJiYgIWEub3B0aW9ucy5kaXNhYmxlZCAmJiBoLnB1c2goW3QuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpID8gYS5vcHRpb25zLml0ZW1zLmNhbGwoYS5lbGVtZW50KSA6IHQoYS5vcHRpb25zLml0ZW1zLCBhLmVsZW1lbnQpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpLm5vdCgiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIiksIGFdKTsgZm9yIChoLnB1c2goW3QuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpID8gdGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LCBudWxsLCB7IG9wdGlvbnM6IHRoaXMub3B0aW9ucywgaXRlbTogdGhpcy5jdXJyZW50SXRlbSB9KSA6IHQodGhpcy5vcHRpb25zLml0ZW1zLCB0aGlzLmVsZW1lbnQpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpLm5vdCgiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIiksIHRoaXNdKSwgcyA9IGgubGVuZ3RoIC0gMTsgcyA+PSAwOyBzLS0pIGhbc11bMF0uZWFjaChpKTsgcmV0dXJuIHQocikgfSwgX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5jdXJyZW50SXRlbS5maW5kKCI6ZGF0YSgiICsgdGhpcy53aWRnZXROYW1lICsgIi1pdGVtKSIpOyB0aGlzLml0ZW1zID0gdC5ncmVwKHRoaXMuaXRlbXMsIGZ1bmN0aW9uICh0KSB7IGZvciAodmFyIGkgPSAwOyBlLmxlbmd0aCA+IGk7IGkrKykgaWYgKGVbaV0gPT09IHQuaXRlbVswXSkgcmV0dXJuICExOyByZXR1cm4gITAgfSkgfSwgX3JlZnJlc2hJdGVtczogZnVuY3Rpb24gKGUpIHsgdGhpcy5pdGVtcyA9IFtdLCB0aGlzLmNvbnRhaW5lcnMgPSBbdGhpc107IHZhciBpLCBzLCBuLCBvLCBhLCByLCBoLCBsLCBjID0gdGhpcy5pdGVtcywgdSA9IFtbdC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcykgPyB0aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnRbMF0sIGUsIHsgaXRlbTogdGhpcy5jdXJyZW50SXRlbSB9KSA6IHQodGhpcy5vcHRpb25zLml0ZW1zLCB0aGlzLmVsZW1lbnQpLCB0aGlzXV0sIGQgPSB0aGlzLl9jb25uZWN0V2l0aCgpOyBpZiAoZCAmJiB0aGlzLnJlYWR5KSBmb3IgKGkgPSBkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBmb3IgKG4gPSB0KGRbaV0pLCBzID0gbi5sZW5ndGggLSAxOyBzID49IDA7IHMtLSkgbyA9IHQuZGF0YShuW3NdLCB0aGlzLndpZGdldEZ1bGxOYW1lKSwgbyAmJiBvICE9PSB0aGlzICYmICFvLm9wdGlvbnMuZGlzYWJsZWQgJiYgKHUucHVzaChbdC5pc0Z1bmN0aW9uKG8ub3B0aW9ucy5pdGVtcykgPyBvLm9wdGlvbnMuaXRlbXMuY2FsbChvLmVsZW1lbnRbMF0sIGUsIHsgaXRlbTogdGhpcy5jdXJyZW50SXRlbSB9KSA6IHQoby5vcHRpb25zLml0ZW1zLCBvLmVsZW1lbnQpLCBvXSksIHRoaXMuY29udGFpbmVycy5wdXNoKG8pKTsgZm9yIChpID0gdS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgZm9yIChhID0gdVtpXVsxXSwgciA9IHVbaV1bMF0sIHMgPSAwLCBsID0gci5sZW5ndGg7IGwgPiBzOyBzKyspIGggPSB0KHJbc10pLCBoLmRhdGEodGhpcy53aWRnZXROYW1lICsgIi1pdGVtIiwgYSksIGMucHVzaCh7IGl0ZW06IGgsIGluc3RhbmNlOiBhLCB3aWR0aDogMCwgaGVpZ2h0OiAwLCBsZWZ0OiAwLCB0b3A6IDAgfSkgfSwgcmVmcmVzaFBvc2l0aW9uczogZnVuY3Rpb24gKGUpIHsgdGhpcy5vZmZzZXRQYXJlbnQgJiYgdGhpcy5oZWxwZXIgJiYgKHRoaXMub2Zmc2V0LnBhcmVudCA9IHRoaXMuX2dldFBhcmVudE9mZnNldCgpKTsgdmFyIGksIHMsIG4sIG87IGZvciAoaSA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHMgPSB0aGlzLml0ZW1zW2ldLCBzLmluc3RhbmNlICE9PSB0aGlzLmN1cnJlbnRDb250YWluZXIgJiYgdGhpcy5jdXJyZW50Q29udGFpbmVyICYmIHMuaXRlbVswXSAhPT0gdGhpcy5jdXJyZW50SXRlbVswXSB8fCAobiA9IHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50ID8gdCh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCwgcy5pdGVtKSA6IHMuaXRlbSwgZSB8fCAocy53aWR0aCA9IG4ub3V0ZXJXaWR0aCgpLCBzLmhlaWdodCA9IG4ub3V0ZXJIZWlnaHQoKSksIG8gPSBuLm9mZnNldCgpLCBzLmxlZnQgPSBvLmxlZnQsIHMudG9wID0gby50b3ApOyBpZiAodGhpcy5vcHRpb25zLmN1c3RvbSAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKSB0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzLmNhbGwodGhpcyk7IGVsc2UgZm9yIChpID0gdGhpcy5jb250YWluZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBvID0gdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnQub2Zmc2V0KCksIHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5sZWZ0ID0gby5sZWZ0LCB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUudG9wID0gby50b3AsIHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS53aWR0aCA9IHRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVyV2lkdGgoKSwgdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmhlaWdodCA9IHRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVySGVpZ2h0KCk7IHJldHVybiB0aGlzIH0sIF9jcmVhdGVQbGFjZWhvbGRlcjogZnVuY3Rpb24gKGUpIHsgZSA9IGUgfHwgdGhpczsgdmFyIGksIHMgPSBlLm9wdGlvbnM7IHMucGxhY2Vob2xkZXIgJiYgcy5wbGFjZWhvbGRlci5jb25zdHJ1Y3RvciAhPT0gU3RyaW5nIHx8IChpID0gcy5wbGFjZWhvbGRlciwgcy5wbGFjZWhvbGRlciA9IHsgZWxlbWVudDogZnVuY3Rpb24gKCkgeyB2YXIgcyA9IGUuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgbiA9IHQoIjwiICsgcyArICI+IiwgZS5kb2N1bWVudFswXSkuYWRkQ2xhc3MoaSB8fCBlLmN1cnJlbnRJdGVtWzBdLmNsYXNzTmFtZSArICIgdWktc29ydGFibGUtcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik7IHJldHVybiAidHIiID09PSBzID8gZS5jdXJyZW50SXRlbS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24gKCkgeyB0KCI8dGQ+JiMxNjA7PFwvdGQ+IiwgZS5kb2N1bWVudFswXSkuYXR0cigiY29sc3BhbiIsIHQodGhpcykuYXR0cigiY29sc3BhbiIpIHx8IDEpLmFwcGVuZFRvKG4pIH0pIDogImltZyIgPT09IHMgJiYgbi5hdHRyKCJzcmMiLCBlLmN1cnJlbnRJdGVtLmF0dHIoInNyYyIpKSwgaSB8fCBuLmNzcygidmlzaWJpbGl0eSIsICJoaWRkZW4iKSwgbiB9LCB1cGRhdGU6IGZ1bmN0aW9uICh0LCBuKSB7ICghaSB8fCBzLmZvcmNlUGxhY2Vob2xkZXJTaXplKSAmJiAobi5oZWlnaHQoKSB8fCBuLmhlaWdodChlLmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCkgLSBwYXJzZUludChlLmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ1RvcCIpIHx8IDAsIDEwKSAtIHBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nQm90dG9tIikgfHwgMCwgMTApKSwgbi53aWR0aCgpIHx8IG4ud2lkdGgoZS5jdXJyZW50SXRlbS5pbm5lcldpZHRoKCkgLSBwYXJzZUludChlLmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0xlZnQiKSB8fCAwLCAxMCkgLSBwYXJzZUludChlLmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ1JpZ2h0IikgfHwgMCwgMTApKSkgfSB9KSwgZS5wbGFjZWhvbGRlciA9IHQocy5wbGFjZWhvbGRlci5lbGVtZW50LmNhbGwoZS5lbGVtZW50LCBlLmN1cnJlbnRJdGVtKSksIGUuY3VycmVudEl0ZW0uYWZ0ZXIoZS5wbGFjZWhvbGRlciksIHMucGxhY2Vob2xkZXIudXBkYXRlKGUsIGUucGxhY2Vob2xkZXIpIH0sIF9jb250YWN0Q29udGFpbmVyczogZnVuY3Rpb24gKHMpIHsgdmFyIG4sIG8sIGEsIHIsIGgsIGwsIGMsIHUsIGQsIHAsIGYgPSBudWxsLCBnID0gbnVsbDsgZm9yIChuID0gdGhpcy5jb250YWluZXJzLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBpZiAoIXQuY29udGFpbnModGhpcy5jdXJyZW50SXRlbVswXSwgdGhpcy5jb250YWluZXJzW25dLmVsZW1lbnRbMF0pKSBpZiAodGhpcy5faW50ZXJzZWN0c1dpdGgodGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlKSkgeyBpZiAoZiAmJiB0LmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50WzBdLCBmLmVsZW1lbnRbMF0pKSBjb250aW51ZTsgZiA9IHRoaXMuY29udGFpbmVyc1tuXSwgZyA9IG4gfSBlbHNlIHRoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS5vdmVyICYmICh0aGlzLmNvbnRhaW5lcnNbbl0uX3RyaWdnZXIoIm91dCIsIHMsIHRoaXMuX3VpSGFzaCh0aGlzKSksIHRoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS5vdmVyID0gMCk7IGlmIChmKSBpZiAoMSA9PT0gdGhpcy5jb250YWluZXJzLmxlbmd0aCkgdGhpcy5jb250YWluZXJzW2ddLmNvbnRhaW5lckNhY2hlLm92ZXIgfHwgKHRoaXMuY29udGFpbmVyc1tnXS5fdHJpZ2dlcigib3ZlciIsIHMsIHRoaXMuX3VpSGFzaCh0aGlzKSksIHRoaXMuY29udGFpbmVyc1tnXS5jb250YWluZXJDYWNoZS5vdmVyID0gMSk7IGVsc2UgeyBmb3IgKGEgPSAxZTQsIHIgPSBudWxsLCBwID0gZi5mbG9hdGluZyB8fCBpKHRoaXMuY3VycmVudEl0ZW0pLCBoID0gcCA/ICJsZWZ0IiA6ICJ0b3AiLCBsID0gcCA/ICJ3aWR0aCIgOiAiaGVpZ2h0IiwgYyA9IHRoaXMucG9zaXRpb25BYnNbaF0gKyB0aGlzLm9mZnNldC5jbGlja1toXSwgbyA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTsgbyA+PSAwOyBvLS0pIHQuY29udGFpbnModGhpcy5jb250YWluZXJzW2ddLmVsZW1lbnRbMF0sIHRoaXMuaXRlbXNbb10uaXRlbVswXSkgJiYgdGhpcy5pdGVtc1tvXS5pdGVtWzBdICE9PSB0aGlzLmN1cnJlbnRJdGVtWzBdICYmICghcCB8fCBlKHRoaXMucG9zaXRpb25BYnMudG9wICsgdGhpcy5vZmZzZXQuY2xpY2sudG9wLCB0aGlzLml0ZW1zW29dLnRvcCwgdGhpcy5pdGVtc1tvXS5oZWlnaHQpKSAmJiAodSA9IHRoaXMuaXRlbXNbb10uaXRlbS5vZmZzZXQoKVtoXSwgZCA9ICExLCBNYXRoLmFicyh1IC0gYykgPiBNYXRoLmFicyh1ICsgdGhpcy5pdGVtc1tvXVtsXSAtIGMpICYmIChkID0gITAsIHUgKz0gdGhpcy5pdGVtc1tvXVtsXSksIGEgPiBNYXRoLmFicyh1IC0gYykgJiYgKGEgPSBNYXRoLmFicyh1IC0gYyksIHIgPSB0aGlzLml0ZW1zW29dLCB0aGlzLmRpcmVjdGlvbiA9IGQgPyAidXAiIDogImRvd24iKSk7IGlmICghciAmJiAhdGhpcy5vcHRpb25zLmRyb3BPbkVtcHR5KSByZXR1cm47IGlmICh0aGlzLmN1cnJlbnRDb250YWluZXIgPT09IHRoaXMuY29udGFpbmVyc1tnXSkgcmV0dXJuOyByID8gdGhpcy5fcmVhcnJhbmdlKHMsIHIsIG51bGwsICEwKSA6IHRoaXMuX3JlYXJyYW5nZShzLCBudWxsLCB0aGlzLmNvbnRhaW5lcnNbZ10uZWxlbWVudCwgITApLCB0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLCBzLCB0aGlzLl91aUhhc2goKSksIHRoaXMuY29udGFpbmVyc1tnXS5fdHJpZ2dlcigiY2hhbmdlIiwgcywgdGhpcy5fdWlIYXNoKHRoaXMpKSwgdGhpcy5jdXJyZW50Q29udGFpbmVyID0gdGhpcy5jb250YWluZXJzW2ddLCB0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIudXBkYXRlKHRoaXMuY3VycmVudENvbnRhaW5lciwgdGhpcy5wbGFjZWhvbGRlciksIHRoaXMuY29udGFpbmVyc1tnXS5fdHJpZ2dlcigib3ZlciIsIHMsIHRoaXMuX3VpSGFzaCh0aGlzKSksIHRoaXMuY29udGFpbmVyc1tnXS5jb250YWluZXJDYWNoZS5vdmVyID0gMSB9IH0sIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcy5vcHRpb25zLCBzID0gdC5pc0Z1bmN0aW9uKGkuaGVscGVyKSA/IHQoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLCBbZSwgdGhpcy5jdXJyZW50SXRlbV0pKSA6ICJjbG9uZSIgPT09IGkuaGVscGVyID8gdGhpcy5jdXJyZW50SXRlbS5jbG9uZSgpIDogdGhpcy5jdXJyZW50SXRlbTsgcmV0dXJuIHMucGFyZW50cygiYm9keSIpLmxlbmd0aCB8fCB0KCJwYXJlbnQiICE9PSBpLmFwcGVuZFRvID8gaS5hcHBlbmRUbyA6IHRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoc1swXSksIHNbMF0gPT09IHRoaXMuY3VycmVudEl0ZW1bMF0gJiYgKHRoaXMuX3N0b3JlZENTUyA9IHsgd2lkdGg6IHRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUud2lkdGgsIGhlaWdodDogdGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS5oZWlnaHQsIHBvc2l0aW9uOiB0aGlzLmN1cnJlbnRJdGVtLmNzcygicG9zaXRpb24iKSwgdG9wOiB0aGlzLmN1cnJlbnRJdGVtLmNzcygidG9wIiksIGxlZnQ6IHRoaXMuY3VycmVudEl0ZW0uY3NzKCJsZWZ0IikgfSksICghc1swXS5zdHlsZS53aWR0aCB8fCBpLmZvcmNlSGVscGVyU2l6ZSkgJiYgcy53aWR0aCh0aGlzLmN1cnJlbnRJdGVtLndpZHRoKCkpLCAoIXNbMF0uc3R5bGUuaGVpZ2h0IHx8IGkuZm9yY2VIZWxwZXJTaXplKSAmJiBzLmhlaWdodCh0aGlzLmN1cnJlbnRJdGVtLmhlaWdodCgpKSwgcyB9LCBfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjogZnVuY3Rpb24gKGUpIHsgInN0cmluZyIgPT0gdHlwZW9mIGUgJiYgKGUgPSBlLnNwbGl0KCIgIikpLCB0LmlzQXJyYXkoZSkgJiYgKGUgPSB7IGxlZnQ6ICtlWzBdLCB0b3A6ICtlWzFdIHx8IDAgfSksICJsZWZ0IiBpbiBlICYmICh0aGlzLm9mZnNldC5jbGljay5sZWZ0ID0gZS5sZWZ0ICsgdGhpcy5tYXJnaW5zLmxlZnQpLCAicmlnaHQiIGluIGUgJiYgKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPSB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC0gZS5yaWdodCArIHRoaXMubWFyZ2lucy5sZWZ0KSwgInRvcCIgaW4gZSAmJiAodGhpcy5vZmZzZXQuY2xpY2sudG9wID0gZS50b3AgKyB0aGlzLm1hcmdpbnMudG9wKSwgImJvdHRvbSIgaW4gZSAmJiAodGhpcy5vZmZzZXQuY2xpY2sudG9wID0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSBlLmJvdHRvbSArIHRoaXMubWFyZ2lucy50b3ApIH0sIF9nZXRQYXJlbnRPZmZzZXQ6IGZ1bmN0aW9uICgpIHsgdGhpcy5vZmZzZXRQYXJlbnQgPSB0aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTsgdmFyIGUgPSB0aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTsgcmV0dXJuICJhYnNvbHV0ZSIgPT09IHRoaXMuY3NzUG9zaXRpb24gJiYgdGhpcy5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmIHQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sIHRoaXMub2Zmc2V0UGFyZW50WzBdKSAmJiAoZS5sZWZ0ICs9IHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSwgZS50b3AgKz0gdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpLCAodGhpcy5vZmZzZXRQYXJlbnRbMF0gPT09IGRvY3VtZW50LmJvZHkgfHwgdGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZSAmJiAiaHRtbCIgPT09IHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAmJiB0LnVpLmllKSAmJiAoZSA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0pLCB7IHRvcDogZS50b3AgKyAocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJUb3BXaWR0aCIpLCAxMCkgfHwgMCksIGxlZnQ6IGUubGVmdCArIChwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLCAxMCkgfHwgMCkgfSB9LCBfZ2V0UmVsYXRpdmVPZmZzZXQ6IGZ1bmN0aW9uICgpIHsgaWYgKCJyZWxhdGl2ZSIgPT09IHRoaXMuY3NzUG9zaXRpb24pIHsgdmFyIHQgPSB0aGlzLmN1cnJlbnRJdGVtLnBvc2l0aW9uKCk7IHJldHVybiB7IHRvcDogdC50b3AgLSAocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwgMTApIHx8IDApICsgdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksIGxlZnQ6IHQubGVmdCAtIChwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwgMTApIHx8IDApICsgdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpIH0gfSByZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfSB9LCBfY2FjaGVNYXJnaW5zOiBmdW5jdGlvbiAoKSB7IHRoaXMubWFyZ2lucyA9IHsgbGVmdDogcGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpbkxlZnQiKSwgMTApIHx8IDAsIHRvcDogcGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpblRvcCIpLCAxMCkgfHwgMCB9IH0sIF9jYWNoZUhlbHBlclByb3BvcnRpb25zOiBmdW5jdGlvbiAoKSB7IHRoaXMuaGVscGVyUHJvcG9ydGlvbnMgPSB7IHdpZHRoOiB0aGlzLmhlbHBlci5vdXRlcldpZHRoKCksIGhlaWdodDogdGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKSB9IH0sIF9zZXRDb250YWlubWVudDogZnVuY3Rpb24gKCkgeyB2YXIgZSwgaSwgcywgbiA9IHRoaXMub3B0aW9uczsgInBhcmVudCIgPT09IG4uY29udGFpbm1lbnQgJiYgKG4uY29udGFpbm1lbnQgPSB0aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKSwgKCJkb2N1bWVudCIgPT09IG4uY29udGFpbm1lbnQgfHwgIndpbmRvdyIgPT09IG4uY29udGFpbm1lbnQpICYmICh0aGlzLmNvbnRhaW5tZW50ID0gWzAgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0IC0gdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsIDAgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgLSB0aGlzLm9mZnNldC5wYXJlbnQudG9wLCB0KCJkb2N1bWVudCIgPT09IG4uY29udGFpbm1lbnQgPyBkb2N1bWVudCA6IHdpbmRvdykud2lkdGgoKSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSB0aGlzLm1hcmdpbnMubGVmdCwgKHQoImRvY3VtZW50IiA9PT0gbi5jb250YWlubWVudCA/IGRvY3VtZW50IDogd2luZG93KS5oZWlnaHQoKSB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0IC0gdGhpcy5tYXJnaW5zLnRvcF0pLCAvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3Qobi5jb250YWlubWVudCkgfHwgKGUgPSB0KG4uY29udGFpbm1lbnQpWzBdLCBpID0gdChuLmNvbnRhaW5tZW50KS5vZmZzZXQoKSwgcyA9ICJoaWRkZW4iICE9PSB0KGUpLmNzcygib3ZlcmZsb3ciKSwgdGhpcy5jb250YWlubWVudCA9IFtpLmxlZnQgKyAocGFyc2VJbnQodChlKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLCAxMCkgfHwgMCkgKyAocGFyc2VJbnQodChlKS5jc3MoInBhZGRpbmdMZWZ0IiksIDEwKSB8fCAwKSAtIHRoaXMubWFyZ2lucy5sZWZ0LCBpLnRvcCArIChwYXJzZUludCh0KGUpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwgMTApIHx8IDApICsgKHBhcnNlSW50KHQoZSkuY3NzKCJwYWRkaW5nVG9wIiksIDEwKSB8fCAwKSAtIHRoaXMubWFyZ2lucy50b3AsIGkubGVmdCArIChzID8gTWF0aC5tYXgoZS5zY3JvbGxXaWR0aCwgZS5vZmZzZXRXaWR0aCkgOiBlLm9mZnNldFdpZHRoKSAtIChwYXJzZUludCh0KGUpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksIDEwKSB8fCAwKSAtIChwYXJzZUludCh0KGUpLmNzcygicGFkZGluZ1JpZ2h0IiksIDEwKSB8fCAwKSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSB0aGlzLm1hcmdpbnMubGVmdCwgaS50b3AgKyAocyA/IE1hdGgubWF4KGUuc2Nyb2xsSGVpZ2h0LCBlLm9mZnNldEhlaWdodCkgOiBlLm9mZnNldEhlaWdodCkgLSAocGFyc2VJbnQodChlKS5jc3MoImJvcmRlclRvcFdpZHRoIiksIDEwKSB8fCAwKSAtIChwYXJzZUludCh0KGUpLmNzcygicGFkZGluZ0JvdHRvbSIpLCAxMCkgfHwgMCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtIHRoaXMubWFyZ2lucy50b3BdKSB9LCBfY29udmVydFBvc2l0aW9uVG86IGZ1bmN0aW9uIChlLCBpKSB7IGkgfHwgKGkgPSB0aGlzLnBvc2l0aW9uKTsgdmFyIHMgPSAiYWJzb2x1dGUiID09PSBlID8gMSA6IC0xLCBuID0gImFic29sdXRlIiAhPT0gdGhpcy5jc3NQb3NpdGlvbiB8fCB0aGlzLnNjcm9sbFBhcmVudFswXSAhPT0gZG9jdW1lbnQgJiYgdC5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSwgdGhpcy5vZmZzZXRQYXJlbnRbMF0pID8gdGhpcy5zY3JvbGxQYXJlbnQgOiB0aGlzLm9mZnNldFBhcmVudCwgbyA9IC8oaHRtbHxib2R5KS9pLnRlc3QoblswXS50YWdOYW1lKTsgcmV0dXJuIHsgdG9wOiBpLnRvcCArIHRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCAqIHMgKyB0aGlzLm9mZnNldC5wYXJlbnQudG9wICogcyAtICgiZml4ZWQiID09PSB0aGlzLmNzc1Bvc2l0aW9uID8gLXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpIDogbyA/IDAgOiBuLnNjcm9sbFRvcCgpKSAqIHMsIGxlZnQ6IGkubGVmdCArIHRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQgKiBzICsgdGhpcy5vZmZzZXQucGFyZW50LmxlZnQgKiBzIC0gKCJmaXhlZCIgPT09IHRoaXMuY3NzUG9zaXRpb24gPyAtdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpIDogbyA/IDAgOiBuLnNjcm9sbExlZnQoKSkgKiBzIH0gfSwgX2dlbmVyYXRlUG9zaXRpb246IGZ1bmN0aW9uIChlKSB7IHZhciBpLCBzLCBuID0gdGhpcy5vcHRpb25zLCBvID0gZS5wYWdlWCwgYSA9IGUucGFnZVksIHIgPSAiYWJzb2x1dGUiICE9PSB0aGlzLmNzc1Bvc2l0aW9uIHx8IHRoaXMuc2Nyb2xsUGFyZW50WzBdICE9PSBkb2N1bWVudCAmJiB0LmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLCB0aGlzLm9mZnNldFBhcmVudFswXSkgPyB0aGlzLnNjcm9sbFBhcmVudCA6IHRoaXMub2Zmc2V0UGFyZW50LCBoID0gLyhodG1sfGJvZHkpL2kudGVzdChyWzBdLnRhZ05hbWUpOyByZXR1cm4gInJlbGF0aXZlIiAhPT0gdGhpcy5jc3NQb3NpdGlvbiB8fCB0aGlzLnNjcm9sbFBhcmVudFswXSAhPT0gZG9jdW1lbnQgJiYgdGhpcy5zY3JvbGxQYXJlbnRbMF0gIT09IHRoaXMub2Zmc2V0UGFyZW50WzBdIHx8ICh0aGlzLm9mZnNldC5yZWxhdGl2ZSA9IHRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkpLCB0aGlzLm9yaWdpbmFsUG9zaXRpb24gJiYgKHRoaXMuY29udGFpbm1lbnQgJiYgKGUucGFnZVggLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0IDwgdGhpcy5jb250YWlubWVudFswXSAmJiAobyA9IHRoaXMuY29udGFpbm1lbnRbMF0gKyB0aGlzLm9mZnNldC5jbGljay5sZWZ0KSwgZS5wYWdlWSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA8IHRoaXMuY29udGFpbm1lbnRbMV0gJiYgKGEgPSB0aGlzLmNvbnRhaW5tZW50WzFdICsgdGhpcy5vZmZzZXQuY2xpY2sudG9wKSwgZS5wYWdlWCAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPiB0aGlzLmNvbnRhaW5tZW50WzJdICYmIChvID0gdGhpcy5jb250YWlubWVudFsyXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLCBlLnBhZ2VZIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID4gdGhpcy5jb250YWlubWVudFszXSAmJiAoYSA9IHRoaXMuY29udGFpbm1lbnRbM10gKyB0aGlzLm9mZnNldC5jbGljay50b3ApKSwgbi5ncmlkICYmIChpID0gdGhpcy5vcmlnaW5hbFBhZ2VZICsgTWF0aC5yb3VuZCgoYSAtIHRoaXMub3JpZ2luYWxQYWdlWSkgLyBuLmdyaWRbMV0pICogbi5ncmlkWzFdLCBhID0gdGhpcy5jb250YWlubWVudCA/IGkgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPj0gdGhpcy5jb250YWlubWVudFsxXSAmJiBpIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wIDw9IHRoaXMuY29udGFpbm1lbnRbM10gPyBpIDogaSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA+PSB0aGlzLmNvbnRhaW5tZW50WzFdID8gaSAtIG4uZ3JpZFsxXSA6IGkgKyBuLmdyaWRbMV0gOiBpLCBzID0gdGhpcy5vcmlnaW5hbFBhZ2VYICsgTWF0aC5yb3VuZCgobyAtIHRoaXMub3JpZ2luYWxQYWdlWCkgLyBuLmdyaWRbMF0pICogbi5ncmlkWzBdLCBvID0gdGhpcy5jb250YWlubWVudCA/IHMgLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0ID49IHRoaXMuY29udGFpbm1lbnRbMF0gJiYgcyAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPD0gdGhpcy5jb250YWlubWVudFsyXSA/IHMgOiBzIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+PSB0aGlzLmNvbnRhaW5tZW50WzBdID8gcyAtIG4uZ3JpZFswXSA6IHMgKyBuLmdyaWRbMF0gOiBzKSksIHsgdG9wOiBhIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wIC0gdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wIC0gdGhpcy5vZmZzZXQucGFyZW50LnRvcCArICgiZml4ZWQiID09PSB0aGlzLmNzc1Bvc2l0aW9uID8gLXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpIDogaCA/IDAgOiByLnNjcm9sbFRvcCgpKSwgbGVmdDogbyAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0IC0gdGhpcy5vZmZzZXQucGFyZW50LmxlZnQgKyAoImZpeGVkIiA9PT0gdGhpcy5jc3NQb3NpdGlvbiA/IC10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkgOiBoID8gMCA6IHIuc2Nyb2xsTGVmdCgpKSB9IH0sIF9yZWFycmFuZ2U6IGZ1bmN0aW9uICh0LCBlLCBpLCBzKSB7IGkgPyBpWzBdLmFwcGVuZENoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pIDogZS5pdGVtWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMucGxhY2Vob2xkZXJbMF0sICJkb3duIiA9PT0gdGhpcy5kaXJlY3Rpb24gPyBlLml0ZW1bMF0gOiBlLml0ZW1bMF0ubmV4dFNpYmxpbmcpLCB0aGlzLmNvdW50ZXIgPSB0aGlzLmNvdW50ZXIgPyArK3RoaXMuY291bnRlciA6IDE7IHZhciBuID0gdGhpcy5jb3VudGVyOyB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IG4gPT09IHRoaXMuY291bnRlciAmJiB0aGlzLnJlZnJlc2hQb3NpdGlvbnMoIXMpIH0pIH0sIF9jbGVhcjogZnVuY3Rpb24gKHQsIGUpIHsgZnVuY3Rpb24gaSh0LCBlLCBpKSB7IHJldHVybiBmdW5jdGlvbiAocykgeyBpLl90cmlnZ2VyKHQsIHMsIGUuX3VpSGFzaChlKSkgfSB9IHRoaXMucmV2ZXJ0aW5nID0gITE7IHZhciBzLCBuID0gW107IGlmICghdGhpcy5fbm9GaW5hbFNvcnQgJiYgdGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKS5sZW5ndGggJiYgdGhpcy5wbGFjZWhvbGRlci5iZWZvcmUodGhpcy5jdXJyZW50SXRlbSksIHRoaXMuX25vRmluYWxTb3J0ID0gbnVsbCwgdGhpcy5oZWxwZXJbMF0gPT09IHRoaXMuY3VycmVudEl0ZW1bMF0pIHsgZm9yIChzIGluIHRoaXMuX3N0b3JlZENTUykgKCJhdXRvIiA9PT0gdGhpcy5fc3RvcmVkQ1NTW3NdIHx8ICJzdGF0aWMiID09PSB0aGlzLl9zdG9yZWRDU1Nbc10pICYmICh0aGlzLl9zdG9yZWRDU1Nbc10gPSAiIik7IHRoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpIH0gZWxzZSB0aGlzLmN1cnJlbnRJdGVtLnNob3coKTsgZm9yICh0aGlzLmZyb21PdXRzaWRlICYmICFlICYmIG4ucHVzaChmdW5jdGlvbiAodCkgeyB0aGlzLl90cmlnZ2VyKCJyZWNlaXZlIiwgdCwgdGhpcy5fdWlIYXNoKHRoaXMuZnJvbU91dHNpZGUpKSB9KSwgIXRoaXMuZnJvbU91dHNpZGUgJiYgdGhpcy5kb21Qb3NpdGlvbi5wcmV2ID09PSB0aGlzLmN1cnJlbnRJdGVtLnByZXYoKS5ub3QoIi51aS1zb3J0YWJsZS1oZWxwZXIiKVswXSAmJiB0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCA9PT0gdGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXSB8fCBlIHx8IG4ucHVzaChmdW5jdGlvbiAodCkgeyB0aGlzLl90cmlnZ2VyKCJ1cGRhdGUiLCB0LCB0aGlzLl91aUhhc2goKSkgfSksIHRoaXMgIT09IHRoaXMuY3VycmVudENvbnRhaW5lciAmJiAoZSB8fCAobi5wdXNoKGZ1bmN0aW9uICh0KSB7IHRoaXMuX3RyaWdnZXIoInJlbW92ZSIsIHQsIHRoaXMuX3VpSGFzaCgpKSB9KSwgbi5wdXNoKGZ1bmN0aW9uICh0KSB7IHJldHVybiBmdW5jdGlvbiAoZSkgeyB0Ll90cmlnZ2VyKCJyZWNlaXZlIiwgZSwgdGhpcy5fdWlIYXNoKHRoaXMpKSB9IH0uY2FsbCh0aGlzLCB0aGlzLmN1cnJlbnRDb250YWluZXIpKSwgbi5wdXNoKGZ1bmN0aW9uICh0KSB7IHJldHVybiBmdW5jdGlvbiAoZSkgeyB0Ll90cmlnZ2VyKCJ1cGRhdGUiLCBlLCB0aGlzLl91aUhhc2godGhpcykpIH0gfS5jYWxsKHRoaXMsIHRoaXMuY3VycmVudENvbnRhaW5lcikpKSksIHMgPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMTsgcyA+PSAwOyBzLS0pIGUgfHwgbi5wdXNoKGkoImRlYWN0aXZhdGUiLCB0aGlzLCB0aGlzLmNvbnRhaW5lcnNbc10pKSwgdGhpcy5jb250YWluZXJzW3NdLmNvbnRhaW5lckNhY2hlLm92ZXIgJiYgKG4ucHVzaChpKCJvdXQiLCB0aGlzLCB0aGlzLmNvbnRhaW5lcnNbc10pKSwgdGhpcy5jb250YWluZXJzW3NdLmNvbnRhaW5lckNhY2hlLm92ZXIgPSAwKTsgaWYgKHRoaXMuc3RvcmVkQ3Vyc29yICYmICh0aGlzLmRvY3VtZW50LmZpbmQoImJvZHkiKS5jc3MoImN1cnNvciIsIHRoaXMuc3RvcmVkQ3Vyc29yKSwgdGhpcy5zdG9yZWRTdHlsZXNoZWV0LnJlbW92ZSgpKSwgdGhpcy5fc3RvcmVkT3BhY2l0eSAmJiB0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLCB0aGlzLl9zdG9yZWRPcGFjaXR5KSwgdGhpcy5fc3RvcmVkWkluZGV4ICYmIHRoaXMuaGVscGVyLmNzcygiekluZGV4IiwgImF1dG8iID09PSB0aGlzLl9zdG9yZWRaSW5kZXggPyAiIiA6IHRoaXMuX3N0b3JlZFpJbmRleCksIHRoaXMuZHJhZ2dpbmcgPSAhMSwgdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsKSB7IGlmICghZSkgeyBmb3IgKHRoaXMuX3RyaWdnZXIoImJlZm9yZVN0b3AiLCB0LCB0aGlzLl91aUhhc2goKSksIHMgPSAwOyBuLmxlbmd0aCA+IHM7IHMrKykgbltzXS5jYWxsKHRoaXMsIHQpOyB0aGlzLl90cmlnZ2VyKCJzdG9wIiwgdCwgdGhpcy5fdWlIYXNoKCkpIH0gcmV0dXJuIHRoaXMuZnJvbU91dHNpZGUgPSAhMSwgITEgfSBpZiAoZSB8fCB0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIiwgdCwgdGhpcy5fdWlIYXNoKCkpLCB0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksIHRoaXMuaGVscGVyWzBdICE9PSB0aGlzLmN1cnJlbnRJdGVtWzBdICYmIHRoaXMuaGVscGVyLnJlbW92ZSgpLCB0aGlzLmhlbHBlciA9IG51bGwsICFlKSB7IGZvciAocyA9IDA7IG4ubGVuZ3RoID4gczsgcysrKSBuW3NdLmNhbGwodGhpcywgdCk7IHRoaXMuX3RyaWdnZXIoInN0b3AiLCB0LCB0aGlzLl91aUhhc2goKSkgfSByZXR1cm4gdGhpcy5mcm9tT3V0c2lkZSA9ICExLCAhMCB9LCBfdHJpZ2dlcjogZnVuY3Rpb24gKCkgeyB0LldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA9PT0gITEgJiYgdGhpcy5jYW5jZWwoKSB9LCBfdWlIYXNoOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IGUgfHwgdGhpczsgcmV0dXJuIHsgaGVscGVyOiBpLmhlbHBlciwgcGxhY2Vob2xkZXI6IGkucGxhY2Vob2xkZXIgfHwgdChbXSksIHBvc2l0aW9uOiBpLnBvc2l0aW9uLCBvcmlnaW5hbFBvc2l0aW9uOiBpLm9yaWdpbmFsUG9zaXRpb24sIG9mZnNldDogaS5wb3NpdGlvbkFicywgaXRlbTogaS5jdXJyZW50SXRlbSwgc2VuZGVyOiBlID8gZS5lbGVtZW50IDogbnVsbCB9IH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IGZ1bmN0aW9uIGUodCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMuZWxlbWVudC52YWwoKTsgdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLl9yZWZyZXNoKCksIGUgIT09IHRoaXMuZWxlbWVudC52YWwoKSAmJiB0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiKSB9IH0gdC53aWRnZXQoInVpLnNwaW5uZXIiLCB7IHZlcnNpb246ICIxLjEwLjQiLCBkZWZhdWx0RWxlbWVudDogIjxpbnB1dD4iLCB3aWRnZXRFdmVudFByZWZpeDogInNwaW4iLCBvcHRpb25zOiB7IGN1bHR1cmU6IG51bGwsIGljb25zOiB7IGRvd246ICJ1aS1pY29uLXRyaWFuZ2xlLTEtcyIsIHVwOiAidWktaWNvbi10cmlhbmdsZS0xLW4iIH0sIGluY3JlbWVudGFsOiAhMCwgbWF4OiBudWxsLCBtaW46IG51bGwsIG51bWJlckZvcm1hdDogbnVsbCwgcGFnZTogMTAsIHN0ZXA6IDEsIGNoYW5nZTogbnVsbCwgc3BpbjogbnVsbCwgc3RhcnQ6IG51bGwsIHN0b3A6IG51bGwgfSwgX2NyZWF0ZTogZnVuY3Rpb24gKCkgeyB0aGlzLl9zZXRPcHRpb24oIm1heCIsIHRoaXMub3B0aW9ucy5tYXgpLCB0aGlzLl9zZXRPcHRpb24oIm1pbiIsIHRoaXMub3B0aW9ucy5taW4pLCB0aGlzLl9zZXRPcHRpb24oInN0ZXAiLCB0aGlzLm9wdGlvbnMuc3RlcCksICIiICE9PSB0aGlzLnZhbHVlKCkgJiYgdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpLCAhMCksIHRoaXMuX2RyYXcoKSwgdGhpcy5fb24odGhpcy5fZXZlbnRzKSwgdGhpcy5fcmVmcmVzaCgpLCB0aGlzLl9vbih0aGlzLndpbmRvdywgeyBiZWZvcmV1bmxvYWQ6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpIH0gfSkgfSwgX2dldENyZWF0ZU9wdGlvbnM6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB7fSwgaSA9IHRoaXMuZWxlbWVudDsgcmV0dXJuIHQuZWFjaChbIm1pbiIsICJtYXgiLCAic3RlcCJdLCBmdW5jdGlvbiAodCwgcykgeyB2YXIgbiA9IGkuYXR0cihzKTsgdm9pZCAwICE9PSBuICYmIG4ubGVuZ3RoICYmIChlW3NdID0gbikgfSksIGUgfSwgX2V2ZW50czogeyBrZXlkb3duOiBmdW5jdGlvbiAodCkgeyB0aGlzLl9zdGFydCh0KSAmJiB0aGlzLl9rZXlkb3duKHQpICYmIHQucHJldmVudERlZmF1bHQoKSB9LCBrZXl1cDogIl9zdG9wIiwgZm9jdXM6IGZ1bmN0aW9uICgpIHsgdGhpcy5wcmV2aW91cyA9IHRoaXMuZWxlbWVudC52YWwoKSB9LCBibHVyOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdGhpcy5jYW5jZWxCbHVyID8gKGRlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsIHZvaWQgMCkgOiAodGhpcy5fc3RvcCgpLCB0aGlzLl9yZWZyZXNoKCksIHRoaXMucHJldmlvdXMgIT09IHRoaXMuZWxlbWVudC52YWwoKSAmJiB0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLCB0KSwgdm9pZCAwKSB9LCBtb3VzZXdoZWVsOiBmdW5jdGlvbiAodCwgZSkgeyBpZiAoZSkgeyBpZiAoIXRoaXMuc3Bpbm5pbmcgJiYgIXRoaXMuX3N0YXJ0KHQpKSByZXR1cm4gITE7IHRoaXMuX3NwaW4oKGUgPiAwID8gMSA6IC0xKSAqIHRoaXMub3B0aW9ucy5zdGVwLCB0KSwgY2xlYXJUaW1lb3V0KHRoaXMubW91c2V3aGVlbFRpbWVyKSwgdGhpcy5tb3VzZXdoZWVsVGltZXIgPSB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IHRoaXMuc3Bpbm5pbmcgJiYgdGhpcy5fc3RvcCh0KSB9LCAxMDApLCB0LnByZXZlbnREZWZhdWx0KCkgfSB9LCAibW91c2Vkb3duIC51aS1zcGlubmVyLWJ1dHRvbiI6IGZ1bmN0aW9uIChlKSB7IGZ1bmN0aW9uIGkoKSB7IHZhciB0ID0gdGhpcy5lbGVtZW50WzBdID09PSB0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ7IHQgfHwgKHRoaXMuZWxlbWVudC5mb2N1cygpLCB0aGlzLnByZXZpb3VzID0gcywgdGhpcy5fZGVsYXkoZnVuY3Rpb24gKCkgeyB0aGlzLnByZXZpb3VzID0gcyB9KSkgfSB2YXIgczsgcyA9IHRoaXMuZWxlbWVudFswXSA9PT0gdGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50ID8gdGhpcy5wcmV2aW91cyA6IHRoaXMuZWxlbWVudC52YWwoKSwgZS5wcmV2ZW50RGVmYXVsdCgpLCBpLmNhbGwodGhpcyksIHRoaXMuY2FuY2VsQmx1ciA9ICEwLCB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IGRlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsIGkuY2FsbCh0aGlzKSB9KSwgdGhpcy5fc3RhcnQoZSkgIT09ICExICYmIHRoaXMuX3JlcGVhdChudWxsLCB0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoInVpLXNwaW5uZXItdXAiKSA/IDEgOiAtMSwgZSkgfSwgIm1vdXNldXAgLnVpLXNwaW5uZXItYnV0dG9uIjogIl9zdG9wIiwgIm1vdXNlZW50ZXIgLnVpLXNwaW5uZXItYnV0dG9uIjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHQoZS5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3RhdGUtYWN0aXZlIikgPyB0aGlzLl9zdGFydChlKSA9PT0gITEgPyAhMSA6ICh0aGlzLl9yZXBlYXQobnVsbCwgdChlLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJ1aS1zcGlubmVyLXVwIikgPyAxIDogLTEsIGUpLCB2b2lkIDApIDogdm9pZCAwIH0sICJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvbiI6ICJfc3RvcCIgfSwgX2RyYXc6IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzLnVpU3Bpbm5lciA9IHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc3Bpbm5lci1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsICJvZmYiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSk7IHRoaXMuZWxlbWVudC5hdHRyKCJyb2xlIiwgInNwaW5idXR0b24iKSwgdGhpcy5idXR0b25zID0gdC5maW5kKCIudWktc3Bpbm5lci1idXR0b24iKS5hdHRyKCJ0YWJJbmRleCIsIC0xKS5idXR0b24oKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLCB0aGlzLmJ1dHRvbnMuaGVpZ2h0KCkgPiBNYXRoLmNlaWwoLjUgKiB0LmhlaWdodCgpKSAmJiB0LmhlaWdodCgpID4gMCAmJiB0LmhlaWdodCh0LmhlaWdodCgpKSwgdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIHRoaXMuZGlzYWJsZSgpIH0sIF9rZXlkb3duOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMub3B0aW9ucywgcyA9IHQudWkua2V5Q29kZTsgc3dpdGNoIChlLmtleUNvZGUpIHsgY2FzZSBzLlVQOiByZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsIDEsIGUpLCAhMDsgY2FzZSBzLkRPV046IHJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwgLTEsIGUpLCAhMDsgY2FzZSBzLlBBR0VfVVA6IHJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwgaS5wYWdlLCBlKSwgITA7IGNhc2Ugcy5QQUdFX0RPV046IHJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwgLWkucGFnZSwgZSksICEwIH0gcmV0dXJuICExIH0sIF91aVNwaW5uZXJIdG1sOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiPHNwYW4gY2xhc3M9J3VpLXNwaW5uZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwnPjxcL3NwYW4+IiB9LCBfYnV0dG9uSHRtbDogZnVuY3Rpb24gKCkgeyByZXR1cm4gIjxhIGNsYXNzPSd1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwIHVpLWNvcm5lci10cic+PHNwYW4gY2xhc3M9J3VpLWljb24gIiArIHRoaXMub3B0aW9ucy5pY29ucy51cCArICInPiYjOTY1MDs8XC9zcGFuPiIgKyAiPFwvYT4iICsgIjxhIGNsYXNzPSd1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLWRvd24gdWktY29ybmVyLWJyJz4iICsgIjxzcGFuIGNsYXNzPSd1aS1pY29uICIgKyB0aGlzLm9wdGlvbnMuaWNvbnMuZG93biArICInPiYjOTY2MDs8XC9zcGFuPiIgKyAiPFwvYT4iIH0sIF9zdGFydDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHRoaXMuc3Bpbm5pbmcgfHwgdGhpcy5fdHJpZ2dlcigic3RhcnQiLCB0KSAhPT0gITEgPyAodGhpcy5jb3VudGVyIHx8ICh0aGlzLmNvdW50ZXIgPSAxKSwgdGhpcy5zcGlubmluZyA9ICEwLCAhMCkgOiAhMSB9LCBfcmVwZWF0OiBmdW5jdGlvbiAodCwgZSwgaSkgeyB0ID0gdCB8fCA1MDAsIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSwgdGhpcy50aW1lciA9IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgdGhpcy5fcmVwZWF0KDQwLCBlLCBpKSB9LCB0KSwgdGhpcy5fc3BpbihlICogdGhpcy5vcHRpb25zLnN0ZXAsIGkpIH0sIF9zcGluOiBmdW5jdGlvbiAodCwgZSkgeyB2YXIgaSA9IHRoaXMudmFsdWUoKSB8fCAwOyB0aGlzLmNvdW50ZXIgfHwgKHRoaXMuY291bnRlciA9IDEpLCBpID0gdGhpcy5fYWRqdXN0VmFsdWUoaSArIHQgKiB0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSksIHRoaXMuc3Bpbm5pbmcgJiYgdGhpcy5fdHJpZ2dlcigic3BpbiIsIGUsIHsgdmFsdWU6IGkgfSkgPT09ICExIHx8ICh0aGlzLl92YWx1ZShpKSwgdGhpcy5jb3VudGVyKyspIH0sIF9pbmNyZW1lbnQ6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcy5vcHRpb25zLmluY3JlbWVudGFsOyByZXR1cm4gaSA/IHQuaXNGdW5jdGlvbihpKSA/IGkoZSkgOiBNYXRoLmZsb29yKGUgKiBlICogZSAvIDVlNCAtIGUgKiBlIC8gNTAwICsgMTcgKiBlIC8gMjAwICsgMSkgOiAxIH0sIF9wcmVjaXNpb246IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMuc3RlcCk7IHJldHVybiBudWxsICE9PSB0aGlzLm9wdGlvbnMubWluICYmICh0ID0gTWF0aC5tYXgodCwgdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSwgdCB9LCBfcHJlY2lzaW9uT2Y6IGZ1bmN0aW9uICh0KSB7IHZhciBlID0gIiIgKyB0LCBpID0gZS5pbmRleE9mKCIuIik7IHJldHVybiAtMSA9PT0gaSA/IDAgOiBlLmxlbmd0aCAtIGkgLSAxIH0sIF9hZGp1c3RWYWx1ZTogZnVuY3Rpb24gKHQpIHsgdmFyIGUsIGksIHMgPSB0aGlzLm9wdGlvbnM7IHJldHVybiBlID0gbnVsbCAhPT0gcy5taW4gPyBzLm1pbiA6IDAsIGkgPSB0IC0gZSwgaSA9IE1hdGgucm91bmQoaSAvIHMuc3RlcCkgKiBzLnN0ZXAsIHQgPSBlICsgaSwgdCA9IHBhcnNlRmxvYXQodC50b0ZpeGVkKHRoaXMuX3ByZWNpc2lvbigpKSksIG51bGwgIT09IHMubWF4ICYmIHQgPiBzLm1heCA/IHMubWF4IDogbnVsbCAhPT0gcy5taW4gJiYgcy5taW4gPiB0ID8gcy5taW4gOiB0IH0sIF9zdG9wOiBmdW5jdGlvbiAodCkgeyB0aGlzLnNwaW5uaW5nICYmIChjbGVhclRpbWVvdXQodGhpcy50aW1lciksIGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksIHRoaXMuY291bnRlciA9IDAsIHRoaXMuc3Bpbm5pbmcgPSAhMSwgdGhpcy5fdHJpZ2dlcigic3RvcCIsIHQpKSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAodCwgZSkgeyBpZiAoImN1bHR1cmUiID09PSB0IHx8ICJudW1iZXJGb3JtYXQiID09PSB0KSB7IHZhciBpID0gdGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKTsgcmV0dXJuIHRoaXMub3B0aW9uc1t0XSA9IGUsIHRoaXMuZWxlbWVudC52YWwodGhpcy5fZm9ybWF0KGkpKSwgdm9pZCAwIH0gKCJtYXgiID09PSB0IHx8ICJtaW4iID09PSB0IHx8ICJzdGVwIiA9PT0gdCkgJiYgInN0cmluZyIgPT0gdHlwZW9mIGUgJiYgKGUgPSB0aGlzLl9wYXJzZShlKSksICJpY29ucyIgPT09IHQgJiYgKHRoaXMuYnV0dG9ucy5maXJzdCgpLmZpbmQoIi51aS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnVwKS5hZGRDbGFzcyhlLnVwKSwgdGhpcy5idXR0b25zLmxhc3QoKS5maW5kKCIudWktaWNvbiIpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pY29ucy5kb3duKS5hZGRDbGFzcyhlLmRvd24pKSwgdGhpcy5fc3VwZXIodCwgZSksICJkaXNhYmxlZCIgPT09IHQgJiYgKGUgPyAodGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwgITApLCB0aGlzLmJ1dHRvbnMuYnV0dG9uKCJkaXNhYmxlIikpIDogKHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsICExKSwgdGhpcy5idXR0b25zLmJ1dHRvbigiZW5hYmxlIikpKSB9LCBfc2V0T3B0aW9uczogZShmdW5jdGlvbiAodCkgeyB0aGlzLl9zdXBlcih0KSwgdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpKSB9KSwgX3BhcnNlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gInN0cmluZyIgPT0gdHlwZW9mIHQgJiYgIiIgIT09IHQgJiYgKHQgPSB3aW5kb3cuR2xvYmFsaXplICYmIHRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQgPyBHbG9iYWxpemUucGFyc2VGbG9hdCh0LCAxMCwgdGhpcy5vcHRpb25zLmN1bHR1cmUpIDogK3QpLCAiIiA9PT0gdCB8fCBpc05hTih0KSA/IG51bGwgOiB0IH0sIF9mb3JtYXQ6IGZ1bmN0aW9uICh0KSB7IHJldHVybiAiIiA9PT0gdCA/ICIiIDogd2luZG93Lkdsb2JhbGl6ZSAmJiB0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0ID8gR2xvYmFsaXplLmZvcm1hdCh0LCB0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LCB0aGlzLm9wdGlvbnMuY3VsdHVyZSkgOiB0IH0sIF9yZWZyZXNoOiBmdW5jdGlvbiAoKSB7IHRoaXMuZWxlbWVudC5hdHRyKHsgImFyaWEtdmFsdWVtaW4iOiB0aGlzLm9wdGlvbnMubWluLCAiYXJpYS12YWx1ZW1heCI6IHRoaXMub3B0aW9ucy5tYXgsICJhcmlhLXZhbHVlbm93IjogdGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKSB9KSB9LCBfdmFsdWU6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpOyAiIiAhPT0gdCAmJiAoaSA9IHRoaXMuX3BhcnNlKHQpLCBudWxsICE9PSBpICYmIChlIHx8IChpID0gdGhpcy5fYWRqdXN0VmFsdWUoaSkpLCB0ID0gdGhpcy5fZm9ybWF0KGkpKSksIHRoaXMuZWxlbWVudC52YWwodCksIHRoaXMuX3JlZnJlc2goKSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5wcm9wKCJkaXNhYmxlZCIsICExKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1pbiIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtYXgiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksIHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKHRoaXMuZWxlbWVudCkgfSwgc3RlcFVwOiBlKGZ1bmN0aW9uICh0KSB7IHRoaXMuX3N0ZXBVcCh0KSB9KSwgX3N0ZXBVcDogZnVuY3Rpb24gKHQpIHsgdGhpcy5fc3RhcnQoKSAmJiAodGhpcy5fc3BpbigodCB8fCAxKSAqIHRoaXMub3B0aW9ucy5zdGVwKSwgdGhpcy5fc3RvcCgpKSB9LCBzdGVwRG93bjogZShmdW5jdGlvbiAodCkgeyB0aGlzLl9zdGVwRG93bih0KSB9KSwgX3N0ZXBEb3duOiBmdW5jdGlvbiAodCkgeyB0aGlzLl9zdGFydCgpICYmICh0aGlzLl9zcGluKCh0IHx8IDEpICogLXRoaXMub3B0aW9ucy5zdGVwKSwgdGhpcy5fc3RvcCgpKSB9LCBwYWdlVXA6IGUoZnVuY3Rpb24gKHQpIHsgdGhpcy5fc3RlcFVwKCh0IHx8IDEpICogdGhpcy5vcHRpb25zLnBhZ2UpIH0pLCBwYWdlRG93bjogZShmdW5jdGlvbiAodCkgeyB0aGlzLl9zdGVwRG93bigodCB8fCAxKSAqIHRoaXMub3B0aW9ucy5wYWdlKSB9KSwgdmFsdWU6IGZ1bmN0aW9uICh0KSB7IHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGUodGhpcy5fdmFsdWUpLmNhbGwodGhpcywgdCksIHZvaWQgMCkgOiB0aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpIH0sIHdpZGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy51aVNwaW5uZXIgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQsIGUpIHsgZnVuY3Rpb24gaSgpIHsgcmV0dXJuICsrbiB9IGZ1bmN0aW9uIHModCkgeyByZXR1cm4gdCA9IHQuY2xvbmVOb2RlKCExKSwgdC5oYXNoLmxlbmd0aCA+IDEgJiYgZGVjb2RlVVJJQ29tcG9uZW50KHQuaHJlZi5yZXBsYWNlKGEsICIiKSkgPT09IGRlY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmLnJlcGxhY2UoYSwgIiIpKSB9IHZhciBuID0gMCwgYSA9IC8jLiokLzsgdC53aWRnZXQoInVpLnRhYnMiLCB7IHZlcnNpb246ICIxLjEwLjQiLCBkZWxheTogMzAwLCBvcHRpb25zOiB7IGFjdGl2ZTogbnVsbCwgY29sbGFwc2libGU6ICExLCBldmVudDogImNsaWNrIiwgaGVpZ2h0U3R5bGU6ICJjb250ZW50IiwgaGlkZTogbnVsbCwgc2hvdzogbnVsbCwgYWN0aXZhdGU6IG51bGwsIGJlZm9yZUFjdGl2YXRlOiBudWxsLCBiZWZvcmVMb2FkOiBudWxsLCBsb2FkOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLCBpID0gdGhpcy5vcHRpb25zOyB0aGlzLnJ1bm5pbmcgPSAhMSwgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikudG9nZ2xlQ2xhc3MoInVpLXRhYnMtY29sbGFwc2libGUiLCBpLmNvbGxhcHNpYmxlKS5kZWxlZ2F0ZSgiLnVpLXRhYnMtbmF2ID4gbGkiLCAibW91c2Vkb3duIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uIChlKSB7IHQodGhpcykuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpICYmIGUucHJldmVudERlZmF1bHQoKSB9KS5kZWxlZ2F0ZSgiLnVpLXRhYnMtYW5jaG9yIiwgImZvY3VzIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsgdCh0aGlzKS5jbG9zZXN0KCJsaSIpLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSAmJiB0aGlzLmJsdXIoKSB9KSwgdGhpcy5fcHJvY2Vzc1RhYnMoKSwgaS5hY3RpdmUgPSB0aGlzLl9pbml0aWFsQWN0aXZlKCksIHQuaXNBcnJheShpLmRpc2FibGVkKSAmJiAoaS5kaXNhYmxlZCA9IHQudW5pcXVlKGkuZGlzYWJsZWQuY29uY2F0KHQubWFwKHRoaXMudGFicy5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLCBmdW5jdGlvbiAodCkgeyByZXR1cm4gZS50YWJzLmluZGV4KHQpIH0pKSkuc29ydCgpKSwgdGhpcy5hY3RpdmUgPSB0aGlzLm9wdGlvbnMuYWN0aXZlICE9PSAhMSAmJiB0aGlzLmFuY2hvcnMubGVuZ3RoID8gdGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSkgOiB0KCksIHRoaXMuX3JlZnJlc2goKSwgdGhpcy5hY3RpdmUubGVuZ3RoICYmIHRoaXMubG9hZChpLmFjdGl2ZSkgfSwgX2luaXRpYWxBY3RpdmU6IGZ1bmN0aW9uICgpIHsgdmFyIGkgPSB0aGlzLm9wdGlvbnMuYWN0aXZlLCBzID0gdGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLCBuID0gbG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7IHJldHVybiBudWxsID09PSBpICYmIChuICYmIHRoaXMudGFicy5lYWNoKGZ1bmN0aW9uIChzLCBhKSB7IHJldHVybiB0KGEpLmF0dHIoImFyaWEtY29udHJvbHMiKSA9PT0gbiA/IChpID0gcywgITEpIDogZSB9KSwgbnVsbCA9PT0gaSAmJiAoaSA9IHRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKCIudWktdGFicy1hY3RpdmUiKSkpLCAobnVsbCA9PT0gaSB8fCAtMSA9PT0gaSkgJiYgKGkgPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6ICExKSksIGkgIT09ICExICYmIChpID0gdGhpcy50YWJzLmluZGV4KHRoaXMudGFicy5lcShpKSksIC0xID09PSBpICYmIChpID0gcyA/ICExIDogMCkpLCAhcyAmJiBpID09PSAhMSAmJiB0aGlzLmFuY2hvcnMubGVuZ3RoICYmIChpID0gMCksIGkgfSwgX2dldENyZWF0ZUV2ZW50RGF0YTogZnVuY3Rpb24gKCkgeyByZXR1cm4geyB0YWI6IHRoaXMuYWN0aXZlLCBwYW5lbDogdGhpcy5hY3RpdmUubGVuZ3RoID8gdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpIDogdCgpIH0gfSwgX3RhYktleWRvd246IGZ1bmN0aW9uIChpKSB7IHZhciBzID0gdCh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoImxpIiksIG4gPSB0aGlzLnRhYnMuaW5kZXgocyksIGEgPSAhMDsgaWYgKCF0aGlzLl9oYW5kbGVQYWdlTmF2KGkpKSB7IHN3aXRjaCAoaS5rZXlDb2RlKSB7IGNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOiBjYXNlIHQudWkua2V5Q29kZS5ET1dOOiBuKys7IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5VUDogY2FzZSB0LnVpLmtleUNvZGUuTEVGVDogYSA9ICExLCBuLS07IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5FTkQ6IG4gPSB0aGlzLmFuY2hvcnMubGVuZ3RoIC0gMTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLkhPTUU6IG4gPSAwOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6IHJldHVybiBpLnByZXZlbnREZWZhdWx0KCksIGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLCB0aGlzLl9hY3RpdmF0ZShuKSwgZTsgY2FzZSB0LnVpLmtleUNvZGUuRU5URVI6IHJldHVybiBpLnByZXZlbnREZWZhdWx0KCksIGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLCB0aGlzLl9hY3RpdmF0ZShuID09PSB0aGlzLm9wdGlvbnMuYWN0aXZlID8gITEgOiBuKSwgZTsgZGVmYXVsdDogcmV0dXJuIH0gaS5wcmV2ZW50RGVmYXVsdCgpLCBjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSwgbiA9IHRoaXMuX2ZvY3VzTmV4dFRhYihuLCBhKSwgaS5jdHJsS2V5IHx8IChzLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCAiZmFsc2UiKSwgdGhpcy50YWJzLmVxKG4pLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCAidHJ1ZSIpLCB0aGlzLmFjdGl2YXRpbmcgPSB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IHRoaXMub3B0aW9uKCJhY3RpdmUiLCBuKSB9LCB0aGlzLmRlbGF5KSkgfSB9LCBfcGFuZWxLZXlkb3duOiBmdW5jdGlvbiAoZSkgeyB0aGlzLl9oYW5kbGVQYWdlTmF2KGUpIHx8IGUuY3RybEtleSAmJiBlLmtleUNvZGUgPT09IHQudWkua2V5Q29kZS5VUCAmJiAoZS5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLmFjdGl2ZS5mb2N1cygpKSB9LCBfaGFuZGxlUGFnZU5hdjogZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGkuYWx0S2V5ICYmIGkua2V5Q29kZSA9PT0gdC51aS5rZXlDb2RlLlBBR0VfVVAgPyAodGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUgLSAxLCAhMSkpLCAhMCkgOiBpLmFsdEtleSAmJiBpLmtleUNvZGUgPT09IHQudWkua2V5Q29kZS5QQUdFX0RPV04gPyAodGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUgKyAxLCAhMCkpLCAhMCkgOiBlIH0sIF9maW5kTmV4dFRhYjogZnVuY3Rpb24gKGUsIGkpIHsgZnVuY3Rpb24gcygpIHsgcmV0dXJuIGUgPiBuICYmIChlID0gMCksIDAgPiBlICYmIChlID0gbiksIGUgfSBmb3IgKHZhciBuID0gdGhpcy50YWJzLmxlbmd0aCAtIDE7IC0xICE9PSB0LmluQXJyYXkocygpLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIDspIGUgPSBpID8gZSArIDEgOiBlIC0gMTsgcmV0dXJuIGUgfSwgX2ZvY3VzTmV4dFRhYjogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQgPSB0aGlzLl9maW5kTmV4dFRhYih0LCBlKSwgdGhpcy50YWJzLmVxKHQpLmZvY3VzKCksIHQgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKHQsIGkpIHsgcmV0dXJuICJhY3RpdmUiID09PSB0ID8gKHRoaXMuX2FjdGl2YXRlKGkpLCBlKSA6ICJkaXNhYmxlZCIgPT09IHQgPyAodGhpcy5fc2V0dXBEaXNhYmxlZChpKSwgZSkgOiAodGhpcy5fc3VwZXIodCwgaSksICJjb2xsYXBzaWJsZSIgPT09IHQgJiYgKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsIGkpLCBpIHx8IHRoaXMub3B0aW9ucy5hY3RpdmUgIT09ICExIHx8IHRoaXMuX2FjdGl2YXRlKDApKSwgImV2ZW50IiA9PT0gdCAmJiB0aGlzLl9zZXR1cEV2ZW50cyhpKSwgImhlaWdodFN0eWxlIiA9PT0gdCAmJiB0aGlzLl9zZXR1cEhlaWdodFN0eWxlKGkpLCBlKSB9LCBfdGFiSWQ6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LmF0dHIoImFyaWEtY29udHJvbHMiKSB8fCAidWktdGFicy0iICsgaSgpIH0sIF9zYW5pdGl6ZVNlbGVjdG9yOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdCA/IHQucmVwbGFjZSgvWyEiJCUmJygpKissLlwvOjs8PT4/QFxbXF1cXmB7fH1+XS9nLCAiXFwkJiIpIDogIiIgfSwgcmVmcmVzaDogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMub3B0aW9ucywgaSA9IHRoaXMudGFibGlzdC5jaGlsZHJlbigiOmhhcyhhW2hyZWZdKSIpOyBlLmRpc2FibGVkID0gdC5tYXAoaS5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLCBmdW5jdGlvbiAodCkgeyByZXR1cm4gaS5pbmRleCh0KSB9KSwgdGhpcy5fcHJvY2Vzc1RhYnMoKSwgZS5hY3RpdmUgIT09ICExICYmIHRoaXMuYW5jaG9ycy5sZW5ndGggPyB0aGlzLmFjdGl2ZS5sZW5ndGggJiYgIXQuY29udGFpbnModGhpcy50YWJsaXN0WzBdLCB0aGlzLmFjdGl2ZVswXSkgPyB0aGlzLnRhYnMubGVuZ3RoID09PSBlLmRpc2FibGVkLmxlbmd0aCA/IChlLmFjdGl2ZSA9ICExLCB0aGlzLmFjdGl2ZSA9IHQoKSkgOiB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9maW5kTmV4dFRhYihNYXRoLm1heCgwLCBlLmFjdGl2ZSAtIDEpLCAhMSkpIDogZS5hY3RpdmUgPSB0aGlzLnRhYnMuaW5kZXgodGhpcy5hY3RpdmUpIDogKGUuYWN0aXZlID0gITEsIHRoaXMuYWN0aXZlID0gdCgpKSwgdGhpcy5fcmVmcmVzaCgpIH0sIF9yZWZyZXNoOiBmdW5jdGlvbiAoKSB7IHRoaXMuX3NldHVwRGlzYWJsZWQodGhpcy5vcHRpb25zLmRpc2FibGVkKSwgdGhpcy5fc2V0dXBFdmVudHModGhpcy5vcHRpb25zLmV2ZW50KSwgdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUpLCB0aGlzLnRhYnMubm90KHRoaXMuYWN0aXZlKS5hdHRyKHsgImFyaWEtc2VsZWN0ZWQiOiAiZmFsc2UiLCB0YWJJbmRleDogLTEgfSksIHRoaXMucGFuZWxzLm5vdCh0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSkpLmhpZGUoKS5hdHRyKHsgImFyaWEtZXhwYW5kZWQiOiAiZmFsc2UiLCAiYXJpYS1oaWRkZW4iOiAidHJ1ZSIgfSksIHRoaXMuYWN0aXZlLmxlbmd0aCA/ICh0aGlzLmFjdGl2ZS5hZGRDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIikuYXR0cih7ICJhcmlhLXNlbGVjdGVkIjogInRydWUiLCB0YWJJbmRleDogMCB9KSwgdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHsgImFyaWEtZXhwYW5kZWQiOiAidHJ1ZSIsICJhcmlhLWhpZGRlbiI6ICJmYWxzZSIgfSkpIDogdGhpcy50YWJzLmVxKDApLmF0dHIoInRhYkluZGV4IiwgMCkgfSwgX3Byb2Nlc3NUYWJzOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpczsgdGhpcy50YWJsaXN0ID0gdGhpcy5fZ2V0TGlzdCgpLmFkZENsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLmF0dHIoInJvbGUiLCAidGFibGlzdCIpLCB0aGlzLnRhYnMgPSB0aGlzLnRhYmxpc3QuZmluZCgiPiBsaTpoYXMoYVtocmVmXSkiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItdG9wIikuYXR0cih7IHJvbGU6ICJ0YWIiLCB0YWJJbmRleDogLTEgfSksIHRoaXMuYW5jaG9ycyA9IHRoaXMudGFicy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdCgiYSIsIHRoaXMpWzBdIH0pLmFkZENsYXNzKCJ1aS10YWJzLWFuY2hvciIpLmF0dHIoeyByb2xlOiAicHJlc2VudGF0aW9uIiwgdGFiSW5kZXg6IC0xIH0pLCB0aGlzLnBhbmVscyA9IHQoKSwgdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24gKGksIG4pIHsgdmFyIGEsIG8sIHIsIGggPSB0KG4pLnVuaXF1ZUlkKCkuYXR0cigiaWQiKSwgbCA9IHQobikuY2xvc2VzdCgibGkiKSwgYyA9IGwuYXR0cigiYXJpYS1jb250cm9scyIpOyBzKG4pID8gKGEgPSBuLmhhc2gsIG8gPSBlLmVsZW1lbnQuZmluZChlLl9zYW5pdGl6ZVNlbGVjdG9yKGEpKSkgOiAociA9IGUuX3RhYklkKGwpLCBhID0gIiMiICsgciwgbyA9IGUuZWxlbWVudC5maW5kKGEpLCBvLmxlbmd0aCB8fCAobyA9IGUuX2NyZWF0ZVBhbmVsKHIpLCBvLmluc2VydEFmdGVyKGUucGFuZWxzW2kgLSAxXSB8fCBlLnRhYmxpc3QpKSwgby5hdHRyKCJhcmlhLWxpdmUiLCAicG9saXRlIikpLCBvLmxlbmd0aCAmJiAoZS5wYW5lbHMgPSBlLnBhbmVscy5hZGQobykpLCBjICYmIGwuZGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIiwgYyksIGwuYXR0cih7ICJhcmlhLWNvbnRyb2xzIjogYS5zdWJzdHJpbmcoMSksICJhcmlhLWxhYmVsbGVkYnkiOiBoIH0pLCBvLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsIGgpIH0pLCB0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuYXR0cigicm9sZSIsICJ0YWJwYW5lbCIpIH0sIF9nZXRMaXN0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnRhYmxpc3QgfHwgdGhpcy5lbGVtZW50LmZpbmQoIm9sLHVsIikuZXEoMCkgfSwgX2NyZWF0ZVBhbmVsOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdCgiPGRpdj4iKS5hdHRyKCJpZCIsIGUpLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5kYXRhKCJ1aS10YWJzLWRlc3Ryb3kiLCAhMCkgfSwgX3NldHVwRGlzYWJsZWQ6IGZ1bmN0aW9uIChlKSB7IHQuaXNBcnJheShlKSAmJiAoZS5sZW5ndGggPyBlLmxlbmd0aCA9PT0gdGhpcy5hbmNob3JzLmxlbmd0aCAmJiAoZSA9ICEwKSA6IGUgPSAhMSk7IGZvciAodmFyIGksIHMgPSAwOyBpID0gdGhpcy50YWJzW3NdOyBzKyspIGUgPT09ICEwIHx8IC0xICE9PSB0LmluQXJyYXkocywgZSkgPyB0KGkpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLmF0dHIoImFyaWEtZGlzYWJsZWQiLCAidHJ1ZSIpIDogdChpKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIik7IHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9IGUgfSwgX3NldHVwRXZlbnRzOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHsgY2xpY2s6IGZ1bmN0aW9uICh0KSB7IHQucHJldmVudERlZmF1bHQoKSB9IH07IGUgJiYgdC5lYWNoKGUuc3BsaXQoIiAiKSwgZnVuY3Rpb24gKHQsIGUpIHsgaVtlXSA9ICJfZXZlbnRIYW5kbGVyIiB9KSwgdGhpcy5fb2ZmKHRoaXMuYW5jaG9ycy5hZGQodGhpcy50YWJzKS5hZGQodGhpcy5wYW5lbHMpKSwgdGhpcy5fb24odGhpcy5hbmNob3JzLCBpKSwgdGhpcy5fb24odGhpcy50YWJzLCB7IGtleWRvd246ICJfdGFiS2V5ZG93biIgfSksIHRoaXMuX29uKHRoaXMucGFuZWxzLCB7IGtleWRvd246ICJfcGFuZWxLZXlkb3duIiB9KSwgdGhpcy5fZm9jdXNhYmxlKHRoaXMudGFicyksIHRoaXMuX2hvdmVyYWJsZSh0aGlzLnRhYnMpIH0sIF9zZXR1cEhlaWdodFN0eWxlOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSwgcyA9IHRoaXMuZWxlbWVudC5wYXJlbnQoKTsgImZpbGwiID09PSBlID8gKGkgPSBzLmhlaWdodCgpLCBpIC09IHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpIC0gdGhpcy5lbGVtZW50LmhlaWdodCgpLCB0aGlzLmVsZW1lbnQuc2libGluZ3MoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKSwgcyA9IGUuY3NzKCJwb3NpdGlvbiIpOyAiYWJzb2x1dGUiICE9PSBzICYmICJmaXhlZCIgIT09IHMgJiYgKGkgLT0gZS5vdXRlckhlaWdodCghMCkpIH0pLCB0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24gKCkgeyBpIC09IHQodGhpcykub3V0ZXJIZWlnaHQoITApIH0pLCB0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uICgpIHsgdCh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCwgaSAtIHQodGhpcykuaW5uZXJIZWlnaHQoKSArIHQodGhpcykuaGVpZ2h0KCkpKSB9KS5jc3MoIm92ZXJmbG93IiwgImF1dG8iKSkgOiAiYXV0byIgPT09IGUgJiYgKGkgPSAwLCB0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uICgpIHsgaSA9IE1hdGgubWF4KGksIHQodGhpcykuaGVpZ2h0KCIiKS5oZWlnaHQoKSkgfSkuaGVpZ2h0KGkpKSB9LCBfZXZlbnRIYW5kbGVyOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMub3B0aW9ucywgcyA9IHRoaXMuYWN0aXZlLCBuID0gdChlLmN1cnJlbnRUYXJnZXQpLCBhID0gbi5jbG9zZXN0KCJsaSIpLCBvID0gYVswXSA9PT0gc1swXSwgciA9IG8gJiYgaS5jb2xsYXBzaWJsZSwgaCA9IHIgPyB0KCkgOiB0aGlzLl9nZXRQYW5lbEZvclRhYihhKSwgbCA9IHMubGVuZ3RoID8gdGhpcy5fZ2V0UGFuZWxGb3JUYWIocykgOiB0KCksIGMgPSB7IG9sZFRhYjogcywgb2xkUGFuZWw6IGwsIG5ld1RhYjogciA/IHQoKSA6IGEsIG5ld1BhbmVsOiBoIH07IGUucHJldmVudERlZmF1bHQoKSwgYS5oYXNDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSB8fCBhLmhhc0NsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSB8fCB0aGlzLnJ1bm5pbmcgfHwgbyAmJiAhaS5jb2xsYXBzaWJsZSB8fCB0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsIGUsIGMpID09PSAhMSB8fCAoaS5hY3RpdmUgPSByID8gITEgOiB0aGlzLnRhYnMuaW5kZXgoYSksIHRoaXMuYWN0aXZlID0gbyA/IHQoKSA6IGEsIHRoaXMueGhyICYmIHRoaXMueGhyLmFib3J0KCksIGwubGVuZ3RoIHx8IGgubGVuZ3RoIHx8IHQuZXJyb3IoImpRdWVyeSBVSSBUYWJzOiBNaXNtYXRjaGluZyBmcmFnbWVudCBpZGVudGlmaWVyLiIpLCBoLmxlbmd0aCAmJiB0aGlzLmxvYWQodGhpcy50YWJzLmluZGV4KGEpLCBlKSwgdGhpcy5fdG9nZ2xlKGUsIGMpKSB9LCBfdG9nZ2xlOiBmdW5jdGlvbiAoZSwgaSkgeyBmdW5jdGlvbiBzKCkgeyBhLnJ1bm5pbmcgPSAhMSwgYS5fdHJpZ2dlcigiYWN0aXZhdGUiLCBlLCBpKSB9IGZ1bmN0aW9uIG4oKSB7IGkubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLCBvLmxlbmd0aCAmJiBhLm9wdGlvbnMuc2hvdyA/IGEuX3Nob3cobywgYS5vcHRpb25zLnNob3csIHMpIDogKG8uc2hvdygpLCBzKCkpIH0gdmFyIGEgPSB0aGlzLCBvID0gaS5uZXdQYW5lbCwgciA9IGkub2xkUGFuZWw7IHRoaXMucnVubmluZyA9ICEwLCByLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMuaGlkZSA/IHRoaXMuX2hpZGUociwgdGhpcy5vcHRpb25zLmhpZGUsIGZ1bmN0aW9uICgpIHsgaS5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksIG4oKSB9KSA6IChpLm9sZFRhYi5jbG9zZXN0KCJsaSIpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSwgci5oaWRlKCksIG4oKSksIHIuYXR0cih7ICJhcmlhLWV4cGFuZGVkIjogImZhbHNlIiwgImFyaWEtaGlkZGVuIjogInRydWUiIH0pLCBpLm9sZFRhYi5hdHRyKCJhcmlhLXNlbGVjdGVkIiwgImZhbHNlIiksIG8ubGVuZ3RoICYmIHIubGVuZ3RoID8gaS5vbGRUYWIuYXR0cigidGFiSW5kZXgiLCAtMSkgOiBvLmxlbmd0aCAmJiB0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDAgPT09IHQodGhpcykuYXR0cigidGFiSW5kZXgiKSB9KS5hdHRyKCJ0YWJJbmRleCIsIC0xKSwgby5hdHRyKHsgImFyaWEtZXhwYW5kZWQiOiAidHJ1ZSIsICJhcmlhLWhpZGRlbiI6ICJmYWxzZSIgfSksIGkubmV3VGFiLmF0dHIoeyAiYXJpYS1zZWxlY3RlZCI6ICJ0cnVlIiwgdGFiSW5kZXg6IDAgfSkgfSwgX2FjdGl2YXRlOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSwgcyA9IHRoaXMuX2ZpbmRBY3RpdmUoZSk7IHNbMF0gIT09IHRoaXMuYWN0aXZlWzBdICYmIChzLmxlbmd0aCB8fCAocyA9IHRoaXMuYWN0aXZlKSwgaSA9IHMuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0sIHRoaXMuX2V2ZW50SGFuZGxlcih7IHRhcmdldDogaSwgY3VycmVudFRhcmdldDogaSwgcHJldmVudERlZmF1bHQ6IHQubm9vcCB9KSkgfSwgX2ZpbmRBY3RpdmU6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID09PSAhMSA/IHQoKSA6IHRoaXMudGFicy5lcShlKSB9LCBfZ2V0SW5kZXg6IGZ1bmN0aW9uICh0KSB7IHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgdCAmJiAodCA9IHRoaXMuYW5jaG9ycy5pbmRleCh0aGlzLmFuY2hvcnMuZmlsdGVyKCJbaHJlZiQ9JyIgKyB0ICsgIiddIikpKSwgdCB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLnhociAmJiB0aGlzLnhoci5hYm9ydCgpLCB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZSIpLCB0aGlzLnRhYmxpc3QucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikucmVtb3ZlQXR0cigicm9sZSIpLCB0aGlzLmFuY2hvcnMucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYW5jaG9yIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlVW5pcXVlSWQoKSwgdGhpcy50YWJzLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbiAoKSB7IHQuZGF0YSh0aGlzLCAidWktdGFicy1kZXN0cm95IikgPyB0KHRoaXMpLnJlbW92ZSgpIDogdCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1zdGF0ZS1hY3RpdmUgdWktc3RhdGUtZGlzYWJsZWQgdWktY29ybmVyLXRvcCB1aS1jb3JuZXItYm90dG9tIHVpLXdpZGdldC1jb250ZW50IHVpLXRhYnMtYWN0aXZlIHVpLXRhYnMtcGFuZWwiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoImFyaWEtbGl2ZSIpLnJlbW92ZUF0dHIoImFyaWEtYnVzeSIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJyb2xlIikgfSksIHRoaXMudGFicy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLCBpID0gZS5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTsgaSA/IGUuYXR0cigiYXJpYS1jb250cm9scyIsIGkpLnJlbW92ZURhdGEoInVpLXRhYnMtYXJpYS1jb250cm9scyIpIDogZS5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIikgfSksIHRoaXMucGFuZWxzLnNob3coKSwgImNvbnRlbnQiICE9PSB0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUgJiYgdGhpcy5wYW5lbHMuY3NzKCJoZWlnaHQiLCAiIikgfSwgZW5hYmxlOiBmdW5jdGlvbiAoaSkgeyB2YXIgcyA9IHRoaXMub3B0aW9ucy5kaXNhYmxlZDsgcyAhPT0gITEgJiYgKGkgPT09IGUgPyBzID0gITEgOiAoaSA9IHRoaXMuX2dldEluZGV4KGkpLCBzID0gdC5pc0FycmF5KHMpID8gdC5tYXAocywgZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQgIT09IGkgPyB0IDogbnVsbCB9KSA6IHQubWFwKHRoaXMudGFicywgZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIGUgIT09IGkgPyBlIDogbnVsbCB9KSksIHRoaXMuX3NldHVwRGlzYWJsZWQocykpIH0sIGRpc2FibGU6IGZ1bmN0aW9uIChpKSB7IHZhciBzID0gdGhpcy5vcHRpb25zLmRpc2FibGVkOyBpZiAocyAhPT0gITApIHsgaWYgKGkgPT09IGUpIHMgPSAhMDsgZWxzZSB7IGlmIChpID0gdGhpcy5fZ2V0SW5kZXgoaSksIC0xICE9PSB0LmluQXJyYXkoaSwgcykpIHJldHVybjsgcyA9IHQuaXNBcnJheShzKSA/IHQubWVyZ2UoW2ldLCBzKS5zb3J0KCkgOiBbaV0gfSB0aGlzLl9zZXR1cERpc2FibGVkKHMpIH0gfSwgbG9hZDogZnVuY3Rpb24gKGUsIGkpIHsgZSA9IHRoaXMuX2dldEluZGV4KGUpOyB2YXIgbiA9IHRoaXMsIGEgPSB0aGlzLnRhYnMuZXEoZSksIG8gPSBhLmZpbmQoIi51aS10YWJzLWFuY2hvciIpLCByID0gdGhpcy5fZ2V0UGFuZWxGb3JUYWIoYSksIGggPSB7IHRhYjogYSwgcGFuZWw6IHIgfTsgcyhvWzBdKSB8fCAodGhpcy54aHIgPSB0LmFqYXgodGhpcy5fYWpheFNldHRpbmdzKG8sIGksIGgpKSwgdGhpcy54aHIgJiYgImNhbmNlbGVkIiAhPT0gdGhpcy54aHIuc3RhdHVzVGV4dCAmJiAoYS5hZGRDbGFzcygidWktdGFicy1sb2FkaW5nIiksIHIuYXR0cigiYXJpYS1idXN5IiwgInRydWUiKSwgdGhpcy54aHIuc3VjY2VzcyhmdW5jdGlvbiAodCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgci5odG1sKHQpLCBuLl90cmlnZ2VyKCJsb2FkIiwgaSwgaCkgfSwgMSkgfSkuY29tcGxldGUoZnVuY3Rpb24gKHQsIGUpIHsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICJhYm9ydCIgPT09IGUgJiYgbi5wYW5lbHMuc3RvcCghMSwgITApLCBhLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSwgci5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKSwgdCA9PT0gbi54aHIgJiYgZGVsZXRlIG4ueGhyIH0sIDEpIH0pKSkgfSwgX2FqYXhTZXR0aW5nczogZnVuY3Rpb24gKGUsIGksIHMpIHsgdmFyIG4gPSB0aGlzOyByZXR1cm4geyB1cmw6IGUuYXR0cigiaHJlZiIpLCBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgYSkgeyByZXR1cm4gbi5fdHJpZ2dlcigiYmVmb3JlTG9hZCIsIGksIHQuZXh0ZW5kKHsganFYSFI6IGUsIGFqYXhTZXR0aW5nczogYSB9LCBzKSkgfSB9IH0sIF9nZXRQYW5lbEZvclRhYjogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0KGUpLmF0dHIoImFyaWEtY29udHJvbHMiKTsgcmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoIiMiICsgaSkpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IGZ1bmN0aW9uIGUoZSwgaSkgeyB2YXIgcyA9IChlLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKSB8fCAiIikuc3BsaXQoL1xzKy8pOyBzLnB1c2goaSksIGUuZGF0YSgidWktdG9vbHRpcC1pZCIsIGkpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLCB0LnRyaW0ocy5qb2luKCIgIikpKSB9IGZ1bmN0aW9uIGkoZSkgeyB2YXIgaSA9IGUuZGF0YSgidWktdG9vbHRpcC1pZCIpLCBzID0gKGUuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpIHx8ICIiKS5zcGxpdCgvXHMrLyksIG4gPSB0LmluQXJyYXkoaSwgcyk7IC0xICE9PSBuICYmIHMuc3BsaWNlKG4sIDEpLCBlLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtaWQiKSwgcyA9IHQudHJpbShzLmpvaW4oIiAiKSksIHMgPyBlLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLCBzKSA6IGUucmVtb3ZlQXR0cigiYXJpYS1kZXNjcmliZWRieSIpIH0gdmFyIHMgPSAwOyB0LndpZGdldCgidWkudG9vbHRpcCIsIHsgdmVyc2lvbjogIjEuMTAuNCIsIG9wdGlvbnM6IHsgY29udGVudDogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcykuYXR0cigidGl0bGUiKSB8fCAiIjsgcmV0dXJuIHQoIjxhPiIpLnRleHQoZSkuaHRtbCgpIH0sIGhpZGU6ICEwLCBpdGVtczogIlt0aXRsZV06bm90KFtkaXNhYmxlZF0pIiwgcG9zaXRpb246IHsgbXk6ICJsZWZ0IHRvcCsxNSIsIGF0OiAibGVmdCBib3R0b20iLCBjb2xsaXNpb246ICJmbGlwZml0IGZsaXAiIH0sIHNob3c6ICEwLCB0b29sdGlwQ2xhc3M6IG51bGwsIHRyYWNrOiAhMSwgY2xvc2U6IG51bGwsIG9wZW46IG51bGwgfSwgX2NyZWF0ZTogZnVuY3Rpb24gKCkgeyB0aGlzLl9vbih7IG1vdXNlb3ZlcjogIm9wZW4iLCBmb2N1c2luOiAib3BlbiIgfSksIHRoaXMudG9vbHRpcHMgPSB7fSwgdGhpcy5wYXJlbnRzID0ge30sIHRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiB0aGlzLl9kaXNhYmxlKCkgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMgPSB0aGlzOyByZXR1cm4gImRpc2FibGVkIiA9PT0gZSA/ICh0aGlzW2kgPyAiX2Rpc2FibGUiIDogIl9lbmFibGUiXSgpLCB0aGlzLm9wdGlvbnNbZV0gPSBpLCB2b2lkIDApIDogKHRoaXMuX3N1cGVyKGUsIGkpLCAiY29udGVudCIgPT09IGUgJiYgdC5lYWNoKHRoaXMudG9vbHRpcHMsIGZ1bmN0aW9uICh0LCBlKSB7IHMuX3VwZGF0ZUNvbnRlbnQoZSkgfSksIHZvaWQgMCkgfSwgX2Rpc2FibGU6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzOyB0LmVhY2godGhpcy50b29sdGlwcywgZnVuY3Rpb24gKGksIHMpIHsgdmFyIG4gPSB0LkV2ZW50KCJibHVyIik7IG4udGFyZ2V0ID0gbi5jdXJyZW50VGFyZ2V0ID0gc1swXSwgZS5jbG9zZShuLCAhMCkgfSksIHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcyk7IGUuaXMoIlt0aXRsZV0iKSAmJiBlLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLCBlLmF0dHIoInRpdGxlIikpLmF0dHIoInRpdGxlIiwgIiIpIH0pIH0sIF9lbmFibGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKTsgZS5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikgJiYgZS5hdHRyKCJ0aXRsZSIsIGUuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSB9KSB9LCBvcGVuOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMsIHMgPSB0KGUgPyBlLnRhcmdldCA6IHRoaXMuZWxlbWVudCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuaXRlbXMpOyBzLmxlbmd0aCAmJiAhcy5kYXRhKCJ1aS10b29sdGlwLWlkIikgJiYgKHMuYXR0cigidGl0bGUiKSAmJiBzLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLCBzLmF0dHIoInRpdGxlIikpLCBzLmRhdGEoInVpLXRvb2x0aXAtb3BlbiIsICEwKSwgZSAmJiAibW91c2VvdmVyIiA9PT0gZS50eXBlICYmIHMucGFyZW50cygpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSwgcyA9IHQodGhpcyk7IHMuZGF0YSgidWktdG9vbHRpcC1vcGVuIikgJiYgKGUgPSB0LkV2ZW50KCJibHVyIiksIGUudGFyZ2V0ID0gZS5jdXJyZW50VGFyZ2V0ID0gdGhpcywgaS5jbG9zZShlLCAhMCkpLCBzLmF0dHIoInRpdGxlIikgJiYgKHMudW5pcXVlSWQoKSwgaS5wYXJlbnRzW3RoaXMuaWRdID0geyBlbGVtZW50OiB0aGlzLCB0aXRsZTogcy5hdHRyKCJ0aXRsZSIpIH0sIHMuYXR0cigidGl0bGUiLCAiIikpIH0pLCB0aGlzLl91cGRhdGVDb250ZW50KHMsIGUpKSB9LCBfdXBkYXRlQ29udGVudDogZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGksIHMgPSB0aGlzLm9wdGlvbnMuY29udGVudCwgbiA9IHRoaXMsIG8gPSBlID8gZS50eXBlIDogbnVsbDsgcmV0dXJuICJzdHJpbmciID09IHR5cGVvZiBzID8gdGhpcy5fb3BlbihlLCB0LCBzKSA6IChpID0gcy5jYWxsKHRbMF0sIGZ1bmN0aW9uIChpKSB7IHQuZGF0YSgidWktdG9vbHRpcC1vcGVuIikgJiYgbi5fZGVsYXkoZnVuY3Rpb24gKCkgeyBlICYmIChlLnR5cGUgPSBvKSwgdGhpcy5fb3BlbihlLCB0LCBpKSB9KSB9KSwgaSAmJiB0aGlzLl9vcGVuKGUsIHQsIGkpLCB2b2lkIDApIH0sIF9vcGVuOiBmdW5jdGlvbiAoaSwgcywgbikgeyBmdW5jdGlvbiBvKHQpIHsgbC5vZiA9IHQsIGEuaXMoIjpoaWRkZW4iKSB8fCBhLnBvc2l0aW9uKGwpIH0gdmFyIGEsIHIsIGgsIGwgPSB0LmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uKTsgaWYgKG4pIHsgaWYgKGEgPSB0aGlzLl9maW5kKHMpLCBhLmxlbmd0aCkgcmV0dXJuIGEuZmluZCgiLnVpLXRvb2x0aXAtY29udGVudCIpLmh0bWwobiksIHZvaWQgMDsgcy5pcygiW3RpdGxlXSIpICYmIChpICYmICJtb3VzZW92ZXIiID09PSBpLnR5cGUgPyBzLmF0dHIoInRpdGxlIiwgIiIpIDogcy5yZW1vdmVBdHRyKCJ0aXRsZSIpKSwgYSA9IHRoaXMuX3Rvb2x0aXAocyksIGUocywgYS5hdHRyKCJpZCIpKSwgYS5maW5kKCIudWktdG9vbHRpcC1jb250ZW50IikuaHRtbChuKSwgdGhpcy5vcHRpb25zLnRyYWNrICYmIGkgJiYgL15tb3VzZS8udGVzdChpLnR5cGUpID8gKHRoaXMuX29uKHRoaXMuZG9jdW1lbnQsIHsgbW91c2Vtb3ZlOiBvIH0pLCBvKGkpKSA6IGEucG9zaXRpb24odC5leHRlbmQoeyBvZjogcyB9LCB0aGlzLm9wdGlvbnMucG9zaXRpb24pKSwgYS5oaWRlKCksIHRoaXMuX3Nob3coYSwgdGhpcy5vcHRpb25zLnNob3cpLCB0aGlzLm9wdGlvbnMuc2hvdyAmJiB0aGlzLm9wdGlvbnMuc2hvdy5kZWxheSAmJiAoaCA9IHRoaXMuZGVsYXllZFNob3cgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7IGEuaXMoIjp2aXNpYmxlIikgJiYgKG8obC5vZiksIGNsZWFySW50ZXJ2YWwoaCkpIH0sIHQuZnguaW50ZXJ2YWwpKSwgdGhpcy5fdHJpZ2dlcigib3BlbiIsIGksIHsgdG9vbHRpcDogYSB9KSwgciA9IHsga2V5dXA6IGZ1bmN0aW9uIChlKSB7IGlmIChlLmtleUNvZGUgPT09IHQudWkua2V5Q29kZS5FU0NBUEUpIHsgdmFyIGkgPSB0LkV2ZW50KGUpOyBpLmN1cnJlbnRUYXJnZXQgPSBzWzBdLCB0aGlzLmNsb3NlKGksICEwKSB9IH0sIHJlbW92ZTogZnVuY3Rpb24gKCkgeyB0aGlzLl9yZW1vdmVUb29sdGlwKGEpIH0gfSwgaSAmJiAibW91c2VvdmVyIiAhPT0gaS50eXBlIHx8IChyLm1vdXNlbGVhdmUgPSAiY2xvc2UiKSwgaSAmJiAiZm9jdXNpbiIgIT09IGkudHlwZSB8fCAoci5mb2N1c291dCA9ICJjbG9zZSIpLCB0aGlzLl9vbighMCwgcywgcikgfSB9LCBjbG9zZTogZnVuY3Rpb24gKGUpIHsgdmFyIHMgPSB0aGlzLCBuID0gdChlID8gZS5jdXJyZW50VGFyZ2V0IDogdGhpcy5lbGVtZW50KSwgbyA9IHRoaXMuX2ZpbmQobik7IHRoaXMuY2xvc2luZyB8fCAoY2xlYXJJbnRlcnZhbCh0aGlzLmRlbGF5ZWRTaG93KSwgbi5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikgJiYgbi5hdHRyKCJ0aXRsZSIsIG4uZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSwgaShuKSwgby5zdG9wKCEwKSwgdGhpcy5faGlkZShvLCB0aGlzLm9wdGlvbnMuaGlkZSwgZnVuY3Rpb24gKCkgeyBzLl9yZW1vdmVUb29sdGlwKHQodGhpcykpIH0pLCBuLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtb3BlbiIpLCB0aGlzLl9vZmYobiwgIm1vdXNlbGVhdmUgZm9jdXNvdXQga2V5dXAiKSwgblswXSAhPT0gdGhpcy5lbGVtZW50WzBdICYmIHRoaXMuX29mZihuLCAicmVtb3ZlIiksIHRoaXMuX29mZih0aGlzLmRvY3VtZW50LCAibW91c2Vtb3ZlIiksIGUgJiYgIm1vdXNlbGVhdmUiID09PSBlLnR5cGUgJiYgdC5lYWNoKHRoaXMucGFyZW50cywgZnVuY3Rpb24gKGUsIGkpIHsgdChpLmVsZW1lbnQpLmF0dHIoInRpdGxlIiwgaS50aXRsZSksIGRlbGV0ZSBzLnBhcmVudHNbZV0gfSksIHRoaXMuY2xvc2luZyA9ICEwLCB0aGlzLl90cmlnZ2VyKCJjbG9zZSIsIGUsIHsgdG9vbHRpcDogbyB9KSwgdGhpcy5jbG9zaW5nID0gITEpIH0sIF90b29sdGlwOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9ICJ1aS10b29sdGlwLSIgKyBzKyssIG4gPSB0KCI8ZGl2PiIpLmF0dHIoeyBpZDogaSwgcm9sZTogInRvb2x0aXAiIH0pLmFkZENsYXNzKCJ1aS10b29sdGlwIHVpLXdpZGdldCB1aS1jb3JuZXItYWxsIHVpLXdpZGdldC1jb250ZW50ICIgKyAodGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzcyB8fCAiIikpOyByZXR1cm4gdCgiPGRpdj4iKS5hZGRDbGFzcygidWktdG9vbHRpcC1jb250ZW50IikuYXBwZW5kVG8obiksIG4uYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSwgdGhpcy50b29sdGlwc1tpXSA9IGUsIG4gfSwgX2ZpbmQ6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gZS5kYXRhKCJ1aS10b29sdGlwLWlkIik7IHJldHVybiBpID8gdCgiIyIgKyBpKSA6IHQoKSB9LCBfcmVtb3ZlVG9vbHRpcDogZnVuY3Rpb24gKHQpIHsgdC5yZW1vdmUoKSwgZGVsZXRlIHRoaXMudG9vbHRpcHNbdC5hdHRyKCJpZCIpXSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXM7IHQuZWFjaCh0aGlzLnRvb2x0aXBzLCBmdW5jdGlvbiAoaSwgcykgeyB2YXIgbiA9IHQuRXZlbnQoImJsdXIiKTsgbi50YXJnZXQgPSBuLmN1cnJlbnRUYXJnZXQgPSBzWzBdLCBlLmNsb3NlKG4sICEwKSwgdCgiIyIgKyBpKS5yZW1vdmUoKSwgcy5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikgJiYgKHMuYXR0cigidGl0bGUiLCBzLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSksIHMucmVtb3ZlRGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSB9KSB9IH0pIH0pKGpRdWVyeSk7DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovKgogKiBGaWxlOiAgICAgICAganF1ZXJ5LmRhdGFUYWJsZXMuanMKICogVmVyc2lvbjogICAgIDEuOC4xCiAqIERlc2NyaXB0aW9uOiBQYWdpbmF0ZSwgc2VhcmNoIGFuZCBzb3J0IEhUTUwgdGFibGVzCiAqIEF1dGhvcjogICAgICBBbGxhbiBKYXJkaW5lICh3d3cuc3ByeW1lZGlhLmNvLnVrKQogKiBDcmVhdGVkOiAgICAgMjgvMy8yMDA4CiAqIExhbmd1YWdlOiAgICBKYXZhc2NyaXB0CiAqIExpY2Vuc2U6ICAgICBHUEwgdjIgb3IgQlNEIDMgcG9pbnQgc3R5bGUKICogUHJvamVjdDogICAgIE10YWFsYQogKiBDb250YWN0OiAgICAgYWxsYW4uamFyZGluZUBzcHJ5bWVkaWEuY28udWsKICogCiAqIENvcHlyaWdodCAyMDA4LTIwMTEgQWxsYW4gSmFyZGluZSwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCB1bmRlciBlaXRoZXIgdGhlIEdQTCB2MiBsaWNlbnNlIG9yIGEKICogQlNEIHN0eWxlIGxpY2Vuc2UsIGFzIHN1cHBsaWVkIHdpdGggdGhpcyBzb2Z0d2FyZS4KICogCiAqIFRoaXMgc291cmNlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAKICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KICogCiAqIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0bzogaHR0cDovL3d3dy5kYXRhdGFibGVzLm5ldAogKi8KCi8qCiAqIFdoZW4gY29uc2lkZXJpbmcganNMaW50LCB3ZSBuZWVkIHRvIGFsbG93IGV2YWwoKSBhcyBpdCBpdCBpcyB1c2VkIGZvciByZWFkaW5nIGNvb2tpZXMKICovCi8qanNsaW50IGV2aWw6IHRydWUsIHVuZGVmOiB0cnVlLCBicm93c2VyOiB0cnVlICovCi8qZ2xvYmFscyAkLCBqUXVlcnksX2ZuRXh0ZXJuQXBpRnVuYyxfZm5Jbml0YWxpc2UsX2ZuSW5pdENvbXBsZXRlLF9mbkxhbmd1YWdlUHJvY2VzcyxfZm5BZGRDb2x1bW4sX2ZuQ29sdW1uT3B0aW9ucyxfZm5BZGREYXRhLF9mbkNyZWF0ZVRyLF9mbkdhdGhlckRhdGEsX2ZuQnVpbGRIZWFkLF9mbkRyYXdIZWFkLF9mbkRyYXcsX2ZuUmVEcmF3LF9mbkFqYXhVcGRhdGUsX2ZuQWpheFVwZGF0ZURyYXcsX2ZuQWRkT3B0aW9uc0h0bWwsX2ZuRmVhdHVyZUh0bWxUYWJsZSxfZm5TY3JvbGxEcmF3LF9mbkFqdXN0Q29sdW1uU2l6aW5nLF9mbkZlYXR1cmVIdG1sRmlsdGVyLF9mbkZpbHRlckNvbXBsZXRlLF9mbkZpbHRlckN1c3RvbSxfZm5GaWx0ZXJDb2x1bW4sX2ZuRmlsdGVyLF9mbkJ1aWxkU2VhcmNoQXJyYXksX2ZuQnVpbGRTZWFyY2hSb3csX2ZuRmlsdGVyQ3JlYXRlU2VhcmNoLF9mbkRhdGFUb1NlYXJjaCxfZm5Tb3J0LF9mblNvcnRBdHRhY2hMaXN0ZW5lcixfZm5Tb3J0aW5nQ2xhc3NlcyxfZm5GZWF0dXJlSHRtbFBhZ2luYXRlLF9mblBhZ2VDaGFuZ2UsX2ZuRmVhdHVyZUh0bWxJbmZvLF9mblVwZGF0ZUluZm8sX2ZuRmVhdHVyZUh0bWxMZW5ndGgsX2ZuRmVhdHVyZUh0bWxQcm9jZXNzaW5nLF9mblByb2Nlc3NpbmdEaXNwbGF5LF9mblZpc2libGVUb0NvbHVtbkluZGV4LF9mbkNvbHVtbkluZGV4VG9WaXNpYmxlLF9mbk5vZGVUb0RhdGFJbmRleCxfZm5WaXNibGVDb2x1bW5zLF9mbkNhbGN1bGF0ZUVuZCxfZm5Db252ZXJ0VG9XaWR0aCxfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMsX2ZuU2Nyb2xsaW5nV2lkdGhBZGp1c3QsX2ZuR2V0V2lkZXN0Tm9kZSxfZm5HZXRNYXhMZW5TdHJpbmcsX2ZuU3RyaW5nVG9Dc3MsX2ZuQXJyYXlDbXAsX2ZuRGV0ZWN0VHlwZSxfZm5TZXR0aW5nc0Zyb21Ob2RlLF9mbkdldERhdGFNYXN0ZXIsX2ZuR2V0VHJOb2RlcyxfZm5HZXRUZE5vZGVzLF9mbkVzY2FwZVJlZ2V4LF9mbkRlbGV0ZUluZGV4LF9mblJlT3JkZXJJbmRleCxfZm5Db2x1bW5PcmRlcmluZyxfZm5Mb2csX2ZuQ2xlYXJUYWJsZSxfZm5TYXZlU3RhdGUsX2ZuTG9hZFN0YXRlLF9mbkNyZWF0ZUNvb2tpZSxfZm5SZWFkQ29va2llLF9mbkRldGVjdEhlYWRlcixfZm5HZXRVbmlxdWVUaHMsX2ZuU2Nyb2xsQmFyV2lkdGgsX2ZuQXBwbHlUb0NoaWxkcmVuLF9mbk1hcCxfZm5HZXRSb3dEYXRhLF9mbkdldENlbGxEYXRhLF9mblNldENlbGxEYXRhLF9mbkdldE9iamVjdERhdGFGbixfZm5TZXRPYmplY3REYXRhRm4qLwoKKGZ1bmN0aW9uKCQsIHdpbmRvdywgZG9jdW1lbnQpIHsKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIFNlY3Rpb24gLSBEYXRhVGFibGVzIHZhcmlhYmxlcwoJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCQoJLyoKCSAqIFZhcmlhYmxlOiBkYXRhVGFibGVTZXR0aW5ncwoJICogUHVycG9zZTogIFN0b3JlIHRoZSBzZXR0aW5ncyBmb3IgZWFjaCBkYXRhVGFibGVzIGluc3RhbmNlCgkgKiBTY29wZTogICAgalF1ZXJ5LmZuCgkgKi8KCSQuZm4uZGF0YVRhYmxlU2V0dGluZ3MgPSBbXTsKCXZhciBfYW9TZXR0aW5ncyA9ICQuZm4uZGF0YVRhYmxlU2V0dGluZ3M7IC8qIFNob3J0IHJlZmVyZW5jZSBmb3IgZmFzdCBpbnRlcm5hbCBsb29rdXAgKi8KCQoJLyoKCSAqIFZhcmlhYmxlOiBkYXRhVGFibGVFeHQKCSAqIFB1cnBvc2U6ICBDb250YWluZXIgZm9yIGN1c3RvbWlzYWJsZSBwYXJ0cyBvZiBEYXRhVGFibGVzCgkgKiBTY29wZTogICAgalF1ZXJ5LmZuCgkgKi8KCSQuZm4uZGF0YVRhYmxlRXh0ID0ge307Cgl2YXIgX29FeHQgPSAkLmZuLmRhdGFUYWJsZUV4dDsKCQoJCgkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBTZWN0aW9uIC0gRGF0YVRhYmxlcyBleHRlbnNpYmxlIG9iamVjdHMKCSAqIAoJICogVGhlIF9vRXh0IG9iamVjdCBpcyB1c2VkIHRvIHByb3ZpZGUgYW4gYXJlYSB3aGVyZSB1c2VyIGRmaW5lZCBwbHVnaW5zIGNhbiBiZSAKCSAqIGFkZGVkIHRvIERhdGFUYWJsZXMuIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSB1c2VkOgoJICogICBvQXBpIC0gUGx1Zy1pbiBBUEkgZnVuY3Rpb25zCgkgKiAgIGFUeXBlcyAtIEF1dG8tZGV0ZWN0aW9uIG9mIHR5cGVzCgkgKiAgIG9Tb3J0IC0gU29ydGluZyBmdW5jdGlvbnMgdXNlZCBieSBEYXRhVGFibGVzIChiYXNlZCBvbiB0aGUgdHlwZSkKCSAqICAgb1BhZ2luYXRpb24gLSBQYWdpbmF0aW9uIGZ1bmN0aW9ucyBmb3IgZGlmZmVyZW50IGlucHV0IHN0eWxlcwoJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCQoJLyoKCSAqIFZhcmlhYmxlOiBzVmVyc2lvbgoJICogUHVycG9zZTogIFZlcnNpb24gc3RyaW5nIGZvciBwbHVnLWlucyB0byBjaGVjayBjb21wYXRpYmlsaXR5CgkgKiBTY29wZTogICAgalF1ZXJ5LmZuLmRhdGFUYWJsZUV4dAoJICogTm90ZXM6ICAgIEFsbG93ZWQgZm9ybWF0IGlzIGEuYi5jLmQuZSB3aGVyZToKCSAqICAgYTppbnQsIGI6aW50LCBjOmludCwgZDpzdHJpbmcoZGV2fGJldGEpLCBlOmludC4gZCBhbmQgZSBhcmUgb3B0aW9uYWwKCSAqLwoJX29FeHQuc1ZlcnNpb24gPSAiMS44LjEiOwoJCgkvKgoJICogVmFyaWFibGU6IHNFcnJNb2RlCgkgKiBQdXJwb3NlOiAgSG93IHNob3VsZCBEYXRhVGFibGVzIHJlcG9ydCBhbiBlcnJvci4gQ2FuIHRha2UgdGhlIHZhbHVlICdhbGVydCcgb3IgJ3Rocm93JwoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqLwoJX29FeHQuc0Vyck1vZGUgPSAiYWxlcnQiOwoJCgkvKgoJICogVmFyaWFibGU6IGlBcGlJbmRleAoJICogUHVycG9zZTogIEluZGV4IGZvciB3aGF0ICd0aGlzJyBpbmRleCBBUEkgZnVuY3Rpb25zIHNob3VsZCB1c2UKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKi8KCV9vRXh0LmlBcGlJbmRleCA9IDA7CgkKCS8qCgkgKiBWYXJpYWJsZTogb0FwaQoJICogUHVycG9zZTogIENvbnRhaW5lciBmb3IgcGx1Z2luIEFQSSBmdW5jdGlvbnMKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKi8KCV9vRXh0Lm9BcGkgPSB7IH07CgkKCS8qCgkgKiBWYXJpYWJsZTogYUZpbHRlcmluZwoJICogUHVycG9zZTogIENvbnRhaW5lciBmb3IgcGx1Z2luIGZpbHRlcmluZyBmdW5jdGlvbnMKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKi8KCV9vRXh0LmFmbkZpbHRlcmluZyA9IFsgXTsKCQoJLyoKCSAqIFZhcmlhYmxlOiBhb0ZlYXR1cmVzCgkgKiBQdXJwb3NlOiAgQ29udGFpbmVyIGZvciBwbHVnaW4gZnVuY3Rpb24gZnVuY3Rpb25zCgkgKiBTY29wZTogICAgalF1ZXJ5LmZuLmRhdGFUYWJsZUV4dAoJICogTm90ZXM6ICAgIEFycmF5IG9mIG9iamVjdHMgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CgkgKiAgIGZuSW5pdDogRnVuY3Rpb24gZm9yIGluaXRpYWxpc2F0aW9uIG9mIEZlYXR1cmUuIFRha2VzIG9TZXR0aW5ncyBhbmQgcmV0dXJucyBub2RlCgkgKiAgIGNGZWF0dXJlOiBDaGFyYWN0ZXIgdGhhdCB3aWxsIGJlIG1hdGNoZWQgaW4gc0RvbSAtIGNhc2Ugc2Vuc2l0aXZlCgkgKiAgIHNGZWF0dXJlOiBGZWF0dXJlIG5hbWUgLSBqdXN0IGZvciBjb21wbGV0ZW5lc3MgOi0pCgkgKi8KCV9vRXh0LmFvRmVhdHVyZXMgPSBbIF07CgkKCS8qCgkgKiBWYXJpYWJsZTogb2ZuU2VhcmNoCgkgKiBQdXJwb3NlOiAgQ29udGFpbmVyIGZvciBjdXN0b20gZmlsdGVyaW5nIGZ1bmN0aW9ucwoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqIE5vdGVzOiAgICBUaGlzIGlzIGFuIG9iamVjdCAodGhlIG5hbWUgc2hvdWxkIG1hdGNoIHRoZSB0eXBlKSBmb3IgY3VzdG9tIGZpbHRlcmluZyBmdW5jdGlvbiwKCSAqICAgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGxpdmUgRE9NIGNoZWNraW5nIG9yIGZvcm1hdHRlZCB0ZXh0IGZpbHRlcmluZwoJICovCglfb0V4dC5vZm5TZWFyY2ggPSB7IH07CgkKCS8qCgkgKiBWYXJpYWJsZTogYWZuU29ydERhdGEKCSAqIFB1cnBvc2U6ICBDb250YWluZXIgZm9yIGN1c3RvbSBzb3J0aW5nIGRhdGEgc291cmNlIGZ1bmN0aW9ucwoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqIE5vdGVzOiAgICBBcnJheSAoYXNzb2NpYXRpdmUpIG9mIGZ1bmN0aW9ucyB3aGljaCBpcyBydW4gcHJpb3IgdG8gYSBjb2x1bW4gb2YgdGhpcyAKCSAqICAgJ1NvcnREYXRhVHlwZScgYmVpbmcgc29ydGVkIHVwb24uCgkgKiAgIEZ1bmN0aW9uIGlucHV0IHBhcmFtZXRlcnM6CgkgKiAgICAgb2JqZWN0Om9TZXR0aW5ncy0gIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgICAgaW50OmlDb2x1bW4gLSBUYXJnZXQgY29sdW1uIG51bWJlcgoJICogICBSZXR1cm4gdmFsdWU6IEFycmF5IG9mIGRhdGEgd2hpY2ggZXhhY3RseSBtYXRjaGVkIHRoZSBmdWxsIGRhdGEgc2V0IHNpemUgZm9yIHRoZSBjb2x1bW4gdG8KCSAqICAgICBiZSBzb3J0ZWQgdXBvbgoJICovCglfb0V4dC5hZm5Tb3J0RGF0YSA9IFsgXTsKCQoJLyoKCSAqIFZhcmlhYmxlOiBvU3RkQ2xhc3NlcwoJICogUHVycG9zZTogIFN0b3JhZ2UgZm9yIHRoZSB2YXJpb3VzIGNsYXNzZXMgdGhhdCBEYXRhVGFibGVzIHVzZXMKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKi8KCV9vRXh0Lm9TdGRDbGFzc2VzID0gewoJCS8qIFR3byBidXR0b25zIGJ1dHRvbnMgKi8KCQkic1BhZ2VQcmV2RW5hYmxlZCI6ICJwYWdpbmF0ZV9lbmFibGVkX3ByZXZpb3VzIiwKCQkic1BhZ2VQcmV2RGlzYWJsZWQiOiAicGFnaW5hdGVfZGlzYWJsZWRfcHJldmlvdXMiLAoJCSJzUGFnZU5leHRFbmFibGVkIjogInBhZ2luYXRlX2VuYWJsZWRfbmV4dCIsCgkJInNQYWdlTmV4dERpc2FibGVkIjogInBhZ2luYXRlX2Rpc2FibGVkX25leHQiLAoJCSJzUGFnZUpVSU5leHQiOiAiIiwKCQkic1BhZ2VKVUlQcmV2IjogIiIsCgkJCgkJLyogRnVsbCBudW1iZXJzIHBhZ2luZyBidXR0b25zICovCgkJInNQYWdlQnV0dG9uIjogInBhZ2luYXRlX2J1dHRvbiIsCgkJInNQYWdlQnV0dG9uQWN0aXZlIjogInBhZ2luYXRlX2FjdGl2ZSIsCgkJInNQYWdlQnV0dG9uU3RhdGljRGlzYWJsZWQiOiAicGFnaW5hdGVfYnV0dG9uIHBhZ2luYXRlX2J1dHRvbl9kaXNhYmxlZCIsCgkJInNQYWdlRmlyc3QiOiAiZmlyc3QiLAoJCSJzUGFnZVByZXZpb3VzIjogInByZXZpb3VzIiwKCQkic1BhZ2VOZXh0IjogIm5leHQiLAoJCSJzUGFnZUxhc3QiOiAibGFzdCIsCgkJCgkJLyogU3RyaXBwaW5nIGNsYXNzZXMgKi8KCQkic1N0cmlwT2RkIjogIm9kZCIsCgkJInNTdHJpcEV2ZW4iOiAiZXZlbiIsCgkJCgkJLyogRW1wdHkgcm93ICovCgkJInNSb3dFbXB0eSI6ICJkYXRhVGFibGVzX2VtcHR5IiwKCQkKCQkvKiBGZWF0dXJlcyAqLwoJCSJzV3JhcHBlciI6ICJkYXRhVGFibGVzX3dyYXBwZXIiLAoJCSJzRmlsdGVyIjogImRhdGFUYWJsZXNfZmlsdGVyIiwKCQkic0luZm8iOiAiZGF0YVRhYmxlc19pbmZvIiwKCQkic1BhZ2luZyI6ICJkYXRhVGFibGVzX3BhZ2luYXRlIHBhZ2luZ18iLCAvKiBOb3RlIHRoYXQgdGhlIHR5cGUgaXMgcG9zdGZpeGVkICovCgkJInNMZW5ndGgiOiAiZGF0YVRhYmxlc19sZW5ndGgiLAoJCSJzUHJvY2Vzc2luZyI6ICJkYXRhVGFibGVzX3Byb2Nlc3NpbmciLAoJCQoJCS8qIFNvcnRpbmcgKi8KCQkic1NvcnRBc2MiOiAic29ydGluZ19hc2MiLAoJCSJzU29ydERlc2MiOiAic29ydGluZ19kZXNjIiwKCQkic1NvcnRhYmxlIjogInNvcnRpbmciLCAvKiBTb3J0YWJsZSBpbiBib3RoIGRpcmVjdGlvbnMgKi8KCQkic1NvcnRhYmxlQXNjIjogInNvcnRpbmdfYXNjX2Rpc2FibGVkIiwKCQkic1NvcnRhYmxlRGVzYyI6ICJzb3J0aW5nX2Rlc2NfZGlzYWJsZWQiLAoJCSJzU29ydGFibGVOb25lIjogInNvcnRpbmdfZGlzYWJsZWQiLAoJCSJzU29ydENvbHVtbiI6ICJzb3J0aW5nXyIsIC8qIE5vdGUgdGhhdCBhbiBpbnQgaXMgcG9zdGZpeGVkIGZvciB0aGUgc29ydGluZyBvcmRlciAqLwoJCSJzU29ydEpVSUFzYyI6ICIiLAoJCSJzU29ydEpVSURlc2MiOiAiIiwKCQkic1NvcnRKVUkiOiAiIiwKCQkic1NvcnRKVUlBc2NBbGxvd2VkIjogIiIsCgkJInNTb3J0SlVJRGVzY0FsbG93ZWQiOiAiIiwKCQkic1NvcnRKVUlXcmFwcGVyIjogIiIsCgkJInNTb3J0SWNvbiI6ICIiLAoJCQoJCS8qIFNjcm9sbGluZyAqLwoJCSJzU2Nyb2xsV3JhcHBlciI6ICJkYXRhVGFibGVzX3Njcm9sbCIsCgkJInNTY3JvbGxIZWFkIjogImRhdGFUYWJsZXNfc2Nyb2xsSGVhZCIsCgkJInNTY3JvbGxIZWFkSW5uZXIiOiAiZGF0YVRhYmxlc19zY3JvbGxIZWFkSW5uZXIiLAoJCSJzU2Nyb2xsQm9keSI6ICJkYXRhVGFibGVzX3Njcm9sbEJvZHkiLAoJCSJzU2Nyb2xsRm9vdCI6ICJkYXRhVGFibGVzX3Njcm9sbEZvb3QiLAoJCSJzU2Nyb2xsRm9vdElubmVyIjogImRhdGFUYWJsZXNfc2Nyb2xsRm9vdElubmVyIiwKCQkKCQkvKiBNaXNjICovCgkJInNGb290ZXJUSCI6ICIiCgl9OwoJCgkvKgoJICogVmFyaWFibGU6IG9KVUlDbGFzc2VzCgkgKiBQdXJwb3NlOiAgU3RvcmFnZSBmb3IgdGhlIHZhcmlvdXMgY2xhc3NlcyB0aGF0IERhdGFUYWJsZXMgdXNlcyAtIGpRdWVyeSBVSSBzdWl0YWJsZQoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqLwoJX29FeHQub0pVSUNsYXNzZXMgPSB7CgkJLyogVHdvIGJ1dHRvbnMgYnV0dG9ucyAqLwoJCSJzUGFnZVByZXZFbmFibGVkIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItbGVmdCIsCgkJInNQYWdlUHJldkRpc2FibGVkIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItbGVmdCB1aS1zdGF0ZS1kaXNhYmxlZCIsCgkJInNQYWdlTmV4dEVuYWJsZWQiOiAiZmctYnV0dG9uIHVpLWJ1dHRvbiB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1yaWdodCIsCgkJInNQYWdlTmV4dERpc2FibGVkIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItcmlnaHQgdWktc3RhdGUtZGlzYWJsZWQiLAoJCSJzUGFnZUpVSU5leHQiOiAidWktaWNvbiB1aS1pY29uLWNpcmNsZS1hcnJvdy1lIiwKCQkic1BhZ2VKVUlQcmV2IjogInVpLWljb24gdWktaWNvbi1jaXJjbGUtYXJyb3ctdyIsCgkJCgkJLyogRnVsbCBudW1iZXJzIHBhZ2luZyBidXR0b25zICovCgkJInNQYWdlQnV0dG9uIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCIsCgkJInNQYWdlQnV0dG9uQWN0aXZlIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCB1aS1zdGF0ZS1kaXNhYmxlZCIsCgkJInNQYWdlQnV0dG9uU3RhdGljRGlzYWJsZWQiOiAiZmctYnV0dG9uIHVpLWJ1dHRvbiB1aS1zdGF0ZS1kZWZhdWx0IHVpLXN0YXRlLWRpc2FibGVkIiwKCQkic1BhZ2VGaXJzdCI6ICJmaXJzdCB1aS1jb3JuZXItdGwgdWktY29ybmVyLWJsIiwKCQkic1BhZ2VQcmV2aW91cyI6ICJwcmV2aW91cyIsCgkJInNQYWdlTmV4dCI6ICJuZXh0IiwKCQkic1BhZ2VMYXN0IjogImxhc3QgdWktY29ybmVyLXRyIHVpLWNvcm5lci1iciIsCgkJCgkJLyogU3RyaXBwaW5nIGNsYXNzZXMgKi8KCQkic1N0cmlwT2RkIjogIm9kZCIsCgkJInNTdHJpcEV2ZW4iOiAiZXZlbiIsCgkJCgkJLyogRW1wdHkgcm93ICovCgkJInNSb3dFbXB0eSI6ICJkYXRhVGFibGVzX2VtcHR5IiwKCQkKCQkvKiBGZWF0dXJlcyAqLwoJCSJzV3JhcHBlciI6ICJkYXRhVGFibGVzX3dyYXBwZXIiLAoJCSJzRmlsdGVyIjogImRhdGFUYWJsZXNfZmlsdGVyIiwKCQkic0luZm8iOiAiZGF0YVRhYmxlc19pbmZvIiwKCQkic1BhZ2luZyI6ICJkYXRhVGFibGVzX3BhZ2luYXRlIGZnLWJ1dHRvbnNldCB1aS1idXR0b25zZXQgZmctYnV0dG9uc2V0LW11bHRpICIrCgkJCSJ1aS1idXR0b25zZXQtbXVsdGkgcGFnaW5nXyIsIC8qIE5vdGUgdGhhdCB0aGUgdHlwZSBpcyBwb3N0Zml4ZWQgKi8KCQkic0xlbmd0aCI6ICJkYXRhVGFibGVzX2xlbmd0aCIsCgkJInNQcm9jZXNzaW5nIjogImRhdGFUYWJsZXNfcHJvY2Vzc2luZyIsCgkJCgkJLyogU29ydGluZyAqLwoJCSJzU29ydEFzYyI6ICJ1aS1zdGF0ZS1kZWZhdWx0IiwKCQkic1NvcnREZXNjIjogInVpLXN0YXRlLWRlZmF1bHQiLAoJCSJzU29ydGFibGUiOiAidWktc3RhdGUtZGVmYXVsdCIsCgkJInNTb3J0YWJsZUFzYyI6ICJ1aS1zdGF0ZS1kZWZhdWx0IiwKCQkic1NvcnRhYmxlRGVzYyI6ICJ1aS1zdGF0ZS1kZWZhdWx0IiwKCQkic1NvcnRhYmxlTm9uZSI6ICJ1aS1zdGF0ZS1kZWZhdWx0IiwKCQkic1NvcnRDb2x1bW4iOiAic29ydGluZ18iLCAvKiBOb3RlIHRoYXQgYW4gaW50IGlzIHBvc3RmaXhlZCBmb3IgdGhlIHNvcnRpbmcgb3JkZXIgKi8KCQkic1NvcnRKVUlBc2MiOiAiY3NzX3JpZ2h0IHVpLWljb24gdWktaWNvbi10cmlhbmdsZS0xLW4iLAoJCSJzU29ydEpVSURlc2MiOiAiY3NzX3JpZ2h0IHVpLWljb24gdWktaWNvbi10cmlhbmdsZS0xLXMiLAoJCSJzU29ydEpVSSI6ICJjc3NfcmlnaHQgdWktaWNvbiB1aS1pY29uLWNhcmF0LTItbi1zIiwKCQkic1NvcnRKVUlBc2NBbGxvd2VkIjogImNzc19yaWdodCB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIiwKCQkic1NvcnRKVUlEZXNjQWxsb3dlZCI6ICJjc3NfcmlnaHQgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtcyIsCgkJInNTb3J0SlVJV3JhcHBlciI6ICJEYXRhVGFibGVzX3NvcnRfd3JhcHBlciIsCgkJInNTb3J0SWNvbiI6ICJEYXRhVGFibGVzX3NvcnRfaWNvbiIsCgkJCgkJLyogU2Nyb2xsaW5nICovCgkJInNTY3JvbGxXcmFwcGVyIjogImRhdGFUYWJsZXNfc2Nyb2xsIiwKCQkic1Njcm9sbEhlYWQiOiAiZGF0YVRhYmxlc19zY3JvbGxIZWFkIHVpLXN0YXRlLWRlZmF1bHQiLAoJCSJzU2Nyb2xsSGVhZElubmVyIjogImRhdGFUYWJsZXNfc2Nyb2xsSGVhZElubmVyIiwKCQkic1Njcm9sbEJvZHkiOiAiZGF0YVRhYmxlc19zY3JvbGxCb2R5IiwKCQkic1Njcm9sbEZvb3QiOiAiZGF0YVRhYmxlc19zY3JvbGxGb290IHVpLXN0YXRlLWRlZmF1bHQiLAoJCSJzU2Nyb2xsRm9vdElubmVyIjogImRhdGFUYWJsZXNfc2Nyb2xsRm9vdElubmVyIiwKCQkKCQkvKiBNaXNjICovCgkJInNGb290ZXJUSCI6ICJ1aS1zdGF0ZS1kZWZhdWx0IgoJfTsKCQoJLyoKCSAqIFZhcmlhYmxlOiBvUGFnaW5hdGlvbgoJICogUHVycG9zZTogIENvbnRhaW5lciBmb3IgdGhlIHZhcmlvdXMgdHlwZSBvZiBwYWdpbmF0aW9uIHRoYXQgZGF0YVRhYmxlcyBzdXBwb3J0cwoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqLwoJX29FeHQub1BhZ2luYXRpb24gPSB7CgkJLyoKCQkgKiBWYXJpYWJsZTogdHdvX2J1dHRvbgoJCSAqIFB1cnBvc2U6ICBTdGFuZGFyZCB0d28gYnV0dG9uIChmb3J3YXJkL2JhY2spIHBhZ2luYXRpb24KCQkgKiBTY29wZTogICAgalF1ZXJ5LmZuLmRhdGFUYWJsZUV4dC5vUGFnaW5hdGlvbgoJCSAqLwoJCSJ0d29fYnV0dG9uIjogewoJCQkvKgoJCQkgKiBGdW5jdGlvbjogb1BhZ2luYXRpb24udHdvX2J1dHRvbi5mbkluaXQKCQkJICogUHVycG9zZTogIEluaXRhbGlzZSBkb20gZWxlbWVudHMgcmVxdWlyZWQgZm9yIHBhZ2luYXRpb24gd2l0aCBmb3J3YXJkL2JhY2sgYnV0dG9ucyBvbmx5CgkJCSAqIFJldHVybnM6ICAtCgkJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkJICogICAgICAgICAgIG5vZGU6blBhZ2luZyAtIHRoZSBESVYgd2hpY2ggY29udGFpbnMgdGhpcyBwYWdpbmF0aW9uIGNvbnRyb2wKCQkJICogICAgICAgICAgIGZ1bmN0aW9uOmZuQ2FsbGJhY2tEcmF3IC0gZHJhdyBmdW5jdGlvbiB3aGljaCBtdXN0IGJlIGNhbGxlZCBvbiB1cGRhdGUKCQkJICovCgkJCSJmbkluaXQiOiBmdW5jdGlvbiAoIG9TZXR0aW5ncywgblBhZ2luZywgZm5DYWxsYmFja0RyYXcgKQoJCQl7CgkJCQl2YXIgblByZXZpb3VzLCBuTmV4dCwgblByZXZpb3VzSW5uZXIsIG5OZXh0SW5uZXI7CgkJCQkKCQkJCS8qIFN0b3JlIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBlbGVtZW50cyBpbiB0aGUgb1NldHRpbmdzIG9iamVjdCBhcyB0aGV5IGNhbiBiZSB2ZXJ5CgkJCQkgKiB1c2Z1bCBmb3IgYXV0b21hdGlvbiAtIHBhcnRpY3VsYXJseSB0ZXN0aW5nCgkJCQkgKi8KCQkJCWlmICggIW9TZXR0aW5ncy5iSlVJICkKCQkJCXsKCQkJCQluUHJldmlvdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQkJCW5OZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQluUHJldmlvdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnYScgKTsKCQkJCQluTmV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdhJyApOwoJCQkJCQoJCQkJCW5OZXh0SW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CgkJCQkJbk5leHRJbm5lci5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VKVUlOZXh0OwoJCQkJCW5OZXh0LmFwcGVuZENoaWxkKCBuTmV4dElubmVyICk7CgkJCQkJCgkJCQkJblByZXZpb3VzSW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CgkJCQkJblByZXZpb3VzSW5uZXIuY2xhc3NOYW1lID0gb1NldHRpbmdzLm9DbGFzc2VzLnNQYWdlSlVJUHJldjsKCQkJCQluUHJldmlvdXMuYXBwZW5kQ2hpbGQoIG5QcmV2aW91c0lubmVyICk7CgkJCQl9CgkJCQkKCQkJCW5QcmV2aW91cy5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VQcmV2RGlzYWJsZWQ7CgkJCQluTmV4dC5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VOZXh0RGlzYWJsZWQ7CgkJCQkKCQkJCW5QcmV2aW91cy50aXRsZSA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlLnNQcmV2aW91czsKCQkJCW5OZXh0LnRpdGxlID0gb1NldHRpbmdzLm9MYW5ndWFnZS5vUGFnaW5hdGUuc05leHQ7CgkJCQkKCQkJCW5QYWdpbmcuYXBwZW5kQ2hpbGQoIG5QcmV2aW91cyApOwoJCQkJblBhZ2luZy5hcHBlbmRDaGlsZCggbk5leHQgKTsKCQkJCQoJCQkJJChuUHJldmlvdXMpLmJpbmQoICdjbGljay5EVCcsIGZ1bmN0aW9uKCkgewoJCQkJCWlmICggb1NldHRpbmdzLm9BcGkuX2ZuUGFnZUNoYW5nZSggb1NldHRpbmdzLCAicHJldmlvdXMiICkgKQoJCQkJCXsKCQkJCQkJLyogT25seSBkcmF3IHdoZW4gdGhlIHBhZ2UgaGFzIGFjdHVhbGx5IGNoYW5nZWQgKi8KCQkJCQkJZm5DYWxsYmFja0RyYXcoIG9TZXR0aW5ncyApOwoJCQkJCX0KCQkJCX0gKTsKCQkJCQoJCQkJJChuTmV4dCkuYmluZCggJ2NsaWNrLkRUJywgZnVuY3Rpb24oKSB7CgkJCQkJaWYgKCBvU2V0dGluZ3Mub0FwaS5fZm5QYWdlQ2hhbmdlKCBvU2V0dGluZ3MsICJuZXh0IiApICkKCQkJCQl7CgkJCQkJCWZuQ2FsbGJhY2tEcmF3KCBvU2V0dGluZ3MgKTsKCQkJCQl9CgkJCQl9ICk7CgkJCQkKCQkJCS8qIFRha2UgdGhlIGJydXRhbCBhcHByb2FjaCB0byBjYW5jZWxsaW5nIHRleHQgc2VsZWN0aW9uICovCgkJCQkkKG5QcmV2aW91cykuYmluZCggJ3NlbGVjdHN0YXJ0LkRUJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0gKTsKCQkJCSQobk5leHQpLmJpbmQoICdzZWxlY3RzdGFydC5EVCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9ICk7CgkJCQkKCQkJCS8qIElEIHRoZSBmaXJzdCBlbGVtZW50cyBvbmx5ICovCgkJCQlpZiAoIG9TZXR0aW5ncy5zVGFibGVJZCAhPT0gJycgJiYgdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5wID09ICJ1bmRlZmluZWQiICkKCQkJCXsKCQkJCQluUGFnaW5nLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfcGFnaW5hdGUnICk7CgkJCQkJblByZXZpb3VzLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfcHJldmlvdXMnICk7CgkJCQkJbk5leHQuc2V0QXR0cmlidXRlKCAnaWQnLCBvU2V0dGluZ3Muc1RhYmxlSWQrJ19uZXh0JyApOwoJCQkJfQoJCQl9LAoJCQkKCQkJLyoKCQkJICogRnVuY3Rpb246IG9QYWdpbmF0aW9uLnR3b19idXR0b24uZm5VcGRhdGUKCQkJICogUHVycG9zZTogIFVwZGF0ZSB0aGUgdHdvIGJ1dHRvbiBwYWdpbmF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGRyYXcKCQkJICogUmV0dXJuczogIC0KCQkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCQkgKiAgICAgICAgICAgZnVuY3Rpb246Zm5DYWxsYmFja0RyYXcgLSBkcmF3IGZ1bmN0aW9uIHRvIGNhbGwgb24gcGFnZSBjaGFuZ2UKCQkJICovCgkJCSJmblVwZGF0ZSI6IGZ1bmN0aW9uICggb1NldHRpbmdzLCBmbkNhbGxiYWNrRHJhdyApCgkJCXsKCQkJCWlmICggIW9TZXR0aW5ncy5hYW5GZWF0dXJlcy5wICkKCQkJCXsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQkKCQkJCS8qIExvb3Agb3ZlciBlYWNoIGluc3RhbmNlIG9mIHRoZSBwYWdlciAqLwoJCQkJdmFyIGFuID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzLnA7CgkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWFuLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJaWYgKCBhbltpXS5jaGlsZE5vZGVzLmxlbmd0aCAhPT0gMCApCgkJCQkJewoJCQkJCQlhbltpXS5jaGlsZE5vZGVzWzBdLmNsYXNzTmFtZSA9IAoJCQkJCQkJKCBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPT09IDAgKSA/IAoJCQkJCQkJb1NldHRpbmdzLm9DbGFzc2VzLnNQYWdlUHJldkRpc2FibGVkIDogb1NldHRpbmdzLm9DbGFzc2VzLnNQYWdlUHJldkVuYWJsZWQ7CgkJCQkJCQoJCQkJCQlhbltpXS5jaGlsZE5vZGVzWzFdLmNsYXNzTmFtZSA9IAoJCQkJCQkJKCBvU2V0dGluZ3MuZm5EaXNwbGF5RW5kKCkgPT0gb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSApID8gCgkJCQkJCQlvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VOZXh0RGlzYWJsZWQgOiBvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VOZXh0RW5hYmxlZDsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCQoJCQoJCS8qCgkJICogVmFyaWFibGU6IGlGdWxsTnVtYmVyc1Nob3dQYWdlcwoJCSAqIFB1cnBvc2U6ICBDaGFuZ2UgdGhlIG51bWJlciBvZiBwYWdlcyB3aGljaCBjYW4gYmUgc2VlbgoJCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0Lm9QYWdpbmF0aW9uCgkJICovCgkJImlGdWxsTnVtYmVyc1Nob3dQYWdlcyI6IDUsCgkJCgkJLyoKCQkgKiBWYXJpYWJsZTogZnVsbF9udW1iZXJzCgkJICogUHVycG9zZTogIEZ1bGwgbnVtYmVycyBwYWdpbmF0aW9uCgkJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQub1BhZ2luYXRpb24KCQkgKi8KCQkiZnVsbF9udW1iZXJzIjogewoJCQkvKgoJCQkgKiBGdW5jdGlvbjogb1BhZ2luYXRpb24uZnVsbF9udW1iZXJzLmZuSW5pdAoJCQkgKiBQdXJwb3NlOiAgSW5pdGFsaXNlIGRvbSBlbGVtZW50cyByZXF1aXJlZCBmb3IgcGFnaW5hdGlvbiB3aXRoIGEgbGlzdCBvZiB0aGUgcGFnZXMKCQkJICogUmV0dXJuczogIC0KCQkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCQkgKiAgICAgICAgICAgbm9kZTpuUGFnaW5nIC0gdGhlIERJViB3aGljaCBjb250YWlucyB0aGlzIHBhZ2luYXRpb24gY29udHJvbAoJCQkgKiAgICAgICAgICAgZnVuY3Rpb246Zm5DYWxsYmFja0RyYXcgLSBkcmF3IGZ1bmN0aW9uIHdoaWNoIG11c3QgYmUgY2FsbGVkIG9uIHVwZGF0ZQoJCQkgKi8KCQkJImZuSW5pdCI6IGZ1bmN0aW9uICggb1NldHRpbmdzLCBuUGFnaW5nLCBmbkNhbGxiYWNrRHJhdyApCgkJCXsKCQkJCXZhciBuRmlyc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTsKCQkJCXZhciBuUHJldmlvdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTsKCQkJCXZhciBuTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdzcGFuJyApOwoJCQkJdmFyIG5OZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3NwYW4nICk7CgkJCQl2YXIgbkxhc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTsKCQkJCQoJCQkJbkZpcnN0LmlubmVySFRNTCA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlLnNGaXJzdDsKCQkJCW5QcmV2aW91cy5pbm5lckhUTUwgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLm9QYWdpbmF0ZS5zUHJldmlvdXM7CgkJCQluTmV4dC5pbm5lckhUTUwgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLm9QYWdpbmF0ZS5zTmV4dDsKCQkJCW5MYXN0LmlubmVySFRNTCA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlLnNMYXN0OwoJCQkJCgkJCQl2YXIgb0NsYXNzZXMgPSBvU2V0dGluZ3Mub0NsYXNzZXM7CgkJCQluRmlyc3QuY2xhc3NOYW1lID0gb0NsYXNzZXMuc1BhZ2VCdXR0b24rIiAiK29DbGFzc2VzLnNQYWdlRmlyc3Q7CgkJCQluUHJldmlvdXMuY2xhc3NOYW1lID0gb0NsYXNzZXMuc1BhZ2VCdXR0b24rIiAiK29DbGFzc2VzLnNQYWdlUHJldmlvdXM7CgkJCQluTmV4dC5jbGFzc05hbWU9IG9DbGFzc2VzLnNQYWdlQnV0dG9uKyIgIitvQ2xhc3Nlcy5zUGFnZU5leHQ7CgkJCQluTGFzdC5jbGFzc05hbWUgPSBvQ2xhc3Nlcy5zUGFnZUJ1dHRvbisiICIrb0NsYXNzZXMuc1BhZ2VMYXN0OwoJCQkJCgkJCQluUGFnaW5nLmFwcGVuZENoaWxkKCBuRmlyc3QgKTsKCQkJCW5QYWdpbmcuYXBwZW5kQ2hpbGQoIG5QcmV2aW91cyApOwoJCQkJblBhZ2luZy5hcHBlbmRDaGlsZCggbkxpc3QgKTsKCQkJCW5QYWdpbmcuYXBwZW5kQ2hpbGQoIG5OZXh0ICk7CgkJCQluUGFnaW5nLmFwcGVuZENoaWxkKCBuTGFzdCApOwoJCQkJCgkJCQkkKG5GaXJzdCkuYmluZCggJ2NsaWNrLkRUJywgZnVuY3Rpb24gKCkgewoJCQkJCWlmICggb1NldHRpbmdzLm9BcGkuX2ZuUGFnZUNoYW5nZSggb1NldHRpbmdzLCAiZmlyc3QiICkgKQoJCQkJCXsKCQkJCQkJZm5DYWxsYmFja0RyYXcoIG9TZXR0aW5ncyApOwoJCQkJCX0KCQkJCX0gKTsKCQkJCQoJCQkJJChuUHJldmlvdXMpLmJpbmQoICdjbGljay5EVCcsIGZ1bmN0aW9uKCkgewoJCQkJCWlmICggb1NldHRpbmdzLm9BcGkuX2ZuUGFnZUNoYW5nZSggb1NldHRpbmdzLCAicHJldmlvdXMiICkgKQoJCQkJCXsKCQkJCQkJZm5DYWxsYmFja0RyYXcoIG9TZXR0aW5ncyApOwoJCQkJCX0KCQkJCX0gKTsKCQkJCQoJCQkJJChuTmV4dCkuYmluZCggJ2NsaWNrLkRUJywgZnVuY3Rpb24oKSB7CgkJCQkJaWYgKCBvU2V0dGluZ3Mub0FwaS5fZm5QYWdlQ2hhbmdlKCBvU2V0dGluZ3MsICJuZXh0IiApICkKCQkJCQl7CgkJCQkJCWZuQ2FsbGJhY2tEcmF3KCBvU2V0dGluZ3MgKTsKCQkJCQl9CgkJCQl9ICk7CgkJCQkKCQkJCSQobkxhc3QpLmJpbmQoICdjbGljay5EVCcsIGZ1bmN0aW9uKCkgewoJCQkJCWlmICggb1NldHRpbmdzLm9BcGkuX2ZuUGFnZUNoYW5nZSggb1NldHRpbmdzLCAibGFzdCIgKSApCgkJCQkJewoJCQkJCQlmbkNhbGxiYWNrRHJhdyggb1NldHRpbmdzICk7CgkJCQkJfQoJCQkJfSApOwoJCQkJCgkJCQkvKiBUYWtlIHRoZSBicnV0YWwgYXBwcm9hY2ggdG8gY2FuY2VsbGluZyB0ZXh0IHNlbGVjdGlvbiAqLwoJCQkJJCgnc3BhbicsIG5QYWdpbmcpCgkJCQkJLmJpbmQoICdtb3VzZWRvd24uRFQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfSApCgkJCQkJLmJpbmQoICdzZWxlY3RzdGFydC5EVCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9ICk7CgkJCQkKCQkJCS8qIElEIHRoZSBmaXJzdCBlbGVtZW50cyBvbmx5ICovCgkJCQlpZiAoIG9TZXR0aW5ncy5zVGFibGVJZCAhPT0gJycgJiYgdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5wID09ICJ1bmRlZmluZWQiICkKCQkJCXsKCQkJCQluUGFnaW5nLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfcGFnaW5hdGUnICk7CgkJCQkJbkZpcnN0LnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfZmlyc3QnICk7CgkJCQkJblByZXZpb3VzLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfcHJldmlvdXMnICk7CgkJCQkJbk5leHQuc2V0QXR0cmlidXRlKCAnaWQnLCBvU2V0dGluZ3Muc1RhYmxlSWQrJ19uZXh0JyApOwoJCQkJCW5MYXN0LnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfbGFzdCcgKTsKCQkJCX0KCQkJfSwKCQkJCgkJCS8qCgkJCSAqIEZ1bmN0aW9uOiBvUGFnaW5hdGlvbi5mdWxsX251bWJlcnMuZm5VcGRhdGUKCQkJICogUHVycG9zZTogIFVwZGF0ZSB0aGUgbGlzdCBvZiBwYWdlIGJ1dHRvbnMgc2hvd3MKCQkJICogUmV0dXJuczogIC0KCQkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCQkgKiAgICAgICAgICAgZnVuY3Rpb246Zm5DYWxsYmFja0RyYXcgLSBkcmF3IGZ1bmN0aW9uIHRvIGNhbGwgb24gcGFnZSBjaGFuZ2UKCQkJICovCgkJCSJmblVwZGF0ZSI6IGZ1bmN0aW9uICggb1NldHRpbmdzLCBmbkNhbGxiYWNrRHJhdyApCgkJCXsKCQkJCWlmICggIW9TZXR0aW5ncy5hYW5GZWF0dXJlcy5wICkKCQkJCXsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQkKCQkJCXZhciBpUGFnZUNvdW50ID0gX29FeHQub1BhZ2luYXRpb24uaUZ1bGxOdW1iZXJzU2hvd1BhZ2VzOwoJCQkJdmFyIGlQYWdlQ291bnRIYWxmID0gTWF0aC5mbG9vcihpUGFnZUNvdW50IC8gMik7CgkJCQl2YXIgaVBhZ2VzID0gTWF0aC5jZWlsKChvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpKSAvIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGgpOwoJCQkJdmFyIGlDdXJyZW50UGFnZSA9IE1hdGguY2VpbChvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgLyBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKSArIDE7CgkJCQl2YXIgc0xpc3QgPSAiIjsKCQkJCXZhciBpU3RhcnRCdXR0b24sIGlFbmRCdXR0b24sIGksIGlMZW47CgkJCQl2YXIgb0NsYXNzZXMgPSBvU2V0dGluZ3Mub0NsYXNzZXM7CgkJCQkKCQkJCS8qIFBhZ2VzIGNhbGN1bGF0aW9uICovCgkJCQlpZiAoaVBhZ2VzIDwgaVBhZ2VDb3VudCkKCQkJCXsKCQkJCQlpU3RhcnRCdXR0b24gPSAxOwoJCQkJCWlFbmRCdXR0b24gPSBpUGFnZXM7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJaWYgKGlDdXJyZW50UGFnZSA8PSBpUGFnZUNvdW50SGFsZikKCQkJCQl7CgkJCQkJCWlTdGFydEJ1dHRvbiA9IDE7CgkJCQkJCWlFbmRCdXR0b24gPSBpUGFnZUNvdW50OwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlpZiAoaUN1cnJlbnRQYWdlID49IChpUGFnZXMgLSBpUGFnZUNvdW50SGFsZikpCgkJCQkJCXsKCQkJCQkJCWlTdGFydEJ1dHRvbiA9IGlQYWdlcyAtIGlQYWdlQ291bnQgKyAxOwoJCQkJCQkJaUVuZEJ1dHRvbiA9IGlQYWdlczsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCWlTdGFydEJ1dHRvbiA9IGlDdXJyZW50UGFnZSAtIE1hdGguY2VpbChpUGFnZUNvdW50IC8gMikgKyAxOwoJCQkJCQkJaUVuZEJ1dHRvbiA9IGlTdGFydEJ1dHRvbiArIGlQYWdlQ291bnQgLSAxOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBCdWlsZCB0aGUgZHluYW1pYyBsaXN0ICovCgkJCQlmb3IgKCBpPWlTdGFydEJ1dHRvbiA7IGk8PWlFbmRCdXR0b24gOyBpKysgKQoJCQkJewoJCQkJCWlmICggaUN1cnJlbnRQYWdlICE9IGkgKQoJCQkJCXsKCQkJCQkJc0xpc3QgKz0gJzxzcGFuIGNsYXNzPSInK29DbGFzc2VzLnNQYWdlQnV0dG9uKyciPicraSsnPFwvc3Bhbj4nOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlzTGlzdCArPSAnPHNwYW4gY2xhc3M9Iicrb0NsYXNzZXMuc1BhZ2VCdXR0b25BY3RpdmUrJyI+JytpKyc8XC9zcGFuPic7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBMb29wIG92ZXIgZWFjaCBpbnN0YW5jZSBvZiB0aGUgcGFnZXIgKi8KCQkJCXZhciBhbiA9IG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5wOwoJCQkJdmFyIGFuQnV0dG9ucywgYW5TdGF0aWMsIG5QYWdpbmF0ZUxpc3Q7CgkJCQl2YXIgZm5DbGljayA9IGZ1bmN0aW9uKGUpIHsKCQkJCQkvKiBVc2UgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBlbGVtZW50IHRvIGp1bXAgdG8gdGhlIHJlcXVpcmVkIHBhZ2UgKi8KCQkJCQl2YXIgaVRhcmdldCA9ICh0aGlzLmlubmVySFRNTCAqIDEpIC0gMTsKCQkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSBpVGFyZ2V0ICogb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aDsKCQkJCQlmbkNhbGxiYWNrRHJhdyggb1NldHRpbmdzICk7CgkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJfTsKCQkJCXZhciBmbkZhbHNlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07CgkJCQkKCQkJCWZvciAoIGk9MCwgaUxlbj1hbi5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWlmICggYW5baV0uY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgKQoJCQkJCXsKCQkJCQkJY29udGludWU7CgkJCQkJfQoJCQkJCQoJCQkJCS8qIEJ1aWxkIHVwIHRoZSBkeW5hbWljIGxpc3QgZm9yc3QgLSBodG1sIGFuZCBsaXN0ZW5lcnMgKi8KCQkJCQl2YXIgcWpQYWdpbmF0ZUxpc3QgPSAkKCdzcGFuOmVxKDIpJywgYW5baV0pOwoJCQkJCXFqUGFnaW5hdGVMaXN0Lmh0bWwoIHNMaXN0ICk7CgkJCQkJJCgnc3BhbicsIHFqUGFnaW5hdGVMaXN0KS5iaW5kKCAnY2xpY2suRFQnLCBmbkNsaWNrICkuYmluZCggJ21vdXNlZG93bi5EVCcsIGZuRmFsc2UgKQoJCQkJCQkuYmluZCggJ3NlbGVjdHN0YXJ0LkRUJywgZm5GYWxzZSApOwoJCQkJCQoJCQkJCS8qIFVwZGF0ZSB0aGUgJ3ByZW1hbmVudCBib3R0b24ncyBjbGFzc2VzICovCgkJCQkJYW5CdXR0b25zID0gYW5baV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NwYW4nKTsKCQkJCQlhblN0YXRpYyA9IFsKCQkJCQkJYW5CdXR0b25zWzBdLCBhbkJ1dHRvbnNbMV0sIAoJCQkJCQlhbkJ1dHRvbnNbYW5CdXR0b25zLmxlbmd0aC0yXSwgYW5CdXR0b25zW2FuQnV0dG9ucy5sZW5ndGgtMV0KCQkJCQldOwoJCQkJCSQoYW5TdGF0aWMpLnJlbW92ZUNsYXNzKCBvQ2xhc3Nlcy5zUGFnZUJ1dHRvbisiICIrb0NsYXNzZXMuc1BhZ2VCdXR0b25BY3RpdmUrIiAiK29DbGFzc2VzLnNQYWdlQnV0dG9uU3RhdGljRGlzYWJsZWQgKTsKCQkJCQlpZiAoIGlDdXJyZW50UGFnZSA9PSAxICkKCQkJCQl7CgkJCQkJCWFuU3RhdGljWzBdLmNsYXNzTmFtZSArPSAiICIrb0NsYXNzZXMuc1BhZ2VCdXR0b25TdGF0aWNEaXNhYmxlZDsKCQkJCQkJYW5TdGF0aWNbMV0uY2xhc3NOYW1lICs9ICIgIitvQ2xhc3Nlcy5zUGFnZUJ1dHRvblN0YXRpY0Rpc2FibGVkOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlhblN0YXRpY1swXS5jbGFzc05hbWUgKz0gIiAiK29DbGFzc2VzLnNQYWdlQnV0dG9uOwoJCQkJCQlhblN0YXRpY1sxXS5jbGFzc05hbWUgKz0gIiAiK29DbGFzc2VzLnNQYWdlQnV0dG9uOwoJCQkJCX0KCQkJCQkKCQkJCQlpZiAoIGlQYWdlcyA9PT0gMCB8fCBpQ3VycmVudFBhZ2UgPT0gaVBhZ2VzIHx8IG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGggPT0gLTEgKQoJCQkJCXsKCQkJCQkJYW5TdGF0aWNbMl0uY2xhc3NOYW1lICs9ICIgIitvQ2xhc3Nlcy5zUGFnZUJ1dHRvblN0YXRpY0Rpc2FibGVkOwoJCQkJCQlhblN0YXRpY1szXS5jbGFzc05hbWUgKz0gIiAiK29DbGFzc2VzLnNQYWdlQnV0dG9uU3RhdGljRGlzYWJsZWQ7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCWFuU3RhdGljWzJdLmNsYXNzTmFtZSArPSAiICIrb0NsYXNzZXMuc1BhZ2VCdXR0b247CgkJCQkJCWFuU3RhdGljWzNdLmNsYXNzTmFtZSArPSAiICIrb0NsYXNzZXMuc1BhZ2VCdXR0b247CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfTsKCQoJLyoKCSAqIFZhcmlhYmxlOiBvU29ydAoJICogUHVycG9zZTogIFdyYXBwZXIgZm9yIHRoZSBzb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGluIERhdGFUYWJsZXMKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKiBOb3RlczogICAgVGhlIGZ1bmN0aW9ucyBwcm92aWRlZCBpbiB0aGlzIG9iamVjdCBhcmUgYmFzaWNhbGx5IHN0YW5kYXJkIGphdmFzY3JpcHQgc29ydAoJICogICBmdW5jdGlvbnMgLSB0aGV5IGV4cGVjdCB0d28gaW5wdXRzIHdoaWNoIHRoZXkgdGhlbiBjb21wYXJlIGFuZCB0aGVuIHJldHVybiBhIHByaW9yaXR5CgkgKiAgIHJlc3VsdC4gRm9yIGVhY2ggc29ydCBtZXRob2QgYWRkZWQsIHR3byBmdW5jdGlvbnMgbmVlZCB0byBiZSBkZWZpbmVkLCBhbiBhc2NlbmRpbmcgc29ydCBhbmQKCSAqICAgYSBkZXNjZW5kaW5nIHNvcnQuCgkgKi8KCV9vRXh0Lm9Tb3J0ID0gewoJCS8qCgkJICogdGV4dCBzb3J0aW5nCgkJICovCgkJInN0cmluZy1hc2MiOiBmdW5jdGlvbiAoIGEsIGIgKQoJCXsKCQkJaWYgKCB0eXBlb2YgYSAhPSAnc3RyaW5nJyApIHsgYSA9ICcnOyB9CgkJCWlmICggdHlwZW9mIGIgIT0gJ3N0cmluZycgKSB7IGIgPSAnJzsgfQoJCQl2YXIgeCA9IGEudG9Mb3dlckNhc2UoKTsKCQkJdmFyIHkgPSBiLnRvTG93ZXJDYXNlKCk7CgkJCXJldHVybiAoKHggPCB5KSA/IC0xIDogKCh4ID4geSkgPyAxIDogMCkpOwoJCX0sCgkJCgkJInN0cmluZy1kZXNjIjogZnVuY3Rpb24gKCBhLCBiICkKCQl7CgkJCWlmICggdHlwZW9mIGEgIT0gJ3N0cmluZycgKSB7IGEgPSAnJzsgfQoJCQlpZiAoIHR5cGVvZiBiICE9ICdzdHJpbmcnICkgeyBiID0gJyc7IH0KCQkJdmFyIHggPSBhLnRvTG93ZXJDYXNlKCk7CgkJCXZhciB5ID0gYi50b0xvd2VyQ2FzZSgpOwoJCQlyZXR1cm4gKCh4IDwgeSkgPyAxIDogKCh4ID4geSkgPyAtMSA6IDApKTsKCQl9LAoJCQoJCQoJCS8qCgkJICogaHRtbCBzb3J0aW5nIChpZ25vcmUgaHRtbCB0YWdzKQoJCSAqLwoJCSJodG1sLWFzYyI6IGZ1bmN0aW9uICggYSwgYiApCgkJewoJCQl2YXIgeCA9IGEucmVwbGFjZSggLzwuKj8+L2csICIiICkudG9Mb3dlckNhc2UoKTsKCQkJdmFyIHkgPSBiLnJlcGxhY2UoIC88Lio/Pi9nLCAiIiApLnRvTG93ZXJDYXNlKCk7CgkJCXJldHVybiAoKHggPCB5KSA/IC0xIDogKCh4ID4geSkgPyAxIDogMCkpOwoJCX0sCgkJCgkJImh0bWwtZGVzYyI6IGZ1bmN0aW9uICggYSwgYiApCgkJewoJCQl2YXIgeCA9IGEucmVwbGFjZSggLzwuKj8+L2csICIiICkudG9Mb3dlckNhc2UoKTsKCQkJdmFyIHkgPSBiLnJlcGxhY2UoIC88Lio/Pi9nLCAiIiApLnRvTG93ZXJDYXNlKCk7CgkJCXJldHVybiAoKHggPCB5KSA/IDEgOiAoKHggPiB5KSA/IC0xIDogMCkpOwoJCX0sCgkJCgkJCgkJLyoKCQkgKiBkYXRlIHNvcnRpbmcKCQkgKi8KCQkiZGF0ZS1hc2MiOiBmdW5jdGlvbiAoIGEsIGIgKQoJCXsKCQkJdmFyIHggPSBEYXRlLnBhcnNlKCBhICk7CgkJCXZhciB5ID0gRGF0ZS5wYXJzZSggYiApOwoJCQkKCQkJaWYgKCBpc05hTih4KSB8fCB4PT09IiIgKQoJCQl7CgkJCXggPSBEYXRlLnBhcnNlKCAiMDEvMDEvMTk3MCAwMDowMDowMCIgKTsKCQkJfQoJCQlpZiAoIGlzTmFOKHkpIHx8IHk9PT0iIiApCgkJCXsKCQkJCXkgPQlEYXRlLnBhcnNlKCAiMDEvMDEvMTk3MCAwMDowMDowMCIgKTsKCQkJfQoJCQkKCQkJcmV0dXJuIHggLSB5OwoJCX0sCgkJCgkJImRhdGUtZGVzYyI6IGZ1bmN0aW9uICggYSwgYiApCgkJewoJCQl2YXIgeCA9IERhdGUucGFyc2UoIGEgKTsKCQkJdmFyIHkgPSBEYXRlLnBhcnNlKCBiICk7CgkJCQoJCQlpZiAoIGlzTmFOKHgpIHx8IHg9PT0iIiApCgkJCXsKCQkJeCA9IERhdGUucGFyc2UoICIwMS8wMS8xOTcwIDAwOjAwOjAwIiApOwoJCQl9CgkJCWlmICggaXNOYU4oeSkgfHwgeT09PSIiICkKCQkJewoJCQkJeSA9CURhdGUucGFyc2UoICIwMS8wMS8xOTcwIDAwOjAwOjAwIiApOwoJCQl9CgkJCQoJCQlyZXR1cm4geSAtIHg7CgkJfSwKCQkKCQkKCQkvKgoJCSAqIG51bWVyaWNhbCBzb3J0aW5nCgkJICovCgkJIm51bWVyaWMtYXNjIjogZnVuY3Rpb24gKCBhLCBiICkKCQl7CgkJCXZhciB4ID0gKGE9PSItIiB8fCBhPT09IiIpID8gMCA6IGEqMTsKCQkJdmFyIHkgPSAoYj09Ii0iIHx8IGI9PT0iIikgPyAwIDogYioxOwoJCQlyZXR1cm4geCAtIHk7CgkJfSwKCQkKCQkibnVtZXJpYy1kZXNjIjogZnVuY3Rpb24gKCBhLCBiICkKCQl7CgkJCXZhciB4ID0gKGE9PSItIiB8fCBhPT09IiIpID8gMCA6IGEqMTsKCQkJdmFyIHkgPSAoYj09Ii0iIHx8IGI9PT0iIikgPyAwIDogYioxOwoJCQlyZXR1cm4geSAtIHg7CgkJfQoJfTsKCQoJCgkvKgoJICogVmFyaWFibGU6IGFUeXBlcwoJICogUHVycG9zZTogIENvbnRhaW5lciBmb3IgdGhlIHZhcmlvdXMgdHlwZSBvZiB0eXBlIGRldGVjdGlvbiB0aGF0IGRhdGFUYWJsZXMgc3VwcG9ydHMKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKiBOb3RlczogICAgVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGFycmF5IGFyZSBleHBlY3RlZCB0byBwYXJzZSBhIHN0cmluZyB0byBzZWUgaWYgaXQgaXMgYSBkYXRhCgkgKiAgIHR5cGUgdGhhdCBpdCByZWNvZ25pc2VzLiBJZiBzbyB0aGVuIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0eXBlIChhCgkgKiAgIGNvcnJlc3BvbmRpbmcgc29ydCBmdW5jdGlvbiBzaG91bGQgYmUgZGVmaW5lZCEpLCBpZiB0aGUgdHlwZSBpcyBub3QgcmVjb2duaXNlZCB0aGVuIHRoZQoJICogICBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIG51bGwgc3VjaCB0aGF0IHRoZSBwYXJzZXIgYW5kIG1vdmUgb24gdG8gY2hlY2sgdGhlIG5leHQgdHlwZS4KCSAqICAgTm90ZSB0aGF0IG9yZGVyaW5nIGlzIGltcG9ydGFudCBpbiB0aGlzIGFycmF5IC0gdGhlIGZ1bmN0aW9ucyBhcmUgcHJvY2Vzc2VkIGxpbmVhcmx5LAoJICogICBzdGFydGluZyBhdCBpbmRleCAwLgoJICogICBOb3RlIHRoYXQgdGhlIGlucHV0IGZvciB0aGVzZSBmdW5jdGlvbnMgaXMgYWx3YXlzIGEgc3RyaW5nISBJdCBjYW5ub3QgYmUgYW55IG90aGVyIGRhdGEKCSAqICAgdHlwZQoJICovCglfb0V4dC5hVHlwZXMgPSBbCgkJLyoKCQkgKiBGdW5jdGlvbjogLQoJCSAqIFB1cnBvc2U6ICBDaGVjayB0byBzZWUgaWYgYSBzdHJpbmcgaXMgbnVtZXJpYwoJCSAqIFJldHVybnM6ICBzdHJpbmc6J251bWVyaWMnIG9yIG51bGwKCQkgKiBJbnB1dHM6ICAgbWl4ZWQ6c1RleHQgLSBzdHJpbmcgdG8gY2hlY2sKCQkgKi8KCQlmdW5jdGlvbiAoIHNEYXRhICkKCQl7CgkJCS8qIEFsbG93IHplcm8gbGVuZ3RoIHN0cmluZ3MgYXMgYSBudW1iZXIgKi8KCQkJaWYgKCB0eXBlb2Ygc0RhdGEgPT0gJ251bWJlcicgKQoJCQl7CgkJCQlyZXR1cm4gJ251bWVyaWMnOwoJCQl9CgkJCWVsc2UgaWYgKCB0eXBlb2Ygc0RhdGEgIT0gJ3N0cmluZycgKQoJCQl7CgkJCQlyZXR1cm4gbnVsbDsKCQkJfQoJCQkKCQkJdmFyIHNWYWxpZEZpcnN0Q2hhcnMgPSAiMDEyMzQ1Njc4OS0iOwoJCQl2YXIgc1ZhbGlkQ2hhcnMgPSAiMDEyMzQ1Njc4OS4iOwoJCQl2YXIgQ2hhcjsKCQkJdmFyIGJEZWNpbWFsID0gZmFsc2U7CgkJCQoJCQkvKiBDaGVjayBmb3IgYSB2YWxpZCBmaXJzdCBjaGFyIChubyBwZXJpb2QgYW5kIGFsbG93IG5lZ2F0aXZlcykgKi8KCQkJQ2hhciA9IHNEYXRhLmNoYXJBdCgwKTsgCgkJCWlmIChzVmFsaWRGaXJzdENoYXJzLmluZGV4T2YoQ2hhcikgPT0gLTEpIAoJCQl7CgkJCQlyZXR1cm4gbnVsbDsKCQkJfQoJCQkKCQkJLyogQ2hlY2sgYWxsIHRoZSBvdGhlciBjaGFyYWN0ZXJzIGFyZSB2YWxpZCAqLwoJCQlmb3IgKCB2YXIgaT0xIDsgaTxzRGF0YS5sZW5ndGggOyBpKysgKSAKCQkJewoJCQkJQ2hhciA9IHNEYXRhLmNoYXJBdChpKTsgCgkJCQlpZiAoc1ZhbGlkQ2hhcnMuaW5kZXhPZihDaGFyKSA9PSAtMSkgCgkJCQl7CgkJCQkJcmV0dXJuIG51bGw7CgkJCQl9CgkJCQkKCQkJCS8qIE9ubHkgYWxsb3dlZCBvbmUgZGVjaW1hbCBwbGFjZS4uLiAqLwoJCQkJaWYgKCBDaGFyID09ICIuIiApCgkJCQl7CgkJCQkJaWYgKCBiRGVjaW1hbCApCgkJCQkJewoJCQkJCQlyZXR1cm4gbnVsbDsKCQkJCQl9CgkJCQkJYkRlY2ltYWwgPSB0cnVlOwoJCQkJfQoJCQl9CgkJCQoJCQlyZXR1cm4gJ251bWVyaWMnOwoJCX0sCgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogLQoJCSAqIFB1cnBvc2U6ICBDaGVjayB0byBzZWUgaWYgYSBzdHJpbmcgaXMgYWN0dWFsbHkgYSBmb3JtYXR0ZWQgZGF0ZQoJCSAqIFJldHVybnM6ICBzdHJpbmc6J2RhdGUnIG9yIG51bGwKCQkgKiBJbnB1dHM6ICAgc3RyaW5nOnNUZXh0IC0gc3RyaW5nIHRvIGNoZWNrCgkJICovCgkJZnVuY3Rpb24gKCBzRGF0YSApCgkJewoJCQl2YXIgaVBhcnNlID0gRGF0ZS5wYXJzZShzRGF0YSk7CgkJCWlmICggKGlQYXJzZSAhPT0gbnVsbCAmJiAhaXNOYU4oaVBhcnNlKSkgfHwgKHR5cGVvZiBzRGF0YSA9PSAnc3RyaW5nJyAmJiBzRGF0YS5sZW5ndGggPT09IDApICkKCQkJewoJCQkJcmV0dXJuICdkYXRlJzsKCQkJfQoJCQlyZXR1cm4gbnVsbDsKCQl9LAoJCQoJCS8qCgkJICogRnVuY3Rpb246IC0KCQkgKiBQdXJwb3NlOiAgQ2hlY2sgdG8gc2VlIGlmIGEgc3RyaW5nIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIEhUTUwgc3RyaW5nCgkJICogUmV0dXJuczogIHN0cmluZzonaHRtbCcgb3IgbnVsbAoJCSAqIElucHV0czogICBzdHJpbmc6c1RleHQgLSBzdHJpbmcgdG8gY2hlY2sKCQkgKi8KCQlmdW5jdGlvbiAoIHNEYXRhICkKCQl7CgkJCWlmICggdHlwZW9mIHNEYXRhID09ICdzdHJpbmcnICYmIHNEYXRhLmluZGV4T2YoJzwnKSAhPSAtMSAmJiBzRGF0YS5pbmRleE9mKCc+JykgIT0gLTEgKQoJCQl7CgkJCQlyZXR1cm4gJ2h0bWwnOwoJCQl9CgkJCXJldHVybiBudWxsOwoJCX0KCV07CgkKCS8qCgkgKiBGdW5jdGlvbjogZm5WZXJzaW9uQ2hlY2sKCSAqIFB1cnBvc2U6ICBDaGVjayBhIHZlcnNpb24gc3RyaW5nIGFnYWluc3QgdGhpcyB2ZXJzaW9uIG9mIERhdGFUYWJsZXMuIFVzZWZ1bCBmb3IgcGx1Zy1pbnMKCSAqIFJldHVybnM6ICBib29sOnRydWUgLXRoaXMgdmVyc2lvbiBvZiBEYXRhVGFibGVzIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIHJlcXVpcmVkIHZlcnNpb24KCSAqICAgICAgICAgICAgICAgIGZhbHNlIC10aGlzIHZlcnNpb24gb2YgRGF0YVRhbGVzIGlzIG5vdCBzdWl0YWJsZQoJICogSW5wdXRzOiAgIHN0cmluZzpzVmVyc2lvbiAtIHRoZSB2ZXJzaW9uIHRvIGNoZWNrIGFnYWluc3QuIE1heSBiZSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CgkgKiAgICAgICAgICAgICAiYSIsICJhLmIiIG9yICJhLmIuYyIKCSAqIE5vdGVzOiAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgb25seSBjaGVjayB0aGUgZmlyc3QgdGhyZWUgcGFydHMgb2YgYSB2ZXJzaW9uIHN0cmluZy4gSXQgaXMKCSAqICAgYXNzdW1lZCB0aGF0IGJldGEgYW5kIGRldiB2ZXJzaW9ucyB3aWxsIG1lZXQgdGhlIHJlcXVpcmVtZW50cy4gVGhpcyBtaWdodCBjaGFuZ2UgaW4gZnV0dXJlCgkgKi8KCV9vRXh0LmZuVmVyc2lvbkNoZWNrID0gZnVuY3Rpb24oIHNWZXJzaW9uICkKCXsKCQkvKiBUaGlzIGlzIGNoZWFwLCBidXQgdmVyeSBlZmZlY3RpdmUgKi8KCQl2YXIgZm5aUGFkID0gZnVuY3Rpb24gKFpwYWQsIGNvdW50KQoJCXsKCQkJd2hpbGUoWnBhZC5sZW5ndGggPCBjb3VudCkgewoJCQkJWnBhZCArPSAnMCc7CgkJCX0KCQkJcmV0dXJuIFpwYWQ7CgkJfTsKCQl2YXIgYVRoaXMgPSBfb0V4dC5zVmVyc2lvbi5zcGxpdCgnLicpOwoJCXZhciBhVGhhdCA9IHNWZXJzaW9uLnNwbGl0KCcuJyk7CgkJdmFyIHNUaGlzID0gJycsIHNUaGF0ID0gJyc7CgkJCgkJZm9yICggdmFyIGk9MCwgaUxlbj1hVGhhdC5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJc1RoaXMgKz0gZm5aUGFkKCBhVGhpc1tpXSwgMyApOwoJCQlzVGhhdCArPSBmblpQYWQoIGFUaGF0W2ldLCAzICk7CgkJfQoJCQoJCXJldHVybiBwYXJzZUludChzVGhpcywgMTApID49IHBhcnNlSW50KHNUaGF0LCAxMCk7Cgl9OwoJCgkvKgoJICogVmFyaWFibGU6IF9vRXh0ZXJuQ29uZmlnCgkgKiBQdXJwb3NlOiAgU3RvcmUgaW5mb3JtYXRpb24gZm9yIERhdGFUYWJsZXMgdG8gYWNjZXNzIGdsb2JhbGx5IGFib3V0IG90aGVyIGluc3RhbmNlcwoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqLwoJX29FeHQuX29FeHRlcm5Db25maWcgPSB7CgkJLyogaW50OmlOZXh0VW5pcXVlIC0gbmV4dCB1bmlxdWUgbnVtYmVyIGZvciBhbiBpbnN0YW5jZSAqLwoJCSJpTmV4dFVuaXF1ZSI6IDAKCX07CgkKCQoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogU2VjdGlvbiAtIERhdGFUYWJsZXMgcHJvdG90eXBlCgkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLwoJCgkvKgoJICogRnVuY3Rpb246IGRhdGFUYWJsZQoJICogUHVycG9zZTogIERhdGFUYWJsZXMgaW5mb3JtYXRpb24KCSAqIFJldHVybnM6ICAtCgkgKiBJbnB1dHM6ICAgb2JqZWN0Om9Jbml0IC0gaW5pdGFsaXNhdGlvbiBvcHRpb25zIGZvciB0aGUgdGFibGUKCSAqLwoJJC5mbi5kYXRhVGFibGUgPSBmdW5jdGlvbiggb0luaXQgKQoJewoJCS8qCgkJICogRnVuY3Rpb246IGNsYXNzU2V0dGluZ3MKCQkgKiBQdXJwb3NlOiAgU2V0dGluZ3MgY29udGFpbmVyIGZ1bmN0aW9uIGZvciBhbGwgJ2NsYXNzJyBwcm9wZXJ0aWVzIHdoaWNoIGFyZSByZXF1aXJlZAoJCSAqICAgYnkgZGF0YVRhYmxlcwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIC0KCQkgKi8KCQlmdW5jdGlvbiBjbGFzc1NldHRpbmdzICgpCgkJewoJCQl0aGlzLmZuUmVjb3Jkc1RvdGFsID0gZnVuY3Rpb24gKCkKCQkJewoJCQkJaWYgKCB0aGlzLm9GZWF0dXJlcy5iU2VydmVyU2lkZSApIHsKCQkJCQlyZXR1cm4gcGFyc2VJbnQodGhpcy5faVJlY29yZHNUb3RhbCwgMTApOwoJCQkJfSBlbHNlIHsKCQkJCQlyZXR1cm4gdGhpcy5haURpc3BsYXlNYXN0ZXIubGVuZ3RoOwoJCQkJfQoJCQl9OwoJCQkKCQkJdGhpcy5mblJlY29yZHNEaXNwbGF5ID0gZnVuY3Rpb24gKCkKCQkJewoJCQkJaWYgKCB0aGlzLm9GZWF0dXJlcy5iU2VydmVyU2lkZSApIHsKCQkJCQlyZXR1cm4gcGFyc2VJbnQodGhpcy5faVJlY29yZHNEaXNwbGF5LCAxMCk7CgkJCQl9IGVsc2UgewoJCQkJCXJldHVybiB0aGlzLmFpRGlzcGxheS5sZW5ndGg7CgkJCQl9CgkJCX07CgkJCQoJCQl0aGlzLmZuRGlzcGxheUVuZCA9IGZ1bmN0aW9uICgpCgkJCXsKCQkJCWlmICggdGhpcy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgKSB7CgkJCQkJaWYgKCB0aGlzLm9GZWF0dXJlcy5iUGFnaW5hdGUgPT09IGZhbHNlIHx8IHRoaXMuX2lEaXNwbGF5TGVuZ3RoID09IC0xICkgewoJCQkJCQlyZXR1cm4gdGhpcy5faURpc3BsYXlTdGFydCt0aGlzLmFpRGlzcGxheS5sZW5ndGg7CgkJCQkJfSBlbHNlIHsKCQkJCQkJcmV0dXJuIE1hdGgubWluKCB0aGlzLl9pRGlzcGxheVN0YXJ0K3RoaXMuX2lEaXNwbGF5TGVuZ3RoLCAKCQkJCQkJCXRoaXMuX2lSZWNvcmRzRGlzcGxheSApOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJcmV0dXJuIHRoaXMuX2lEaXNwbGF5RW5kOwoJCQkJfQoJCQl9OwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IG9JbnN0YW5jZQoJCQkgKiBQdXJwb3NlOiAgVGhlIERhdGFUYWJsZXMgb2JqZWN0IGZvciB0aGlzIHRhYmxlCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MgCgkJCSAqLwoJCQl0aGlzLm9JbnN0YW5jZSA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogc0luc3RhbmNlCgkJCSAqIFB1cnBvc2U6ICBVbmlxdWUgaWRlbmRpZmllciBmb3IgZWFjaCBpbnN0YW5jZSBvZiB0aGUgRGF0YVRhYmxlcyBvYmplY3QKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncyAKCQkJICovCgkJCXRoaXMuc0luc3RhbmNlID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBvRmVhdHVyZXMKCQkJICogUHVycG9zZTogIEluZGljYXRlIHRoZSBlbmFibGVtZW50IG9mIGtleSBkYXRhVGFibGUgZmVhdHVyZXMKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncyAKCQkJICovCgkJCXRoaXMub0ZlYXR1cmVzID0gewoJCQkJImJQYWdpbmF0ZSI6IHRydWUsCgkJCQkiYkxlbmd0aENoYW5nZSI6IHRydWUsCgkJCQkiYkZpbHRlciI6IHRydWUsCgkJCQkiYlNvcnQiOiB0cnVlLAoJCQkJImJJbmZvIjogdHJ1ZSwKCQkJCSJiQXV0b1dpZHRoIjogdHJ1ZSwKCQkJCSJiUHJvY2Vzc2luZyI6IGZhbHNlLAoJCQkJImJTb3J0Q2xhc3NlcyI6IHRydWUsCgkJCQkiYlN0YXRlU2F2ZSI6IGZhbHNlLAoJCQkJImJTZXJ2ZXJTaWRlIjogZmFsc2UsCgkJCQkiYkRlZmVyUmVuZGVyIjogZmFsc2UKCQkJfTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBvU2Nyb2xsCgkJCSAqIFB1cnBvc2U6ICBDb250YWluZXIgZm9yIHNjcm9sbGluZyBvcHRpb25zCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MgCgkJCSAqLwoJCQl0aGlzLm9TY3JvbGwgPSB7CgkJCQkic1giOiAiIiwKCQkJCSJzWElubmVyIjogIiIsCgkJCQkic1kiOiAiIiwKCQkJCSJiQ29sbGFwc2UiOiBmYWxzZSwKCQkJCSJiSW5maW5pdGUiOiBmYWxzZSwKCQkJCSJpTG9hZEdhcCI6IDEwMCwKCQkJCSJpQmFyV2lkdGgiOiAwLAoJCQkJImJBdXRvQ3NzIjogdHJ1ZQoJCQl9OwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFhbkZlYXR1cmVzCgkJCSAqIFB1cnBvc2U6ICBBcnJheSByZWZlcmVuY2luZyB0aGUgbm9kZXMgd2hpY2ggYXJlIHVzZWQgZm9yIHRoZSBmZWF0dXJlcwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzIAoJCQkgKiBOb3RlczogICAgVGhlIHBhcmFtZXRlcnMgb2YgdGhpcyBvYmplY3QgbWF0Y2ggd2hhdCBpcyBhbGxvd2VkIGJ5IHNEb20gLSBpLmUuCgkJCSAqICAgJ2wnIC0gTGVuZ3RoIGNoYW5naW5nCgkJCSAqICAgJ2YnIC0gRmlsdGVyaW5nIGlucHV0CgkJCSAqICAgJ3QnIC0gVGhlIHRhYmxlIQoJCQkgKiAgICdpJyAtIEluZm9ybWF0aW9uCgkJCSAqICAgJ3AnIC0gUGFnaW5hdGlvbgoJCQkgKiAgICdyJyAtIHBSb2Nlc3NpbmcKCQkJICovCgkJCXRoaXMuYWFuRmVhdHVyZXMgPSBbXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBvTGFuZ3VhZ2UKCQkJICogUHVycG9zZTogIFN0b3JlIHRoZSBsYW5ndWFnZSBzdHJpbmdzIHVzZWQgYnkgZGF0YVRhYmxlcwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqIE5vdGVzOiAgICBUaGUgd29yZHMgaW4gdGhlIGZvcm1hdCBfVkFSXyBhcmUgdmFyaWFibGVzIHdoaWNoIGFyZSBkeW5hbWljYWxseSByZXBsYWNlZAoJCQkgKiAgIGJ5IGphdmFzY3JpcHQKCQkJICovCgkJCXRoaXMub0xhbmd1YWdlID0gewoJCQkgICAgInNQcm9jZXNzaW5nIjogIlNwcmFjw7p2YSBzYS4uLiIsCgkJCSAgICAic0xlbmd0aE1lbnUiOiAiVWthenVqZSBzYSBfTUVOVV8gcG9sb8W+aWVrIiwKCQkJICAgICJzWmVyb1JlY29yZHMiOiAiTmVuYcWhbGkgc2Egem9kcG92ZWRhasO6Y2UgesOhem5hbXkiLAoJCQkgICAgInNFbXB0eVRhYmxlIjogIlRhYnXEvmthIG5lbcOhIGTDoXRhIiwKCQkJICAgICJzTG9hZGluZ1JlY29yZHMiOiAiTW9tZW50IHByb3PDrW0uLi4iLAoJCQkgICAgInNJbmZvIjogIm9kIF9TVEFSVF8gZG8gX0VORF8geiBjZWxrb3bDvWNoIF9UT1RBTF8gcG9sb8W+aWVrIiwKCQkJICAgICJzSW5mb0VtcHR5IjogIk9kIDAgZG8gMCB6IDAgcG9sb8W+aWVrIiwKCQkJCSJzSW5mb0ZpbHRlcmVkIjogIiIsCgkJCQkic0luZm9Qb3N0Rml4IjogIiIsCgkJCQkic1NlYXJjaCI6ICJTZWFyY2g6IiwKCQkJCSJzVXJsIjogIiIsCgkJCQkib1BhZ2luYXRlIjogewoJCQkJCSJzRmlyc3QiOiAgICAiRmlyc3QiLAoJCQkJCSJzUHJldmlvdXMiOiAiUHJldmlvdXMiLAoJCQkJCSJzTmV4dCI6ICAgICAiTmV4dCIsCgkJCQkJInNMYXN0IjogICAgICJMYXN0IgoJCQkJfSwKCQkJCSJmbkluZm9DYWxsYmFjayI6IG51bGwKCQkJfTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBhb0RhdGEKCQkJICogUHVycG9zZTogIFN0b3JlIGRhdGEgaW5mb3JtYXRpb24KCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncyAKCQkJICogTm90ZXM6ICAgIFRoaXMgaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKCQkJICogICBpbnQ6IF9pSWQgLSBpbnRlcm5hbCBpZCBmb3IgdHJhY2tpbmcKCQkJICogICBhcnJheTogX2FEYXRhIC0gaW50ZXJuYWwgZGF0YSAtIHVzZWQgZm9yIHNvcnRpbmcgLyBmaWx0ZXJpbmcgZXRjCgkJCSAqICAgbm9kZTogblRyIC0gZGlzcGxheSBub2RlCgkJCSAqICAgYXJyYXkgbm9kZTogX2FuSGlkZGVuIC0gaGlkZGVuIFREIG5vZGVzCgkJCSAqICAgc3RyaW5nOiBfc1Jvd1N0cmlwZQoJCQkgKi8KCQkJdGhpcy5hb0RhdGEgPSBbXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBhaURpc3BsYXkKCQkJICogUHVycG9zZTogIEFycmF5IG9mIGluZGV4ZXMgd2hpY2ggYXJlIGluIHRoZSBjdXJyZW50IGRpc3BsYXkgKGFmdGVyIGZpbHRlcmluZyBldGMpCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuYWlEaXNwbGF5ID0gW107CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYWlEaXNwbGF5TWFzdGVyCgkJCSAqIFB1cnBvc2U6ICBBcnJheSBvZiBpbmRleGVzIGZvciBkaXNwbGF5IC0gbm8gZmlsdGVyaW5nCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuYWlEaXNwbGF5TWFzdGVyID0gW107CgkJCQkJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFvQ29sdW1ucwoJCQkgKiBQdXJwb3NlOiAgU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBjb2x1bW4gdGhhdCBpcyBpbiB1c2UKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncyAKCQkJICovCgkJCXRoaXMuYW9Db2x1bW5zID0gW107CgkJCQkJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFvSGVhZGVyCgkJCSAqIFB1cnBvc2U6ICBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFibGUncyBoZWFkZXIKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncyAKCQkJICovCgkJCXRoaXMuYW9IZWFkZXIgPSBbXTsKCQkJCQkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYW9Gb290ZXIKCQkJICogUHVycG9zZTogIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWJsZSdzIGZvb3RlcgoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzIAoJCQkgKi8KCQkJdGhpcy5hb0Zvb3RlciA9IFtdOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGlOZXh0SWQKCQkJICogUHVycG9zZTogIFN0b3JlIHRoZSBuZXh0IHVuaXF1ZSBpZCB0byBiZSB1c2VkIGZvciBhIG5ldyByb3cKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncyAKCQkJICovCgkJCXRoaXMuaU5leHRJZCA9IDA7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYXNEYXRhU2VhcmNoCgkJCSAqIFB1cnBvc2U6ICBTZWFyY2ggZGF0YSBhcnJheSBmb3IgcmVndWxhciBleHByZXNzaW9uIHNlYXJjaGluZwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmFzRGF0YVNlYXJjaCA9IFtdOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IG9QcmV2aW91c1NlYXJjaAoJCQkgKiBQdXJwb3NlOiAgU3RvcmUgdGhlIHByZXZpb3VzIHNlYXJjaCBpbmNhc2Ugd2Ugd2FudCB0byBmb3JjZSBhIHJlLXNlYXJjaAoJCQkgKiAgIG9yIGNvbXBhcmUgdGhlIG9sZCBzZWFyY2ggdG8gYSBuZXcgb25lCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMub1ByZXZpb3VzU2VhcmNoID0gewoJCQkJInNTZWFyY2giOiAiIiwKCQkJCSJiUmVnZXgiOiBmYWxzZSwKCQkJCSJiU21hcnQiOiB0cnVlCgkJCX07CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYW9QcmVTZWFyY2hDb2xzCgkJCSAqIFB1cnBvc2U6ICBTdG9yZSB0aGUgcHJldmlvdXMgc2VhcmNoIGZvciBlYWNoIGNvbHVtbgoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmFvUHJlU2VhcmNoQ29scyA9IFtdOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFhU29ydGluZwoJCQkgKiBQdXJwb3NlOiAgU29ydGluZyBpbmZvcm1hdGlvbgoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqIE5vdGVzOiAgICBJbmRleCAwIC0gY29sdW1uIG51bWJlcgoJCQkgKiAgICAgICAgICAgSW5kZXggMSAtIGN1cnJlbnQgc29ydGluZyBkaXJlY3Rpb24KCQkJICogICAgICAgICAgIEluZGV4IDIgLSBpbmRleCBvZiBhc1NvcnRpbmcgZm9yIHRoaXMgY29sdW1uCgkJCSAqLwoJCQl0aGlzLmFhU29ydGluZyA9IFsgWzAsICdhc2MnLCAwXSBdOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFhU29ydGluZ0ZpeGVkCgkJCSAqIFB1cnBvc2U6ICBTb3J0aW5nIGluZm9ybWF0aW9uIHRoYXQgaXMgYWx3YXlzIGFwcGxpZWQKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5hYVNvcnRpbmdGaXhlZCA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYXNTdHJpcENsYXNzZXMKCQkJICogUHVycG9zZTogIENsYXNzZXMgdG8gdXNlIGZvciB0aGUgc3RyaXBpbmcgb2YgYSB0YWJsZQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmFzU3RyaXBDbGFzc2VzID0gW107CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYXNEZXN0b3J5U3RyaXBzCgkJCSAqIFB1cnBvc2U6ICBJZiByZXN0b3JpbmcgYSB0YWJsZSAtIHdlIHNob3VsZCByZXN0b3JlIGl0J3Mgc3RyaXBpbmcgY2xhc3NlcyBhcyB3ZWxsCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuYXNEZXN0b3J5U3RyaXBzID0gW107CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogc0Rlc3Ryb3lXaWR0aAoJCQkgKiBQdXJwb3NlOiAgSWYgcmVzdG9yaW5nIGEgdGFibGUgLSB3ZSBzaG91bGQgcmVzdG9yZSBpdCdzIHdpZHRoCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuc0Rlc3Ryb3lXaWR0aCA9IDA7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogZm5Sb3dDYWxsYmFjawoJCQkgKiBQdXJwb3NlOiAgQ2FsbCB0aGlzIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUgYSByb3cgaXMgaW5zZXJ0ZWQgKGRyYXcpCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuZm5Sb3dDYWxsYmFjayA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogZm5IZWFkZXJDYWxsYmFjawoJCQkgKiBQdXJwb3NlOiAgQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBoZWFkZXIgb24gZWFjaCBkcmF3CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuZm5IZWFkZXJDYWxsYmFjayA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogZm5Gb290ZXJDYWxsYmFjawoJCQkgKiBQdXJwb3NlOiAgQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBmb290ZXIgb24gZWFjaCBkcmF3CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuZm5Gb290ZXJDYWxsYmFjayA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYW9EcmF3Q2FsbGJhY2sKCQkJICogUHVycG9zZTogIEFycmF5IG9mIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgZHJhdyBjYWxsYmFjayBmdW5jdGlvbnMKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKiBOb3RlczogICAgRWFjaCBhcnJheSBlbGVtZW50IGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKCQkJICogICBmdW5jdGlvbjpmbiAtIGZ1bmN0aW9uIHRvIGNhbGwKCQkJICogICBzdHJpbmc6c05hbWUgLSBuYW1lIGNhbGxiYWNrIChmZWF0dXJlKS4gdXNlZnVsIGZvciBhcnJhbmdpbmcgYXJyYXkKCQkJICovCgkJCXRoaXMuYW9EcmF3Q2FsbGJhY2sgPSBbXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBmblByZURyYXdDYWxsYmFjawoJCQkgKiBQdXJwb3NlOiAgQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGp1c3QgYmVmb3JlIHRoZSB0YWJsZSBpcyByZWRyYXduLiBBIHJldHVybiBvZiBmYWxzZQoJCQkgKiAgICAgICAgICAgd2lsbCBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgZHJhdy4KCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5mblByZURyYXdDYWxsYmFjayA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogZm5Jbml0Q29tcGxldGUKCQkJICogUHVycG9zZTogIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHRoZSB0YWJsZSBoYXMgYmVlbiBpbml0YWxpc2VkCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuZm5Jbml0Q29tcGxldGUgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IHNUYWJsZUlkCgkJCSAqIFB1cnBvc2U6ICBDYWNoZSB0aGUgdGFibGUgSUQgZm9yIHF1aWNrIGFjY2VzcwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLnNUYWJsZUlkID0gIiI7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogblRhYmxlCgkJCSAqIFB1cnBvc2U6ICBDYWNoZSB0aGUgdGFibGUgbm9kZSBmb3IgcXVpY2sgYWNjZXNzCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMublRhYmxlID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBuVEhlYWQKCQkJICogUHVycG9zZTogIFBlcm1hbmVudCByZWYgdG8gdGhlIHRoZWFkIGVsZW1lbnQKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5uVEhlYWQgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IG5URm9vdAoJCQkgKiBQdXJwb3NlOiAgUGVybWFuZW50IHJlZiB0byB0aGUgdGZvb3QgZWxlbWVudCAtIGlmIGl0IGV4aXN0cwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLm5URm9vdCA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogblRCb2R5CgkJCSAqIFB1cnBvc2U6ICBQZXJtYW5lbnQgcmVmIHRvIHRoZSB0Ym9keSBlbGVtZW50CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMublRCb2R5ID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBuVGFibGVXcmFwcGVyCgkJCSAqIFB1cnBvc2U6ICBDYWNoZSB0aGUgd3JhcHBlciBub2RlIChjb250YWlucyBhbGwgRGF0YVRhYmxlcyBjb250cm9sbGVkIGVsZW1lbnRzKQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLm5UYWJsZVdyYXBwZXIgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGJEZWZlckxvYWRpbmcKCQkJICogUHVycG9zZTogIEluZGljYXRlIGlmIHdoZW4gdXNpbmcgc2VydmVyLXNpZGUgcHJvY2Vzc2luZyB0aGUgbG9hZGluZyBvZiBkYXRhIAoJCQkgKiAgICAgICAgICAgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBzZWNvbmQgZHJhdwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmJEZWZlckxvYWRpbmcgPSBmYWxzZTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBiSW5pdGlhbGlzZWQKCQkJICogUHVycG9zZTogIEluZGljYXRlIGlmIGFsbCByZXF1aXJlZCBpbmZvcm1hdGlvbiBoYXMgYmVlbiByZWFkIGluCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuYkluaXRpYWxpc2VkID0gZmFsc2U7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYW9PcGVuUm93cwoJCQkgKiBQdXJwb3NlOiAgSW5mb3JtYXRpb24gYWJvdXQgb3BlbiByb3dzCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICogTm90ZXM6ICAgIEhhcyB0aGUgcGFyYW1ldGVycyAnblRyJyBhbmQgJ25QYXJlbnQnCgkJCSAqLwoJCQl0aGlzLmFvT3BlblJvd3MgPSBbXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBzRG9tCgkJCSAqIFB1cnBvc2U6ICBEaWN0YXRlIHRoZSBwb3NpdGlvbmluZyB0aGF0IHRoZSBjcmVhdGVkIGVsZW1lbnRzIHdpbGwgdGFrZQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqIE5vdGVzOiAgICAKCQkJICogICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFsbG93ZWQ6CgkJCSAqICAgICAnbCcgLSBMZW5ndGggY2hhbmdpbmcKCQkJICogICAgICdmJyAtIEZpbHRlcmluZyBpbnB1dAoJCQkgKiAgICAgJ3QnIC0gVGhlIHRhYmxlIQoJCQkgKiAgICAgJ2knIC0gSW5mb3JtYXRpb24KCQkJICogICAgICdwJyAtIFBhZ2luYXRpb24KCQkJICogICAgICdyJyAtIHBSb2Nlc3NpbmcKCQkJICogICBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgYWxsb3dlZDoKCQkJICogICAgICdIJyAtIGpRdWVyeVVJIHRoZW1lICJoZWFkZXIiIGNsYXNzZXMKCQkJICogICAgICdGJyAtIGpRdWVyeVVJIHRoZW1lICJmb290ZXIiIGNsYXNzZXMKCQkJICogICBUaGUgZm9sbG93aW5nIHN5bnRheCBpcyBleHBlY3RlZDoKCQkJICogICAgICc8JyBhbmQgJz4nIC0gZGl2IGVsZW1lbnRzCgkJCSAqICAgICAnPCJjbGFzcyIgYW5kICc+JyAtIGRpdiB3aXRoIGEgY2xhc3MKCQkJICogICBFeGFtcGxlczoKCQkJICogICAgICc8IndyYXBwZXIiZmxpcHQ+JywgJzxsZjx0PmlwPicKCQkJICovCgkJCXRoaXMuc0RvbSA9ICdsZnJ0aXAnOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IHNQYWdpbmF0aW9uVHlwZQoJCQkgKiBQdXJwb3NlOiAgTm90ZSB3aGljaCB0eXBlIG9mIHNvcnRpbmcgc2hvdWxkIGJlIHVzZWQKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5zUGFnaW5hdGlvblR5cGUgPSAidHdvX2J1dHRvbiI7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogaUNvb2tpZUR1cmF0aW9uCgkJCSAqIFB1cnBvc2U6ICBUaGUgY29va2llIGR1cmF0aW9uIChmb3IgYlN0YXRlU2F2ZSkgaW4gc2Vjb25kcyAtIGRlZmF1bHQgMiBob3VycwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmlDb29raWVEdXJhdGlvbiA9IDYwICogNjAgKiAyOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IHNDb29raWVQcmVmaXgKCQkJICogUHVycG9zZTogIFRoZSBjb29raWUgbmFtZSBwcmVmaXgKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5zQ29va2llUHJlZml4ID0gIlNwcnlNZWRpYV9EYXRhVGFibGVzXyI7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogZm5Db29raWVDYWxsYmFjawoJCQkgKiBQdXJwb3NlOiAgQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGNvb2tpZSBjcmVhdGlvbgoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmZuQ29va2llQ2FsbGJhY2sgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFvU3RhdGVTYXZlCgkJCSAqIFB1cnBvc2U6ICBBcnJheSBvZiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHN0YXRlIHNhdmluZwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqIE5vdGVzOiAgICBFYWNoIGFycmF5IGVsZW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgoJCQkgKiAgIGZ1bmN0aW9uOmZuIC0gZnVuY3Rpb24gdG8gY2FsbC4gVGFrZXMgdHdvIHBhcmFtZXRlcnMsIG9TZXR0aW5ncyBhbmQgdGhlIEpTT04gc3RyaW5nIHRvCgkJCSAqICAgICBzYXZlIHRoYXQgaGFzIGJlZW4gdGh1cyBmYXIgY3JlYXRlZC4gUmV0dXJucyBhIEpTT04gc3RyaW5nIHRvIGJlIGluc2VydGVkIGludG8gYSAKCQkJICogICAgIGpzb24gb2JqZWN0IChpLmUuICcicGFyYW0iOiBbIDAsIDEsIDJdJykKCQkJICogICBzdHJpbmc6c05hbWUgLSBuYW1lIG9mIGNhbGxiYWNrCgkJCSAqLwoJCQl0aGlzLmFvU3RhdGVTYXZlID0gW107CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYW9TdGF0ZUxvYWQKCQkJICogUHVycG9zZTogIEFycmF5IG9mIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3Igc3RhdGUgbG9hZGluZwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqIE5vdGVzOiAgICBFYWNoIGFycmF5IGVsZW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgoJCQkgKiAgIGZ1bmN0aW9uOmZuIC0gZnVuY3Rpb24gdG8gY2FsbC4gVGFrZXMgdHdvIHBhcmFtZXRlcnMsIG9TZXR0aW5ncyBhbmQgdGhlIG9iamVjdCBzdG9yZWQuCgkJCSAqICAgICBNYXkgcmV0dXJuIGZhbHNlIHRvIGNhbmNlbCBzdGF0ZSBsb2FkaW5nLgoJCQkgKiAgIHN0cmluZzpzTmFtZSAtIG5hbWUgb2YgY2FsbGJhY2sKCQkJICovCgkJCXRoaXMuYW9TdGF0ZUxvYWQgPSBbXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBvTG9hZGVkU3RhdGUKCQkJICogUHVycG9zZTogIFN0YXRlIHRoYXQgd2FzIGxvYWRlZCBmcm9tIHRoZSBjb29raWUuIFVzZWZ1bCBmb3IgYmFjayByZWZlcmVuY2UKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5vTG9hZGVkU3RhdGUgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IHNBamF4U291cmNlCgkJCSAqIFB1cnBvc2U6ICBTb3VyY2UgdXJsIGZvciBBSkFYIGRhdGEgZm9yIHRoZSB0YWJsZQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLnNBamF4U291cmNlID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBzQWpheERhdGFQcm9wCgkJCSAqIFB1cnBvc2U6ICBQcm9wZXJ0eSBmcm9tIGEgZ2l2ZW4gb2JqZWN0IGZyb20gd2hpY2ggdG8gcmVhZCB0aGUgdGFibGUgZGF0YSBmcm9tLiBUaGlzIGNhbgoJCQkgKiAgICAgICAgICAgYmUgYW4gZW1wdHkgc3RyaW5nICh3aGVuIG5vdCBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nKSwgaW4gd2hpY2ggY2FzZSBpdCBpcyAKCQkJICogICAgICAgICAgIGFzc3VtZWQgYW4gYW4gYXJyYXkgaXMgZ2l2ZW4gZGlyZWN0bHkuCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuc0FqYXhEYXRhUHJvcCA9ICdhYURhdGEnOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGJBamF4RGF0YUdldAoJCQkgKiBQdXJwb3NlOiAgTm90ZSBpZiBkcmF3IHNob3VsZCBiZSBibG9ja2VkIHdoaWxlIGdldHRpbmcgZGF0YQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmJBamF4RGF0YUdldCA9IHRydWU7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZToganFYSFIKCQkJICogUHVycG9zZTogIFRoZSBsYXN0IGpRdWVyeSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgZm9yIHNlcnZlci1zaWRlIGRhdGEgZ2F0aGVyaW5nLiAKCQkJICogICAgICAgICAgIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHdvcmtpbmcgd2l0aCB0aGUgWEhSIGluZm9ybWF0aW9uIGluIG9uZSBvZiB0aGUgY2FsbGJhY2tzCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuanFYSFIgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGZuU2VydmVyRGF0YQoJCQkgKiBQdXJwb3NlOiAgRnVuY3Rpb24gdG8gZ2V0IHRoZSBzZXJ2ZXItc2lkZSBkYXRhIC0gY2FuIGJlIG92ZXJydWxlZCBieSB0aGUgZGV2ZWxvcGVyCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuZm5TZXJ2ZXJEYXRhID0gZnVuY3Rpb24gKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBzZXR0aW5ncyApIHsKCQkJCXNldHRpbmdzLmpxWEhSID0gJC5hamF4KCB7CgkJCQkJInVybCI6IHVybCwKCQkJCQkiZGF0YSI6IGRhdGEsCgkJCQkJInN1Y2Nlc3MiOiBjYWxsYmFjaywKCQkJCQkiZGF0YVR5cGUiOiAianNvbiIsCgkJCQkJImNhY2hlIjogZmFsc2UsCgkJCQkJImVycm9yIjogZnVuY3Rpb24gKHhociwgZXJyb3IsIHRocm93bikgewoJCQkJCQlpZiAoIGVycm9yID09ICJwYXJzZXJlcnJvciIgKSB7CgkJCQkJCQlhbGVydCggIkRhdGFUYWJsZXMgd2FybmluZzogSlNPTiBkYXRhIGZyb20gc2VydmVyIGNvdWxkIG5vdCBiZSBwYXJzZWQuICIrCgkJCQkJCQkJIlRoaXMgaXMgY2F1c2VkIGJ5IGEgSlNPTiBmb3JtYXR0aW5nIGVycm9yLiIgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0gKTsKCQkJfTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBmbkZvcm1hdE51bWJlcgoJCQkgKiBQdXJwb3NlOiAgRm9ybWF0IG51bWJlcnMgZm9yIGRpc3BsYXkKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5mbkZvcm1hdE51bWJlciA9IGZ1bmN0aW9uICggaUluICkKCQkJewoJCQkJaWYgKCBpSW4gPCAxMDAwICkKCQkJCXsKCQkJCQkvKiBBIHNtYWxsIG9wdGltaXNhdGlvbiBmb3Igd2hhdCBpcyBsaWtlbHkgdG8gYmUgdGhlIHZhc3QgbWFqb3JpdHkgb2YgdXNlIGNhc2VzICovCgkJCQkJcmV0dXJuIGlJbjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl2YXIgcz0oaUluKyIiKSwgYT1zLnNwbGl0KCIiKSwgb3V0PSIiLCBpTGVuPXMubGVuZ3RoOwoJCQkJCQoJCQkJCWZvciAoIHZhciBpPTAgOyBpPGlMZW4gOyBpKysgKQoJCQkJCXsKCQkJCQkJaWYgKCBpJTMgPT09IDAgJiYgaSAhPT0gMCApCgkJCQkJCXsKCQkJCQkJCW91dCA9ICcsJytvdXQ7CgkJCQkJCX0KCQkJCQkJb3V0ID0gYVtpTGVuLWktMV0rb3V0OwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBvdXQ7CgkJCX07CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYUxlbmd0aE1lbnUKCQkJICogUHVycG9zZTogIExpc3Qgb2Ygb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGZvciB0aGUgdXNlciBzZWxlY3RhYmxlIGxlbmd0aCBtZW51CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICogTm90ZTogICAgIFRoaXMgdmFyYWlibGUgY2FuIHRha2UgZm9yIGZvcm0gb2YgYSAxRCBhcnJheSwgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgYW5kIHRoZSAKCQkJICogICBkaXNwbGF5ZWQgdmFsdWUgaW4gdGhlIG1lbnUgYXJlIHRoZSBzYW1lLCBvciBhIDJEIGFycmF5IGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIGNvbWVzCgkJCSAqICAgZnJvbSB0aGUgZmlyc3QgYXJyYXksIGFuZCB0aGUgZGlzcGxheWVkIHZhbHVlIHRvIHRoZSBlbmQgdXNlciBjb21lcyBmcm9tIHRoZSBzZWNvbmQKCQkJICogICBhcnJheS4gMkQgZXhhbXBsZTogWyBbIDEwLCAyNSwgNTAsIDEwMCwgLTEgXSwgWyAxMCwgMjUsIDUwLCAxMDAsICdBbGwnIF0gXTsKCQkJICovCgkJCXRoaXMuYUxlbmd0aE1lbnUgPSBbIDEwLCAyNSwgNTAsIDEwMCBdOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGlEcmF3CgkJCSAqIFB1cnBvc2U6ICBDb3VudGVyIGZvciB0aGUgZHJhd3MgdGhhdCB0aGUgdGFibGUgZG9lcy4gQWxzbyB1c2VkIGFzIGEgdHJhY2tlciBmb3IKCQkJICogICBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuaURyYXcgPSAwOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGJEcmF3aW5nCgkJCSAqIFB1cnBvc2U6ICBJbmRpY2F0ZSBpZiBhIHJlZHJhdyBpcyBiZWluZyBkb25lIC0gdXNlZnVsIGZvciBBamF4CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuYkRyYXdpbmcgPSAwOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGlEcmF3RXJyb3IKCQkJICogUHVycG9zZTogIExhc3QgZHJhdyBlcnJvcgoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmlEcmF3RXJyb3IgPSAtMTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBfaURpc3BsYXlMZW5ndGgsIF9pRGlzcGxheVN0YXJ0LCBfaURpc3BsYXlFbmQKCQkJICogUHVycG9zZTogIERpc3BsYXkgbGVuZ3RoIHZhcmlhYmxlcwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqIE5vdGVzOiAgICBUaGVzZSB2YXJpYWJsZSBtdXN0IE5PVCBiZSB1c2VkIGV4dGVybmFsbHkgdG8gZ2V0IHRoZSBkYXRhIGxlbmd0aC4gUmF0aGVyLCB1c2UKCQkJICogICB0aGUgZm5SZWNvcmRzVG90YWwoKSAoZXRjKSBmdW5jdGlvbnMuCgkJCSAqLwoJCQl0aGlzLl9pRGlzcGxheUxlbmd0aCA9IDEwOwoJCQl0aGlzLl9pRGlzcGxheVN0YXJ0ID0gMDsKCQkJdGhpcy5faURpc3BsYXlFbmQgPSAxMDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBfaVJlY29yZHNUb3RhbCwgX2lSZWNvcmRzRGlzcGxheQoJCQkgKiBQdXJwb3NlOiAgRGlzcGxheSBsZW5ndGggdmFyaWFibGVzIHVzZWQgZm9yIHNlcnZlciBzaWRlIHByb2Nlc3NpbmcKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKiBOb3RlczogICAgVGhlc2UgdmFyaWFibGUgbXVzdCBOT1QgYmUgdXNlZCBleHRlcm5hbGx5IHRvIGdldCB0aGUgZGF0YSBsZW5ndGguIFJhdGhlciwgdXNlCgkJCSAqICAgdGhlIGZuUmVjb3Jkc1RvdGFsKCkgKGV0YykgZnVuY3Rpb25zLgoJCQkgKi8KCQkJdGhpcy5faVJlY29yZHNUb3RhbCA9IDA7CgkJCXRoaXMuX2lSZWNvcmRzRGlzcGxheSA9IDA7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYkpVSQoJCQkgKiBQdXJwb3NlOiAgU2hvdWxkIHdlIGFkZCB0aGUgbWFya3VwIG5lZWRlZCBmb3IgalF1ZXJ5IFVJIHRoZW1pbmc/CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuYkpVSSA9IGZhbHNlOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IG9DbGFzc2VzCgkJCSAqIFB1cnBvc2U6ICBTaG91bGQgd2UgYWRkIHRoZSBtYXJrdXAgbmVlZGVkIGZvciBqUXVlcnkgVUkgdGhlbWluZz8KCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5vQ2xhc3NlcyA9IF9vRXh0Lm9TdGRDbGFzc2VzOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGJGaWx0ZXJlZCBhbmQgYlNvcnRlZAoJCQkgKiBQdXJwb3NlOiAgRmxhZ3MgdG8gYWxsb3cgY2FsbGJhY2sgZnVuY3Rpb25zIHRvIHNlZSB3aGF0IGFjdGlvbnMgaGF2ZSBiZWVuIHBlcmZvcm1lZAoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmJGaWx0ZXJlZCA9IGZhbHNlOwoJCQl0aGlzLmJTb3J0ZWQgPSBmYWxzZTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBiU29ydENlbGxzVG9wCgkJCSAqIFB1cnBvc2U6ICBJbmRpY2F0ZSB0aGF0IGlmIG11bHRpcGxlIHJvd3MgYXJlIGluIHRoZSBoZWFkZXIgYW5kIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUKCQkJICogICAgICAgICAgIHVuaXF1ZSBjZWxsIHBlciBjb2x1bW4sIGlmIHRoZSB0b3Agb25lICh0cnVlKSBvciBib3R0b20gb25lIChmYWxzZSkgc2hvdWxkCgkJCSAqICAgICAgICAgICBiZSB1c2VkIGZvciBzb3J0aW5nIC8gdGl0bGUgYnkgRGF0YVRhYmxlcwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmJTb3J0Q2VsbHNUb3AgPSBmYWxzZTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBvSW5pdAoJCQkgKiBQdXJwb3NlOiAgSW5pdGlhbGlzYXRpb24gb2JqZWN0IHRoYXQgaXMgdXNlZCBmb3IgdGhlIHRhYmxlCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMub0luaXQgPSBudWxsOwoJCX0KCQkKCQkvKgoJCSAqIFZhcmlhYmxlOiBvQXBpCgkJICogUHVycG9zZTogIENvbnRhaW5lciBmb3IgcHVibGljbHkgZXhwb3NlZCAncHJpdmF0ZScgZnVuY3Rpb25zCgkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUKCQkgKi8KCQl0aGlzLm9BcGkgPSB7fTsKCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBBUEkgZnVuY3Rpb25zCgkJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5EcmF3CgkJICogUHVycG9zZTogIFJlZHJhdyB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBib29sOmJDb21wbGV0ZSAtIFJlZmlsdGVyIGFuZCByZXNvcnQgKGlmIGVuYWJsZWQpIHRoZSB0YWJsZSBiZWZvcmUgdGhlIGRyYXcuCgkJICogICAgICAgICAgICAgT3B0aW9uYWw6IGRlZmF1bHQgLSB0cnVlCgkJICovCgkJdGhpcy5mbkRyYXcgPSBmdW5jdGlvbiggYkNvbXBsZXRlICkKCQl7CgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQkJaWYgKCB0eXBlb2YgYkNvbXBsZXRlICE9ICd1bmRlZmluZWQnICYmIGJDb21wbGV0ZSA9PT0gZmFsc2UgKQoJCQl7CgkJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlfZm5SZURyYXcoIG9TZXR0aW5ncyApOwoJCQl9CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmbkZpbHRlcgoJCSAqIFB1cnBvc2U6ICBGaWx0ZXIgdGhlIGlucHV0IGJhc2VkIG9uIGRhdGEKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBzdHJpbmc6c0lucHV0IC0gc3RyaW5nIHRvIGZpbHRlciB0aGUgdGFibGUgb24KCQkgKiAgICAgICAgICAgaW50OmlDb2x1bW4gLSBvcHRpb25hbCAtIGNvbHVtbiB0byBsaW1pdCBmaWx0ZXJpbmcgdG8KCQkgKiAgICAgICAgICAgYm9vbDpiUmVnZXggLSBvcHRpb25hbCAtIHRyZWF0IGFzIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBub3QgLSBkZWZhdWx0IGZhbHNlCgkJICogICAgICAgICAgIGJvb2w6YlNtYXJ0IC0gb3B0aW9uYWwgLSBwZXJmb3JtIHNtYXJ0IGZpbHRlcmluZyBvciBub3QgLSBkZWZhdWx0IHRydWUKCQkgKiAgICAgICAgICAgYm9vbDpiU2hvd0dsb2JhbCAtIG9wdGlvbmFsIC0gc2hvdyB0aGUgaW5wdXQgZ2xvYmFsIGZpbHRlciBpbiBpdCdzIGlucHV0IGJveChlcykKCQkgKiAgICAgICAgICAgICAgLSBkZWZhdWx0IHRydWUKCQkgKi8KCQl0aGlzLmZuRmlsdGVyID0gZnVuY3Rpb24oIHNJbnB1dCwgaUNvbHVtbiwgYlJlZ2V4LCBiU21hcnQsIGJTaG93R2xvYmFsICkKCQl7CgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQkJCgkJCWlmICggIW9TZXR0aW5ncy5vRmVhdHVyZXMuYkZpbHRlciApCgkJCXsKCQkJCXJldHVybjsKCQkJfQoJCQkKCQkJaWYgKCB0eXBlb2YgYlJlZ2V4ID09ICd1bmRlZmluZWQnICkKCQkJewoJCQkJYlJlZ2V4ID0gZmFsc2U7CgkJCX0KCQkJCgkJCWlmICggdHlwZW9mIGJTbWFydCA9PSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCWJTbWFydCA9IHRydWU7CgkJCX0KCQkJCgkJCWlmICggdHlwZW9mIGJTaG93R2xvYmFsID09ICd1bmRlZmluZWQnICkKCQkJewoJCQkJYlNob3dHbG9iYWwgPSB0cnVlOwoJCQl9CgkJCQoJCQlpZiAoIHR5cGVvZiBpQ29sdW1uID09ICJ1bmRlZmluZWQiIHx8IGlDb2x1bW4gPT09IG51bGwgKQoJCQl7CgkJCQkvKiBHbG9iYWwgZmlsdGVyICovCgkJCQlfZm5GaWx0ZXJDb21wbGV0ZSggb1NldHRpbmdzLCB7CgkJCQkJInNTZWFyY2giOnNJbnB1dCwKCQkJCQkiYlJlZ2V4IjogYlJlZ2V4LAoJCQkJCSJiU21hcnQiOiBiU21hcnQKCQkJCX0sIDEgKTsKCQkJCQoJCQkJaWYgKCBiU2hvd0dsb2JhbCAmJiB0eXBlb2Ygb1NldHRpbmdzLmFhbkZlYXR1cmVzLmYgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCXZhciBuID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzLmY7CgkJCQkJZm9yICggdmFyIGk9MCwgaUxlbj1uLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQkJewoJCQkJCQkkKCdpbnB1dCcsIG5baV0pLnZhbCggc0lucHV0ICk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogU2luZ2xlIGNvbHVtbiBmaWx0ZXIgKi8KCQkJCW9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbIGlDb2x1bW4gXS5zU2VhcmNoID0gc0lucHV0OwoJCQkJb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1sgaUNvbHVtbiBdLmJSZWdleCA9IGJSZWdleDsKCQkJCW9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbIGlDb2x1bW4gXS5iU21hcnQgPSBiU21hcnQ7CgkJCQlfZm5GaWx0ZXJDb21wbGV0ZSggb1NldHRpbmdzLCBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLCAxICk7CgkJCX0KCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuU2V0dGluZ3MKCQkgKiBQdXJwb3NlOiAgR2V0IHRoZSBzZXR0aW5ncyBmb3IgYSBwYXJ0aWN1bGFyIHRhYmxlIGZvciBleHRlcm4uIG1hbmlwdWxhdGlvbgoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIC0KCQkgKi8KCQl0aGlzLmZuU2V0dGluZ3MgPSBmdW5jdGlvbiggbk5vZGUgICkKCQl7CgkJCXJldHVybiBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuVmVyc2lvbkNoZWNrCgkJICogTm90ZXM6ICAgIFRoZSBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyB0aGUgJ3N0YXRpYycgZnVuY3Rpb24gcHJvdmlkZWQgaW4gdGhlIGV4dCB2YXJpYWJsZQoJCSAqLwoJCXRoaXMuZm5WZXJzaW9uQ2hlY2sgPSBfb0V4dC5mblZlcnNpb25DaGVjazsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmblNvcnQKCQkgKiBQdXJwb3NlOiAgU29ydCB0aGUgdGFibGUgYnkgYSBwYXJ0aWN1bGFyIHJvdwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIGludDppQ29sIC0gdGhlIGRhdGEgaW5kZXggdG8gc29ydCBvbi4gTm90ZSB0aGF0IHRoaXMgd2lsbAoJCSAqICAgbm90IG1hdGNoIHRoZSAnZGlzcGxheSBpbmRleCcgaWYgeW91IGhhdmUgaGlkZGVuIGRhdGEgZW50cmllcwoJCSAqLwoJCXRoaXMuZm5Tb3J0ID0gZnVuY3Rpb24oIGFhU29ydCApCgkJewoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCW9TZXR0aW5ncy5hYVNvcnRpbmcgPSBhYVNvcnQ7CgkJCV9mblNvcnQoIG9TZXR0aW5ncyApOwoJCX07CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5Tb3J0TGlzdGVuZXIKCQkgKiBQdXJwb3NlOiAgQXR0YWNoIGEgc29ydCBsaXN0ZW5lciB0byBhbiBlbGVtZW50IGZvciBhIGdpdmVuIGNvbHVtbgoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG5vZGU6bk5vZGUgLSB0aGUgZWxlbWVudCB0byBhdHRhY2ggdGhlIHNvcnQgbGlzdGVuZXIgdG8KCQkgKiAgICAgICAgICAgaW50OmlDb2x1bW4gLSB0aGUgY29sdW1uIHRoYXQgYSBjbGljayBvbiB0aGlzIG5vZGUgd2lsbCBzb3J0IG9uCgkJICogICAgICAgICAgIGZ1bmN0aW9uOmZuQ2FsbGJhY2sgLSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHNvcnQgaXMgcnVuIC0gb3B0aW9uYWwKCQkgKi8KCQl0aGlzLmZuU29ydExpc3RlbmVyID0gZnVuY3Rpb24oIG5Ob2RlLCBpQ29sdW1uLCBmbkNhbGxiYWNrICkKCQl7CgkJCV9mblNvcnRBdHRhY2hMaXN0ZW5lciggX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICksIG5Ob2RlLCBpQ29sdW1uLAoJCQkgCWZuQ2FsbGJhY2sgKTsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuQWRkRGF0YQoJCSAqIFB1cnBvc2U6ICBBZGQgbmV3IHJvdyhzKSBpbnRvIHRoZSB0YWJsZQoJCSAqIFJldHVybnM6ICBhcnJheSBpbnQ6IGFycmF5IG9mIGluZGV4ZXMgKGFvRGF0YSkgd2hpY2ggaGF2ZSBiZWVuIGFkZGVkICh6ZXJvIGxlbmd0aCBvbiBlcnJvcikKCQkgKiBJbnB1dHM6ICAgYXJyYXk6bURhdGEgLSB0aGUgZGF0YSB0byBiZSBhZGRlZC4gVGhlIGxlbmd0aCBtdXN0IG1hdGNoCgkJICogICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgZGF0YSBmcm9tIHRoZSBET00KCQkgKiAgICAgICAgICAgICBvcgoJCSAqICAgICAgICAgICAgIGFycmF5IGFycmF5Om1EYXRhIC0gMkQgYXJyYXkgb2YgZGF0YSB0byBiZSBhZGRlZAoJCSAqICAgICAgICAgICBib29sOmJSZWRyYXcgLSByZWRyYXcgdGhlIHRhYmxlIG9yIG5vdCAtIGRlZmF1bHQgdHJ1ZQoJCSAqIE5vdGVzOiAgICBXYXJuaW5nIC0gdGhlIHJlZmlsdGVyIGhlcmUgd2lsbCBjYXVzZSB0aGUgdGFibGUgdG8gcmVkcmF3CgkJICogICAgICAgICAgICAgc3RhcnRpbmcgYXQgemVybwoJCSAqIE5vdGVzOiAgICBUaGFua3MgdG8gWWVraW1vdiBEZW5pcyBmb3IgY29udHJpYnV0aW5nIHRoZSBiYXNpcyBmb3IgdGhpcyBmdW5jdGlvbiEKCQkgKi8KCQl0aGlzLmZuQWRkRGF0YSA9IGZ1bmN0aW9uKCBtRGF0YSwgYlJlZHJhdyApCgkJewoJCQlpZiAoIG1EYXRhLmxlbmd0aCA9PT0gMCApCgkJCXsKCQkJCXJldHVybiBbXTsKCQkJfQoJCQkKCQkJdmFyIGFpUmV0dXJuID0gW107CgkJCXZhciBpVGVzdDsKCQkJCgkJCS8qIEZpbmQgc2V0dGluZ3MgZnJvbSB0YWJsZSBub2RlICovCgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQkJCgkJCS8qIENoZWNrIGlmIHdlIHdhbnQgdG8gYWRkIG11bHRpcGxlIHJvd3Mgb3Igbm90ICovCgkJCWlmICggdHlwZW9mIG1EYXRhWzBdID09ICJvYmplY3QiICkKCQkJewoJCQkJZm9yICggdmFyIGk9MCA7IGk8bURhdGEubGVuZ3RoIDsgaSsrICkKCQkJCXsKCQkJCQlpVGVzdCA9IF9mbkFkZERhdGEoIG9TZXR0aW5ncywgbURhdGFbaV0gKTsKCQkJCQlpZiAoIGlUZXN0ID09IC0xICkKCQkJCQl7CgkJCQkJCXJldHVybiBhaVJldHVybjsKCQkJCQl9CgkJCQkJYWlSZXR1cm4ucHVzaCggaVRlc3QgKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlUZXN0ID0gX2ZuQWRkRGF0YSggb1NldHRpbmdzLCBtRGF0YSApOwoJCQkJaWYgKCBpVGVzdCA9PSAtMSApCgkJCQl7CgkJCQkJcmV0dXJuIGFpUmV0dXJuOwoJCQkJfQoJCQkJYWlSZXR1cm4ucHVzaCggaVRlc3QgKTsKCQkJfQoJCQkKCQkJb1NldHRpbmdzLmFpRGlzcGxheSA9IG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQkJCgkJCWlmICggdHlwZW9mIGJSZWRyYXcgPT0gJ3VuZGVmaW5lZCcgfHwgYlJlZHJhdyApCgkJCXsKCQkJCV9mblJlRHJhdyggb1NldHRpbmdzICk7CgkJCX0KCQkJcmV0dXJuIGFpUmV0dXJuOwoJCX07CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5EZWxldGVSb3cKCQkgKiBQdXJwb3NlOiAgUmVtb3ZlIGEgcm93IGZvciB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgYXJyYXk6YVJldHVybiAtIHRoZSByb3cgdGhhdCB3YXMgZGVsZXRlZAoJCSAqIElucHV0czogICBtaXhlZDptVGFyZ2V0IC0gCgkJICogICAgICAgICAgICAgaW50OiAtIGluZGV4IG9mIGFvRGF0YSB0byBiZSBkZWxldGVkLCBvcgoJCSAqICAgICAgICAgICAgIG5vZGUoVFIpOiAtIFRSIGVsZW1lbnQgeW91IHdhbnQgdG8gZGVsZXRlCgkJICogICAgICAgICAgIGZ1bmN0aW9uOmZuQ2FsbEJhY2sgLSBjYWxsYmFjayBmdW5jdGlvbiAtIGRlZmF1bHQgbnVsbAoJCSAqICAgICAgICAgICBib29sOmJSZWRyYXcgLSByZWRyYXcgdGhlIHRhYmxlIG9yIG5vdCAtIGRlZmF1bHQgdHJ1ZQoJCSAqLwoJCXRoaXMuZm5EZWxldGVSb3cgPSBmdW5jdGlvbiggbVRhcmdldCwgZm5DYWxsQmFjaywgYlJlZHJhdyApCgkJewoJCQkvKiBGaW5kIHNldHRpbmdzIGZyb20gdGFibGUgbm9kZSAqLwoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCXZhciBpLCBpQU9EYXRhSW5kZXg7CgkJCQoJCQlpQU9EYXRhSW5kZXggPSAodHlwZW9mIG1UYXJnZXQgPT0gJ29iamVjdCcpID8gCgkJCQlfZm5Ob2RlVG9EYXRhSW5kZXgob1NldHRpbmdzLCBtVGFyZ2V0KSA6IG1UYXJnZXQ7CgkJCQoJCQkvKiBSZXR1cm4gdGhlIGRhdGEgYXJyYXkgZnJvbSB0aGlzIHJvdyAqLwoJCQl2YXIgb0RhdGEgPSBvU2V0dGluZ3MuYW9EYXRhLnNwbGljZSggaUFPRGF0YUluZGV4LCAxICk7CgkJCQoJCQkvKiBSZW1vdmUgdGhlIHRhcmdldCByb3cgZnJvbSB0aGUgc2VhcmNoIGFycmF5ICovCgkJCXZhciBpRGlzcGxheUluZGV4ID0gJC5pbkFycmF5KCBpQU9EYXRhSW5kZXgsIG9TZXR0aW5ncy5haURpc3BsYXkgKTsKCQkJb1NldHRpbmdzLmFzRGF0YVNlYXJjaC5zcGxpY2UoIGlEaXNwbGF5SW5kZXgsIDEgKTsKCQkJCgkJCS8qIERlbGV0ZSBmcm9tIHRoZSBkaXNwbGF5IGFycmF5cyAqLwoJCQlfZm5EZWxldGVJbmRleCggb1NldHRpbmdzLmFpRGlzcGxheU1hc3RlciwgaUFPRGF0YUluZGV4ICk7CgkJCV9mbkRlbGV0ZUluZGV4KCBvU2V0dGluZ3MuYWlEaXNwbGF5LCBpQU9EYXRhSW5kZXggKTsKCQkJCgkJCS8qIElmIHRoZXJlIGlzIGEgdXNlciBjYWxsYmFjayBmdW5jdGlvbiAtIGNhbGwgaXQgKi8KCQkJaWYgKCB0eXBlb2YgZm5DYWxsQmFjayA9PSAiZnVuY3Rpb24iICkKCQkJewoJCQkJZm5DYWxsQmFjay5jYWxsKCB0aGlzLCBvU2V0dGluZ3MsIG9EYXRhICk7CgkJCX0KCQkJCgkJCS8qIENoZWNrIGZvciBhbiAnb3ZlcmZsb3cnIHRoZXkgY2FzZSBmb3IgZGlzbGF5aW5nIHRoZSB0YWJsZSAqLwoJCQlpZiAoIG9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA+PSBvU2V0dGluZ3MuYWlEaXNwbGF5Lmxlbmd0aCApCgkJCXsKCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCAtPSBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoOwoJCQkJaWYgKCBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPCAwICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCQkJfQoJCQl9CgkJCQoJCQlpZiAoIHR5cGVvZiBiUmVkcmF3ID09ICd1bmRlZmluZWQnIHx8IGJSZWRyYXcgKQoJCQl7CgkJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCX0KCQkJCgkJCXJldHVybiBvRGF0YTsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuQ2xlYXJUYWJsZQoJCSAqIFB1cnBvc2U6ICBRdWlja2x5IGFuZCBzaW1wbHkgY2xlYXIgYSB0YWJsZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIGJvb2w6YlJlZHJhdyAtIHJlZHJhdyB0aGUgdGFibGUgb3Igbm90IC0gZGVmYXVsdCB0cnVlCgkJICogTm90ZXM6ICAgIFRoYW5rcyB0byBZZWtpbW92IERlbmlzIGZvciBjb250cmlidXRpbmcgdGhlIGJhc2lzIGZvciB0aGlzIGZ1bmN0aW9uIQoJCSAqLwoJCXRoaXMuZm5DbGVhclRhYmxlID0gZnVuY3Rpb24oIGJSZWRyYXcgKQoJCXsKCQkJLyogRmluZCBzZXR0aW5ncyBmcm9tIHRhYmxlIG5vZGUgKi8KCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQlfZm5DbGVhclRhYmxlKCBvU2V0dGluZ3MgKTsKCQkJCgkJCWlmICggdHlwZW9mIGJSZWRyYXcgPT0gJ3VuZGVmaW5lZCcgfHwgYlJlZHJhdyApCgkJCXsKCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQl9CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmbk9wZW4KCQkgKiBQdXJwb3NlOiAgT3BlbiBhIGRpc3BsYXkgcm93IChhcHBlbmQgYSByb3cgYWZ0ZXIgdGhlIHJvdyBpbiBxdWVzdGlvbikKCQkgKiBSZXR1cm5zOiAgbm9kZTpuTmV3Um93IC0gdGhlIHJvdyBvcGVuZWQKCQkgKiBJbnB1dHM6ICAgbm9kZTpuVHIgLSB0aGUgdGFibGUgcm93IHRvICdvcGVuJwoJCSAqICAgICAgICAgICBzdHJpbmd8bm9kZXxqUXVlcnk6bUh0bWwgLSB0aGUgSFRNTCB0byBwdXQgaW50byB0aGUgcm93CgkJICogICAgICAgICAgIHN0cmluZzpzQ2xhc3MgLSBjbGFzcyB0byBnaXZlIHRoZSBuZXcgVEQgY2VsbAoJCSAqLwoJCXRoaXMuZm5PcGVuID0gZnVuY3Rpb24oIG5UciwgbUh0bWwsIHNDbGFzcyApCgkJewoJCQkvKiBGaW5kIHNldHRpbmdzIGZyb20gdGFibGUgbm9kZSAqLwoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCQoJCQkvKiB0aGUgb2xkIG9wZW4gb25lIGlmIHRoZXJlIGlzIG9uZSAqLwoJCQl0aGlzLmZuQ2xvc2UoIG5UciApOwoJCQkKCQkJdmFyIG5OZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwoJCQl2YXIgbk5ld0NlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwoJCQluTmV3Um93LmFwcGVuZENoaWxkKCBuTmV3Q2VsbCApOwoJCQluTmV3Q2VsbC5jbGFzc05hbWUgPSBzQ2xhc3M7CgkJCW5OZXdDZWxsLmNvbFNwYW4gPSBfZm5WaXNibGVDb2x1bW5zKCBvU2V0dGluZ3MgKTsKCgkJCWlmKCB0eXBlb2YgbUh0bWwuanF1ZXJ5ICE9ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBtSHRtbCA9PSAib2JqZWN0IiApCgkJCXsKCQkJCW5OZXdDZWxsLmFwcGVuZENoaWxkKCBtSHRtbCApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJbk5ld0NlbGwuaW5uZXJIVE1MID0gbUh0bWw7CgkJCX0KCgkJCS8qIElmIHRoZSBuVHIgaXNuJ3Qgb24gdGhlIHBhZ2UgYXQgdGhlIG1vbWVudCAtIHRoZW4gd2UgZG9uJ3QgaW5zZXJ0IGF0IHRoZSBtb21lbnQgKi8KCQkJdmFyIG5UcnMgPSAkKCd0cicsIG9TZXR0aW5ncy5uVEJvZHkpOwoJCQlpZiAoICQuaW5BcnJheShuVHIsIG5UcnMpICE9IC0xICkKCQkJewoJCQkJJChuTmV3Um93KS5pbnNlcnRBZnRlcihuVHIpOwoJCQl9CgkJCQoJCQlvU2V0dGluZ3MuYW9PcGVuUm93cy5wdXNoKCB7CgkJCQkiblRyIjogbk5ld1JvdywKCQkJCSJuUGFyZW50IjogblRyCgkJCX0gKTsKCQkJCgkJCXJldHVybiBuTmV3Um93OwoJCX07CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5DbG9zZQoJCSAqIFB1cnBvc2U6ICBDbG9zZSBhIGRpc3BsYXkgcm93CgkJICogUmV0dXJuczogIGludDogMCAoc3VjY2Vzcykgb3IgMSAoZmFpbGVkKQoJCSAqIElucHV0czogICBub2RlOm5UciAtIHRoZSB0YWJsZSByb3cgdG8gJ2Nsb3NlJwoJCSAqLwoJCXRoaXMuZm5DbG9zZSA9IGZ1bmN0aW9uKCBuVHIgKQoJCXsKCQkJLyogRmluZCBzZXR0aW5ncyBmcm9tIHRhYmxlIG5vZGUgKi8KCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQkKCQkJZm9yICggdmFyIGk9MCA7IGk8b1NldHRpbmdzLmFvT3BlblJvd3MubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3MuYW9PcGVuUm93c1tpXS5uUGFyZW50ID09IG5UciApCgkJCQl7CgkJCQkJdmFyIG5UclBhcmVudCA9IG9TZXR0aW5ncy5hb09wZW5Sb3dzW2ldLm5Uci5wYXJlbnROb2RlOwoJCQkJCWlmICggblRyUGFyZW50ICkKCQkJCQl7CgkJCQkJCS8qIFJlbW92ZSBpdCBpZiBpdCBpcyBjdXJyZW50bHkgb24gZGlzcGxheSAqLwoJCQkJCQluVHJQYXJlbnQucmVtb3ZlQ2hpbGQoIG9TZXR0aW5ncy5hb09wZW5Sb3dzW2ldLm5UciApOwoJCQkJCX0KCQkJCQlvU2V0dGluZ3MuYW9PcGVuUm93cy5zcGxpY2UoIGksIDEgKTsKCQkJCQlyZXR1cm4gMDsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gMTsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuR2V0RGF0YQoJCSAqIFB1cnBvc2U6ICBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgZGF0YSB3aGljaCBpcyB1c2VkIHRvIG1ha2UgdXAgdGhlIHRhYmxlCgkJICogUmV0dXJuczogIGFycmF5IGFycmF5IHN0cmluZzogMmQgZGF0YSBhcnJheSAoW3Jvd11bY29sdW1uXSkgb3IgYXJyYXkgc3RyaW5nOiAxZCBkYXRhIGFycmF5CgkJICogICAgICAgICAgIG9yIHN0cmluZyBpZiBib3RoIHJvdyBhbmQgY29sdW1uIGFyZSBnaXZlbgoJCSAqIElucHV0czogICBtaXhlZDptUm93IC0gb3B0aW9uYWwgLSBpZiBub3QgcHJlc2VudCwgdGhlbiB0aGUgZnVsbCAyRCBhcnJheSBmb3IgdGhlIHRhYmxlIAoJCSAqICAgICAgICAgICAgIGlmIGdpdmVuIHRoZW46CgkJICogICAgICAgICAgICAgICBpbnQ6IC0gcmV0dXJuIGRhdGEgb2JqZWN0IGZvciBhb0RhdGEgZW50cnkgb2YgdGhpcyBpbmRleAoJCSAqICAgICAgICAgICAgICAgbm9kZShUUik6IC0gcmV0dXJuIGRhdGEgb2JqZWN0IGZvciB0aGlzIFRSIGVsZW1lbnQKCQkgKiAgICAgICAgICAgaW50OmlDb2wgLSBvcHRpb25hbCAtIHRoZSBjb2x1bW4gdGhhdCB5b3Ugd2FudCB0aGUgZGF0YSBvZi4gVGhpcyB3aWxsIHRha2UgaW50bwoJCSAqICAgICAgICAgICAgICAgYWNjb3VudCBtRGF0YVByb3AgYW5kIHJldHVybiB0aGUgdmFsdWUgRGF0YVRhYmxlcyB1c2VzIGZvciB0aGlzIGNvbHVtbgoJCSAqLwoJCXRoaXMuZm5HZXREYXRhID0gZnVuY3Rpb24oIG1Sb3csIGlDb2wgKQoJCXsKCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQkKCQkJaWYgKCB0eXBlb2YgbVJvdyAhPSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCXZhciBpUm93ID0gKHR5cGVvZiBtUm93ID09ICdvYmplY3QnKSA/IAoJCQkJCV9mbk5vZGVUb0RhdGFJbmRleChvU2V0dGluZ3MsIG1Sb3cpIDogbVJvdzsKCQkJCQoJCQkJaWYgKCB0eXBlb2YgaUNvbCAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJcmV0dXJuIF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGlDb2wsICcnICk7CgkJCQl9CgkJCQlyZXR1cm4gKHR5cGVvZiBvU2V0dGluZ3MuYW9EYXRhW2lSb3ddICE9ICd1bmRlZmluZWQnKSA/IAoJCQkJCW9TZXR0aW5ncy5hb0RhdGFbaVJvd10uX2FEYXRhIDogbnVsbDsKCQkJfQoJCQlyZXR1cm4gX2ZuR2V0RGF0YU1hc3Rlciggb1NldHRpbmdzICk7CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmbkdldE5vZGVzCgkJICogUHVycG9zZTogIFJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBUUiBub2RlcyB1c2VkIGZvciBkcmF3aW5nIHRoZSB0YWJsZQoJCSAqIFJldHVybnM6ICBhcnJheSBub2RlOiBUUiBlbGVtZW50cwoJCSAqICAgICAgICAgICBvcgoJCSAqICAgICAgICAgICBub2RlIChpZiBpUm93IHNwZWNpZmllZCkKCQkgKiBJbnB1dHM6ICAgaW50OmlSb3cgLSBvcHRpb25hbCAtIGlmIHByZXNlbnQgdGhlbiB0aGUgYXJyYXkgcmV0dXJuZWQgd2lsbCBiZSB0aGUgbm9kZSBmb3IKCQkgKiAgICAgICAgICAgICB0aGUgcm93IHdpdGggdGhlIGluZGV4ICdpUm93JwoJCSAqLwoJCXRoaXMuZm5HZXROb2RlcyA9IGZ1bmN0aW9uKCBpUm93ICkKCQl7CgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQkJCgkJCWlmICggdHlwZW9mIGlSb3cgIT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQlyZXR1cm4gKHR5cGVvZiBvU2V0dGluZ3MuYW9EYXRhW2lSb3ddICE9ICd1bmRlZmluZWQnKSA/IG9TZXR0aW5ncy5hb0RhdGFbaVJvd10ublRyIDogbnVsbDsKCQkJfQoJCQlyZXR1cm4gX2ZuR2V0VHJOb2Rlcyggb1NldHRpbmdzICk7CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmbkdldFBvc2l0aW9uCgkJICogUHVycG9zZTogIEdldCB0aGUgYXJyYXkgaW5kZXhlcyBvZiBhIHBhcnRpY3VsYXIgY2VsbCBmcm9tIGl0J3MgRE9NIGVsZW1lbnQKCQkgKiBSZXR1cm5zOiAgaW50OiAtIHJvdyBpbmRleCwgb3IgYXJyYXlbIGludCwgaW50LCBpbnQgXTogLSByb3cgaW5kZXgsIGNvbHVtbiBpbmRleCAodmlzaWJsZSkKCQkgKiAgICAgICAgICAgICBhbmQgY29sdW1uIGluZGV4IGluY2x1ZGluZyBoaWRkZW4gY29sdW1ucwoJCSAqIElucHV0czogICBub2RlOm5Ob2RlIC0gdGhpcyBjYW4gZWl0aGVyIGJlIGEgVFIsIFREIG9yIFRIIGluIHRoZSB0YWJsZSdzIGJvZHksIHRoZSByZXR1cm4gaXMKCQkgKiAgICAgICAgICAgICBkZXBlbmRlbnQgb24gdGhpcyBpbnB1dAoJCSAqLwoJCXRoaXMuZm5HZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKCBuTm9kZSApCgkJewoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCXZhciBzTm9kZU5hbWUgPSBuTm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpOwoJCQkKCQkJaWYgKCBzTm9kZU5hbWUgPT0gIlRSIiApCgkJCXsKCQkJCXJldHVybiBfZm5Ob2RlVG9EYXRhSW5kZXgob1NldHRpbmdzLCBuTm9kZSk7CgkJCX0KCQkJZWxzZSBpZiAoIHNOb2RlTmFtZSA9PSAiVEQiIHx8IHNOb2RlTmFtZSA9PSAiVEgiICkKCQkJewoJCQkJdmFyIGlEYXRhSW5kZXggPSBfZm5Ob2RlVG9EYXRhSW5kZXgob1NldHRpbmdzLCBuTm9kZS5wYXJlbnROb2RlKTsKCQkJCXZhciBhbkNlbGxzID0gX2ZuR2V0VGROb2Rlcyggb1NldHRpbmdzLCBpRGF0YUluZGV4ICk7CgoJCQkJZm9yICggdmFyIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCWlmICggYW5DZWxsc1tpXSA9PSBuTm9kZSApCgkJCQkJewoJCQkJCQlyZXR1cm4gWyBpRGF0YUluZGV4LCBfZm5Db2x1bW5JbmRleFRvVmlzaWJsZShvU2V0dGluZ3MsIGkgKSwgaSBdOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlyZXR1cm4gbnVsbDsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuVXBkYXRlCgkJICogUHVycG9zZTogIFVwZGF0ZSBhIHRhYmxlIGNlbGwgb3Igcm93IC0gdGhpcyBtZXRob2Qgd2lsbCBhY2NlcHQgZWl0aGVyIGEgc2luZ2xlIHZhbHVlIHRvCgkJICogICAgICAgICAgICAgdXBkYXRlIHRoZSBjZWxsIHdpdGgsIGFuIGFycmF5IG9mIHZhbHVlcyB3aXRoIG9uZSBlbGVtZW50IGZvciBlYWNoIGNvbHVtbiBvcgoJCSAqICAgICAgICAgICAgIGFuIG9iamVjdCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIG9yaWdpbmFsIGRhdGEgc291cmNlLiBUaGUgZnVuY3Rpb24gaXMKCQkgKiAgICAgICAgICAgICBzZWxmLXJlZmVyZW5jaW5nIGluIG9yZGVyIHRvIG1ha2UgdGhlIG11bHRpIGNvbHVtbiB1cGRhdGVzIGVhc2llci4KCQkgKiBSZXR1cm5zOiAgaW50OiAwIG9rYXksIDEgZXJyb3IKCQkgKiBJbnB1dHM6ICAgb2JqZWN0IHwgYXJyYXkgc3RyaW5nIHwgc3RyaW5nOm1EYXRhIC0gZGF0YSB0byB1cGRhdGUgdGhlIGNlbGwvcm93IHdpdGgKCQkgKiAgICAgICAgICAgbWl4ZWQ6bVJvdyAtIAoJCSAqICAgICAgICAgICAgIGludDogLSBpbmRleCBvZiBhb0RhdGEgdG8gYmUgdXBkYXRlZCwgb3IKCQkgKiAgICAgICAgICAgICBub2RlKFRSKTogLSBUUiBlbGVtZW50IHlvdSB3YW50IHRvIHVwZGF0ZQoJCSAqICAgICAgICAgICBpbnQ6aUNvbHVtbiAtIHRoZSBjb2x1bW4gdG8gdXBkYXRlIC0gb3B0aW9uYWwgKG5vdCB1c2VkIG9mIG1EYXRhIGlzIGFuIGFycmF5IG9yIG9iamVjdCkKCQkgKiAgICAgICAgICAgYm9vbDpiUmVkcmF3IC0gcmVkcmF3IHRoZSB0YWJsZSBvciBub3QgLSBkZWZhdWx0IHRydWUKCQkgKiAgICAgICAgICAgYm9vbDpiQWN0aW9uIC0gcGVyZm9ybSBwcmVkcmF3IGFjdGlvbnMgb3Igbm90ICh5b3Ugd2lsbCB3YW50IHRoaXMgYXMgJ3RydWUnIGlmCgkJICogICAgICAgICAgICAgeW91IGhhdmUgYlJlZHJhdyBhcyB0cnVlKSAtIGRlZmF1bHQgdHJ1ZQoJCSAqLwoJCXRoaXMuZm5VcGRhdGUgPSBmdW5jdGlvbiggbURhdGEsIG1Sb3csIGlDb2x1bW4sIGJSZWRyYXcsIGJBY3Rpb24gKQoJCXsKCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQl2YXIgaVZpc2libGVDb2x1bW4sIGksIGlMZW4sIHNEaXNwbGF5OwoJCQl2YXIgaVJvdyA9ICh0eXBlb2YgbVJvdyA9PSAnb2JqZWN0JykgPyAKCQkJCV9mbk5vZGVUb0RhdGFJbmRleChvU2V0dGluZ3MsIG1Sb3cpIDogbVJvdzsKCQkJCgkJCWlmICggJC5pc0FycmF5KG1EYXRhKSAmJiB0eXBlb2YgbURhdGEgPT0gJ29iamVjdCcgKQoJCQl7CgkJCQkvKiBBcnJheSB1cGRhdGUgLSB1cGRhdGUgdGhlIHdob2xlIHJvdyAqLwoJCQkJb1NldHRpbmdzLmFvRGF0YVtpUm93XS5fYURhdGEgPSBtRGF0YS5zbGljZSgpOwoKCQkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCXRoaXMuZm5VcGRhdGUoIF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGkgKSwgaVJvdywgaSwgZmFsc2UsIGZhbHNlICk7CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAoIHR5cGVvZiBtRGF0YSA9PSAnb2JqZWN0JyApCgkJCXsKCQkJCS8qIE9iamVjdCB1cGRhdGUgLSB1cGRhdGUgdGhlIHdob2xlIHJvdyAtIGFzc3VtZSB0aGUgZGV2ZWxvcGVyIGdldHMgdGhlIG9iamVjdCByaWdodCAqLwoJCQkJb1NldHRpbmdzLmFvRGF0YVtpUm93XS5fYURhdGEgPSAkLmV4dGVuZCggdHJ1ZSwge30sIG1EYXRhICk7CgoJCQkJZm9yICggaT0wIDsgaTxvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGkrKyApCgkJCQl7CgkJCQkJdGhpcy5mblVwZGF0ZSggX2ZuR2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVJvdywgaSApLCBpUm93LCBpLCBmYWxzZSwgZmFsc2UgKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qIEluZGl2aWR1YWwgY2VsbCB1cGRhdGUgKi8KCQkJCXNEaXNwbGF5ID0gbURhdGE7CgkJCQlfZm5TZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpQ29sdW1uLCBzRGlzcGxheSApOwoJCQkJCgkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uZm5SZW5kZXIgIT09IG51bGwgKQoJCQkJewoJCQkJCXNEaXNwbGF5ID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5mblJlbmRlciggewoJCQkJCQkiaURhdGFSb3ciOiBpUm93LAoJCQkJCQkiaURhdGFDb2x1bW4iOiBpQ29sdW1uLAoJCQkJCQkiYURhdGEiOiBvU2V0dGluZ3MuYW9EYXRhW2lSb3ddLl9hRGF0YSwKCQkJCQkJIm9TZXR0aW5ncyI6IG9TZXR0aW5ncwoJCQkJCX0gKTsKCQkJCQkKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uYlVzZVJlbmRlcmVkICkKCQkJCQl7CgkJCQkJCV9mblNldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGlDb2x1bW4sIHNEaXNwbGF5ICk7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQlpZiAoIG9TZXR0aW5ncy5hb0RhdGFbaVJvd10ublRyICE9PSBudWxsICkKCQkJCXsKCQkJCQkvKiBEbyB0aGUgYWN0dWFsIEhUTUwgdXBkYXRlICovCgkJCQkJX2ZuR2V0VGROb2Rlcyggb1NldHRpbmdzLCBpUm93IClbaUNvbHVtbl0uaW5uZXJIVE1MID0gc0Rpc3BsYXk7CgkJCQl9CgkJCX0KCQkJCgkJCS8qIE1vZGlmeSB0aGUgc2VhcmNoIGluZGV4IGZvciB0aGlzIHJvdyAoc3RyaWN0bHkgdGhpcyBpcyBsaWtlbHkgbm90IG5lZWRlZCwgc2luY2UgZm5SZURyYXcKCQkJICogd2lsbCByZWJ1aWxkIHRoZSBzZWFyY2ggYXJyYXkgLSBob3dldmVyLCB0aGUgcmVkcmF3IG1pZ2h0IGJlIGRpc2FibGVkIGJ5IHRoZSB1c2VyKQoJCQkgKi8KCQkJdmFyIGlEaXNwbGF5SW5kZXggPSAkLmluQXJyYXkoIGlSb3csIG9TZXR0aW5ncy5haURpc3BsYXkgKTsKCQkJb1NldHRpbmdzLmFzRGF0YVNlYXJjaFtpRGlzcGxheUluZGV4XSA9IF9mbkJ1aWxkU2VhcmNoUm93KCBvU2V0dGluZ3MsIAoJCQkJX2ZuR2V0Um93RGF0YSggb1NldHRpbmdzLCBpUm93LCAnZmlsdGVyJyApICk7CgkJCQoJCQkvKiBQZXJmb3JtIHByZS1kcmF3IGFjdGlvbnMgKi8KCQkJaWYgKCB0eXBlb2YgYkFjdGlvbiA9PSAndW5kZWZpbmVkJyB8fCBiQWN0aW9uICkKCQkJewoJCQkJX2ZuQWp1c3RDb2x1bW5TaXppbmcoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQkvKiBSZWRyYXcgdGhlIHRhYmxlICovCgkJCWlmICggdHlwZW9mIGJSZWRyYXcgPT0gJ3VuZGVmaW5lZCcgfHwgYlJlZHJhdyApCgkJCXsKCQkJCV9mblJlRHJhdyggb1NldHRpbmdzICk7CgkJCX0KCQkJcmV0dXJuIDA7CgkJfTsKCQkKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmblNob3dDb2xvdW1uCgkJICogUHVycG9zZTogIFNob3cgYSBwYXJ0aWN1bGFyIGNvbHVtbgoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIGludDppQ29sIC0gdGhlIGNvbHVtbiB3aG9zZSBkaXNwbGF5IHNob3VsZCBiZSBjaGFuZ2VkCgkJICogICAgICAgICAgIGJvb2w6YlNob3cgLSBzaG93ICh0cnVlKSBvciBoaWRlIChmYWxzZSkgdGhlIGNvbHVtbgoJCSAqICAgICAgICAgICBib29sOmJSZWRyYXcgLSByZWRyYXcgdGhlIHRhYmxlIG9yIG5vdCAtIGRlZmF1bHQgdHJ1ZQoJCSAqLwoJCXRoaXMuZm5TZXRDb2x1bW5WaXMgPSBmdW5jdGlvbiAoIGlDb2wsIGJTaG93LCBiUmVkcmF3ICkKCQl7CgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQkJdmFyIGksIGlMZW47CgkJCXZhciBpQ29sdW1ucyA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCQl2YXIgblRkLCBuQ2VsbCwgYW5UcnMsIGpxQ2hpbGRyZW4sIGJBcHBlbmQsIGlCZWZvcmU7CgkJCQoJCQkvKiBObyBwb2ludCBpbiBkb2luZyBhbnl0aGluZyBpZiB3ZSBhcmUgcmVxdWVzdGluZyB3aGF0IGlzIGFscmVhZHkgdHJ1ZSAqLwoJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbF0uYlZpc2libGUgPT0gYlNob3cgKQoJCQl7CgkJCQlyZXR1cm47CgkJCX0KCQkJCgkJCS8qIFNob3cgdGhlIGNvbHVtbiAqLwoJCQlpZiAoIGJTaG93ICkKCQkJewoJCQkJdmFyIGlJbnNlcnQgPSAwOwoJCQkJZm9yICggaT0wIDsgaTxpQ29sIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlZpc2libGUgKQoJCQkJCXsKCQkJCQkJaUluc2VydCsrOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJLyogTmVlZCB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHVzZSBhcHBlbmRDaGlsZCBvciBpbnNlcnRCZWZvcmUgKi8KCQkJCWJBcHBlbmQgPSAoaUluc2VydCA+PSBfZm5WaXNibGVDb2x1bW5zKCBvU2V0dGluZ3MgKSk7CgoJCQkJLyogV2hpY2ggY29sb3VtbiBzaG91bGQgd2UgYmUgaW5zZXJ0aW5nIGJlZm9yZT8gKi8KCQkJCWlmICggIWJBcHBlbmQgKQoJCQkJewoJCQkJCWZvciAoIGk9aUNvbCA7IGk8aUNvbHVtbnMgOyBpKysgKQoJCQkJCXsKCQkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJWaXNpYmxlICkKCQkJCQkJewoJCQkJCQkJaUJlZm9yZSA9IGk7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCgkJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvRGF0YS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWlmICggb1NldHRpbmdzLmFvRGF0YVtpXS5uVHIgIT09IG51bGwgKQoJCQkJCXsKCQkJCQkJaWYgKCBiQXBwZW5kICkKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFvRGF0YVtpXS5uVHIuYXBwZW5kQ2hpbGQoIAoJCQkJCQkJCW9TZXR0aW5ncy5hb0RhdGFbaV0uX2FuSGlkZGVuW2lDb2xdCgkJCQkJCQkpOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFvRGF0YVtpXS5uVHIuaW5zZXJ0QmVmb3JlKAoJCQkJCQkJCW9TZXR0aW5ncy5hb0RhdGFbaV0uX2FuSGlkZGVuW2lDb2xdLCAKCQkJCQkJCQlfZm5HZXRUZE5vZGVzKCBvU2V0dGluZ3MsIGkgKVtpQmVmb3JlXSApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogUmVtb3ZlIGEgY29sdW1uIGZyb20gZGlzcGxheSAqLwoJCQkJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0RhdGFbaV0ublRyICE9PSBudWxsICkKCQkJCQl7CgkJCQkJCW5UZCA9IF9mbkdldFRkTm9kZXMoIG9TZXR0aW5ncywgaSApW2lDb2xdOwoJCQkJCQlvU2V0dGluZ3MuYW9EYXRhW2ldLl9hbkhpZGRlbltpQ29sXSA9IG5UZDsKCQkJCQkJblRkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5UZCApOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJLyogQ2xlYXIgdG8gc2V0IHRoZSB2aXNpYmxlIGZsYWcgKi8KCQkJb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sXS5iVmlzaWJsZSA9IGJTaG93OwoKCQkJLyogUmVkcmF3IHRoZSBoZWFkZXIgYW5kIGZvb3RlciBiYXNlZCBvbiB0aGUgbmV3IGNvbHVtbiB2aXNpYmlsaXR5ICovCgkJCV9mbkRyYXdIZWFkKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5hb0hlYWRlciApOwoJCQlpZiAoIG9TZXR0aW5ncy5uVEZvb3QgKQoJCQl7CgkJCQlfZm5EcmF3SGVhZCggb1NldHRpbmdzLCBvU2V0dGluZ3MuYW9Gb290ZXIgKTsKCQkJfQoJCQkKCQkJLyogSWYgdGhlcmUgYXJlIGFueSAnb3Blbicgcm93cywgdGhlbiB3ZSBuZWVkIHRvIGFsdGVyIHRoZSBjb2xzcGFuIGZvciB0aGlzIGNvbCBjaGFuZ2UgKi8KCQkJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5hb09wZW5Sb3dzLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCW9TZXR0aW5ncy5hb09wZW5Sb3dzW2ldLm5Uci5jb2xTcGFuID0gX2ZuVmlzYmxlQ29sdW1ucyggb1NldHRpbmdzICk7CgkJCX0KCQkJCgkJCS8qIERvIGEgcmVkcmF3IGluY2FzZSBhbnl0aGluZyBkZXBlbmRpbmcgb24gdGhlIHRhYmxlIGNvbHVtbnMgbmVlZHMgaXQgCgkJCSAqIChidWlsdC1pbjogc2Nyb2xsaW5nKSAKCQkJICovCgkJCWlmICggdHlwZW9mIGJSZWRyYXcgPT0gJ3VuZGVmaW5lZCcgfHwgYlJlZHJhdyApCgkJCXsKCQkJCV9mbkFqdXN0Q29sdW1uU2l6aW5nKCBvU2V0dGluZ3MgKTsKCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQlfZm5TYXZlU3RhdGUoIG9TZXR0aW5ncyApOwoJCX07CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5QYWdlQ2hhbmdlCgkJICogUHVycG9zZTogIENoYW5nZSB0aGUgcGFnaW5hdGlvbgoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIHN0cmluZzpzQWN0aW9uIC0gcGFnaW5nIGFjdGlvbiB0byB0YWtlOiAiZmlyc3QiLCAicHJldmlvdXMiLCAibmV4dCIgb3IgImxhc3QiCgkJICogICAgICAgICAgIGJvb2w6YlJlZHJhdyAtIHJlZHJhdyB0aGUgdGFibGUgb3Igbm90IC0gb3B0aW9uYWwgLSBkZWZhdWx0IHRydWUKCQkgKi8KCQl0aGlzLmZuUGFnZUNoYW5nZSA9IGZ1bmN0aW9uICggc0FjdGlvbiwgYlJlZHJhdyApCgkJewoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCV9mblBhZ2VDaGFuZ2UoIG9TZXR0aW5ncywgc0FjdGlvbiApOwoJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQkKCQkJaWYgKCB0eXBlb2YgYlJlZHJhdyA9PSAndW5kZWZpbmVkJyB8fCBiUmVkcmF3ICkKCQkJewoJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCX0KCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuRGVzdHJveQoJCSAqIFB1cnBvc2U6ICBEZXN0cnVjdG9yIGZvciB0aGUgRGF0YVRhYmxlCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgLQoJCSAqLwoJCXRoaXMuZm5EZXN0cm95ID0gZnVuY3Rpb24gKCApCgkJewoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCXZhciBuT3JpZyA9IG9TZXR0aW5ncy5uVGFibGVXcmFwcGVyLnBhcmVudE5vZGU7CgkJCXZhciBuQm9keSA9IG9TZXR0aW5ncy5uVEJvZHk7CgkJCXZhciBpLCBpTGVuOwoJCQkKCQkJLyogRmxhZyB0byBub3RlIHRoYXQgdGhlIHRhYmxlIGlzIGN1cnJlbnRseSBiZWluZyBkZXN0b3J5ZWQgLSBubyBhY3Rpb24gc2hvdWxkIGJlIHRha2VuICovCgkJCW9TZXR0aW5ncy5iRGVzdHJveWluZyA9IHRydWU7CgkJCQoJCQkvKiBSZXN0b3JlIGhpZGRlbiBjb2x1bW5zICovCgkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iVmlzaWJsZSA9PT0gZmFsc2UgKQoJCQkJewoJCQkJCXRoaXMuZm5TZXRDb2x1bW5WaXMoIGksIHRydWUgKTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogQmxpdHogYWxsIERUIGV2ZW50cyAqLwoJCQkkKG9TZXR0aW5ncy5uVGFibGVXcmFwcGVyKS5maW5kKCcqJykuYW5kU2VsZigpLnVuYmluZCgnLkRUJyk7CgkJCQoJCQkvKiBJZiB0aGVyZSBpcyBhbiAnZW1wdHknIGluZGljYXRvciByb3csIHJlbW92ZSBpdCAqLwoJCQkkKCd0Ym9keT50cj50ZC4nK29TZXR0aW5ncy5vQ2xhc3Nlcy5zUm93RW1wdHksIG9TZXR0aW5ncy5uVGFibGUpLnBhcmVudCgpLnJlbW92ZSgpOwoJCQkKCQkJLyogV2hlbiBzY3JvbGxpbmcgd2UgaGFkIHRvIGJyZWFrIHRoZSB0YWJsZSB1cCAtIHJlc3RvcmUgaXQgKi8KCQkJaWYgKCBvU2V0dGluZ3MublRhYmxlICE9IG9TZXR0aW5ncy5uVEhlYWQucGFyZW50Tm9kZSApCgkJCXsKCQkJCSQoJz50aGVhZCcsIG9TZXR0aW5ncy5uVGFibGUpLnJlbW92ZSgpOwoJCQkJb1NldHRpbmdzLm5UYWJsZS5hcHBlbmRDaGlsZCggb1NldHRpbmdzLm5USGVhZCApOwoJCQl9CgkJCQoJCQlpZiAoIG9TZXR0aW5ncy5uVEZvb3QgJiYgb1NldHRpbmdzLm5UYWJsZSAhPSBvU2V0dGluZ3MublRGb290LnBhcmVudE5vZGUgKQoJCQl7CgkJCQkkKCc+dGZvb3QnLCBvU2V0dGluZ3MublRhYmxlKS5yZW1vdmUoKTsKCQkJCW9TZXR0aW5ncy5uVGFibGUuYXBwZW5kQ2hpbGQoIG9TZXR0aW5ncy5uVEZvb3QgKTsKCQkJfQoJCQkKCQkJLyogUmVtb3ZlIHRoZSBEYXRhVGFibGVzIGdlbmVyYXRlZCBub2RlcywgZXZlbnRzIGFuZCBjbGFzc2VzICovCgkJCW9TZXR0aW5ncy5uVGFibGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggb1NldHRpbmdzLm5UYWJsZSApOwoJCQkkKG9TZXR0aW5ncy5uVGFibGVXcmFwcGVyKS5yZW1vdmUoKTsKCQkJCgkJCW9TZXR0aW5ncy5hYVNvcnRpbmcgPSBbXTsKCQkJb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkID0gW107CgkJCV9mblNvcnRpbmdDbGFzc2VzKCBvU2V0dGluZ3MgKTsKCQkJCgkJCSQoX2ZuR2V0VHJOb2Rlcyggb1NldHRpbmdzICkpLnJlbW92ZUNsYXNzKCBvU2V0dGluZ3MuYXNTdHJpcENsYXNzZXMuam9pbignICcpICk7CgkJCQoJCQlpZiAoICFvU2V0dGluZ3MuYkpVSSApCgkJCXsKCQkJCSQoJ3RoJywgb1NldHRpbmdzLm5USGVhZCkucmVtb3ZlQ2xhc3MoIFsgX29FeHQub1N0ZENsYXNzZXMuc1NvcnRhYmxlLAoJCQkJCV9vRXh0Lm9TdGRDbGFzc2VzLnNTb3J0YWJsZUFzYywKCQkJCQlfb0V4dC5vU3RkQ2xhc3Nlcy5zU29ydGFibGVEZXNjLAoJCQkJCV9vRXh0Lm9TdGRDbGFzc2VzLnNTb3J0YWJsZU5vbmUgXS5qb2luKCcgJykKCQkJCSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkKCd0aCcsIG9TZXR0aW5ncy5uVEhlYWQpLnJlbW92ZUNsYXNzKCBbIF9vRXh0Lm9TdGRDbGFzc2VzLnNTb3J0YWJsZSwKCQkJCQlfb0V4dC5vSlVJQ2xhc3Nlcy5zU29ydGFibGVBc2MsCgkJCQkJX29FeHQub0pVSUNsYXNzZXMuc1NvcnRhYmxlRGVzYywKCQkJCQlfb0V4dC5vSlVJQ2xhc3Nlcy5zU29ydGFibGVOb25lIF0uam9pbignICcpCgkJCQkpOwoJCQkJJCgndGggc3Bhbi4nK19vRXh0Lm9KVUlDbGFzc2VzLnNTb3J0SWNvbiwgb1NldHRpbmdzLm5USGVhZCkucmVtb3ZlKCk7CgoJCQkJJCgndGgnLCBvU2V0dGluZ3MublRIZWFkKS5lYWNoKCBmdW5jdGlvbiAoKSB7CgkJCQkJdmFyIGpxV3JhcHBlciA9ICQoJ2Rpdi4nK19vRXh0Lm9KVUlDbGFzc2VzLnNTb3J0SlVJV3JhcHBlciwgdGhpcyk7CgkJCQkJdmFyIGtpZHMgPSBqcVdyYXBwZXIuY29udGVudHMoKTsKCQkJCQkkKHRoaXMpLmFwcGVuZCgga2lkcyApOwoJCQkJCWpxV3JhcHBlci5yZW1vdmUoKTsKCQkJCX0gKTsKCQkJfQoJCQkKCQkJLyogQWRkIHRoZSBUUiBlbGVtZW50cyBiYWNrIGludG8gdGhlIHRhYmxlIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyICovCgkJCWlmICggb1NldHRpbmdzLm5UYWJsZVJlaW5zZXJ0QmVmb3JlICkKCQkJewoJCQkJbk9yaWcuaW5zZXJ0QmVmb3JlKCBvU2V0dGluZ3MublRhYmxlLCBvU2V0dGluZ3MublRhYmxlUmVpbnNlcnRCZWZvcmUgKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCW5PcmlnLmFwcGVuZENoaWxkKCBvU2V0dGluZ3MublRhYmxlICk7CgkJCX0KCgkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmFvRGF0YVtpXS5uVHIgIT09IG51bGwgKQoJCQkJewoJCQkJCW5Cb2R5LmFwcGVuZENoaWxkKCBvU2V0dGluZ3MuYW9EYXRhW2ldLm5UciApOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBSZXN0b3JlIHRoZSB3aWR0aCBvZiB0aGUgb3JpZ2luYWwgdGFibGUgKi8KCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJBdXRvV2lkdGggPT09IHRydWUgKQoJCQl7CgkJCSAgb1NldHRpbmdzLm5UYWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKG9TZXR0aW5ncy5zRGVzdHJveVdpZHRoKTsKCQkJfQoJCQkKCQkJLyogSWYgdGhlIHdlcmUgb3JpZ2luYWxseSBvZGQvZXZlbiB0eXBlIGNsYXNzZXMgLSB0aGVuIHdlIGFkZCB0aGVtIGJhY2sgaGVyZS4gTm90ZQoJCQkgKiB0aGlzIGlzIG5vdCBmb29sIHByb29mIChmb3IgZXhhbXBsZSBpZiBub3QgYWxsIHJvd3MgYXMgb2RkL2V2ZW4gY2xhc3NlcyAtIGJ1dCAKCQkJICogaXQncyBhIGdvb2QgZWZmb3J0IHdpdGhvdXQgZ2V0dGluZyBjYXJyaWVkIGF3YXkKCQkJICovCgkJCSQoJz50cjpldmVuJywgbkJvZHkpLmFkZENsYXNzKCBvU2V0dGluZ3MuYXNEZXN0b3J5U3RyaXBzWzBdICk7CgkJCSQoJz50cjpvZGQnLCBuQm9keSkuYWRkQ2xhc3MoIG9TZXR0aW5ncy5hc0Rlc3RvcnlTdHJpcHNbMV0gKTsKCQkJCgkJCS8qIFJlbW92ZSB0aGUgc2V0dGluZ3Mgb2JqZWN0IGZyb20gdGhlIHNldHRpbmdzIGFycmF5ICovCgkJCWZvciAoIGk9MCwgaUxlbj1fYW9TZXR0aW5ncy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpZiAoIF9hb1NldHRpbmdzW2ldID09IG9TZXR0aW5ncyApCgkJCQl7CgkJCQkJX2FvU2V0dGluZ3Muc3BsaWNlKCBpLCAxICk7CgkJCQl9CgkJCX0KCQkJCgkJCS8qIEVuZCBpdCBhbGwgKi8KCQkJb1NldHRpbmdzID0gbnVsbDsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuQWp1c3RDb2x1bW5TaXppbmcKCQkgKiBQdXJwb3NlOiAgVXBkYXRlIHRhbGUgc2l6aW5nIGJhc2VkIG9uIGNvbnRlbnQuIFRoaXMgd291bGQgbW9zdCBsaWtlbHkgYmUgdXNlZCBmb3Igc2Nyb2xsaW5nCgkJICogICBhbmQgd2lsbCB0eXBpY2FsbHkgbmVlZCBhIHJlZHJhdyBhZnRlciBpdC4KCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBib29sOmJSZWRyYXcgLSByZWRyYXcgdGhlIHRhYmxlIG9yIG5vdCwgeW91IHdpbGwgdHlwaWNhbGx5IHdhbnQgdG8gLSBkZWZhdWx0IHRydWUKCQkgKi8KCQl0aGlzLmZuQWRqdXN0Q29sdW1uU2l6aW5nID0gZnVuY3Rpb24gKCBiUmVkcmF3ICkKCQl7CgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKHRoaXNbX29FeHQuaUFwaUluZGV4XSk7CgkJCV9mbkFqdXN0Q29sdW1uU2l6aW5nKCBvU2V0dGluZ3MgKTsKCQkJCgkJCWlmICggdHlwZW9mIGJSZWRyYXcgPT0gJ3VuZGVmaW5lZCcgfHwgYlJlZHJhdyApCgkJCXsKCQkJCXRoaXMuZm5EcmF3KCBmYWxzZSApOwoJCQl9CgkJCWVsc2UgaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5zWCAhPT0gIiIgfHwgb1NldHRpbmdzLm9TY3JvbGwuc1kgIT09ICIiICkKCQkJewoJCQkJLyogSWYgbm90IHJlZHJhd2luZywgYnV0IHNjcm9sbGluZywgd2Ugd2FudCB0byBhcHBseSB0aGUgbmV3IGNvbHVtbiBzaXplcyBhbnl3YXkgKi8KCQkJCXRoaXMub0FwaS5fZm5TY3JvbGxEcmF3KG9TZXR0aW5ncyk7CgkJCX0KCQl9OwoJCQoJCS8qCgkJICogUGx1Z2luIEFQSSBmdW5jdGlvbnMKCQkgKiAKCQkgKiBUaGlzIGNhbGwgd2lsbCBhZGQgdGhlIGZ1bmN0aW9ucyB3aGljaCBhcmUgZGVmaW5lZCBpbiBfb0V4dC5vQXBpIHRvIHRoZQoJCSAqIERhdGFUYWJsZXMgb2JqZWN0LCBwcm92aWRpbmcgYSByYXRoZXIgbmljZSB3YXkgdG8gYWxsb3cgcGx1Zy1pbiBBUEkgZnVuY3Rpb25zLiBOb3RlIHRoYXQKCQkgKiB0aGlzIGlzIGRvbmUgaGVyZSwgc28gdGhhdCBBUEkgZnVuY3Rpb24gY2FuIGFjdHVhbGx5IG92ZXJyaWRlIHRoZSBidWlsdCBpbiBBUEkgZnVuY3Rpb25zIGlmCgkJICogcmVxdWlyZWQgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgoJCSAqLwoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkV4dGVybkFwaUZ1bmMKCQkgKiBQdXJwb3NlOiAgQ3JlYXRlIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgZXhwb3J0aW5nIGFuIGludGVybmFsIGZ1bmMgdG8gYW4gZXh0ZXJuYWwgQVBJIGZ1bmMKCQkgKiBSZXR1cm5zOiAgZnVuY3Rpb246IC0gd3JhcHBlZCBmdW5jdGlvbgoJCSAqIElucHV0czogICBzdHJpbmc6c0Z1bmMgLSBBUEkgZnVuY3Rpb24gbmFtZQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkV4dGVybkFwaUZ1bmMgKHNGdW5jKQoJCXsKCQkJcmV0dXJuIGZ1bmN0aW9uKCkgewoJCQkJCXZhciBhQXJncyA9IFtfZm5TZXR0aW5nc0Zyb21Ob2RlKHRoaXNbX29FeHQuaUFwaUluZGV4XSldLmNvbmNhdCggCgkJCQkJCUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykgKTsKCQkJCQlyZXR1cm4gX29FeHQub0FwaVtzRnVuY10uYXBwbHkoIHRoaXMsIGFBcmdzICk7CgkJCQl9OwoJCX0KCQkKCQlmb3IgKCB2YXIgc0Z1bmMgaW4gX29FeHQub0FwaSApCgkJewoJCQlpZiAoIHNGdW5jICkKCQkJewoJCQkJLyoKCQkJCSAqIEZ1bmN0aW9uOiBhbm9uCgkJCQkgKiBQdXJwb3NlOiAgV3JhcCB0aGUgcGx1Zy1pbiBBUEkgZnVuY3Rpb25zIGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIHNldHRpbmdzIGFzIDFzdCBhcmcgCgkJCQkgKiAgIGFuZCBleGVjdXRlIGluIHRoaXMgc2NvcGUKCQkJCSAqIFJldHVybnM6ICAtCgkJCQkgKiBJbnB1dHM6ICAgLQoJCQkJICovCgkJCQl0aGlzW3NGdW5jXSA9IF9mbkV4dGVybkFwaUZ1bmMoc0Z1bmMpOwoJCQl9CgkJfQoJCQoJCQoJCQoJCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIExvY2FsIGZ1bmN0aW9ucwoJCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLwoJCQoJCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEluaXRhbGlzYXRpb24KCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5Jbml0YWxpc2UKCQkgKiBQdXJwb3NlOiAgRHJhdyB0aGUgdGFibGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBhZGRpbmcgYWxsIHJlcXVpcmVkIGZlYXR1cmVzCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuSW5pdGFsaXNlICggb1NldHRpbmdzICkKCQl7CgkJCXZhciBpLCBpTGVuLCBpQWpheFN0YXJ0PW9TZXR0aW5ncy5pSW5pdERpc3BsYXlTdGFydDsKCQkJCgkJCS8qIEVuc3VyZSB0aGF0IHRoZSB0YWJsZSBkYXRhIGlzIGZ1bGx5IGluaXRpYWxpc2VkICovCgkJCWlmICggb1NldHRpbmdzLmJJbml0aWFsaXNlZCA9PT0gZmFsc2UgKQoJCQl7CgkJCQlzZXRUaW1lb3V0KCBmdW5jdGlvbigpeyBfZm5Jbml0YWxpc2UoIG9TZXR0aW5ncyApOyB9LCAyMDAgKTsKCQkJCXJldHVybjsKCQkJfQoJCQkKCQkJLyogU2hvdyB0aGUgZGlzcGxheSBIVE1MIG9wdGlvbnMgKi8KCQkJX2ZuQWRkT3B0aW9uc0h0bWwoIG9TZXR0aW5ncyApOwoJCQkKCQkJLyogQnVpbGQgYW5kIGRyYXcgdGhlIGhlYWRlciAvIGZvb3RlciBmb3IgdGhlIHRhYmxlICovCgkJCV9mbkJ1aWxkSGVhZCggb1NldHRpbmdzICk7CgkJCV9mbkRyYXdIZWFkKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5hb0hlYWRlciApOwoJCQlpZiAoIG9TZXR0aW5ncy5uVEZvb3QgKQoJCQl7CgkJCQlfZm5EcmF3SGVhZCggb1NldHRpbmdzLCBvU2V0dGluZ3MuYW9Gb290ZXIgKTsKCQkJfQoKCQkJLyogT2theSB0byBzaG93IHRoYXQgc29tZXRoaW5nIGlzIGdvaW5nIG9uIG5vdyAqLwoJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggb1NldHRpbmdzLCB0cnVlICk7CgkJCQoJCQkvKiBDYWxjdWxhdGUgc2l6ZXMgZm9yIGNvbHVtbnMgKi8KCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJBdXRvV2lkdGggKQoJCQl7CgkJCQlfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1dpZHRoICE9PSBudWxsICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UaC5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNXaWR0aCApOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBJZiB0aGVyZSBpcyBkZWZhdWx0IHNvcnRpbmcgcmVxdWlyZWQgLSBsZXQncyBkbyBpdC4gVGhlIHNvcnQgZnVuY3Rpb24gd2lsbCBkbyB0aGUKCQkJICogZHJhd2luZyBmb3IgdXMuIE90aGVyd2lzZSB3ZSBkcmF3IHRoZSB0YWJsZSByZWdhcmRsZXNzIG9mIHRoZSBBamF4IHNvdXJjZSAtIHRoaXMgYWxsb3dzCgkJCSAqIHRoZSB0YWJsZSB0byBsb29rIGluaXRpYWxpc2VkIGZvciBBamF4IHNvdXJjaW5nIGRhdGEgKHNob3cgJ2xvYWRpbmcnIG1lc3NhZ2UgcG9zc2libHkpCgkJCSAqLwoJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlNvcnQgKQoJCQl7CgkJCQlfZm5Tb3J0KCBvU2V0dGluZ3MgKTsKCQkJfQoJCQllbHNlIGlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iRmlsdGVyICkKCQkJewoJCQkJX2ZuRmlsdGVyQ29tcGxldGUoIG9TZXR0aW5ncywgb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaCApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJb1NldHRpbmdzLmFpRGlzcGxheSA9IG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQkJCV9mbkNhbGN1bGF0ZUVuZCggb1NldHRpbmdzICk7CgkJCQlfZm5EcmF3KCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJLyogaWYgdGhlcmUgaXMgYW4gYWpheCBzb3VyY2UgbG9hZCB0aGUgZGF0YSAqLwoJCQlpZiAoIG9TZXR0aW5ncy5zQWpheFNvdXJjZSAhPT0gbnVsbCAmJiAhb1NldHRpbmdzLm9GZWF0dXJlcy5iU2VydmVyU2lkZSApCgkJCXsKCQkJCW9TZXR0aW5ncy5mblNlcnZlckRhdGEuY2FsbCggb1NldHRpbmdzLm9JbnN0YW5jZSwgb1NldHRpbmdzLnNBamF4U291cmNlLCBbXSwgZnVuY3Rpb24oanNvbikgewoJCQkJCXZhciBhRGF0YSA9IGpzb247CgkJCQkJaWYgKCBvU2V0dGluZ3Muc0FqYXhEYXRhUHJvcCAhPT0gIiIgKQoJCQkJCXsKCQkJCQkJdmFyIGZuRGF0YVNyYyA9IF9mbkdldE9iamVjdERhdGFGbiggb1NldHRpbmdzLnNBamF4RGF0YVByb3AgKTsKCQkJCQkJYURhdGEgPSBmbkRhdGFTcmMoIGpzb24gKTsKCQkJCQl9CgoJCQkJCS8qIEdvdCB0aGUgZGF0YSAtIGFkZCBpdCB0byB0aGUgdGFibGUgKi8KCQkJCQlmb3IgKCBpPTAgOyBpPGFEYXRhLmxlbmd0aCA7IGkrKyApCgkJCQkJewoJCQkJCQlfZm5BZGREYXRhKCBvU2V0dGluZ3MsIGFEYXRhW2ldICk7CgkJCQkJfQoJCQkJCQoJCQkJCS8qIFJlc2V0IHRoZSBpbml0IGRpc3BsYXkgZm9yIGNvb2tpZSBzYXZpbmcuIFdlJ3ZlIGFscmVhZHkgZG9uZSBhIGZpbHRlciwgYW5kCgkJCQkJICogdGhlcmVmb3JlIGNsZWFyZWQgaXQgYmVmb3JlLiBTbyB3ZSBuZWVkIHRvIG1ha2UgaXQgYXBwZWFyICdmcmVzaCcKCQkJCQkgKi8KCQkJCQlvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgPSBpQWpheFN0YXJ0OwoJCQkJCQoJCQkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCApCgkJCQkJewoJCQkJCQlfZm5Tb3J0KCBvU2V0dGluZ3MgKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJb1NldHRpbmdzLmFpRGlzcGxheSA9IG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQkJCQkJX2ZuQ2FsY3VsYXRlRW5kKCBvU2V0dGluZ3MgKTsKCQkJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCQkJfQoJCQkJCQoJCQkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBvU2V0dGluZ3MsIGZhbHNlICk7CgkJCQkJX2ZuSW5pdENvbXBsZXRlKCBvU2V0dGluZ3MsIGpzb24gKTsKCQkJCX0sIG9TZXR0aW5ncyApOwoJCQkJcmV0dXJuOwoJCQl9CgkJCQoJCQkvKiBTZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIGluaXRpYWxpc2F0aW9uIGNvbXBsZXRlIGlzIGRvbmUgYXQgdGhlIGVuZCBvZiBfZm5EcmF3ICovCgkJCWlmICggIW9TZXR0aW5ncy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgKQoJCQl7CgkJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggb1NldHRpbmdzLCBmYWxzZSApOwoJCQkJX2ZuSW5pdENvbXBsZXRlKCBvU2V0dGluZ3MgKTsKCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5Jbml0YWxpc2UKCQkgKiBQdXJwb3NlOiAgRHJhdyB0aGUgdGFibGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBhZGRpbmcgYWxsIHJlcXVpcmVkIGZlYXR1cmVzCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuSW5pdENvbXBsZXRlICggb1NldHRpbmdzLCBqc29uICkKCQl7CgkJCW9TZXR0aW5ncy5fYkluaXRDb21wbGV0ZSA9IHRydWU7CgkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5mbkluaXRDb21wbGV0ZSA9PSAnZnVuY3Rpb24nICkKCQkJewoJCQkJaWYgKCB0eXBlb2YganNvbiAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmZuSW5pdENvbXBsZXRlLmNhbGwoIG9TZXR0aW5ncy5vSW5zdGFuY2UsIG9TZXR0aW5ncywganNvbiApOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCW9TZXR0aW5ncy5mbkluaXRDb21wbGV0ZS5jYWxsKCBvU2V0dGluZ3Mub0luc3RhbmNlLCBvU2V0dGluZ3MgKTsKCQkJCX0KCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5MYW5ndWFnZVByb2Nlc3MKCQkgKiBQdXJwb3NlOiAgQ29weSBsYW5ndWFnZSB2YXJpYWJsZXMgZnJvbSByZW1vdGUgb2JqZWN0IHRvIGEgbG9jYWwgb25lCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIG9iamVjdDpvTGFuZ3VhZ2UgLSBMYW5ndWFnZSBpbmZvcm1hdGlvbgoJCSAqICAgICAgICAgICBib29sOmJJbml0IC0gaW5pdCBvbmNlIGNvbXBsZXRlCgkJICovCgkJZnVuY3Rpb24gX2ZuTGFuZ3VhZ2VQcm9jZXNzKCBvU2V0dGluZ3MsIG9MYW5ndWFnZSwgYkluaXQgKQoJCXsKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvTGFuZ3VhZ2UsICdzUHJvY2Vzc2luZycgKTsKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvTGFuZ3VhZ2UsICdzTGVuZ3RoTWVudScgKTsKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvTGFuZ3VhZ2UsICdzRW1wdHlUYWJsZScgKTsKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvTGFuZ3VhZ2UsICdzTG9hZGluZ1JlY29yZHMnICk7CgkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc1plcm9SZWNvcmRzJyApOwoJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2UsIG9MYW5ndWFnZSwgJ3NJbmZvJyApOwoJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2UsIG9MYW5ndWFnZSwgJ3NJbmZvRW1wdHknICk7CgkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc0luZm9GaWx0ZXJlZCcgKTsKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvTGFuZ3VhZ2UsICdzSW5mb1Bvc3RGaXgnICk7CgkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc1NlYXJjaCcgKTsKCQkJCgkJCWlmICggdHlwZW9mIG9MYW5ndWFnZS5vUGFnaW5hdGUgIT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlLCBvTGFuZ3VhZ2Uub1BhZ2luYXRlLCAnc0ZpcnN0JyApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLm9QYWdpbmF0ZSwgb0xhbmd1YWdlLm9QYWdpbmF0ZSwgJ3NQcmV2aW91cycgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZS5vUGFnaW5hdGUsIG9MYW5ndWFnZS5vUGFnaW5hdGUsICdzTmV4dCcgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZS5vUGFnaW5hdGUsIG9MYW5ndWFnZS5vUGFnaW5hdGUsICdzTGFzdCcgKTsKCQkJfQoJCQkKCQkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgLSBpZiB0aGVyZSBpcyBubyBzRW1wdHlUYWJsZSBnaXZlbiwgdGhlbiB1c2UgdGhlIHNhbWUgYXMKCQkJICogc1plcm9SZWNvcmRzIC0gYXNzdW1pbmcgdGhhdCBpcyBnaXZlbi4KCQkJICovCgkJCWlmICggdHlwZW9mIG9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9PSAndW5kZWZpbmVkJyAmJiAKCQkJICAgICB0eXBlb2Ygb0xhbmd1YWdlLnNaZXJvUmVjb3JkcyAhPSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc1plcm9SZWNvcmRzJywgJ3NFbXB0eVRhYmxlJyApOwoJCQl9CgoJCQkvKiBMaWtld2lzZSB3aXRoIGxvYWRpbmcgcmVjb3JkcyAqLwoJCQlpZiAoIHR5cGVvZiBvTGFuZ3VhZ2Uuc0xvYWRpbmdSZWNvcmRzID09ICd1bmRlZmluZWQnICYmIAoJCQkgICAgIHR5cGVvZiBvTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvTGFuZ3VhZ2UsICdzWmVyb1JlY29yZHMnLCAnc0xvYWRpbmdSZWNvcmRzJyApOwoJCQl9CgkJCQoJCQlpZiAoIGJJbml0ICkKCQkJewoJCQkJX2ZuSW5pdGFsaXNlKCBvU2V0dGluZ3MgKTsKCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5BZGRDb2x1bW4KCQkgKiBQdXJwb3NlOiAgQWRkIGEgY29sdW1uIHRvIHRoZSBsaXN0IHVzZWQgZm9yIHRoZSB0YWJsZSB3aXRoIGRlZmF1bHQgdmFsdWVzCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIG5vZGU6blRoIC0gdGhlIHRoIGVsZW1lbnQgZm9yIHRoaXMgY29sdW1uCgkJICovCgkJZnVuY3Rpb24gX2ZuQWRkQ29sdW1uKCBvU2V0dGluZ3MsIG5UaCApCgkJewoJCQl2YXIgaUNvbCA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCQl2YXIgb0NvbCA9IHsKCQkJCSJzVHlwZSI6IG51bGwsCgkJCQkiX2JBdXRvVHlwZSI6IHRydWUsCgkJCQkiYlZpc2libGUiOiB0cnVlLAoJCQkJImJTZWFyY2hhYmxlIjogdHJ1ZSwKCQkJCSJiU29ydGFibGUiOiB0cnVlLAoJCQkJImFzU29ydGluZyI6IFsgJ2FzYycsICdkZXNjJyBdLAoJCQkJInNTb3J0aW5nQ2xhc3MiOiBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRhYmxlLAoJCQkJInNTb3J0aW5nQ2xhc3NKVUkiOiBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRKVUksCgkJCQkic1RpdGxlIjogblRoID8gblRoLmlubmVySFRNTCA6ICcnLAoJCQkJInNOYW1lIjogJycsCgkJCQkic1dpZHRoIjogbnVsbCwKCQkJCSJzV2lkdGhPcmlnIjogbnVsbCwKCQkJCSJzQ2xhc3MiOiBudWxsLAoJCQkJImZuUmVuZGVyIjogbnVsbCwKCQkJCSJiVXNlUmVuZGVyZWQiOiB0cnVlLAoJCQkJImlEYXRhU29ydCI6IGlDb2wsCgkJCQkibURhdGFQcm9wIjogaUNvbCwKCQkJCSJmbkdldERhdGEiOiBudWxsLAoJCQkJImZuU2V0RGF0YSI6IG51bGwsCgkJCQkic1NvcnREYXRhVHlwZSI6ICdzdGQnLAoJCQkJInNEZWZhdWx0Q29udGVudCI6IG51bGwsCgkJCQkic0NvbnRlbnRQYWRkaW5nIjogIiIsCgkJCQkiblRoIjogblRoID8gblRoIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKSwKCQkJCSJuVGYiOiBudWxsCgkJCX07CgkJCW9TZXR0aW5ncy5hb0NvbHVtbnMucHVzaCggb0NvbCApOwoJCQkKCQkJLyogQWRkIGEgY29sdW1uIHNwZWNpZmljIGZpbHRlciAqLwoJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzWyBpQ29sIF0gPT0gJ3VuZGVmaW5lZCcgfHwKCQkJICAgICBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzWyBpQ29sIF0gPT09IG51bGwgKQoJCQl7CgkJCQlvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzWyBpQ29sIF0gPSB7CgkJCQkJInNTZWFyY2giOiAiIiwKCQkJCQkiYlJlZ2V4IjogZmFsc2UsCgkJCQkJImJTbWFydCI6IHRydWUKCQkJCX07CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvKiBEb24ndCByZXF1aXJlIHRoYXQgdGhlIHVzZXIgbXVzdCBzcGVjaWZ5IGJSZWdleCBhbmQgLyBvciBiU21hcnQgKi8KCQkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbIGlDb2wgXS5iUmVnZXggPT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbIGlDb2wgXS5iUmVnZXggPSB0cnVlOwoJCQkJfQoJCQkJCgkJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzWyBpQ29sIF0uYlNtYXJ0ID09ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzWyBpQ29sIF0uYlNtYXJ0ID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogVXNlIHRoZSBjb2x1bW4gb3B0aW9ucyBmdW5jdGlvbiB0byBpbml0aWFsaXNlIGNsYXNzZXMgZXRjICovCgkJCV9mbkNvbHVtbk9wdGlvbnMoIG9TZXR0aW5ncywgaUNvbCwgbnVsbCApOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5Db2x1bW5PcHRpb25zCgkJICogUHVycG9zZTogIEFwcGx5IG9wdGlvbnMgZm9yIGEgY29sdW1uCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGludDppQ29sIC0gY29sdW1uIGluZGV4IHRvIGNvbnNpZGVyCgkJICogICAgICAgICAgIG9iamVjdDpvT3B0aW9ucyAtIG9iamVjdCB3aXRoIHNUeXBlLCBiVmlzaWJsZSBhbmQgYlNlYXJjaGFibGUKCQkgKi8KCQlmdW5jdGlvbiBfZm5Db2x1bW5PcHRpb25zKCBvU2V0dGluZ3MsIGlDb2wsIG9PcHRpb25zICkKCQl7CgkJCXZhciBvQ29sID0gb1NldHRpbmdzLmFvQ29sdW1uc1sgaUNvbCBdOwoJCQkKCQkJLyogVXNlciBzcGVjaWZpZWQgY29sdW1uIG9wdGlvbnMgKi8KCQkJaWYgKCB0eXBlb2Ygb09wdGlvbnMgIT0gJ3VuZGVmaW5lZCcgJiYgb09wdGlvbnMgIT09IG51bGwgKQoJCQl7CgkJCQlpZiAoIHR5cGVvZiBvT3B0aW9ucy5zVHlwZSAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJb0NvbC5zVHlwZSA9IG9PcHRpb25zLnNUeXBlOwoJCQkJCW9Db2wuX2JBdXRvVHlwZSA9IGZhbHNlOwoJCQkJfQoJCQkJCgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAiYlZpc2libGUiICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAiYlNlYXJjaGFibGUiICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAiYlNvcnRhYmxlIiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgInNUaXRsZSIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJzTmFtZSIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJzV2lkdGgiICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAic1dpZHRoIiwgInNXaWR0aE9yaWciICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAic0NsYXNzIiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgImZuUmVuZGVyIiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgImJVc2VSZW5kZXJlZCIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJpRGF0YVNvcnQiICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAibURhdGFQcm9wIiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgImFzU29ydGluZyIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJzU29ydERhdGFUeXBlIiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgInNEZWZhdWx0Q29udGVudCIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJzQ29udGVudFBhZGRpbmciICk7CgkJCX0KCgkJCS8qIENhY2hlIHRoZSBkYXRhIGdldCBhbmQgc2V0IGZ1bmN0aW9ucyBmb3Igc3BlZWQgKi8KCQkJb0NvbC5mbkdldERhdGEgPSBfZm5HZXRPYmplY3REYXRhRm4oIG9Db2wubURhdGFQcm9wICk7CgkJCW9Db2wuZm5TZXREYXRhID0gX2ZuU2V0T2JqZWN0RGF0YUZuKCBvQ29sLm1EYXRhUHJvcCApOwoJCQkKCQkJLyogRmVhdHVyZSBzb3J0aW5nIG92ZXJyaWRlcyBjb2x1bW4gc3BlY2lmaWMgd2hlbiBvZmYgKi8KCQkJaWYgKCAhb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCApCgkJCXsKCQkJCW9Db2wuYlNvcnRhYmxlID0gZmFsc2U7CgkJCX0KCQkJCgkJCS8qIENoZWNrIHRoYXQgdGhlIGNsYXNzIGFzc2lnbm1lbnQgaXMgY29ycmVjdCBmb3Igc29ydGluZyAqLwoJCQlpZiAoICFvQ29sLmJTb3J0YWJsZSB8fAoJCQkJCSAoJC5pbkFycmF5KCdhc2MnLCBvQ29sLmFzU29ydGluZykgPT0gLTEgJiYgJC5pbkFycmF5KCdkZXNjJywgb0NvbC5hc1NvcnRpbmcpID09IC0xKSApCgkJCXsKCQkJCW9Db2wuc1NvcnRpbmdDbGFzcyA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU29ydGFibGVOb25lOwoJCQkJb0NvbC5zU29ydGluZ0NsYXNzSlVJID0gIiI7CgkJCX0KCQkJZWxzZSBpZiAoIG9Db2wuYlNvcnRhYmxlIHx8CiAgICAgICAgICAgICAgICAoJC5pbkFycmF5KCdhc2MnLCBvQ29sLmFzU29ydGluZykgPT0gLTEgJiYgJC5pbkFycmF5KCdkZXNjJywgb0NvbC5hc1NvcnRpbmcpID09IC0xKSApCiAgICAgIHsKICAgICAgICBvQ29sLnNTb3J0aW5nQ2xhc3MgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRhYmxlOwogICAgICAgIG9Db2wuc1NvcnRpbmdDbGFzc0pVSSA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU29ydEpVSTsKICAgICAgfQoJCQllbHNlIGlmICggJC5pbkFycmF5KCdhc2MnLCBvQ29sLmFzU29ydGluZykgIT0gLTEgJiYgJC5pbkFycmF5KCdkZXNjJywgb0NvbC5hc1NvcnRpbmcpID09IC0xICkKCQkJewoJCQkJb0NvbC5zU29ydGluZ0NsYXNzID0gb1NldHRpbmdzLm9DbGFzc2VzLnNTb3J0YWJsZUFzYzsKCQkJCW9Db2wuc1NvcnRpbmdDbGFzc0pVSSA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU29ydEpVSUFzY0FsbG93ZWQ7CgkJCX0KCQkJZWxzZSBpZiAoICQuaW5BcnJheSgnYXNjJywgb0NvbC5hc1NvcnRpbmcpID09IC0xICYmICQuaW5BcnJheSgnZGVzYycsIG9Db2wuYXNTb3J0aW5nKSAhPSAtMSApCgkJCXsKCQkJCW9Db2wuc1NvcnRpbmdDbGFzcyA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU29ydGFibGVEZXNjOwoJCQkJb0NvbC5zU29ydGluZ0NsYXNzSlVJID0gb1NldHRpbmdzLm9DbGFzc2VzLnNTb3J0SlVJRGVzY0FsbG93ZWQ7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQWRkRGF0YQoJCSAqIFB1cnBvc2U6ICBBZGQgYSBkYXRhIGFycmF5IHRvIHRoZSB0YWJsZSwgY3JlYXRpbmcgRE9NIG5vZGUgZXRjCgkJICogUmV0dXJuczogIGludDogLSA+PTAgaWYgc3VjY2Vzc2Z1bCAoaW5kZXggb2YgbmV3IGFvRGF0YSBlbnRyeSksIC0xIGlmIGZhaWxlZAoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgYXJyYXk6YURhdGEgLSBkYXRhIGFycmF5IHRvIGJlIGFkZGVkCgkJICogTm90ZXM6ICAgIFRoZXJlIGFyZSB0d28gYmFzaWMgbWV0aG9kcyBmb3IgRGF0YVRhYmxlcyB0byBnZXQgZGF0YSB0byBkaXNwbGF5IC0gYSBKUyBhcnJheQoJCSAqICAgKHdoaWNoIGlzIGRlYWx0IHdpdGggYnkgdGhpcyBmdW5jdGlvbiksIGFuZCB0aGUgRE9NLCB3aGljaCBoYXMgaXQncyBvd24gb3B0aW1pc2VkCgkJICogICBmdW5jdGlvbiAoX2ZuR2F0aGVyRGF0YSkuIEJlIGNhcmVmdWwgdG8gbWFrZSB0aGUgc2FtZSBjaGFuZ2VzIGhlcmUgYXMgdGhlcmUgYW5kIHZpY2UtdmVyc2EKCQkgKi8KCQlmdW5jdGlvbiBfZm5BZGREYXRhICggb1NldHRpbmdzLCBhRGF0YVN1cHBsaWVkICkKCQl7CgkJCXZhciBvQ29sOwoJCQkKCQkJLyogVGFrZSBhbiBpbmRlcGVuZGVudCBjb3B5IG9mIHRoZSBkYXRhIHNvdXJjZSBzbyB3ZSBjYW4gYmFzaCBpdCBhYm91dCBhcyB3ZSB3aXNoICovCgkJCXZhciBhRGF0YUluID0gKHR5cGVvZiBhRGF0YVN1cHBsaWVkLmxlbmd0aCA9PSAnbnVtYmVyJykgPwoJCQkJYURhdGFTdXBwbGllZC5zbGljZSgpIDoKCQkJCSQuZXh0ZW5kKCB0cnVlLCB7fSwgYURhdGFTdXBwbGllZCApOwoJCQkKCQkJLyogQ3JlYXRlIHRoZSBvYmplY3QgZm9yIHN0b3JpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuZXcgcm93ICovCgkJCXZhciBpUm93ID0gb1NldHRpbmdzLmFvRGF0YS5sZW5ndGg7CgkJCXZhciBvRGF0YSA9IHsKCQkJCSJuVHIiOiBudWxsLAoJCQkJIl9pSWQiOiBvU2V0dGluZ3MuaU5leHRJZCsrLAoJCQkJIl9hRGF0YSI6IGFEYXRhSW4sCgkJCQkiX2FuSGlkZGVuIjogW10sCgkJCQkiX3NSb3dTdHJpcGUiOiAiIgoJCQl9OwoJCQlvU2V0dGluZ3MuYW9EYXRhLnB1c2goIG9EYXRhICk7CgoJCQkvKiBDcmVhdGUgdGhlIGNlbGxzICovCgkJCXZhciBuVGQsIHNUaGlzVHlwZTsKCQkJZm9yICggdmFyIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCW9Db2wgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldOwoKCQkJCS8qIFVzZSByZW5kZXJlZCBkYXRhIGZvciBmaWx0ZXJpbmcvc29ydGluZyAqLwoJCQkJaWYgKCB0eXBlb2Ygb0NvbC5mblJlbmRlciA9PSAnZnVuY3Rpb24nICYmIG9Db2wuYlVzZVJlbmRlcmVkICYmIG9Db2wubURhdGFQcm9wICE9PSBudWxsICkKCQkJCXsKCQkJCQlfZm5TZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpLCBvQ29sLmZuUmVuZGVyKCB7CgkJCQkJCSJpRGF0YVJvdyI6IGlSb3csCgkJCQkJCSJpRGF0YUNvbHVtbiI6IGksCgkJCQkJCSJhRGF0YSI6IG9EYXRhLl9hRGF0YSwKCQkJCQkJIm9TZXR0aW5ncyI6IG9TZXR0aW5ncwoJCQkJCX0gKSApOwoJCQkJfQoJCQkJCgkJCQkvKiBTZWUgaWYgd2Ugc2hvdWxkIGF1dG8tZGV0ZWN0IHRoZSBjb2x1bW4gdHlwZSAqLwoJCQkJaWYgKCBvQ29sLl9iQXV0b1R5cGUgJiYgb0NvbC5zVHlwZSAhPSAnc3RyaW5nJyApCgkJCQl7CgkJCQkJLyogQXR0ZW1wdCB0byBhdXRvIGRldGVjdCB0aGUgdHlwZSAtIHNhbWUgYXMgX2ZuR2F0aGVyRGF0YSgpICovCgkJCQkJdmFyIHNWYXJUeXBlID0gX2ZuR2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVJvdywgaSwgJ3R5cGUnICk7CgkJCQkJaWYgKCBzVmFyVHlwZSAhPT0gbnVsbCAmJiBzVmFyVHlwZSAhPT0gJycgKQoJCQkJCXsKCQkJCQkJc1RoaXNUeXBlID0gX2ZuRGV0ZWN0VHlwZSggc1ZhclR5cGUgKTsKCQkJCQkJaWYgKCBvQ29sLnNUeXBlID09PSBudWxsICkKCQkJCQkJewoJCQkJCQkJb0NvbC5zVHlwZSA9IHNUaGlzVHlwZTsKCQkJCQkJfQoJCQkJCQllbHNlIGlmICggb0NvbC5zVHlwZSAhPSBzVGhpc1R5cGUgKQoJCQkJCQl7CgkJCQkJCQkvKiBTdHJpbmcgaXMgYWx3YXlzIHRoZSAnZmFsbGJhY2snIG9wdGlvbiAqLwoJCQkJCQkJb0NvbC5zVHlwZSA9ICdzdHJpbmcnOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCQoJCQkvKiBBZGQgdG8gdGhlIGRpc3BsYXkgYXJyYXkgKi8KCQkJb1NldHRpbmdzLmFpRGlzcGxheU1hc3Rlci5wdXNoKCBpUm93ICk7CgoJCQkvKiBDcmVhdGUgdGhlIERPTSBpbWZvcm1hdGlvbiAqLwoJCQlpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJEZWZlclJlbmRlciApCgkJCXsKCQkJCV9mbkNyZWF0ZVRyKCBvU2V0dGluZ3MsIGlSb3cgKTsKCQkJfQoKCQkJcmV0dXJuIGlSb3c7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkNyZWF0ZVRyCgkJICogUHVycG9zZTogIENyZWF0ZSBhIG5ldyBUUiBlbGVtZW50IChhbmQgaXQncyBURCBjaGlsZHJlbikgZm9yIGEgcm93CgkJICogUmV0dXJuczogIHZvaWQKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGludDppUm93IC0gUm93IHRvIGNvbnNpZGVyCgkJICovCgkJZnVuY3Rpb24gX2ZuQ3JlYXRlVHIgKCBvU2V0dGluZ3MsIGlSb3cgKQoJCXsKCQkJdmFyIG9EYXRhID0gb1NldHRpbmdzLmFvRGF0YVtpUm93XTsKCQkJdmFyIG5UZDsKCgkJCWlmICggb0RhdGEublRyID09PSBudWxsICkKCQkJewoJCQkJb0RhdGEublRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCgkJCQkvKiBTcGVjaWFsIHBhcmFtZXRlcnMgY2FuIGJlIGdpdmVuIGJ5IHRoZSBkYXRhIHNvdXJjZSB0byBiZSB1c2VkIG9uIHRoZSByb3cgKi8KCQkJCWlmICggdHlwZW9mIG9EYXRhLl9hRGF0YS5EVF9Sb3dJZCAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJb0RhdGEublRyLnNldEF0dHJpYnV0ZSggJ2lkJywgb0RhdGEuX2FEYXRhLkRUX1Jvd0lkICk7CgkJCQl9CgoJCQkJaWYgKCB0eXBlb2Ygb0RhdGEuX2FEYXRhLkRUX1Jvd0NsYXNzICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQkkKG9EYXRhLm5UcikuYWRkQ2xhc3MoIG9EYXRhLl9hRGF0YS5EVF9Sb3dDbGFzcyApOwoJCQkJfQoKCQkJCS8qIFByb2Nlc3MgZWFjaCBjb2x1bW4gKi8KCQkJCWZvciAoIHZhciBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCXZhciBvQ29sID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXTsKCQkJCQluVGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoKCQkJCQkvKiBSZW5kZXIgaWYgbmVlZGVkIC0gaWYgYlVzZVJlbmRlcmVkIGlzIHRydWUgdGhlbiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlbmRlcmVkCgkJCQkJICogdmFsdWUgaW4gdGhlIGRhdGEgc291cmNlIC0gc28gY2FuIGp1c3QgdXNlIHRoYXQKCQkJCQkgKi8KCQkJCQlpZiAoIHR5cGVvZiBvQ29sLmZuUmVuZGVyID09ICdmdW5jdGlvbicgJiYgKCFvQ29sLmJVc2VSZW5kZXJlZCB8fCBvQ29sLm1EYXRhUHJvcCA9PT0gbnVsbCkgKQoJCQkJCXsKCQkJCQkJblRkLmlubmVySFRNTCA9IG9Db2wuZm5SZW5kZXIoIHsKCQkJCQkJCSJpRGF0YVJvdyI6IGlSb3csCgkJCQkJCQkiaURhdGFDb2x1bW4iOiBpLAoJCQkJCQkJImFEYXRhIjogb0RhdGEuX2FEYXRhLAoJCQkJCQkJIm9TZXR0aW5ncyI6IG9TZXR0aW5ncwoJCQkJCQl9ICk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCW5UZC5pbm5lckhUTUwgPSBfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpLCAnZGlzcGxheScgKTsKCQkJCQl9CgkJCQkKCQkJCQkvKiBBZGQgdXNlciBkZWZpbmVkIGNsYXNzICovCgkJCQkJaWYgKCBvQ29sLnNDbGFzcyAhPT0gbnVsbCApCgkJCQkJewoJCQkJCQluVGQuY2xhc3NOYW1lID0gb0NvbC5zQ2xhc3M7CgkJCQkJfQoJCQkJCQoJCQkJCWlmICggb0NvbC5iVmlzaWJsZSApCgkJCQkJewoJCQkJCQlvRGF0YS5uVHIuYXBwZW5kQ2hpbGQoIG5UZCApOwoJCQkJCQlvRGF0YS5fYW5IaWRkZW5baV0gPSBudWxsOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlvRGF0YS5fYW5IaWRkZW5baV0gPSBuVGQ7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkdhdGhlckRhdGEKCQkgKiBQdXJwb3NlOiAgUmVhZCBpbiB0aGUgZGF0YSBmcm9tIHRoZSB0YXJnZXQgdGFibGUgZnJvbSB0aGUgRE9NCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogTm90ZXM6ICAgIFRoaXMgaXMgYSBvcHRpbWlzZWQgdmVyc2lvbiBvZiBfZm5BZGREYXRhIChtb3JlIG9yIGxlc3MpIGZvciByZWFkaW5nIGluZm9ybWF0aW9uCgkJICogICBmcm9tIHRoZSBET00uIFRoZSBiYXNpYyBhY3Rpb25zIG11c3QgYmUgaWRlbnRpY2FsIGluIHRoZSB0d28gZnVuY3Rpb25zLgoJCSAqLwoJCWZ1bmN0aW9uIF9mbkdhdGhlckRhdGEoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgaUxvb3AsIGksIGlMZW4sIGosIGpMZW4sIGpJbm5lciwKCQkJIAluVGRzLCBuVHJzLCBuVGQsIGFMb2NhbERhdGEsIGlUaGlzSW5kZXgsCgkJCQlpUm93LCBpUm93cywgaUNvbHVtbiwgaUNvbHVtbnMsIHNOb2RlTmFtZTsKCQkJCgkJCS8qCgkJCSAqIFByb2Nlc3MgYnkgcm93IGZpcnN0CgkJCSAqIEFkZCB0aGUgZGF0YSBvYmplY3QgZm9yIHRoZSB3aG9sZSB0YWJsZSAtIHN0b3JpbmcgdGhlIHRyIG5vZGUuIE5vdGUgLSBubyBwb2ludCBpbiBnZXR0aW5nCgkJCSAqIERPTSBiYXNlZCBkYXRhIGlmIHdlIGFyZSBnb2luZyB0byBnbyBhbmQgcmVwbGFjZSBpdCB3aXRoIEFqYXggc291cmNlIGRhdGEuCgkJCSAqLwoJCQlpZiAoIG9TZXR0aW5ncy5iRGVmZXJMb2FkaW5nIHx8IG9TZXR0aW5ncy5zQWpheFNvdXJjZSA9PT0gbnVsbCApCgkJCXsKCQkJCW5UcnMgPSBvU2V0dGluZ3MublRCb2R5LmNoaWxkTm9kZXM7CgkJCQlmb3IgKCBpPTAsIGlMZW49blRycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWlmICggblRyc1tpXS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09ICJUUiIgKQoJCQkJCXsKCQkJCQkJaVRoaXNJbmRleCA9IG9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoOwoJCQkJCQlvU2V0dGluZ3MuYW9EYXRhLnB1c2goIHsKCQkJCQkJCSJuVHIiOiBuVHJzW2ldLAoJCQkJCQkJIl9pSWQiOiBvU2V0dGluZ3MuaU5leHRJZCsrLAoJCQkJCQkJIl9hRGF0YSI6IFtdLAoJCQkJCQkJIl9hbkhpZGRlbiI6IFtdLAoJCQkJCQkJIl9zUm93U3RyaXBlIjogJycKCQkJCQkJfSApOwoJCQkJCQkKCQkJCQkJb1NldHRpbmdzLmFpRGlzcGxheU1hc3Rlci5wdXNoKCBpVGhpc0luZGV4ICk7CgkJCQkJCW5UZHMgPSBuVHJzW2ldLmNoaWxkTm9kZXM7CgkJCQkJCWpJbm5lciA9IDA7CgkJCQkJCQoJCQkJCQlmb3IgKCBqPTAsIGpMZW49blRkcy5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJCQl7CgkJCQkJCQlzTm9kZU5hbWUgPSBuVGRzW2pdLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7CgkJCQkJCQlpZiAoIHNOb2RlTmFtZSA9PSAiVEQiIHx8IHNOb2RlTmFtZSA9PSAiVEgiICkKCQkJCQkJCXsKCQkJCQkJCQlfZm5TZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpVGhpc0luZGV4LCBqSW5uZXIsICQudHJpbShuVGRzW2pdLmlubmVySFRNTCkgKTsKCQkJCQkJCQlqSW5uZXIrKzsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQkJLyogR2F0aGVyIGluIHRoZSBURCBlbGVtZW50cyBvZiB0aGUgVGFibGUgLSBub3RlIHRoYXQgdGhpcyBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMKCQkJICogZm5HZXRUZE5vZGVzLCBidXQgdGhhdCBmdW5jdGlvbiB0YWtlcyBhY2NvdW50IG9mIGhpZGRlbiBjb2x1bW5zLCB3aGljaCB3ZSBoYXZlbid0IHlldAoJCQkgKiBzZXR1cCEKCQkJICovCgkJCW5UcnMgPSBfZm5HZXRUck5vZGVzKCBvU2V0dGluZ3MgKTsKCQkJblRkcyA9IFtdOwoJCQlmb3IgKCBpPTAsIGlMZW49blRycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlmb3IgKCBqPTAsIGpMZW49blRyc1tpXS5jaGlsZE5vZGVzLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQl7CgkJCQkJblRkID0gblRyc1tpXS5jaGlsZE5vZGVzW2pdOwoJCQkJCXNOb2RlTmFtZSA9IG5UZC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpOwoJCQkJCWlmICggc05vZGVOYW1lID09ICJURCIgfHwgc05vZGVOYW1lID09ICJUSCIgKQoJCQkJCXsKCQkJCQkJblRkcy5wdXNoKCBuVGQgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCgkJCS8qIFNhbml0eSBjaGVjayAqLwoJCQlpZiAoIG5UZHMubGVuZ3RoICE9IG5UcnMubGVuZ3RoICogb1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggKQoJCQl7CgkJCQlfZm5Mb2coIG9TZXR0aW5ncywgMSwgIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIFREIGVsZW1lbnRzLiBFeHBlY3RlZCAiKwoJCQkJCShuVHJzLmxlbmd0aCAqIG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoKSsiIGFuZCBnb3QgIituVGRzLmxlbmd0aCsiLiBEYXRhVGFibGVzIGRvZXMgIisKCQkJCQkibm90IHN1cHBvcnQgcm93c3BhbiAvIGNvbHNwYW4gaW4gdGhlIHRhYmxlIGJvZHksIGFuZCB0aGVyZSBtdXN0IGJlIG9uZSBjZWxsIGZvciBlYWNoICIrCgkJCQkJInJvdy9jb2x1bW4gY29tYmluYXRpb24uIiApOwoJCQl9CgkJCQoJCQkvKiBOb3cgcHJvY2VzcyBieSBjb2x1bW4gKi8KCQkJZm9yICggaUNvbHVtbj0wLCBpQ29sdW1ucz1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGlDb2x1bW48aUNvbHVtbnMgOyBpQ29sdW1uKysgKQoJCQl7CgkJCQkvKiBHZXQgdGhlIHRpdGxlIG9mIHRoZSBjb2x1bW4gLSB1bmxlc3MgdGhlcmUgaXMgYSB1c2VyIHNldCBvbmUgKi8KCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5zVGl0bGUgPT09IG51bGwgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uc1RpdGxlID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5uVGguaW5uZXJIVE1MOwoJCQkJfQoJCQkJCgkJCQl2YXIKCQkJCQliQXV0b1R5cGUgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLl9iQXV0b1R5cGUsCgkJCQkJYlJlbmRlciA9IHR5cGVvZiBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLmZuUmVuZGVyID09ICdmdW5jdGlvbicsCgkJCQkJYkNsYXNzID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5zQ2xhc3MgIT09IG51bGwsCgkJCQkJYlZpc2libGUgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLmJWaXNpYmxlLAoJCQkJCW5DZWxsLCBzVGhpc1R5cGUsIHNSZW5kZXJlZCwgc1ZhbFR5cGU7CgkJCQkKCQkJCS8qIEEgc2luZ2xlIGxvb3AgdG8gcnVsZSB0aGVtIGFsbCAoYW5kIGJlIG1vcmUgZWZmaWNpZW50KSAqLwoJCQkJaWYgKCBiQXV0b1R5cGUgfHwgYlJlbmRlciB8fCBiQ2xhc3MgfHwgIWJWaXNpYmxlICkKCQkJCXsKCQkJCQlmb3IgKCBpUm93PTAsIGlSb3dzPW9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoIDsgaVJvdzxpUm93cyA7IGlSb3crKyApCgkJCQkJewoJCQkJCQluQ2VsbCA9IG5UZHNbIChpUm93KmlDb2x1bW5zKSArIGlDb2x1bW4gXTsKCQkJCQkJCgkJCQkJCS8qIFR5cGUgZGV0ZWN0aW9uICovCgkJCQkJCWlmICggYkF1dG9UeXBlICYmIG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uc1R5cGUgIT0gJ3N0cmluZycgKQoJCQkJCQl7CgkJCQkJCQlzVmFsVHlwZSA9IF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGlDb2x1bW4sICd0eXBlJyApOwoJCQkJCQkJaWYgKCBzVmFsVHlwZSAhPT0gJycgKQoJCQkJCQkJewoJCQkJCQkJCXNUaGlzVHlwZSA9IF9mbkRldGVjdFR5cGUoIHNWYWxUeXBlICk7CgkJCQkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLnNUeXBlID09PSBudWxsICkKCQkJCQkJCQl7CgkJCQkJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uc1R5cGUgPSBzVGhpc1R5cGU7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UgaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLnNUeXBlICE9IHNUaGlzVHlwZSApCgkJCQkJCQkJewoJCQkJCQkJCQkvKiBTdHJpbmcgaXMgYWx3YXlzIHRoZSAnZmFsbGJhY2snIG9wdGlvbiAqLwoJCQkJCQkJCQlvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLnNUeXBlID0gJ3N0cmluZyc7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCQoJCQkJCQkvKiBSZW5kZXJpbmcgKi8KCQkJCQkJaWYgKCBiUmVuZGVyICkKCQkJCQkJewoJCQkJCQkJc1JlbmRlcmVkID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5mblJlbmRlciggewoJCQkJCQkJCQkiaURhdGFSb3ciOiBpUm93LAoJCQkJCQkJCQkiaURhdGFDb2x1bW4iOiBpQ29sdW1uLAoJCQkJCQkJCQkiYURhdGEiOiBvU2V0dGluZ3MuYW9EYXRhW2lSb3ddLl9hRGF0YSwKCQkJCQkJCQkJIm9TZXR0aW5ncyI6IG9TZXR0aW5ncwoJCQkJCQkJCX0gKTsKCQkJCQkJCW5DZWxsLmlubmVySFRNTCA9IHNSZW5kZXJlZDsKCQkJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5iVXNlUmVuZGVyZWQgKQoJCQkJCQkJewoJCQkJCQkJCS8qIFVzZSB0aGUgcmVuZGVyZWQgZGF0YSBmb3IgZmlsdGVyaW5nL3NvcnRpbmcgKi8KCQkJCQkJCQlfZm5TZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpQ29sdW1uLCBzUmVuZGVyZWQgKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQkKCQkJCQkJLyogQ2xhc3NlcyAqLwoJCQkJCQlpZiAoIGJDbGFzcyApCgkJCQkJCXsKCQkJCQkJCW5DZWxsLmNsYXNzTmFtZSArPSAnICcrb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5zQ2xhc3M7CgkJCQkJCX0KCQkJCQkJCgkJCQkJCS8qIENvbHVtbiB2aXNhYmlsaXR5ICovCgkJCQkJCWlmICggIWJWaXNpYmxlICkKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFvRGF0YVtpUm93XS5fYW5IaWRkZW5baUNvbHVtbl0gPSBuQ2VsbDsKCQkJCQkJCW5DZWxsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5DZWxsICk7CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQlvU2V0dGluZ3MuYW9EYXRhW2lSb3ddLl9hbkhpZGRlbltpQ29sdW1uXSA9IG51bGw7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQnVpbGRIZWFkCgkJICogUHVycG9zZTogIENyZWF0ZSB0aGUgSFRNTCBoZWFkZXIgZm9yIHRoZSB0YWJsZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkJ1aWxkSGVhZCggb1NldHRpbmdzICkKCQl7CgkJCXZhciBpLCBuVGgsIGlMZW4sIGosIGpMZW47CgkJCXZhciBhblRyID0gb1NldHRpbmdzLm5USGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKTsKCQkJdmFyIGlUaHMgPSBvU2V0dGluZ3MublRIZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0aCcpLmxlbmd0aDsKCQkJdmFyIGlDb3JyZWN0b3IgPSAwOwoJCQl2YXIganFDaGlsZHJlbjsKCQkJCgkJCS8qIElmIHRoZXJlIGlzIGEgaGVhZGVyIGluIHBsYWNlIC0gdGhlbiB1c2UgaXQgLSBvdGhlcndpc2UgaXQncyBnb2luZyB0byBnZXQgbnVrZWQuLi4gKi8KCQkJaWYgKCBpVGhzICE9PSAwICkKCQkJewoJCQkJLyogV2UndmUgZ290IGEgdGhlYWQgZnJvbSB0aGUgRE9NLCBzbyByZW1vdmUgaGlkZGVuIGNvbHVtbnMgYW5kIGFwcGx5IHdpZHRoIHRvIHZpcyBjb2xzICovCgkJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCW5UaCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0ublRoOwoJCQkJCQoJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zQ2xhc3MgIT09IG51bGwgKQoJCQkJCXsKCQkJCQkJJChuVGgpLmFkZENsYXNzKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNDbGFzcyApOwoJCQkJCX0KCQkJCQkKCQkJCQkvKiBTZXQgdGhlIHRpdGxlIG9mIHRoZSBjb2x1bW4gaWYgaXQgaXMgdXNlciBkZWZpbmVkIChub3Qgd2hhdCB3YXMgYXV0byBkZXRlY3RlZCkgKi8KCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1RpdGxlICE9IG5UaC5pbm5lckhUTUwgKQoJCQkJCXsKCQkJCQkJblRoLmlubmVySFRNTCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1RpdGxlOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qIFdlIGRvbid0IGhhdmUgYSBoZWFkZXIgaW4gdGhlIERPTSAtIHNvIHdlIGFyZSBnb2luZyB0byBoYXZlIHRvIGNyZWF0ZSBvbmUgKi8KCQkJCXZhciBuVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAidHIiICk7CgkJCQkKCQkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJblRoID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGg7CgkJCQkJblRoLmlubmVySFRNTCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1RpdGxlOwoJCQkJCQoJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zQ2xhc3MgIT09IG51bGwgKQoJCQkJCXsKCQkJCQkJJChuVGgpLmFkZENsYXNzKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNDbGFzcyApOwoJCQkJCX0KCQkJCQkKCQkJCQluVHIuYXBwZW5kQ2hpbGQoIG5UaCApOwoJCQkJfQoJCQkJJChvU2V0dGluZ3MublRIZWFkKS5odG1sKCAnJyApWzBdLmFwcGVuZENoaWxkKCBuVHIgKTsKCQkJCV9mbkRldGVjdEhlYWRlciggb1NldHRpbmdzLmFvSGVhZGVyLCBvU2V0dGluZ3MublRIZWFkICk7CgkJCX0KCQkJCgkJCS8qIEFkZCB0aGUgZXh0cmEgbWFya3VwIG5lZWRlZCBieSBqUXVlcnkgVUkncyB0aGVtZXMgKi8KCQkJaWYgKCBvU2V0dGluZ3MuYkpVSSApCgkJCXsKCQkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJblRoID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGg7CgkJCQkJCgkJCQkJdmFyIG5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJCQluRGl2LmNsYXNzTmFtZSA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU29ydEpVSVdyYXBwZXI7CgkJCQkJJChuVGgpLmNvbnRlbnRzKCkuYXBwZW5kVG8obkRpdik7CgkJCQkJCgkJCQkJdmFyIG5TcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwoJCQkJCW5TcGFuLmNsYXNzTmFtZSA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU29ydEljb247CgkJCQkJbkRpdi5hcHBlbmRDaGlsZCggblNwYW4gKTsKCQkJCQluVGguYXBwZW5kQ2hpbGQoIG5EaXYgKTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogQWRkIHNvcnQgbGlzdGVuZXIgKi8KCQkJdmFyIGZuTm9TZWxlY3QgPSBmdW5jdGlvbiAoZSkgewoJCQkJdGhpcy5vbnNlbGVjdHN0YXJ0ID0gZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfTsKCQkJCgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCApCgkJCXsKCQkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iU29ydGFibGUgIT09IGZhbHNlICkKCQkJCQl7CgkJCQkJCV9mblNvcnRBdHRhY2hMaXN0ZW5lciggb1NldHRpbmdzLCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UaCwgaSApOwoJCQkJCQkKCQkJCQkJLyogVGFrZSB0aGUgYnJ1dGFsIGFwcHJvYWNoIHRvIGNhbmNlbGxpbmcgdGV4dCBzZWxlY3Rpb24gaW4gaGVhZGVyICovCgkJCQkJCSQob1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGgpLmJpbmQoICdtb3VzZWRvd24uRFQnLCBmbk5vU2VsZWN0ICk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSQob1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGgpLmFkZENsYXNzKCBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRhYmxlTm9uZSApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQkJLyogRGVhbCB3aXRoIHRoZSBmb290ZXIgLSBhZGQgY2xhc3NlcyBpZiByZXF1aXJlZCAqLwoJCQlpZiAoIG9TZXR0aW5ncy5vQ2xhc3Nlcy5zRm9vdGVyVEggIT09ICIiICkKCQkJewoJCQkJJCgnPnRyPnRoJywgb1NldHRpbmdzLm5URm9vdCkuYWRkQ2xhc3MoIG9TZXR0aW5ncy5vQ2xhc3Nlcy5zRm9vdGVyVEggKTsKCQkJfQoJCQkKCQkJLyogQ2FjaGUgdGhlIGZvb3RlciBlbGVtZW50cyAqLwoJCQlpZiAoIG9TZXR0aW5ncy5uVEZvb3QgIT09IG51bGwgKQoJCQl7CgkJCQl2YXIgYW5DZWxscyA9IF9mbkdldFVuaXF1ZVRocyggb1NldHRpbmdzLCBudWxsLCBvU2V0dGluZ3MuYW9Gb290ZXIgKTsKCQkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJaWYgKCB0eXBlb2YgYW5DZWxsc1tpXSAhPSAndW5kZWZpbmVkJyApCgkJCQkJewoJCQkJCQlvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UZiA9IGFuQ2VsbHNbaV07CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBEcmF3aW5nIGZ1bmN0aW9ucwoJCSAqLwoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkRyYXdIZWFkCgkJICogUHVycG9zZTogIERyYXcgdGhlIGhlYWRlciAob3IgZm9vdGVyKSBlbGVtZW50IGJhc2VkIG9uIHRoZSBjb2x1bW4gdmlzaWJpbGl0eSBzdGF0ZXMuIFRoZQoJCSAqICAgICAgICAgICBtZXRob2RvbG9neSBoZXJlIGlzIHRvIHVzZSB0aGUgbGF5b3V0IGFycmF5IGZyb20gX2ZuRGV0ZWN0SGVhZGVyLCBtb2RpZmllZCBmb3IKCQkgKiAgICAgICAgICAgdGhlIGluc3RhbnRhbmVvdXMgY29sdW1uIHZpc2liaWxpdHksIHRvIGNvbnN0cnVjdCB0aGUgbmV3IGxheW91dC4gVGhlIGdyaWQgaXMKCQkgKiAgICAgICAgICAgdHJhdmVyc2VkIG92ZXIgY2VsbCBhdCBhIHRpbWUgaW4gYSByb3dzIHggY29sdW1ucyBncmlkIGZhc2hpb24sIGFsdGhvdWdoIGVhY2ggCgkJICogICAgICAgICAgIGNlbGwgaW5zZXJ0IGNhbiBjb3ZlciBtdWx0aXBsZSBlbGVtZW50cyBpbiB0aGUgZ3JpZCAtIHdoaWNoIGlzIHRyYWNrcyB1c2luZyB0aGUKCQkgKiAgICAgICAgICAgYUFwcGxpZWQgYXJyYXkuIENlbGwgaW5zZXJ0cyBpbiB0aGUgZ3JpZCB3aWxsIG9ubHkgb2NjdXIgd2hlcmUgdGhlcmUgaXNuJ3QKCQkgKiAgICAgICAgICAgYWxyZWFkeSBhIGNlbGwgaW4gdGhhdCBwb3NpdGlvbi4KCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgYXJyYXkgb2JqZWN0czphb1NvdXJjZSAtIExheW91dCBhcnJheSBmcm9tIF9mbkRldGVjdEhlYWRlcgoJCSAqICAgICAgICAgICBib29sZWFuOmJJbmNsdWRlSGlkZGVuIC0gSWYgdHJ1ZSB0aGVuIGluY2x1ZGUgdGhlIGhpZGRlbiBjb2x1bW5zIGluIHRoZSBjYWxjLCAKCQkgKiAgICAgICAgICAgICAtIG9wdGlvbmFsOiBkZWZhdWx0IGZhbHNlCgkJICovCgkJZnVuY3Rpb24gX2ZuRHJhd0hlYWQoIG9TZXR0aW5ncywgYW9Tb3VyY2UsIGJJbmNsdWRlSGlkZGVuICkKCQl7CgkJCXZhciBpLCBpTGVuLCBqLCBqTGVuLCBrLCBrTGVuOwoJCQl2YXIgYW9Mb2NhbCA9IFtdOwoJCQl2YXIgYUFwcGxpZWQgPSBbXTsKCQkJdmFyIGlDb2x1bW5zID0gb1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGg7CgkJCXZhciBpUm93c3BhbiwgaUNvbHNwYW47CgoJCQlpZiAoIHR5cGVvZiBiSW5jbHVkZUhpZGRlbiA9PSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCWJJbmNsdWRlSGlkZGVuID0gZmFsc2U7CgkJCX0KCgkJCS8qIE1ha2UgYSBjb3B5IG9mIHRoZSBtYXN0ZXIgbGF5b3V0IGFycmF5LCBidXQgd2l0aG91dCB0aGUgdmlzaWJsZSBjb2x1bW5zIGluIGl0ICovCgkJCWZvciAoIGk9MCwgaUxlbj1hb1NvdXJjZS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlhb0xvY2FsW2ldID0gYW9Tb3VyY2VbaV0uc2xpY2UoKTsKCQkJCWFvTG9jYWxbaV0ublRyID0gYW9Tb3VyY2VbaV0ublRyOwoKCQkJCS8qIFJlbW92ZSBhbnkgY29sdW1ucyB3aGljaCBhcmUgY3VycmVudGx5IGhpZGRlbiAqLwoJCQkJZm9yICggaj1pQ29sdW1ucy0xIDsgaj49MCA7IGotLSApCgkJCQl7CgkJCQkJaWYgKCAhb1NldHRpbmdzLmFvQ29sdW1uc1tqXS5iVmlzaWJsZSAmJiAhYkluY2x1ZGVIaWRkZW4gKQoJCQkJCXsKCQkJCQkJYW9Mb2NhbFtpXS5zcGxpY2UoIGosIDEgKTsKCQkJCQl9CgkJCQl9CgoJCQkJLyogUHJlcCB0aGUgYXBwbGllZCBhcnJheSAtIGl0IG5lZWRzIGFuIGVsZW1lbnQgZm9yIGVhY2ggcm93ICovCgkJCQlhQXBwbGllZC5wdXNoKCBbXSApOwoJCQl9CgoJCQlmb3IgKCBpPTAsIGlMZW49YW9Mb2NhbC5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQkvKiBBbGwgY2VsbHMgYXJlIGdvaW5nIHRvIGJlIHJlcGxhY2VkLCBzbyBlbXB0eSBvdXQgdGhlIHJvdyAqLwoJCQkJaWYgKCBhb0xvY2FsW2ldLm5UciApCgkJCQl7CgkJCQkJZm9yICggaz0wLCBrTGVuPWFvTG9jYWxbaV0ublRyLmNoaWxkTm9kZXMubGVuZ3RoIDsgazxrTGVuIDsgaysrICkKCQkJCQl7CgkJCQkJCWFvTG9jYWxbaV0ublRyLnJlbW92ZUNoaWxkKCBhb0xvY2FsW2ldLm5Uci5jaGlsZE5vZGVzWzBdICk7CgkJCQkJfQoJCQkJfQoKCQkJCWZvciAoIGo9MCwgakxlbj1hb0xvY2FsW2ldLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQl7CgkJCQkJaVJvd3NwYW4gPSAxOwoJCQkJCWlDb2xzcGFuID0gMTsKCgkJCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBjZWxsIChyb3cvY29sc3BhbikgY292ZXJpbmcgb3VyIHRhcmdldAoJCQkJCSAqIGluc2VydCBwb2ludC4gSWYgdGhlcmUgaXMsIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4KCQkJCQkgKi8KCQkJCQlpZiAoIHR5cGVvZiBhQXBwbGllZFtpXVtqXSA9PSAndW5kZWZpbmVkJyApCgkJCQkJewoJCQkJCQlhb0xvY2FsW2ldLm5Uci5hcHBlbmRDaGlsZCggYW9Mb2NhbFtpXVtqXS5jZWxsICk7CgkJCQkJCWFBcHBsaWVkW2ldW2pdID0gMTsKCgkJCQkJCS8qIEV4cGFuZCB0aGUgY2VsbCB0byBjb3ZlciBhcyBtYW55IHJvd3MgYXMgbmVlZGVkICovCgkJCQkJCXdoaWxlICggdHlwZW9mIGFvTG9jYWxbaStpUm93c3Bhbl0gIT0gJ3VuZGVmaW5lZCcgJiYKCQkJCQkJICAgICAgICBhb0xvY2FsW2ldW2pdLmNlbGwgPT0gYW9Mb2NhbFtpK2lSb3dzcGFuXVtqXS5jZWxsICkKCQkJCQkJewoJCQkJCQkJYUFwcGxpZWRbaStpUm93c3Bhbl1bal0gPSAxOwoJCQkJCQkJaVJvd3NwYW4rKzsKCQkJCQkJfQoKCQkJCQkJLyogRXhwYW5kIHRoZSBjZWxsIHRvIGNvdmVyIGFzIG1hbnkgY29sdW1ucyBhcyBuZWVkZWQgKi8KCQkJCQkJd2hpbGUgKCB0eXBlb2YgYW9Mb2NhbFtpXVtqK2lDb2xzcGFuXSAhPSAndW5kZWZpbmVkJyAmJgoJCQkJCQkgICAgICAgIGFvTG9jYWxbaV1bal0uY2VsbCA9PSBhb0xvY2FsW2ldW2oraUNvbHNwYW5dLmNlbGwgKQoJCQkJCQl7CgkJCQkJCQkvKiBNdXN0IHVwZGF0ZSB0aGUgYXBwbGllZCBhcnJheSBvdmVyIHRoZSByb3dzIGZvciB0aGUgY29sdW1ucyAqLwoJCQkJCQkJZm9yICggaz0wIDsgazxpUm93c3BhbiA7IGsrKyApCgkJCQkJCQl7CgkJCQkJCQkJYUFwcGxpZWRbaStrXVtqK2lDb2xzcGFuXSA9IDE7CgkJCQkJCQl9CgkJCQkJCQlpQ29sc3BhbisrOwoJCQkJCQl9CgoJCQkJCQkvKiBEbyB0aGUgYWN0dWFsIGV4cGFuc2lvbiBpbiB0aGUgRE9NICovCgkJCQkJCWFvTG9jYWxbaV1bal0uY2VsbC5zZXRBdHRyaWJ1dGUoJ3Jvd3NwYW4nLCBpUm93c3Bhbik7CgkJCQkJCWFvTG9jYWxbaV1bal0uY2VsbC5zZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nLCBpQ29sc3Bhbik7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkRyYXcKCQkgKiBQdXJwb3NlOiAgSW5zZXJ0IHRoZSByZXF1aXJlZCBUUiBub2RlcyBpbnRvIHRoZSB0YWJsZSBmb3IgZGlzcGxheQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkRyYXcoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgaSwgaUxlbjsKCQkJdmFyIGFuUm93cyA9IFtdOwoJCQl2YXIgaVJvd0NvdW50ID0gMDsKCQkJdmFyIGJSb3dFcnJvciA9IGZhbHNlOwoJCQl2YXIgaVN0cmlwcyA9IG9TZXR0aW5ncy5hc1N0cmlwQ2xhc3Nlcy5sZW5ndGg7CgkJCXZhciBpT3BlblJvd3MgPSBvU2V0dGluZ3MuYW9PcGVuUm93cy5sZW5ndGg7CgkJCQoJCQkvKiBQcm92aWRlIGEgcHJlLWNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgZHJhdyBpcyBmYWxzZSBpcyByZXR1cm5lZCAqLwoJCQlpZiAoIG9TZXR0aW5ncy5mblByZURyYXdDYWxsYmFjayAhPT0gbnVsbCAmJgoJCQkgICAgIG9TZXR0aW5ncy5mblByZURyYXdDYWxsYmFjay5jYWxsKCBvU2V0dGluZ3Mub0luc3RhbmNlLCBvU2V0dGluZ3MgKSA9PT0gZmFsc2UgKQoJCQl7CgkJCSAgICAgcmV0dXJuOwoJCQl9CgkJCQoJCQlvU2V0dGluZ3MuYkRyYXdpbmcgPSB0cnVlOwoJCQkKCQkJLyogQ2hlY2sgYW5kIHNlZSBpZiB3ZSBoYXZlIGFuIGluaXRpYWwgZHJhdyBwb3NpdGlvbiBmcm9tIHN0YXRlIHNhdmluZyAqLwoJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgIT0gJ3VuZGVmaW5lZCcgJiYgb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ICE9IC0xICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSBvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQ7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gKG9TZXR0aW5ncy5pSW5pdERpc3BsYXlTdGFydCA+PSBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpKSA/CgkJCQkJCTAgOiBvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQ7CgkJCQl9CgkJCQlvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgPSAtMTsKCQkJCV9mbkNhbGN1bGF0ZUVuZCggb1NldHRpbmdzICk7CgkJCX0KCQkJCgkJCS8qIFNlcnZlci1zaWRlIHByb2Nlc3NpbmcgZHJhdyBpbnRlcmNlcHQgKi8KCQkJaWYgKCBvU2V0dGluZ3MuYkRlZmVyTG9hZGluZyApCgkJCXsKCQkJCW9TZXR0aW5ncy5iRGVmZXJMb2FkaW5nID0gZmFsc2U7CgkJCQlvU2V0dGluZ3MuaURyYXcrKzsKCQkJfQoJCQllbHNlIGlmICggIW9TZXR0aW5ncy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgKQoJCQl7CgkJCQlvU2V0dGluZ3MuaURyYXcrKzsKCQkJfQoJCQllbHNlIGlmICggIW9TZXR0aW5ncy5iRGVzdHJveWluZyAmJiAhX2ZuQWpheFVwZGF0ZSggb1NldHRpbmdzICkgKQoJCQl7CgkJCQlyZXR1cm47CgkJCX0KCQkJCgkJCWlmICggb1NldHRpbmdzLmFpRGlzcGxheS5sZW5ndGggIT09IDAgKQoJCQl7CgkJCQl2YXIgaVN0YXJ0ID0gb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0OwoJCQkJdmFyIGlFbmQgPSBvU2V0dGluZ3MuX2lEaXNwbGF5RW5kOwoJCQkJCgkJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgKQoJCQkJewoJCQkJCWlTdGFydCA9IDA7CgkJCQkJaUVuZCA9IG9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoOwoJCQkJfQoJCQkJCgkJCQlmb3IgKCB2YXIgaj1pU3RhcnQgOyBqPGlFbmQgOyBqKysgKQoJCQkJewoJCQkJCXZhciBhb0RhdGEgPSBvU2V0dGluZ3MuYW9EYXRhWyBvU2V0dGluZ3MuYWlEaXNwbGF5W2pdIF07CgkJCQkJaWYgKCBhb0RhdGEublRyID09PSBudWxsICkKCQkJCQl7CgkJCQkJCV9mbkNyZWF0ZVRyKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5haURpc3BsYXlbal0gKTsKCQkJCQl9CgoJCQkJCXZhciBuUm93ID0gYW9EYXRhLm5UcjsKCQkJCQkKCQkJCQkvKiBSZW1vdmUgdGhlIG9sZCBzdHJpcHBpbmcgY2xhc3NlcyBhbmQgdGhlbiBhZGQgdGhlIG5ldyBvbmUgKi8KCQkJCQlpZiAoIGlTdHJpcHMgIT09IDAgKQoJCQkJCXsKCQkJCQkJdmFyIHNTdHJpcCA9IG9TZXR0aW5ncy5hc1N0cmlwQ2xhc3Nlc1sgaVJvd0NvdW50ICUgaVN0cmlwcyBdOwoJCQkJCQlpZiAoIGFvRGF0YS5fc1Jvd1N0cmlwZSAhPSBzU3RyaXAgKQoJCQkJCQl7CgkJCQkJCQkkKG5Sb3cpLnJlbW92ZUNsYXNzKCBhb0RhdGEuX3NSb3dTdHJpcGUgKS5hZGRDbGFzcyggc1N0cmlwICk7CgkJCQkJCQlhb0RhdGEuX3NSb3dTdHJpcGUgPSBzU3RyaXA7CgkJCQkJCX0KCQkJCQl9CgkJCQkJCgkJCQkJLyogQ3VzdG9tIHJvdyBjYWxsYmFjayBmdW5jdGlvbiAtIG1pZ2h0IHdhbnQgdG8gbWFuaXB1bGUgdGhlIHJvdyAqLwoJCQkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5mblJvd0NhbGxiYWNrID09ICJmdW5jdGlvbiIgKQoJCQkJCXsKCQkJCQkJblJvdyA9IG9TZXR0aW5ncy5mblJvd0NhbGxiYWNrLmNhbGwoIG9TZXR0aW5ncy5vSW5zdGFuY2UsIG5Sb3csIAoJCQkJCQkJb1NldHRpbmdzLmFvRGF0YVsgb1NldHRpbmdzLmFpRGlzcGxheVtqXSBdLl9hRGF0YSwgaVJvd0NvdW50LCBqICk7CgkJCQkJCWlmICggIW5Sb3cgJiYgIWJSb3dFcnJvciApCgkJCQkJCXsKCQkJCQkJCV9mbkxvZyggb1NldHRpbmdzLCAwLCAiQSBub2RlIHdhcyBub3QgcmV0dXJuZWQgYnkgZm5Sb3dDYWxsYmFjayIgKTsKCQkJCQkJCWJSb3dFcnJvciA9IHRydWU7CgkJCQkJCX0KCQkJCQl9CgkJCQkJCgkJCQkJYW5Sb3dzLnB1c2goIG5Sb3cgKTsKCQkJCQlpUm93Q291bnQrKzsKCQkJCQkKCQkJCQkvKiBJZiB0aGVyZSBpcyBhbiBvcGVuIHJvdyAtIGFuZCBpdCBpcyBhdHRhY2hlZCB0byB0aGlzIHBhcmVudCAtIGF0dGFjaCBpdCBvbiByZWRyYXcgKi8KCQkJCQlpZiAoIGlPcGVuUm93cyAhPT0gMCApCgkJCQkJewoJCQkJCQlmb3IgKCB2YXIgaz0wIDsgazxpT3BlblJvd3MgOyBrKysgKQoJCQkJCQl7CgkJCQkJCQlpZiAoIG5Sb3cgPT0gb1NldHRpbmdzLmFvT3BlblJvd3Nba10ublBhcmVudCApCgkJCQkJCQl7CgkJCQkJCQkJYW5Sb3dzLnB1c2goIG9TZXR0aW5ncy5hb09wZW5Sb3dzW2tdLm5UciApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogVGFibGUgaXMgZW1wdHkgLSBjcmVhdGUgYSByb3cgd2l0aCBhbiBlbXB0eSBtZXNzYWdlIGluIGl0ICovCgkJCQlhblJvd3NbIDAgXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICd0cicgKTsKCQkJCQoJCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLmFzU3RyaXBDbGFzc2VzWzBdICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlhblJvd3NbIDAgXS5jbGFzc05hbWUgPSBvU2V0dGluZ3MuYXNTdHJpcENsYXNzZXNbMF07CgkJCQl9CgoJCQkJdmFyIHNaZXJvID0gb1NldHRpbmdzLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMucmVwbGFjZSgKCQkJCQknX01BWF8nLCBvU2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIob1NldHRpbmdzLmZuUmVjb3Jkc1RvdGFsKCkpICk7CgkJCQlpZiAoIG9TZXR0aW5ncy5pRHJhdyA9PSAxICYmIG9TZXR0aW5ncy5zQWpheFNvdXJjZSAhPT0gbnVsbCAmJiAhb1NldHRpbmdzLm9GZWF0dXJlcy5iU2VydmVyU2lkZSApCgkJCQl7CgkJCQkJc1plcm8gPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNMb2FkaW5nUmVjb3JkczsKCQkJCX0KCQkJCWVsc2UgaWYgKCB0eXBlb2Ygb1NldHRpbmdzLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSAhPSAndW5kZWZpbmVkJyAmJgoJCQkJICAgICBvU2V0dGluZ3MuZm5SZWNvcmRzVG90YWwoKSA9PT0gMCApCgkJCQl7CgkJCQkJc1plcm8gPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNFbXB0eVRhYmxlOwoJCQkJfQoKCQkJCXZhciBuVGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAndGQnICk7CgkJCQluVGQuc2V0QXR0cmlidXRlKCAndmFsaWduJywgInRvcCIgKTsKCQkJCW5UZC5jb2xTcGFuID0gX2ZuVmlzYmxlQ29sdW1ucyggb1NldHRpbmdzICk7CgkJCQluVGQuY2xhc3NOYW1lID0gb1NldHRpbmdzLm9DbGFzc2VzLnNSb3dFbXB0eTsKCQkJCW5UZC5pbm5lckhUTUwgPSBzWmVybzsKCQkJCQoJCQkJYW5Sb3dzWyBpUm93Q291bnQgXS5hcHBlbmRDaGlsZCggblRkICk7CgkJCX0KCQkJCgkJCS8qIENhbGxiYWNrIHRoZSBoZWFkZXIgYW5kIGZvb3RlciBjdXN0b20gZnVuY2F0aW9uIGlmIHRoZXJlIGlzIG9uZSAqLwoJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuZm5IZWFkZXJDYWxsYmFjayA9PSAnZnVuY3Rpb24nICkKCQkJewoJCQkJb1NldHRpbmdzLmZuSGVhZGVyQ2FsbGJhY2suY2FsbCggb1NldHRpbmdzLm9JbnN0YW5jZSwgJCgnPnRyJywgb1NldHRpbmdzLm5USGVhZClbMF0sIAoJCQkJCV9mbkdldERhdGFNYXN0ZXIoIG9TZXR0aW5ncyApLCBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQsIG9TZXR0aW5ncy5mbkRpc3BsYXlFbmQoKSwKCQkJCQlvU2V0dGluZ3MuYWlEaXNwbGF5ICk7CgkJCX0KCQkJCgkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5mbkZvb3RlckNhbGxiYWNrID09ICdmdW5jdGlvbicgKQoJCQl7CgkJCQlvU2V0dGluZ3MuZm5Gb290ZXJDYWxsYmFjay5jYWxsKCBvU2V0dGluZ3Mub0luc3RhbmNlLCAkKCc+dHInLCBvU2V0dGluZ3MublRGb290KVswXSwgCgkJCQkJX2ZuR2V0RGF0YU1hc3Rlciggb1NldHRpbmdzICksIG9TZXR0aW5ncy5faURpc3BsYXlTdGFydCwgb1NldHRpbmdzLmZuRGlzcGxheUVuZCgpLAoJCQkJCW9TZXR0aW5ncy5haURpc3BsYXkgKTsKCQkJfQoJCQkKCQkJLyogCgkJCSAqIE5lZWQgdG8gcmVtb3ZlIGFueSBvbGQgcm93IGZyb20gdGhlIGRpc3BsYXkgLSBub3RlIHdlIGNhbid0IGp1c3QgZW1wdHkgdGhlIHRib2R5IHVzaW5nCgkJCSAqICQoKS5odG1sKCcnKSBzaW5jZSB0aGlzIHdpbGwgdW5iaW5kIHRoZSBqUXVlcnkgZXZlbnQgaGFuZGxlcnMgKGV2ZW4gYWx0aG91Z2ggdGhlIG5vZGUgCgkJCSAqIHN0aWxsIGV4aXN0cyEpIC0gZXF1YWxseSB3ZSBjYW4ndCB1c2UgaW5uZXJIVE1MLCBzaW5jZSBJRSB0aHJvd3MgYW4gZXhjZXB0aW9uLgoJCQkgKi8KCQkJdmFyCgkJCQluQWRkRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKCQkJCW5SZW1vdmVGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLAoJCQkJbkJvZHlQYXIsIG5UcnM7CgkJCQoJCQlpZiAoIG9TZXR0aW5ncy5uVEJvZHkgKQoJCQl7CgkJCQluQm9keVBhciA9IG9TZXR0aW5ncy5uVEJvZHkucGFyZW50Tm9kZTsKCQkJCW5SZW1vdmVGcmFnLmFwcGVuZENoaWxkKCBvU2V0dGluZ3MublRCb2R5ICk7CgkJCQkKCQkJCS8qIFdoZW4gZG9pbmcgaW5maW5pdGUgc2Nyb2xsaW5nLCBvbmx5IHJlbW92ZSBjaGlsZCByb3dzIHdoZW4gc29ydGluZywgZmlsdGVyaW5nIG9yIHN0YXJ0CgkJCQkgKiB1cC4gV2hlbiBub3QgaW5maW5pdGUgc2Nyb2xsLCBhbHdheXMgZG8gaXQuCgkJCQkgKi8KCQkJCWlmICggIW9TZXR0aW5ncy5vU2Nyb2xsLmJJbmZpbml0ZSB8fCAhb1NldHRpbmdzLl9iSW5pdENvbXBsZXRlIHx8CgkJCQkgCW9TZXR0aW5ncy5iU29ydGVkIHx8IG9TZXR0aW5ncy5iRmlsdGVyZWQgKQoJCQkJewoJCQkJCW5UcnMgPSBvU2V0dGluZ3MublRCb2R5LmNoaWxkTm9kZXM7CgkJCQkJZm9yICggaT1uVHJzLmxlbmd0aC0xIDsgaT49MCA7IGktLSApCgkJCQkJewoJCQkJCQluVHJzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5UcnNbaV0gKTsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8qIFB1dCB0aGUgZHJhdyB0YWJsZSBpbnRvIHRoZSBkb20gKi8KCQkJCWZvciAoIGk9MCwgaUxlbj1hblJvd3MubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQluQWRkRnJhZy5hcHBlbmRDaGlsZCggYW5Sb3dzW2ldICk7CgkJCQl9CgkJCQkKCQkJCW9TZXR0aW5ncy5uVEJvZHkuYXBwZW5kQ2hpbGQoIG5BZGRGcmFnICk7CgkJCQlpZiAoIG5Cb2R5UGFyICE9PSBudWxsICkKCQkJCXsKCQkJCQluQm9keVBhci5hcHBlbmRDaGlsZCggb1NldHRpbmdzLm5UQm9keSApOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBDYWxsIGFsbCByZXF1aXJlZCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBlbmQgb2YgYSBkcmF3ICovCgkJCWZvciAoIGk9b1NldHRpbmdzLmFvRHJhd0NhbGxiYWNrLmxlbmd0aC0xIDsgaT49MCA7IGktLSApCgkJCXsKCQkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFja1tpXS5mbi5jYWxsKCBvU2V0dGluZ3Mub0luc3RhbmNlLCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJLyogRHJhdyBpcyBjb21wbGV0ZSwgc29ydGluZyBhbmQgZmlsdGVyaW5nIG11c3QgYmUgYXMgd2VsbCAqLwoJCQlvU2V0dGluZ3MuYlNvcnRlZCA9IGZhbHNlOwoJCQlvU2V0dGluZ3MuYkZpbHRlcmVkID0gZmFsc2U7CgkJCW9TZXR0aW5ncy5iRHJhd2luZyA9IGZhbHNlOwoJCQkKCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlICkKCQkJewoJCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIG9TZXR0aW5ncywgZmFsc2UgKTsKCQkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5fYkluaXRDb21wbGV0ZSA9PSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJX2ZuSW5pdENvbXBsZXRlKCBvU2V0dGluZ3MgKTsKCQkJCX0KCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5SZURyYXcKCQkgKiBQdXJwb3NlOiAgUmVkcmF3IHRoZSB0YWJsZSAtIHRha2luZyBhY2NvdW50IG9mIHRoZSB2YXJpb3VzIGZlYXR1cmVzIHdoaWNoIGFyZSBlbmFibGVkCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuUmVEcmF3KCBvU2V0dGluZ3MgKQoJCXsKCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTb3J0ICkKCQkJewoJCQkJLyogU29ydGluZyB3aWxsIHJlZmlsdGVyIGFuZCBkcmF3IGZvciB1cyAqLwoJCQkJX2ZuU29ydCggb1NldHRpbmdzLCBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoICk7CgkJCX0KCQkJZWxzZSBpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYkZpbHRlciApCgkJCXsKCQkJCS8qIEZpbHRlcmluZyB3aWxsIHJlZHJhdyBmb3IgdXMgKi8KCQkJCV9mbkZpbHRlckNvbXBsZXRlKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5vUHJldmlvdXNTZWFyY2ggKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCV9mbkNhbGN1bGF0ZUVuZCggb1NldHRpbmdzICk7CgkJCQlfZm5EcmF3KCBvU2V0dGluZ3MgKTsKCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5BamF4VXBkYXRlCgkJICogUHVycG9zZTogIFVwZGF0ZSB0aGUgdGFibGUgdXNpbmcgYW4gQWpheCBjYWxsCgkJICogUmV0dXJuczogIGJvb2w6IGJsb2NrIHRoZSB0YWJsZSBkcmF3aW5nIG9yIG5vdAoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5BamF4VXBkYXRlKCBvU2V0dGluZ3MgKQoJCXsKCQkJaWYgKCBvU2V0dGluZ3MuYkFqYXhEYXRhR2V0ICkKCQkJewoJCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIG9TZXR0aW5ncywgdHJ1ZSApOwoJCQkJdmFyIGlDb2x1bW5zID0gb1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGg7CgkJCQl2YXIgYW9EYXRhID0gW10sIG1EYXRhUHJvcDsKCQkJCXZhciBpOwoJCQkJCgkJCQkvKiBQYWdpbmcgYW5kIGdlbmVyYWwgKi8KCQkJCW9TZXR0aW5ncy5pRHJhdysrOwoJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAic0VjaG8iLCAgICAgICAgICAidmFsdWUiOiBvU2V0dGluZ3MuaURyYXcgfSApOwoJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAiaUNvbHVtbnMiLCAgICAgICAidmFsdWUiOiBpQ29sdW1ucyB9ICk7CgkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJzQ29sdW1ucyIsICAgICAgICJ2YWx1ZSI6IF9mbkNvbHVtbk9yZGVyaW5nKG9TZXR0aW5ncykgfSApOwoJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAiaURpc3BsYXlTdGFydCIsICAidmFsdWUiOiBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgfSApOwoJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAiaURpc3BsYXlMZW5ndGgiLCAidmFsdWUiOiBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJQYWdpbmF0ZSAhPT0gZmFsc2UgPwoJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGggOiAtMSB9ICk7CgkJCQkJCgkJCQlmb3IgKCBpPTAgOyBpPGlDb2x1bW5zIDsgaSsrICkKCQkJCXsKCQkJCSAgbURhdGFQcm9wID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5tRGF0YVByb3A7CgkJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAibURhdGFQcm9wXyIraSwgInZhbHVlIjogdHlwZW9mKG1EYXRhUHJvcCk9PSJmdW5jdGlvbiIgPyAnZnVuY3Rpb24nIDogbURhdGFQcm9wIH0gKTsKCQkJCX0KCQkJCQoJCQkJLyogRmlsdGVyaW5nICovCgkJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYkZpbHRlciAhPT0gZmFsc2UgKQoJCQkJewoJCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogInNTZWFyY2giLCAidmFsdWUiOiBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2ggfSApOwoJCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogImJSZWdleCIsICAidmFsdWUiOiBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLmJSZWdleCB9ICk7CgkJCQkJZm9yICggaT0wIDsgaTxpQ29sdW1ucyA7IGkrKyApCgkJCQkJewoJCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJzU2VhcmNoXyIraSwgICAgICJ2YWx1ZSI6IG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbaV0uc1NlYXJjaCB9ICk7CgkJCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogImJSZWdleF8iK2ksICAgICAgInZhbHVlIjogb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1tpXS5iUmVnZXggfSApOwoJCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJiU2VhcmNoYWJsZV8iK2ksICJ2YWx1ZSI6IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlNlYXJjaGFibGUgfSApOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJLyogU29ydGluZyAqLwoJCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTb3J0ICE9PSBmYWxzZSApCgkJCQl7CgkJCQkJdmFyIGlGaXhlZCA9IG9TZXR0aW5ncy5hYVNvcnRpbmdGaXhlZCAhPT0gbnVsbCA/IG9TZXR0aW5ncy5hYVNvcnRpbmdGaXhlZC5sZW5ndGggOiAwOwoJCQkJCXZhciBpVXNlciA9IG9TZXR0aW5ncy5hYVNvcnRpbmcubGVuZ3RoOwoJCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogImlTb3J0aW5nQ29scyIsICAgInZhbHVlIjogaUZpeGVkK2lVc2VyIH0gKTsKCQkJCQlmb3IgKCBpPTAgOyBpPGlGaXhlZCA7IGkrKyApCgkJCQkJewoJCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJpU29ydENvbF8iK2ksICAidmFsdWUiOiBvU2V0dGluZ3MuYWFTb3J0aW5nRml4ZWRbaV1bMF0gfSApOwoJCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJzU29ydERpcl8iK2ksICAidmFsdWUiOiBvU2V0dGluZ3MuYWFTb3J0aW5nRml4ZWRbaV1bMV0gfSApOwoJCQkJCX0KCQkJCQkKCQkJCQlmb3IgKCBpPTAgOyBpPGlVc2VyIDsgaSsrICkKCQkJCQl7CgkJCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogImlTb3J0Q29sXyIrKGkraUZpeGVkKSwgICJ2YWx1ZSI6IG9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMF0gfSApOwoJCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJzU29ydERpcl8iKyhpK2lGaXhlZCksICAidmFsdWUiOiBvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzFdIH0gKTsKCQkJCQl9CgkJCQkJCgkJCQkJZm9yICggaT0wIDsgaTxpQ29sdW1ucyA7IGkrKyApCgkJCQkJewoJCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJiU29ydGFibGVfIitpLCAgInZhbHVlIjogb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iU29ydGFibGUgfSApOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJb1NldHRpbmdzLmZuU2VydmVyRGF0YS5jYWxsKCBvU2V0dGluZ3Mub0luc3RhbmNlLCBvU2V0dGluZ3Muc0FqYXhTb3VyY2UsIGFvRGF0YSwKCQkJCQlmdW5jdGlvbihqc29uKSB7CgkJCQkJCV9mbkFqYXhVcGRhdGVEcmF3KCBvU2V0dGluZ3MsIGpzb24gKTsKCQkJCQl9LCBvU2V0dGluZ3MgKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkFqYXhVcGRhdGVEcmF3CgkJICogUHVycG9zZTogIERhdGEgdGhlIGRhdGEgZnJvbSB0aGUgc2VydmVyIChudWtpbmcgdGhlIG9sZCkgYW5kIHJlZHJhdyB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgb2JqZWN0Ompzb24gLSBqc29uIGRhdGEgcmV0dXJuIGZyb20gdGhlIHNlcnZlci4KCQkgKiAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG11c3QgYmUgZGVmaW5lZDoKCQkgKiAgICAgICAgICAgICAgIGlUb3RhbFJlY29yZHMsIGlUb3RhbERpc3BsYXlSZWNvcmRzLCBhYURhdGEKCQkgKiAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG1heSBiZSBkZWZpbmVkOgoJCSAqICAgICAgICAgICAgICAgc0NvbHVtbnMKCQkgKi8KCQlmdW5jdGlvbiBfZm5BamF4VXBkYXRlRHJhdyAoIG9TZXR0aW5ncywganNvbiApCgkJewoJCQlpZiAoIHR5cGVvZiBqc29uLnNFY2hvICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJLyogUHJvdGVjdCBhZ2FpbnN0IG9sZCByZXR1cm5zIG92ZXItd3JpdGluZyBhIG5ldyBvbmUuIFBvc3NpYmxlIHdoZW4geW91IGdldAoJCQkJICogdmVyeSBmYXN0IGludGVyYWN0aW9uLCBhbmQgbGF0ZXIgcXVlaXJlcyBhcmUgY29tcGxldGVkIG11Y2ggZmFzdGVyCgkJCQkgKi8KCQkJCWlmICgganNvbi5zRWNobyoxIDwgb1NldHRpbmdzLmlEcmF3ICkKCQkJCXsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJb1NldHRpbmdzLmlEcmF3ID0ganNvbi5zRWNobyAqIDE7CgkJCQl9CgkJCX0KCQkJCgkJCWlmICggIW9TZXR0aW5ncy5vU2Nyb2xsLmJJbmZpbml0ZSB8fAoJCQkJICAgKG9TZXR0aW5ncy5vU2Nyb2xsLmJJbmZpbml0ZSAmJiAob1NldHRpbmdzLmJTb3J0ZWQgfHwgb1NldHRpbmdzLmJGaWx0ZXJlZCkpICkKCQkJewoJCQkJX2ZuQ2xlYXJUYWJsZSggb1NldHRpbmdzICk7CgkJCX0KCQkJb1NldHRpbmdzLl9pUmVjb3Jkc1RvdGFsID0ganNvbi5pVG90YWxSZWNvcmRzOwoJCQlvU2V0dGluZ3MuX2lSZWNvcmRzRGlzcGxheSA9IGpzb24uaVRvdGFsRGlzcGxheVJlY29yZHM7CgkJCQoJCQkvKiBEZXRlcm1pbmUgaWYgcmVvcmRlcmluZyBpcyByZXF1aXJlZCAqLwoJCQl2YXIgc09yZGVyaW5nID0gX2ZuQ29sdW1uT3JkZXJpbmcob1NldHRpbmdzKTsKCQkJdmFyIGJSZU9yZGVyID0gKHR5cGVvZiBqc29uLnNDb2x1bW5zICE9ICd1bmRlZmluZWQnICYmIHNPcmRlcmluZyAhPT0gIiIgJiYganNvbi5zQ29sdW1ucyAhPSBzT3JkZXJpbmcgKTsKCQkJaWYgKCBiUmVPcmRlciApCgkJCXsKCQkJCXZhciBhaUluZGV4ID0gX2ZuUmVPcmRlckluZGV4KCBvU2V0dGluZ3MsIGpzb24uc0NvbHVtbnMgKTsKCQkJfQoKCQkJdmFyIGZuRGF0YVNyYyA9IF9mbkdldE9iamVjdERhdGFGbiggb1NldHRpbmdzLnNBamF4RGF0YVByb3AgKTsKCQkJdmFyIGFEYXRhID0gZm5EYXRhU3JjKCBqc29uICk7CgkJCQoJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWFEYXRhLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlmICggYlJlT3JkZXIgKQoJCQkJewoJCQkJCS8qIElmIHdlIG5lZWQgdG8gcmUtb3JkZXIsIHRoZW4gY3JlYXRlIGEgbmV3IGFycmF5IHdpdGggdGhlIGNvcnJlY3Qgb3JkZXIgYW5kIGFkZCBpdCAqLwoJCQkJCXZhciBhRGF0YVNvcnRlZCA9IFtdOwoJCQkJCWZvciAoIHZhciBqPTAsIGpMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJCXsKCQkJCQkJYURhdGFTb3J0ZWQucHVzaCggYURhdGFbaV1bIGFpSW5kZXhbal0gXSApOwoJCQkJCX0KCQkJCQlfZm5BZGREYXRhKCBvU2V0dGluZ3MsIGFEYXRhU29ydGVkICk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJLyogTm8gcmUtb3JkZXIgcmVxdWlyZWQsIHNldmVyIGdvdCBpdCAicmlnaHQiIC0ganVzdCBzdHJhaWdodCBhZGQgKi8KCQkJCQlfZm5BZGREYXRhKCBvU2V0dGluZ3MsIGFEYXRhW2ldICk7CgkJCQl9CgkJCX0KCQkJb1NldHRpbmdzLmFpRGlzcGxheSA9IG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQkJCgkJCW9TZXR0aW5ncy5iQWpheERhdGFHZXQgPSBmYWxzZTsKCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCW9TZXR0aW5ncy5iQWpheERhdGFHZXQgPSB0cnVlOwoJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggb1NldHRpbmdzLCBmYWxzZSApOwoJCX0KCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBPcHRpb25zIChmZWF0dXJlcykgSFRNTAoJCSAqLwoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkFkZE9wdGlvbnNIdG1sCgkJICogUHVycG9zZTogIEFkZCB0aGUgb3B0aW9ucyB0byB0aGUgcGFnZSBIVE1MIGZvciB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5BZGRPcHRpb25zSHRtbCAoIG9TZXR0aW5ncyApCgkJewoJCQkvKgoJCQkgKiBDcmVhdGUgYSB0ZW1wb3JhcnksIGVtcHR5LCBkaXYgd2hpY2ggd2UgY2FuIGxhdGVyIG9uIHJlcGxhY2Ugd2l0aCB3aGF0IHdlIGhhdmUgZ2VuZXJhdGVkCgkJCSAqIHdlIGRvIGl0IHRoaXMgd2F5IHRvIHJlbmRlcmluZyB0aGUgJ29wdGlvbnMnIGh0bWwgb2ZmbGluZSAtIHNwZWVkIDotKQoJCQkgKi8KCQkJdmFyIG5Ib2xkaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTsKCQkJb1NldHRpbmdzLm5UYWJsZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggbkhvbGRpbmcsIG9TZXR0aW5ncy5uVGFibGUgKTsKCQkJCgkJCS8qIAoJCQkgKiBBbGwgRGF0YVRhYmxlcyBhcmUgd3JhcHBlZCBpbiBhIGRpdgoJCQkgKi8KCQkJb1NldHRpbmdzLm5UYWJsZVdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQlvU2V0dGluZ3MublRhYmxlV3JhcHBlci5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1dyYXBwZXI7CgkJCWlmICggb1NldHRpbmdzLnNUYWJsZUlkICE9PSAnJyApCgkJCXsKCQkJCW9TZXR0aW5ncy5uVGFibGVXcmFwcGVyLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfd3JhcHBlcicgKTsKCQkJfQoKCQkJb1NldHRpbmdzLm5UYWJsZVJlaW5zZXJ0QmVmb3JlID0gb1NldHRpbmdzLm5UYWJsZS5uZXh0U2libGluZzsKCgkJCS8qIFRyYWNrIHdoZXJlIHdlIHdhbnQgdG8gaW5zZXJ0IHRoZSBvcHRpb24gKi8KCQkJdmFyIG5JbnNlcnROb2RlID0gb1NldHRpbmdzLm5UYWJsZVdyYXBwZXI7CgkJCQoJCQkvKiBMb29wIG92ZXIgdGhlIHVzZXIgc2V0IHBvc2l0aW9uaW5nIGFuZCBwbGFjZSB0aGUgZWxlbWVudHMgYXMgbmVlZGVkICovCgkJCXZhciBhRG9tID0gb1NldHRpbmdzLnNEb20uc3BsaXQoJycpOwoJCQl2YXIgblRtcCwgaVB1c2hGZWF0dXJlLCBjT3B0aW9uLCBuTmV3Tm9kZSwgY05leHQsIHNBdHRyLCBqOwoJCQlmb3IgKCB2YXIgaT0wIDsgaTxhRG9tLmxlbmd0aCA7IGkrKyApCgkJCXsKCQkJCWlQdXNoRmVhdHVyZSA9IDA7CgkJCQljT3B0aW9uID0gYURvbVtpXTsKCQkJCQoJCQkJaWYgKCBjT3B0aW9uID09ICc8JyApCgkJCQl7CgkJCQkJLyogTmV3IGNvbnRhaW5lciBkaXYgKi8KCQkJCQluTmV3Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7CgkJCQkJCgkJCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBhcHBlbmQgYW4gaWQgYW5kL29yIGEgY2xhc3MgbmFtZSB0byB0aGUgY29udGFpbmVyICovCgkJCQkJY05leHQgPSBhRG9tW2krMV07CgkJCQkJaWYgKCBjTmV4dCA9PSAiJyIgfHwgY05leHQgPT0gJyInICkKCQkJCQl7CgkJCQkJCXNBdHRyID0gIiI7CgkJCQkJCWogPSAyOwoJCQkJCQl3aGlsZSAoIGFEb21baStqXSAhPSBjTmV4dCApCgkJCQkJCXsKCQkJCQkJCXNBdHRyICs9IGFEb21baStqXTsKCQkJCQkJCWorKzsKCQkJCQkJfQoJCQkJCQkKCQkJCQkJLyogUmVwbGFjZSBqUXVlcnkgVUkgY29uc3RhbnRzICovCgkJCQkJCWlmICggc0F0dHIgPT0gIkgiICkKCQkJCQkJewoJCQkJCQkJc0F0dHIgPSAiZmctdG9vbGJhciB1aS10b29sYmFyIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLXRsIHVpLWNvcm5lci10ciB1aS1oZWxwZXItY2xlYXJmaXgiOwoJCQkJCQl9CgkJCQkJCWVsc2UgaWYgKCBzQXR0ciA9PSAiRiIgKQoJCQkJCQl7CgkJCQkJCQlzQXR0ciA9ICJmZy10b29sYmFyIHVpLXRvb2xiYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYmwgdWktY29ybmVyLWJyIHVpLWhlbHBlci1jbGVhcmZpeCI7CgkJCQkJCX0KCQkJCQkJCgkJCQkJCS8qIFRoZSBhdHRyaWJ1dGUgY2FuIGJlIGluIHRoZSBmb3JtYXQgb2YgIiNpZC5jbGFzcyIsICIjaWQiIG9yICJjbGFzcyIgVGhpcyBsb2dpYwoJCQkJCQkgKiBicmVha3MgdGhlIHN0cmluZyBpbnRvIHBhcnRzIGFuZCBhcHBsaWVzIHRoZW0gYXMgbmVlZGVkCgkJCQkJCSAqLwoJCQkJCQlpZiAoIHNBdHRyLmluZGV4T2YoJy4nKSAhPSAtMSApCgkJCQkJCXsKCQkJCQkJCXZhciBhU3BsaXQgPSBzQXR0ci5zcGxpdCgnLicpOwoJCQkJCQkJbk5ld05vZGUuc2V0QXR0cmlidXRlKCdpZCcsIGFTcGxpdFswXS5zdWJzdHIoMSwgYVNwbGl0WzBdLmxlbmd0aC0xKSApOwoJCQkJCQkJbk5ld05vZGUuY2xhc3NOYW1lID0gYVNwbGl0WzFdOwoJCQkJCQl9CgkJCQkJCWVsc2UgaWYgKCBzQXR0ci5jaGFyQXQoMCkgPT0gIiMiICkKCQkJCQkJewoJCQkJCQkJbk5ld05vZGUuc2V0QXR0cmlidXRlKCdpZCcsIHNBdHRyLnN1YnN0cigxLCBzQXR0ci5sZW5ndGgtMSkgKTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCW5OZXdOb2RlLmNsYXNzTmFtZSA9IHNBdHRyOwoJCQkJCQl9CgkJCQkJCQoJCQkJCQlpICs9IGo7IC8qIE1vdmUgYWxvbmcgdGhlIHBvc2l0aW9uIGFycmF5ICovCgkJCQkJfQoJCQkJCQoJCQkJCW5JbnNlcnROb2RlLmFwcGVuZENoaWxkKCBuTmV3Tm9kZSApOwoJCQkJCW5JbnNlcnROb2RlID0gbk5ld05vZGU7CgkJCQl9CgkJCQllbHNlIGlmICggY09wdGlvbiA9PSAnPicgKQoJCQkJewoJCQkJCS8qIEVuZCBjb250YWluZXIgZGl2ICovCgkJCQkJbkluc2VydE5vZGUgPSBuSW5zZXJ0Tm9kZS5wYXJlbnROb2RlOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGNPcHRpb24gPT0gJ2wnICYmIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlBhZ2luYXRlICYmIG9TZXR0aW5ncy5vRmVhdHVyZXMuYkxlbmd0aENoYW5nZSApCgkJCQl7CgkJCQkJLyogTGVuZ3RoICovCgkJCQkJblRtcCA9IF9mbkZlYXR1cmVIdG1sTGVuZ3RoKCBvU2V0dGluZ3MgKTsKCQkJCQlpUHVzaEZlYXR1cmUgPSAxOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGNPcHRpb24gPT0gJ2YnICYmIG9TZXR0aW5ncy5vRmVhdHVyZXMuYkZpbHRlciApCgkJCQl7CgkJCQkJLyogRmlsdGVyICovCgkJCQkJblRtcCA9IF9mbkZlYXR1cmVIdG1sRmlsdGVyKCBvU2V0dGluZ3MgKTsKCQkJCQlpUHVzaEZlYXR1cmUgPSAxOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGNPcHRpb24gPT0gJ3InICYmIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlByb2Nlc3NpbmcgKQoJCQkJewoJCQkJCS8qIHBSb2Nlc3NpbmcgKi8KCQkJCQluVG1wID0gX2ZuRmVhdHVyZUh0bWxQcm9jZXNzaW5nKCBvU2V0dGluZ3MgKTsKCQkJCQlpUHVzaEZlYXR1cmUgPSAxOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGNPcHRpb24gPT0gJ3QnICkKCQkJCXsKCQkJCQkvKiBUYWJsZSAqLwoJCQkJCW5UbXAgPSBfZm5GZWF0dXJlSHRtbFRhYmxlKCBvU2V0dGluZ3MgKTsKCQkJCQlpUHVzaEZlYXR1cmUgPSAxOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGNPcHRpb24gPT0gICdpJyAmJiBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJJbmZvICkKCQkJCXsKCQkJCQkvKiBJbmZvICovCgkJCQkJblRtcCA9IF9mbkZlYXR1cmVIdG1sSW5mbyggb1NldHRpbmdzICk7CgkJCQkJaVB1c2hGZWF0dXJlID0gMTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICdwJyAmJiBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJQYWdpbmF0ZSApCgkJCQl7CgkJCQkJLyogUGFnaW5hdGlvbiAqLwoJCQkJCW5UbXAgPSBfZm5GZWF0dXJlSHRtbFBhZ2luYXRlKCBvU2V0dGluZ3MgKTsKCQkJCQlpUHVzaEZlYXR1cmUgPSAxOwoJCQkJfQoJCQkJZWxzZSBpZiAoIF9vRXh0LmFvRmVhdHVyZXMubGVuZ3RoICE9PSAwICkKCQkJCXsKCQkJCQkvKiBQbHVnLWluIGZlYXR1cmVzICovCgkJCQkJdmFyIGFvRmVhdHVyZXMgPSBfb0V4dC5hb0ZlYXR1cmVzOwoJCQkJCWZvciAoIHZhciBrPTAsIGtMZW49YW9GZWF0dXJlcy5sZW5ndGggOyBrPGtMZW4gOyBrKysgKQoJCQkJCXsKCQkJCQkJaWYgKCBjT3B0aW9uID09IGFvRmVhdHVyZXNba10uY0ZlYXR1cmUgKQoJCQkJCQl7CgkJCQkJCQluVG1wID0gYW9GZWF0dXJlc1trXS5mbkluaXQoIG9TZXR0aW5ncyApOwoJCQkJCQkJaWYgKCBuVG1wICkKCQkJCQkJCXsKCQkJCQkJCQlpUHVzaEZlYXR1cmUgPSAxOwoJCQkJCQkJfQoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8qIEFkZCB0byB0aGUgMkQgZmVhdHVyZXMgYXJyYXkgKi8KCQkJCWlmICggaVB1c2hGZWF0dXJlID09IDEgJiYgblRtcCAhPT0gbnVsbCApCgkJCQl7CgkJCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLmFhbkZlYXR1cmVzW2NPcHRpb25dICE9ICdvYmplY3QnICkKCQkJCQl7CgkJCQkJCW9TZXR0aW5ncy5hYW5GZWF0dXJlc1tjT3B0aW9uXSA9IFtdOwoJCQkJCX0KCQkJCQlvU2V0dGluZ3MuYWFuRmVhdHVyZXNbY09wdGlvbl0ucHVzaCggblRtcCApOwoJCQkJCW5JbnNlcnROb2RlLmFwcGVuZENoaWxkKCBuVG1wICk7CgkJCQl9CgkJCX0KCQkJCgkJCS8qIEJ1aWx0IG91ciBET00gc3RydWN0dXJlIC0gcmVwbGFjZSB0aGUgaG9sZGluZyBkaXYgd2l0aCB3aGF0IHdlIHdhbnQgKi8KCQkJbkhvbGRpbmcucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoIG9TZXR0aW5ncy5uVGFibGVXcmFwcGVyLCBuSG9sZGluZyApOwoJCX0KCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBGZWF0dXJlOiBGaWx0ZXJpbmcKCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5GZWF0dXJlSHRtbFRhYmxlCgkJICogUHVycG9zZTogIEFkZCBhbnkgY29udHJvbCBlbGVtZW50cyBmb3IgdGhlIHRhYmxlIC0gc3BlY2lmaWNhbGx5IHNjcm9sbGluZwoJCSAqIFJldHVybnM6ICBub2RlOiAtIE5vZGUgdG8gYWRkIHRvIHRoZSBET00KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuRmVhdHVyZUh0bWxUYWJsZSAoIG9TZXR0aW5ncyApCgkJewoJCQkvKiBDaGFjayBpZiBzY3JvbGxpbmcgaXMgZW5hYmxlZCBvciBub3QgLSBpZiBub3QgdGhlbiBsZWF2ZSB0aGUgRE9NIHVuYWx0ZXJlZCAqLwoJCQlpZiAoIG9TZXR0aW5ncy5vU2Nyb2xsLnNYID09PSAiIiAmJiBvU2V0dGluZ3Mub1Njcm9sbC5zWSA9PT0gIiIgKQoJCQl7CgkJCQlyZXR1cm4gb1NldHRpbmdzLm5UYWJsZTsKCQkJfQoJCQkKCQkJLyoKCQkJICogVGhlIEhUTUwgc3RydWN0dXJlIHRoYXQgd2Ugd2FudCB0byBnZW5lcmF0ZSBpbiB0aGlzIGZ1bmN0aW9uIGlzOgoJCQkgKiAgZGl2IC0gblNjcm9sbGVyCgkJCSAqICAgIGRpdiAtIG5TY3JvbGxIZWFkCgkJCSAqICAgICAgZGl2IC0gblNjcm9sbEhlYWRJbm5lcgoJCQkgKiAgICAgICAgdGFibGUgLSBuU2Nyb2xsSGVhZFRhYmxlCgkJCSAqICAgICAgICAgIHRoZWFkIC0gblRoZWFkCgkJCSAqICAgIGRpdiAtIG5TY3JvbGxCb2R5CgkJCSAqICAgICAgdGFibGUgLSBvU2V0dGluZ3MublRhYmxlCgkJCSAqICAgICAgICB0aGVhZCAtIG5UaGVhZFNpemUKCQkJICogICAgICAgIHRib2R5IC0gblRib2R5CgkJCSAqICAgIGRpdiAtIG5TY3JvbGxGb290CgkJCSAqICAgICAgZGl2IC0gblNjcm9sbEZvb3RJbm5lcgoJCQkgKiAgICAgICAgdGFibGUgLSBuU2Nyb2xsRm9vdFRhYmxlCgkJCSAqICAgICAgICAgIHRmb290IC0gblRmb290CgkJCSAqLwoJCQl2YXIKCQkJIAluU2Nyb2xsZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKCQkJIAluU2Nyb2xsSGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAoJCQkgCW5TY3JvbGxIZWFkSW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKCQkJIAluU2Nyb2xsQm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAoJCQkgCW5TY3JvbGxGb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCgkJCSAJblNjcm9sbEZvb3RJbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAoJCQkgCW5TY3JvbGxIZWFkVGFibGUgPSBvU2V0dGluZ3MublRhYmxlLmNsb25lTm9kZShmYWxzZSksCgkJCSAJblNjcm9sbEZvb3RUYWJsZSA9IG9TZXR0aW5ncy5uVGFibGUuY2xvbmVOb2RlKGZhbHNlKSwKCQkJCW5UaGVhZCA9IG9TZXR0aW5ncy5uVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoZWFkJylbMF0sCgkJCSAJblRmb290ID0gb1NldHRpbmdzLm5UYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGZvb3QnKS5sZW5ndGggPT09IDAgPyBudWxsIDogCgkJCQkJb1NldHRpbmdzLm5UYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGZvb3QnKVswXSwKCQkJCW9DbGFzc2VzID0gKHR5cGVvZiBvSW5pdC5iSlF1ZXJ5VUkgIT0gJ3VuZGVmaW5lZCcgJiYgb0luaXQuYkpRdWVyeVVJKSA/CgkJCQkJX29FeHQub0pVSUNsYXNzZXMgOiBfb0V4dC5vU3RkQ2xhc3NlczsKCQkJCgkJCW5TY3JvbGxIZWFkLmFwcGVuZENoaWxkKCBuU2Nyb2xsSGVhZElubmVyICk7CgkJCW5TY3JvbGxGb290LmFwcGVuZENoaWxkKCBuU2Nyb2xsRm9vdElubmVyICk7CgkJCW5TY3JvbGxCb2R5LmFwcGVuZENoaWxkKCBvU2V0dGluZ3MublRhYmxlICk7CgkJCW5TY3JvbGxlci5hcHBlbmRDaGlsZCggblNjcm9sbEhlYWQgKTsKCQkJblNjcm9sbGVyLmFwcGVuZENoaWxkKCBuU2Nyb2xsQm9keSApOwoJCQluU2Nyb2xsSGVhZElubmVyLmFwcGVuZENoaWxkKCBuU2Nyb2xsSGVhZFRhYmxlICk7CgkJCW5TY3JvbGxIZWFkVGFibGUuYXBwZW5kQ2hpbGQoIG5UaGVhZCApOwoJCQlpZiAoIG5UZm9vdCAhPT0gbnVsbCApCgkJCXsKCQkJCW5TY3JvbGxlci5hcHBlbmRDaGlsZCggblNjcm9sbEZvb3QgKTsKCQkJCW5TY3JvbGxGb290SW5uZXIuYXBwZW5kQ2hpbGQoIG5TY3JvbGxGb290VGFibGUgKTsKCQkJCW5TY3JvbGxGb290VGFibGUuYXBwZW5kQ2hpbGQoIG5UZm9vdCApOwoJCQl9CgkJCQoJCQluU2Nyb2xsZXIuY2xhc3NOYW1lID0gb0NsYXNzZXMuc1Njcm9sbFdyYXBwZXI7CgkJCW5TY3JvbGxIZWFkLmNsYXNzTmFtZSA9IG9DbGFzc2VzLnNTY3JvbGxIZWFkOwoJCQluU2Nyb2xsSGVhZElubmVyLmNsYXNzTmFtZSA9IG9DbGFzc2VzLnNTY3JvbGxIZWFkSW5uZXI7CgkJCW5TY3JvbGxCb2R5LmNsYXNzTmFtZSA9IG9DbGFzc2VzLnNTY3JvbGxCb2R5OwoJCQluU2Nyb2xsRm9vdC5jbGFzc05hbWUgPSBvQ2xhc3Nlcy5zU2Nyb2xsRm9vdDsKCQkJblNjcm9sbEZvb3RJbm5lci5jbGFzc05hbWUgPSBvQ2xhc3Nlcy5zU2Nyb2xsRm9vdElubmVyOwoJCQkKCQkJaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5iQXV0b0NzcyApCgkJCXsKCQkJCW5TY3JvbGxIZWFkLnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CgkJCQluU2Nyb2xsSGVhZC5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CgkJCQluU2Nyb2xsRm9vdC5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwoJCQkJblNjcm9sbEJvZHkuc3R5bGUub3ZlcmZsb3cgPSAiYXV0byI7CgkJCX0KCQkJCgkJCW5TY3JvbGxIZWFkLnN0eWxlLmJvcmRlciA9ICIwIjsKCQkJblNjcm9sbEhlYWQuc3R5bGUud2lkdGggPSAiMTAwJSI7CgkJCW5TY3JvbGxGb290LnN0eWxlLmJvcmRlciA9ICIwIjsKCQkJblNjcm9sbEhlYWRJbm5lci5zdHlsZS53aWR0aCA9ICIxNTAlIjsgLyogd2lsbCBiZSBvdmVyd3JpdHRlbiAqLwoJCQkKCQkJLyogTW9kaWZ5IGF0dHJpYnV0ZXMgdG8gcmVzcGVjdCB0aGUgY2xvbmVzICovCgkJCW5TY3JvbGxIZWFkVGFibGUucmVtb3ZlQXR0cmlidXRlKCdpZCcpOwoJCQluU2Nyb2xsSGVhZFRhYmxlLnN0eWxlLm1hcmdpbkxlZnQgPSAiMCI7CgkJCW9TZXR0aW5ncy5uVGFibGUuc3R5bGUubWFyZ2luTGVmdCA9ICIwIjsKCQkJaWYgKCBuVGZvb3QgIT09IG51bGwgKQoJCQl7CgkJCQluU2Nyb2xsRm9vdFRhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTsKCQkJCW5TY3JvbGxGb290VGFibGUuc3R5bGUubWFyZ2luTGVmdCA9ICIwIjsKCQkJfQoJCQkKCQkJLyogTW92ZSBhbnkgY2FwdGlvbiBlbGVtZW50cyBmcm9tIHRoZSBib2R5IHRvIHRoZSBoZWFkZXIgKi8KCQkJdmFyIG5DYXB0aW9ucyA9ICQoJz5jYXB0aW9uJywgb1NldHRpbmdzLm5UYWJsZSk7CgkJCWZvciAoIHZhciBpPTAsIGlMZW49bkNhcHRpb25zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCW5TY3JvbGxIZWFkVGFibGUuYXBwZW5kQ2hpbGQoIG5DYXB0aW9uc1tpXSApOwoJCQl9CgkJCQoJCQkvKgoJCQkgKiBTaXppbmcKCQkJICovCgkJCS8qIFdoZW4geHNjcm9sbGluZyBhZGQgdGhlIHdpZHRoIGFuZCBhIHNjcm9sbGVyIHRvIG1vdmUgdGhlIGhlYWRlciB3aXRoIHRoZSBib2R5ICovCgkJCWlmICggb1NldHRpbmdzLm9TY3JvbGwuc1ggIT09ICIiICkKCQkJewoJCQkJblNjcm9sbEhlYWQuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0Nzcyggb1NldHRpbmdzLm9TY3JvbGwuc1ggKTsKCQkJCW5TY3JvbGxCb2R5LnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIG9TZXR0aW5ncy5vU2Nyb2xsLnNYICk7CgkJCQkKCQkJCWlmICggblRmb290ICE9PSBudWxsICkKCQkJCXsKCQkJCQluU2Nyb2xsRm9vdC5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBvU2V0dGluZ3Mub1Njcm9sbC5zWCApOwkKCQkJCX0KCQkJCQoJCQkJLyogV2hlbiB0aGUgYm9keSBpcyBzY3JvbGxlZCwgdGhlbiB3ZSBhbHNvIHdhbnQgdG8gc2Nyb2xsIHRoZSBoZWFkZXJzICovCgkJCQkkKG5TY3JvbGxCb2R5KS5zY3JvbGwoIGZ1bmN0aW9uIChlKSB7CgkJCQkJblNjcm9sbEhlYWQuc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDsKCQkJCQkKCQkJCQlpZiAoIG5UZm9vdCAhPT0gbnVsbCApCgkJCQkJewoJCQkJCQluU2Nyb2xsRm9vdC5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OwoJCQkJCX0KCQkJCX0gKTsKCQkJfQoJCQkKCQkJLyogV2hlbiB5c2Nyb2xsaW5nLCBhZGQgdGhlIGhlaWdodCAqLwoJCQlpZiAoIG9TZXR0aW5ncy5vU2Nyb2xsLnNZICE9PSAiIiApCgkJCXsKCQkJCW5TY3JvbGxCb2R5LnN0eWxlLmhlaWdodCA9IF9mblN0cmluZ1RvQ3NzKCBvU2V0dGluZ3Mub1Njcm9sbC5zWSApOwoJCQl9CgkJCQoJCQkvKiBSZWRyYXcgLSBhbGlnbiBjb2x1bW5zIGFjcm9zcyB0aGUgdGFibGVzICovCgkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCQkiZm4iOiBfZm5TY3JvbGxEcmF3LAoJCQkJInNOYW1lIjogInNjcm9sbGluZyIKCQkJfSApOwoJCQkKCQkJLyogSW5maW5pdGUgc2Nyb2xsaW5nIGV2ZW50IGhhbmRsZXJzICovCgkJCWlmICggb1NldHRpbmdzLm9TY3JvbGwuYkluZmluaXRlICkKCQkJewoJCQkJJChuU2Nyb2xsQm9keSkuc2Nyb2xsKCBmdW5jdGlvbigpIHsKCQkJCQkvKiBVc2UgYSBibG9ja2VyIHRvIHN0b3Agc2Nyb2xsaW5nIGZyb20gbG9hZGluZyBtb3JlIGRhdGEgd2hpbGUgb3RoZXIgZGF0YSBpcyBzdGlsbCBsb2FkaW5nICovCgkJCQkJaWYgKCAhb1NldHRpbmdzLmJEcmF3aW5nICkKCQkJCQl7CgkJCQkJCS8qIENoZWNrIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBuZXh0IGRhdGEgc2V0ICovCgkJCQkJCWlmICggJCh0aGlzKS5zY3JvbGxUb3AoKSArICQodGhpcykuaGVpZ2h0KCkgPiAKCQkJCQkJCSQob1NldHRpbmdzLm5UYWJsZSkuaGVpZ2h0KCkgLSBvU2V0dGluZ3Mub1Njcm9sbC5pTG9hZEdhcCApCgkJCQkJCXsKCQkJCQkJCS8qIE9ubHkgZG8gdGhlIHJlZHJhdyBpZiB3ZSBoYXZlIHRvIC0gd2UgbWlnaHQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgZGF0YSAqLwoJCQkJCQkJaWYgKCBvU2V0dGluZ3MuZm5EaXNwbGF5RW5kKCkgPCBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpICkKCQkJCQkJCXsKCQkJCQkJCQlfZm5QYWdlQ2hhbmdlKCBvU2V0dGluZ3MsICduZXh0JyApOwoJCQkJCQkJCV9mbkNhbGN1bGF0ZUVuZCggb1NldHRpbmdzICk7CgkJCQkJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9ICk7CgkJCX0KCQkJCgkJCW9TZXR0aW5ncy5uU2Nyb2xsSGVhZCA9IG5TY3JvbGxIZWFkOwoJCQlvU2V0dGluZ3MublNjcm9sbEZvb3QgPSBuU2Nyb2xsRm9vdDsKCQkJCgkJCXJldHVybiBuU2Nyb2xsZXI7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mblNjcm9sbERyYXcKCQkgKiBQdXJwb3NlOiAgVXBkYXRlIHRoZSB2YXJpb3VzIHRhYmxlcyBmb3IgcmVzaXppbmcKCQkgKiBSZXR1cm5zOiAgbm9kZTogLSBOb2RlIHRvIGFkZCB0byB0aGUgRE9NCgkJICogSW5wdXRzOiAgIG9iamVjdDpvIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiBOb3RlczogICAgSXQncyBhIGJpdCBvZiBhIHBpZyB0aGlzIGZ1bmN0aW9uLCBidXQgYmFzaWNhbGx5IHRoZSBpZGVhIHRvOgoJCSAqICAgMS4gUmUtY3JlYXRlIHRoZSB0YWJsZSBpbnNpZGUgdGhlIHNjcm9sbGluZyBkaXYKCQkgKiAgIDIuIFRha2UgbGl2ZSBtZWFzdXJlbWVudHMgZnJvbSB0aGUgRE9NCgkJICogICAzLiBBcHBseSB0aGUgbWVhc3VyZW1lbnRzCgkJICogICA0LiBDbGVhbiB1cAoJCSAqLwoJCWZ1bmN0aW9uIF9mblNjcm9sbERyYXcgKCBvICkKCQl7CgkJCXZhcgoJCQkJblNjcm9sbEhlYWRJbm5lciA9IG8ublNjcm9sbEhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLAoJCQkJblNjcm9sbEhlYWRUYWJsZSA9IG5TY3JvbGxIZWFkSW5uZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RhYmxlJylbMF0sCgkJCQluU2Nyb2xsQm9keSA9IG8ublRhYmxlLnBhcmVudE5vZGUsCgkJCQlpLCBpTGVuLCBqLCBqTGVuLCBhbkhlYWRUb1NpemUsIGFuSGVhZFNpemVycywgYW5Gb290U2l6ZXJzLCBhbkZvb3RUb1NpemUsIG9TdHlsZSwgaVZpcywKCQkJCWlXaWR0aCwgYUFwcGxpZWQ9W10sIGlTYW5pdHlXaWR0aDsKCQkJCgkJCS8qCgkJCSAqIDEuIFJlLWNyZWF0ZSB0aGUgdGFibGUgaW5zaWRlIHRoZSBzY3JvbGxpbmcgZGl2CgkJCSAqLwoJCQkKCQkJLyogUmVtb3ZlIHRoZSBvbGQgbWluaW1pc2VkIHRoZWFkIGFuZCB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgaW5uZXIgdGFibGUgKi8KCQkJdmFyIG5UaGVhZFNpemUgPSBvLm5UYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGhlYWQnKTsKCQkJaWYgKCBuVGhlYWRTaXplLmxlbmd0aCA+IDAgKQoJCQl7CgkJCQlvLm5UYWJsZS5yZW1vdmVDaGlsZCggblRoZWFkU2l6ZVswXSApOwoJCQl9CgkJCQoJCQlpZiAoIG8ublRGb290ICE9PSBudWxsICkKCQkJewoJCQkJLyogUmVtb3ZlIHRoZSBvbGQgbWluaW1pc2VkIGZvb3RlciBlbGVtZW50IGluIHRoZSBjbG9uZWQgaGVhZGVyICovCgkJCQl2YXIgblRmb290U2l6ZSA9IG8ublRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0Zm9vdCcpOwoJCQkJaWYgKCBuVGZvb3RTaXplLmxlbmd0aCA+IDAgKQoJCQkJewoJCQkJCW8ublRhYmxlLnJlbW92ZUNoaWxkKCBuVGZvb3RTaXplWzBdICk7CgkJCQl9CgkJCX0KCQkJCgkJCS8qIENsb25lIHRoZSBjdXJyZW50IGhlYWRlciBhbmQgZm9vdGVyIGVsZW1lbnRzIGFuZCB0aGVuIHBsYWNlIGl0IGludG8gdGhlIGlubmVyIHRhYmxlICovCgkJCW5UaGVhZFNpemUgPSBvLm5USGVhZC5jbG9uZU5vZGUodHJ1ZSk7CgkJCW8ublRhYmxlLmluc2VydEJlZm9yZSggblRoZWFkU2l6ZSwgby5uVGFibGUuY2hpbGROb2Rlc1swXSApOwoJCQkKCQkJaWYgKCBvLm5URm9vdCAhPT0gbnVsbCApCgkJCXsKCQkJCW5UZm9vdFNpemUgPSBvLm5URm9vdC5jbG9uZU5vZGUodHJ1ZSk7CgkJCQlvLm5UYWJsZS5pbnNlcnRCZWZvcmUoIG5UZm9vdFNpemUsIG8ublRhYmxlLmNoaWxkTm9kZXNbMV0gKTsKCQkJfQoJCQkKCQkJLyoKCQkJICogMi4gVGFrZSBsaXZlIG1lYXN1cmVtZW50cyBmcm9tIHRoZSBET00gLSBkbyBub3QgYWx0ZXIgdGhlIERPTSBpdHNlbGYhCgkJCSAqLwoJCQkKCQkJLyogUmVtb3ZlIG9sZCBzaXppbmcgYW5kIGFwcGx5IHRoZSBjYWxjdWxhdGVkIGNvbHVtbiB3aWR0aHMKCQkJICogR2V0IHRoZSB1bmlxdWUgY29sdW1uIGhlYWRlcnMgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgKGNsb25lZCkgaGVhZGVyLiBXZSB3YW50IHRvIGFwcGx5IHRoZQoJCQkgKiBjYWxjbGF0ZWQgc2l6ZXMgdG8gdGhpcyBoZWFkZXIKCQkJICovCgkJCWlmICggby5vU2Nyb2xsLnNYID09PSAiIiApCgkJCXsKCQkJCW5TY3JvbGxCb2R5LnN0eWxlLndpZHRoID0gJzEwMCUnOwoJCQkJblNjcm9sbEhlYWRJbm5lci5wYXJlbnROb2RlLnN0eWxlLndpZHRoID0gJzEwMCUnOwoJCQl9CgkJCQoJCQl2YXIgblRocyA9IF9mbkdldFVuaXF1ZVRocyggbywgblRoZWFkU2l6ZSApOwoJCQlmb3IgKCBpPTAsIGlMZW49blRocy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpVmlzID0gX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXgoIG8sIGkgKTsKCQkJCW5UaHNbaV0uc3R5bGUud2lkdGggPSBvLmFvQ29sdW1uc1tpVmlzXS5zV2lkdGg7CgkJCX0KCQkJCgkJCWlmICggby5uVEZvb3QgIT09IG51bGwgKQoJCQl7CgkJCQlfZm5BcHBseVRvQ2hpbGRyZW4oIGZ1bmN0aW9uKG4pIHsKCQkJCQluLnN0eWxlLndpZHRoID0gIiI7CgkJCQl9LCBuVGZvb3RTaXplLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpICk7CgkJCX0KCQkJCgkJCS8qIFNpemUgdGhlIHRhYmxlIGFzIGEgd2hvbGUgKi8KCQkJaVNhbml0eVdpZHRoID0gJChvLm5UYWJsZSkub3V0ZXJXaWR0aCgpOwoJCQlpZiAoIG8ub1Njcm9sbC5zWCA9PT0gIiIgKQoJCQl7CgkJCQkvKiBObyB4IHNjcm9sbGluZyAqLwoJCQkJby5uVGFibGUuc3R5bGUud2lkdGggPSAiMTAwJSI7CgkJCQkKCQkJCS8qIEkga25vdyB0aGlzIGlzIHJ1YmJpc2ggLSBidXQgSUU3IHdpbGwgbWFrZSB0aGUgd2lkdGggb2YgdGhlIHRhYmxlIHdoZW4gMTAwJSBpbmNsdWRlCgkJCQkgKiB0aGUgc2Nyb2xsYmFyIC0gd2hpY2ggaXMgc2hvdWxkbid0LiBUaGlzIG5lZWRzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIGZ1dHVyZSAtIHRvIGRvCgkJCQkgKi8KCQkJCWlmICggJC5icm93c2VyLm1zaWUgJiYgJC5icm93c2VyLnZlcnNpb24gPD0gNyApCgkJCQl7CgkJCQkJby5uVGFibGUuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggJChvLm5UYWJsZSkub3V0ZXJXaWR0aCgpLW8ub1Njcm9sbC5pQmFyV2lkdGggKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmICggby5vU2Nyb2xsLnNYSW5uZXIgIT09ICIiICkKCQkJCXsKCQkJCQkvKiB4IHNjcm9sbCBpbm5lciBoYXMgYmVlbiBnaXZlbiAtIHVzZSBpdCAqLwoJCQkJCW8ublRhYmxlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3Moby5vU2Nyb2xsLnNYSW5uZXIpOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGlTYW5pdHlXaWR0aCA9PSAkKG5TY3JvbGxCb2R5KS53aWR0aCgpICYmCgkJCQkgICAkKG5TY3JvbGxCb2R5KS5oZWlnaHQoKSA8ICQoby5uVGFibGUpLmhlaWdodCgpICkKCQkJCXsKCQkJCQkvKiBUaGVyZSBpcyB5LXNjcm9sbGluZyAtIHRyeSB0byB0YWtlIGFjY291bnQgb2YgdGhlIHkgc2Nyb2xsIGJhciAqLwoJCQkJCW8ublRhYmxlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlTYW5pdHlXaWR0aC1vLm9TY3JvbGwuaUJhcldpZHRoICk7CgkJCQkJaWYgKCAkKG8ublRhYmxlKS5vdXRlcldpZHRoKCkgPiBpU2FuaXR5V2lkdGgtby5vU2Nyb2xsLmlCYXJXaWR0aCApCgkJCQkJewoJCQkJCQkvKiBOb3QgcG9zc2libGUgdG8gdGFrZSBhY2NvdW50IG9mIGl0ICovCgkJCQkJCW8ublRhYmxlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlTYW5pdHlXaWR0aCApOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkvKiBBbGwgZWxzZSBmYWlscyAqLwoJCQkJCW8ublRhYmxlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlTYW5pdHlXaWR0aCApOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBSZWNhbGN1bGF0ZSB0aGUgc2FuaXR5IHdpZHRoIC0gbm93IHRoYXQgd2UndmUgYXBwbGllZCB0aGUgcmVxdWlyZWQgd2lkdGgsIGJlZm9yZSBpdCB3YXMKCQkJICogYSB0ZW1wb3JhcnkgdmFyaWFibGUuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgY29sdW1uIHdpZHRoIGNhbGN1bGF0aW9uIGlzIGRvbmUKCQkJICogYmVmb3JlIHRoaXMgdGFibGUgRE9NIGlzIGNyZWF0ZWQuCgkJCSAqLwoJCQlpU2FuaXR5V2lkdGggPSAkKG8ublRhYmxlKS5vdXRlcldpZHRoKCk7CgkJCQoJCQkvKiBJZiB4LXNjcm9sbGluZyBpcyBkaXNhYmxlZCwgdGhlbiB0aGUgdmlld3BvcnQgY2Fubm90IGJlIGxlc3MgdGhhbiB0aGUgc2FuaXR5IHdpZHRoICovCgkJCWlmICggby5vU2Nyb2xsLnNYID09PSAiIiApCgkJCXsKCQkJCW5TY3JvbGxCb2R5LnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlTYW5pdHlXaWR0aCtvLm9TY3JvbGwuaUJhcldpZHRoICk7CgkJCQluU2Nyb2xsSGVhZElubmVyLnBhcmVudE5vZGUuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaVNhbml0eVdpZHRoK28ub1Njcm9sbC5pQmFyV2lkdGggKTsKCQkJfQoJCQkKCQkJLyogV2Ugd2FudCB0aGUgaGlkZGVuIGhlYWRlciB0byBoYXZlIHplcm8gaGVpZ2h0LCBzbyByZW1vdmUgcGFkZGluZyBhbmQgYm9yZGVycy4gVGhlbgoJCQkgKiBzZXQgdGhlIHdpZHRoIGJhc2VkIG9uIHRoZSByZWFsIGhlYWRlcnMKCQkJICovCgkJCWFuSGVhZFRvU2l6ZSA9IG8ublRIZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpOwoJCQlhbkhlYWRTaXplcnMgPSBuVGhlYWRTaXplLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpOwoJCQkKCQkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuU2l6ZXIsIG5Ub1NpemUpIHsKCQkJCW9TdHlsZSA9IG5TaXplci5zdHlsZTsKCQkJCW9TdHlsZS5wYWRkaW5nVG9wID0gIjAiOwoJCQkJb1N0eWxlLnBhZGRpbmdCb3R0b20gPSAiMCI7CgkJCQlvU3R5bGUuYm9yZGVyVG9wV2lkdGggPSAiMCI7CgkJCQlvU3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSAiMCI7CgkJCQlvU3R5bGUuaGVpZ2h0ID0gMDsKCQkJCQoJCQkJaVdpZHRoID0gJChuU2l6ZXIpLndpZHRoKCk7CgkJCQluVG9TaXplLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlXaWR0aCApOwoJCQkJYUFwcGxpZWQucHVzaCggaVdpZHRoICk7CgkJCX0sIGFuSGVhZFNpemVycywgYW5IZWFkVG9TaXplICk7CgkJCSQoYW5IZWFkU2l6ZXJzKS5oZWlnaHQoMCk7CgkJCQoJCQlpZiAoIG8ublRGb290ICE9PSBudWxsICkKCQkJewoJCQkJLyogQ2xvbmUgdGhlIGN1cnJlbnQgZm9vdGVyIGFuZCB0aGVuIHBsYWNlIGl0IGludG8gdGhlIGJvZHkgdGFibGUgYXMgYSAiaGlkZGVuIGhlYWRlciIgKi8KCQkJCWFuRm9vdFNpemVycyA9IG5UZm9vdFNpemUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJyk7CgkJCQlhbkZvb3RUb1NpemUgPSBvLm5URm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKTsKCQkJCQoJCQkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuU2l6ZXIsIG5Ub1NpemUpIHsKCQkJCQlvU3R5bGUgPSBuU2l6ZXIuc3R5bGU7CgkJCQkJb1N0eWxlLnBhZGRpbmdUb3AgPSAiMCI7CgkJCQkJb1N0eWxlLnBhZGRpbmdCb3R0b20gPSAiMCI7CgkJCQkJb1N0eWxlLmJvcmRlclRvcFdpZHRoID0gIjAiOwoJCQkJCW9TdHlsZS5ib3JkZXJCb3R0b21XaWR0aCA9ICIwIjsKCQkJCQlvU3R5bGUuaGVpZ2h0ID0gMDsKCQkJCQkKCQkJCQlpV2lkdGggPSAkKG5TaXplcikud2lkdGgoKTsKCQkJCQluVG9TaXplLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlXaWR0aCApOwoJCQkJCWFBcHBsaWVkLnB1c2goIGlXaWR0aCApOwoJCQkJfSwgYW5Gb290U2l6ZXJzLCBhbkZvb3RUb1NpemUgKTsKCQkJCSQoYW5Gb290U2l6ZXJzKS5oZWlnaHQoMCk7CgkJCX0KCQkJCgkJCS8qCgkJCSAqIDMuIEFwcGx5IHRoZSBtZWFzdXJlbWVudHMKCQkJICovCgkJCQoJCQkvKiAiSGlkZSIgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHRoYXQgd2UgdXNlZCBmb3IgdGhlIHNpemluZy4gV2Ugd2FudCB0byBhbHNvIGZpeCB0aGVpciB3aWR0aAoJCQkgKiB0byB3aGF0IHRoZXkgY3VycmVudGx5IGFyZQoJCQkgKi8KCQkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuU2l6ZXIpIHsKCQkJCW5TaXplci5pbm5lckhUTUwgPSAiIjsKCQkJCW5TaXplci5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBhQXBwbGllZC5zaGlmdCgpICk7CgkJCX0sIGFuSGVhZFNpemVycyApOwoJCQkKCQkJaWYgKCBvLm5URm9vdCAhPT0gbnVsbCApCgkJCXsKCQkJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24oblNpemVyKSB7CgkJCQkJblNpemVyLmlubmVySFRNTCA9ICIiOwoJCQkJCW5TaXplci5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBhQXBwbGllZC5zaGlmdCgpICk7CgkJCQl9LCBhbkZvb3RTaXplcnMgKTsKCQkJfQoJCQkKCQkJLyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHRhYmxlIGlzIG9mIGEgc2Vuc2libGUgd2lkdGguIElmIG5vdCB0aGVuIHdlIGFyZSBnb2luZyB0byBnZXQKCQkJICogbWlzYWxpZ25tZW50CgkJCSAqLwoJCQlpZiAoICQoby5uVGFibGUpLm91dGVyV2lkdGgoKSA8IGlTYW5pdHlXaWR0aCApCgkJCXsKCQkJCWlmICggby5vU2Nyb2xsLnNYID09PSAiIiApCgkJCQl7CgkJCQkJX2ZuTG9nKCBvLCAxLCAiVGhlIHRhYmxlIGNhbm5vdCBmaXQgaW50byB0aGUgY3VycmVudCBlbGVtZW50IHdoaWNoIHdpbGwgY2F1c2UgY29sdW1uIisKCQkJCQkJIiBtaXNhbGlnbm1lbnQuIEl0IGlzIHN1Z2dlc3RlZCB0aGF0IHlvdSBlbmFibGUgeC1zY3JvbGxpbmcgb3IgaW5jcmVhc2UgdGhlIHdpZHRoIisKCQkJCQkJIiB0aGUgdGFibGUgaGFzIGluIHdoaWNoIHRvIGJlIGRyYXduIiApOwoJCQkJfQoJCQkJZWxzZSBpZiAoIG8ub1Njcm9sbC5zWElubmVyICE9PSAiIiApCgkJCQl7CgkJCQkJX2ZuTG9nKCBvLCAxLCAiVGhlIHRhYmxlIGNhbm5vdCBmaXQgaW50byB0aGUgY3VycmVudCBlbGVtZW50IHdoaWNoIHdpbGwgY2F1c2UgY29sdW1uIisKCQkJCQkJIiBtaXNhbGlnbm1lbnQuIEl0IGlzIHN1Z2dlc3RlZCB0aGF0IHlvdSBpbmNyZWFzZSB0aGUgc1Njcm9sbFhJbm5lciBwcm9wZXJ0eSB0byIrCgkJCQkJCSIgYWxsb3cgaXQgdG8gZHJhdyBpbiBhIGxhcmdlciBhcmVhLCBvciBzaW1wbHkgcmVtb3ZlIHRoYXQgcGFyYW1ldGVyIHRvIGFsbG93IisKCQkJCQkJIiBhdXRvbWF0aWMgY2FsY3VsYXRpb24iICk7CgkJCQl9CgkJCX0KCQkJCgkJCQoJCQkvKgoJCQkgKiA0LiBDbGVhbiB1cAoJCQkgKi8KCQkJCgkJCWlmICggby5vU2Nyb2xsLnNZID09PSAiIiApCgkJCXsKCQkJCS8qIElFNzwgcHV0cyBhIHZlcnRpY2FsIHNjcm9sbGJhciBpbiBwbGFjZSAod2hlbiBpdCBzaG91bGRuJ3QgYmUpIGR1ZSB0byBzdWJ0cmFjdGluZwoJCQkJICogdGhlIHNjcm9sbGJhciBoZWlnaHQgZnJvbSB0aGUgdmlzaWJsZSBkaXNwbGF5LCByYXRoZXIgdGhhbiBhZGRpbmcgaXQgb24uIFdlIG5lZWQgdG8KCQkJCSAqIHNldCB0aGUgaGVpZ2h0IGluIG9yZGVyIHRvIHNvcnQgdGhpcy4gRG9uJ3Qgd2FudCB0byBkbyBpdCBpbiBhbnkgb3RoZXIgYnJvd3NlcnMuCgkJCQkgKi8KCQkJCWlmICggJC5icm93c2VyLm1zaWUgJiYgJC5icm93c2VyLnZlcnNpb24gPD0gNyApCgkJCQl7CgkJCQkJblNjcm9sbEJvZHkuc3R5bGUuaGVpZ2h0ID0gX2ZuU3RyaW5nVG9Dc3MoIG8ublRhYmxlLm9mZnNldEhlaWdodCtvLm9TY3JvbGwuaUJhcldpZHRoICk7CgkJCQl9CgkJCX0KCQkJCgkJCWlmICggby5vU2Nyb2xsLnNZICE9PSAiIiAmJiBvLm9TY3JvbGwuYkNvbGxhcHNlICkKCQkJewoJCQkJblNjcm9sbEJvZHkuc3R5bGUuaGVpZ2h0ID0gX2ZuU3RyaW5nVG9Dc3MoIG8ub1Njcm9sbC5zWSApOwoJCQkJCgkJCQl2YXIgaUV4dHJhID0gKG8ub1Njcm9sbC5zWCAhPT0gIiIgJiYgby5uVGFibGUub2Zmc2V0V2lkdGggPiBuU2Nyb2xsQm9keS5vZmZzZXRXaWR0aCkgPwoJCQkJIAlvLm9TY3JvbGwuaUJhcldpZHRoIDogMDsKCQkJCWlmICggby5uVGFibGUub2Zmc2V0SGVpZ2h0IDwgblNjcm9sbEJvZHkub2Zmc2V0SGVpZ2h0ICkKCQkJCXsKCQkJCQluU2Nyb2xsQm9keS5zdHlsZS5oZWlnaHQgPSBfZm5TdHJpbmdUb0NzcyggJChvLm5UYWJsZSkuaGVpZ2h0KCkraUV4dHJhICk7CgkJCQl9CgkJCX0KCQkJCgkJCS8qIEZpbmFsbHkgc2V0IHRoZSB3aWR0aCdzIG9mIHRoZSBoZWFkZXIgYW5kIGZvb3RlciB0YWJsZXMgKi8KCQkJdmFyIGlPdXRlcldpZHRoID0gJChvLm5UYWJsZSkub3V0ZXJXaWR0aCgpOwoJCQluU2Nyb2xsSGVhZFRhYmxlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlPdXRlcldpZHRoICk7CgkJCW5TY3JvbGxIZWFkSW5uZXIuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaU91dGVyV2lkdGgrby5vU2Nyb2xsLmlCYXJXaWR0aCApOwoJCQkKCQkJaWYgKCBvLm5URm9vdCAhPT0gbnVsbCApCgkJCXsKCQkJCXZhcgoJCQkJCW5TY3JvbGxGb290SW5uZXIgPSBvLm5TY3JvbGxGb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXSwKCQkJCQluU2Nyb2xsRm9vdFRhYmxlID0gblNjcm9sbEZvb3RJbm5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGFibGUnKVswXTsKCQkJCQoJCQkJblNjcm9sbEZvb3RJbm5lci5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBvLm5UYWJsZS5vZmZzZXRXaWR0aCtvLm9TY3JvbGwuaUJhcldpZHRoICk7CgkJCQluU2Nyb2xsRm9vdFRhYmxlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIG8ublRhYmxlLm9mZnNldFdpZHRoICk7CgkJCX0KCQkJCgkJCS8qIElmIHNvcnRpbmcgb3IgZmlsdGVyaW5nIGhhcyBvY2N1cmVkLCBqdW1wIHRoZSBzY3JvbGxpbmcgYmFjayB0byB0aGUgdG9wICovCgkJCWlmICggby5iU29ydGVkIHx8IG8uYkZpbHRlcmVkICkKCQkJewoJCQkJblNjcm9sbEJvZHkuc2Nyb2xsVG9wID0gMDsKCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5BanVzdENvbHVtblNpemluZwoJCSAqIFB1cnBvc2U6ICBBanVzdCB0aGUgdGFibGUgY29sdW1uIHdpZHRocyBmb3IgbmV3IGRhdGEKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiBOb3RlczogICAgWW91IHdvdWxkIHByb2JhYmx5IHdhbnQgdG8gZG8gYSByZWRyYXcgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkFqdXN0Q29sdW1uU2l6aW5nICggb1NldHRpbmdzICkKCQl7CgkJCS8qIE5vdCBpbnRlcmVzdGVkIGluIGRvaW5nIGNvbHVtbiB3aWR0aCBjYWxjdWxhdGlvbiBpZiBhdXRvd2lkdGggaXMgZGlzYWJsZWQgKi8KCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJBdXRvV2lkdGggPT09IGZhbHNlICkKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCQoJCQlfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMoIG9TZXR0aW5ncyApOwoJCQlmb3IgKCB2YXIgaT0wICwgaUxlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaV0ublRoLnN0eWxlLndpZHRoID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zV2lkdGg7CgkJCX0KCQl9CgkJCgkJCgkJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCQkgKiBTZWN0aW9uIC0gRmVhdHVyZTogRmlsdGVyaW5nCgkJICovCgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRmVhdHVyZUh0bWxGaWx0ZXIKCQkgKiBQdXJwb3NlOiAgR2VuZXJhdGUgdGhlIG5vZGUgcmVxdWlyZWQgZm9yIGZpbHRlcmluZyB0ZXh0CgkJICogUmV0dXJuczogIG5vZGUKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuRmVhdHVyZUh0bWxGaWx0ZXIgKCBvU2V0dGluZ3MgKQoJCXsKCQkJdmFyIHNTZWFyY2hTdHIgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNTZWFyY2g7CgkJCXNTZWFyY2hTdHIgPSAoc1NlYXJjaFN0ci5pbmRleE9mKCdfSU5QVVRfJykgIT09IC0xKSA/CgkJCSAgc1NlYXJjaFN0ci5yZXBsYWNlKCdfSU5QVVRfJywgJzxpbnB1dCB0eXBlPSJ0ZXh0IiAvPicpIDoKCQkJICBzU2VhcmNoU3RyPT09IiIgPyAnPGlucHV0IHR5cGU9InRleHQiIC8+JyA6IHNTZWFyY2hTdHIrJyA8aW5wdXQgdHlwZT0idGV4dCIgLz4nOwoJCQkKCQkJdmFyIG5GaWx0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQluRmlsdGVyLmNsYXNzTmFtZSA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zRmlsdGVyOwoJCQluRmlsdGVyLmlubmVySFRNTCA9ICc8bGFiZWw+JytzU2VhcmNoU3RyKyc8XC9sYWJlbD4nOwoJCQlpZiAoIG9TZXR0aW5ncy5zVGFibGVJZCAhPT0gJycgJiYgdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5mID09ICJ1bmRlZmluZWQiICkKCQkJewoJCQkJbkZpbHRlci5zZXRBdHRyaWJ1dGUoICdpZCcsIG9TZXR0aW5ncy5zVGFibGVJZCsnX2ZpbHRlcicgKTsKCQkJfQoJCQkKCQkJdmFyIGpxRmlsdGVyID0gJCgiaW5wdXQiLCBuRmlsdGVyKTsKCQkJanFGaWx0ZXIudmFsKCBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2gucmVwbGFjZSgnIicsJyZxdW90OycpICk7CgkJCWpxRmlsdGVyLmJpbmQoICdrZXl1cC5EVCcsIGZ1bmN0aW9uKGUpIHsKCQkJCS8qIFVwZGF0ZSBhbGwgb3RoZXIgZmlsdGVyIGlucHV0IGVsZW1lbnRzIGZvciB0aGUgbmV3IGRpc3BsYXkgKi8KCQkJCXZhciBuID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzLmY7CgkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPW4ubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIG5baV0gIT0gdGhpcy5wYXJlbnROb2RlICkKCQkJCQl7CgkJCQkJCSQoJ2lucHV0JywgbltpXSkudmFsKCB0aGlzLnZhbHVlICk7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBOb3cgZG8gdGhlIGZpbHRlciAqLwoJCQkJaWYgKCB0aGlzLnZhbHVlICE9IG9TZXR0aW5ncy5vUHJldmlvdXNTZWFyY2guc1NlYXJjaCApCgkJCQl7CgkJCQkJX2ZuRmlsdGVyQ29tcGxldGUoIG9TZXR0aW5ncywgeyAKCQkJCQkJInNTZWFyY2giOiB0aGlzLnZhbHVlLCAKCQkJCQkJImJSZWdleCI6ICBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLmJSZWdleCwKCQkJCQkJImJTbWFydCI6ICBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLmJTbWFydCAKCQkJCQl9ICk7CgkJCQl9CgkJCX0gKTsKCQkJCgkJCWpxRmlsdGVyLmJpbmQoICdrZXlwcmVzcy5EVCcsIGZ1bmN0aW9uKGUpIHsKCQkJCS8qIFByZXZlbnQgZGVmYXVsdCAqLwoJCQkJaWYgKCBlLmtleUNvZGUgPT0gMTMgKQoJCQkJewoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJfSApOwoJCQkKCQkJcmV0dXJuIG5GaWx0ZXI7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkZpbHRlckNvbXBsZXRlCgkJICogUHVycG9zZTogIEZpbHRlciB0aGUgdGFibGUgdXNpbmcgYm90aCB0aGUgZ2xvYmFsIGZpbHRlciBhbmQgY29sdW1uIGJhc2VkIGZpbHRlcmluZwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBvYmplY3Q6b1NlYXJjaDogc2VhcmNoIGluZm9ybWF0aW9uCgkJICogICAgICAgICAgIGludDppRm9yY2UgLSBvcHRpb25hbCAtIGZvcmNlIGEgcmVzZWFyY2ggb2YgdGhlIG1hc3RlciBhcnJheSAoMSkgb3Igbm90ICh1bmRlZmluZWQgb3IgMCkKCQkgKi8KCQlmdW5jdGlvbiBfZm5GaWx0ZXJDb21wbGV0ZSAoIG9TZXR0aW5ncywgb0lucHV0LCBpRm9yY2UgKQoJCXsKCQkJLyogRmlsdGVyIG9uIGV2ZXJ5dGhpbmcgKi8KCQkJX2ZuRmlsdGVyKCBvU2V0dGluZ3MsIG9JbnB1dC5zU2VhcmNoLCBpRm9yY2UsIG9JbnB1dC5iUmVnZXgsIG9JbnB1dC5iU21hcnQgKTsKCQkJCgkJCS8qIE5vdyBkbyB0aGUgaW5kaXZpZHVhbCBjb2x1bW4gZmlsdGVyICovCgkJCWZvciAoIHZhciBpPTAgOyBpPG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHMubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJX2ZuRmlsdGVyQ29sdW1uKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbaV0uc1NlYXJjaCwgaSwgCgkJCQkJb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1tpXS5iUmVnZXgsIG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbaV0uYlNtYXJ0ICk7CgkJCX0KCQkJCgkJCS8qIEN1c3RvbSBmaWx0ZXJpbmcgKi8KCQkJaWYgKCBfb0V4dC5hZm5GaWx0ZXJpbmcubGVuZ3RoICE9PSAwICkKCQkJewoJCQkJX2ZuRmlsdGVyQ3VzdG9tKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJLyogVGVsbCB0aGUgZHJhdyBmdW5jdGlvbiB3ZSBoYXZlIGJlZW4gZmlsdGVyaW5nICovCgkJCW9TZXR0aW5ncy5iRmlsdGVyZWQgPSB0cnVlOwoJCQkKCQkJLyogUmVkcmF3IHRoZSB0YWJsZSAqLwoJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQlfZm5EcmF3KCBvU2V0dGluZ3MgKTsKCQkJCgkJCS8qIFJlYnVpbGQgc2VhcmNoIGFycmF5ICdvZmZsaW5lJyAqLwoJCQlfZm5CdWlsZFNlYXJjaEFycmF5KCBvU2V0dGluZ3MsIDAgKTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRmlsdGVyQ3VzdG9tCgkJICogUHVycG9zZTogIEFwcGx5IGN1c3RvbSBmaWx0ZXJpbmcgZnVuY3Rpb25zCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuRmlsdGVyQ3VzdG9tKCBvU2V0dGluZ3MgKQoJCXsKCQkJdmFyIGFmbkZpbHRlcnMgPSBfb0V4dC5hZm5GaWx0ZXJpbmc7CgkJCWZvciAoIHZhciBpPTAsIGlMZW49YWZuRmlsdGVycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQl2YXIgaUNvcnJlY3RvciA9IDA7CgkJCQlmb3IgKCB2YXIgaj0wLCBqTGVuPW9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJCXsKCQkJCQl2YXIgaURpc0luZGV4ID0gb1NldHRpbmdzLmFpRGlzcGxheVtqLWlDb3JyZWN0b3JdOwoJCQkJCQoJCQkJCS8qIENoZWNrIGlmIHdlIHNob3VsZCB1c2UgdGhpcyByb3cgYmFzZWQgb24gdGhlIGZpbHRlcmluZyBmdW5jdGlvbiAqLwoJCQkJCWlmICggIWFmbkZpbHRlcnNbaV0oIG9TZXR0aW5ncywgX2ZuR2V0Um93RGF0YSggb1NldHRpbmdzLCBpRGlzSW5kZXgsICdmaWx0ZXInICksIGlEaXNJbmRleCApICkKCQkJCQl7CgkJCQkJCW9TZXR0aW5ncy5haURpc3BsYXkuc3BsaWNlKCBqLWlDb3JyZWN0b3IsIDEgKTsKCQkJCQkJaUNvcnJlY3RvcisrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5GaWx0ZXJDb2x1bW4KCQkgKiBQdXJwb3NlOiAgRmlsdGVyIHRoZSB0YWJsZSBvbiBhIHBlci1jb2x1bW4gYmFzaXMKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgc3RyaW5nOnNJbnB1dCAtIHN0cmluZyB0byBmaWx0ZXIgb24KCQkgKiAgICAgICAgICAgaW50OmlDb2x1bW4gLSBjb2x1bW4gdG8gZmlsdGVyCgkJICogICAgICAgICAgIGJvb2w6YlJlZ2V4IC0gdHJlYXQgc2VhcmNoIHN0cmluZyBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBub3QKCQkgKiAgICAgICAgICAgYm9vbDpiU21hcnQgLSB1c2Ugc21hcnQgZmlsdGVyaW5nIG9yIG5vdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZpbHRlckNvbHVtbiAoIG9TZXR0aW5ncywgc0lucHV0LCBpQ29sdW1uLCBiUmVnZXgsIGJTbWFydCApCgkJewoJCQlpZiAoIHNJbnB1dCA9PT0gIiIgKQoJCQl7CgkJCQlyZXR1cm47CgkJCX0KCQkJCgkJCXZhciBpSW5kZXhDb3JyZWN0b3IgPSAwOwoJCQl2YXIgcnBTZWFyY2ggPSBfZm5GaWx0ZXJDcmVhdGVTZWFyY2goIHNJbnB1dCwgYlJlZ2V4LCBiU21hcnQgKTsKCQkJCgkJCWZvciAoIHZhciBpPW9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoLTEgOyBpPj0wIDsgaS0tICkKCQkJewoJCQkJdmFyIHNEYXRhID0gX2ZuRGF0YVRvU2VhcmNoKCBfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBvU2V0dGluZ3MuYWlEaXNwbGF5W2ldLCBpQ29sdW1uLCAnZmlsdGVyJyApLAoJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uc1R5cGUgKTsKCQkJCWlmICggISBycFNlYXJjaC50ZXN0KCBzRGF0YSApICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYWlEaXNwbGF5LnNwbGljZSggaSwgMSApOwoJCQkJCWlJbmRleENvcnJlY3RvcisrOwoJCQkJfQoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkZpbHRlcgoJCSAqIFB1cnBvc2U6ICBGaWx0ZXIgdGhlIGRhdGEgdGFibGUgYmFzZWQgb24gdXNlciBpbnB1dCBhbmQgZHJhdyB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgc3RyaW5nOnNJbnB1dCAtIHN0cmluZyB0byBmaWx0ZXIgb24KCQkgKiAgICAgICAgICAgaW50OmlGb3JjZSAtIG9wdGlvbmFsIC0gZm9yY2UgYSByZXNlYXJjaCBvZiB0aGUgbWFzdGVyIGFycmF5ICgxKSBvciBub3QgKHVuZGVmaW5lZCBvciAwKQoJCSAqICAgICAgICAgICBib29sOmJSZWdleCAtIHRyZWF0IGFzIGEgcmVndWxhciBleHByZXNzaW9uIG9yIG5vdAoJCSAqICAgICAgICAgICBib29sOmJTbWFydCAtIHBlcmZvcm0gc21hcnQgZmlsdGVyaW5nIG9yIG5vdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZpbHRlciggb1NldHRpbmdzLCBzSW5wdXQsIGlGb3JjZSwgYlJlZ2V4LCBiU21hcnQgKQoJCXsKCQkJdmFyIGk7CgkJCXZhciBycFNlYXJjaCA9IF9mbkZpbHRlckNyZWF0ZVNlYXJjaCggc0lucHV0LCBiUmVnZXgsIGJTbWFydCApOwoJCQkKCQkJLyogQ2hlY2sgaWYgd2UgYXJlIGZvcmNpbmcgb3Igbm90IC0gb3B0aW9uYWwgcGFyYW1ldGVyICovCgkJCWlmICggdHlwZW9mIGlGb3JjZSA9PSAndW5kZWZpbmVkJyB8fCBpRm9yY2UgPT09IG51bGwgKQoJCQl7CgkJCQlpRm9yY2UgPSAwOwoJCQl9CgkJCQoJCQkvKiBOZWVkIHRvIHRha2UgYWNjb3VudCBvZiBjdXN0b20gZmlsdGVyaW5nIGZ1bmN0aW9ucyAtIGFsd2F5cyBmaWx0ZXIgKi8KCQkJaWYgKCBfb0V4dC5hZm5GaWx0ZXJpbmcubGVuZ3RoICE9PSAwICkKCQkJewoJCQkJaUZvcmNlID0gMTsKCQkJfQoJCQkKCQkJLyoKCQkJICogSWYgdGhlIGlucHV0IGlzIGJsYW5rIC0gd2Ugd2FudCB0aGUgZnVsbCBkYXRhIHNldAoJCQkgKi8KCQkJaWYgKCBzSW5wdXQubGVuZ3RoIDw9IDAgKQoJCQl7CgkJCQlvU2V0dGluZ3MuYWlEaXNwbGF5LnNwbGljZSggMCwgb1NldHRpbmdzLmFpRGlzcGxheS5sZW5ndGgpOwoJCQkJb1NldHRpbmdzLmFpRGlzcGxheSA9IG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qCgkJCQkgKiBXZSBhcmUgc3RhcnRpbmcgYSBuZXcgc2VhcmNoIG9yIHRoZSBuZXcgc2VhcmNoIHN0cmluZyBpcyBzbWFsbGVyIAoJCQkJICogdGhlbiB0aGUgb2xkIG9uZSAoaS5lLiBkZWxldGUpLiBTZWFyY2ggZnJvbSB0aGUgbWFzdGVyIGFycmF5CgkJCSAJICovCgkJCQlpZiAoIG9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoID09IG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIubGVuZ3RoIHx8CgkJCQkJICAgb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoLmxlbmd0aCA+IHNJbnB1dC5sZW5ndGggfHwgaUZvcmNlID09IDEgfHwKCQkJCQkgICBzSW5wdXQuaW5kZXhPZihvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2gpICE9PSAwICkKCQkJCXsKCQkJCQkvKiBOdWtlIHRoZSBvbGQgZGlzcGxheSBhcnJheSAtIHdlIGFyZSBnb2luZyB0byByZWJ1aWxkIGl0ICovCgkJCQkJb1NldHRpbmdzLmFpRGlzcGxheS5zcGxpY2UoIDAsIG9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoKTsKCQkJCQkKCQkJCQkvKiBGb3JjZSBhIHJlYnVpbGQgb2YgdGhlIHNlYXJjaCBhcnJheSAqLwoJCQkJCV9mbkJ1aWxkU2VhcmNoQXJyYXkoIG9TZXR0aW5ncywgMSApOwoJCQkJCQoJCQkJCS8qIFNlYXJjaCB0aHJvdWdoIGFsbCByZWNvcmRzIHRvIHBvcHVsYXRlIHRoZSBzZWFyY2ggYXJyYXkKCQkJCQkgKiBUaGUgdGhlIG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIgYW5kIGFzRGF0YVNlYXJjaCBhcnJheXMgaGF2ZSAxIHRvIDEgCgkJCQkJICogbWFwcGluZwoJCQkJCSAqLwoJCQkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFpRGlzcGxheU1hc3Rlci5sZW5ndGggOyBpKysgKQoJCQkJCXsKCQkJCQkJaWYgKCBycFNlYXJjaC50ZXN0KG9TZXR0aW5ncy5hc0RhdGFTZWFyY2hbaV0pICkKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFpRGlzcGxheS5wdXNoKCBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyW2ldICk7CgkJCQkJCX0KCQkJCQl9CgkJCSAgfQoJCQkgIGVsc2UKCQkJCXsKCQkJICAJLyogVXNpbmcgb2xkIHNlYXJjaCBhcnJheSAtIHJlZmluZSBpdCAtIGRvIGl0IHRoaXMgd2F5IGZvciBzcGVlZAoJCQkgIAkgKiBEb24ndCBoYXZlIHRvIHNlYXJjaCB0aGUgd2hvbGUgbWFzdGVyIGFycmF5IGFnYWluCgkJCQkJICovCgkJCSAgCXZhciBpSW5kZXhDb3JyZWN0b3IgPSAwOwoJCQkgIAkKCQkJICAJLyogU2VhcmNoIHRoZSBjdXJyZW50IHJlc3VsdHMgKi8KCQkJICAJZm9yICggaT0wIDsgaTxvU2V0dGluZ3MuYXNEYXRhU2VhcmNoLmxlbmd0aCA7IGkrKyApCgkJCQkJewoJCQkgIAkJaWYgKCAhIHJwU2VhcmNoLnRlc3Qob1NldHRpbmdzLmFzRGF0YVNlYXJjaFtpXSkgKQoJCQkJCQl7CgkJCSAgCQkJb1NldHRpbmdzLmFpRGlzcGxheS5zcGxpY2UoIGktaUluZGV4Q29ycmVjdG9yLCAxICk7CgkJCSAgCQkJaUluZGV4Q29ycmVjdG9yKys7CgkJCSAgCQl9CgkJCSAgCX0KCQkJICB9CgkJCX0KCQkJb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoID0gc0lucHV0OwoJCQlvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLmJSZWdleCA9IGJSZWdleDsKCQkJb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5iU21hcnQgPSBiU21hcnQ7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkJ1aWxkU2VhcmNoQXJyYXkKCQkgKiBQdXJwb3NlOiAgQ3JlYXRlIGFuIGFycmF5IHdoaWNoIGNhbiBiZSBxdWlja2x5IHNlYXJjaCB0aHJvdWdoCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGludDppTWFzdGVyIC0gdXNlIHRoZSBtYXN0ZXIgZGF0YSBhcnJheSAtIG9wdGlvbmFsCgkJICovCgkJZnVuY3Rpb24gX2ZuQnVpbGRTZWFyY2hBcnJheSAoIG9TZXR0aW5ncywgaU1hc3RlciApCgkJewoJCQkvKiBDbGVhciBvdXQgdGhlIG9sZCBkYXRhICovCgkJCW9TZXR0aW5ncy5hc0RhdGFTZWFyY2guc3BsaWNlKCAwLCBvU2V0dGluZ3MuYXNEYXRhU2VhcmNoLmxlbmd0aCApOwoJCQkKCQkJdmFyIGFBcnJheSA9ICh0eXBlb2YgaU1hc3RlciAhPSAndW5kZWZpbmVkJyAmJiBpTWFzdGVyID09IDEpID8KCQkJIAlvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyIDogb1NldHRpbmdzLmFpRGlzcGxheTsKCQkJCgkJCWZvciAoIHZhciBpPTAsIGlMZW49YUFycmF5Lmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCW9TZXR0aW5ncy5hc0RhdGFTZWFyY2hbaV0gPSBfZm5CdWlsZFNlYXJjaFJvdyggb1NldHRpbmdzLAoJCQkJCV9mbkdldFJvd0RhdGEoIG9TZXR0aW5ncywgYUFycmF5W2ldLCAnZmlsdGVyJyApICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQnVpbGRTZWFyY2hSb3cKCQkgKiBQdXJwb3NlOiAgQ3JlYXRlIGEgc2VhcmNoYWJsZSBzdHJpbmcgZnJvbSBhIHNpbmdsZSBkYXRhIHJvdwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBhcnJheTphRGF0YSAtIFJvdyBkYXRhIGFycmF5IHRvIHVzZSBmb3IgdGhlIGRhdGEgdG8gc2VhcmNoCgkJICovCgkJZnVuY3Rpb24gX2ZuQnVpbGRTZWFyY2hSb3coIG9TZXR0aW5ncywgYURhdGEgKQoJCXsKCQkJdmFyIHNTZWFyY2ggPSAnJzsKCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLl9fblRtcEZpbHRlciA9PSAndW5kZWZpbmVkJyApIHsKCQkJCW9TZXR0aW5ncy5fX25UbXBGaWx0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJfQoJCQl2YXIgblRtcCA9IG9TZXR0aW5ncy5fX25UbXBGaWx0ZXI7CgkJCQoJCQlmb3IgKCB2YXIgaj0wLCBqTGVuPW9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2pdLmJTZWFyY2hhYmxlICkKCQkJCXsKCQkJCQl2YXIgc0RhdGEgPSBhRGF0YVtqXTsKCQkJCQlzU2VhcmNoICs9IF9mbkRhdGFUb1NlYXJjaCggc0RhdGEsIG9TZXR0aW5ncy5hb0NvbHVtbnNbal0uc1R5cGUgKSsnICAnOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBJZiBpdCBsb29rcyBsaWtlIHRoZXJlIGlzIGFuIEhUTUwgZW50aXR5IGluIHRoZSBzdHJpbmcsIGF0dGVtcHQgdG8gZGVjb2RlIGl0ICovCgkJCWlmICggc1NlYXJjaC5pbmRleE9mKCcmJykgIT09IC0xICkKCQkJewoJCQkJblRtcC5pbm5lckhUTUwgPSBzU2VhcmNoOwoJCQkJc1NlYXJjaCA9IG5UbXAudGV4dENvbnRlbnQgPyBuVG1wLnRleHRDb250ZW50IDogblRtcC5pbm5lclRleHQ7CgkJCQkKCQkJCS8qIElFIGFuZCBPcGVyYSBhcHBlYXIgdG8gcHV0IGFuIG5ld2xpbmUgd2hlcmUgdGhlcmUgaXMgYSA8YnI+IHRhZyAtIHJlbW92ZSBpdCAqLwoJCQkJc1NlYXJjaCA9IHNTZWFyY2gucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoL1xyL2csIiIpOwoJCQl9CgkJCQoJCQlyZXR1cm4gc1NlYXJjaDsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRmlsdGVyQ3JlYXRlU2VhcmNoCgkJICogUHVycG9zZTogIEJ1aWxkIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBzdWl0YWJsZSBmb3Igc2VhcmNoaW5nIGEgdGFibGUKCQkgKiBSZXR1cm5zOiAgUmVnRXhwOiAtIGNvbnN0cnVjdGVkIG9iamVjdAoJCSAqIElucHV0czogICBzdHJpbmc6c1NlYXJjaCAtIHN0cmluZyB0byBzZWFyY2ggZm9yCgkJICogICAgICAgICAgIGJvb2w6YlJlZ2V4IC0gdHJlYXQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gb3Igbm90CgkJICogICAgICAgICAgIGJvb2w6YlNtYXJ0IC0gcGVyZm9ybSBzbWFydCBmaWx0ZXJpbmcgb3Igbm90CgkJICovCgkJZnVuY3Rpb24gX2ZuRmlsdGVyQ3JlYXRlU2VhcmNoKCBzU2VhcmNoLCBiUmVnZXgsIGJTbWFydCApCgkJewoJCQl2YXIgYXNTZWFyY2gsIHNSZWdFeHBTdHJpbmc7CgkJCQoJCQlpZiAoIGJTbWFydCApCgkJCXsKCQkJCS8qIEdlbmVyYXRlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlLiBTb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mOgoJCQkJICogXig/PS4qP1xib25lXGIpKD89Lio/XGJ0d29cYikoPz0uKj9cYnRocmVlXGIpLiokCgkJCQkgKi8KCQkJCWFzU2VhcmNoID0gYlJlZ2V4ID8gc1NlYXJjaC5zcGxpdCggJyAnICkgOiBfZm5Fc2NhcGVSZWdleCggc1NlYXJjaCApLnNwbGl0KCAnICcgKTsKCQkJCXNSZWdFeHBTdHJpbmcgPSAnXig/PS4qPycrYXNTZWFyY2guam9pbiggJykoPz0uKj8nICkrJykuKiQnOwoJCQkJcmV0dXJuIG5ldyBSZWdFeHAoIHNSZWdFeHBTdHJpbmcsICJpIiApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJc1NlYXJjaCA9IGJSZWdleCA/IHNTZWFyY2ggOiBfZm5Fc2NhcGVSZWdleCggc1NlYXJjaCApOwoJCQkJcmV0dXJuIG5ldyBSZWdFeHAoIHNTZWFyY2gsICJpIiApOwoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkRhdGFUb1NlYXJjaAoJCSAqIFB1cnBvc2U6ICBDb252ZXJ0IHJhdyBkYXRhIGludG8gc29tZXRoaW5nIHRoYXQgdGhlIHVzZXIgY2FuIHNlYXJjaCBvbgoJCSAqIFJldHVybnM6ICBzdHJpbmc6IC0gc2VhcmNoIHN0cmluZwoJCSAqIElucHV0czogICBzdHJpbmc6c0RhdGEgLSBkYXRhIHRvIGJlIG1vZGlmaWVkCgkJICogICAgICAgICAgIHN0cmluZzpzVHlwZSAtIGRhdGEgdHlwZQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkRhdGFUb1NlYXJjaCAoIHNEYXRhLCBzVHlwZSApCgkJewoJCQlpZiAoIHR5cGVvZiBfb0V4dC5vZm5TZWFyY2hbc1R5cGVdID09ICJmdW5jdGlvbiIgKQoJCQl7CgkJCQlyZXR1cm4gX29FeHQub2ZuU2VhcmNoW3NUeXBlXSggc0RhdGEgKTsKCQkJfQoJCQllbHNlIGlmICggc1R5cGUgPT0gImh0bWwiICkKCQkJewoJCQkJcmV0dXJuIHNEYXRhLnJlcGxhY2UoL1xuL2csIiAiKS5yZXBsYWNlKCAvPC4qPz4vZywgIiIgKTsKCQkJfQoJCQllbHNlIGlmICggdHlwZW9mIHNEYXRhID09ICJzdHJpbmciICkKCQkJewoJCQkJcmV0dXJuIHNEYXRhLnJlcGxhY2UoL1xuL2csIiAiKTsKCQkJfQoJCQllbHNlIGlmICggc0RhdGEgPT09IG51bGwgKQoJCQl7CgkJCQlyZXR1cm4gJyc7CgkJCX0KCQkJcmV0dXJuIHNEYXRhOwoJCX0KCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEZlYXR1cmU6IFNvcnRpbmcKCQkgKi8KCQkKCQkvKgoJIAkgKiBGdW5jdGlvbjogX2ZuU29ydAoJCSAqIFB1cnBvc2U6ICBDaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSB0YWJsZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBib29sOmJBcHBseUNsYXNzZXMgLSBvcHRpb25hbCAtIHNob3VsZCB3ZSBhcHBseSBjbGFzc2VzIG9yIG5vdAoJCSAqIE5vdGVzOiAgICBXZSBhbHdheXMgc29ydCB0aGUgbWFzdGVyIGFycmF5IGFuZCB0aGVuIGFwcGx5IGEgZmlsdGVyIGFnYWluCgkJICogICBpZiBpdCBpcyBuZWVkZWQuIFRoaXMgcHJvYmFibHkgaXNuJ3Qgb3B0aW1hbCAtIGJ1dCBhdG0gSSBjYW4ndCB0aGluawoJCSAqICAgb2YgYW55IG90aGVyIHdheSB3aGljaCBpcyAoZWFjaCBoYXMgZGlzYWR2YW50YWdlcykuIHdlIHdhbnQgdG8gc29ydCBhaURpc3BsYXlNYXN0ZXIgLSAKCQkgKiAgIGJ1dCBhY2NvcmRpbmcgdG8gYW9EYXRhW10uX2FEYXRhCgkJICovCgkJZnVuY3Rpb24gX2ZuU29ydCAoIG9TZXR0aW5ncywgYkFwcGx5Q2xhc3NlcyApCgkJewoJCQl2YXIKCQkJCWlEYXRhU29ydCwgaURhdGFUeXBlLAoJCQkJaSwgaUxlbiwgaiwgakxlbiwKCQkJCWFhU29ydCA9IFtdLAoJCQkgCWFpT3JpZyA9IFtdLAoJCQkJb1NvcnQgPSBfb0V4dC5vU29ydCwKCQkJCWFvRGF0YSA9IG9TZXR0aW5ncy5hb0RhdGEsCgkJCQlhb0NvbHVtbnMgPSBvU2V0dGluZ3MuYW9Db2x1bW5zOwoJCQkKCQkJLyogTm8gc29ydGluZyByZXF1aXJlZCBpZiBzZXJ2ZXItc2lkZSBvciBubyBzb3J0aW5nIGFycmF5ICovCgkJCWlmICggIW9TZXR0aW5ncy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgJiYgCgkJCQkob1NldHRpbmdzLmFhU29ydGluZy5sZW5ndGggIT09IDAgfHwgb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkICE9PSBudWxsKSApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkICE9PSBudWxsICkKCQkJCXsKCQkJCQlhYVNvcnQgPSBvU2V0dGluZ3MuYWFTb3J0aW5nRml4ZWQuY29uY2F0KCBvU2V0dGluZ3MuYWFTb3J0aW5nICk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJYWFTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZy5zbGljZSgpOwoJCQkJfQoJCQkJCgkJCQkvKiBJZiB0aGVyZSBpcyBhIHNvcnRpbmcgZGF0YSB0eXBlLCBhbmQgYSBmdWN0aW9uIGJlbG9uZ2luZyB0byBpdCwgdGhlbiB3ZSBuZWVkIHRvCgkJCQkgKiBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgZGV2ZWxvcGVyJ3MgZnVuY3Rpb24gYW5kIGFwcGx5IGl0IGZvciB0aGlzIGNvbHVtbgoJCQkJICovCgkJCQlmb3IgKCBpPTAgOyBpPGFhU29ydC5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCXZhciBpQ29sdW1uID0gYWFTb3J0W2ldWzBdOwoJCQkJCXZhciBpVmlzQ29sdW1uID0gX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIG9TZXR0aW5ncywgaUNvbHVtbiApOwoJCQkJCXZhciBzRGF0YVR5cGUgPSBvU2V0dGluZ3MuYW9Db2x1bW5zWyBpQ29sdW1uIF0uc1NvcnREYXRhVHlwZTsKCQkJCQlpZiAoIHR5cGVvZiBfb0V4dC5hZm5Tb3J0RGF0YVtzRGF0YVR5cGVdICE9ICd1bmRlZmluZWQnICkKCQkJCQl7CgkJCQkJCXZhciBhRGF0YSA9IF9vRXh0LmFmblNvcnREYXRhW3NEYXRhVHlwZV0oIG9TZXR0aW5ncywgaUNvbHVtbiwgaVZpc0NvbHVtbiApOwoJCQkJCQlmb3IgKCBqPTAsIGpMZW49YW9EYXRhLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQkJCXsKCQkJCQkJCV9mblNldENlbGxEYXRhKCBvU2V0dGluZ3MsIGosIGlDb2x1bW4sIGFEYXRhW2pdICk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8qIENyZWF0ZSBhIHZhbHVlIC0ga2V5IGFycmF5IG9mIHRoZSBjdXJyZW50IHJvdyBwb3NpdGlvbnMgc3VjaCB0aGF0IHdlIGNhbiB1c2UgdGhlaXIKCQkJCSAqIGN1cnJlbnQgcG9zaXRpb24gZHVyaW5nIHRoZSBzb3J0LCBpZiB2YWx1ZXMgbWF0Y2gsIGluIG9yZGVyIHRvIHBlcmZvcm0gc3RhYmxlIHNvcnRpbmcKCQkJCSAqLwoJCQkJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlhaU9yaWdbIG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXJbaV0gXSA9IGk7CgkJCQl9CgkJCQkKCQkJCS8qIERvIHRoZSBzb3J0IC0gaGVyZSB3ZSB3YW50IG11bHRpLWNvbHVtbiBzb3J0aW5nIGJhc2VkIG9uIGEgZ2l2ZW4gZGF0YSBzb3VyY2UgKGNvbHVtbikKCQkJCSAqIGFuZCBzb3J0aW5nIGZ1bmN0aW9uIChmcm9tIG9Tb3J0KSBpbiBhIGNlcnRhaW4gZGlyZWN0aW9uLiBJdCdzIHJlYXNvbmFibHkgY29tcGxleCB0bwoJCQkJICogZm9sbG93IG9uIGl0J3Mgb3duLCBidXQgdGhpcyBpcyB3aGF0IHdlIHdhbnQgKGV4YW1wbGUgdHdvIGNvbHVtbiBzb3J0aW5nKToKCQkJCSAqICBmbkxvY2FsU29ydGluZyA9IGZ1bmN0aW9uKGEsYil7CgkJCQkgKiAgCXZhciBpVGVzdDsKCQkJCSAqICAJaVRlc3QgPSBvU29ydFsnc3RyaW5nLWFzYyddKCdkYXRhMTEnLCAnZGF0YTEyJyk7CgkJCQkgKiAgCWlmIChpVGVzdCAhPT0gMCkKCQkJCSAqICAJCXJldHVybiBpVGVzdDsKCQkJCSAqICAgIGlUZXN0ID0gb1NvcnRbJ251bWVyaWMtZGVzYyddKCdkYXRhMjEnLCAnZGF0YTIyJyk7CgkJCQkgKiAgICBpZiAoaVRlc3QgIT09IDApCgkJCQkgKiAgCQlyZXR1cm4gaVRlc3Q7CgkJCQkgKiAgCXJldHVybiBvU29ydFsnbnVtZXJpYy1hc2MnXSggYWlPcmlnW2FdLCBhaU9yaWdbYl0gKTsKCQkJCSAqICB9CgkJCQkgKiBCYXNpY2FsbHkgd2UgaGF2ZSBhIHRlc3QgZm9yIGVhY2ggc29ydGluZyBjb2x1bW4sIGlmIHRoZSBkYXRhIGluIHRoYXQgY29sdW1uIGlzIGVxdWFsLAoJCQkJICogdGVzdCB0aGUgbmV4dCBjb2x1bW4uIElmIGFsbCBjb2x1bW5zIG1hdGNoLCB0aGVuIHdlIHVzZSBhIG51bWVyaWMgc29ydCBvbiB0aGUgcm93IAoJCQkJICogcG9zaXRpb25zIGluIHRoZSBvcmlnaW5hbCBkYXRhIGFycmF5IHRvIHByb3ZpZGUgYSBzdGFibGUgc29ydC4KCQkJCSAqLwoJCQkJdmFyIGlTb3J0TGVuID0gYWFTb3J0Lmxlbmd0aDsKCQkJCW9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc29ydCggZnVuY3Rpb24gKCBhLCBiICkgewoJCQkJCXZhciBpVGVzdCwgaURhdGFTb3J0LCBzRGF0YVR5cGU7CgkJCQkJZm9yICggaT0wIDsgaTxpU29ydExlbiA7IGkrKyApCgkJCQkJewoJCQkJCQlpRGF0YVNvcnQgPSBhb0NvbHVtbnNbIGFhU29ydFtpXVswXSBdLmlEYXRhU29ydDsKCQkJCQkJc0RhdGFUeXBlID0gYW9Db2x1bW5zWyBpRGF0YVNvcnQgXS5zVHlwZTsKCQkJCQkJaVRlc3QgPSBvU29ydFsgKHNEYXRhVHlwZT9zRGF0YVR5cGU6J3N0cmluZycpKyItIithYVNvcnRbaV1bMV0gXSgKCQkJCQkJCV9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGEsIGlEYXRhU29ydCwgJ3NvcnQnICksCgkJCQkJCQlfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBiLCBpRGF0YVNvcnQsICdzb3J0JyApCgkJCQkJCSk7CgkJCQkJCQoJCQkJCQlpZiAoIGlUZXN0ICE9PSAwICkKCQkJCQkJewoJCQkJCQkJcmV0dXJuIGlUZXN0OwoJCQkJCQl9CgkJCQkJfQoJCQkJCQoJCQkJCXJldHVybiBvU29ydFsnbnVtZXJpYy1hc2MnXSggYWlPcmlnW2FdLCBhaU9yaWdbYl0gKTsKCQkJCX0gKTsKCQkJfQoJCQkKCQkJLyogQWx0ZXIgdGhlIHNvcnRpbmcgY2xhc3NlcyB0byB0YWtlIGFjY291bnQgb2YgdGhlIGNoYW5nZXMgKi8KCQkJaWYgKCAodHlwZW9mIGJBcHBseUNsYXNzZXMgPT0gJ3VuZGVmaW5lZCcgfHwgYkFwcGx5Q2xhc3NlcykgJiYgIW9TZXR0aW5ncy5vRmVhdHVyZXMuYkRlZmVyUmVuZGVyICkKCQkJewoJCQkJX2ZuU29ydGluZ0NsYXNzZXMoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQkvKiBUZWxsIHRoZSBkcmF3IGZ1bmN0aW9uIHRoYXQgd2UgaGF2ZSBzb3J0ZWQgdGhlIGRhdGEgKi8KCQkJb1NldHRpbmdzLmJTb3J0ZWQgPSB0cnVlOwoJCQkKCQkJLyogQ29weSB0aGUgbWFzdGVyIGRhdGEgaW50byB0aGUgZHJhdyBhcnJheSBhbmQgcmUtZHJhdyAqLwoJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYkZpbHRlciApCgkJCXsKCQkJCS8qIF9mbkZpbHRlcigpIHdpbGwgcmVkcmF3IHRoZSB0YWJsZSBmb3IgdXMgKi8KCQkJCV9mbkZpbHRlckNvbXBsZXRlKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5vUHJldmlvdXNTZWFyY2gsIDEgKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCW9TZXR0aW5ncy5haURpc3BsYXkgPSBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOyAvKiByZXNldCBkaXNwbGF5IGJhY2sgdG8gcGFnZSAwICovCgkJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuU29ydEF0dGFjaExpc3RlbmVyCgkJICogUHVycG9zZTogIEF0dGFjaCBhIHNvcnQgaGFuZGxlciAoY2xpY2spIHRvIGEgbm9kZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBub2RlOm5Ob2RlIC0gbm9kZSB0byBhdHRhY2ggdGhlIGhhbmRsZXIgdG8KCQkgKiAgICAgICAgICAgaW50OmlEYXRhSW5kZXggLSBjb2x1bW4gc29ydGluZyBpbmRleAoJCSAqICAgICAgICAgICBmdW5jdGlvbjpmbkNhbGxiYWNrIC0gY2FsbGJhY2sgZnVuY3Rpb24gLSBvcHRpb25hbAoJCSAqLwoJCWZ1bmN0aW9uIF9mblNvcnRBdHRhY2hMaXN0ZW5lciAoIG9TZXR0aW5ncywgbk5vZGUsIGlEYXRhSW5kZXgsIGZuQ2FsbGJhY2sgKQoJCXsKCQkJJChuTm9kZSkuYmluZCggJ2NsaWNrLkRUJywgZnVuY3Rpb24gKGUpIHsKCQkJCS8qIElmIHRoZSBjb2x1bW4gaXMgbm90IHNvcnRhYmxlIC0gZG9uJ3QgdG8gYW55dGhpbmcgKi8KCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpRGF0YUluZGV4XS5iU29ydGFibGUgPT09IGZhbHNlICkKCQkJCXsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQkKCQkJCS8qCgkJCQkgKiBUaGlzIGlzIGEgbGl0dGxlIGJpdCBvZGQgSSBhZG1pdC4uLiBJIGRlY2xhcmUgYSB0ZW1wb3JhcnkgZnVuY3Rpb24gaW5zaWRlIHRoZSBzY29wZSBvZgoJCQkJICogX2ZuQnVpbGRIZWFkIGFuZCB0aGUgY2xpY2sgaGFuZGxlciBpbiBvcmRlciB0aGF0IHRoZSBjb2RlIHByZXNlbnRlZCBoZXJlIGNhbiBiZSB1c2VkIAoJCQkJICogdHdpY2UgLSBvbmNlIGZvciB3aGVuIGJQcm9jZXNzaW5nIGlzIGVuYWJsZWQsIGFuZCBhbm90aGVyIHRpbWUgZm9yIHdoZW4gaXQgaXMgCgkJCQkgKiBkaXNhYmxlZCwgYXMgd2UgbmVlZCB0byBwZXJmb3JtIHNsaWdodGx5IGRpZmZlcmVudCBhY3Rpb25zLgoJCQkJICogICBCYXNpY2FsbHkgdGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgSmF2YXNjcmlwdCBlbmdpbmUgaW4gbW9kZXJuIGJyb3dzZXJzIGRvbid0IAoJCQkJICogYXBwZWFyIHRvIGFsbG93IHRoZSByZW5kZXJpbmcgZW5naW5lIHRvIHVwZGF0ZSB0aGUgZGlzcGxheSB3aGlsZSBpdCBpcyBzdGlsbCBleGN1dGluZwoJCQkJICogaXQncyB0aHJlYWQgKHdlbGwgLSBpdCBkb2VzIGJ1dCBvbmx5IGFmdGVyIGxvbmcgaW50ZXJ2YWxzKS4gVGhpcyBtZWFucyB0aGF0IHRoZSAKCQkJCSAqICdwcm9jZXNzaW5nJyBkaXNwbGF5IGRvZXNuJ3QgYXBwZWFyIGZvciBhIHRhYmxlIHNvcnQuIFRvIGJyZWFrIHRoZSBqcyB0aHJlYWQgdXAgYSBiaXQKCQkJCSAqIEkgZm9yY2UgYW4gZXhlY3V0aW9uIGJyZWFrIGJ5IHVzaW5nIHNldFRpbWVvdXQgLSBidXQgdGhpcyBicmVha3MgdGhlIGV4cGVjdGVkIAoJCQkJICogdGhyZWFkIGNvbnRpbnVhdGlvbiBmb3IgdGhlIGVuZC1kZXZlbG9wZXIncyBwb2ludCBvZiB2aWV3ICh0aGVpciBjb2RlIHdvdWxkIGV4ZWN1dGUKCQkJCSAqIHRvbyBlYXJseSksIHNvIHdlIG9uO3kgZG8gaXQgd2hlbiB3ZSBhYnNvbHV0ZWx5IGhhdmUgdG8uCgkJCQkgKi8KCQkJCXZhciBmbklubmVyU29ydGluZyA9IGZ1bmN0aW9uICgpIHsKCQkJCQl2YXIgaUNvbHVtbiwgaU5leHRTb3J0OwoJCQkJCQoJCQkJCS8qIElmIHRoZSBzaGlmdCBrZXkgaXMgcHJlc3NlZCB0aGVuIHdlIGFyZSBtdWx0aXBlIGNvbHVtbiBzb3J0aW5nICovCgkJCQkJaWYgKCBlLnNoaWZ0S2V5ICkKCQkJCQl7CgkJCQkJCS8qIEFyZSB3ZSBhbHJlYWR5IGRvaW5nIHNvbWUga2luZCBvZiBzb3J0IG9uIHRoaXMgY29sdW1uPyAqLwoJCQkJCQl2YXIgYkZvdW5kID0gZmFsc2U7CgkJCQkJCWZvciAoIHZhciBpPTAgOyBpPG9TZXR0aW5ncy5hYVNvcnRpbmcubGVuZ3RoIDsgaSsrICkKCQkJCQkJewoJCQkJCQkJaWYgKCBvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzBdID09IGlEYXRhSW5kZXggKQoJCQkJCQkJewoJCQkJCQkJCWJGb3VuZCA9IHRydWU7CgkJCQkJCQkJaUNvbHVtbiA9IG9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMF07CgkJCQkJCQkJaU5leHRTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZ1tpXVsyXSsxOwoJCQkJCQkJCQoJCQkJCQkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uYXNTb3J0aW5nW2lOZXh0U29ydF0gPT0gJ3VuZGVmaW5lZCcgKQoJCQkJCQkJCXsKCQkJCQkJCQkJLyogUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzb3J0aW5nIG9wdGlvbnMsIHJlbW92ZSBmcm9tIG11bHRpLWNvbCBzb3J0ICovCgkJCQkJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmcuc3BsaWNlKCBpLCAxICk7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCS8qIE1vdmUgb250byBuZXh0IHNvcnRpbmcgZGlyZWN0aW9uICovCgkJCQkJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMV0gPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLmFzU29ydGluZ1tpTmV4dFNvcnRdOwoJCQkJCQkJCQlvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzJdID0gaU5leHRTb3J0OwoJCQkJCQkJCX0KCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQkKCQkJCQkJLyogTm8gc29ydCB5ZXQgLSBhZGQgaXQgaW4gKi8KCQkJCQkJaWYgKCBiRm91bmQgPT09IGZhbHNlICkKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFhU29ydGluZy5wdXNoKCBbIGlEYXRhSW5kZXgsIAoJCQkJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaURhdGFJbmRleF0uYXNTb3J0aW5nWzBdLCAwIF0gKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkvKiBJZiBubyBzaGlmdCBrZXkgdGhlbiBzaW5nbGUgY29sdW1uIHNvcnQgKi8KCQkJCQkJaWYgKCBvU2V0dGluZ3MuYWFTb3J0aW5nLmxlbmd0aCA9PSAxICYmIG9TZXR0aW5ncy5hYVNvcnRpbmdbMF1bMF0gPT0gaURhdGFJbmRleCApCgkJCQkJCXsKCQkJCQkJCWlDb2x1bW4gPSBvU2V0dGluZ3MuYWFTb3J0aW5nWzBdWzBdOwoJCQkJCQkJaU5leHRTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZ1swXVsyXSsxOwoJCQkJCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5hc1NvcnRpbmdbaU5leHRTb3J0XSA9PSAndW5kZWZpbmVkJyApCgkJCQkJCQl7CgkJCQkJCQkJaU5leHRTb3J0ID0gMDsKCQkJCQkJCX0KCQkJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmdbMF1bMV0gPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLmFzU29ydGluZ1tpTmV4dFNvcnRdOwoJCQkJCQkJb1NldHRpbmdzLmFhU29ydGluZ1swXVsyXSA9IGlOZXh0U29ydDsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmcuc3BsaWNlKCAwLCBvU2V0dGluZ3MuYWFTb3J0aW5nLmxlbmd0aCApOwoJCQkJCQkJb1NldHRpbmdzLmFhU29ydGluZy5wdXNoKCBbIGlEYXRhSW5kZXgsIAoJCQkJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaURhdGFJbmRleF0uYXNTb3J0aW5nWzBdLCAwIF0gKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQkKCQkJCQkvKiBSdW4gdGhlIHNvcnQgKi8KCQkJCQlfZm5Tb3J0KCBvU2V0dGluZ3MgKTsKCQkJCX07IC8qIC9mbklubmVyU29ydGluZyAqLwoJCQkJCgkJCQlpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJQcm9jZXNzaW5nICkKCQkJCXsKCQkJCQlmbklubmVyU29ydGluZygpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBvU2V0dGluZ3MsIHRydWUgKTsKCQkJCQlzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKCQkJCQkJZm5Jbm5lclNvcnRpbmcoKTsKCQkJCQkJaWYgKCAhb1NldHRpbmdzLm9GZWF0dXJlcy5iU2VydmVyU2lkZSApCgkJCQkJCXsKCQkJCQkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBvU2V0dGluZ3MsIGZhbHNlICk7CgkJCQkJCX0KCQkJCQl9LCAwICk7CgkJCQl9CgkJCQkKCQkJCS8qIENhbGwgdGhlIHVzZXIgc3BlY2lmaWVkIGNhbGxiYWNrIGZ1bmN0aW9uIC0gdXNlZCBmb3IgYXN5bmMgdXNlciBpbnRlcmFjdGlvbiAqLwoJCQkJaWYgKCB0eXBlb2YgZm5DYWxsYmFjayA9PSAnZnVuY3Rpb24nICkKCQkJCXsKCQkJCQlmbkNhbGxiYWNrKCBvU2V0dGluZ3MgKTsKCQkJCX0KCQkJfSApOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5Tb3J0aW5nQ2xhc3NlcwoJCSAqIFB1cnBvc2U6ICBTZXQgdGhlIHNvcnR0aW5nIGNsYXNzZXMgb24gdGhlIGhlYWRlcgoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqIE5vdGVzOiAgICBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGJTb3J0IGFuZCBiU29ydENsYXNzZXMgYXJlIGZhbHNlCgkJICovCgkJZnVuY3Rpb24gX2ZuU29ydGluZ0NsYXNzZXMoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgaSwgaUxlbiwgaiwgakxlbiwgaUZvdW5kOwoJCQl2YXIgYWFTb3J0LCBzQ2xhc3M7CgkJCXZhciBpQ29sdW1ucyA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCQl2YXIgb0NsYXNzZXMgPSBvU2V0dGluZ3Mub0NsYXNzZXM7CgkJCQoJCQlmb3IgKCBpPTAgOyBpPGlDb2x1bW5zIDsgaSsrICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJTb3J0YWJsZSApCgkJCQl7CgkJCQkJJChvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UaCkucmVtb3ZlQ2xhc3MoIG9DbGFzc2VzLnNTb3J0QXNjICsiICIrIG9DbGFzc2VzLnNTb3J0RGVzYyArCgkJCQkJCSIgIisgb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zU29ydGluZ0NsYXNzICk7CgkJCQl9CgkJCX0KCQkJCgkJCWlmICggb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkICE9PSBudWxsICkKCQkJewoJCQkJYWFTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkLmNvbmNhdCggb1NldHRpbmdzLmFhU29ydGluZyApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJYWFTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZy5zbGljZSgpOwoJCQl9CgkJCQoJCQkvKiBBcHBseSB0aGUgcmVxdWlyZWQgY2xhc3NlcyB0byB0aGUgaGVhZGVyICovCgkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQl7CgkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlNvcnRhYmxlICkKCQkJCXsKCQkJCQlzQ2xhc3MgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNTb3J0aW5nQ2xhc3M7CgkJCQkJaUZvdW5kID0gLTE7CgkJCQkJZm9yICggaj0wIDsgajxhYVNvcnQubGVuZ3RoIDsgaisrICkKCQkJCQl7CgkJCQkJCWlmICggYWFTb3J0W2pdWzBdID09IGkgKQoJCQkJCQl7CgkJCQkJCQlzQ2xhc3MgPSAoIGFhU29ydFtqXVsxXSA9PSAiYXNjIiApID8KCQkJCQkJCQlvQ2xhc3Nlcy5zU29ydEFzYyA6IG9DbGFzc2VzLnNTb3J0RGVzYzsKCQkJCQkJCWlGb3VuZCA9IGo7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQkkKG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0ublRoKS5hZGRDbGFzcyggc0NsYXNzICk7CgkJCQkJCgkJCQkJaWYgKCBvU2V0dGluZ3MuYkpVSSApCgkJCQkJewoJCQkJCQkvKiBqUXVlcnkgVUkgdXNlcyBleHRyYSBtYXJrdXAgKi8KCQkJCQkJdmFyIGpxU3BhbiA9ICQoInNwYW4iLCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UaCk7CgkJCQkJCWpxU3Bhbi5yZW1vdmVDbGFzcyhvQ2xhc3Nlcy5zU29ydEpVSUFzYyArIiAiKyBvQ2xhc3Nlcy5zU29ydEpVSURlc2MgKyIgIisgCgkJCQkJCQlvQ2xhc3Nlcy5zU29ydEpVSSArIiAiKyBvQ2xhc3Nlcy5zU29ydEpVSUFzY0FsbG93ZWQgKyIgIisgb0NsYXNzZXMuc1NvcnRKVUlEZXNjQWxsb3dlZCApOwoJCQkJCQkKCQkJCQkJdmFyIHNTcGFuQ2xhc3M7CgkJCQkJCWlmICggaUZvdW5kID09IC0xICkKCQkJCQkJewoJCQkJCQkgCXNTcGFuQ2xhc3MgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNTb3J0aW5nQ2xhc3NKVUk7CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiAoIGFhU29ydFtpRm91bmRdWzFdID09ICJhc2MiICkKCQkJCQkJewoJCQkJCQkJc1NwYW5DbGFzcyA9IG9DbGFzc2VzLnNTb3J0SlVJQXNjOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJc1NwYW5DbGFzcyA9IG9DbGFzc2VzLnNTb3J0SlVJRGVzYzsKCQkJCQkJfQoJCQkJCQkKCQkJCQkJanFTcGFuLmFkZENsYXNzKCBzU3BhbkNsYXNzICk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8qIE5vIHNvcnRpbmcgb24gdGhpcyBjb2x1bW4sIHNvIGFkZCB0aGUgYmFzZSBjbGFzcy4gVGhpcyB3aWxsIGhhdmUgYmVlbiBhc3NpZ25lZCBieQoJCQkJCSAqIF9mbkFkZENvbHVtbgoJCQkJCSAqLwoJCQkJCSQob1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGgpLmFkZENsYXNzKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNTb3J0aW5nQ2xhc3MgKTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogCgkJCSAqIEFwcGx5IHRoZSByZXF1aXJlZCBjbGFzc2VzIHRvIHRoZSB0YWJsZSBib2R5CgkJCSAqIE5vdGUgdGhhdCB0aGlzIGlzIGdpdmVuIGFzIGEgZmVhdHVyZSBzd2l0Y2ggc2luY2UgaXQgY2FuIHNpZ25pZmljYW50bHkgc2xvdyBkb3duIGEgc29ydAoJCQkgKiBvbiBsYXJnZSBkYXRhIHNldHMgKGFkZGluZyBhbmQgcmVtb3Zpbmcgb2YgY2xhc3NlcyBpcyBhbHdheXMgc2xvdyBhdCB0aGUgYmVzdCBvZiB0aW1lcy4uKQoJCQkgKiBGdXJ0aGVyIHRvIHRoaXMsIG5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgYWRtaXRhZGx5IGZhaXJseSB1Z2x5LiBJdCBjb3VsZCBiZSBtYWRlIGEgbG90IAoJCQkgKiBzaW1waWxlciB1c2luZyBqUXVlcnkgc2VsZWN0b3JzIGFuZCBhZGQvcmVtb3ZlQ2xhc3MsIGJ1dCB0aGF0IGlzIHNpZ25pZmljYW50bHkgc2xvd2VyCgkJCSAqIChvbiB0aGUgb3JkZXIgb2YgNSB0aW1lcyBzbG93ZXIpIC0gaGVuY2UgdGhlIGRpcmVjdCBET00gbWFuaXB1bGF0aW9uIGhlcmUuCgkJCSAqIE5vdGUgdGhhdCBmb3IgZGVmZXJlZCBkcmF3aW5nIHdlIGRvIHVzZSBqUXVlcnkgLSB0aGUgcmVhc29uIGJlaW5nIHRoYXQgdGFraW5nIHRoZSBmaXJzdAoJCQkgKiByb3cgZm91bmQgdG8gc2VlIGlmIHRoZSB3aG9sZSBjb2x1bW4gbmVlZHMgcHJvY2Vzc2VkIGNhbiBtaXNzIGNsYXNzZXMgc2luY2UgdGhlIGZpcnN0CgkJCSAqIGNvbHVtbiBtaWdodCBiZSBuZXcuCgkJCSAqLwoJCQlzQ2xhc3MgPSBvQ2xhc3Nlcy5zU29ydENvbHVtbjsKCQkJCgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCAmJiBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTb3J0Q2xhc3NlcyApCgkJCXsKCQkJCXZhciBuVGRzID0gX2ZuR2V0VGROb2Rlcyggb1NldHRpbmdzICk7CgoJCQkJLyogUmVtb3ZlIHRoZSBvbGQgY2xhc3NlcyAqLwoJCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJEZWZlclJlbmRlciApCgkJCQl7CgkJCQkJJChuVGRzKS5yZW1vdmVDbGFzcyhzQ2xhc3MrJzEgJytzQ2xhc3MrJzIgJytzQ2xhc3MrJzMnKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBuVGRzLmxlbmd0aCA+PSBpQ29sdW1ucyApCgkJCQl7CgkJCQkJZm9yICggaT0wIDsgaTxpQ29sdW1ucyA7IGkrKyApCgkJCQkJewoJCQkJCQlpZiAoIG5UZHNbaV0uY2xhc3NOYW1lLmluZGV4T2Yoc0NsYXNzKyIxIikgIT0gLTEgKQoJCQkJCQl7CgkJCQkJCQlmb3IgKCBqPTAsIGpMZW49KG5UZHMubGVuZ3RoL2lDb2x1bW5zKSA7IGo8akxlbiA7IGorKyApCgkJCQkJCQl7CgkJCQkJCQkJblRkc1soaUNvbHVtbnMqaikraV0uY2xhc3NOYW1lID0gCgkJCQkJCQkJCSQudHJpbSggblRkc1soaUNvbHVtbnMqaikraV0uY2xhc3NOYW1lLnJlcGxhY2UoIHNDbGFzcysiMSIsICIiICkgKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlIGlmICggblRkc1tpXS5jbGFzc05hbWUuaW5kZXhPZihzQ2xhc3MrIjIiKSAhPSAtMSApCgkJCQkJCXsKCQkJCQkJCWZvciAoIGo9MCwgakxlbj0oblRkcy5sZW5ndGgvaUNvbHVtbnMpIDsgajxqTGVuIDsgaisrICkKCQkJCQkJCXsKCQkJCQkJCQluVGRzWyhpQ29sdW1ucypqKStpXS5jbGFzc05hbWUgPSAKCQkJCQkJCQkJJC50cmltKCBuVGRzWyhpQ29sdW1ucypqKStpXS5jbGFzc05hbWUucmVwbGFjZSggc0NsYXNzKyIyIiwgIiIgKSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UgaWYgKCBuVGRzW2ldLmNsYXNzTmFtZS5pbmRleE9mKHNDbGFzcysiMyIpICE9IC0xICkKCQkJCQkJewoJCQkJCQkJZm9yICggaj0wLCBqTGVuPShuVGRzLmxlbmd0aC9pQ29sdW1ucykgOyBqPGpMZW4gOyBqKysgKQoJCQkJCQkJewoJCQkJCQkJCW5UZHNbKGlDb2x1bW5zKmopK2ldLmNsYXNzTmFtZSA9IAoJCQkJCQkJCQkkLnRyaW0oIG5UZHNbKGlDb2x1bW5zKmopK2ldLmNsYXNzTmFtZS5yZXBsYWNlKCAiICIrc0NsYXNzKyIzIiwgIiIgKSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBBZGQgdGhlIG5ldyBjbGFzc2VzIHRvIHRoZSB0YWJsZSAqLwoJCQkJdmFyIGlDbGFzcyA9IDEsIGlUYXJnZXRDb2w7CgkJCQlmb3IgKCBpPTAgOyBpPGFhU29ydC5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCWlUYXJnZXRDb2wgPSBwYXJzZUludCggYWFTb3J0W2ldWzBdLCAxMCApOwoJCQkJCWZvciAoIGo9MCwgakxlbj0oblRkcy5sZW5ndGgvaUNvbHVtbnMpIDsgajxqTGVuIDsgaisrICkKCQkJCQl7CgkJCQkJCW5UZHNbKGlDb2x1bW5zKmopK2lUYXJnZXRDb2xdLmNsYXNzTmFtZSArPSAiICIrc0NsYXNzK2lDbGFzczsKCQkJCQl9CgkJCQkJCgkJCQkJaWYgKCBpQ2xhc3MgPCAzICkKCQkJCQl7CgkJCQkJCWlDbGFzcysrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBGZWF0dXJlOiBQYWdpbmF0aW9uLiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgcGFnaW5nIGxvZ2ljIGlzIGRvbmUgaW4gCgkJICogX29FeHQub1BhZ2luYXRpb24KCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5GZWF0dXJlSHRtbFBhZ2luYXRlCgkJICogUHVycG9zZTogIEdlbmVyYXRlIHRoZSBub2RlIHJlcXVpcmVkIGZvciBkZWZhdWx0IHBhZ2luYXRpb24KCQkgKiBSZXR1cm5zOiAgbm9kZQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5GZWF0dXJlSHRtbFBhZ2luYXRlICggb1NldHRpbmdzICkKCQl7CgkJCWlmICggb1NldHRpbmdzLm9TY3JvbGwuYkluZmluaXRlICkKCQkJewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQkJCgkJCXZhciBuUGFnaW5hdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQluUGFnaW5hdGUuY2xhc3NOYW1lID0gb1NldHRpbmdzLm9DbGFzc2VzLnNQYWdpbmcrb1NldHRpbmdzLnNQYWdpbmF0aW9uVHlwZTsKCQkJCgkJCV9vRXh0Lm9QYWdpbmF0aW9uWyBvU2V0dGluZ3Muc1BhZ2luYXRpb25UeXBlIF0uZm5Jbml0KCBvU2V0dGluZ3MsIG5QYWdpbmF0ZSwgCgkJCQlmdW5jdGlvbiggb1NldHRpbmdzICkgewoJCQkJCV9mbkNhbGN1bGF0ZUVuZCggb1NldHRpbmdzICk7CgkJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCQl9CgkJCSk7CgkJCQoJCQkvKiBBZGQgYSBkcmF3IGNhbGxiYWNrIGZvciB0aGUgcGFnaW5hdGlvbiBvbiBmaXJzdCBpbnN0YW5jZSwgdG8gdXBkYXRlIHRoZSBwYWdpbmcgZGlzcGxheSAqLwoJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuYWFuRmVhdHVyZXMucCA9PSAidW5kZWZpbmVkIiApCgkJCXsKCQkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCQkJImZuIjogZnVuY3Rpb24oIG9TZXR0aW5ncyApIHsKCQkJCQkJX29FeHQub1BhZ2luYXRpb25bIG9TZXR0aW5ncy5zUGFnaW5hdGlvblR5cGUgXS5mblVwZGF0ZSggb1NldHRpbmdzLCBmdW5jdGlvbiggb1NldHRpbmdzICkgewoJCQkJCQkJX2ZuQ2FsY3VsYXRlRW5kKCBvU2V0dGluZ3MgKTsKCQkJCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQkJCQl9ICk7CgkJCQkJfSwKCQkJCQkic05hbWUiOiAicGFnaW5hdGlvbiIKCQkJCX0gKTsKCQkJfQoJCQlyZXR1cm4gblBhZ2luYXRlOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5QYWdlQ2hhbmdlCgkJICogUHVycG9zZTogIEFsdGVyIHRoZSBkaXNwbGF5IHNldHRpbmdzIHRvIGNoYW5nZSB0aGUgcGFnZQoJCSAqIFJldHVybnM6ICBib29sOnRydWUgLSBwYWdlIGhhcyBjaGFuZ2VkLCBmYWxzZSAtIG5vIGNoYW5nZSAobm8gZWZmZWN0KSBlZyAnZmlyc3QnIG9uIHBhZ2UgMQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgc3RyaW5nOnNBY3Rpb24gLSBwYWdpbmcgYWN0aW9uIHRvIHRha2U6ICJmaXJzdCIsICJwcmV2aW91cyIsICJuZXh0IiBvciAibGFzdCIKCQkgKi8KCQlmdW5jdGlvbiBfZm5QYWdlQ2hhbmdlICggb1NldHRpbmdzLCBzQWN0aW9uICkKCQl7CgkJCXZhciBpT2xkU3RhcnQgPSBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQ7CgkJCQoJCQlpZiAoIHNBY3Rpb24gPT0gImZpcnN0IiApCgkJCXsKCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IDA7CgkJCX0KCQkJZWxzZSBpZiAoIHNBY3Rpb24gPT0gInByZXZpb3VzIiApCgkJCXsKCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGg+PTAgPwoJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCAtIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGggOgoJCQkJCTA7CgkJCQkKCQkJCS8qIENvcnJlY3QgZm9yIHVuZGVycnVuICovCgkJCQlpZiAoIG9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA8IDAgKQoJCQkJewoJCQkJICBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCQkJfQoJCQl9CgkJCWVsc2UgaWYgKCBzQWN0aW9uID09ICJuZXh0IiApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCA+PSAwICkKCQkJCXsKCQkJCQkvKiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBvdmVyIHJ1bm5pbmcgdGhlIGRpc3BsYXkgYXJyYXkgKi8KCQkJCQlpZiAoIG9TZXR0aW5ncy5faURpc3BsYXlTdGFydCArIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGggPCBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpICkKCQkJCQl7CgkJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCArPSBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCQkJfQoJCQl9CgkJCWVsc2UgaWYgKCBzQWN0aW9uID09ICJsYXN0IiApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCA+PSAwICkKCQkJCXsKCQkJCQl2YXIgaVBhZ2VzID0gcGFyc2VJbnQoIChvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpLTEpIC8gb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCwgMTAgKSArIDE7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gKGlQYWdlcy0xKSAqIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGg7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gMDsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCV9mbkxvZyggb1NldHRpbmdzLCAwLCAiVW5rbm93biBwYWdpbmcgYWN0aW9uOiAiK3NBY3Rpb24gKTsKCQkJfQoJCQkKCQkJcmV0dXJuIGlPbGRTdGFydCAhPSBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQ7CgkJfQoJCQoJCQoJCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEZlYXR1cmU6IEhUTUwgaW5mbwoJCSAqLwoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkZlYXR1cmVIdG1sSW5mbwoJCSAqIFB1cnBvc2U6ICBHZW5lcmF0ZSB0aGUgbm9kZSByZXF1aXJlZCBmb3IgdGhlIGluZm8gZGlzcGxheQoJCSAqIFJldHVybnM6ICBub2RlCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sSW5mbyAoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgbkluZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQluSW5mby5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc0luZm87CgkJCQoJCQkvKiBBY3Rpb25zIHRoYXQgYXJlIHRvIGJlIHRha2VuIG9uY2Ugb25seSBmb3IgdGhpcyBmZWF0dXJlICovCgkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5pID09ICJ1bmRlZmluZWQiICkKCQkJewoJCQkJLyogQWRkIGRyYXcgY2FsbGJhY2sgKi8KCQkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCQkJImZuIjogX2ZuVXBkYXRlSW5mbywKCQkJCQkic05hbWUiOiAiaW5mb3JtYXRpb24iCgkJCQl9ICk7CgkJCQkKCQkJCS8qIEFkZCBpZCAqLwoJCQkJaWYgKCBvU2V0dGluZ3Muc1RhYmxlSWQgIT09ICcnICkKCQkJCXsKCQkJCQluSW5mby5zZXRBdHRyaWJ1dGUoICdpZCcsIG9TZXR0aW5ncy5zVGFibGVJZCsnX2luZm8nICk7CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiBuSW5mbzsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuVXBkYXRlSW5mbwoJCSAqIFB1cnBvc2U6ICBVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIGluIHRoZSBkaXNwbGF5CgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuVXBkYXRlSW5mbyAoIG9TZXR0aW5ncyApCgkJewoJCQkvKiBTaG93IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWJsZSAqLwoJCQlpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJJbmZvIHx8IG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5pLmxlbmd0aCA9PT0gMCApCgkJCXsKCQkJCXJldHVybjsKCQkJfQoJCQkKCQkJdmFyCgkJCQlpU3RhcnQgPSBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQrMSwgaUVuZCA9IG9TZXR0aW5ncy5mbkRpc3BsYXlFbmQoKSwKCQkJCWlNYXggPSBvU2V0dGluZ3MuZm5SZWNvcmRzVG90YWwoKSwgaVRvdGFsID0gb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSwKCQkJCXNTdGFydCA9IG9TZXR0aW5ncy5mbkZvcm1hdE51bWJlciggaVN0YXJ0ICksIHNFbmQgPSBvU2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIoIGlFbmQgKSwKCQkJCXNNYXggPSBvU2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIoIGlNYXggKSwgc1RvdGFsID0gb1NldHRpbmdzLmZuRm9ybWF0TnVtYmVyKCBpVG90YWwgKSwKCQkJCXNPdXQ7CgkJCQoJCQkvKiBXaGVuIGluZmluaXRlIHNjcm9sbGluZywgd2UgYXJlIGFsd2F5cyBzdGFydGluZyBhdCAxLiBfaURpc3BsYXlTdGFydCBpcyB1c2VkIG9ubHkKCQkJICogaW50ZXJuYWxseQoJCQkgKi8KCQkJaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5iSW5maW5pdGUgKQoJCQl7CgkJCQlzU3RhcnQgPSBvU2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIoIDEgKTsKCQkJfQoJCQkKCQkJaWYgKCBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpID09PSAwICYmIAoJCQkJICAgb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSA9PSBvU2V0dGluZ3MuZm5SZWNvcmRzVG90YWwoKSApCgkJCXsKCQkJCS8qIEVtcHR5IHJlY29yZCBzZXQgKi8KCQkJCXNPdXQgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNJbmZvRW1wdHkrIG9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0luZm9Qb3N0Rml4OwoJCQl9CgkJCWVsc2UgaWYgKCBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpID09PSAwICkKCQkJewoJCQkJLyogUm1wdHkgcmVjb3JkIHNldCBhZnRlciBmaWx0ZXJpbmcgKi8KCQkJCXNPdXQgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNJbmZvRW1wdHkgKycgJysgCgkJCQkJb1NldHRpbmdzLm9MYW5ndWFnZS5zSW5mb0ZpbHRlcmVkLnJlcGxhY2UoJ19NQVhfJywgc01heCkrCgkJCQkJCW9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0luZm9Qb3N0Rml4OwoJCQl9CgkJCWVsc2UgaWYgKCBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpID09IG9TZXR0aW5ncy5mblJlY29yZHNUb3RhbCgpICkKCQkJewoJCQkJLyogTm9ybWFsIHJlY29yZCBzZXQgKi8KCQkJCXNPdXQgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNJbmZvLgoJCQkJCQlyZXBsYWNlKCdfU1RBUlRfJywgc1N0YXJ0KS4KCQkJCQkJcmVwbGFjZSgnX0VORF8nLCAgIHNFbmQpLgoJCQkJCQlyZXBsYWNlKCdfVE9UQUxfJywgc1RvdGFsKSsgCgkJCQkJb1NldHRpbmdzLm9MYW5ndWFnZS5zSW5mb1Bvc3RGaXg7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvKiBSZWNvcmQgc2V0IGFmdGVyIGZpbHRlcmluZyAqLwoJCQkJc091dCA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0luZm8uCgkJCQkJCXJlcGxhY2UoJ19TVEFSVF8nLCBzU3RhcnQpLgoJCQkJCQlyZXBsYWNlKCdfRU5EXycsICAgc0VuZCkuCgkJCQkJCXJlcGxhY2UoJ19UT1RBTF8nLCBzVG90YWwpICsnICcrIAoJCQkJCW9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0luZm9GaWx0ZXJlZC5yZXBsYWNlKCdfTUFYXycsIAoJCQkJCQlvU2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIob1NldHRpbmdzLmZuUmVjb3Jkc1RvdGFsKCkpKSsgCgkJCQkJb1NldHRpbmdzLm9MYW5ndWFnZS5zSW5mb1Bvc3RGaXg7CgkJCX0KCQkJCgkJCWlmICggb1NldHRpbmdzLm9MYW5ndWFnZS5mbkluZm9DYWxsYmFjayAhPT0gbnVsbCApCgkJCXsKCQkJCXNPdXQgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLmZuSW5mb0NhbGxiYWNrKCBvU2V0dGluZ3MsIGlTdGFydCwgaUVuZCwgaU1heCwgaVRvdGFsLCBzT3V0ICk7CgkJCX0KCQkJCgkJCXZhciBuID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzLmk7CgkJCWZvciAoIHZhciBpPTAsIGlMZW49bi5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQkkKG5baV0pLmh0bWwoIHNPdXQgKTsKCQkJfQoJCX0KCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEZlYXR1cmU6IExlbmd0aCBjaGFuZ2UKCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5GZWF0dXJlSHRtbExlbmd0aAoJCSAqIFB1cnBvc2U6ICBHZW5lcmF0ZSB0aGUgbm9kZSByZXF1aXJlZCBmb3IgdXNlciBkaXNwbGF5IGxlbmd0aCBjaGFuZ2luZwoJCSAqIFJldHVybnM6ICBub2RlCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sTGVuZ3RoICggb1NldHRpbmdzICkKCQl7CgkJCWlmICggb1NldHRpbmdzLm9TY3JvbGwuYkluZmluaXRlICkKCQkJewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQkJCgkJCS8qIFRoaXMgY2FuIGJlIG92ZXJydWxlZCBieSBub3QgdXNpbmcgdGhlIF9NRU5VXyB2YXIvbWFjcm8gaW4gdGhlIGxhbmd1YWdlIHZhcmlhYmxlICovCgkJCXZhciBzTmFtZSA9IChvU2V0dGluZ3Muc1RhYmxlSWQgPT09ICIiKSA/ICIiIDogJ25hbWU9Iicrb1NldHRpbmdzLnNUYWJsZUlkKydfbGVuZ3RoIic7CgkJCXZhciBzU3RkTWVudSA9ICc8c2VsZWN0IHNpemU9IjEiICcrc05hbWUrJz4nOwoJCQl2YXIgaSwgaUxlbjsKCQkJCgkJCWlmICggb1NldHRpbmdzLmFMZW5ndGhNZW51Lmxlbmd0aCA9PSAyICYmIHR5cGVvZiBvU2V0dGluZ3MuYUxlbmd0aE1lbnVbMF0gPT0gJ29iamVjdCcgJiYgCgkJCQkJdHlwZW9mIG9TZXR0aW5ncy5hTGVuZ3RoTWVudVsxXSA9PSAnb2JqZWN0JyApCgkJCXsKCQkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYUxlbmd0aE1lbnVbMF0ubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlzU3RkTWVudSArPSAnPG9wdGlvbiB2YWx1ZT0iJytvU2V0dGluZ3MuYUxlbmd0aE1lbnVbMF1baV0rJyI+JysKCQkJCQkJb1NldHRpbmdzLmFMZW5ndGhNZW51WzFdW2ldKyc8XC9vcHRpb24+JzsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYUxlbmd0aE1lbnUubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlzU3RkTWVudSArPSAnPG9wdGlvbiB2YWx1ZT0iJytvU2V0dGluZ3MuYUxlbmd0aE1lbnVbaV0rJyI+JysKCQkJCQkJb1NldHRpbmdzLmFMZW5ndGhNZW51W2ldKyc8XC9vcHRpb24+JzsKCQkJCX0KCQkJfQoJCQlzU3RkTWVudSArPSAnPFwvc2VsZWN0Pic7CgkJCQoJCQl2YXIgbkxlbmd0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7CgkJCWlmICggb1NldHRpbmdzLnNUYWJsZUlkICE9PSAnJyAmJiB0eXBlb2Ygb1NldHRpbmdzLmFhbkZlYXR1cmVzLmwgPT0gInVuZGVmaW5lZCIgKQoJCQl7CgkJCQluTGVuZ3RoLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfbGVuZ3RoJyApOwoJCQl9CgkJCW5MZW5ndGguY2xhc3NOYW1lID0gb1NldHRpbmdzLm9DbGFzc2VzLnNMZW5ndGg7CgkJCW5MZW5ndGguaW5uZXJIVE1MID0gJzxsYWJlbD4nK29TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0xlbmd0aE1lbnUucmVwbGFjZSggJ19NRU5VXycsIHNTdGRNZW51ICkrJzxcL2xhYmVsPic7CgkJCQoJCQkvKgoJCQkgKiBTZXQgdGhlIGxlbmd0aCB0byB0aGUgY3VycmVudCBkaXNwbGF5IGxlbmd0aCAtIHRoYW5rcyB0byBBbmRyZWEgUGF2bG92aWMgZm9yIHRoaXMgZml4LAoJCQkgKiBhbmQgU3RlZmFuIFNrb3BuaWsgZm9yIGZpeGluZyB0aGUgZml4IQoJCQkgKi8KCQkJJCgnc2VsZWN0IG9wdGlvblt2YWx1ZT0iJytvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKyciXScsbkxlbmd0aCkuYXR0cigic2VsZWN0ZWQiLHRydWUpOwoJCQkKCQkJJCgnc2VsZWN0Jywgbkxlbmd0aCkuYmluZCggJ2NoYW5nZS5EVCcsIGZ1bmN0aW9uKGUpIHsKCQkJCXZhciBpVmFsID0gJCh0aGlzKS52YWwoKTsKCQkJCQoJCQkJLyogVXBkYXRlIGFsbCBvdGhlciBsZW5ndGggb3B0aW9ucyBmb3IgdGhlIG5ldyBkaXNwbGF5ICovCgkJCQl2YXIgbiA9IG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5sOwoJCQkJZm9yICggaT0wLCBpTGVuPW4ubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIG5baV0gIT0gdGhpcy5wYXJlbnROb2RlICkKCQkJCQl7CgkJCQkJCSQoJ3NlbGVjdCcsIG5baV0pLnZhbCggaVZhbCApOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJLyogUmVkcmF3IHRoZSB0YWJsZSAqLwoJCQkJb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCA9IHBhcnNlSW50KGlWYWwsIDEwKTsKCQkJCV9mbkNhbGN1bGF0ZUVuZCggb1NldHRpbmdzICk7CgkJCQkKCQkJCS8qIElmIHdlIGhhdmUgc3BhY2UgdG8gc2hvdyBleHRyYSByb3dzIChiYWNraW5nIHVwIGZyb20gdGhlIGVuZCBwb2ludCAtIHRoZW4gZG8gc28gKi8KCQkJCWlmICggb1NldHRpbmdzLmZuRGlzcGxheUVuZCgpID09IG9TZXR0aW5ncy5mblJlY29yZHNEaXNwbGF5KCkgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IG9TZXR0aW5ncy5mbkRpc3BsYXlFbmQoKSAtIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGg7CgkJCQkJaWYgKCBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPCAwICkKCQkJCQl7CgkJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IDA7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQlpZiAoIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGggPT0gLTEgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IDA7CgkJCQl9CgkJCQkKCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQl9ICk7CgkJCQoJCQlyZXR1cm4gbkxlbmd0aDsKCQl9CgkJCgkJCgkJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBGZWF0dXJlOiBQcm9jZXNzaW5nIGluY2lkYXRvcgoJCSAqLwoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkZlYXR1cmVIdG1sUHJvY2Vzc2luZwoJCSAqIFB1cnBvc2U6ICBHZW5lcmF0ZSB0aGUgbm9kZSByZXF1aXJlZCBmb3IgdGhlIHByb2Nlc3Npbmcgbm9kZQoJCSAqIFJldHVybnM6ICBub2RlCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sUHJvY2Vzc2luZyAoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgblByb2Nlc3NpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQkKCQkJaWYgKCBvU2V0dGluZ3Muc1RhYmxlSWQgIT09ICcnICYmIHR5cGVvZiBvU2V0dGluZ3MuYWFuRmVhdHVyZXMuciA9PSAidW5kZWZpbmVkIiApCgkJCXsKCQkJCW5Qcm9jZXNzaW5nLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfcHJvY2Vzc2luZycgKTsKCQkJfQoJCQluUHJvY2Vzc2luZy5pbm5lckhUTUwgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNQcm9jZXNzaW5nOwoJCQluUHJvY2Vzc2luZy5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1Byb2Nlc3Npbmc7CgkJCW9TZXR0aW5ncy5uVGFibGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIG5Qcm9jZXNzaW5nLCBvU2V0dGluZ3MublRhYmxlICk7CgkJCQoJCQlyZXR1cm4gblByb2Nlc3Npbmc7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mblByb2Nlc3NpbmdEaXNwbGF5CgkJICogUHVycG9zZTogIERpc3BsYXkgb3IgaGlkZSB0aGUgcHJvY2Vzc2luZyBpbmRpY2F0b3IKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgYm9vbDoKCQkgKiAgIHRydWUgLSBzaG93IHRoZSBwcm9jZXNzaW5nIGluZGljYXRvcgoJCSAqICAgZmFsc2UgLSBkb24ndCBzaG93CgkJICovCgkJZnVuY3Rpb24gX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkgKCBvU2V0dGluZ3MsIGJTaG93ICkKCQl7CgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iUHJvY2Vzc2luZyApCgkJCXsKCQkJCXZhciBhbiA9IG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5yOwoJCQkJZm9yICggdmFyIGk9MCwgaUxlbj1hbi5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWFuW2ldLnN0eWxlLnZpc2liaWxpdHkgPSBiU2hvdyA/ICJ2aXNpYmxlIiA6ICJoaWRkZW4iOwoJCQkJfQoJCQl9CgkJfQoJCQoJCQoJCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIFN1cHBvcnQgZnVuY3Rpb25zCgkJICovCgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXgKCQkgKiBQdXJwb3NlOiAgQ292ZXJ0IHRoZSBpbmRleCBvZiBhIHZpc2libGUgY29sdW1uIHRvIHRoZSBpbmRleCBpbiB0aGUgZGF0YSBhcnJheSAodGFrZSBhY2NvdW50CgkJICogICBvZiBoaWRkZW4gY29sdW1ucykKCQkgKiBSZXR1cm5zOiAgaW50OmkgLSB0aGUgZGF0YSBpbmRleAoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5WaXNpYmxlVG9Db2x1bW5JbmRleCggb1NldHRpbmdzLCBpTWF0Y2ggKQoJCXsKCQkJdmFyIGlDb2x1bW4gPSAtMTsKCQkJCgkJCWZvciAoIHZhciBpPTAgOyBpPG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJWaXNpYmxlID09PSB0cnVlICkKCQkJCXsKCQkJCQlpQ29sdW1uKys7CgkJCQl9CgkJCQkKCQkJCWlmICggaUNvbHVtbiA9PSBpTWF0Y2ggKQoJCQkJewoJCQkJCXJldHVybiBpOwoJCQkJfQoJCQl9CgkJCQoJCQlyZXR1cm4gbnVsbDsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUKCQkgKiBQdXJwb3NlOiAgQ292ZXJ0IHRoZSBpbmRleCBvZiBhbiBpbmRleCBpbiB0aGUgZGF0YSBhcnJheSBhbmQgY29udmVydCBpdCB0byB0aGUgdmlzaWJsZQoJCSAqICAgY29sdW1uIGluZGV4ICh0YWtlIGFjY291bnQgb2YgaGlkZGVuIGNvbHVtbnMpCgkJICogUmV0dXJuczogIGludDppIC0gdGhlIGRhdGEgaW5kZXgKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIG9TZXR0aW5ncywgaU1hdGNoICkKCQl7CgkJCXZhciBpVmlzaWJsZSA9IC0xOwoJCQlmb3IgKCB2YXIgaT0wIDsgaTxvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGkrKyApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iVmlzaWJsZSA9PT0gdHJ1ZSApCgkJCQl7CgkJCQkJaVZpc2libGUrKzsKCQkJCX0KCQkJCQoJCQkJaWYgKCBpID09IGlNYXRjaCApCgkJCQl7CgkJCQkJcmV0dXJuIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlZpc2libGUgPT09IHRydWUgPyBpVmlzaWJsZSA6IG51bGw7CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiBudWxsOwoJCX0KCQkKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5Ob2RlVG9EYXRhSW5kZXgKCQkgKiBQdXJwb3NlOiAgVGFrZSBhIFRSIGVsZW1lbnQgYW5kIGNvbnZlcnQgaXQgdG8gYW4gaW5kZXggaW4gYW9EYXRhCgkJICogUmV0dXJuczogIGludDppIC0gaW5kZXggaWYgZm91bmQsIG51bGwgaWYgbm90CgkJICogSW5wdXRzOiAgIG9iamVjdDpzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgbm9kZTpuIC0gdGhlIFRSIGVsZW1lbnQgdG8gZmluZAoJCSAqLwoJCWZ1bmN0aW9uIF9mbk5vZGVUb0RhdGFJbmRleCggcywgbiApCgkJewoJCQl2YXIgaSwgaUxlbjsKCQkJCgkJCS8qIE9wdGltaXNhdGlvbiAtIHNlZSBpZiB0aGUgbm9kZXMgd2hpY2ggYXJlIGN1cnJlbnRseSB2aXNpYmxlIG1hdGNoLCBzaW5jZSB0aGF0IGlzCgkJCSAqIHRoZSBtb3N0IGxpa2VseSBub2RlIHRvIGJlIGFza2VkIGZvciAoYSBzZWxlY3RvciBvciBldmVudCBmb3IgZXhhbXBsZSkKCQkJICovCgkJCWZvciAoIGk9cy5faURpc3BsYXlTdGFydCwgaUxlbj1zLl9pRGlzcGxheUVuZCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlmICggcy5hb0RhdGFbIHMuYWlEaXNwbGF5W2ldIF0ublRyID09IG4gKQoJCQkJewoJCQkJCXJldHVybiBzLmFpRGlzcGxheVtpXTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogT3RoZXJ3aXNlIHdlIGFyZSBpbiBmb3IgYSBzbG9nIHRocm91Z2ggdGhlIHdob2xlIGRhdGEgY2FjaGUgKi8KCQkJZm9yICggaT0wLCBpTGVuPXMuYW9EYXRhLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlmICggcy5hb0RhdGFbaV0ublRyID09IG4gKQoJCQkJewoJCQkJCXJldHVybiBpOwoJCQkJfQoJCQl9CgkJCXJldHVybiBudWxsOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5WaXNibGVDb2x1bW5zCgkJICogUHVycG9zZTogIEdldCB0aGUgbnVtYmVyIG9mIHZpc2libGUgY29sdW1ucwoJCSAqIFJldHVybnM6ICBpbnQ6aSAtIHRoZSBudW1iZXIgb2YgdmlzaWJsZSBjb2x1bW5zCgkJICogSW5wdXRzOiAgIG9iamVjdDpvUyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuVmlzYmxlQ29sdW1ucyggb1MgKQoJCXsKCQkJdmFyIGlWaXMgPSAwOwoJCQlmb3IgKCB2YXIgaT0wIDsgaTxvUy5hb0NvbHVtbnMubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJaWYgKCBvUy5hb0NvbHVtbnNbaV0uYlZpc2libGUgPT09IHRydWUgKQoJCQkJewoJCQkJCWlWaXMrKzsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gaVZpczsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQ2FsY3VsYXRlRW5kCgkJICogUHVycG9zZTogIFJjYWxjdWxhdGUgdGhlIGVuZCBwb2ludCBiYXNlZCBvbiB0aGUgc3RhcnQgcG9pbnQKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApCgkJewoJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlBhZ2luYXRlID09PSBmYWxzZSApCgkJCXsKCQkJCW9TZXR0aW5ncy5faURpc3BsYXlFbmQgPSBvU2V0dGluZ3MuYWlEaXNwbGF5Lmxlbmd0aDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qIFNldCB0aGUgZW5kIHBvaW50IG9mIHRoZSBkaXNwbGF5IC0gYmFzZWQgb24gaG93IG1hbnkgZWxlbWVudHMgdGhlcmUgYXJlCgkJCQkgKiBzdGlsbCB0byBkaXNwbGF5CgkJCQkgKi8KCQkJCWlmICggb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ICsgb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCA+IG9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoIHx8CgkJCQkJICAgb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCA9PSAtMSApCgkJCQl7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheUVuZCA9IG9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlFbmQgPSBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgKyBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoOwoJCQkJfQoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkNvbnZlcnRUb1dpZHRoCgkJICogUHVycG9zZTogIENvbnZlcnQgYSBDU1MgdW5pdCB3aWR0aCB0byBwaXhlbHMgKGUuZy4gMmVtKQoJCSAqIFJldHVybnM6ICBpbnQ6aVdpZHRoIC0gd2lkdGggaW4gcGl4ZWxzCgkJICogSW5wdXRzOiAgIHN0cmluZzpzV2lkdGggLSB3aWR0aCB0byBiZSBjb252ZXJ0ZWQKCQkgKiAgICAgICAgICAgbm9kZTpuUGFyZW50IC0gcGFyZW50IHRvIGdldCB0aGUgd2l0aCBmb3IgKHJlcXVpcmVkIGZvcgoJCSAqICAgICAgICAgICAgIHJlbGF0aXZlIHdpZHRocykgLSBvcHRpb25hbAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkNvbnZlcnRUb1dpZHRoICggc1dpZHRoLCBuUGFyZW50ICkKCQl7CgkJCWlmICggIXNXaWR0aCB8fCBzV2lkdGggPT09IG51bGwgfHwgc1dpZHRoID09PSAnJyApCgkJCXsKCQkJCXJldHVybiAwOwoJCQl9CgkJCQoJCQlpZiAoIHR5cGVvZiBuUGFyZW50ID09ICJ1bmRlZmluZWQiICkKCQkJewoJCQkJblBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF07CgkJCX0KCQkJCgkJCXZhciBpV2lkdGg7CgkJCXZhciBuVG1wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKCQkJblRtcC5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBzV2lkdGggKTsKCQkJCgkJCW5QYXJlbnQuYXBwZW5kQ2hpbGQoIG5UbXAgKTsKCQkJaVdpZHRoID0gblRtcC5vZmZzZXRXaWR0aDsKCQkJblBhcmVudC5yZW1vdmVDaGlsZCggblRtcCApOwoJCQkKCQkJcmV0dXJuICggaVdpZHRoICk7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkNhbGN1bGF0ZUNvbHVtbldpZHRocwoJCSAqIFB1cnBvc2U6ICBDYWxjdWxhdGUgdGhlIHdpZHRoIG9mIGNvbHVtbnMgZm9yIHRoZSB0YWJsZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkNhbGN1bGF0ZUNvbHVtbldpZHRocyAoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgaVRhYmxlV2lkdGggPSBvU2V0dGluZ3MublRhYmxlLm9mZnNldFdpZHRoOwoJCQl2YXIgaVVzZXJJbnB1dHMgPSAwOwoJCQl2YXIgaVRtcFdpZHRoOwoJCQl2YXIgaVZpc2libGVDb2x1bW5zID0gMDsKCQkJdmFyIGlDb2x1bXMgPSBvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aDsKCQkJdmFyIGksIGlJbmRleCwgaUNvcnJlY3RvciwgaVdpZHRoOwoJCQl2YXIgb0hlYWRlcnMgPSAkKCd0aCcsIG9TZXR0aW5ncy5uVEhlYWQpOwoJCQkKCQkJLyogQ29udmVydCBhbnkgdXNlciBpbnB1dCBzaXplcyBpbnRvIHBpeGVsIHNpemVzICovCgkJCWZvciAoIGk9MCA7IGk8aUNvbHVtcyA7IGkrKyApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iVmlzaWJsZSApCgkJCQl7CgkJCQkJaVZpc2libGVDb2x1bW5zKys7CgkJCQkJCgkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNXaWR0aCAhPT0gbnVsbCApCgkJCQkJewoJCQkJCQlpVG1wV2lkdGggPSBfZm5Db252ZXJ0VG9XaWR0aCggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zV2lkdGhPcmlnLCAKCQkJCQkJCW9TZXR0aW5ncy5uVGFibGUucGFyZW50Tm9kZSApOwoJCQkJCQlpZiAoIGlUbXBXaWR0aCAhPT0gbnVsbCApCgkJCQkJCXsKCQkJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1dpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlUbXBXaWR0aCApOwoJCQkJCQl9CgkJCQkJCQkKCQkJCQkJaVVzZXJJbnB1dHMrKzsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCgkJCS8qIElmIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgRE9NIGVxdWFscyB0aGUgbnVtYmVyIHRoYXQgd2UgaGF2ZSB0byBwcm9jZXNzIGluIAoJCQkgKiBEYXRhVGFibGVzLCB0aGVuIHdlIGNhbiB1c2UgdGhlIG9mZnNldHMgdGhhdCBhcmUgY3JlYXRlZCBieSB0aGUgd2ViLWJyb3dzZXIuIE5vIGN1c3RvbSAKCQkJICogc2l6ZXMgY2FuIGJlIHNldCBpbiBvcmRlciBmb3IgdGhpcyB0byBoYXBwZW4sIG5vciBzY3JvbGxpbmcgdXNlZAoJCQkgKi8KCQkJaWYgKCBpQ29sdW1zID09IG9IZWFkZXJzLmxlbmd0aCAmJiBpVXNlcklucHV0cyA9PT0gMCAmJiBpVmlzaWJsZUNvbHVtbnMgPT0gaUNvbHVtcyAmJgoJCQkJb1NldHRpbmdzLm9TY3JvbGwuc1ggPT09ICIiICYmIG9TZXR0aW5ncy5vU2Nyb2xsLnNZID09PSAiIiApCgkJCXsKCQkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCWlUbXBXaWR0aCA9ICQob0hlYWRlcnNbaV0pLndpZHRoKCk7CgkJCQkJaWYgKCBpVG1wV2lkdGggIT09IG51bGwgKQoJCQkJCXsKCQkJCQkJb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zV2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaVRtcFdpZHRoICk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogT3RoZXJ3aXNlIHdlIGFyZSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWUgY2FsY3VsYXRpb25zIHRvIGdldCB0aGUgd2lkdGggb2YgZWFjaCBjb2x1bW4uCgkJCQkgKiBDb25zdHJ1Y3QgYSAxIHJvdyB0YWJsZSB3aXRoIHRoZSB3aWRlc3Qgbm9kZSBpbiB0aGUgZGF0YSwgYW5kIGFueSB1c2VyIGRlZmluZWQgd2lkdGhzLAoJCQkJICogdGhlbiBpbnNlcnQgaXQgaW50byB0aGUgRE9NIGFuZCBhbGxvdyB0aGUgYnJvd3NlciB0byBkbyBhbGwgdGhlIGhhcmQgd29yayBvZgoJCQkJICogY2FsY3VsYXRpbmcgdGFibGUgd2lkdGhzLgoJCQkJICovCgkJCQl2YXIKCQkJCQluQ2FsY1RtcCA9IG9TZXR0aW5ncy5uVGFibGUuY2xvbmVOb2RlKCBmYWxzZSApLAoJCQkJCW5UaGVhZENsb25lID0gb1NldHRpbmdzLm5USGVhZC5jbG9uZU5vZGUodHJ1ZSksCgkJCQkJbkJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAndGJvZHknICksCgkJCQkJblRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3RyJyApLAoJCQkJCW5EaXZTaXppbmc7CgkJCQkKCQkJCW5DYWxjVG1wLnJlbW92ZUF0dHJpYnV0ZSggImlkIiApOwoJCQkJbkNhbGNUbXAuYXBwZW5kQ2hpbGQoIG5UaGVhZENsb25lICk7CgkJCQlpZiAoIG9TZXR0aW5ncy5uVEZvb3QgIT09IG51bGwgKQoJCQkJewoJCQkJCW5DYWxjVG1wLmFwcGVuZENoaWxkKCBvU2V0dGluZ3MublRGb290LmNsb25lTm9kZSh0cnVlKSApOwoJCQkJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24obikgewoJCQkJCQluLnN0eWxlLndpZHRoID0gIiI7CgkJCQkJfSwgbkNhbGNUbXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJykgKTsKCQkJCX0KCQkJCQoJCQkJbkNhbGNUbXAuYXBwZW5kQ2hpbGQoIG5Cb2R5ICk7CgkJCQluQm9keS5hcHBlbmRDaGlsZCggblRyICk7CgkJCQkKCQkJCS8qIFJlbW92ZSBhbnkgc2l6aW5nIHRoYXQgd2FzIHByZXZpb3VzbHkgYXBwbGllZCBieSB0aGUgc3R5bGVzICovCgkJCQl2YXIganFDb2xTaXppbmcgPSAkKCd0aGVhZCB0aCcsIG5DYWxjVG1wKTsKCQkJCWlmICgganFDb2xTaXppbmcubGVuZ3RoID09PSAwICkKCQkJCXsKCQkJCQlqcUNvbFNpemluZyA9ICQoJ3Rib2R5IHRyOmVxKDApPnRkJywgbkNhbGNUbXApOwoJCQkJfQoKCQkJCS8qIEFwcGx5IGN1c3RvbSBzaXppbmcgdG8gdGhlIGNsb25lZCBoZWFkZXIgKi8KCQkJCXZhciBuVGhzID0gX2ZuR2V0VW5pcXVlVGhzKCBvU2V0dGluZ3MsIG5UaGVhZENsb25lICk7CgkJCQlpQ29ycmVjdG9yID0gMDsKCQkJCWZvciAoIGk9MCA7IGk8aUNvbHVtcyA7IGkrKyApCgkJCQl7CgkJCQkJdmFyIG9Db2x1bW4gPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldOwoJCQkJCWlmICggb0NvbHVtbi5iVmlzaWJsZSAmJiBvQ29sdW1uLnNXaWR0aE9yaWcgIT09IG51bGwgJiYgb0NvbHVtbi5zV2lkdGhPcmlnICE9PSAiIiApCgkJCQkJewoJCQkJCQluVGhzW2ktaUNvcnJlY3Rvcl0uc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0Nzcyggb0NvbHVtbi5zV2lkdGhPcmlnICk7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKCBvQ29sdW1uLmJWaXNpYmxlICkKCQkJCQl7CgkJCQkJCW5UaHNbaS1pQ29ycmVjdG9yXS5zdHlsZS53aWR0aCA9ICIiOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlpQ29ycmVjdG9yKys7CgkJCQkJfQoJCQkJfQoKCQkJCS8qIEZpbmQgdGhlIGJpZ2dlc3QgdGQgZm9yIGVhY2ggY29sdW1uIGFuZCBwdXQgaXQgaW50byB0aGUgdGFibGUgKi8KCQkJCWZvciAoIGk9MCA7IGk8aUNvbHVtcyA7IGkrKyApCgkJCQl7CgkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJWaXNpYmxlICkKCQkJCQl7CgkJCQkJCXZhciBuVGQgPSBfZm5HZXRXaWRlc3ROb2RlKCBvU2V0dGluZ3MsIGkgKTsKCQkJCQkJaWYgKCBuVGQgIT09IG51bGwgKQoJCQkJCQl7CgkJCQkJCQluVGQgPSBuVGQuY2xvbmVOb2RlKHRydWUpOwoJCQkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNDb250ZW50UGFkZGluZyAhPT0gIiIgKQoJCQkJCQkJewoJCQkJCQkJCW5UZC5pbm5lckhUTUwgKz0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zQ29udGVudFBhZGRpbmc7CgkJCQkJCQl9CgkJCQkJCQluVHIuYXBwZW5kQ2hpbGQoIG5UZCApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBCdWlsZCB0aGUgdGFibGUgYW5kICdkaXNwbGF5JyBpdCAqLwoJCQkJdmFyIG5XcmFwcGVyID0gb1NldHRpbmdzLm5UYWJsZS5wYXJlbnROb2RlOwoJCQkJbldyYXBwZXIuYXBwZW5kQ2hpbGQoIG5DYWxjVG1wICk7CgkJCQkKCQkJCS8qIFdoZW4gc2Nyb2xsaW5nIChYIG9yIFkpIHdlIHdhbnQgdG8gc2V0IHRoZSB3aWR0aCBvZiB0aGUgdGFibGUgYXMgYXBwcm9wcmlhdGUuIEhvd2V2ZXIsCgkJCQkgKiB3aGVuIG5vdCBzY3JvbGxpbmcgbGVhdmUgdGhlIHRhYmxlIHdpZHRoIGFzIGl0IGlzLiBUaGlzIHJlc3VsdHMgaW4gc2xpZ2h0bHkgZGlmZmVyZW50LAoJCQkJICogYnV0IEkgdGhpbmsgY29ycmVjdCBiZWhhdmlvdXIKCQkJCSAqLwoJCQkJaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5zWCAhPT0gIiIgJiYgb1NldHRpbmdzLm9TY3JvbGwuc1hJbm5lciAhPT0gIiIgKQoJCQkJewoJCQkJCW5DYWxjVG1wLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3Mob1NldHRpbmdzLm9TY3JvbGwuc1hJbm5lcik7CgkJCQl9CgkJCQllbHNlIGlmICggb1NldHRpbmdzLm9TY3JvbGwuc1ggIT09ICIiICkKCQkJCXsKCQkJCQluQ2FsY1RtcC5zdHlsZS53aWR0aCA9ICIiOwoJCQkJCWlmICggJChuQ2FsY1RtcCkud2lkdGgoKSA8IG5XcmFwcGVyLm9mZnNldFdpZHRoICkKCQkJCQl7CgkJCQkJCW5DYWxjVG1wLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIG5XcmFwcGVyLm9mZnNldFdpZHRoICk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSBpZiAoIG9TZXR0aW5ncy5vU2Nyb2xsLnNZICE9PSAiIiApCgkJCQl7CgkJCQkJbkNhbGNUbXAuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggbldyYXBwZXIub2Zmc2V0V2lkdGggKTsKCQkJCX0KCQkJCW5DYWxjVG1wLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKCQkJCQoJCQkJLyogU2Nyb2xsaW5nIGNvbnNpZGVyYXRpb25zICovCgkJCQlfZm5TY3JvbGxpbmdXaWR0aEFkanVzdCggb1NldHRpbmdzLCBuQ2FsY1RtcCApOwoJCQkJCgkJCQkvKiBSZWFkIHRoZSB3aWR0aCdzIGNhbGN1bGF0ZWQgYnkgdGhlIGJyb3dzZXIgYW5kIHN0b3JlIHRoZW0gZm9yIHVzZSBieSB0aGUgY2FsbGVyLiBXZQoJCQkJICogZmlyc3Qgb2YgYWxsIHRyeSB0byB1c2UgdGhlIGVsZW1lbnRzIGluIHRoZSBib2R5LCBidXQgaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBhcmUKCQkJCSAqIG5vIGVsZW1lbnRzIHRoZXJlLCB1bmRlciB3aGljaCBjaXJjdW1zdGFuY2VzIHdlIHVzZSB0aGUgaGVhZGVyIGVsZW1lbnRzCgkJCQkgKi8KCQkJCXZhciBvTm9kZXMgPSAkKCJ0Ym9keSB0cjplcSgwKSIsIG5DYWxjVG1wKS5jaGlsZHJlbigpOwoJCQkJaWYgKCBvTm9kZXMubGVuZ3RoID09PSAwICkKCQkJCXsKCQkJCQlvTm9kZXMgPSBfZm5HZXRVbmlxdWVUaHMoIG9TZXR0aW5ncywgJCgndGhlYWQnLCBuQ2FsY1RtcClbMF0gKTsKCQkJCX0KCgkJCQkvKiBCcm93c2VycyBuZWVkIGEgYml0IG9mIGEgaGFuZCB3aGVuIGEgd2lkdGggaXMgYXNzaWduZWQgdG8gYW55IGNvbHVtbnMgd2hlbiAKCQkJCSAqIHgtc2Nyb2xsaW5nIGFzIHRoZXkgdGVuZCB0byBjb2xsYXBzZSB0aGUgdGFibGUgdG8gdGhlIG1pbi13aWR0aCwgZXZlbiBpZgoJCQkJICogd2Ugc2VudCB0aGUgY29sdW1uIHdpZHRocy4gU28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoYXQgdGhlIHRhYmxlIHdpZHRoCgkJCQkgKiBzaG91bGQgYmUgYnkgc3VtbWluZyB0aGUgdXNlciBnaXZlbiB2YWx1ZXMsIGFuZCB0aGUgYXV0b21hdGljIHZhbHVlcwoJCQkJICovCgkJCQlpZiAoIG9TZXR0aW5ncy5vU2Nyb2xsLnNYICE9PSAiIiApCgkJCQl7CgkJCQkJdmFyIGlUb3RhbCA9IDA7CgkJCQkJaUNvcnJlY3RvciA9IDA7CgkJCQkJZm9yICggaT0wIDsgaTxvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGkrKyApCgkJCQkJewoJCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlZpc2libGUgKQoJCQkJCQl7CgkJCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1dpZHRoT3JpZyA9PT0gbnVsbCApCgkJCQkJCQl7CgkJCQkJCQkJaVRvdGFsICs9ICQob05vZGVzW2lDb3JyZWN0b3JdKS5vdXRlcldpZHRoKCk7CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJaVRvdGFsICs9IHBhcnNlSW50KG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1dpZHRoLnJlcGxhY2UoJ3B4JywnJyksIDEwKSArCgkJCQkJCQkJCSgkKG9Ob2Rlc1tpQ29ycmVjdG9yXSkub3V0ZXJXaWR0aCgpIC0gJChvTm9kZXNbaUNvcnJlY3Rvcl0pLndpZHRoKCkpOwoJCQkJCQkJfQoJCQkJCQkJaUNvcnJlY3RvcisrOwoJCQkJCQl9CgkJCQkJfQoJCQkJCgkJCQkJbkNhbGNUbXAuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaVRvdGFsICk7CgkJCQkJb1NldHRpbmdzLm5UYWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpVG90YWwgKTsKCQkJCX0KCgkJCQlpQ29ycmVjdG9yID0gMDsKCQkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iVmlzaWJsZSApCgkJCQkJewoJCQkJCQlpV2lkdGggPSAkKG9Ob2Rlc1tpQ29ycmVjdG9yXSkud2lkdGgoKTsKCQkJCQkJaWYgKCBpV2lkdGggIT09IG51bGwgJiYgaVdpZHRoID4gMCApCgkJCQkJCXsKCQkJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1dpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlXaWR0aCApOwoJCQkJCQl9CgkJCQkJCWlDb3JyZWN0b3IrKzsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCW9TZXR0aW5ncy5uVGFibGUuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggJChuQ2FsY1RtcCkub3V0ZXJXaWR0aCgpICk7CgkJCQluQ2FsY1RtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBuQ2FsY1RtcCApOwoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mblNjcm9sbGluZ1dpZHRoQWRqdXN0CgkJICogUHVycG9zZTogIEFkanVzdCBhIHRhYmxlJ3Mgd2lkdGggdG8gdGFrZSBhY2NvdW50IG9mIHNjcm9sbGluZwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBub2RlOm4gLSB0YWJsZSBub2RlCgkJICovCgkJZnVuY3Rpb24gX2ZuU2Nyb2xsaW5nV2lkdGhBZGp1c3QgKCBvU2V0dGluZ3MsIG4gKQoJCXsKCQkJaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5zWCA9PT0gIiIgJiYgb1NldHRpbmdzLm9TY3JvbGwuc1kgIT09ICIiICkKCQkJewoJCQkJLyogV2hlbiB5LXNjcm9sbGluZyBvbmx5LCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgd2lkdGggb2YgdGhlIHNjcm9sbCBiYXIgc28gdGhlIHRhYmxlCgkJCQkgKiArIHNjcm9sbCBiYXIgd2lsbCBmaXQgaW50byB0aGUgYXJlYSBhdmFpYWxibGUuCgkJCQkgKi8KCQkJCXZhciBpT3JpZ1dpZHRoID0gJChuKS53aWR0aCgpOwoJCQkJbi5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCAkKG4pLm91dGVyV2lkdGgoKS1vU2V0dGluZ3Mub1Njcm9sbC5pQmFyV2lkdGggKTsKCQkJfQoJCQllbHNlIGlmICggb1NldHRpbmdzLm9TY3JvbGwuc1ggIT09ICIiICkKCQkJewoJCQkJLyogV2hlbiB4LXNjcm9sbGluZyBib3RoIHdheXMsIGZpeCB0aGUgdGFibGUgYXQgaXQncyBjdXJyZW50IHNpemUsIHdpdGhvdXQgYWRqdXN0aW5nICovCgkJCQluLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoICQobikub3V0ZXJXaWR0aCgpICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuR2V0V2lkZXN0Tm9kZQoJCSAqIFB1cnBvc2U6ICBHZXQgdGhlIHdpZGVzdCBub2RlCgkJICogUmV0dXJuczogIHN0cmluZzogLSBtYXggc3RybGVucyBmb3IgZWFjaCBjb2x1bW4KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGludDppQ29sIC0gY29sdW1uIG9mIGludGVyZXN0CgkJICovCgkJZnVuY3Rpb24gX2ZuR2V0V2lkZXN0Tm9kZSggb1NldHRpbmdzLCBpQ29sICkKCQl7CgkJCXZhciBpTWF4SW5kZXggPSBfZm5HZXRNYXhMZW5TdHJpbmcoIG9TZXR0aW5ncywgaUNvbCApOwoJCQlpZiAoIGlNYXhJbmRleCA8IDAgKQoJCQl7CgkJCQlyZXR1cm4gbnVsbDsKCQkJfQoKCQkJaWYgKCBvU2V0dGluZ3MuYW9EYXRhW2lNYXhJbmRleF0ublRyID09PSBudWxsICkKCQkJewoJCQkJdmFyIG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJbi5pbm5lckhUTUwgPSBfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpTWF4SW5kZXgsIGlDb2wsICcnICk7CgkJCQlyZXR1cm4gbjsKCQkJfQoJCQlyZXR1cm4gX2ZuR2V0VGROb2RlcyhvU2V0dGluZ3MsIGlNYXhJbmRleClbaUNvbF07CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkdldE1heExlblN0cmluZwoJCSAqIFB1cnBvc2U6ICBHZXQgdGhlIG1heGltdW0gc3RybGVuIGZvciBlYWNoIGRhdGEgY29sdW1uCgkJICogUmV0dXJuczogIHN0cmluZzogLSBtYXggc3RybGVucyBmb3IgZWFjaCBjb2x1bW4KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGludDppQ29sIC0gY29sdW1uIG9mIGludGVyZXN0CgkJICovCgkJZnVuY3Rpb24gX2ZuR2V0TWF4TGVuU3RyaW5nKCBvU2V0dGluZ3MsIGlDb2wgKQoJCXsKCQkJdmFyIGlNYXggPSAtMTsKCQkJdmFyIGlNYXhJbmRleCA9IC0xOwoJCQkKCQkJZm9yICggdmFyIGk9MCA7IGk8b1NldHRpbmdzLmFvRGF0YS5sZW5ndGggOyBpKysgKQoJCQl7CgkJCQl2YXIgcyA9IF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGksIGlDb2wsICdkaXNwbGF5JyApKyIiOwoJCQkJcyA9IHMucmVwbGFjZSggLzwuKj8+L2csICIiICk7CgkJCQlpZiAoIHMubGVuZ3RoID4gaU1heCApCgkJCQl7CgkJCQkJaU1heCA9IHMubGVuZ3RoOwoJCQkJCWlNYXhJbmRleCA9IGk7CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiBpTWF4SW5kZXg7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mblN0cmluZ1RvQ3NzCgkJICogUHVycG9zZTogIEFwcGVuZCBhIENTUyB1bml0IChvbmx5IGlmIHJlcXVpcmVkKSB0byBhIHN0cmluZwoJCSAqIFJldHVybnM6ICAwIGlmIG1hdGNoLCAxIGlmIGxlbmd0aCBpcyBkaWZmZXJlbnQsIDIgaWYgbm8gbWF0Y2gKCQkgKiBJbnB1dHM6ICAgYXJyYXk6YUFycmF5MSAtIGZpcnN0IGFycmF5CgkJICogICAgICAgICAgIGFycmF5OmFBcnJheTIgLSBzZWNvbmQgYXJyYXkKCQkgKi8KCQlmdW5jdGlvbiBfZm5TdHJpbmdUb0NzcyggcyApCgkJewoJCQlpZiAoIHMgPT09IG51bGwgKQoJCQl7CgkJCQlyZXR1cm4gIjBweCI7CgkJCX0KCQkJCgkJCWlmICggdHlwZW9mIHMgPT0gJ251bWJlcicgKQoJCQl7CgkJCQlpZiAoIHMgPCAwICkKCQkJCXsKCQkJCQlyZXR1cm4gIjBweCI7CgkJCQl9CgkJCQlyZXR1cm4gcysicHgiOwoJCQl9CgkJCQoJCQkvKiBDaGVjayBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgbm90IDAtOSAqLwoJCQl2YXIgYyA9IHMuY2hhckNvZGVBdCggcy5sZW5ndGgtMSApOwoJCQlpZiAoYyA8IDB4MzAgfHwgYyA+IDB4MzkpCgkJCXsKCQkJCXJldHVybiBzOwoJCQl9CgkJCXJldHVybiBzKyJweCI7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkFycmF5Q21wCgkJICogUHVycG9zZTogIENvbXBhcmUgdHdvIGFycmF5cwoJCSAqIFJldHVybnM6ICAwIGlmIG1hdGNoLCAxIGlmIGxlbmd0aCBpcyBkaWZmZXJlbnQsIDIgaWYgbm8gbWF0Y2gKCQkgKiBJbnB1dHM6ICAgYXJyYXk6YUFycmF5MSAtIGZpcnN0IGFycmF5CgkJICogICAgICAgICAgIGFycmF5OmFBcnJheTIgLSBzZWNvbmQgYXJyYXkKCQkgKi8KCQlmdW5jdGlvbiBfZm5BcnJheUNtcCggYUFycmF5MSwgYUFycmF5MiApCgkJewoJCQlpZiAoIGFBcnJheTEubGVuZ3RoICE9IGFBcnJheTIubGVuZ3RoICkKCQkJewoJCQkJcmV0dXJuIDE7CgkJCX0KCQkJCgkJCWZvciAoIHZhciBpPTAgOyBpPGFBcnJheTEubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJaWYgKCBhQXJyYXkxW2ldICE9IGFBcnJheTJbaV0gKQoJCQkJewoJCQkJCXJldHVybiAyOwoJCQkJfQoJCQl9CgkJCQoJCQlyZXR1cm4gMDsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRGV0ZWN0VHlwZQoJCSAqIFB1cnBvc2U6ICBHZXQgdGhlIHNvcnQgdHlwZSBiYXNlZCBvbiBhbiBpbnB1dCBzdHJpbmcKCQkgKiBSZXR1cm5zOiAgc3RyaW5nOiAtIHR5cGUgKGRlZmF1bHRzIHRvICdzdHJpbmcnIGlmIG5vIHR5cGUgY2FuIGJlIGRldGVjdGVkKQoJCSAqIElucHV0czogICBzdHJpbmc6c0RhdGEgLSBkYXRhIHdlIHdpc2ggdG8ga25vdyB0aGUgdHlwZSBvZgoJCSAqIE5vdGVzOiAgICBUaGlzIGZ1bmN0aW9uIG1ha2VzIHVzZSBvZiB0aGUgRGF0YVRhYmxlcyBwbHVnaW4gb2JqY3QgX29FeHQgCgkJICogICAoLmFUeXBlcykgc3VjaCB0aGF0IG5ldyB0eXBlcyBjYW4gZWFzaWx5IGJlIGFkZGVkLgoJCSAqLwoJCWZ1bmN0aW9uIF9mbkRldGVjdFR5cGUoIHNEYXRhICkKCQl7CgkJCXZhciBhVHlwZXMgPSBfb0V4dC5hVHlwZXM7CgkJCXZhciBpTGVuID0gYVR5cGVzLmxlbmd0aDsKCQkJCgkJCWZvciAoIHZhciBpPTAgOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQl2YXIgc1R5cGUgPSBhVHlwZXNbaV0oIHNEYXRhICk7CgkJCQlpZiAoIHNUeXBlICE9PSBudWxsICkKCQkJCXsKCQkJCQlyZXR1cm4gc1R5cGU7CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiAnc3RyaW5nJzsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuU2V0dGluZ3NGcm9tTm9kZQoJCSAqIFB1cnBvc2U6ICBSZXR1cm4gdGhlIHNldHRpbmdzIG9iamVjdCBmb3IgYSBwYXJ0aWN1bGFyIHRhYmxlCgkJICogUmV0dXJuczogIG9iamVjdDogU2V0dGluZ3Mgb2JqZWN0IC0gb3IgbnVsbCBpZiBub3QgZm91bmQKCQkgKiBJbnB1dHM6ICAgbm9kZTpuVGFibGUgLSB0YWJsZSB3ZSBhcmUgdXNpbmcgYXMgYSBkYXRhVGFibGUKCQkgKi8KCQlmdW5jdGlvbiBfZm5TZXR0aW5nc0Zyb21Ob2RlICggblRhYmxlICkKCQl7CgkJCWZvciAoIHZhciBpPTAgOyBpPF9hb1NldHRpbmdzLmxlbmd0aCA7IGkrKyApCgkJCXsKCQkJCWlmICggX2FvU2V0dGluZ3NbaV0ublRhYmxlID09IG5UYWJsZSApCgkJCQl7CgkJCQkJcmV0dXJuIF9hb1NldHRpbmdzW2ldOwoJCQkJfQoJCQl9CgkJCQoJCQlyZXR1cm4gbnVsbDsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuR2V0RGF0YU1hc3RlcgoJCSAqIFB1cnBvc2U6ICBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgZnVsbCB0YWJsZSBkYXRhCgkJICogUmV0dXJuczogIGFycmF5IGFycmF5OmFEYXRhIC0gTWFzdGVyIGRhdGEgYXJyYXkKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuR2V0RGF0YU1hc3RlciAoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgYURhdGEgPSBbXTsKCQkJdmFyIGlMZW4gPSBvU2V0dGluZ3MuYW9EYXRhLmxlbmd0aDsKCQkJZm9yICggdmFyIGk9MCA7IGk8aUxlbjsgaSsrICkKCQkJewoJCQkJYURhdGEucHVzaCggb1NldHRpbmdzLmFvRGF0YVtpXS5fYURhdGEgKTsKCQkJfQoJCQlyZXR1cm4gYURhdGE7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkdldFRyTm9kZXMKCQkgKiBQdXJwb3NlOiAgUmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIFRSIG5vZGVzIGZvciB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgYXJyYXk6IC0gVFIgYXJyYXkKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuR2V0VHJOb2RlcyAoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgYU5vZGVzID0gW107CgkJCWZvciAoIHZhciBpPTAsIGlMZW49b1NldHRpbmdzLmFvRGF0YS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpZiAoIG9TZXR0aW5ncy5hb0RhdGFbaV0ublRyICE9PSBudWxsICkKCQkJCXsKCQkJCQlhTm9kZXMucHVzaCggb1NldHRpbmdzLmFvRGF0YVtpXS5uVHIgKTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gYU5vZGVzOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5HZXRUZE5vZGVzCgkJICogUHVycG9zZTogIFJldHVybiBhbiBmbGF0IGFycmF5IHdpdGggYWxsIFREIG5vZGVzIGZvciB0aGUgdGFibGUsIG9yIHJvdwoJCSAqIFJldHVybnM6ICBhcnJheTogLSBURCBhcnJheQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgaW50OmlJbmRpdmlkdWFsUm93IC0gYW9EYXRhIGluZGV4IHRvIGdldCB0aGUgbm9kZXMgZm9yIC0gb3B0aW9uYWwgaWYgbm90CgkJICogICAgICAgICAgICAgZ2l2ZW4gdGhlbiB0aGUgcmV0dXJuIGFycmF5IHdpbGwgY29udGFpbiBhbGwgbm9kZXMgZm9yIHRoZSB0YWJsZQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkdldFRkTm9kZXMgKCBvU2V0dGluZ3MsIGlJbmRpdmlkdWFsUm93ICkKCQl7CgkJCXZhciBhblJldHVybiA9IFtdOwoJCQl2YXIgaUNvcnJlY3RvcjsKCQkJdmFyIGFuVGRzOwoJCQl2YXIgaVJvdywgaVJvd3M9b1NldHRpbmdzLmFvRGF0YS5sZW5ndGgsCgkJCQlpQ29sdW1uLCBpQ29sdW1ucywgb0RhdGEsIHNOb2RlTmFtZSwgaVN0YXJ0PTAsIGlFbmQ9aVJvd3M7CgkJCQoJCQkvKiBBbGxvdyB0aGUgY29sbGVjdGlvbiB0byBiZSBsaW1pdGVkIHRvIGp1c3Qgb25lIHJvdyAqLwoJCQlpZiAoIHR5cGVvZiBpSW5kaXZpZHVhbFJvdyAhPSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCWlTdGFydCA9IGlJbmRpdmlkdWFsUm93OwoJCQkJaUVuZCA9IGlJbmRpdmlkdWFsUm93KzE7CgkJCX0KCgkJCWZvciAoIGlSb3c9aVN0YXJ0IDsgaVJvdzxpRW5kIDsgaVJvdysrICkKCQkJewoJCQkJb0RhdGEgPSBvU2V0dGluZ3MuYW9EYXRhW2lSb3ddOwoJCQkJaWYgKCBvRGF0YS5uVHIgIT09IG51bGwgKQoJCQkJewoJCQkJCS8qIGdldCB0aGUgVEQgY2hpbGQgbm9kZXMgLSB0YWtpbmcgaW50byBhY2NvdW50IHRleHQgZXRjIG5vZGVzICovCgkJCQkJYW5UZHMgPSBbXTsKCQkJCQlmb3IgKCBpQ29sdW1uPTAsIGlDb2x1bW5zPW9EYXRhLm5Uci5jaGlsZE5vZGVzLmxlbmd0aCA7IGlDb2x1bW48aUNvbHVtbnMgOyBpQ29sdW1uKysgKQoJCQkJCXsKCQkJCQkJc05vZGVOYW1lID0gb0RhdGEublRyLmNoaWxkTm9kZXNbaUNvbHVtbl0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKCQkJCQkJaWYgKCBzTm9kZU5hbWUgPT0gJ3RkJyB8fCBzTm9kZU5hbWUgPT0gJ3RoJyApCgkJCQkJCXsKCQkJCQkJCWFuVGRzLnB1c2goIG9EYXRhLm5Uci5jaGlsZE5vZGVzW2lDb2x1bW5dICk7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCWlDb3JyZWN0b3IgPSAwOwoJCQkJCWZvciAoIGlDb2x1bW49MCwgaUNvbHVtbnM9b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpQ29sdW1uPGlDb2x1bW5zIDsgaUNvbHVtbisrICkKCQkJCQl7CgkJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5iVmlzaWJsZSApCgkJCQkJCXsKCQkJCQkJCWFuUmV0dXJuLnB1c2goIGFuVGRzW2lDb2x1bW4taUNvcnJlY3Rvcl0gKTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCWFuUmV0dXJuLnB1c2goIG9EYXRhLl9hbkhpZGRlbltpQ29sdW1uXSApOwoJCQkJCQkJaUNvcnJlY3RvcisrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gYW5SZXR1cm47CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkVzY2FwZVJlZ2V4CgkJICogUHVycG9zZTogIHNjYXBlIGEgc3RyaW5nIHN0dWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24KCQkgKiBSZXR1cm5zOiAgc3RyaW5nOiAtIGVzY2FwZWQgc3RyaW5nCgkJICogSW5wdXRzOiAgIHN0cmluZzpzVmFsIC0gc3RyaW5nIHRvIGVzY2FwZQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkVzY2FwZVJlZ2V4ICggc1ZhbCApCgkJewoJCQl2YXIgYWNFc2NhcGUgPSBbICcvJywgJy4nLCAnKicsICcrJywgJz8nLCAnfCcsICcoJywgJyknLCAnWycsICddJywgJ3snLCAnfScsICdcXCcsICckJywgJ14nIF07CgkJICB2YXIgcmVSZXBsYWNlID0gbmV3IFJlZ0V4cCggJyhcXCcgKyBhY0VzY2FwZS5qb2luKCd8XFwnKSArICcpJywgJ2cnICk7CgkJICByZXR1cm4gc1ZhbC5yZXBsYWNlKHJlUmVwbGFjZSwgJ1xcJDEnKTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRGVsZXRlSW5kZXgKCQkgKiBQdXJwb3NlOiAgVGFrZSBhbiBhcnJheSBvZiBpbnRlZ2VycyAoaW5kZXggYXJyYXkpIGFuZCByZW1vdmUgYSB0YXJnZXQgaW50ZWdlciAodmFsdWUgLSBub3QgCgkJICogICAgICAgICAgICAgdGhlIGtleSEpCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgYTphcnJheSBpbnQgLSBJbmRleCBhcnJheSB0byB0YXJnZXQKCQkgKiAgICAgICAgICAgaW50OmlUYXJnZXQgLSB2YWx1ZSB0byBmaW5kCgkJICovCgkJZnVuY3Rpb24gX2ZuRGVsZXRlSW5kZXgoIGEsIGlUYXJnZXQgKQoJCXsKCQkJdmFyIGlUYXJnZXRJbmRleCA9IC0xOwoJCQkKCQkJZm9yICggdmFyIGk9MCwgaUxlbj1hLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlmICggYVtpXSA9PSBpVGFyZ2V0ICkKCQkJCXsKCQkJCQlpVGFyZ2V0SW5kZXggPSBpOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGFbaV0gPiBpVGFyZ2V0ICkKCQkJCXsKCQkJCQlhW2ldLS07CgkJCQl9CgkJCX0KCQkJCgkJCWlmICggaVRhcmdldEluZGV4ICE9IC0xICkKCQkJewoJCQkJYS5zcGxpY2UoIGlUYXJnZXRJbmRleCwgMSApOwoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mblJlT3JkZXJJbmRleAoJCSAqIFB1cnBvc2U6ICBGaWd1cmUgb3V0IGhvdyB0byByZW9yZGVyIGEgZGlzcGxheSBsaXN0CgkJICogUmV0dXJuczogIGFycmF5IGludDphaVJldHVybiAtIGluZGV4IGxpc3QgZm9yIHJlb3JkZXJpbmcKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuUmVPcmRlckluZGV4ICggb1NldHRpbmdzLCBzQ29sdW1ucyApCgkJewoJCQl2YXIgYUNvbHVtbnMgPSBzQ29sdW1ucy5zcGxpdCgnLCcpOwoJCQl2YXIgYWlSZXR1cm4gPSBbXTsKCQkJCgkJCWZvciAoIHZhciBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlmb3IgKCB2YXIgaj0wIDsgajxpTGVuIDsgaisrICkKCQkJCXsKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc05hbWUgPT0gYUNvbHVtbnNbal0gKQoJCQkJCXsKCQkJCQkJYWlSZXR1cm4ucHVzaCggaiApOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiBhaVJldHVybjsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQ29sdW1uT3JkZXJpbmcKCQkgKiBQdXJwb3NlOiAgR2V0IHRoZSBjb2x1bW4gb3JkZXJpbmcgdGhhdCBEYXRhVGFibGVzIGV4cGVjdHMKCQkgKiBSZXR1cm5zOiAgc3RyaW5nOiAtIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG5hbWVzCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkNvbHVtbk9yZGVyaW5nICggb1NldHRpbmdzICkKCQl7CgkJCXZhciBzTmFtZXMgPSAnJzsKCQkJZm9yICggdmFyIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCXNOYW1lcyArPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNOYW1lKycsJzsKCQkJfQoJCQlpZiAoIHNOYW1lcy5sZW5ndGggPT0gaUxlbiApCgkJCXsKCQkJCXJldHVybiAiIjsKCQkJfQoJCQlyZXR1cm4gc05hbWVzLnNsaWNlKDAsIC0xKTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuTG9nCgkJICogUHVycG9zZTogIExvZyBhbiBlcnJvciBtZXNzYWdlCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgaW50OmlMZXZlbCAtIGxvZyBlcnJvciBtZXNzYWdlcywgb3IgZGlzcGxheSB0aGVtIHRvIHRoZSB1c2VyCgkJICogICAgICAgICAgIHN0cmluZzpzTWVzZyAtIGVycm9yIG1lc3NhZ2UKCQkgKi8KCQlmdW5jdGlvbiBfZm5Mb2coIG9TZXR0aW5ncywgaUxldmVsLCBzTWVzZyApCgkJewoJCQl2YXIgc0FsZXJ0ID0gb1NldHRpbmdzLnNUYWJsZUlkID09PSAiIiA/CgkJCSAJIkRhdGFUYWJsZXMgd2FybmluZzogIiArc01lc2cgOgoJCQkgCSJEYXRhVGFibGVzIHdhcm5pbmcgKHRhYmxlIGlkID0gJyIrb1NldHRpbmdzLnNUYWJsZUlkKyInKTogIiArc01lc2c7CgkJCQoJCQlpZiAoIGlMZXZlbCA9PT0gMCApCgkJCXsKCQkJCWlmICggX29FeHQuc0Vyck1vZGUgPT0gJ2FsZXJ0JyApCgkJCQl7CgkJCQkJYWxlcnQoIHNBbGVydCApOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXRocm93IHNBbGVydDsKCQkJCX0KCQkJCXJldHVybjsKCQkJfQoJCQllbHNlIGlmICggdHlwZW9mIGNvbnNvbGUgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUubG9nICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJY29uc29sZS5sb2coIHNBbGVydCApOwoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkNsZWFyVGFibGUKCQkgKiBQdXJwb3NlOiAgTnVrZSB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5DbGVhclRhYmxlKCBvU2V0dGluZ3MgKQoJCXsKCQkJb1NldHRpbmdzLmFvRGF0YS5zcGxpY2UoIDAsIG9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoICk7CgkJCW9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc3BsaWNlKCAwLCBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLmxlbmd0aCApOwoJCQlvU2V0dGluZ3MuYWlEaXNwbGF5LnNwbGljZSggMCwgb1NldHRpbmdzLmFpRGlzcGxheS5sZW5ndGggKTsKCQkJX2ZuQ2FsY3VsYXRlRW5kKCBvU2V0dGluZ3MgKTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuU2F2ZVN0YXRlCgkJICogUHVycG9zZTogIFNhdmUgdGhlIHN0YXRlIG9mIGEgdGFibGUgaW4gYSBjb29raWUgc3VjaCB0aGF0IHRoZSBwYWdlIGNhbiBiZSByZWxvYWRlZAoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mblNhdmVTdGF0ZSAoIG9TZXR0aW5ncyApCgkJewoJCQlpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTdGF0ZVNhdmUgfHwgdHlwZW9mIG9TZXR0aW5ncy5iRGVzdHJveWluZyAhPSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCXJldHVybjsKCQkJfQoJCQkKCQkJLyogU3RvcmUgdGhlIGludGVyZXN0aW5nIHZhcmlhYmxlcyAqLwoJCQl2YXIgaSwgaUxlbiwgc1RtcDsKCQkJdmFyIHNWYWx1ZSA9ICJ7IjsKCQkJc1ZhbHVlICs9ICciaUNyZWF0ZSI6JysgbmV3IERhdGUoKS5nZXRUaW1lKCkrJywnOwoJCQlzVmFsdWUgKz0gJyJpU3RhcnQiOicrIChvU2V0dGluZ3Mub1Njcm9sbC5iSW5maW5pdGUgPyAwIDogb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0KSsnLCc7CgkJCXNWYWx1ZSArPSAnImlFbmQiOicrIChvU2V0dGluZ3Mub1Njcm9sbC5iSW5maW5pdGUgPyBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoIDogb1NldHRpbmdzLl9pRGlzcGxheUVuZCkrJywnOwoJCQlzVmFsdWUgKz0gJyJpTGVuZ3RoIjonKyBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKycsJzsKCQkJc1ZhbHVlICs9ICcic0ZpbHRlciI6IicrIGVuY29kZVVSSUNvbXBvbmVudChvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2gpKyciLCc7CgkJCXNWYWx1ZSArPSAnInNGaWx0ZXJFc2MiOicrICFvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLmJSZWdleCsnLCc7CgkJCQoJCQlzVmFsdWUgKz0gJyJhYVNvcnRpbmciOlsgJzsKCQkJZm9yICggaT0wIDsgaTxvU2V0dGluZ3MuYWFTb3J0aW5nLmxlbmd0aCA7IGkrKyApCgkJCXsKCQkJCXNWYWx1ZSArPSAnWycrb1NldHRpbmdzLmFhU29ydGluZ1tpXVswXSsnLCInK29TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMV0rJyJdLCc7CgkJCX0KCQkJc1ZhbHVlID0gc1ZhbHVlLnN1YnN0cmluZygwLCBzVmFsdWUubGVuZ3RoLTEpOwoJCQlzVmFsdWUgKz0gIl0sIjsKCQkJCgkJCXNWYWx1ZSArPSAnImFhU2VhcmNoQ29scyI6WyAnOwoJCQlmb3IgKCBpPTAgOyBpPG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHMubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJc1ZhbHVlICs9ICdbIicrZW5jb2RlVVJJQ29tcG9uZW50KG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbaV0uc1NlYXJjaCkrCgkJCQkJJyIsJyshb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1tpXS5iUmVnZXgrJ10sJzsKCQkJfQoJCQlzVmFsdWUgPSBzVmFsdWUuc3Vic3RyaW5nKDAsIHNWYWx1ZS5sZW5ndGgtMSk7CgkJCXNWYWx1ZSArPSAiXSwiOwoJCQkKCQkJc1ZhbHVlICs9ICciYWJWaXNDb2xzIjpbICc7CgkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQl7CgkJCQlzVmFsdWUgKz0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iVmlzaWJsZSsiLCI7CgkJCX0KCQkJc1ZhbHVlID0gc1ZhbHVlLnN1YnN0cmluZygwLCBzVmFsdWUubGVuZ3RoLTEpOwoJCQlzVmFsdWUgKz0gIl0iOwoJCQkKCQkJLyogU2F2ZSBzdGF0ZSBmcm9tIGFueSBwbHVnLWlucyAqLwoJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvU3RhdGVTYXZlLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCXNUbXAgPSBvU2V0dGluZ3MuYW9TdGF0ZVNhdmVbaV0uZm4oIG9TZXR0aW5ncywgc1ZhbHVlICk7CgkJCQlpZiAoIHNUbXAgIT09ICIiICkKCQkJCXsKCQkJCQlzVmFsdWUgPSBzVG1wOwoJCQkJfQoJCQl9CgkJCQoJCQlzVmFsdWUgKz0gIn0iOwoJCQkKCQkJX2ZuQ3JlYXRlQ29va2llKCBvU2V0dGluZ3Muc0Nvb2tpZVByZWZpeCtvU2V0dGluZ3Muc0luc3RhbmNlLCBzVmFsdWUsIAoJCQkJb1NldHRpbmdzLmlDb29raWVEdXJhdGlvbiwgb1NldHRpbmdzLnNDb29raWVQcmVmaXgsIG9TZXR0aW5ncy5mbkNvb2tpZUNhbGxiYWNrICk7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkxvYWRTdGF0ZQoJCSAqIFB1cnBvc2U6ICBBdHRlbXB0IHRvIGxvYWQgYSBzYXZlZCB0YWJsZSBzdGF0ZSBmcm9tIGEgY29va2llCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIG9iamVjdDpvSW5pdCAtIERhdGFUYWJsZXMgaW5pdCBvYmplY3Qgc28gd2UgY2FuIG92ZXJyaWRlIHNldHRpbmdzCgkJICovCgkJZnVuY3Rpb24gX2ZuTG9hZFN0YXRlICggb1NldHRpbmdzLCBvSW5pdCApCgkJewoJCQlpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTdGF0ZVNhdmUgKQoJCQl7CgkJCQlyZXR1cm47CgkJCX0KCQkJCgkJCXZhciBvRGF0YSwgaSwgaUxlbjsKCQkJdmFyIHNEYXRhID0gX2ZuUmVhZENvb2tpZSggb1NldHRpbmdzLnNDb29raWVQcmVmaXgrb1NldHRpbmdzLnNJbnN0YW5jZSApOwoJCQlpZiAoIHNEYXRhICE9PSBudWxsICYmIHNEYXRhICE9PSAnJyApCgkJCXsKCQkJCS8qIFRyeS9jYXRjaCB0aGUgSlNPTiBldmFsIC0gaWYgaXQgaXMgYmFkIHRoZW4gd2UgaWdub3JlIGl0IC0gbm90ZSB0aGF0IDEuNy4wIGFuZCBiZWZvcmUKCQkJCSAqIGluY29ycmVjdGx5IHVzZWQgc2luZ2xlIHF1b3RlcyBmb3Igc29tZSBzdHJpbmdzIC0gaGVuY2UgdGhlIHJlcGxhY2UgYmVsb3cKCQkJCSAqLwoJCQkJdHJ5CgkJCQl7CgkJCQkJb0RhdGEgPSAodHlwZW9mICQucGFyc2VKU09OID09ICdmdW5jdGlvbicpID8gCgkJCQkJCSQucGFyc2VKU09OKCBzRGF0YS5yZXBsYWNlKC8nL2csICciJykgKSA6IGV2YWwoICcoJytzRGF0YSsnKScgKTsKCQkJCX0KCQkJCWNhdGNoKCBlICkKCQkJCXsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQkKCQkJCS8qIEFsbG93IGN1c3RvbSBhbmQgcGx1Zy1pbiBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHRvIGFsdGVyIHRoZSBkYXRhIHNldCB3aGljaCB3YXMKCQkJCSAqIHNhdmVkLCBhbmQgYWxzbyByZWplY3QgYW55IHNhdmVkIHN0YXRlIGJ5IHJldHVybmluZyBmYWxzZQoJCQkJICovCgkJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvU3RhdGVMb2FkLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJaWYgKCAhb1NldHRpbmdzLmFvU3RhdGVMb2FkW2ldLmZuKCBvU2V0dGluZ3MsIG9EYXRhICkgKQoJCQkJCXsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJLyogU3RvcmUgdGhlIHNhdmVkIHN0YXRlIHNvIGl0IG1pZ2h0IGJlIGFjY2Vzc2VkIGF0IGFueSB0aW1lIChwYXJ0aWN1YWxybHkgYSBwbHVnLWluICovCgkJCQlvU2V0dGluZ3Mub0xvYWRlZFN0YXRlID0gJC5leHRlbmQoIHRydWUsIHt9LCBvRGF0YSApOwoJCQkJCgkJCQkvKiBSZXN0b3JlIGtleSBmZWF0dXJlcyAqLwoJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gb0RhdGEuaVN0YXJ0OwoJCQkJb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ID0gb0RhdGEuaVN0YXJ0OwoJCQkJb1NldHRpbmdzLl9pRGlzcGxheUVuZCA9IG9EYXRhLmlFbmQ7CgkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoID0gb0RhdGEuaUxlbmd0aDsKCQkJCW9TZXR0aW5ncy5vUHJldmlvdXNTZWFyY2guc1NlYXJjaCA9IGRlY29kZVVSSUNvbXBvbmVudChvRGF0YS5zRmlsdGVyKTsKCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmcgPSBvRGF0YS5hYVNvcnRpbmcuc2xpY2UoKTsKCQkJCW9TZXR0aW5ncy5zYXZlZF9hYVNvcnRpbmcgPSBvRGF0YS5hYVNvcnRpbmcuc2xpY2UoKTsKCQkJCQoJCQkJLyoKCQkJCSAqIFNlYXJjaCBmaWx0ZXJpbmcgLSBnbG9iYWwgcmVmZXJlbmNlIGFkZGVkIGluIDEuNC4xCgkJCQkgKiBOb3RlIHRoYXQgd2UgdXNlIGEgJ25vdCcgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uIGluZGljYXRvciB0byBtYWludGFpbgoJCQkJICogY29tcGF0aWJpbGl0eSB3aXRoIHByZSAxLjcgdmVyc2lvbnMsIHdoZXJlIHRoaXMgd2FzIGJhc2ljYWxseSBpbnZlcnRlZC4gQWRkZWQgaW4gMS43LjAKCQkJCSAqLwoJCQkJaWYgKCB0eXBlb2Ygb0RhdGEuc0ZpbHRlckVzYyAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5iUmVnZXggPSAhb0RhdGEuc0ZpbHRlckVzYzsKCQkJCX0KCQkJCQoJCQkJLyogQ29sdW1uIGZpbHRlcmluZyAtIGFkZGVkIGluIDEuNS4wIGJldGEgNiAqLwoJCQkJaWYgKCB0eXBlb2Ygb0RhdGEuYWFTZWFyY2hDb2xzICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlmb3IgKCBpPTAgOyBpPG9EYXRhLmFhU2VhcmNoQ29scy5sZW5ndGggOyBpKysgKQoJCQkJCXsKCQkJCQkJb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1tpXSA9IHsKCQkJCQkJCSJzU2VhcmNoIjogZGVjb2RlVVJJQ29tcG9uZW50KG9EYXRhLmFhU2VhcmNoQ29sc1tpXVswXSksCgkJCQkJCQkiYlJlZ2V4IjogIW9EYXRhLmFhU2VhcmNoQ29sc1tpXVsxXQoJCQkJCQl9OwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJLyogQ29sdW1uIHZpc2liaWxpdHkgc3RhdGUgLSBhZGRlZCBpbiAxLjUuMCBiZXRhIDEwICovCgkJCQlpZiAoIHR5cGVvZiBvRGF0YS5hYlZpc0NvbHMgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCS8qIFBhc3MgYmFjayB2aXNpYmlsaXkgc2V0dGluZ3MgdG8gdGhlIGluaXQgaGFuZGxlciwgYnV0IHRvIGRvIG5vdCBoZXJlIG92ZXJyaWRlCgkJCQkJICogdGhlIGluaXQgb2JqZWN0IHRoYXQgdGhlIHVzZXIgbWlnaHQgaGF2ZSBwYXNzZWQgaW4KCQkJCQkgKi8KCQkJCQlvSW5pdC5zYXZlZF9hb0NvbHVtbnMgPSBbXTsKCQkJCQlmb3IgKCBpPTAgOyBpPG9EYXRhLmFiVmlzQ29scy5sZW5ndGggOyBpKysgKQoJCQkJCXsKCQkJCQkJb0luaXQuc2F2ZWRfYW9Db2x1bW5zW2ldID0ge307CgkJCQkJCW9Jbml0LnNhdmVkX2FvQ29sdW1uc1tpXS5iVmlzaWJsZSA9IG9EYXRhLmFiVmlzQ29sc1tpXTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQ3JlYXRlQ29va2llCgkJICogUHVycG9zZTogIENyZWF0ZSBhIG5ldyBjb29raWUgd2l0aCBhIHZhbHVlIHRvIHN0b3JlIHRoZSBzdGF0ZSBvZiBhIHRhYmxlCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgc3RyaW5nOnNOYW1lIC0gbmFtZSBvZiB0aGUgY29va2llIHRvIGNyZWF0ZQoJCSAqICAgICAgICAgICBzdHJpbmc6c1ZhbHVlIC0gdGhlIHZhbHVlIHRoZSBjb29raWUgc2hvdWxkIHRha2UKCQkgKiAgICAgICAgICAgaW50OmlTZWNzIC0gZHVyYXRpb24gb2YgdGhlIGNvb2tpZQoJCSAqICAgICAgICAgICBzdHJpbmc6c0Jhc2VOYW1lIC0gc05hbWUgaXMgbWFkZSB1cCBvZiB0aGUgYmFzZSArIGZpbGUgbmFtZSAtIHRoaXMgaXMgdGhlIGJhc2UKCQkgKiAgICAgICAgICAgZnVuY3Rpb246Zm5DYWxsYmFjayAtIFVzZXIgZGVmaW5hYmxlIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgY29va2llCgkJICovCgkJZnVuY3Rpb24gX2ZuQ3JlYXRlQ29va2llICggc05hbWUsIHNWYWx1ZSwgaVNlY3MsIHNCYXNlTmFtZSwgZm5DYWxsYmFjayApCgkJewoJCQl2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CgkJCWRhdGUuc2V0VGltZSggZGF0ZS5nZXRUaW1lKCkrKGlTZWNzKjEwMDApICk7CgkJCQoJCQkvKiAKCQkJICogU2hvY2tpbmcgYnV0IHRydWUgLSBpdCB3b3VsZCBhcHBlYXIgSUUgaGFzIG1ham9yIGlzc3VlcyB3aXRoIGhhdmluZyB0aGUgcGF0aCBub3QgaGF2aW5nCgkJCSAqIGEgdHJhaWxpbmcgc2xhc2ggb24gaXQuIFdlIG5lZWQgdGhlIGNvb2tpZSB0byBiZSBhdmFpbGFibGUgYmFzZWQgb24gdGhlIHBhdGgsIHNvIHdlCgkJCSAqIGhhdmUgdG8gYXBwZW5kIHRoZSBmaWxlIG5hbWUgdG8gdGhlIGNvb2tpZSBuYW1lLiBBcHBhbGxpbmcuIFRoYW5rcyB0byB2ZXggZm9yIGFkZGluZyB0aGUKCQkJICogcGF0Y2ggdG8gdXNlIGF0IGxlYXN0IHNvbWUgb2YgdGhlIHBhdGgKCQkJICovCgkJCXZhciBhUGFydHMgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoJy8nKTsKCQkJdmFyIHNOYW1lRmlsZSA9IHNOYW1lICsgJ18nICsgYVBhcnRzLnBvcCgpLnJlcGxhY2UoL1tcLzpdL2csIiIpLnRvTG93ZXJDYXNlKCk7CgkJCXZhciBzRnVsbENvb2tpZSwgb0RhdGE7CgkJCQoJCQlpZiAoIGZuQ2FsbGJhY2sgIT09IG51bGwgKQoJCQl7CgkJCQlvRGF0YSA9ICh0eXBlb2YgJC5wYXJzZUpTT04gPT0gJ2Z1bmN0aW9uJykgPyAKCQkJCQkkLnBhcnNlSlNPTiggc1ZhbHVlICkgOiBldmFsKCAnKCcrc1ZhbHVlKycpJyApOwoJCQkJc0Z1bGxDb29raWUgPSBmbkNhbGxiYWNrKCBzTmFtZUZpbGUsIG9EYXRhLCBkYXRlLnRvR01UU3RyaW5nKCksCgkJCQkJYVBhcnRzLmpvaW4oJy8nKSsiLyIgKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXNGdWxsQ29va2llID0gc05hbWVGaWxlICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHNWYWx1ZSkgKwoJCQkJCSI7IGV4cGlyZXM9IiArIGRhdGUudG9HTVRTdHJpbmcoKSArIjsgcGF0aD0iICsgYVBhcnRzLmpvaW4oJy8nKSsiLyI7CgkJCX0KCQkJCgkJCS8qIEFyZSB3ZSBnb2luZyB0byBnbyBvdmVyIHRoZSBjb29raWUgbGltaXQgb2YgNEtpQj8gSWYgc28sIHRyeSB0byBkZWxldGUgYSBjb29raWVzCgkJCSAqIGJlbG9uZ2luZyB0byBEYXRhVGFibGVzLiBUaGlzIGlzIEZBUiBmcm9tIGJ1bGxldCBwcm9vZgoJCQkgKi8KCQkJdmFyIHNPbGROYW1lPSIiLCBpT2xkVGltZT05OTk5OTk5OTk5OTk5OwoJCQl2YXIgaUxlbmd0aCA9IF9mblJlYWRDb29raWUoIHNOYW1lRmlsZSApIT09bnVsbCA/IGRvY3VtZW50LmNvb2tpZS5sZW5ndGggOiAKCQkJCXNGdWxsQ29va2llLmxlbmd0aCArIGRvY3VtZW50LmNvb2tpZS5sZW5ndGg7CgkJCQoJCQlpZiAoIGlMZW5ndGgrMTAgPiA0MDk2ICkgLyogTWFnaWMgMTAgZm9yIHBhZGRpbmcgKi8KCQkJewoJCQkJdmFyIGFDb29raWVzID1kb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsKCQkJCWZvciAoIHZhciBpPTAsIGlMZW49YUNvb2tpZXMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIGFDb29raWVzW2ldLmluZGV4T2YoIHNCYXNlTmFtZSApICE9IC0xICkKCQkJCQl7CgkJCQkJCS8qIEl0J3MgYSBEYXRhVGFibGVzIGNvb2tpZSwgc28gZXZhbCBpdCBhbmQgY2hlY2sgdGhlIHRpbWUgc3RhbXAgKi8KCQkJCQkJdmFyIGFTcGxpdENvb2tpZSA9IGFDb29raWVzW2ldLnNwbGl0KCc9Jyk7CgkJCQkJCXRyeSB7IG9EYXRhID0gZXZhbCggJygnK2RlY29kZVVSSUNvbXBvbmVudChhU3BsaXRDb29raWVbMV0pKycpJyApOyB9CgkJCQkJCWNhdGNoKCBlICkgeyBjb250aW51ZTsgfQoJCQkJCQkKCQkJCQkJaWYgKCB0eXBlb2Ygb0RhdGEuaUNyZWF0ZSAhPSAndW5kZWZpbmVkJyAmJiBvRGF0YS5pQ3JlYXRlIDwgaU9sZFRpbWUgKQoJCQkJCQl7CgkJCQkJCQlzT2xkTmFtZSA9IGFTcGxpdENvb2tpZVswXTsKCQkJCQkJCWlPbGRUaW1lID0gb0RhdGEuaUNyZWF0ZTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJaWYgKCBzT2xkTmFtZSAhPT0gIiIgKQoJCQkJewoJCQkJCWRvY3VtZW50LmNvb2tpZSA9IHNPbGROYW1lKyI9OyBleHBpcmVzPVRodSwgMDEtSmFuLTE5NzAgMDA6MDA6MDEgR01UOyBwYXRoPSIrCgkJCQkJCWFQYXJ0cy5qb2luKCcvJykgKyAiLyI7CgkJCQl9CgkJCX0KCQkJCgkJCWRvY3VtZW50LmNvb2tpZSA9IHNGdWxsQ29va2llOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5SZWFkQ29va2llCgkJICogUHVycG9zZTogIFJlYWQgYW4gb2xkIGNvb2tpZSB0byBnZXQgYSBjb29raWUgd2l0aCBhbiBvbGQgdGFibGUgc3RhdGUKCQkgKiBSZXR1cm5zOiAgc3RyaW5nOiAtIGNvbnRlbnRzIG9mIHRoZSBjb29raWUgLSBvciBudWxsIGlmIG5vIGNvb2tpZSB3aXRoIHRoYXQgbmFtZSBmb3VuZAoJCSAqIElucHV0czogICBzdHJpbmc6c05hbWUgLSBuYW1lIG9mIHRoZSBjb29raWUgdG8gcmVhZAoJCSAqLwoJCWZ1bmN0aW9uIF9mblJlYWRDb29raWUgKCBzTmFtZSApCgkJewoJCQl2YXIKCQkJCWFQYXJ0cyA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgnLycpLAoJCQkJc05hbWVFUSA9IHNOYW1lICsgJ18nICsgYVBhcnRzW2FQYXJ0cy5sZW5ndGgtMV0ucmVwbGFjZSgvW1wvOl0vZywiIikudG9Mb3dlckNhc2UoKSArICc9JywKCQkJIAlzQ29va2llQ29udGVudHMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsKCQkJCgkJCWZvciggdmFyIGk9MCA7IGk8c0Nvb2tpZUNvbnRlbnRzLmxlbmd0aCA7IGkrKyApCgkJCXsKCQkJCXZhciBjID0gc0Nvb2tpZUNvbnRlbnRzW2ldOwoJCQkJCgkJCQl3aGlsZSAoYy5jaGFyQXQoMCk9PScgJykKCQkJCXsKCQkJCQljID0gYy5zdWJzdHJpbmcoMSxjLmxlbmd0aCk7CgkJCQl9CgkJCQkKCQkJCWlmIChjLmluZGV4T2Yoc05hbWVFUSkgPT09IDApCgkJCQl7CgkJCQkJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCggYy5zdWJzdHJpbmcoc05hbWVFUS5sZW5ndGgsYy5sZW5ndGgpICk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIG51bGw7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkRldGVjdEhlYWRlcgoJCSAqIFB1cnBvc2U6ICBVc2UgdGhlIERPTSBzb3VyY2UgdG8gY3JlYXRlIHVwIGFuIGFycmF5IG9mIGhlYWRlciBjZWxscy4gVGhlIGlkZWEgaGVyZSBpcyB0bwoJCSAqICAgICAgICAgICBjcmVhdGUgYSBsYXlvdXQgZ3JpZCAoYXJyYXkpIG9mIHJvd3MgeCBjb2x1bW5zLCB3aGljaCBjb250YWlucyBhIHJlZmVyZW5jZQoJCSAqICAgICAgICAgICB0byB0aGUgY2VsbCB0aGF0IHRoYXQgcG9pbnQgaW4gdGhlIGdyaWQgKHJlZ2FyZGxlc3Mgb2YgY29sL3Jvd3NwYW4pLCBzdWNoIHRoYXQKCQkgKiAgICAgICAgICAgYW55IGNvbHVtbiAvIHJvdyBjb3VsZCBiZSByZW1vdmVkIGFuZCB0aGUgbmV3IGdyaWQgY29uc3RydWN0ZWQKCQkgKiBSZXR1cm5zOiAgdm9pZAoJCSAqIE91dHB1dHM6ICBhcnJheSBvYmplY3Q6YUxheW91dCAtIEFycmF5IHRvIHN0b3JlIHRoZSBjYWxjdWxhdGVkIGxheW91dCBpbgoJCSAqIElucHV0czogICBub2RlOm5UaGVhZCAtIFRoZSBoZWFkZXIvZm9vdGVyIGVsZW1lbnQgZm9yIHRoZSB0YWJsZQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkRldGVjdEhlYWRlciAoIGFMYXlvdXQsIG5UaGVhZCApCgkJewoJCQl2YXIgblRycyA9IG5UaGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKTsKCQkJdmFyIG5DZWxsOwoJCQl2YXIgaSwgaiwgaywgbCwgaUxlbiwgakxlbiwgaUNvbFNoaWZ0ZWQ7CgkJCXZhciBmblNoaWZ0Q29sID0gZnVuY3Rpb24gKCBhLCBpLCBqICkgewoJCQkJd2hpbGUgKCB0eXBlb2YgYVtpXVtqXSAhPSAndW5kZWZpbmVkJyApIHsKCQkJCQlqKys7CgkJCQl9CgkJCQlyZXR1cm4gajsKCQkJfTsKCgkJCWFMYXlvdXQuc3BsaWNlKCAwLCBhTGF5b3V0Lmxlbmd0aCApOwoJCQkKCQkJLyogV2Uga25vdyBob3cgbWFueSByb3dzIHRoZXJlIGFyZSBpbiB0aGUgbGF5b3V0IC0gc28gcHJlcCBpdCAqLwoJCQlmb3IgKCBpPTAsIGlMZW49blRycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlhTGF5b3V0LnB1c2goIFtdICk7CgkJCX0KCQkJCgkJCS8qIENhbGN1bGF0ZSBhIGxheW91dCBhcnJheSAqLwoJCQlmb3IgKCBpPTAsIGlMZW49blRycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQl2YXIgaUNvbHVtbiA9IDA7CgkJCQkKCQkJCS8qIEZvciBldmVyeSBjZWxsIGluIHRoZSByb3cuLi4gKi8KCQkJCWZvciAoIGo9MCwgakxlbj1uVHJzW2ldLmNoaWxkTm9kZXMubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJCXsKCQkJCQluQ2VsbCA9IG5UcnNbaV0uY2hpbGROb2Rlc1tqXTsKCgkJCQkJaWYgKCBuQ2VsbC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09ICJURCIgfHwKCQkJCQkgICAgIG5DZWxsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT0gIlRIIiApCgkJCQkJewoJCQkJCQkvKiBHZXQgdGhlIGNvbCBhbmQgcm93c3BhbiBhdHRyaWJ1dGVzIGZyb20gdGhlIERPTSBhbmQgc2FuaXRpc2UgdGhlbSAqLwoJCQkJCQl2YXIgaUNvbHNwYW4gPSBuQ2VsbC5nZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nKSAqIDE7CgkJCQkJCXZhciBpUm93c3BhbiA9IG5DZWxsLmdldEF0dHJpYnV0ZSgncm93c3BhbicpICogMTsKCQkJCQkJaUNvbHNwYW4gPSAoIWlDb2xzcGFuIHx8IGlDb2xzcGFuPT09MCB8fCBpQ29sc3Bhbj09PTEpID8gMSA6IGlDb2xzcGFuOwoJCQkJCQlpUm93c3BhbiA9ICghaVJvd3NwYW4gfHwgaVJvd3NwYW49PT0wIHx8IGlSb3dzcGFuPT09MSkgPyAxIDogaVJvd3NwYW47CgoJCQkJCQkvKiBUaGVyZSBtaWdodCBiZSBjb2xzcGFuIGNlbGxzIGFscmVhZHkgaW4gdGhpcyByb3csIHNvIHNoaWZ0IG91ciB0YXJnZXQgCgkJCQkJCSAqIGFjY29yZGluZ2x5CgkJCQkJCSAqLwoJCQkJCQlpQ29sU2hpZnRlZCA9IGZuU2hpZnRDb2woIGFMYXlvdXQsIGksIGlDb2x1bW4gKTsKCQkJCQkJCgkJCQkJCS8qIElmIHRoZXJlIGlzIGNvbCAvIHJvd3NwYW4sIGNvcHkgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlIGxheW91dCBncmlkICovCgkJCQkJCWZvciAoIGw9MCA7IGw8aUNvbHNwYW4gOyBsKysgKQoJCQkJCQl7CgkJCQkJCQlmb3IgKCBrPTAgOyBrPGlSb3dzcGFuIDsgaysrICkKCQkJCQkJCXsKCQkJCQkJCQlhTGF5b3V0W2kra11baUNvbFNoaWZ0ZWQrbF0gPSB7CgkJCQkJCQkJCSJjZWxsIjogbkNlbGwsCgkJCQkJCQkJCSJ1bmlxdWUiOiBpQ29sc3BhbiA9PSAxID8gdHJ1ZSA6IGZhbHNlCgkJCQkJCQkJfTsKCQkJCQkJCQlhTGF5b3V0W2kra10ublRyID0gblRyc1tpXTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5HZXRVbmlxdWVUaHMKCQkgKiBQdXJwb3NlOiAgR2V0IGFuIGFycmF5IG9mIHVuaXF1ZSB0aCBlbGVtZW50cywgb25lIGZvciBlYWNoIGNvbHVtbgoJCSAqIFJldHVybnM6ICBhcnJheSBub2RlOmFSZXR1cm4gLSBsaXN0IG9mIHVuaXF1ZSB0aHMKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIG5vZGU6bkhlYWRlciAtIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBsYXlvdXQgZnJvbSB0aGlzIG5vZGUgLSBvcHRpb25hbAoJCSAqICAgICAgICAgICBhcnJheSBvYmplY3Q6YUxheW91dCAtIHRoZWFkL3Rmb290IGxheW91dCBmcm9tIF9mbkRldGVjdEhlYWRlciAtIG9wdGlvbmFsCgkJICovCgkJZnVuY3Rpb24gX2ZuR2V0VW5pcXVlVGhzICggb1NldHRpbmdzLCBuSGVhZGVyLCBhTGF5b3V0ICkKCQl7CgkJCXZhciBhUmV0dXJuID0gW107CgkJCWlmICggdHlwZW9mIGFMYXlvdXQgPT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQlhTGF5b3V0ID0gb1NldHRpbmdzLmFvSGVhZGVyOwoJCQkJaWYgKCB0eXBlb2YgbkhlYWRlciAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJYUxheW91dCA9IFtdOwoJCQkJCV9mbkRldGVjdEhlYWRlciggYUxheW91dCwgbkhlYWRlciApOwoJCQkJfQoJCQl9CgoJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWFMYXlvdXQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJZm9yICggdmFyIGo9MCwgakxlbj1hTGF5b3V0W2ldLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQl7CgkJCQkJaWYgKCBhTGF5b3V0W2ldW2pdLnVuaXF1ZSAmJiAKCQkJCQkJICh0eXBlb2YgYVJldHVybltqXSA9PSAndW5kZWZpbmVkJyB8fCAhb1NldHRpbmdzLmJTb3J0Q2VsbHNUb3ApICkKCQkJCQl7CgkJCQkJCWFSZXR1cm5bal0gPSBhTGF5b3V0W2ldW2pdLmNlbGw7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCQoJCQlyZXR1cm4gYVJldHVybjsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuU2Nyb2xsQmFyV2lkdGgKCQkgKiBQdXJwb3NlOiAgR2V0IHRoZSB3aWR0aCBvZiBhIHNjcm9sbCBiYXIgaW4gdGhpcyBicm93c2VyIGJlaW5nIHVzZWQKCQkgKiBSZXR1cm5zOiAgaW50OiAtIHdpZHRoIGluIHBpeGVscwoJCSAqIElucHV0czogICAtCgkJICogTm90ZXM6ICAgIEFsbCBjcmVkaXQgZm9yIHRoaXMgZnVuY3Rpb24gYmVsb25ncyB0byBBbGV4YW5kcmUgR29tZXMuIFRoYW5rcyBmb3Igc2hhcmluZyEKCQkgKiAgIGh0dHA6Ly93d3cuYWxleGFuZHJlLWdvbWVzLmNvbS8/cD0xMTUKCQkgKi8KCQlmdW5jdGlvbiBfZm5TY3JvbGxCYXJXaWR0aCAoKQoJCXsgIAoJCQl2YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7ICAKCQkJdmFyIHN0eWxlID0gaW5uZXIuc3R5bGU7CgkJCXN0eWxlLndpZHRoID0gIjEwMCUiOyAgCgkJCXN0eWxlLmhlaWdodCA9ICIyMDBweCI7ICAKCQkJCgkJCXZhciBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyAgCgkJCXN0eWxlID0gb3V0ZXIuc3R5bGU7CgkJCXN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsgIAoJCQlzdHlsZS50b3AgPSAiMHB4IjsgIAoJCQlzdHlsZS5sZWZ0ID0gIjBweCI7ICAKCQkJc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOyAgCgkJCXN0eWxlLndpZHRoID0gIjIwMHB4IjsgIAoJCQlzdHlsZS5oZWlnaHQgPSAiMTUwcHgiOyAgCgkJCXN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7ICAKCQkJb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOyAgCgkJCQoJCQlkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTsgIAoJCQl2YXIgdzEgPSBpbm5lci5vZmZzZXRXaWR0aDsgIAoJCQlvdXRlci5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnOyAgCgkJCXZhciB3MiA9IGlubmVyLm9mZnNldFdpZHRoOyAgCgkJCWlmICggdzEgPT0gdzIgKQoJCQl7CgkJCQl3MiA9IG91dGVyLmNsaWVudFdpZHRoOyAgCgkJCX0KCQkJCgkJCWRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3V0ZXIpOyAKCQkJcmV0dXJuICh3MSAtIHcyKTsgIAoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5BcHBseVRvQ2hpbGRyZW4KCQkgKiBQdXJwb3NlOiAgQXBwbHkgYSBnaXZlbiBmdW5jdGlvbiB0byB0aGUgZGlzcGxheSBjaGlsZCBub2RlcyBvZiBhbiBlbGVtZW50IGFycmF5ICh0eXBpY2FsbHkKCQkgKiAgIFREIGNoaWxkcmVuIG9mIFRSIHJvd3MKCQkgKiBSZXR1cm5zOiAgLSAoZG9uZSBieSByZWZlcmVuY2UpCgkJICogSW5wdXRzOiAgIGZ1bmN0aW9uOmZuIC0gTWV0aG9kIHRvIGFwcGx5IHRvIHRoZSBvYmplY3RzCgkJICogICAgICAgICAgIGFycmF5IG5vZGVzOmFuMSAtIExpc3Qgb2YgZWxlbWVudHMgdG8gbG9vayB0aHJvdWdoIGZvciBkaXNwbGF5IGNoaWxkcmVuCgkJICogICAgICAgICAgIGFycmF5IG5vZGVzOmFuMiAtIEFub3RoZXIgbGlzdCAoaWRlbnRpY2FsIHN0cnVjdHVyZSB0byB0aGUgZmlyc3QpIC0gb3B0aW9uYWwKCQkgKi8KCQlmdW5jdGlvbiBfZm5BcHBseVRvQ2hpbGRyZW4oIGZuLCBhbjEsIGFuMiApCgkJewoJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWFuMS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlmb3IgKCB2YXIgaj0wLCBqTGVuPWFuMVtpXS5jaGlsZE5vZGVzLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQl7CgkJCQkJaWYgKCBhbjFbaV0uY2hpbGROb2Rlc1tqXS5ub2RlVHlwZSA9PSAxICkKCQkJCQl7CgkJCQkJCWlmICggdHlwZW9mIGFuMiAhPSAndW5kZWZpbmVkJyApCgkJCQkJCXsKCQkJCQkJCWZuKCBhbjFbaV0uY2hpbGROb2Rlc1tqXSwgYW4yW2ldLmNoaWxkTm9kZXNbal0gKTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCWZuKCBhbjFbaV0uY2hpbGROb2Rlc1tqXSApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbk1hcAoJCSAqIFB1cnBvc2U6ICBTZWUgaWYgYSBwcm9wZXJ0eSBpcyBkZWZpbmVkIG9uIG9uZSBvYmplY3QsIGlmIHNvIGFzc2lnbiBpdCB0byB0aGUgb3RoZXIgb2JqZWN0CgkJICogUmV0dXJuczogIC0gKGRvbmUgYnkgcmVmZXJlbmNlKQoJCSAqIElucHV0czogICBvYmplY3Q6b1JldCAtIHRhcmdldCBvYmplY3QKCQkgKiAgICAgICAgICAgb2JqZWN0Om9TcmMgLSBzb3VyY2Ugb2JqZWN0CgkJICogICAgICAgICAgIHN0cmluZzpzTmFtZSAtIHByb3BlcnR5CgkJICogICAgICAgICAgIHN0cmluZzpzTWFwcGVkTmFtZSAtIG5hbWUgdG8gbWFwIHRvbyAtIG9wdGlvbmFsLCBzTmFtZSB1c2VkIGlmIG5vdCBnaXZlbgoJCSAqLwoJCWZ1bmN0aW9uIF9mbk1hcCggb1JldCwgb1NyYywgc05hbWUsIHNNYXBwZWROYW1lICkKCQl7CgkJCWlmICggdHlwZW9mIHNNYXBwZWROYW1lID09ICd1bmRlZmluZWQnICkKCQkJewoJCQkJc01hcHBlZE5hbWUgPSBzTmFtZTsKCQkJfQoJCQlpZiAoIHR5cGVvZiBvU3JjW3NOYW1lXSAhPSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCW9SZXRbc01hcHBlZE5hbWVdID0gb1NyY1tzTmFtZV07CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuR2V0Um93RGF0YQoJCSAqIFB1cnBvc2U6ICBHZXQgYW4gYXJyYXkgb2YgZGF0YSBmb3IgYSBnaXZlbiByb3cgZnJvbSB0aGUgaW50ZXJuYWwgZGF0YSBjYWNoZQoJCSAqIFJldHVybnM6ICBhcnJheTogLSBEYXRhIGFycmF5CgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBpbnQ6aVJvdyAtIGFvRGF0YSByb3cgaWQKCQkgKiAgICAgICAgICAgc3RyaW5nOnNTcGVjaWZpYyAtIGRhdGEgZ2V0IHR5cGUgKCd0eXBlJyAnZmlsdGVyJyAnc29ydCcpCgkJICovCgkJZnVuY3Rpb24gX2ZuR2V0Um93RGF0YSggb1NldHRpbmdzLCBpUm93LCBzU3BlY2lmaWMgKQoJCXsKCQkJdmFyIG91dCA9IFtdOwoJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPW9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJb3V0LnB1c2goIF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGksIHNTcGVjaWZpYyApICk7CgkJCX0KCQkJcmV0dXJuIG91dDsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuR2V0Q2VsbERhdGEKCQkgKiBQdXJwb3NlOiAgR2V0IHRoZSBkYXRhIGZvciBhIGdpdmVuIGNlbGwgZnJvbSB0aGUgaW50ZXJuYWwgY2FjaGUsIHRha2luZyBpbnRvIGFjY291bnQgZGF0YSBtYXBwaW5nCgkJICogUmV0dXJuczogICo6IC0gQ2VsbCBkYXRhCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBpbnQ6aVJvdyAtIGFvRGF0YSByb3cgaWQKCQkgKiAgICAgICAgICAgaW50OmlDb2wgLSBDb2x1bW4gaW5kZXgKCQkgKiAgICAgICAgICAgc3RyaW5nOnNTcGVjaWZpYyAtIGRhdGEgZ2V0IHR5cGUgKCdkaXNwbGF5JywgJ3R5cGUnICdmaWx0ZXInICdzb3J0JykKCQkgKi8KCQlmdW5jdGlvbiBfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpQ29sLCBzU3BlY2lmaWMgKQoJCXsKCQkJdmFyIHNEYXRhOwoJCQl2YXIgb0NvbCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbF07CgkJCXZhciBvRGF0YSA9IG9TZXR0aW5ncy5hb0RhdGFbaVJvd10uX2FEYXRhOwoKCQkJaWYgKCAoc0RhdGE9b0NvbC5mbkdldERhdGEoIG9EYXRhICkpID09PSB1bmRlZmluZWQgKQoJCQl7CgkJCQlpZiAoIG9TZXR0aW5ncy5pRHJhd0Vycm9yICE9IG9TZXR0aW5ncy5pRHJhdyAmJiBvQ29sLnNEZWZhdWx0Q29udGVudCA9PT0gbnVsbCApCgkJCQl7CgkJCQkJX2ZuTG9nKCBvU2V0dGluZ3MsIDAsICJSZXF1ZXN0ZWQgdW5rbm93biBwYXJhbWV0ZXIgJyIrb0NvbC5tRGF0YVByb3ArCgkJCQkJCSInIGZyb20gdGhlIGRhdGEgc291cmNlIGZvciByb3cgIitpUm93ICk7CgkJCQkJb1NldHRpbmdzLmlEcmF3RXJyb3IgPSBvU2V0dGluZ3MuaURyYXc7CgkJCQl9CgkJCQlyZXR1cm4gb0NvbC5zRGVmYXVsdENvbnRlbnQ7CgkJCX0KCgkJCS8qIFdoZW4gdGhlIGRhdGEgc291cmNlIGlzIG51bGwsIHdlIGNhbiB1c2UgZGVmYXVsdCBjb2x1bW4gZGF0YSAqLwoJCQlpZiAoIHNEYXRhID09PSBudWxsICYmIG9Db2wuc0RlZmF1bHRDb250ZW50ICE9PSBudWxsICkKCQkJewoJCQkJc0RhdGEgPSBvQ29sLnNEZWZhdWx0Q29udGVudDsKCQkJfQoKCQkJaWYgKCBzU3BlY2lmaWMgPT0gJ2Rpc3BsYXknICYmIHNEYXRhID09PSBudWxsICkKCQkJewoJCQkJcmV0dXJuICcnOwoJCQl9CgkJCXJldHVybiBzRGF0YTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuU2V0Q2VsbERhdGEKCQkgKiBQdXJwb3NlOiAgU2V0IHRoZSB2YWx1ZSBmb3IgYSBzcGVjaWZpYyBjZWxsLCBpbnRvIHRoZSBpbnRlcm5hbCBkYXRhIGNhY2hlCgkJICogUmV0dXJuczogICo6IC0gQ2VsbCBkYXRhCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBpbnQ6aVJvdyAtIGFvRGF0YSByb3cgaWQKCQkgKiAgICAgICAgICAgaW50OmlDb2wgLSBDb2x1bW4gaW5kZXgKCQkgKiAgICAgICAgICAgKjp2YWwgLSBWYWx1ZSB0byBzZXQKCQkgKi8KCQlmdW5jdGlvbiBfZm5TZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpQ29sLCB2YWwgKQoJCXsKCQkJdmFyIG9Db2wgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2xdOwoJCQl2YXIgb0RhdGEgPSBvU2V0dGluZ3MuYW9EYXRhW2lSb3ddLl9hRGF0YTsKCgkJCW9Db2wuZm5TZXREYXRhKCBvRGF0YSwgdmFsICk7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkdldE9iamVjdERhdGFGbgoJCSAqIFB1cnBvc2U6ICBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGdldCBkYXRhIGZyb20gYSBzb3VyY2Ugb2JqZWN0LCB0YWtpbmcKCQkgKiAgICAgICAgICAgaW50byBhY2NvdW50IHRoZSBhYmlsaXR5IHRvIHVzZSBuZXN0ZWQgb2JqZWN0cyBhcyBhIHNvdXJjZQoJCSAqIFJldHVybnM6ICBmdW5jdGlvbjogLSBEYXRhIGdldCBmdW5jdGlvbgoJCSAqIElucHV0czogICBzdHJpbmd8aW50fGZ1bmN0aW9uOm1Tb3VyY2UgLSBUaGUgZGF0YSBzb3VyY2UgZm9yIHRoZSBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5HZXRPYmplY3REYXRhRm4oIG1Tb3VyY2UgKQoJCXsKCQkJaWYgKCBtU291cmNlID09PSBudWxsICkKCQkJewoJCQkJLyogR2l2ZSBhbiBlbXB0eSBzdHJpbmcgZm9yIHJlbmRlcmluZyAvIHNvcnRpbmcgZXRjICovCgkJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHsKCQkJCQlyZXR1cm4gbnVsbDsKCQkJCX07CgkJCX0KCQkJZWxzZSBpZiAoIHR5cGVvZiBtU291cmNlID09ICdmdW5jdGlvbicgKQoJCQl7CgkJCSAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHsKCQkJICAgICAgICByZXR1cm4gbVNvdXJjZSggZGF0YSApOwoJCQkgICAgfTsKCQkJfQoJCQllbHNlIGlmICggdHlwZW9mIG1Tb3VyY2UgPT0gJ3N0cmluZycgJiYgbVNvdXJjZS5pbmRleE9mKCcuJykgIT0gLTEgKQoJCQl7CgkJCQkvKiBJZiB0aGVyZSBpcyBhIC4gaW4gdGhlIHNvdXJjZSBzdHJpbmcgdGhlbiB0aGUgZGF0YSBzb3VyY2UgaXMgaW4gYSBuZXN0ZWQgb2JqZWN0CgkJCQkgKiB3ZSBwcm92aWRlIHR3byAncXVpY2snIGZ1bmN0aW9ucyBmb3IgdGhlIGxvb2sgdXAgdG8gc3BlZWQgdXAgdGhlIG1vc3QgY29tbW9uCgkJCQkgKiBvcGVyYXRpb24sIGFuZCBhIGdlbmVyYWxpc2VkIG9uZSBmb3Igd2hlbiBpdCBpcyBuZWVkZWQKCQkJCSAqLwoJCQkJdmFyIGEgPSBtU291cmNlLnNwbGl0KCcuJyk7CgkJCQlpZiAoIGEubGVuZ3RoID09IDIgKQoJCQkJewoJCQkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSkgewoJCQkJCQlyZXR1cm4gZGF0YVsgYVswXSBdWyBhWzFdIF07CgkJCQkJfTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBhLmxlbmd0aCA9PSAzICkKCQkJCXsKCQkJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHsKCQkJCQkJcmV0dXJuIGRhdGFbIGFbMF0gXVsgYVsxXSBdWyBhWzJdIF07CgkJCQkJfTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHsKCQkJCQkJZm9yICggdmFyIGk9MCwgaUxlbj1hLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQkJCXsKCQkJCQkJCWRhdGEgPSBkYXRhWyBhW2ldIF07CgkJCQkJCX0KCQkJCQkJcmV0dXJuIGRhdGE7CgkJCQkJfTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qIEFycmF5IG9yIGZsYXQgb2JqZWN0IG1hcHBpbmcgKi8KCQkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSkgewoJCQkJCXJldHVybiBkYXRhW21Tb3VyY2VdOwkKCQkJCX07CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuU2V0T2JqZWN0RGF0YUZuCgkJICogUHVycG9zZTogIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IGRhdGEgZnJvbSBhIHNvdXJjZSBvYmplY3QsIHRha2luZwoJCSAqICAgICAgICAgICBpbnRvIGFjY291bnQgdGhlIGFiaWxpdHkgdG8gdXNlIG5lc3RlZCBvYmplY3RzIGFzIGEgc291cmNlCgkJICogUmV0dXJuczogIGZ1bmN0aW9uOiAtIERhdGEgc2V0IGZ1bmN0aW9uCgkJICogSW5wdXRzOiAgIHN0cmluZ3xpbnR8ZnVuY3Rpb246bVNvdXJjZSAtIFRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mblNldE9iamVjdERhdGFGbiggbVNvdXJjZSApCgkJewoJCQlpZiAoIG1Tb3VyY2UgPT09IG51bGwgKQoJCQl7CgkJCQkvKiBOb3RoaW5nIHRvIGRvIHdoZW4gdGhlIGRhdGEgc291cmNlIGlzIG51bGwgKi8KCQkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSwgdmFsKSB7fTsKCQkJfQoJCQllbHNlIGlmICggdHlwZW9mIG1Tb3VyY2UgPT0gJ2Z1bmN0aW9uJyApCgkJCXsKCQkJICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSwgdmFsKSB7CgkJCSAgICAgICAgcmV0dXJuIG1Tb3VyY2UoIGRhdGEsIHZhbCApOwoJCQkgICAgfTsKCQkJfQoJCQllbHNlIGlmICggdHlwZW9mIG1Tb3VyY2UgPT0gJ3N0cmluZycgJiYgbVNvdXJjZS5pbmRleE9mKCcuJykgIT0gLTEgKQoJCQl7CgkJCQkvKiBMaWtlIHRoZSBnZXQsIHdlIG5lZWQgdG8gZ2V0IGRhdGEgZnJvbSBhIG5lc3RlZCBvYmplY3QuIEFnYWluIHR3byBmYXN0IGxvb2t1cAoJCQkJICogZnVuY3Rpb25zIGFyZSBwcm92aWRlZCwgYW5kIGEgZ2VuZXJhbGlzZWQgb25lLgoJCQkJICovCgkJCQl2YXIgYSA9IG1Tb3VyY2Uuc3BsaXQoJy4nKTsKCQkJCWlmICggYS5sZW5ndGggPT0gMiApCgkJCQl7CgkJCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCB2YWwpIHsKCQkJCQkJZGF0YVsgYVswXSBdWyBhWzFdIF0gPSB2YWw7CgkJCQkJfTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBhLmxlbmd0aCA9PSAzICkKCQkJCXsKCQkJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEsIHZhbCkgewoJCQkJCQlkYXRhWyBhWzBdIF1bIGFbMV0gXVsgYVsyXSBdID0gdmFsOwoJCQkJCX07CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCB2YWwpIHsKCQkJCQkJZm9yICggdmFyIGk9MCwgaUxlbj1hLmxlbmd0aC0xIDsgaTxpTGVuIDsgaSsrICkKCQkJCQkJewoJCQkJCQkJZGF0YSA9IGRhdGFbIGFbaV0gXTsKCQkJCQkJfQoJCQkJCQlkYXRhWyBhW2EubGVuZ3RoLTFdIF0gPSB2YWw7CgkJCQkJfTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qIEFycmF5IG9yIGZsYXQgb2JqZWN0IG1hcHBpbmcgKi8KCQkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSwgdmFsKSB7CgkJCQkJZGF0YVttU291cmNlXSA9IHZhbDsJCgkJCQl9OwoJCQl9CgkJfQoKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBBUEkKCQkgKiBJJ20gbm90IGhhcHB5IHdpdGggdGhpcyBzb2x1dGlvbi4uLiAtIFRvIGJlIGZpeGVkIGluIDIuMAoJCSAqLwoJCXRoaXMub0FwaS5fZm5FeHRlcm5BcGlGdW5jID0gX2ZuRXh0ZXJuQXBpRnVuYzsKCQl0aGlzLm9BcGkuX2ZuSW5pdGFsaXNlID0gX2ZuSW5pdGFsaXNlOwoJCXRoaXMub0FwaS5fZm5Jbml0Q29tcGxldGUgPSBfZm5Jbml0Q29tcGxldGU7CgkJdGhpcy5vQXBpLl9mbkxhbmd1YWdlUHJvY2VzcyA9IF9mbkxhbmd1YWdlUHJvY2VzczsKCQl0aGlzLm9BcGkuX2ZuQWRkQ29sdW1uID0gX2ZuQWRkQ29sdW1uOwoJCXRoaXMub0FwaS5fZm5Db2x1bW5PcHRpb25zID0gX2ZuQ29sdW1uT3B0aW9uczsKCQl0aGlzLm9BcGkuX2ZuQWRkRGF0YSA9IF9mbkFkZERhdGE7CgkJdGhpcy5vQXBpLl9mbkNyZWF0ZVRyID0gX2ZuQ3JlYXRlVHI7CgkJdGhpcy5vQXBpLl9mbkdhdGhlckRhdGEgPSBfZm5HYXRoZXJEYXRhOwoJCXRoaXMub0FwaS5fZm5CdWlsZEhlYWQgPSBfZm5CdWlsZEhlYWQ7CgkJdGhpcy5vQXBpLl9mbkRyYXdIZWFkID0gX2ZuRHJhd0hlYWQ7CgkJdGhpcy5vQXBpLl9mbkRyYXcgPSBfZm5EcmF3OwoJCXRoaXMub0FwaS5fZm5SZURyYXcgPSBfZm5SZURyYXc7CgkJdGhpcy5vQXBpLl9mbkFqYXhVcGRhdGUgPSBfZm5BamF4VXBkYXRlOwoJCXRoaXMub0FwaS5fZm5BamF4VXBkYXRlRHJhdyA9IF9mbkFqYXhVcGRhdGVEcmF3OwoJCXRoaXMub0FwaS5fZm5BZGRPcHRpb25zSHRtbCA9IF9mbkFkZE9wdGlvbnNIdG1sOwoJCXRoaXMub0FwaS5fZm5GZWF0dXJlSHRtbFRhYmxlID0gX2ZuRmVhdHVyZUh0bWxUYWJsZTsKCQl0aGlzLm9BcGkuX2ZuU2Nyb2xsRHJhdyA9IF9mblNjcm9sbERyYXc7CgkJdGhpcy5vQXBpLl9mbkFqdXN0Q29sdW1uU2l6aW5nID0gX2ZuQWp1c3RDb2x1bW5TaXppbmc7CgkJdGhpcy5vQXBpLl9mbkZlYXR1cmVIdG1sRmlsdGVyID0gX2ZuRmVhdHVyZUh0bWxGaWx0ZXI7CgkJdGhpcy5vQXBpLl9mbkZpbHRlckNvbXBsZXRlID0gX2ZuRmlsdGVyQ29tcGxldGU7CgkJdGhpcy5vQXBpLl9mbkZpbHRlckN1c3RvbSA9IF9mbkZpbHRlckN1c3RvbTsKCQl0aGlzLm9BcGkuX2ZuRmlsdGVyQ29sdW1uID0gX2ZuRmlsdGVyQ29sdW1uOwoJCXRoaXMub0FwaS5fZm5GaWx0ZXIgPSBfZm5GaWx0ZXI7CgkJdGhpcy5vQXBpLl9mbkJ1aWxkU2VhcmNoQXJyYXkgPSBfZm5CdWlsZFNlYXJjaEFycmF5OwoJCXRoaXMub0FwaS5fZm5CdWlsZFNlYXJjaFJvdyA9IF9mbkJ1aWxkU2VhcmNoUm93OwoJCXRoaXMub0FwaS5fZm5GaWx0ZXJDcmVhdGVTZWFyY2ggPSBfZm5GaWx0ZXJDcmVhdGVTZWFyY2g7CgkJdGhpcy5vQXBpLl9mbkRhdGFUb1NlYXJjaCA9IF9mbkRhdGFUb1NlYXJjaDsKCQl0aGlzLm9BcGkuX2ZuU29ydCA9IF9mblNvcnQ7CgkJdGhpcy5vQXBpLl9mblNvcnRBdHRhY2hMaXN0ZW5lciA9IF9mblNvcnRBdHRhY2hMaXN0ZW5lcjsKCQl0aGlzLm9BcGkuX2ZuU29ydGluZ0NsYXNzZXMgPSBfZm5Tb3J0aW5nQ2xhc3NlczsKCQl0aGlzLm9BcGkuX2ZuRmVhdHVyZUh0bWxQYWdpbmF0ZSA9IF9mbkZlYXR1cmVIdG1sUGFnaW5hdGU7CgkJdGhpcy5vQXBpLl9mblBhZ2VDaGFuZ2UgPSBfZm5QYWdlQ2hhbmdlOwoJCXRoaXMub0FwaS5fZm5GZWF0dXJlSHRtbEluZm8gPSBfZm5GZWF0dXJlSHRtbEluZm87CgkJdGhpcy5vQXBpLl9mblVwZGF0ZUluZm8gPSBfZm5VcGRhdGVJbmZvOwoJCXRoaXMub0FwaS5fZm5GZWF0dXJlSHRtbExlbmd0aCA9IF9mbkZlYXR1cmVIdG1sTGVuZ3RoOwoJCXRoaXMub0FwaS5fZm5GZWF0dXJlSHRtbFByb2Nlc3NpbmcgPSBfZm5GZWF0dXJlSHRtbFByb2Nlc3Npbmc7CgkJdGhpcy5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5ID0gX2ZuUHJvY2Vzc2luZ0Rpc3BsYXk7CgkJdGhpcy5vQXBpLl9mblZpc2libGVUb0NvbHVtbkluZGV4ID0gX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXg7CgkJdGhpcy5vQXBpLl9mbkNvbHVtbkluZGV4VG9WaXNpYmxlID0gX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGU7CgkJdGhpcy5vQXBpLl9mbk5vZGVUb0RhdGFJbmRleCA9IF9mbk5vZGVUb0RhdGFJbmRleDsKCQl0aGlzLm9BcGkuX2ZuVmlzYmxlQ29sdW1ucyA9IF9mblZpc2JsZUNvbHVtbnM7CgkJdGhpcy5vQXBpLl9mbkNhbGN1bGF0ZUVuZCA9IF9mbkNhbGN1bGF0ZUVuZDsKCQl0aGlzLm9BcGkuX2ZuQ29udmVydFRvV2lkdGggPSBfZm5Db252ZXJ0VG9XaWR0aDsKCQl0aGlzLm9BcGkuX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzID0gX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzOwoJCXRoaXMub0FwaS5fZm5TY3JvbGxpbmdXaWR0aEFkanVzdCA9IF9mblNjcm9sbGluZ1dpZHRoQWRqdXN0OwoJCXRoaXMub0FwaS5fZm5HZXRXaWRlc3ROb2RlID0gX2ZuR2V0V2lkZXN0Tm9kZTsKCQl0aGlzLm9BcGkuX2ZuR2V0TWF4TGVuU3RyaW5nID0gX2ZuR2V0TWF4TGVuU3RyaW5nOwoJCXRoaXMub0FwaS5fZm5TdHJpbmdUb0NzcyA9IF9mblN0cmluZ1RvQ3NzOwoJCXRoaXMub0FwaS5fZm5BcnJheUNtcCA9IF9mbkFycmF5Q21wOwoJCXRoaXMub0FwaS5fZm5EZXRlY3RUeXBlID0gX2ZuRGV0ZWN0VHlwZTsKCQl0aGlzLm9BcGkuX2ZuU2V0dGluZ3NGcm9tTm9kZSA9IF9mblNldHRpbmdzRnJvbU5vZGU7CgkJdGhpcy5vQXBpLl9mbkdldERhdGFNYXN0ZXIgPSBfZm5HZXREYXRhTWFzdGVyOwoJCXRoaXMub0FwaS5fZm5HZXRUck5vZGVzID0gX2ZuR2V0VHJOb2RlczsKCQl0aGlzLm9BcGkuX2ZuR2V0VGROb2RlcyA9IF9mbkdldFRkTm9kZXM7CgkJdGhpcy5vQXBpLl9mbkVzY2FwZVJlZ2V4ID0gX2ZuRXNjYXBlUmVnZXg7CgkJdGhpcy5vQXBpLl9mbkRlbGV0ZUluZGV4ID0gX2ZuRGVsZXRlSW5kZXg7CgkJdGhpcy5vQXBpLl9mblJlT3JkZXJJbmRleCA9IF9mblJlT3JkZXJJbmRleDsKCQl0aGlzLm9BcGkuX2ZuQ29sdW1uT3JkZXJpbmcgPSBfZm5Db2x1bW5PcmRlcmluZzsKCQl0aGlzLm9BcGkuX2ZuTG9nID0gX2ZuTG9nOwoJCXRoaXMub0FwaS5fZm5DbGVhclRhYmxlID0gX2ZuQ2xlYXJUYWJsZTsKCQl0aGlzLm9BcGkuX2ZuU2F2ZVN0YXRlID0gX2ZuU2F2ZVN0YXRlOwoJCXRoaXMub0FwaS5fZm5Mb2FkU3RhdGUgPSBfZm5Mb2FkU3RhdGU7CgkJdGhpcy5vQXBpLl9mbkNyZWF0ZUNvb2tpZSA9IF9mbkNyZWF0ZUNvb2tpZTsKCQl0aGlzLm9BcGkuX2ZuUmVhZENvb2tpZSA9IF9mblJlYWRDb29raWU7CgkJdGhpcy5vQXBpLl9mbkRldGVjdEhlYWRlciA9IF9mbkRldGVjdEhlYWRlcjsKCQl0aGlzLm9BcGkuX2ZuR2V0VW5pcXVlVGhzID0gX2ZuR2V0VW5pcXVlVGhzOwoJCXRoaXMub0FwaS5fZm5TY3JvbGxCYXJXaWR0aCA9IF9mblNjcm9sbEJhcldpZHRoOwoJCXRoaXMub0FwaS5fZm5BcHBseVRvQ2hpbGRyZW4gPSBfZm5BcHBseVRvQ2hpbGRyZW47CgkJdGhpcy5vQXBpLl9mbk1hcCA9IF9mbk1hcDsKCQl0aGlzLm9BcGkuX2ZuR2V0Um93RGF0YSA9IF9mbkdldFJvd0RhdGE7CgkJdGhpcy5vQXBpLl9mbkdldENlbGxEYXRhID0gX2ZuR2V0Q2VsbERhdGE7CgkJdGhpcy5vQXBpLl9mblNldENlbGxEYXRhID0gX2ZuU2V0Q2VsbERhdGE7CgkJdGhpcy5vQXBpLl9mbkdldE9iamVjdERhdGFGbiA9IF9mbkdldE9iamVjdERhdGFGbjsKCQl0aGlzLm9BcGkuX2ZuU2V0T2JqZWN0RGF0YUZuID0gX2ZuU2V0T2JqZWN0RGF0YUZuOwoJCQoJCQoJCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIENvbnN0cnVjdG9yCgkJICovCgkJCgkJLyogV2FudCB0byBiZSBhYmxlIHRvIHJlZmVyZW5jZSAidGhpcyIgaW5zaWRlIHRoZSB0aGlzLmVhY2ggZnVuY3Rpb24gKi8KCQl2YXIgX3RoYXQgPSB0aGlzOwoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKQoJCXsKCQkJdmFyIGk9MCwgaUxlbiwgaiwgakxlbiwgaywga0xlbjsKCQkJCgkJCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgcmUtaW5pdGFsaXNpbmcgYSB0YWJsZSAqLwoJCQlmb3IgKCBpPTAsIGlMZW49X2FvU2V0dGluZ3MubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJLyogQmFzZSBjaGVjayBvbiB0YWJsZSBub2RlICovCgkJCQlpZiAoIF9hb1NldHRpbmdzW2ldLm5UYWJsZSA9PSB0aGlzICkKCQkJCXsKCQkJCQlpZiAoIHR5cGVvZiBvSW5pdCA9PSAndW5kZWZpbmVkJyB8fCAKCQkJCQkgICAoIHR5cGVvZiBvSW5pdC5iUmV0cmlldmUgIT0gJ3VuZGVmaW5lZCcgJiYgb0luaXQuYlJldHJpZXZlID09PSB0cnVlICkgKQoJCQkJCXsKCQkJCQkJcmV0dXJuIF9hb1NldHRpbmdzW2ldLm9JbnN0YW5jZTsKCQkJCQl9CgkJCQkJZWxzZSBpZiAoIHR5cGVvZiBvSW5pdC5iRGVzdHJveSAhPSAndW5kZWZpbmVkJyAmJiBvSW5pdC5iRGVzdHJveSA9PT0gdHJ1ZSApCgkJCQkJewoJCQkJCQlfYW9TZXR0aW5nc1tpXS5vSW5zdGFuY2UuZm5EZXN0cm95KCk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlfZm5Mb2coIF9hb1NldHRpbmdzW2ldLCAwLCAiQ2Fubm90IHJlaW5pdGlhbGlzZSBEYXRhVGFibGUuXG5cbiIrCgkJCQkJCQkiVG8gcmV0cmlldmUgdGhlIERhdGFUYWJsZXMgb2JqZWN0IGZvciB0aGlzIHRhYmxlLCBwbGVhc2UgcGFzcyBlaXRoZXIgbm8gYXJndW1lbnRzICIrCgkJCQkJCQkidG8gdGhlIGRhdGFUYWJsZSgpIGZ1bmN0aW9uLCBvciBzZXQgYlJldHJpZXZlIHRvIHRydWUuIEFsdGVybmF0aXZlbHksIHRvIGRlc3RvcnkgIisKCQkJCQkJCSJ0aGUgb2xkIHRhYmxlIGFuZCBjcmVhdGUgYSBuZXcgb25lLCBzZXQgYkRlc3Ryb3kgdG8gdHJ1ZSAobm90ZSB0aGF0IGEgbG90IG9mICIrCgkJCQkJCQkiY2hhbmdlcyB0byB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgbWFkZSB0aHJvdWdoIHRoZSBBUEkgd2hpY2ggaXMgdXN1YWxseSBtdWNoICIrCgkJCQkJCQkiZmFzdGVyKS4iICk7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8qIElmIHRoZSBlbGVtZW50IHdlIGFyZSBpbml0aWFsaXNpbmcgaGFzIHRoZSBzYW1lIElEIGFzIGEgdGFibGUgd2hpY2ggd2FzIHByZXZpb3VzbHkKCQkJCSAqIGluaXRpYWxpc2VkLCBidXQgdGhlIHRhYmxlIG5vZGVzIGRvbid0IG1hdGNoIChmcm9tIGJlZm9yZSkgdGhlbiB3ZSBkZXN0b3J5IHRoZSBvbGQKCQkJCSAqIGluc3RhbmNlIGJ5IHNpbXBseSBkZWxldGluZyBpdC4gVGhpcyBpcyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSB0YWJsZSBoYXMgYmVlbgoJCQkJICogZGVzdHJveWVkIGJ5IG90aGVyIG1ldGhvZHMuIEFueW9uZSB1c2luZyBub24taWQgc2VsZWN0b3JzIHdpbGwgbmVlZCB0byBkbyB0aGlzIG1hbnVhbGx5CgkJCQkgKi8KCQkJCWlmICggX2FvU2V0dGluZ3NbaV0uc1RhYmxlSWQgIT09ICIiICYmIF9hb1NldHRpbmdzW2ldLnNUYWJsZUlkID09IHRoaXMuZ2V0QXR0cmlidXRlKCdpZCcpICkKCQkJCXsKCQkJCQlfYW9TZXR0aW5ncy5zcGxpY2UoIGksIDEgKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkKCQkJLyogTWFrZSBhIGNvbXBsZXRlIGFuZCBpbmRlcGVuZGVudCBjb3B5IG9mIHRoZSBzZXR0aW5ncyBvYmplY3QgKi8KCQkJdmFyIG9TZXR0aW5ncyA9IG5ldyBjbGFzc1NldHRpbmdzKCk7CgkJCV9hb1NldHRpbmdzLnB1c2goIG9TZXR0aW5ncyApOwoJCQkKCQkJdmFyIGJJbml0SGFuZGVkT2ZmID0gZmFsc2U7CgkJCXZhciBiVXNlUGFzc2VkRGF0YSA9IGZhbHNlOwoJCQkKCQkJLyogU2V0IHRoZSBpZCAqLwoJCQl2YXIgc0lkID0gdGhpcy5nZXRBdHRyaWJ1dGUoICdpZCcgKTsKCQkJaWYgKCBzSWQgIT09IG51bGwgKQoJCQl7CgkJCQlvU2V0dGluZ3Muc1RhYmxlSWQgPSBzSWQ7CgkJCQlvU2V0dGluZ3Muc0luc3RhbmNlID0gc0lkOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJb1NldHRpbmdzLnNJbnN0YW5jZSA9IF9vRXh0Ll9vRXh0ZXJuQ29uZmlnLmlOZXh0VW5pcXVlICsrOwoJCQl9CgkJCQoJCQkvKiBTYW5pdHkgY2hlY2sgKi8KCQkJaWYgKCB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT0gJ3RhYmxlJyApCgkJCXsKCQkJCV9mbkxvZyggb1NldHRpbmdzLCAwLCAiQXR0ZW1wdGVkIHRvIGluaXRpYWxpc2UgRGF0YVRhYmxlcyBvbiBhIG5vZGUgd2hpY2ggaXMgbm90IGEgIisKCQkJCQkidGFibGU6ICIrdGhpcy5ub2RlTmFtZSApOwoJCQkJcmV0dXJuOwoJCQl9CgkJCQoJCQkvKiBTZXQgdGhlIHRhYmxlIG5vZGUgKi8KCQkJb1NldHRpbmdzLm5UYWJsZSA9IHRoaXM7CgkJCQoJCQkvKiBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSAndGhpcycgaW5zdGFuY2UgZm9yIHRoZSB0YWJsZS4gTm90ZSB0aGF0IGlmIHRoaXMgdGFibGUgaXMgYmVpbmcKCQkJICogY3JlYXRlZCB3aXRoIG90aGVycywgd2UgcmV0cmlldmUgYSB1bmlxdWUgaW5zdGFuY2UgdG8gZWFzZSBBUEkgYWNjZXNzLgoJCQkgKi8KCQkJb1NldHRpbmdzLm9JbnN0YW5jZSA9IF90aGF0Lmxlbmd0aCA9PSAxID8gX3RoYXQgOiAkKHRoaXMpLmRhdGFUYWJsZSgpOwoJCQkKCQkJLyogQmluZCB0aGUgQVBJIGZ1bmN0aW9ucyB0byB0aGUgc2V0dGluZ3MsIHNvIHdlIGNhbiBwZXJmb3JtIGFjdGlvbnMgd2hlbmV2ZXIgb1NldHRpbmdzIGlzCgkJCSAqIGF2YWlsYWJsZQoJCQkgKi8KCQkJb1NldHRpbmdzLm9BcGkgPSBfdGhhdC5vQXBpOwoJCQkKCQkJLyogU3RhdGUgdGhlIHRhYmxlJ3Mgd2lkdGggZm9yIGlmIGEgZGVzdHJveSBpcyBjYWxsZWQgYXQgYSBsYXRlciB0aW1lICovCgkJCW9TZXR0aW5ncy5zRGVzdHJveVdpZHRoID0gJCh0aGlzKS53aWR0aCgpOwoJCQkKCQkJLyogU3RvcmUgdGhlIGZlYXR1cmVzIHRoYXQgd2UgaGF2ZSBhdmFpbGFibGUgKi8KCQkJaWYgKCB0eXBlb2Ygb0luaXQgIT0gJ3VuZGVmaW5lZCcgJiYgb0luaXQgIT09IG51bGwgKQoJCQl7CgkJCQlvU2V0dGluZ3Mub0luaXQgPSBvSW5pdDsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9GZWF0dXJlcywgb0luaXQsICJiUGFnaW5hdGUiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vRmVhdHVyZXMsIG9Jbml0LCAiYkxlbmd0aENoYW5nZSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9GZWF0dXJlcywgb0luaXQsICJiRmlsdGVyIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLCBvSW5pdCwgImJTb3J0IiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLCBvSW5pdCwgImJJbmZvIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLCBvSW5pdCwgImJQcm9jZXNzaW5nIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLCBvSW5pdCwgImJBdXRvV2lkdGgiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vRmVhdHVyZXMsIG9Jbml0LCAiYlNvcnRDbGFzc2VzIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLCBvSW5pdCwgImJTZXJ2ZXJTaWRlIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLCBvSW5pdCwgImJEZWZlclJlbmRlciIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9TY3JvbGwsIG9Jbml0LCAic1Njcm9sbFgiLCAic1giICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vU2Nyb2xsLCBvSW5pdCwgInNTY3JvbGxYSW5uZXIiLCAic1hJbm5lciIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9TY3JvbGwsIG9Jbml0LCAic1Njcm9sbFkiLCAic1kiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vU2Nyb2xsLCBvSW5pdCwgImJTY3JvbGxDb2xsYXBzZSIsICJiQ29sbGFwc2UiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vU2Nyb2xsLCBvSW5pdCwgImJTY3JvbGxJbmZpbml0ZSIsICJiSW5maW5pdGUiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vU2Nyb2xsLCBvSW5pdCwgImlTY3JvbGxMb2FkR2FwIiwgImlMb2FkR2FwIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub1Njcm9sbCwgb0luaXQsICJiU2Nyb2xsQXV0b0NzcyIsICJiQXV0b0NzcyIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImFzU3RyaXBDbGFzc2VzIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiZm5QcmVEcmF3Q2FsbGJhY2siICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJmblJvd0NhbGxiYWNrIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiZm5IZWFkZXJDYWxsYmFjayIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImZuRm9vdGVyQ2FsbGJhY2siICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJmbkNvb2tpZUNhbGxiYWNrIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiZm5Jbml0Q29tcGxldGUiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJmblNlcnZlckRhdGEiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJmbkZvcm1hdE51bWJlciIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImFhU29ydGluZyIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImFhU29ydGluZ0ZpeGVkIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiYUxlbmd0aE1lbnUiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJzUGFnaW5hdGlvblR5cGUiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJzQWpheFNvdXJjZSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgInNBamF4RGF0YVByb3AiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJpQ29va2llRHVyYXRpb24iICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJzQ29va2llUHJlZml4IiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAic0RvbSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImJTb3J0Q2VsbHNUb3AiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJvU2VhcmNoIiwgIm9QcmV2aW91c1NlYXJjaCIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImFvU2VhcmNoQ29scyIsICJhb1ByZVNlYXJjaENvbHMiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJpRGlzcGxheUxlbmd0aCIsICJfaURpc3BsYXlMZW5ndGgiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJiSlF1ZXJ5VUkiLCAiYkpVSSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0luaXQsICJmbkluZm9DYWxsYmFjayIgKTsKCQkJCQoJCQkJLyogQ2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGFyZSBhcnJheSBkcml2ZW4gKi8KCQkJCWlmICggdHlwZW9mIG9Jbml0LmZuRHJhd0NhbGxiYWNrID09ICdmdW5jdGlvbicgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCQkJCSJmbiI6IG9Jbml0LmZuRHJhd0NhbGxiYWNrLAoJCQkJCQkic05hbWUiOiAidXNlciIKCQkJCQl9ICk7CgkJCQl9CgkJCQkKCQkJCWlmICggdHlwZW9mIG9Jbml0LmZuU3RhdGVTYXZlQ2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJyApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFvU3RhdGVTYXZlLnB1c2goIHsKCQkJCQkJImZuIjogb0luaXQuZm5TdGF0ZVNhdmVDYWxsYmFjaywKCQkJCQkJInNOYW1lIjogInVzZXIiCgkJCQkJfSApOwoJCQkJfQoJCQkJCgkJCQlpZiAoIHR5cGVvZiBvSW5pdC5mblN0YXRlTG9hZENhbGxiYWNrID09ICdmdW5jdGlvbicgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5hb1N0YXRlTG9hZC5wdXNoKCB7CgkJCQkJCSJmbiI6IG9Jbml0LmZuU3RhdGVMb2FkQ2FsbGJhY2ssCgkJCQkJCSJzTmFtZSI6ICJ1c2VyIgoJCQkJCX0gKTsKCQkJCX0KCQkJCQoJCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlICYmIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlNvcnQgJiYKCQkJCQkgICBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTb3J0Q2xhc3NlcyApCgkJCQl7CgkJCQkJLyogRW5hYmxlIHNvcnQgY2xhc3NlcyBmb3Igc2VydmVyLXNpZGUgcHJvY2Vzc2luZy4gU2FmZSB0byBkbyBpdCBoZXJlLCBzaW5jZSBzZXJ2ZXItc2lkZQoJCQkJCSAqIHByb2Nlc3NpbmcgbXVzdCBiZSBlbmFibGVkIGJ5IHRoZSBkZXZlbG9wZXIKCQkJCQkgKi8KCQkJCQlvU2V0dGluZ3MuYW9EcmF3Q2FsbGJhY2sucHVzaCggewoJCQkJCQkiZm4iOiBfZm5Tb3J0aW5nQ2xhc3NlcywKCQkJCQkJInNOYW1lIjogInNlcnZlcl9zaWRlX3NvcnRfY2xhc3NlcyIKCQkJCQl9ICk7CgkJCQl9CgkJCQllbHNlIGlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iRGVmZXJSZW5kZXIgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCQkJCSJmbiI6IF9mblNvcnRpbmdDbGFzc2VzLAoJCQkJCQkic05hbWUiOiAiZGVmZXJfc29ydF9jbGFzc2VzIgoJCQkJCX0gKTsKCQkJCX0KCQkJCQoJCQkJaWYgKCB0eXBlb2Ygb0luaXQuYkpRdWVyeVVJICE9ICd1bmRlZmluZWQnICYmIG9Jbml0LmJKUXVlcnlVSSApCgkJCQl7CgkJCQkJLyogVXNlIHRoZSBKVUkgY2xhc3NlcyBvYmplY3QgZm9yIGRpc3BsYXkuIFlvdSBjb3VsZCBjbG9uZSB0aGUgb1N0ZENsYXNzZXMgb2JqZWN0IGlmIAoJCQkJCSAqIHlvdSB3YW50IHRvIGhhdmUgbXVsdGlwbGUgdGFibGVzIHdpdGggbXVsdGlwbGUgaW5kZXBlbmRlbnQgY2xhc3NlcyAKCQkJCQkgKi8KCQkJCQlvU2V0dGluZ3Mub0NsYXNzZXMgPSBfb0V4dC5vSlVJQ2xhc3NlczsKCQkJCQkKCQkJCQlpZiAoIHR5cGVvZiBvSW5pdC5zRG9tID09ICd1bmRlZmluZWQnICkKCQkJCQl7CgkJCQkJCS8qIFNldCB0aGUgRE9NIHRvIHVzZSBhIGxheW91dCBzdWl0YWJsZSBmb3IgalF1ZXJ5IFVJJ3MgdGhlbWluZyAqLwoJCQkJCQlvU2V0dGluZ3Muc0RvbSA9ICc8IkgibGZyPnQ8IkYiaXA+JzsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8qIENhbGN1bGF0ZSB0aGUgc2Nyb2xsIGJhciB3aWR0aCBhbmQgY2FjaGUgaXQgZm9yIHVzZSBsYXRlciBvbiAqLwoJCQkJaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5zWCAhPT0gIiIgfHwgb1NldHRpbmdzLm9TY3JvbGwuc1kgIT09ICIiICkKCQkJCXsKCQkJCQlvU2V0dGluZ3Mub1Njcm9sbC5pQmFyV2lkdGggPSBfZm5TY3JvbGxCYXJXaWR0aCgpOwoJCQkJfQoJCQkJCgkJCQlpZiAoIHR5cGVvZiBvSW5pdC5pRGlzcGxheVN0YXJ0ICE9ICd1bmRlZmluZWQnICYmIAoJCQkJICAgICB0eXBlb2Ygb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ID09ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQkvKiBEaXNwbGF5IHN0YXJ0IHBvaW50LCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzYXZlIHNhdmluZyAqLwoJCQkJCW9TZXR0aW5ncy5pSW5pdERpc3BsYXlTdGFydCA9IG9Jbml0LmlEaXNwbGF5U3RhcnQ7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gb0luaXQuaURpc3BsYXlTdGFydDsKCQkJCX0KCQkJCQoJCQkJLyogTXVzdCBiZSBkb25lIGFmdGVyIGV2ZXJ5dGhpbmcgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBjb29raWUhICovCgkJCQlpZiAoIHR5cGVvZiBvSW5pdC5iU3RhdGVTYXZlICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTdGF0ZVNhdmUgPSBvSW5pdC5iU3RhdGVTYXZlOwoJCQkJCV9mbkxvYWRTdGF0ZSggb1NldHRpbmdzLCBvSW5pdCApOwoJCQkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCQkJCSJmbiI6IF9mblNhdmVTdGF0ZSwKCQkJCQkJInNOYW1lIjogInN0YXRlX3NhdmUiCgkJCQkJfSApOwoJCQkJfQoKCQkJCWlmICggdHlwZW9mIG9Jbml0LmlEZWZlckxvYWRpbmcgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5iRGVmZXJMb2FkaW5nID0gdHJ1ZTsKCQkJCQlvU2V0dGluZ3MuX2lSZWNvcmRzVG90YWwgPSBvSW5pdC5pRGVmZXJMb2FkaW5nOwoJCQkJCW9TZXR0aW5ncy5faVJlY29yZHNEaXNwbGF5ID0gb0luaXQuaURlZmVyTG9hZGluZzsKCQkJCX0KCQkJCQoJCQkJaWYgKCB0eXBlb2Ygb0luaXQuYWFEYXRhICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQliVXNlUGFzc2VkRGF0YSA9IHRydWU7CgkJCQl9CgkJCQkKCQkJCS8qIEJhY2t3YXJkcyBjb21wYXRhYmlsaXR5ICovCgkJCQkvKiBhb0NvbHVtbnMgLyBhb0RhdGEgLSByZW1vdmUgYXQgc29tZSBwb2ludC4uLiAqLwoJCQkJaWYgKCB0eXBlb2Ygb0luaXQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9Jbml0LmFvRGF0YSAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJb0luaXQuYW9Db2x1bW5zID0gb0luaXQuYW9EYXRhOwoJCQkJfQoJCQkJCgkJCQkvKiBMYW5ndWFnZSBkZWZpbml0aW9ucyAqLwoJCQkJaWYgKCB0eXBlb2Ygb0luaXQub0xhbmd1YWdlICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlpZiAoIHR5cGVvZiBvSW5pdC5vTGFuZ3VhZ2Uuc1VybCAhPSAndW5kZWZpbmVkJyAmJiBvSW5pdC5vTGFuZ3VhZ2Uuc1VybCAhPT0gIiIgKQoJCQkJCXsKCQkJCQkJLyogR2V0IHRoZSBsYW5ndWFnZSBkZWZpbml0aW9ucyBmcm9tIGEgZmlsZSAqLwoJCQkJCQlvU2V0dGluZ3Mub0xhbmd1YWdlLnNVcmwgPSBvSW5pdC5vTGFuZ3VhZ2Uuc1VybDsKCQkJCQkJJC5nZXRKU09OKCBvU2V0dGluZ3Mub0xhbmd1YWdlLnNVcmwsIG51bGwsIGZ1bmN0aW9uKCBqc29uICkgeyAKCQkJCQkJCV9mbkxhbmd1YWdlUHJvY2Vzcyggb1NldHRpbmdzLCBqc29uLCB0cnVlICk7IH0gKTsKCQkJCQkJYkluaXRIYW5kZWRPZmYgPSB0cnVlOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlfZm5MYW5ndWFnZVByb2Nlc3MoIG9TZXR0aW5ncywgb0luaXQub0xhbmd1YWdlLCBmYWxzZSApOwoJCQkJCX0KCQkJCX0KCQkJCS8qIFdhcm5pbmc6IFRoZSBfZm5MYW5ndWFnZVByb2Nlc3MgZnVuY3Rpb24gaXMgYXN5bmMgdG8gdGhlIHJlbWFpbmRlciBvZiB0aGlzIGZ1bmN0aW9uIGR1ZQoJCQkJICogdG8gdGhlIFhIUi4gV2UgdXNlIF9iSW5pdGlhbGlzZWQgaW4gX2ZuTGFuZ3VhZ2VQcm9jZXNzKCkgdG8gY2hlY2sgdGhpcyB0aGUgcHJvY2Vzc2luZyAKCQkJCSAqIGJlbG93IGlzIGNvbXBsZXRlLiBUaGUgcmVhc29uIGZvciBzcGxpdGluZyBpdCBsaWtlIHRoaXMgaXMgb3B0aW1pc2F0aW9uIC0gd2UgY2FuIGZpcmUKCQkJCSAqIG9mZiB0aGUgWEhSIChpZiBuZWVkZWQpIGFuZCB0aGVuIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIGRhdGEuCgkJCQkgKi8KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qIENyZWF0ZSBhIGR1bW15IG9iamVjdCBmb3IgcXVpY2sgbWFuaXB1bGF0aW9uIGxhdGVyIG9uLiAqLwoJCQkJb0luaXQgPSB7fTsKCQkJfQoJCQkKCQkJLyoKCQkJICogU3RyaXBlcwoJCQkgKiBBZGQgdGhlIHN0cmlwIGNsYXNzZXMgbm93IHRoYXQgd2Uga25vdyB3aGljaCBjbGFzc2VzIHRvIGFwcGx5IC0gdW5sZXNzIG92ZXJydWxlZAoJCQkgKi8KCQkJaWYgKCB0eXBlb2Ygb0luaXQuYXNTdHJpcENsYXNzZXMgPT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQlvU2V0dGluZ3MuYXNTdHJpcENsYXNzZXMucHVzaCggb1NldHRpbmdzLm9DbGFzc2VzLnNTdHJpcE9kZCApOwoJCQkJb1NldHRpbmdzLmFzU3RyaXBDbGFzc2VzLnB1c2goIG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU3RyaXBFdmVuICk7CgkJCX0KCQkJCgkJCS8qIFJlbW92ZSByb3cgc3RyaXBlIGNsYXNzZXMgaWYgdGhleSBhcmUgYWxyZWFkeSBvbiB0aGUgdGFibGUgcm93ICovCgkJCXZhciBiU3RyaXBlUmVtb3ZlID0gZmFsc2U7CgkJCXZhciBhblJvd3MgPSAkKCc+dGJvZHk+dHInLCB0aGlzKTsKCQkJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5hc1N0cmlwQ2xhc3Nlcy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpZiAoIGFuUm93cy5maWx0ZXIoIjpsdCgyKSIpLmhhc0NsYXNzKCBvU2V0dGluZ3MuYXNTdHJpcENsYXNzZXNbaV0pICkKCQkJCXsKCQkJCQliU3RyaXBlUmVtb3ZlID0gdHJ1ZTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkJCQoJCQlpZiAoIGJTdHJpcGVSZW1vdmUgKQoJCQl7CgkJCQkvKiBTdG9yZSB0aGUgY2xhc3NlcyB3aGljaCB3ZSBhcmUgYWJvdXQgdG8gcmVtb3ZlIHNvIHRoZXkgY2FuIGJlIHJlYWRkZWQgb24gZGVzdG9yeSAqLwoJCQkJb1NldHRpbmdzLmFzRGVzdG9yeVN0cmlwcyA9IFsgJycsICcnIF07CgkJCQlpZiAoICQoYW5Sb3dzWzBdKS5oYXNDbGFzcyhvU2V0dGluZ3Mub0NsYXNzZXMuc1N0cmlwT2RkKSApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFzRGVzdG9yeVN0cmlwc1swXSArPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1N0cmlwT2RkKyIgIjsKCQkJCX0KCQkJCWlmICggJChhblJvd3NbMF0pLmhhc0NsYXNzKG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU3RyaXBFdmVuKSApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFzRGVzdG9yeVN0cmlwc1swXSArPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1N0cmlwRXZlbjsKCQkJCX0KCQkJCWlmICggJChhblJvd3NbMV0pLmhhc0NsYXNzKG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU3RyaXBPZGQpICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYXNEZXN0b3J5U3RyaXBzWzFdICs9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU3RyaXBPZGQrIiAiOwoJCQkJfQoJCQkJaWYgKCAkKGFuUm93c1sxXSkuaGFzQ2xhc3Mob1NldHRpbmdzLm9DbGFzc2VzLnNTdHJpcEV2ZW4pICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYXNEZXN0b3J5U3RyaXBzWzFdICs9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU3RyaXBFdmVuOwoJCQkJfQoJCQkJCgkJCQlhblJvd3MucmVtb3ZlQ2xhc3MoIG9TZXR0aW5ncy5hc1N0cmlwQ2xhc3Nlcy5qb2luKCcgJykgKTsKCQkJfQoJCQkKCQkJLyoKCQkJICogQ29sdW1ucwoJCQkgKiBTZWUgaWYgd2Ugc2hvdWxkIGxvYWQgY29sdW1ucyBhdXRvbWF0aWNhbGx5IG9yIHVzZSBkZWZpbmVkIG9uZXMKCQkJICovCgkJCXZhciBhblRocyA9IFtdOwoJCQl2YXIgYW9Db2x1bW5zSW5pdDsKCQkJdmFyIG5UaGVhZCA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoZWFkJyk7CgkJCWlmICggblRoZWFkLmxlbmd0aCAhPT0gMCApCgkJCXsKCQkJCV9mbkRldGVjdEhlYWRlciggb1NldHRpbmdzLmFvSGVhZGVyLCBuVGhlYWRbMF0gKTsKCQkJCWFuVGhzID0gX2ZuR2V0VW5pcXVlVGhzKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJLyogSWYgbm90IGdpdmVuIGEgY29sdW1uIGFycmF5LCBnZW5lcmF0ZSBvbmUgd2l0aCBudWxscyAqLwoJCQlpZiAoIHR5cGVvZiBvSW5pdC5hb0NvbHVtbnMgPT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQlhb0NvbHVtbnNJbml0ID0gW107CgkJCQlmb3IgKCBpPTAsIGlMZW49YW5UaHMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlhb0NvbHVtbnNJbml0LnB1c2goIG51bGwgKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCWFvQ29sdW1uc0luaXQgPSBvSW5pdC5hb0NvbHVtbnM7CgkJCX0KCQkJCgkJCS8qIEFkZCB0aGUgY29sdW1ucyAqLwoJCQlmb3IgKCBpPTAsIGlMZW49YW9Db2x1bW5zSW5pdC5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQkvKiBDaGVjayBpZiB3ZSBoYXZlIGNvbHVtbiB2aXNpYmlsdHkgc3RhdGUgdG8gcmVzdG9yZSAqLwoJCQkJaWYgKCB0eXBlb2Ygb0luaXQuc2F2ZWRfYW9Db2x1bW5zICE9ICd1bmRlZmluZWQnICYmIG9Jbml0LnNhdmVkX2FvQ29sdW1ucy5sZW5ndGggPT0gaUxlbiApCgkJCQl7CgkJCQkJaWYgKCBhb0NvbHVtbnNJbml0W2ldID09PSBudWxsICkKCQkJCQl7CgkJCQkJCWFvQ29sdW1uc0luaXRbaV0gPSB7fTsKCQkJCQl9CgkJCQkJYW9Db2x1bW5zSW5pdFtpXS5iVmlzaWJsZSA9IG9Jbml0LnNhdmVkX2FvQ29sdW1uc1tpXS5iVmlzaWJsZTsKCQkJCX0KCQkJCQoJCQkJX2ZuQWRkQ29sdW1uKCBvU2V0dGluZ3MsIGFuVGhzID8gYW5UaHNbaV0gOiBudWxsICk7CgkJCX0KCQkJCgkJCS8qIEFkZCBvcHRpb25zIGZyb20gY29sdW1uIGRlZmluYXRpb25zICovCgkJCWlmICggdHlwZW9mIG9Jbml0LmFvQ29sdW1uRGVmcyAhPSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCS8qIExvb3Agb3ZlciB0aGUgY29sdW1uIGRlZnMgYXJyYXkgLSBsb29wIGluIHJldmVyc2Ugc28gZmlyc3QgaW5zdGFjZSBoYXMgcHJpb3JpdHkgKi8KCQkJCWZvciAoIGk9b0luaXQuYW9Db2x1bW5EZWZzLmxlbmd0aC0xIDsgaT49MCA7IGktLSApCgkJCQl7CgkJCQkJLyogRWFjaCBjb2x1bW4gZGVmIGNhbiB0YXJnZXQgbXVsdGlwbGUgY29sdW1ucywgYXMgaXQgaXMgYW4gYXJyYXkgKi8KCQkJCQl2YXIgYVRhcmdldHMgPSBvSW5pdC5hb0NvbHVtbkRlZnNbaV0uYVRhcmdldHM7CgkJCQkJaWYgKCAhJC5pc0FycmF5KCBhVGFyZ2V0cyApICkKCQkJCQl7CgkJCQkJCV9mbkxvZyggb1NldHRpbmdzLCAxLCAnYVRhcmdldHMgbXVzdCBiZSBhbiBhcnJheSBvZiB0YXJnZXRzLCBub3QgYSAnKyh0eXBlb2YgYVRhcmdldHMpICk7CgkJCQkJfQoJCQkJCWZvciAoIGo9MCwgakxlbj1hVGFyZ2V0cy5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJCXsKCQkJCQkJaWYgKCB0eXBlb2YgYVRhcmdldHNbal0gPT0gJ251bWJlcicgJiYgYVRhcmdldHNbal0gPj0gMCApCgkJCQkJCXsKCQkJCQkJCS8qIDArIGludGVnZXIsIGxlZnQgdG8gcmlnaHQgY29sdW1uIGNvdW50aW5nLiBXZSBhZGQgY29sdW1ucyB3aGljaCBhcmUgdW5rbm93bgoJCQkJCQkJICogYXV0b21hdGljYWxseS4gSXMgdGhpcyB0aGUgcmlnaHQgYmVoYXZpb3VyIGZvciB0aGlzPyBXZSBzaG91bGQgYXQgbGVhc3QKCQkJCQkJCSAqIGxvZyBpdCBpbiBmdXR1cmUuIFdlIGNhbm5vdCBkbyB0aGlzIGZvciB0aGUgbmVnYXRpdmUgb3IgY2xhc3MgdGFyZ2V0cywgb25seSBoZXJlLgoJCQkJCQkJICovCgkJCQkJCQl3aGlsZSggb1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggPD0gYVRhcmdldHNbal0gKQoJCQkJCQkJewoJCQkJCQkJCV9mbkFkZENvbHVtbiggb1NldHRpbmdzICk7CgkJCQkJCQl9CgkJCQkJCQlfZm5Db2x1bW5PcHRpb25zKCBvU2V0dGluZ3MsIGFUYXJnZXRzW2pdLCBvSW5pdC5hb0NvbHVtbkRlZnNbaV0gKTsKCQkJCQkJfQoJCQkJCQllbHNlIGlmICggdHlwZW9mIGFUYXJnZXRzW2pdID09ICdudW1iZXInICYmIGFUYXJnZXRzW2pdIDwgMCApCgkJCQkJCXsKCQkJCQkJCS8qIE5lZ2F0aXZlIGludGVnZXIsIHJpZ2h0IHRvIGxlZnQgY29sdW1uIGNvdW50aW5nICovCgkJCQkJCQlfZm5Db2x1bW5PcHRpb25zKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoK2FUYXJnZXRzW2pdLCAKCQkJCQkJCQlvSW5pdC5hb0NvbHVtbkRlZnNbaV0gKTsKCQkJCQkJfQoJCQkJCQllbHNlIGlmICggdHlwZW9mIGFUYXJnZXRzW2pdID09ICdzdHJpbmcnICkKCQkJCQkJewoJCQkJCQkJLyogQ2xhc3MgbmFtZSBtYXRjaGluZyBvbiBUSCBlbGVtZW50ICovCgkJCQkJCQlmb3IgKCBrPTAsIGtMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBrPGtMZW4gOyBrKysgKQoJCQkJCQkJewoJCQkJCQkJCWlmICggYVRhcmdldHNbal0gPT0gIl9hbGwiIHx8CgkJCQkJCQkJICAgICAkKG9TZXR0aW5ncy5hb0NvbHVtbnNba10ublRoKS5oYXNDbGFzcyggYVRhcmdldHNbal0gKSApCgkJCQkJCQkJewoJCQkJCQkJCQlfZm5Db2x1bW5PcHRpb25zKCBvU2V0dGluZ3MsIGssIG9Jbml0LmFvQ29sdW1uRGVmc1tpXSApOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQkJLyogQWRkIG9wdGlvbnMgZnJvbSBjb2x1bW4gYXJyYXkgLSBhZnRlciB0aGUgZGVmcyBhcnJheSBzbyB0aGlzIGhhcyBwcmlvcml0eSAqLwoJCQlpZiAoIHR5cGVvZiBhb0NvbHVtbnNJbml0ICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJZm9yICggaT0wLCBpTGVuPWFvQ29sdW1uc0luaXQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlfZm5Db2x1bW5PcHRpb25zKCBvU2V0dGluZ3MsIGksIGFvQ29sdW1uc0luaXRbaV0gKTsKCQkJCX0KCQkJfQoJCQkKCQkJLyoKCQkJICogU29ydGluZwoJCQkgKiBDaGVjayB0aGUgYWFTb3J0aW5nIGFycmF5CgkJCSAqLwoJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFhU29ydGluZy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpZiAoIG9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMF0gPj0gb1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMF0gPSAwOwoJCQkJfQoJCQkJdmFyIG9Db2x1bW4gPSBvU2V0dGluZ3MuYW9Db2x1bW5zWyBvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzBdIF07CgkJCQkKCQkJCS8qIEFkZCBhIGRlZmF1bHQgc29ydGluZyBpbmRleCAqLwoJCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLmFhU29ydGluZ1tpXVsyXSA9PSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFhU29ydGluZ1tpXVsyXSA9IDA7CgkJCQl9CgkJCQkKCQkJCS8qIElmIGFhU29ydGluZyBpcyBub3QgZGVmaW5lZCwgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGluZGljYXRvciBpbiBhc1NvcnRpbmcgKi8KCQkJCWlmICggdHlwZW9mIG9Jbml0LmFhU29ydGluZyA9PSAidW5kZWZpbmVkIiAmJiAKCQkJCQkJIHR5cGVvZiBvU2V0dGluZ3Muc2F2ZWRfYWFTb3J0aW5nID09ICJ1bmRlZmluZWQiICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzFdID0gb0NvbHVtbi5hc1NvcnRpbmdbMF07CgkJCQl9CgkJCQkKCQkJCS8qIFNldCB0aGUgY3VycmVudCBzb3J0aW5nIGluZGV4IGJhc2VkIG9uIGFvQ29sdW1ucy5hc1NvcnRpbmcgKi8KCQkJCWZvciAoIGo9MCwgakxlbj1vQ29sdW1uLmFzU29ydGluZy5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJewoJCQkJCWlmICggb1NldHRpbmdzLmFhU29ydGluZ1tpXVsxXSA9PSBvQ29sdW1uLmFzU29ydGluZ1tqXSApCgkJCQkJewoJCQkJCQlvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzJdID0gajsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCQkKCQkJLyogRG8gYSBmaXJzdCBwYXNzIG9uIHRoZSBzb3J0aW5nIGNsYXNzZXMgKGFsbG93cyBhbnkgc2l6ZSBjaGFuZ2VzIHRvIGJlIHRha2VuIGludG8KCQkJICogYWNjb3VudCwgYW5kIGFsc28gd2lsbCBhcHBseSBzb3J0aW5nIGRpc2FibGVkIGNsYXNzZXMgaWYgZGlzYWJsZWQKCQkJICovCgkJCV9mblNvcnRpbmdDbGFzc2VzKCBvU2V0dGluZ3MgKTsKCQkJCgkJCS8qCgkJCSAqIEZpbmFsIGluaXQKCQkJICogQ2FjaGUgdGhlIGhlYWRlciwgYm9keSBhbmQgZm9vdGVyIGFzIHJlcXVpcmVkLCBjcmVhdGluZyB0aGVtIGlmIG5lZWRlZAoJCQkgKi8KCQkJdmFyIHRoZWFkID0gJCgnPnRoZWFkJywgdGhpcyk7CgkJCWlmICggdGhlYWQubGVuZ3RoID09PSAwICkKCQkJewoJCQkJdGhlYWQgPSBbIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICd0aGVhZCcgKSBdOwoJCQkJdGhpcy5hcHBlbmRDaGlsZCggdGhlYWRbMF0gKTsKCQkJfQoJCQlvU2V0dGluZ3MublRIZWFkID0gdGhlYWRbMF07CgkJCQoJCQl2YXIgdGJvZHkgPSAkKCc+dGJvZHknLCB0aGlzKTsKCQkJaWYgKCB0Ym9keS5sZW5ndGggPT09IDAgKQoJCQl7CgkJCQl0Ym9keSA9IFsgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3Rib2R5JyApIF07CgkJCQl0aGlzLmFwcGVuZENoaWxkKCB0Ym9keVswXSApOwoJCQl9CgkJCW9TZXR0aW5ncy5uVEJvZHkgPSB0Ym9keVswXTsKCQkJCgkJCXZhciB0Zm9vdCA9ICQoJz50Zm9vdCcsIHRoaXMpOwoJCQlpZiAoIHRmb290Lmxlbmd0aCA+IDAgKQoJCQl7CgkJCQlvU2V0dGluZ3MublRGb290ID0gdGZvb3RbMF07CgkJCQlfZm5EZXRlY3RIZWFkZXIoIG9TZXR0aW5ncy5hb0Zvb3Rlciwgb1NldHRpbmdzLm5URm9vdCApOwoJCQl9CgkJCQoJCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBkYXRhIHBhc3NpbmcgaW50byB0aGUgY29uc3RydWN0b3IgKi8KCQkJaWYgKCBiVXNlUGFzc2VkRGF0YSApCgkJCXsKCQkJCWZvciAoIGk9MCA7IGk8b0luaXQuYWFEYXRhLmxlbmd0aCA7IGkrKyApCgkJCQl7CgkJCQkJX2ZuQWRkRGF0YSggb1NldHRpbmdzLCBvSW5pdC5hYURhdGFbIGkgXSApOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogR3JhYiB0aGUgZGF0YSBmcm9tIHRoZSBwYWdlICovCgkJCQlfZm5HYXRoZXJEYXRhKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJLyogQ29weSB0aGUgZGF0YSBpbmRleCBhcnJheSAqLwoJCQlvU2V0dGluZ3MuYWlEaXNwbGF5ID0gb1NldHRpbmdzLmFpRGlzcGxheU1hc3Rlci5zbGljZSgpOwoJCQkKCQkJLyogSW5pdGlhbGlzYXRpb24gY29tcGxldGUgLSB0YWJsZSBjYW4gYmUgZHJhd24gKi8KCQkJb1NldHRpbmdzLmJJbml0aWFsaXNlZCA9IHRydWU7CgkJCQoJCQkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGluaXRpYWxpc2UgdGhlIHRhYmxlIChpdCBtaWdodCBub3QgaGF2ZSBiZWVuIGhhbmRlZCBvZmYgdG8gdGhlCgkJCSAqIGxhbmd1YWdlIHByb2Nlc3NvcikKCQkJICovCgkJCWlmICggYkluaXRIYW5kZWRPZmYgPT09IGZhbHNlICkKCQkJewoJCQkJX2ZuSW5pdGFsaXNlKCBvU2V0dGluZ3MgKTsKCQkJfQoJCX0pOwoJfTsKfSkoalF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KTsKDQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovKiEgalF1ZXJ5IFRpbWVwaWNrZXIgQWRkb24gLSB2MS40LjUgLSAyMDE0LTA1LTI2DQoqIGh0dHA6Ly90cmVudHJpY2hhcmRzb24uY29tL2V4YW1wbGVzL3RpbWVwaWNrZXINCiogQ29weXJpZ2h0IChjKSAyMDE0IFRyZW50IFJpY2hhcmRzb247IExpY2Vuc2VkIE1JVCAqLw0KKGZ1bmN0aW9uICgkKSB7DQoNCiAgICAvKg0KCSogTGV0cyBub3QgcmVkZWZpbmUgdGltZXBpY2tlciwgUHJldmVudCAiVW5jYXVnaHQgUmFuZ2VFcnJvcjogTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQiDQoJKi8NCiAgICAkLnVpLnRpbWVwaWNrZXIgPSAkLnVpLnRpbWVwaWNrZXIgfHwge307DQogICAgaWYgKCQudWkudGltZXBpY2tlci52ZXJzaW9uKSB7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAvKg0KCSogRXh0ZW5kIGpRdWVyeVVJLCBnZXQgaXQgc3RhcnRlZCB3aXRoIG91ciB2ZXJzaW9uIG51bWJlcg0KCSovDQogICAgJC5leHRlbmQoJC51aSwgew0KICAgICAgICB0aW1lcGlja2VyOiB7DQogICAgICAgICAgICB2ZXJzaW9uOiAiMS40LjUiDQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIC8qIA0KCSogVGltZXBpY2tlciBtYW5hZ2VyLg0KCSogVXNlIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcywgJC50aW1lcGlja2VyLCB0byBpbnRlcmFjdCB3aXRoIHRoZSB0aW1lIHBpY2tlci4NCgkqIFNldHRpbmdzIGZvciAoZ3JvdXBzIG9mKSB0aW1lIHBpY2tlcnMgYXJlIG1haW50YWluZWQgaW4gYW4gaW5zdGFuY2Ugb2JqZWN0LA0KCSogYWxsb3dpbmcgbXVsdGlwbGUgZGlmZmVyZW50IHNldHRpbmdzIG9uIHRoZSBzYW1lIHBhZ2UuDQoJKi8NCiAgICB2YXIgVGltZXBpY2tlciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdGhpcy5yZWdpb25hbCA9IFtdOyAvLyBBdmFpbGFibGUgcmVnaW9uYWwgc2V0dGluZ3MsIGluZGV4ZWQgYnkgbGFuZ3VhZ2UgY29kZQ0KICAgICAgICB0aGlzLnJlZ2lvbmFsWycnXSA9IHsgLy8gRGVmYXVsdCByZWdpb25hbCBzZXR0aW5ncw0KICAgICAgICAgICAgY3VycmVudFRleHQ6ICdOb3cnLA0KICAgICAgICAgICAgY2xvc2VUZXh0OiAnRG9uZScsDQogICAgICAgICAgICBhbU5hbWVzOiBbJ0FNJywgJ0EnXSwNCiAgICAgICAgICAgIHBtTmFtZXM6IFsnUE0nLCAnUCddLA0KICAgICAgICAgICAgdGltZUZvcm1hdDogJ0hIOm1tJywNCiAgICAgICAgICAgIHRpbWVTdWZmaXg6ICcnLA0KICAgICAgICAgICAgdGltZU9ubHlUaXRsZTogJ0Nob29zZSBUaW1lJywNCiAgICAgICAgICAgIHRpbWVUZXh0OiAnVGltZScsDQogICAgICAgICAgICBob3VyVGV4dDogJ0hvdXInLA0KICAgICAgICAgICAgbWludXRlVGV4dDogJ01pbnV0ZScsDQogICAgICAgICAgICBzZWNvbmRUZXh0OiAnU2Vjb25kJywNCiAgICAgICAgICAgIG1pbGxpc2VjVGV4dDogJ01pbGxpc2Vjb25kJywNCiAgICAgICAgICAgIG1pY3Jvc2VjVGV4dDogJ01pY3Jvc2Vjb25kJywNCiAgICAgICAgICAgIHRpbWV6b25lVGV4dDogJ1RpbWUgWm9uZScsDQogICAgICAgICAgICBpc1JUTDogZmFsc2UNCiAgICAgICAgfTsNCiAgICAgICAgdGhpcy5fZGVmYXVsdHMgPSB7IC8vIEdsb2JhbCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBkYXRldGltZSBwaWNrZXIgaW5zdGFuY2VzDQogICAgICAgICAgICBzaG93QnV0dG9uUGFuZWw6IHRydWUsDQogICAgICAgICAgICB0aW1lT25seTogZmFsc2UsDQogICAgICAgICAgICB0aW1lT25seVNob3dEYXRlOiBmYWxzZSwNCiAgICAgICAgICAgIHNob3dIb3VyOiBudWxsLA0KICAgICAgICAgICAgc2hvd01pbnV0ZTogbnVsbCwNCiAgICAgICAgICAgIHNob3dTZWNvbmQ6IG51bGwsDQogICAgICAgICAgICBzaG93TWlsbGlzZWM6IG51bGwsDQogICAgICAgICAgICBzaG93TWljcm9zZWM6IG51bGwsDQogICAgICAgICAgICBzaG93VGltZXpvbmU6IG51bGwsDQogICAgICAgICAgICBzaG93VGltZTogdHJ1ZSwNCiAgICAgICAgICAgIHN0ZXBIb3VyOiAxLA0KICAgICAgICAgICAgc3RlcE1pbnV0ZTogMSwNCiAgICAgICAgICAgIHN0ZXBTZWNvbmQ6IDEsDQogICAgICAgICAgICBzdGVwTWlsbGlzZWM6IDEsDQogICAgICAgICAgICBzdGVwTWljcm9zZWM6IDEsDQogICAgICAgICAgICBob3VyOiAwLA0KICAgICAgICAgICAgbWludXRlOiAwLA0KICAgICAgICAgICAgc2Vjb25kOiAwLA0KICAgICAgICAgICAgbWlsbGlzZWM6IDAsDQogICAgICAgICAgICBtaWNyb3NlYzogMCwNCiAgICAgICAgICAgIHRpbWV6b25lOiBudWxsLA0KICAgICAgICAgICAgaG91ck1pbjogMCwNCiAgICAgICAgICAgIG1pbnV0ZU1pbjogMCwNCiAgICAgICAgICAgIHNlY29uZE1pbjogMCwNCiAgICAgICAgICAgIG1pbGxpc2VjTWluOiAwLA0KICAgICAgICAgICAgbWljcm9zZWNNaW46IDAsDQogICAgICAgICAgICBob3VyTWF4OiAyMywNCiAgICAgICAgICAgIG1pbnV0ZU1heDogNTksDQogICAgICAgICAgICBzZWNvbmRNYXg6IDU5LA0KICAgICAgICAgICAgbWlsbGlzZWNNYXg6IDk5OSwNCiAgICAgICAgICAgIG1pY3Jvc2VjTWF4OiA5OTksDQogICAgICAgICAgICBtaW5EYXRlVGltZTogbnVsbCwNCiAgICAgICAgICAgIG1heERhdGVUaW1lOiBudWxsLA0KICAgICAgICAgICAgbWF4VGltZTogbnVsbCwNCiAgICAgICAgICAgIG1pblRpbWU6IG51bGwsDQogICAgICAgICAgICBvblNlbGVjdDogbnVsbCwNCiAgICAgICAgICAgIGhvdXJHcmlkOiAwLA0KICAgICAgICAgICAgbWludXRlR3JpZDogMCwNCiAgICAgICAgICAgIHNlY29uZEdyaWQ6IDAsDQogICAgICAgICAgICBtaWxsaXNlY0dyaWQ6IDAsDQogICAgICAgICAgICBtaWNyb3NlY0dyaWQ6IDAsDQogICAgICAgICAgICBhbHdheXNTZXRUaW1lOiB0cnVlLA0KICAgICAgICAgICAgc2VwYXJhdG9yOiAnICcsDQogICAgICAgICAgICBhbHRGaWVsZFRpbWVPbmx5OiB0cnVlLA0KICAgICAgICAgICAgYWx0VGltZUZvcm1hdDogbnVsbCwNCiAgICAgICAgICAgIGFsdFNlcGFyYXRvcjogbnVsbCwNCiAgICAgICAgICAgIGFsdFRpbWVTdWZmaXg6IG51bGwsDQogICAgICAgICAgICBhbHRSZWRpcmVjdEZvY3VzOiB0cnVlLA0KICAgICAgICAgICAgcGlja2VyVGltZUZvcm1hdDogbnVsbCwNCiAgICAgICAgICAgIHBpY2tlclRpbWVTdWZmaXg6IG51bGwsDQogICAgICAgICAgICBzaG93VGltZXBpY2tlcjogdHJ1ZSwNCiAgICAgICAgICAgIHRpbWV6b25lTGlzdDogbnVsbCwNCiAgICAgICAgICAgIGFkZFNsaWRlckFjY2VzczogZmFsc2UsDQogICAgICAgICAgICBzbGlkZXJBY2Nlc3NBcmdzOiBudWxsLA0KICAgICAgICAgICAgY29udHJvbFR5cGU6ICdzbGlkZXInLA0KICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBudWxsLA0KICAgICAgICAgICAgcGFyc2U6ICdzdHJpY3QnDQogICAgICAgIH07DQogICAgICAgICQuZXh0ZW5kKHRoaXMuX2RlZmF1bHRzLCB0aGlzLnJlZ2lvbmFsWycnXSk7DQogICAgfTsNCg0KICAgICQuZXh0ZW5kKFRpbWVwaWNrZXIucHJvdG90eXBlLCB7DQogICAgICAgICRpbnB1dDogbnVsbCwNCiAgICAgICAgJGFsdElucHV0OiBudWxsLA0KICAgICAgICAkdGltZU9iajogbnVsbCwNCiAgICAgICAgaW5zdDogbnVsbCwNCiAgICAgICAgaG91cl9zbGlkZXI6IG51bGwsDQogICAgICAgIG1pbnV0ZV9zbGlkZXI6IG51bGwsDQogICAgICAgIHNlY29uZF9zbGlkZXI6IG51bGwsDQogICAgICAgIG1pbGxpc2VjX3NsaWRlcjogbnVsbCwNCiAgICAgICAgbWljcm9zZWNfc2xpZGVyOiBudWxsLA0KICAgICAgICB0aW1lem9uZV9zZWxlY3Q6IG51bGwsDQogICAgICAgIG1heFRpbWU6IG51bGwsDQogICAgICAgIG1pblRpbWU6IG51bGwsDQogICAgICAgIGhvdXI6IDAsDQogICAgICAgIG1pbnV0ZTogMCwNCiAgICAgICAgc2Vjb25kOiAwLA0KICAgICAgICBtaWxsaXNlYzogMCwNCiAgICAgICAgbWljcm9zZWM6IDAsDQogICAgICAgIHRpbWV6b25lOiBudWxsLA0KICAgICAgICBob3VyTWluT3JpZ2luYWw6IG51bGwsDQogICAgICAgIG1pbnV0ZU1pbk9yaWdpbmFsOiBudWxsLA0KICAgICAgICBzZWNvbmRNaW5PcmlnaW5hbDogbnVsbCwNCiAgICAgICAgbWlsbGlzZWNNaW5PcmlnaW5hbDogbnVsbCwNCiAgICAgICAgbWljcm9zZWNNaW5PcmlnaW5hbDogbnVsbCwNCiAgICAgICAgaG91ck1heE9yaWdpbmFsOiBudWxsLA0KICAgICAgICBtaW51dGVNYXhPcmlnaW5hbDogbnVsbCwNCiAgICAgICAgc2Vjb25kTWF4T3JpZ2luYWw6IG51bGwsDQogICAgICAgIG1pbGxpc2VjTWF4T3JpZ2luYWw6IG51bGwsDQogICAgICAgIG1pY3Jvc2VjTWF4T3JpZ2luYWw6IG51bGwsDQogICAgICAgIGFtcG06ICcnLA0KICAgICAgICBmb3JtYXR0ZWREYXRlOiAnJywNCiAgICAgICAgZm9ybWF0dGVkVGltZTogJycsDQogICAgICAgIGZvcm1hdHRlZERhdGVUaW1lOiAnJywNCiAgICAgICAgdGltZXpvbmVMaXN0OiBudWxsLA0KICAgICAgICB1bml0czogWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLCAnbWlsbGlzZWMnLCAnbWljcm9zZWMnXSwNCiAgICAgICAgc3VwcG9ydDoge30sDQogICAgICAgIGNvbnRyb2w6IG51bGwsDQoNCiAgICAgICAgLyogDQoJCSogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRpbWUgcGlja2VyLg0KCQkqIEBwYXJhbSAge09iamVjdH0gc2V0dGluZ3MgIG9iamVjdCAtIHRoZSBuZXcgc2V0dGluZ3MgdG8gdXNlIGFzIGRlZmF1bHRzIChhbm9ueW1vdXMgb2JqZWN0KQ0KCQkqIEByZXR1cm4ge09iamVjdH0gdGhlIG1hbmFnZXIgb2JqZWN0DQoJCSovDQogICAgICAgIHNldERlZmF1bHRzOiBmdW5jdGlvbiAoc2V0dGluZ3MpIHsNCiAgICAgICAgICAgIGV4dGVuZFJlbW92ZSh0aGlzLl9kZWZhdWx0cywgc2V0dGluZ3MgfHwge30pOw0KICAgICAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCgkJKiBDcmVhdGUgYSBuZXcgVGltZXBpY2tlciBpbnN0YW5jZQ0KCQkqLw0KICAgICAgICBfbmV3SW5zdDogZnVuY3Rpb24gKCRpbnB1dCwgb3B0cykgew0KICAgICAgICAgICAgdmFyIHRwX2luc3QgPSBuZXcgVGltZXBpY2tlcigpLA0KCQkJCWlubGluZVNldHRpbmdzID0ge30sDQoJCQkJZm5zID0ge30sDQoJCQkJb3ZlcnJpZGVzLCBpOw0KDQogICAgICAgICAgICBmb3IgKHZhciBhdHRyTmFtZSBpbiB0aGlzLl9kZWZhdWx0cykgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJWYWx1ZSA9ICRpbnB1dC5hdHRyKCd0aW1lOicgKyBhdHRyTmFtZSk7DQogICAgICAgICAgICAgICAgICAgIGlmIChhdHRyVmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lU2V0dGluZ3NbYXR0ck5hbWVdID0gZXZhbChhdHRyVmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lU2V0dGluZ3NbYXR0ck5hbWVdID0gYXR0clZhbHVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBvdmVycmlkZXMgPSB7DQogICAgICAgICAgICAgICAgYmVmb3JlU2hvdzogZnVuY3Rpb24gKGlucHV0LCBkcF9pbnN0KSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24odHBfaW5zdC5fZGVmYXVsdHMuZXZudHMuYmVmb3JlU2hvdykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5iZWZvcmVTaG93LmNhbGwoJGlucHV0WzBdLCBpbnB1dCwgZHBfaW5zdCwgdHBfaW5zdCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIG9uQ2hhbmdlTW9udGhZZWFyOiBmdW5jdGlvbiAoeWVhciwgbW9udGgsIGRwX2luc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lIGFzIHdlbGwgOiB0aGlzIHByZXZlbnRzIHRoZSB0aW1lIGZyb20gZGlzYXBwZWFyaW5nIGZyb20gdGhlICRpbnB1dCBmaWVsZC4NCiAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoZHBfaW5zdCk7DQogICAgICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24odHBfaW5zdC5fZGVmYXVsdHMuZXZudHMub25DaGFuZ2VNb250aFllYXIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5vbkNoYW5nZU1vbnRoWWVhci5jYWxsKCRpbnB1dFswXSwgeWVhciwgbW9udGgsIGRwX2luc3QsIHRwX2luc3QpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiAoZGF0ZVRleHQsIGRwX2luc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRwX2luc3QudGltZURlZmluZWQgPT09IHRydWUgJiYgJGlucHV0LnZhbCgpICE9PSAnJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoZHBfaW5zdCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbih0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5vbkNsb3NlKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMuZXZudHMub25DbG9zZS5jYWxsKCRpbnB1dFswXSwgZGF0ZVRleHQsIGRwX2luc3QsIHRwX2luc3QpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGZvciAoaSBpbiBvdmVycmlkZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVzLmhhc093blByb3BlcnR5KGkpKSB7DQogICAgICAgICAgICAgICAgICAgIGZuc1tpXSA9IG9wdHNbaV0gfHwgbnVsbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzID0gJC5leHRlbmQoe30sIHRoaXMuX2RlZmF1bHRzLCBpbmxpbmVTZXR0aW5ncywgb3B0cywgb3ZlcnJpZGVzLCB7DQogICAgICAgICAgICAgICAgZXZudHM6IGZucywNCiAgICAgICAgICAgICAgICB0aW1lcGlja2VyOiB0cF9pbnN0IC8vIGFkZCB0aW1lcGlja2VyIGFzIGEgcHJvcGVydHkgb2YgZGF0ZXBpY2tlcjogJC5kYXRlcGlja2VyLl9nZXQoZHBfaW5zdCwgJ3RpbWVwaWNrZXInKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgdHBfaW5zdC5hbU5hbWVzID0gJC5tYXAodHBfaW5zdC5fZGVmYXVsdHMuYW1OYW1lcywgZnVuY3Rpb24gKHZhbCkgew0KICAgICAgICAgICAgICAgIHJldHVybiB2YWwudG9VcHBlckNhc2UoKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgdHBfaW5zdC5wbU5hbWVzID0gJC5tYXAodHBfaW5zdC5fZGVmYXVsdHMucG1OYW1lcywgZnVuY3Rpb24gKHZhbCkgew0KICAgICAgICAgICAgICAgIHJldHVybiB2YWwudG9VcHBlckNhc2UoKTsNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAvLyBkZXRlY3Qgd2hpY2ggdW5pdHMgYXJlIHN1cHBvcnRlZA0KICAgICAgICAgICAgdHBfaW5zdC5zdXBwb3J0ID0gZGV0ZWN0U3VwcG9ydCgNCgkJCQkJdHBfaW5zdC5fZGVmYXVsdHMudGltZUZvcm1hdCArDQoJCQkJCSh0cF9pbnN0Ll9kZWZhdWx0cy5waWNrZXJUaW1lRm9ybWF0ID8gdHBfaW5zdC5fZGVmYXVsdHMucGlja2VyVGltZUZvcm1hdCA6ICcnKSArDQoJCQkJCSh0cF9pbnN0Ll9kZWZhdWx0cy5hbHRUaW1lRm9ybWF0ID8gdHBfaW5zdC5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCA6ICcnKSk7DQoNCiAgICAgICAgICAgIC8vIGNvbnRyb2xUeXBlIGlzIHN0cmluZyAtIGtleSB0byBvdXIgdGhpcy5fY29udHJvbHMNCiAgICAgICAgICAgIGlmICh0eXBlb2YgKHRwX2luc3QuX2RlZmF1bHRzLmNvbnRyb2xUeXBlKSA9PT0gJ3N0cmluZycpIHsNCiAgICAgICAgICAgICAgICBpZiAodHBfaW5zdC5fZGVmYXVsdHMuY29udHJvbFR5cGUgPT09ICdzbGlkZXInICYmIHR5cGVvZiAoJC51aS5zbGlkZXIpID09PSAndW5kZWZpbmVkJykgew0KICAgICAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZSA9ICdzZWxlY3QnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cF9pbnN0LmNvbnRyb2wgPSB0cF9pbnN0Ll9jb250cm9sc1t0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZV07DQogICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gY29udHJvbFR5cGUgaXMgYW4gb2JqZWN0IGFuZCBtdXN0IGltcGxlbWVudCBjcmVhdGUsIG9wdGlvbnMsIHZhbHVlIG1ldGhvZHMNCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIHRwX2luc3QuY29udHJvbCA9IHRwX2luc3QuX2RlZmF1bHRzLmNvbnRyb2xUeXBlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBwcmVwIHRoZSB0aW1lem9uZSBvcHRpb25zDQogICAgICAgICAgICB2YXIgdGltZXpvbmVMaXN0ID0gWy03MjAsIC02NjAsIC02MDAsIC01NzAsIC01NDAsIC00ODAsIC00MjAsIC0zNjAsIC0zMDAsIC0yNzAsIC0yNDAsIC0yMTAsIC0xODAsIC0xMjAsIC02MCwNCgkJCQkJMCwgNjAsIDEyMCwgMTgwLCAyMTAsIDI0MCwgMjcwLCAzMDAsIDMzMCwgMzQ1LCAzNjAsIDM5MCwgNDIwLCA0ODAsIDUyNSwgNTQwLCA1NzAsIDYwMCwgNjMwLCA2NjAsIDY5MCwgNzIwLCA3NjUsIDc4MCwgODQwXTsNCiAgICAgICAgICAgIGlmICh0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZUxpc3QgIT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICB0aW1lem9uZUxpc3QgPSB0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZUxpc3Q7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgdHpsID0gdGltZXpvbmVMaXN0Lmxlbmd0aCwgdHppID0gMCwgdHp2ID0gbnVsbDsNCiAgICAgICAgICAgIGlmICh0emwgPiAwICYmIHR5cGVvZiB0aW1lem9uZUxpc3RbMF0gIT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICAgICAgZm9yICg7IHR6aSA8IHR6bDsgdHppKyspIHsNCiAgICAgICAgICAgICAgICAgICAgdHp2ID0gdGltZXpvbmVMaXN0W3R6aV07DQogICAgICAgICAgICAgICAgICAgIHRpbWV6b25lTGlzdFt0emldID0geyB2YWx1ZTogdHp2LCBsYWJlbDogJC50aW1lcGlja2VyLnRpbWV6b25lT2Zmc2V0U3RyaW5nKHR6diwgdHBfaW5zdC5zdXBwb3J0Lmlzbzg2MDEpIH07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmVMaXN0ID0gdGltZXpvbmVMaXN0Ow0KDQogICAgICAgICAgICAvLyBzZXQgdGhlIGRlZmF1bHQgdW5pdHMNCiAgICAgICAgICAgIHRwX2luc3QudGltZXpvbmUgPSB0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZSAhPT0gbnVsbCA/ICQudGltZXBpY2tlci50aW1lem9uZU9mZnNldE51bWJlcih0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZSkgOg0KCQkJCQkJCSgobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xKTsNCiAgICAgICAgICAgIHRwX2luc3QuaG91ciA9IHRwX2luc3QuX2RlZmF1bHRzLmhvdXIgPCB0cF9pbnN0Ll9kZWZhdWx0cy5ob3VyTWluID8gdHBfaW5zdC5fZGVmYXVsdHMuaG91ck1pbiA6DQoJCQkJCQkJdHBfaW5zdC5fZGVmYXVsdHMuaG91ciA+IHRwX2luc3QuX2RlZmF1bHRzLmhvdXJNYXggPyB0cF9pbnN0Ll9kZWZhdWx0cy5ob3VyTWF4IDogdHBfaW5zdC5fZGVmYXVsdHMuaG91cjsNCiAgICAgICAgICAgIHRwX2luc3QubWludXRlID0gdHBfaW5zdC5fZGVmYXVsdHMubWludXRlIDwgdHBfaW5zdC5fZGVmYXVsdHMubWludXRlTWluID8gdHBfaW5zdC5fZGVmYXVsdHMubWludXRlTWluIDoNCgkJCQkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5taW51dGUgPiB0cF9pbnN0Ll9kZWZhdWx0cy5taW51dGVNYXggPyB0cF9pbnN0Ll9kZWZhdWx0cy5taW51dGVNYXggOiB0cF9pbnN0Ll9kZWZhdWx0cy5taW51dGU7DQogICAgICAgICAgICB0cF9pbnN0LnNlY29uZCA9IHRwX2luc3QuX2RlZmF1bHRzLnNlY29uZCA8IHRwX2luc3QuX2RlZmF1bHRzLnNlY29uZE1pbiA/IHRwX2luc3QuX2RlZmF1bHRzLnNlY29uZE1pbiA6DQoJCQkJCQkJdHBfaW5zdC5fZGVmYXVsdHMuc2Vjb25kID4gdHBfaW5zdC5fZGVmYXVsdHMuc2Vjb25kTWF4ID8gdHBfaW5zdC5fZGVmYXVsdHMuc2Vjb25kTWF4IDogdHBfaW5zdC5fZGVmYXVsdHMuc2Vjb25kOw0KICAgICAgICAgICAgdHBfaW5zdC5taWxsaXNlYyA9IHRwX2luc3QuX2RlZmF1bHRzLm1pbGxpc2VjIDwgdHBfaW5zdC5fZGVmYXVsdHMubWlsbGlzZWNNaW4gPyB0cF9pbnN0Ll9kZWZhdWx0cy5taWxsaXNlY01pbiA6DQoJCQkJCQkJdHBfaW5zdC5fZGVmYXVsdHMubWlsbGlzZWMgPiB0cF9pbnN0Ll9kZWZhdWx0cy5taWxsaXNlY01heCA/IHRwX2luc3QuX2RlZmF1bHRzLm1pbGxpc2VjTWF4IDogdHBfaW5zdC5fZGVmYXVsdHMubWlsbGlzZWM7DQogICAgICAgICAgICB0cF9pbnN0Lm1pY3Jvc2VjID0gdHBfaW5zdC5fZGVmYXVsdHMubWljcm9zZWMgPCB0cF9pbnN0Ll9kZWZhdWx0cy5taWNyb3NlY01pbiA/IHRwX2luc3QuX2RlZmF1bHRzLm1pY3Jvc2VjTWluIDoNCgkJCQkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5taWNyb3NlYyA+IHRwX2luc3QuX2RlZmF1bHRzLm1pY3Jvc2VjTWF4ID8gdHBfaW5zdC5fZGVmYXVsdHMubWljcm9zZWNNYXggOiB0cF9pbnN0Ll9kZWZhdWx0cy5taWNyb3NlYzsNCiAgICAgICAgICAgIHRwX2luc3QuYW1wbSA9ICcnOw0KICAgICAgICAgICAgdHBfaW5zdC4kaW5wdXQgPSAkaW5wdXQ7DQoNCiAgICAgICAgICAgIGlmICh0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGaWVsZCkgew0KICAgICAgICAgICAgICAgIHRwX2luc3QuJGFsdElucHV0ID0gJCh0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGaWVsZCk7DQogICAgICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLmFsdFJlZGlyZWN0Rm9jdXMgPT09IHRydWUpIHsNCiAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC4kYWx0SW5wdXQuY3NzKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInDQogICAgICAgICAgICAgICAgICAgIH0pLmZvY3VzKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC50cmlnZ2VyKCJmb2N1cyIpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID09PSAwIHx8IHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lID09PSAwKSB7DQogICAgICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZSA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSA9PT0gMCB8fCB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSA9PT0gMCkgew0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBkYXRlcGlja2VyIG5lZWRzIG1pbkRhdGUvbWF4RGF0ZSwgdGltZXBpY2tlciBuZWVkcyBtaW5EYXRlVGltZS9tYXhEYXRlVGltZS4uDQogICAgICAgICAgICBpZiAodHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZSAhPT0gdW5kZWZpbmVkICYmIHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7DQogICAgICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUgPSBuZXcgRGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlLmdldFRpbWUoKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUgIT09IHVuZGVmaW5lZCAmJiB0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlVGltZSBpbnN0YW5jZW9mIERhdGUpIHsNCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID0gbmV3IERhdGUodHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlICE9PSB1bmRlZmluZWQgJiYgdHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSBpbnN0YW5jZW9mIERhdGUpIHsNCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSA9IG5ldyBEYXRlKHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSAhPT0gdW5kZWZpbmVkICYmIHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGVUaW1lIGluc3RhbmNlb2YgRGF0ZSkgew0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUgPSBuZXcgRGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZS5nZXRUaW1lKCkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBfaW5zdC4kaW5wdXQuYmluZCgnZm9jdXMnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdHBfaW5zdC5fb25Gb2N1cygpOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIHJldHVybiB0cF9pbnN0Ow0KICAgICAgICB9LA0KDQogICAgICAgIC8qDQoJCSogYWRkIG91ciBzbGlkZXJzIHRvIHRoZSBjYWxlbmRhcg0KCQkqLw0KICAgICAgICBfYWRkVGltZVBpY2tlcjogZnVuY3Rpb24gKGRwX2luc3QpIHsNCiAgICAgICAgICAgIHZhciBjdXJyRFQgPSAodGhpcy4kYWx0SW5wdXQgJiYgdGhpcy5fZGVmYXVsdHMuYWx0RmllbGRUaW1lT25seSkgPyB0aGlzLiRpbnB1dC52YWwoKSArICcgJyArIHRoaXMuJGFsdElucHV0LnZhbCgpIDogdGhpcy4kaW5wdXQudmFsKCk7DQoNCiAgICAgICAgICAgIHRoaXMudGltZURlZmluZWQgPSB0aGlzLl9wYXJzZVRpbWUoY3VyckRUKTsNCiAgICAgICAgICAgIHRoaXMuX2xpbWl0TWluTWF4RGF0ZVRpbWUoZHBfaW5zdCwgZmFsc2UpOw0KICAgICAgICAgICAgdGhpcy5faW5qZWN0VGltZVBpY2tlcigpOw0KICAgICAgICB9LA0KDQogICAgICAgIC8qDQoJCSogcGFyc2UgdGhlIHRpbWUgc3RyaW5nIGZyb20gaW5wdXQgdmFsdWUgb3IgX3NldFRpbWUNCgkJKi8NCiAgICAgICAgX3BhcnNlVGltZTogZnVuY3Rpb24gKHRpbWVTdHJpbmcsIHdpdGhEYXRlKSB7DQogICAgICAgICAgICBpZiAoIXRoaXMuaW5zdCkgew0KICAgICAgICAgICAgICAgIHRoaXMuaW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0aGlzLiRpbnB1dFswXSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICh3aXRoRGF0ZSB8fCAhdGhpcy5fZGVmYXVsdHMudGltZU9ubHkpIHsNCiAgICAgICAgICAgICAgICB2YXIgZHBfZGF0ZUZvcm1hdCA9ICQuZGF0ZXBpY2tlci5fZ2V0KHRoaXMuaW5zdCwgJ2RhdGVGb3JtYXQnKTsNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSZXMgPSBwYXJzZURhdGVUaW1lSW50ZXJuYWwoZHBfZGF0ZUZvcm1hdCwgdGhpcy5fZGVmYXVsdHMudGltZUZvcm1hdCwgdGltZVN0cmluZywgJC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcodGhpcy5pbnN0KSwgdGhpcy5fZGVmYXVsdHMpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlUmVzLnRpbWVPYmopIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkLmV4dGVuZCh0aGlzLCBwYXJzZVJlcy50aW1lT2JqKTsNCiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgICAgICAgICAgICAgJC50aW1lcGlja2VyLmxvZygiRXJyb3IgcGFyc2luZyB0aGUgZGF0ZS90aW1lIHN0cmluZzogIiArIGVyciArDQoJCQkJCQkJCQkiXG5kYXRlL3RpbWUgc3RyaW5nID0gIiArIHRpbWVTdHJpbmcgKw0KCQkJCQkJCQkJIlxudGltZUZvcm1hdCA9ICIgKyB0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0ICsNCgkJCQkJCQkJCSJcbmRhdGVGb3JtYXQgPSAiICsgZHBfZGF0ZUZvcm1hdCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHZhciB0aW1lT2JqID0gJC5kYXRlcGlja2VyLnBhcnNlVGltZSh0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCB0aGlzLl9kZWZhdWx0cyk7DQogICAgICAgICAgICAgICAgaWYgKCF0aW1lT2JqKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJC5leHRlbmQodGhpcywgdGltZU9iaik7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCgkJKiBnZW5lcmF0ZSBhbmQgaW5qZWN0IGh0bWwgZm9yIHRpbWVwaWNrZXIgaW50byB1aSBkYXRlcGlja2VyDQoJCSovDQogICAgICAgIF9pbmplY3RUaW1lUGlja2VyOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgJGRwID0gdGhpcy5pbnN0LmRwRGl2LA0KCQkJCW8gPSB0aGlzLmluc3Quc2V0dGluZ3MsDQoJCQkJdHBfaW5zdCA9IHRoaXMsDQoJCQkJbGl0ZW0gPSAnJywNCgkJCQl1aXRlbSA9ICcnLA0KCQkJCXNob3cgPSBudWxsLA0KCQkJCW1heCA9IHt9LA0KCQkJCWdyaWRTaXplID0ge30sDQoJCQkJc2l6ZSA9IG51bGwsDQoJCQkJaSA9IDAsDQoJCQkJbCA9IDA7DQoNCiAgICAgICAgICAgIC8vIFByZXZlbnQgZGlzcGxheWluZyB0d2ljZQ0KICAgICAgICAgICAgaWYgKCRkcC5maW5kKCJkaXYudWktdGltZXBpY2tlci1kaXYiKS5sZW5ndGggPT09IDAgJiYgby5zaG93VGltZXBpY2tlcikgew0KICAgICAgICAgICAgICAgIHZhciBub0Rpc3BsYXkgPSAnIHN0eWxlPSJkaXNwbGF5Om5vbmU7IicsDQoJCQkJCWh0bWwgPSAnPGRpdiBjbGFzcz0idWktdGltZXBpY2tlci1kaXYnICsgKG8uaXNSVEwgPyAnIHVpLXRpbWVwaWNrZXItcnRsJyA6ICcnKSArICciPjxkbD4nICsgJzxkdCBjbGFzcz0idWlfdHBpY2tlcl90aW1lX2xhYmVsIicgKyAoKG8uc2hvd1RpbWUpID8gJycgOiBub0Rpc3BsYXkpICsgJz4nICsgby50aW1lVGV4dCArICc8XC9kdD4nICsNCgkJCQkJCQkJJzxkZCBjbGFzcz0idWlfdHBpY2tlcl90aW1lIicgKyAoKG8uc2hvd1RpbWUpID8gJycgOiBub0Rpc3BsYXkpICsgJz48XC9kZD4nOw0KDQogICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBtYXJrdXANCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy51bml0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgbGl0ZW0gPSB0aGlzLnVuaXRzW2ldOw0KICAgICAgICAgICAgICAgICAgICB1aXRlbSA9IGxpdGVtLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgbGl0ZW0uc3Vic3RyKDEpOw0KICAgICAgICAgICAgICAgICAgICBzaG93ID0gb1snc2hvdycgKyB1aXRlbV0gIT09IG51bGwgPyBvWydzaG93JyArIHVpdGVtXSA6IHRoaXMuc3VwcG9ydFtsaXRlbV07DQoNCiAgICAgICAgICAgICAgICAgICAgLy8gQWRkZWQgYnkgUGV0ZXIgTWVkZWlyb3M6DQogICAgICAgICAgICAgICAgICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRoZSBob3VyL21pbnV0ZS9zZWNvbmQgbWF4IHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgc3RlcCB2YWx1ZXMuDQogICAgICAgICAgICAgICAgICAgIC8vIC0gRXhhbXBsZTogaWYgc3RlcE1pbnV0ZSBpcyAxNSwgdGhlbiBtaW5NYXggaXMgNDUuDQogICAgICAgICAgICAgICAgICAgIG1heFtsaXRlbV0gPSBwYXJzZUludCgob1tsaXRlbSArICdNYXgnXSAtICgob1tsaXRlbSArICdNYXgnXSAtIG9bbGl0ZW0gKyAnTWluJ10pICUgb1snc3RlcCcgKyB1aXRlbV0pKSwgMTApOw0KICAgICAgICAgICAgICAgICAgICBncmlkU2l6ZVtsaXRlbV0gPSAwOw0KDQogICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkdCBjbGFzcz0idWlfdHBpY2tlcl8nICsgbGl0ZW0gKyAnX2xhYmVsIicgKyAoc2hvdyA/ICcnIDogbm9EaXNwbGF5KSArICc+JyArIG9bbGl0ZW0gKyAnVGV4dCddICsgJzxcL2R0PicgKw0KCQkJCQkJCQknPGRkIGNsYXNzPSJ1aV90cGlja2VyXycgKyBsaXRlbSArICciPjxkaXYgY2xhc3M9InVpX3RwaWNrZXJfJyArIGxpdGVtICsgJ19zbGlkZXIiJyArIChzaG93ID8gJycgOiBub0Rpc3BsYXkpICsgJz48XC9kaXY+JzsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdyAmJiBvW2xpdGVtICsgJ0dyaWQnXSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDogMXB4Ij48dGFibGUgY2xhc3M9InVpLXRwaWNrZXItZ3JpZC1sYWJlbCI+PHRyPic7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXRlbSA9PT0gJ2hvdXInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaCA9IG9bbGl0ZW0gKyAnTWluJ107IGggPD0gbWF4W2xpdGVtXTsgaCArPSBwYXJzZUludChvW2xpdGVtICsgJ0dyaWQnXSwgMTApKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRTaXplW2xpdGVtXSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1waCA9ICQuZGF0ZXBpY2tlci5mb3JtYXRUaW1lKHRoaXMuc3VwcG9ydC5hbXBtID8gJ2hodCcgOiAnSEgnLCB7IGhvdXI6IGggfSwgbyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0ZCBkYXRhLWZvcj0iJyArIGxpdGVtICsgJyI+JyArIHRtcGggKyAnPFwvdGQ+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gb1tsaXRlbSArICdNaW4nXTsgbSA8PSBtYXhbbGl0ZW1dOyBtICs9IHBhcnNlSW50KG9bbGl0ZW0gKyAnR3JpZCddLCAxMCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZFNpemVbbGl0ZW1dKys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0ZCBkYXRhLWZvcj0iJyArIGxpdGVtICsgJyI+JyArICgobSA8IDEwKSA/ICcwJyA6ICcnKSArIG0gKyAnPFwvdGQ+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxcL3RyPjxcL3RhYmxlPjxcL2Rpdj4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxcL2RkPic7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLy8gVGltZXpvbmUNCiAgICAgICAgICAgICAgICB2YXIgc2hvd1R6ID0gby5zaG93VGltZXpvbmUgIT09IG51bGwgPyBvLnNob3dUaW1lem9uZSA6IHRoaXMuc3VwcG9ydC50aW1lem9uZTsNCiAgICAgICAgICAgICAgICBodG1sICs9ICc8ZHQgY2xhc3M9InVpX3RwaWNrZXJfdGltZXpvbmVfbGFiZWwiJyArIChzaG93VHogPyAnJyA6IG5vRGlzcGxheSkgKyAnPicgKyBvLnRpbWV6b25lVGV4dCArICc8XC9kdD4nOw0KICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkZCBjbGFzcz0idWlfdHBpY2tlcl90aW1lem9uZSIgJyArIChzaG93VHogPyAnJyA6IG5vRGlzcGxheSkgKyAnPjxcL2RkPic7DQoNCiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGVsZW1lbnRzIGZyb20gc3RyaW5nDQogICAgICAgICAgICAgICAgaHRtbCArPSAnPFwvZGw+PFwvZGl2Pic7DQogICAgICAgICAgICAgICAgdmFyICR0cCA9ICQoaHRtbCk7DQoNCiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBvbmx5IHdhbnQgdGltZSBwaWNrZXIuLi4NCiAgICAgICAgICAgICAgICBpZiAoby50aW1lT25seSA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgICAgICAkdHAucHJlcGVuZCgnPGRpdiBjbGFzcz0idWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCI+JyArICc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXRpdGxlIj4nICsgby50aW1lT25seVRpdGxlICsgJzxcL2Rpdj4nICsgJzxcL2Rpdj4nKTsNCiAgICAgICAgICAgICAgICAgICAgJGRwLmZpbmQoJy51aS1kYXRlcGlja2VyLWhlYWRlciwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXInKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLy8gYWRkIHNsaWRlcnMsIGFkanVzdCBncmlkcywgYWRkIGV2ZW50cw0KICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0cF9pbnN0LnVuaXRzLmxlbmd0aDsgaSA8IGw7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICBsaXRlbSA9IHRwX2luc3QudW5pdHNbaV07DQogICAgICAgICAgICAgICAgICAgIHVpdGVtID0gbGl0ZW0uc3Vic3RyKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBsaXRlbS5zdWJzdHIoMSk7DQogICAgICAgICAgICAgICAgICAgIHNob3cgPSBvWydzaG93JyArIHVpdGVtXSAhPT0gbnVsbCA/IG9bJ3Nob3cnICsgdWl0ZW1dIDogdGhpcy5zdXBwb3J0W2xpdGVtXTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIHNsaWRlcg0KICAgICAgICAgICAgICAgICAgICB0cF9pbnN0W2xpdGVtICsgJ19zbGlkZXInXSA9IHRwX2luc3QuY29udHJvbC5jcmVhdGUodHBfaW5zdCwgJHRwLmZpbmQoJy51aV90cGlja2VyXycgKyBsaXRlbSArICdfc2xpZGVyJyksIGxpdGVtLCB0cF9pbnN0W2xpdGVtXSwgb1tsaXRlbSArICdNaW4nXSwgbWF4W2xpdGVtXSwgb1snc3RlcCcgKyB1aXRlbV0pOw0KDQogICAgICAgICAgICAgICAgICAgIC8vIGFkanVzdCB0aGUgZ3JpZCBhbmQgYWRkIGNsaWNrIGV2ZW50DQogICAgICAgICAgICAgICAgICAgIGlmIChzaG93ICYmIG9bbGl0ZW0gKyAnR3JpZCddID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDEwMCAqIGdyaWRTaXplW2xpdGVtXSAqIG9bbGl0ZW0gKyAnR3JpZCddIC8gKG1heFtsaXRlbV0gLSBvW2xpdGVtICsgJ01pbiddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0cC5maW5kKCcudWlfdHBpY2tlcl8nICsgbGl0ZW0gKyAnIHRhYmxlJykuY3NzKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogc2l6ZSArICIlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBvLmlzUlRMID8gJzAnIDogKChzaXplIC8gKC0yICogZ3JpZFNpemVbbGl0ZW1dKSkgKyAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiBvLmlzUlRMID8gKChzaXplIC8gKC0yICogZ3JpZFNpemVbbGl0ZW1dKSkgKyAiJSIpIDogJzAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbGxhcHNlOiAnY29sbGFwc2UnDQogICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5kKCJ0ZCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICR0ID0gJCh0aGlzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9ICR0Lmh0bWwoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHBhcnNlSW50KGgucmVwbGFjZSgvW14wLTldL2cpLCAxMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwID0gaC5yZXBsYWNlKC9bXmFwbV0vaWcpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gJHQuZGF0YSgnZm9yJyk7IC8vIGxvc2VzIHNjb3BlLCBzbyB3ZSB1c2UgZGF0YS1mb3INCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmID09PSAnaG91cicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwLmluZGV4T2YoJ3AnKSAhPT0gLTEgJiYgbiA8IDEyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuICs9IDEyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwLmluZGV4T2YoJ2EnKSAhPT0gLTEgJiYgbiA9PT0gMTIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwX2luc3QuY29udHJvbC52YWx1ZSh0cF9pbnN0LCB0cF9pbnN0W2YgKyAnX3NsaWRlciddLCBsaXRlbSwgbik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cF9pbnN0Ll9vblRpbWVDaGFuZ2UoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cF9pbnN0Ll9vblNlbGVjdEhhbmRsZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNzcyh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICgxMDAgLyBncmlkU2l6ZVtsaXRlbV0pICsgJyUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nDQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfSAvLyBlbmQgaWYgZ3JpZCA+IDANCiAgICAgICAgICAgICAgICB9IC8vIGVuZCBmb3IgbG9vcA0KDQogICAgICAgICAgICAgICAgLy8gQWRkIHRpbWV6b25lIG9wdGlvbnMNCiAgICAgICAgICAgICAgICB0aGlzLnRpbWV6b25lX3NlbGVjdCA9ICR0cC5maW5kKCcudWlfdHBpY2tlcl90aW1lem9uZScpLmFwcGVuZCgnPHNlbGVjdD48XC9zZWxlY3Q+JykuZmluZCgic2VsZWN0Iik7DQogICAgICAgICAgICAgICAgJC5mbi5hcHBlbmQuYXBwbHkodGhpcy50aW1lem9uZV9zZWxlY3QsDQoJCQkJJC5tYXAoby50aW1lem9uZUxpc3QsIGZ1bmN0aW9uICh2YWwsIGlkeCkgew0KCQkJCSAgICByZXR1cm4gJCgiPG9wdGlvbiAvPiIpLnZhbCh0eXBlb2YgdmFsID09PSAib2JqZWN0IiA/IHZhbC52YWx1ZSA6IHZhbCkudGV4dCh0eXBlb2YgdmFsID09PSAib2JqZWN0IiA/IHZhbC5sYWJlbCA6IHZhbCk7DQoJCQkJfSkpOw0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoaXMudGltZXpvbmUpICE9PSAidW5kZWZpbmVkIiAmJiB0aGlzLnRpbWV6b25lICE9PSBudWxsICYmIHRoaXMudGltZXpvbmUgIT09ICIiKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBsb2NhbF90aW1lem9uZSA9IChuZXcgRGF0ZSh0aGlzLmluc3Quc2VsZWN0ZWRZZWFyLCB0aGlzLmluc3Quc2VsZWN0ZWRNb250aCwgdGhpcy5pbnN0LnNlbGVjdGVkRGF5LCAxMikpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiAtMTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsX3RpbWV6b25lID09PSB0aGlzLnRpbWV6b25lKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RMb2NhbFRpbWV6b25lKHRwX2luc3QpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lem9uZV9zZWxlY3QudmFsKHRoaXMudGltZXpvbmUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5ob3VyKSAhPT0gInVuZGVmaW5lZCIgJiYgdGhpcy5ob3VyICE9PSBudWxsICYmIHRoaXMuaG91ciAhPT0gIiIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXpvbmVfc2VsZWN0LnZhbChvLnRpbWV6b25lKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdExvY2FsVGltZXpvbmUodHBfaW5zdCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy50aW1lem9uZV9zZWxlY3QuY2hhbmdlKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7DQogICAgICAgICAgICAgICAgICAgIHRwX2luc3QuX29uU2VsZWN0SGFuZGxlcigpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIC8vIEVuZCB0aW1lem9uZSBvcHRpb25zDQoNCiAgICAgICAgICAgICAgICAvLyBpbmplY3QgdGltZXBpY2tlciBpbnRvIGRhdGVwaWNrZXINCiAgICAgICAgICAgICAgICB2YXIgJGJ1dHRvblBhbmVsID0gJGRwLmZpbmQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKTsNCiAgICAgICAgICAgICAgICBpZiAoJGJ1dHRvblBhbmVsLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICAkYnV0dG9uUGFuZWwuYmVmb3JlKCR0cCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJGRwLmFwcGVuZCgkdHApOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVPYmogPSAkdHAuZmluZCgnLnVpX3RwaWNrZXJfdGltZScpOw0KDQogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdCAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgdGltZURlZmluZWQgPSB0aGlzLnRpbWVEZWZpbmVkOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRpbWVDaGFuZ2UoKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lRGVmaW5lZCA9IHRpbWVEZWZpbmVkOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIHNsaWRlQWNjZXNzIGludGVncmF0aW9uOiBodHRwOi8vdHJlbnRyaWNoYXJkc29uLmNvbS8yMDExLzExLzExL2pxdWVyeS11aS1zbGlkZXJzLWFuZC10b3VjaC1hY2Nlc3NpYmlsaXR5Lw0KICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0cy5hZGRTbGlkZXJBY2Nlc3MpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHNsaWRlckFjY2Vzc0FyZ3MgPSB0aGlzLl9kZWZhdWx0cy5zbGlkZXJBY2Nlc3NBcmdzLA0KCQkJCQkJcnRsID0gdGhpcy5fZGVmYXVsdHMuaXNSVEw7DQogICAgICAgICAgICAgICAgICAgIHNsaWRlckFjY2Vzc0FyZ3MuaXNSVEwgPSBydGw7DQoNCiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IC8vIGZpeCBmb3IgaW5saW5lIG1vZGUNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdHAuZmluZCgnLnVpLXNsaWRlci1hY2Nlc3MnKS5sZW5ndGggPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHAuZmluZCgnLnVpLXNsaWRlcjp2aXNpYmxlJykuc2xpZGVyQWNjZXNzKHNsaWRlckFjY2Vzc0FyZ3MpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZml4IGFueSBncmlkcyBzaW5jZSBzbGlkZXJzIGFyZSBzaG9ydGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsaWRlckFjY2Vzc1dpZHRoID0gJHRwLmZpbmQoJy51aS1zbGlkZXItYWNjZXNzOmVxKDApJykub3V0ZXJXaWR0aCh0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xpZGVyQWNjZXNzV2lkdGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRwLmZpbmQoJ3RhYmxlOnZpc2libGUnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkZyA9ICQodGhpcyksDQoJCQkJCQkJCQkJb2xkV2lkdGggPSAkZy5vdXRlcldpZHRoKCksDQoJCQkJCQkJCQkJb2xkTWFyZ2luTGVmdCA9ICRnLmNzcyhydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnKS50b1N0cmluZygpLnJlcGxhY2UoJyUnLCAnJyksDQoJCQkJCQkJCQkJbmV3V2lkdGggPSBvbGRXaWR0aCAtIHNsaWRlckFjY2Vzc1dpZHRoLA0KCQkJCQkJCQkJCW5ld01hcmdpbkxlZnQgPSAoKG9sZE1hcmdpbkxlZnQgKiBuZXdXaWR0aCkgLyBvbGRXaWR0aCkgKyAnJScsDQoJCQkJCQkJCQkJY3NzID0geyB3aWR0aDogbmV3V2lkdGgsIG1hcmdpblJpZ2h0OiAwLCBtYXJnaW5MZWZ0OiAwIH07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NbcnRsID8gJ21hcmdpblJpZ2h0JyA6ICdtYXJnaW5MZWZ0J10gPSBuZXdNYXJnaW5MZWZ0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGcuY3NzKGNzcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSwgMTApOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBlbmQgc2xpZGVBY2Nlc3MgaW50ZWdyYXRpb24NCg0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2xpbWl0TWluTWF4RGF0ZVRpbWUodGhpcy5pbnN0LCB0cnVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICAvKg0KCQkqIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gbGltaXQgdGhlIGFiaWxpdHkgdG8gZ28gb3V0c2lkZSB0aGUNCgkJKiBtaW4vbWF4IGRhdGUgcmFuZ2UNCgkJKi8NCiAgICAgICAgX2xpbWl0TWluTWF4RGF0ZVRpbWU6IGZ1bmN0aW9uIChkcF9pbnN0LCBhZGp1c3RTbGlkZXJzKSB7DQogICAgICAgICAgICB2YXIgbyA9IHRoaXMuX2RlZmF1bHRzLA0KCQkJCWRwX2RhdGUgPSBuZXcgRGF0ZShkcF9pbnN0LnNlbGVjdGVkWWVhciwgZHBfaW5zdC5zZWxlY3RlZE1vbnRoLCBkcF9pbnN0LnNlbGVjdGVkRGF5KTsNCg0KICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0cy5zaG93VGltZXBpY2tlcikgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0gLy8gTm8gdGltZSBzbyBub3RoaW5nIHRvIGNoZWNrIGhlcmUNCg0KICAgICAgICAgICAgaWYgKCQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpICE9PSBudWxsICYmICQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpICE9PSB1bmRlZmluZWQgJiYgZHBfZGF0ZSkgew0KICAgICAgICAgICAgICAgIHZhciBtaW5EYXRlVGltZSA9ICQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpLA0KCQkJCQltaW5EYXRlVGltZURhdGUgPSBuZXcgRGF0ZShtaW5EYXRlVGltZS5nZXRGdWxsWWVhcigpLCBtaW5EYXRlVGltZS5nZXRNb250aCgpLCBtaW5EYXRlVGltZS5nZXREYXRlKCksIDAsIDAsIDAsIDApOw0KDQogICAgICAgICAgICAgICAgaWYgKHRoaXMuaG91ck1pbk9yaWdpbmFsID09PSBudWxsIHx8IHRoaXMubWludXRlTWluT3JpZ2luYWwgPT09IG51bGwgfHwgdGhpcy5zZWNvbmRNaW5PcmlnaW5hbCA9PT0gbnVsbCB8fCB0aGlzLm1pbGxpc2VjTWluT3JpZ2luYWwgPT09IG51bGwgfHwgdGhpcy5taWNyb3NlY01pbk9yaWdpbmFsID09PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuaG91ck1pbk9yaWdpbmFsID0gby5ob3VyTWluOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZU1pbk9yaWdpbmFsID0gby5taW51dGVNaW47DQogICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kTWluT3JpZ2luYWwgPSBvLnNlY29uZE1pbjsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsID0gby5taWxsaXNlY01pbjsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWNyb3NlY01pbk9yaWdpbmFsID0gby5taWNyb3NlY01pbjsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoZHBfaW5zdC5zZXR0aW5ncy50aW1lT25seSB8fCBtaW5EYXRlVGltZURhdGUuZ2V0VGltZSgpID09PSBkcF9kYXRlLmdldFRpbWUoKSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gbWluRGF0ZVRpbWUuZ2V0SG91cnMoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaG91ciA8PSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWludXRlTWluID0gbWluRGF0ZVRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWludXRlIDw9IHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWluOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1pbiA9IG1pbkRhdGVUaW1lLmdldFNlY29uZHMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWNvbmQgPD0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01pbiA9IG1pbkRhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5taWxsaXNlYyA8PSB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01pbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlYyA9IHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW4gPSBtaW5EYXRlVGltZS5nZXRNaWNyb3NlY29uZHMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pY3Jvc2VjIDwgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pY3Jvc2VjID0gdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW47DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01pbiA9IHRoaXMubWljcm9zZWNNaW5PcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01pbiA9IHRoaXMubWljcm9zZWNNaW5PcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1pbiA9IHRoaXMuc2Vjb25kTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNaW4gPSB0aGlzLm1pbGxpc2VjTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW4gPSB0aGlzLm1pY3Jvc2VjTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSB0aGlzLm1pbnV0ZU1pbk9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluID0gdGhpcy5zZWNvbmRNaW5PcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW4gPSB0aGlzLm1pY3Jvc2VjTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gdGhpcy5ob3VyTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbiA9IHRoaXMubWludXRlTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1pbiA9IHRoaXMuc2Vjb25kTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01pbiA9IHRoaXMubWljcm9zZWNNaW5PcmlnaW5hbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnbWF4RGF0ZVRpbWUnKSAhPT0gbnVsbCAmJiAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnbWF4RGF0ZVRpbWUnKSAhPT0gdW5kZWZpbmVkICYmIGRwX2RhdGUpIHsNCiAgICAgICAgICAgICAgICB2YXIgbWF4RGF0ZVRpbWUgPSAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnbWF4RGF0ZVRpbWUnKSwNCgkJCQkJbWF4RGF0ZVRpbWVEYXRlID0gbmV3IERhdGUobWF4RGF0ZVRpbWUuZ2V0RnVsbFllYXIoKSwgbWF4RGF0ZVRpbWUuZ2V0TW9udGgoKSwgbWF4RGF0ZVRpbWUuZ2V0RGF0ZSgpLCAwLCAwLCAwLCAwKTsNCg0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvdXJNYXhPcmlnaW5hbCA9PT0gbnVsbCB8fCB0aGlzLm1pbnV0ZU1heE9yaWdpbmFsID09PSBudWxsIHx8IHRoaXMuc2Vjb25kTWF4T3JpZ2luYWwgPT09IG51bGwgfHwgdGhpcy5taWxsaXNlY01heE9yaWdpbmFsID09PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuaG91ck1heE9yaWdpbmFsID0gby5ob3VyTWF4Ow0KICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZU1heE9yaWdpbmFsID0gby5taW51dGVNYXg7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kTWF4T3JpZ2luYWwgPSBvLnNlY29uZE1heDsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY01heE9yaWdpbmFsID0gby5taWxsaXNlY01heDsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWNyb3NlY01heE9yaWdpbmFsID0gby5taWNyb3NlY01heDsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoZHBfaW5zdC5zZXR0aW5ncy50aW1lT25seSB8fCBtYXhEYXRlVGltZURhdGUuZ2V0VGltZSgpID09PSBkcF9kYXRlLmdldFRpbWUoKSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4ID0gbWF4RGF0ZVRpbWUuZ2V0SG91cnMoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaG91ciA+PSB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gbWF4RGF0ZVRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWludXRlID49IHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCA9IG1heERhdGVUaW1lLmdldFNlY29uZHMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWNvbmQgPj0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCA9IG1heERhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5taWxsaXNlYyA+PSB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlYyA9IHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXggPSBtYXhEYXRlVGltZS5nZXRNaWNyb3NlY29uZHMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pY3Jvc2VjID4gdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pY3Jvc2VjID0gdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXg7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01heCA9IHRoaXMubWljcm9zZWNNYXhPcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01heCA9IHRoaXMubWljcm9zZWNNYXhPcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCA9IHRoaXMuc2Vjb25kTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNYXggPSB0aGlzLm1pbGxpc2VjTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXggPSB0aGlzLm1pY3Jvc2VjTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNYXggPSB0aGlzLm1pbnV0ZU1heE9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4ID0gdGhpcy5zZWNvbmRNYXhPcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXggPSB0aGlzLm1pY3Jvc2VjTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4ID0gdGhpcy5ob3VyTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heCA9IHRoaXMubWludXRlTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCA9IHRoaXMuc2Vjb25kTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01heCA9IHRoaXMubWljcm9zZWNNYXhPcmlnaW5hbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChkcF9pbnN0LnNldHRpbmdzLm1pblRpbWUgIT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICB2YXIgdGVtcE1pblRpbWUgPSBuZXcgRGF0ZSgiMDEvMDEvMTk3MCAiICsgZHBfaW5zdC5zZXR0aW5ncy5taW5UaW1lKTsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob3VyIDwgdGVtcE1pblRpbWUuZ2V0SG91cnMoKSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gdGVtcE1pblRpbWUuZ2V0SG91cnMoKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSB0ZW1wTWluVGltZS5nZXRNaW51dGVzKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhvdXIgPT09IHRlbXBNaW5UaW1lLmdldEhvdXJzKCkgJiYgdGhpcy5taW51dGUgPCB0ZW1wTWluVGltZS5nZXRNaW51dGVzKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSB0ZW1wTWluVGltZS5nZXRNaW51dGVzKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRzLmhvdXJNaW4gPCB0ZW1wTWluVGltZS5nZXRIb3VycygpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gdGVtcE1pblRpbWUuZ2V0SG91cnMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbiA9IHRlbXBNaW5UaW1lLmdldE1pbnV0ZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kZWZhdWx0cy5ob3VyTWluID09PSB0ZW1wTWluVGltZS5nZXRIb3VycygpID09PSB0aGlzLmhvdXIgJiYgdGhpcy5fZGVmYXVsdHMubWludXRlTWluIDwgdGVtcE1pblRpbWUuZ2V0TWludXRlcygpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSB0ZW1wTWluVGltZS5nZXRNaW51dGVzKCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSAwOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoZHBfaW5zdC5zZXR0aW5ncy5tYXhUaW1lICE9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgdmFyIHRlbXBNYXhUaW1lID0gbmV3IERhdGUoIjAxLzAxLzE5NzAgIiArIGRwX2luc3Quc2V0dGluZ3MubWF4VGltZSk7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuaG91ciA+IHRlbXBNYXhUaW1lLmdldEhvdXJzKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3VyID0gdGhpcy5fZGVmYXVsdHMuaG91ck1heCA9IHRlbXBNYXhUaW1lLmdldEhvdXJzKCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGVtcE1heFRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ob3VyID09PSB0ZW1wTWF4VGltZS5nZXRIb3VycygpICYmIHRoaXMubWludXRlID4gdGVtcE1heFRpbWUuZ2V0TWludXRlcygpKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGVtcE1heFRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0cy5ob3VyTWF4ID4gdGVtcE1heFRpbWUuZ2V0SG91cnMoKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMuaG91ck1heCA9IHRlbXBNYXhUaW1lLmdldEhvdXJzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNYXggPSB0ZW1wTWF4VGltZS5nZXRNaW51dGVzKCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGVmYXVsdHMuaG91ck1heCA9PT0gdGVtcE1heFRpbWUuZ2V0SG91cnMoKSA9PT0gdGhpcy5ob3VyICYmIHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heCA+IHRlbXBNYXhUaW1lLmdldE1pbnV0ZXMoKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGVtcE1heFRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gNTk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChhZGp1c3RTbGlkZXJzICE9PSB1bmRlZmluZWQgJiYgYWRqdXN0U2xpZGVycyA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgIHZhciBob3VyTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLmhvdXJNYXggLSAoKHRoaXMuX2RlZmF1bHRzLmhvdXJNYXggLSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBIb3VyKSksIDEwKSwNCgkJCQkJbWluTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heCAtICgodGhpcy5fZGVmYXVsdHMubWludXRlTWF4IC0gdGhpcy5fZGVmYXVsdHMubWludXRlTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBNaW51dGUpKSwgMTApLA0KCQkJCQlzZWNNYXggPSBwYXJzZUludCgodGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5zZWNvbmRNYXggLSB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4pICUgdGhpcy5fZGVmYXVsdHMuc3RlcFNlY29uZCkpLCAxMCksDQoJCQkJCW1pbGxpc2VjTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCAtIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBNaWxsaXNlYykpLCAxMCksDQoJCQkJCW1pY3Jvc2VjTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLm1pY3Jvc2VjTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01heCAtIHRoaXMuX2RlZmF1bHRzLm1pY3Jvc2VjTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBNaWNyb3NlYykpLCAxMCk7DQoNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob3VyX3NsaWRlcikgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLmhvdXJfc2xpZGVyLCAnaG91cicsIHsgbWluOiB0aGlzLl9kZWZhdWx0cy5ob3VyTWluLCBtYXg6IGhvdXJNYXgsIHN0ZXA6IHRoaXMuX2RlZmF1bHRzLnN0ZXBIb3VyIH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5ob3VyX3NsaWRlciwgJ2hvdXInLCB0aGlzLmhvdXIgLSAodGhpcy5ob3VyICUgdGhpcy5fZGVmYXVsdHMuc3RlcEhvdXIpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHRoaXMubWludXRlX3NsaWRlcikgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pbnV0ZV9zbGlkZXIsICdtaW51dGUnLCB7IG1pbjogdGhpcy5fZGVmYXVsdHMubWludXRlTWluLCBtYXg6IG1pbk1heCwgc3RlcDogdGhpcy5fZGVmYXVsdHMuc3RlcE1pbnV0ZSB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMubWludXRlX3NsaWRlciwgJ21pbnV0ZScsIHRoaXMubWludXRlIC0gKHRoaXMubWludXRlICUgdGhpcy5fZGVmYXVsdHMuc3RlcE1pbnV0ZSkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWNvbmRfc2xpZGVyKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5vcHRpb25zKHRoaXMsIHRoaXMuc2Vjb25kX3NsaWRlciwgJ3NlY29uZCcsIHsgbWluOiB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4sIG1heDogc2VjTWF4LCBzdGVwOiB0aGlzLl9kZWZhdWx0cy5zdGVwU2Vjb25kIH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5zZWNvbmRfc2xpZGVyLCAnc2Vjb25kJywgdGhpcy5zZWNvbmQgLSAodGhpcy5zZWNvbmQgJSB0aGlzLl9kZWZhdWx0cy5zdGVwU2Vjb25kKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbGxpc2VjX3NsaWRlcikgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pbGxpc2VjX3NsaWRlciwgJ21pbGxpc2VjJywgeyBtaW46IHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluLCBtYXg6IG1pbGxpc2VjTWF4LCBzdGVwOiB0aGlzLl9kZWZhdWx0cy5zdGVwTWlsbGlzZWMgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pbGxpc2VjX3NsaWRlciwgJ21pbGxpc2VjJywgdGhpcy5taWxsaXNlYyAtICh0aGlzLm1pbGxpc2VjICUgdGhpcy5fZGVmYXVsdHMuc3RlcE1pbGxpc2VjKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pY3Jvc2VjX3NsaWRlcikgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pY3Jvc2VjX3NsaWRlciwgJ21pY3Jvc2VjJywgeyBtaW46IHRoaXMuX2RlZmF1bHRzLm1pY3Jvc2VjTWluLCBtYXg6IG1pY3Jvc2VjTWF4LCBzdGVwOiB0aGlzLl9kZWZhdWx0cy5zdGVwTWljcm9zZWMgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pY3Jvc2VjX3NsaWRlciwgJ21pY3Jvc2VjJywgdGhpcy5taWNyb3NlYyAtICh0aGlzLm1pY3Jvc2VjICUgdGhpcy5fZGVmYXVsdHMuc3RlcE1pY3Jvc2VjKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCgkJKiB3aGVuIGEgc2xpZGVyIG1vdmVzLCBzZXQgdGhlIGludGVybmFsIHRpbWUuLi4NCgkJKiBvbiB0aW1lIGNoYW5nZSBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSB0aW1lIGlzIHVwZGF0ZWQgaW4gdGhlIHRleHQgZmllbGQNCgkJKi8NCiAgICAgICAgX29uVGltZUNoYW5nZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0cy5zaG93VGltZXBpY2tlcikgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciBob3VyID0gKHRoaXMuaG91cl9zbGlkZXIpID8gdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMuaG91cl9zbGlkZXIsICdob3VyJykgOiBmYWxzZSwNCgkJCQltaW51dGUgPSAodGhpcy5taW51dGVfc2xpZGVyKSA/IHRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pbnV0ZV9zbGlkZXIsICdtaW51dGUnKSA6IGZhbHNlLA0KCQkJCXNlY29uZCA9ICh0aGlzLnNlY29uZF9zbGlkZXIpID8gdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMuc2Vjb25kX3NsaWRlciwgJ3NlY29uZCcpIDogZmFsc2UsDQoJCQkJbWlsbGlzZWMgPSAodGhpcy5taWxsaXNlY19zbGlkZXIpID8gdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMubWlsbGlzZWNfc2xpZGVyLCAnbWlsbGlzZWMnKSA6IGZhbHNlLA0KCQkJCW1pY3Jvc2VjID0gKHRoaXMubWljcm9zZWNfc2xpZGVyKSA/IHRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pY3Jvc2VjX3NsaWRlciwgJ21pY3Jvc2VjJykgOiBmYWxzZSwNCgkJCQl0aW1lem9uZSA9ICh0aGlzLnRpbWV6b25lX3NlbGVjdCkgPyB0aGlzLnRpbWV6b25lX3NlbGVjdC52YWwoKSA6IGZhbHNlLA0KCQkJCW8gPSB0aGlzLl9kZWZhdWx0cywNCgkJCQlwaWNrZXJUaW1lRm9ybWF0ID0gby5waWNrZXJUaW1lRm9ybWF0IHx8IG8udGltZUZvcm1hdCwNCgkJCQlwaWNrZXJUaW1lU3VmZml4ID0gby5waWNrZXJUaW1lU3VmZml4IHx8IG8udGltZVN1ZmZpeDsNCg0KICAgICAgICAgICAgaWYgKHR5cGVvZiAoaG91cikgPT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICAgICAgaG91ciA9IGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHR5cGVvZiAobWludXRlKSA9PT0gJ29iamVjdCcpIHsNCiAgICAgICAgICAgICAgICBtaW51dGUgPSBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0eXBlb2YgKHNlY29uZCkgPT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICAgICAgc2Vjb25kID0gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodHlwZW9mIChtaWxsaXNlYykgPT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICAgICAgbWlsbGlzZWMgPSBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0eXBlb2YgKG1pY3Jvc2VjKSA9PT0gJ29iamVjdCcpIHsNCiAgICAgICAgICAgICAgICBtaWNyb3NlYyA9IGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHR5cGVvZiAodGltZXpvbmUpID09PSAnb2JqZWN0Jykgew0KICAgICAgICAgICAgICAgIHRpbWV6b25lID0gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChob3VyICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludChob3VyLCAxMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAobWludXRlICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1pbnV0ZSwgMTApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHNlY29uZCAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICBzZWNvbmQgPSBwYXJzZUludChzZWNvbmQsIDEwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChtaWxsaXNlYyAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICBtaWxsaXNlYyA9IHBhcnNlSW50KG1pbGxpc2VjLCAxMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAobWljcm9zZWMgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgbWljcm9zZWMgPSBwYXJzZUludChtaWNyb3NlYywgMTApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHRpbWV6b25lICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIHRpbWV6b25lID0gdGltZXpvbmUudG9TdHJpbmcoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIGFtcG0gPSBvW2hvdXIgPCAxMiA/ICdhbU5hbWVzJyA6ICdwbU5hbWVzJ11bMF07DQoNCiAgICAgICAgICAgIC8vIElmIHRoZSB1cGRhdGUgd2FzIGRvbmUgaW4gdGhlIGlucHV0IGZpZWxkLCB0aGUgaW5wdXQgZmllbGQgc2hvdWxkIG5vdCBiZSB1cGRhdGVkLg0KICAgICAgICAgICAgLy8gSWYgdGhlIHVwZGF0ZSB3YXMgZG9uZSB1c2luZyB0aGUgc2xpZGVycywgdXBkYXRlIHRoZSBpbnB1dCBmaWVsZC4NCiAgICAgICAgICAgIHZhciBoYXNDaGFuZ2VkID0gKA0KCQkJCQkJaG91ciAhPT0gcGFyc2VJbnQodGhpcy5ob3VyLCAxMCkgfHwgLy8gc2xpZGVycyBzaG91bGQgYWxsIGJlIG51bWVyaWMNCgkJCQkJCW1pbnV0ZSAhPT0gcGFyc2VJbnQodGhpcy5taW51dGUsIDEwKSB8fA0KCQkJCQkJc2Vjb25kICE9PSBwYXJzZUludCh0aGlzLnNlY29uZCwgMTApIHx8DQoJCQkJCQltaWxsaXNlYyAhPT0gcGFyc2VJbnQodGhpcy5taWxsaXNlYywgMTApIHx8DQoJCQkJCQltaWNyb3NlYyAhPT0gcGFyc2VJbnQodGhpcy5taWNyb3NlYywgMTApIHx8DQoJCQkJCQkodGhpcy5hbXBtLmxlbmd0aCA+IDAgJiYgKGhvdXIgPCAxMikgIT09ICgkLmluQXJyYXkodGhpcy5hbXBtLnRvVXBwZXJDYXNlKCksIHRoaXMuYW1OYW1lcykgIT09IC0xKSkgfHwNCgkJCQkJCSh0aGlzLnRpbWV6b25lICE9PSBudWxsICYmIHRpbWV6b25lICE9PSB0aGlzLnRpbWV6b25lLnRvU3RyaW5nKCkpIC8vIGNvdWxkIGJlIG51bWVyaWMgb3IgIkVTVCIgZm9ybWF0LCBzbyB1c2UgdG9TdHJpbmcoKQ0KCQkJCQkpOw0KDQogICAgICAgICAgICBpZiAoaGFzQ2hhbmdlZCkgew0KDQogICAgICAgICAgICAgICAgaWYgKGhvdXIgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuaG91ciA9IGhvdXI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChtaW51dGUgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gbWludXRlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoc2Vjb25kICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IHNlY29uZDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG1pbGxpc2VjICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2VjID0gbWlsbGlzZWM7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChtaWNyb3NlYyAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWNyb3NlYyA9IG1pY3Jvc2VjOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAodGltZXpvbmUgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXpvbmUgPSB0aW1lem9uZTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5zdCkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3QgPSAkLmRhdGVwaWNrZXIuX2dldEluc3QodGhpcy4kaW5wdXRbMF0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHRoaXMuX2xpbWl0TWluTWF4RGF0ZVRpbWUodGhpcy5pbnN0LCB0cnVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnQuYW1wbSkgew0KICAgICAgICAgICAgICAgIHRoaXMuYW1wbSA9IGFtcG07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIFVwZGF0ZXMgdGhlIHRpbWUgd2l0aGluIHRoZSB0aW1lcGlja2VyDQogICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFRpbWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZShvLnRpbWVGb3JtYXQsIHRoaXMsIG8pOw0KICAgICAgICAgICAgaWYgKHRoaXMuJHRpbWVPYmopIHsNCiAgICAgICAgICAgICAgICBpZiAocGlja2VyVGltZUZvcm1hdCA9PT0gby50aW1lRm9ybWF0KSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVPYmoudGV4dCh0aGlzLmZvcm1hdHRlZFRpbWUgKyBwaWNrZXJUaW1lU3VmZml4KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVPYmoudGV4dCgkLmRhdGVwaWNrZXIuZm9ybWF0VGltZShwaWNrZXJUaW1lRm9ybWF0LCB0aGlzLCBvKSArIHBpY2tlclRpbWVTdWZmaXgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy50aW1lRGVmaW5lZCA9IHRydWU7DQogICAgICAgICAgICBpZiAoaGFzQ2hhbmdlZCkgew0KICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7DQogICAgICAgICAgICAgICAgLy90aGlzLiRpbnB1dC5mb2N1cygpOyAvLyBtYXkgYXV0b21hdGljYWxseSBvcGVuIHRoZSBwaWNrZXIgb24gc2V0RGF0ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIC8qDQoJCSogY2FsbCBjdXN0b20gb25TZWxlY3QuDQoJCSogYmluZCB0byBzbGlkZXJzIHNsaWRlc3RvcCwgYW5kIGdyaWQgY2xpY2suDQoJCSovDQogICAgICAgIF9vblNlbGVjdEhhbmRsZXI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBvblNlbGVjdCA9IHRoaXMuX2RlZmF1bHRzLm9uU2VsZWN0IHx8IHRoaXMuaW5zdC5zZXR0aW5ncy5vblNlbGVjdDsNCiAgICAgICAgICAgIHZhciBpbnB1dEVsID0gdGhpcy4kaW5wdXQgPyB0aGlzLiRpbnB1dFswXSA6IG51bGw7DQogICAgICAgICAgICBpZiAob25TZWxlY3QgJiYgaW5wdXRFbCkgew0KICAgICAgICAgICAgICAgIG9uU2VsZWN0LmFwcGx5KGlucHV0RWwsIFt0aGlzLmZvcm1hdHRlZERhdGVUaW1lLCB0aGlzXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCgkJKiB1cGRhdGUgb3VyIGlucHV0IHdpdGggdGhlIG5ldyBkYXRlIHRpbWUuLg0KCQkqLw0KICAgICAgICBfdXBkYXRlRGF0ZVRpbWU6IGZ1bmN0aW9uIChkcF9pbnN0KSB7DQogICAgICAgICAgICBkcF9pbnN0ID0gdGhpcy5pbnN0IHx8IGRwX2luc3Q7DQogICAgICAgICAgICB2YXIgZHRUbXAgPSAoZHBfaW5zdC5jdXJyZW50WWVhciA+IDAgPw0KCQkJCQkJCW5ldyBEYXRlKGRwX2luc3QuY3VycmVudFllYXIsIGRwX2luc3QuY3VycmVudE1vbnRoLCBkcF9pbnN0LmN1cnJlbnREYXkpIDoNCgkJCQkJCQluZXcgRGF0ZShkcF9pbnN0LnNlbGVjdGVkWWVhciwgZHBfaW5zdC5zZWxlY3RlZE1vbnRoLCBkcF9pbnN0LnNlbGVjdGVkRGF5KSksDQoJCQkJZHQgPSAkLmRhdGVwaWNrZXIuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGR0VG1wKSwNCgkJCQkvL2R0ID0gJC5kYXRlcGlja2VyLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkcF9pbnN0LnNlbGVjdGVkWWVhciwgZHBfaW5zdC5zZWxlY3RlZE1vbnRoLCBkcF9pbnN0LnNlbGVjdGVkRGF5KSksDQoJCQkJLy9kdCA9ICQuZGF0ZXBpY2tlci5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZHBfaW5zdC5jdXJyZW50WWVhciwgZHBfaW5zdC5jdXJyZW50TW9udGgsIGRwX2luc3QuY3VycmVudERheSkpLA0KCQkJCWRhdGVGbXQgPSAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnZGF0ZUZvcm1hdCcpLA0KCQkJCWZvcm1hdENmZyA9ICQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKGRwX2luc3QpLA0KCQkJCXRpbWVBdmFpbGFibGUgPSBkdCAhPT0gbnVsbCAmJiB0aGlzLnRpbWVEZWZpbmVkOw0KICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRlID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoZGF0ZUZtdCwgKGR0ID09PSBudWxsID8gbmV3IERhdGUoKSA6IGR0KSwgZm9ybWF0Q2ZnKTsNCiAgICAgICAgICAgIHZhciBmb3JtYXR0ZWREYXRlVGltZSA9IHRoaXMuZm9ybWF0dGVkRGF0ZTsNCg0KICAgICAgICAgICAgLy8gaWYgYSBzbGlkZXIgd2FzIGNoYW5nZWQgYnV0IGRhdGVwaWNrZXIgZG9lc24ndCBoYXZlIGEgdmFsdWUgeWV0LCBzZXQgaXQNCiAgICAgICAgICAgIGlmIChkcF9pbnN0Lmxhc3RWYWwgPT09ICIiKSB7DQogICAgICAgICAgICAgICAgZHBfaW5zdC5jdXJyZW50WWVhciA9IGRwX2luc3Quc2VsZWN0ZWRZZWFyOw0KICAgICAgICAgICAgICAgIGRwX2luc3QuY3VycmVudE1vbnRoID0gZHBfaW5zdC5zZWxlY3RlZE1vbnRoOw0KICAgICAgICAgICAgICAgIGRwX2luc3QuY3VycmVudERheSA9IGRwX2luc3Quc2VsZWN0ZWREYXk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8qDQoJCQkqIHJlbW92ZSBmb2xsb3dpbmcgbGluZXMgdG8gZm9yY2UgZXZlcnkgY2hhbmdlcyBpbiBkYXRlIHBpY2tlciB0byBjaGFuZ2UgdGhlIGlucHV0IHZhbHVlDQoJCQkqIEJ1ZyBkZXNjcmlwdGlvbnM6IHdoZW4gYW4gaW5wdXQgZmllbGQgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYW5kIGNsaWNrIG9uIHRoZSBmaWVsZCB0byBwb3AgdXAgdGhlIGRhdGUgcGlja2VyLiANCgkJCSogSWYgdGhlIHVzZXIgbWFudWFsbHkgZW1wdHkgdGhlIHZhbHVlIGluIHRoZSBpbnB1dCBmaWVsZCwgdGhlIGRhdGUgcGlja2VyIHdpbGwgbmV2ZXIgY2hhbmdlIHNlbGVjdGVkIHZhbHVlLg0KCQkJKi8NCiAgICAgICAgICAgIC8vaWYgKGRwX2luc3QubGFzdFZhbCAhPT0gdW5kZWZpbmVkICYmIChkcF9pbnN0Lmxhc3RWYWwubGVuZ3RoID4gMCAmJiB0aGlzLiRpbnB1dC52YWwoKS5sZW5ndGggPT09IDApKSB7DQogICAgICAgICAgICAvLwlyZXR1cm47DQogICAgICAgICAgICAvL30NCg0KICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5ID09PSB0cnVlICYmIHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5U2hvd0RhdGUgPT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZVRpbWUgPSB0aGlzLmZvcm1hdHRlZFRpbWU7DQogICAgICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl9kZWZhdWx0cy50aW1lT25seSAhPT0gdHJ1ZSAmJiAodGhpcy5fZGVmYXVsdHMuYWx3YXlzU2V0VGltZSB8fCB0aW1lQXZhaWxhYmxlKSkgfHwgKHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5ID09PSB0cnVlICYmIHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5U2hvd0RhdGUgPT09IHRydWUpKSB7DQogICAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZVRpbWUgKz0gdGhpcy5fZGVmYXVsdHMuc2VwYXJhdG9yICsgdGhpcy5mb3JtYXR0ZWRUaW1lICsgdGhpcy5fZGVmYXVsdHMudGltZVN1ZmZpeDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRlVGltZSA9IGZvcm1hdHRlZERhdGVUaW1lOw0KDQogICAgICAgICAgICBpZiAoIXRoaXMuX2RlZmF1bHRzLnNob3dUaW1lcGlja2VyKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHRoaXMuZm9ybWF0dGVkRGF0ZSk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJGFsdElucHV0ICYmIHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5ID09PSBmYWxzZSAmJiB0aGlzLl9kZWZhdWx0cy5hbHRGaWVsZFRpbWVPbmx5ID09PSB0cnVlKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kYWx0SW5wdXQudmFsKHRoaXMuZm9ybWF0dGVkVGltZSk7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHRoaXMuZm9ybWF0dGVkRGF0ZSk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJGFsdElucHV0KSB7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKGZvcm1hdHRlZERhdGVUaW1lKTsNCiAgICAgICAgICAgICAgICB2YXIgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAnJywNCgkJCQkJYWx0U2VwYXJhdG9yID0gdGhpcy5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yICE9PSBudWxsID8gdGhpcy5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yIDogdGhpcy5fZGVmYXVsdHMuc2VwYXJhdG9yLA0KCQkJCQlhbHRUaW1lU3VmZml4ID0gdGhpcy5fZGVmYXVsdHMuYWx0VGltZVN1ZmZpeCAhPT0gbnVsbCA/IHRoaXMuX2RlZmF1bHRzLmFsdFRpbWVTdWZmaXggOiB0aGlzLl9kZWZhdWx0cy50aW1lU3VmZml4Ow0KDQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0cy50aW1lT25seSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdHMuYWx0Rm9ybWF0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbHRGb3JtYXR0ZWREYXRlVGltZSA9ICQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKHRoaXMuX2RlZmF1bHRzLmFsdEZvcm1hdCwgKGR0ID09PSBudWxsID8gbmV3IERhdGUoKSA6IGR0KSwgZm9ybWF0Q2ZnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsdEZvcm1hdHRlZERhdGVUaW1lID0gdGhpcy5mb3JtYXR0ZWREYXRlOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGFsdEZvcm1hdHRlZERhdGVUaW1lKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbHRGb3JtYXR0ZWREYXRlVGltZSArPSBhbHRTZXBhcmF0b3I7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICBhbHRGb3JtYXR0ZWREYXRlVGltZSArPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZSh0aGlzLl9kZWZhdWx0cy5hbHRUaW1lRm9ybWF0LCB0aGlzLCB0aGlzLl9kZWZhdWx0cykgKyBhbHRUaW1lU3VmZml4Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgKz0gdGhpcy5mb3JtYXR0ZWRUaW1lICsgYWx0VGltZVN1ZmZpeDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy4kYWx0SW5wdXQudmFsKGFsdEZvcm1hdHRlZERhdGVUaW1lKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKGZvcm1hdHRlZERhdGVUaW1lKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy4kaW5wdXQudHJpZ2dlcigiY2hhbmdlIik7DQogICAgICAgIH0sDQoNCiAgICAgICAgX29uRm9jdXM6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmICghdGhpcy4kaW5wdXQudmFsKCkgJiYgdGhpcy5fZGVmYXVsdHMuZGVmYXVsdFZhbHVlKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHRoaXMuX2RlZmF1bHRzLmRlZmF1bHRWYWx1ZSk7DQogICAgICAgICAgICAgICAgdmFyIGluc3QgPSAkLmRhdGVwaWNrZXIuX2dldEluc3QodGhpcy4kaW5wdXQuZ2V0KDApKSwNCgkJCQkJdHBfaW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQogICAgICAgICAgICAgICAgaWYgKHRwX2luc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLnRpbWVPbmx5ICYmIChpbnN0LmlucHV0LnZhbCgpICE9PSBpbnN0Lmxhc3RWYWwpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpbnN0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQudGltZXBpY2tlci5sb2coZXJyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICAvKg0KCQkqIFNtYWxsIGFic3RyYWN0aW9uIHRvIGNvbnRyb2wgdHlwZXMNCgkJKiBXZSBjYW4gYWRkIG1vcmUsIGp1c3QgYmUgc3VyZSB0byBmb2xsb3cgdGhlIHBhdHRlcm46IGNyZWF0ZSwgb3B0aW9ucywgdmFsdWUNCgkJKi8NCiAgICAgICAgX2NvbnRyb2xzOiB7DQogICAgICAgICAgICAvLyBzbGlkZXIgbWV0aG9kcw0KICAgICAgICAgICAgc2xpZGVyOiB7DQogICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAodHBfaW5zdCwgb2JqLCB1bml0LCB2YWwsIG1pbiwgbWF4LCBzdGVwKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBydGwgPSB0cF9pbnN0Ll9kZWZhdWx0cy5pc1JUTDsgLy8gaWYgcnRsIGdvIC02MC0+MCBpbnN0ZWFkIG9mIDAtPjYwDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmoucHJvcCgnc2xpZGUnLCBudWxsKS5zbGlkZXIoew0KICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb246ICJob3Jpem9udGFsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBydGwgPyB2YWwgKiAtMSA6IHZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogcnRsID8gbWF4ICogLTEgOiBtaW4sDQogICAgICAgICAgICAgICAgICAgICAgICBtYXg6IHJ0bCA/IG1pbiAqIC0xIDogbWF4LA0KICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogc3RlcCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlOiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5jb250cm9sLnZhbHVlKHRwX2luc3QsICQodGhpcyksIHVuaXQsIHJ0bCA/IHVpLnZhbHVlICogLTEgOiB1aS52YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwX2luc3QuX29uU2VsZWN0SGFuZGxlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIG9wdGlvbnM6IGZ1bmN0aW9uICh0cF9pbnN0LCBvYmosIHVuaXQsIG9wdHMsIHZhbCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodHBfaW5zdC5fZGVmYXVsdHMuaXNSVEwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKG9wdHMpID09PSAnc3RyaW5nJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzID09PSAnbWluJyB8fCBvcHRzID09PSAnbWF4Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouc2xpZGVyKG9wdHMsIHZhbCAqIC0xKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMob2JqLnNsaWRlcihvcHRzKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouc2xpZGVyKG9wdHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IG9wdHMubWluLA0KCQkJCQkJCW1heCA9IG9wdHMubWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5taW4gPSBvcHRzLm1heCA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLm1heCA9IG1pbiAqIC0xOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5taW4gPSBtYXggKiAtMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouc2xpZGVyKG9wdHMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKG9wdHMpID09PSAnc3RyaW5nJyAmJiB2YWwgIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai5zbGlkZXIob3B0cywgdmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnNsaWRlcihvcHRzKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAodHBfaW5zdCwgb2JqLCB1bml0LCB2YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLmlzUlRMKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnNsaWRlcigndmFsdWUnLCB2YWwgKiAtMSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMob2JqLnNsaWRlcigndmFsdWUnKSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnNsaWRlcigndmFsdWUnLCB2YWwpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouc2xpZGVyKCd2YWx1ZScpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAvLyBzZWxlY3QgbWV0aG9kcw0KICAgICAgICAgICAgc2VsZWN0OiB7DQogICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAodHBfaW5zdCwgb2JqLCB1bml0LCB2YWwsIG1pbiwgbWF4LCBzdGVwKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBzZWwgPSAnPHNlbGVjdCBjbGFzcz0idWktdGltZXBpY2tlci1zZWxlY3QiIGRhdGEtdW5pdD0iJyArIHVuaXQgKyAnIiBkYXRhLW1pbj0iJyArIG1pbiArICciIGRhdGEtbWF4PSInICsgbWF4ICsgJyIgZGF0YS1zdGVwPSInICsgc3RlcCArICciPicsDQoJCQkJCQlmb3JtYXQgPSB0cF9pbnN0Ll9kZWZhdWx0cy5waWNrZXJUaW1lRm9ybWF0IHx8IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQ7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG1pbjsgaSA8PSBtYXg7IGkgKz0gc3RlcCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2VsICs9ICc8b3B0aW9uIHZhbHVlPSInICsgaSArICciJyArIChpID09PSB2YWwgPyAnIHNlbGVjdGVkJyA6ICcnKSArICc+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bml0ID09PSAnaG91cicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwgKz0gJC5kYXRlcGlja2VyLmZvcm1hdFRpbWUoJC50cmltKGZvcm1hdC5yZXBsYWNlKC9bXmh0IF0vaWcsICcnKSksIHsgaG91cjogaSB9LCB0cF9pbnN0Ll9kZWZhdWx0cyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh1bml0ID09PSAnbWlsbGlzZWMnIHx8IHVuaXQgPT09ICdtaWNyb3NlYycgfHwgaSA+PSAxMCkgeyBzZWwgKz0gaTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IHNlbCArPSAnMCcgKyBpLnRvU3RyaW5nKCk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbCArPSAnPFwvb3B0aW9uPic7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgc2VsICs9ICc8XC9zZWxlY3Q+JzsNCg0KICAgICAgICAgICAgICAgICAgICBvYmouY2hpbGRyZW4oJ3NlbGVjdCcpLnJlbW92ZSgpOw0KDQogICAgICAgICAgICAgICAgICAgICQoc2VsKS5hcHBlbmRUbyhvYmopLmNoYW5nZShmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB0cF9pbnN0Ll9vblNlbGVjdEhhbmRsZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIG9wdGlvbnM6IGZ1bmN0aW9uICh0cF9pbnN0LCBvYmosIHVuaXQsIG9wdHMsIHZhbCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHt9LA0KCQkJCQkJJHQgPSBvYmouY2hpbGRyZW4oJ3NlbGVjdCcpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChvcHRzKSA9PT0gJ3N0cmluZycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkdC5kYXRhKG9wdHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgb1tvcHRzXSA9IHZhbDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgbyA9IG9wdHM7IH0NCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRwX2luc3QuY29udHJvbC5jcmVhdGUodHBfaW5zdCwgb2JqLCAkdC5kYXRhKCd1bml0JyksICR0LnZhbCgpLCBvLm1pbiB8fCAkdC5kYXRhKCdtaW4nKSwgby5tYXggfHwgJHQuZGF0YSgnbWF4JyksIG8uc3RlcCB8fCAkdC5kYXRhKCdzdGVwJykpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICh0cF9pbnN0LCBvYmosIHVuaXQsIHZhbCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgJHQgPSBvYmouY2hpbGRyZW4oJ3NlbGVjdCcpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkdC52YWwodmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHQudmFsKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IC8vIGVuZCBfY29udHJvbHMNCg0KICAgIH0pOw0KDQogICAgJC5mbi5leHRlbmQoew0KICAgICAgICAvKg0KCQkqIHNob3J0aGFuZCBqdXN0IHRvIHVzZSB0aW1lcGlja2VyLg0KCQkqLw0KICAgICAgICB0aW1lcGlja2VyOiBmdW5jdGlvbiAobykgew0KICAgICAgICAgICAgbyA9IG8gfHwge307DQogICAgICAgICAgICB2YXIgdG1wX2FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOw0KDQogICAgICAgICAgICBpZiAodHlwZW9mIG8gPT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICAgICAgdG1wX2FyZ3NbMF0gPSAkLmV4dGVuZChvLCB7DQogICAgICAgICAgICAgICAgICAgIHRpbWVPbmx5OiB0cnVlDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkKHRoaXMpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICQuZm4uZGF0ZXRpbWVwaWNrZXIuYXBwbHkoJCh0aGlzKSwgdG1wX2FyZ3MpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCgkJKiBleHRlbmQgdGltZXBpY2tlciB0byBkYXRlcGlja2VyDQoJCSovDQogICAgICAgIGRhdGV0aW1lcGlja2VyOiBmdW5jdGlvbiAobykgew0KICAgICAgICAgICAgbyA9IG8gfHwge307DQogICAgICAgICAgICB2YXIgdG1wX2FyZ3MgPSBhcmd1bWVudHM7DQoNCiAgICAgICAgICAgIGlmICh0eXBlb2YgKG8pID09PSAnc3RyaW5nJykgew0KICAgICAgICAgICAgICAgIGlmIChvID09PSAnZ2V0RGF0ZScgfHwgKG8gPT09ICdvcHRpb24nICYmIHRtcF9hcmdzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgKHRtcF9hcmdzWzFdKSA9PT0gJ3N0cmluZycpKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmZuLmRhdGVwaWNrZXIuYXBwbHkoJCh0aGlzWzBdKSwgdG1wX2FyZ3MpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyICR0ID0gJCh0aGlzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0LmRhdGVwaWNrZXIuYXBwbHkoJHQsIHRtcF9hcmdzKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyICR0ID0gJCh0aGlzKTsNCiAgICAgICAgICAgICAgICAgICAgJHQuZGF0ZXBpY2tlcigkLnRpbWVwaWNrZXIuX25ld0luc3QoJHQsIG8pLl9kZWZhdWx0cyk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIC8qDQoJKiBQdWJsaWMgVXRpbGl0eSB0byBwYXJzZSBkYXRlIGFuZCB0aW1lDQoJKi8NCiAgICAkLmRhdGVwaWNrZXIucGFyc2VEYXRlVGltZSA9IGZ1bmN0aW9uIChkYXRlRm9ybWF0LCB0aW1lRm9ybWF0LCBkYXRlVGltZVN0cmluZywgZGF0ZVNldHRpbmdzLCB0aW1lU2V0dGluZ3MpIHsNCiAgICAgICAgdmFyIHBhcnNlUmVzID0gcGFyc2VEYXRlVGltZUludGVybmFsKGRhdGVGb3JtYXQsIHRpbWVGb3JtYXQsIGRhdGVUaW1lU3RyaW5nLCBkYXRlU2V0dGluZ3MsIHRpbWVTZXR0aW5ncyk7DQogICAgICAgIGlmIChwYXJzZVJlcy50aW1lT2JqKSB7DQogICAgICAgICAgICB2YXIgdCA9IHBhcnNlUmVzLnRpbWVPYmo7DQogICAgICAgICAgICBwYXJzZVJlcy5kYXRlLnNldEhvdXJzKHQuaG91ciwgdC5taW51dGUsIHQuc2Vjb25kLCB0Lm1pbGxpc2VjKTsNCiAgICAgICAgICAgIHBhcnNlUmVzLmRhdGUuc2V0TWljcm9zZWNvbmRzKHQubWljcm9zZWMpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHBhcnNlUmVzLmRhdGU7DQogICAgfTsNCg0KICAgIC8qDQoJKiBQdWJsaWMgdXRpbGl0eSB0byBwYXJzZSB0aW1lDQoJKi8NCiAgICAkLmRhdGVwaWNrZXIucGFyc2VUaW1lID0gZnVuY3Rpb24gKHRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIG9wdGlvbnMpIHsNCiAgICAgICAgdmFyIG8gPSBleHRlbmRSZW1vdmUoZXh0ZW5kUmVtb3ZlKHt9LCAkLnRpbWVwaWNrZXIuX2RlZmF1bHRzKSwgb3B0aW9ucyB8fCB7fSksDQoJCQlpc284NjAxID0gKHRpbWVGb3JtYXQucmVwbGFjZSgvXCcuKj9cJy9nLCAnJykuaW5kZXhPZignWicpICE9PSAtMSk7DQoNCiAgICAgICAgLy8gU3RyaWN0IHBhcnNlIHJlcXVpcmVzIHRoZSB0aW1lU3RyaW5nIHRvIG1hdGNoIHRoZSB0aW1lRm9ybWF0IGV4YWN0bHkNCiAgICAgICAgdmFyIHN0cmljdFBhcnNlID0gZnVuY3Rpb24gKGYsIHMsIG8pIHsNCg0KICAgICAgICAgICAgLy8gcGF0dGVybiBmb3Igc3RhbmRhcmQgYW5kIGxvY2FsaXplZCBBTS9QTSBtYXJrZXJzDQogICAgICAgICAgICB2YXIgZ2V0UGF0dGVybkFtcG0gPSBmdW5jdGlvbiAoYW1OYW1lcywgcG1OYW1lcykgew0KICAgICAgICAgICAgICAgIHZhciBtYXJrZXJzID0gW107DQogICAgICAgICAgICAgICAgaWYgKGFtTmFtZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJC5tZXJnZShtYXJrZXJzLCBhbU5hbWVzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHBtTmFtZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJC5tZXJnZShtYXJrZXJzLCBwbU5hbWVzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgbWFya2VycyA9ICQubWFwKG1hcmtlcnMsIGZ1bmN0aW9uICh2YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbC5yZXBsYWNlKC9bLiorP3woKVxbXF17fVxcXS9nLCAnXFwkJicpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHJldHVybiAnKCcgKyBtYXJrZXJzLmpvaW4oJ3wnKSArICcpPyc7DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAvLyBmaWd1cmUgb3V0IHBvc2l0aW9uIG9mIHRpbWUgZWxlbWVudHMuLiBjYXVzZSBqcyBjYW50IGRvIG5hbWVkIGNhcHR1cmVzDQogICAgICAgICAgICB2YXIgZ2V0Rm9ybWF0UG9zaXRpb25zID0gZnVuY3Rpb24gKHRpbWVGb3JtYXQpIHsNCiAgICAgICAgICAgICAgICB2YXIgZmluZHMgPSB0aW1lRm9ybWF0LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhoezEsMn18bXsxLDJ9fHN7MSwyfXxsezF9fGN7MX18dHsxLDJ9fHp8Jy4qPycpL2cpLA0KCQkJCQlvcmRlcnMgPSB7DQoJCQkJCSAgICBoOiAtMSwNCgkJCQkJICAgIG06IC0xLA0KCQkJCQkgICAgczogLTEsDQoJCQkJCSAgICBsOiAtMSwNCgkJCQkJICAgIGM6IC0xLA0KCQkJCQkgICAgdDogLTEsDQoJCQkJCSAgICB6OiAtMQ0KCQkJCQl9Ow0KDQogICAgICAgICAgICAgICAgaWYgKGZpbmRzKSB7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmluZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlcnNbZmluZHNbaV0udG9TdHJpbmcoKS5jaGFyQXQoMCldID09PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyc1tmaW5kc1tpXS50b1N0cmluZygpLmNoYXJBdCgwKV0gPSBpICsgMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gb3JkZXJzOw0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgdmFyIHJlZ3N0ciA9ICdeJyArIGYudG9TdHJpbmcoKQ0KCQkJCQkucmVwbGFjZSgvKFtoSF17MSwyfXxtbT98c3M/fFt0VF17MSwyfXxbelpdfFtsY118Jy4qPycpL2csIGZ1bmN0aW9uIChtYXRjaCkgew0KCQkJCQkgICAgdmFyIG1sID0gbWF0Y2gubGVuZ3RoOw0KCQkJCQkgICAgc3dpdGNoIChtYXRjaC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSkgew0KCQkJCQkgICAgICAgIGNhc2UgJ2gnOg0KCQkJCQkgICAgICAgICAgICByZXR1cm4gbWwgPT09IDEgPyAnKFxcZD9cXGQpJyA6ICcoXFxkeycgKyBtbCArICd9KSc7DQoJCQkJCSAgICAgICAgY2FzZSAnbSc6DQoJCQkJCSAgICAgICAgICAgIHJldHVybiBtbCA9PT0gMSA/ICcoXFxkP1xcZCknIDogJyhcXGR7JyArIG1sICsgJ30pJzsNCgkJCQkJICAgICAgICBjYXNlICdzJzoNCgkJCQkJICAgICAgICAgICAgcmV0dXJuIG1sID09PSAxID8gJyhcXGQ/XFxkKScgOiAnKFxcZHsnICsgbWwgKyAnfSknOw0KCQkJCQkgICAgICAgIGNhc2UgJ2wnOg0KCQkJCQkgICAgICAgICAgICByZXR1cm4gJyhcXGQ/XFxkP1xcZCknOw0KCQkJCQkgICAgICAgIGNhc2UgJ2MnOg0KCQkJCQkgICAgICAgICAgICByZXR1cm4gJyhcXGQ/XFxkP1xcZCknOw0KCQkJCQkgICAgICAgIGNhc2UgJ3onOg0KCQkJCQkgICAgICAgICAgICByZXR1cm4gJyh6fFstK11cXGRcXGQ6P1xcZFxcZHxcXFMrKT8nOw0KCQkJCQkgICAgICAgIGNhc2UgJ3QnOg0KCQkJCQkgICAgICAgICAgICByZXR1cm4gZ2V0UGF0dGVybkFtcG0oby5hbU5hbWVzLCBvLnBtTmFtZXMpOw0KCQkJCQkgICAgICAgIGRlZmF1bHQ6ICAgIC8vIGxpdGVyYWwgZXNjYXBlZCBpbiBxdW90ZXMNCgkJCQkJICAgICAgICAgICAgcmV0dXJuICcoJyArIG1hdGNoLnJlcGxhY2UoL1wnL2csICIiKS5yZXBsYWNlKC8oXC58XCR8XF58XFx8XC98XCh8XCl8XFt8XF18XD98XCt8XCopL2csIGZ1bmN0aW9uIChtKSB7IHJldHVybiAiXFwiICsgbTsgfSkgKyAnKT8nOw0KCQkJCQkgICAgfQ0KCQkJCQl9KQ0KCQkJCQkucmVwbGFjZSgvXHMvZywgJ1xccz8nKSArDQoJCQkJCW8udGltZVN1ZmZpeCArICckJywNCgkJCQlvcmRlciA9IGdldEZvcm1hdFBvc2l0aW9ucyhmKSwNCgkJCQlhbXBtID0gJycsDQoJCQkJdHJlZzsNCg0KICAgICAgICAgICAgdHJlZyA9IHMubWF0Y2gobmV3IFJlZ0V4cChyZWdzdHIsICdpJykpOw0KDQogICAgICAgICAgICB2YXIgcmVzVGltZSA9IHsNCiAgICAgICAgICAgICAgICBob3VyOiAwLA0KICAgICAgICAgICAgICAgIG1pbnV0ZTogMCwNCiAgICAgICAgICAgICAgICBzZWNvbmQ6IDAsDQogICAgICAgICAgICAgICAgbWlsbGlzZWM6IDAsDQogICAgICAgICAgICAgICAgbWljcm9zZWM6IDANCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGlmICh0cmVnKSB7DQogICAgICAgICAgICAgICAgaWYgKG9yZGVyLnQgIT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0cmVnW29yZGVyLnRdID09PSB1bmRlZmluZWQgfHwgdHJlZ1tvcmRlci50XS5sZW5ndGggPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFtcG0gPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1RpbWUuYW1wbSA9ICcnOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYW1wbSA9ICQuaW5BcnJheSh0cmVnW29yZGVyLnRdLnRvVXBwZXJDYXNlKCksIG8uYW1OYW1lcykgIT09IC0xID8gJ0FNJyA6ICdQTSc7DQogICAgICAgICAgICAgICAgICAgICAgICByZXNUaW1lLmFtcG0gPSBvW2FtcG0gPT09ICdBTScgPyAnYW1OYW1lcycgOiAncG1OYW1lcyddWzBdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKG9yZGVyLmggIT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIHRyZWdbb3JkZXIuaF0gPT09ICcxMicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1RpbWUuaG91ciA9IDA7IC8vIDEyYW0gPSAwIGhvdXINCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIHRyZWdbb3JkZXIuaF0gIT09ICcxMicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNUaW1lLmhvdXIgPSBwYXJzZUludCh0cmVnW29yZGVyLmhdLCAxMCkgKyAxMjsgLy8gMTJwbSA9IDEyIGhvdXIsIGFueSBvdGhlciBwbSA9IGhvdXIgKyAxMg0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNUaW1lLmhvdXIgPSBOdW1iZXIodHJlZ1tvcmRlci5oXSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAob3JkZXIubSAhPT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzVGltZS5taW51dGUgPSBOdW1iZXIodHJlZ1tvcmRlci5tXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChvcmRlci5zICE9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICByZXNUaW1lLnNlY29uZCA9IE51bWJlcih0cmVnW29yZGVyLnNdKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG9yZGVyLmwgIT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIHJlc1RpbWUubWlsbGlzZWMgPSBOdW1iZXIodHJlZ1tvcmRlci5sXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChvcmRlci5jICE9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICByZXNUaW1lLm1pY3Jvc2VjID0gTnVtYmVyKHRyZWdbb3JkZXIuY10pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAob3JkZXIueiAhPT0gLTEgJiYgdHJlZ1tvcmRlci56XSAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgIHJlc1RpbWUudGltZXpvbmUgPSAkLnRpbWVwaWNrZXIudGltZXpvbmVPZmZzZXROdW1iZXIodHJlZ1tvcmRlci56XSk7DQogICAgICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzVGltZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfTsvLyBlbmQgc3RyaWN0UGFyc2UNCg0KICAgICAgICAvLyBGaXJzdCB0cnkgSlMgRGF0ZSwgaWYgdGhhdCBmYWlscywgdXNlIHN0cmljdFBhcnNlDQogICAgICAgIHZhciBsb29zZVBhcnNlID0gZnVuY3Rpb24gKGYsIHMsIG8pIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZSgnMjAxMi0wMS0wMSAnICsgcyk7DQogICAgICAgICAgICAgICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgew0KICAgICAgICAgICAgICAgICAgICBkID0gbmV3IERhdGUoJzIwMTItMDEtMDFUJyArIHMpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZC5nZXRUaW1lKCkpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBkID0gbmV3IERhdGUoJzAxLzAxLzIwMTIgJyArIHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93ICJVbmFibGUgdG8gcGFyc2UgdGltZSB3aXRoIG5hdGl2ZSBEYXRlOiAiICsgczsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHJldHVybiB7DQogICAgICAgICAgICAgICAgICAgIGhvdXI6IGQuZ2V0SG91cnMoKSwNCiAgICAgICAgICAgICAgICAgICAgbWludXRlOiBkLmdldE1pbnV0ZXMoKSwNCiAgICAgICAgICAgICAgICAgICAgc2Vjb25kOiBkLmdldFNlY29uZHMoKSwNCiAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWM6IGQuZ2V0TWlsbGlzZWNvbmRzKCksDQogICAgICAgICAgICAgICAgICAgIG1pY3Jvc2VjOiBkLmdldE1pY3Jvc2Vjb25kcygpLA0KICAgICAgICAgICAgICAgICAgICB0aW1lem9uZTogZC5nZXRUaW1lem9uZU9mZnNldCgpICogLTENCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpY3RQYXJzZShmLCBzLCBvKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY2F0Y2ggKGVycjIpIHsNCiAgICAgICAgICAgICAgICAgICAgJC50aW1lcGlja2VyLmxvZygiVW5hYmxlIHRvIHBhcnNlIFxudGltZVN0cmluZzogIiArIHMgKyAiXG50aW1lRm9ybWF0OiAiICsgZik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9OyAvLyBlbmQgbG9vc2VQYXJzZQ0KDQogICAgICAgIGlmICh0eXBlb2Ygby5wYXJzZSA9PT0gImZ1bmN0aW9uIikgew0KICAgICAgICAgICAgcmV0dXJuIG8ucGFyc2UodGltZUZvcm1hdCwgdGltZVN0cmluZywgbyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKG8ucGFyc2UgPT09ICdsb29zZScpIHsNCiAgICAgICAgICAgIHJldHVybiBsb29zZVBhcnNlKHRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIG8pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBzdHJpY3RQYXJzZSh0aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCBvKTsNCiAgICB9Ow0KDQogICAgLyoqDQoJICogUHVibGljIHV0aWxpdHkgdG8gZm9ybWF0IHRoZSB0aW1lDQoJICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBmb3JtYXQgb2YgdGhlIHRpbWUNCgkgKiBAcGFyYW0ge09iamVjdH0gdGltZSBPYmplY3Qgbm90IGEgRGF0ZSBmb3IgdGltZXpvbmVzDQoJICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBlc3NlbnRpYWxseSB0aGUgcmVnaW9uYWxbXS4uIGFtTmFtZXMsIHBtTmFtZXMsIGFtcG0NCgkgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgZm9ybWF0dGVkIHRpbWUNCgkgKi8NCiAgICAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZSA9IGZ1bmN0aW9uIChmb3JtYXQsIHRpbWUsIG9wdGlvbnMpIHsNCiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307DQogICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC50aW1lcGlja2VyLl9kZWZhdWx0cywgb3B0aW9ucyk7DQogICAgICAgIHRpbWUgPSAkLmV4dGVuZCh7DQogICAgICAgICAgICBob3VyOiAwLA0KICAgICAgICAgICAgbWludXRlOiAwLA0KICAgICAgICAgICAgc2Vjb25kOiAwLA0KICAgICAgICAgICAgbWlsbGlzZWM6IDAsDQogICAgICAgICAgICBtaWNyb3NlYzogMCwNCiAgICAgICAgICAgIHRpbWV6b25lOiBudWxsDQogICAgICAgIH0sIHRpbWUpOw0KDQogICAgICAgIHZhciB0bXB0aW1lID0gZm9ybWF0LA0KCQkJYW1wbU5hbWUgPSBvcHRpb25zLmFtTmFtZXNbMF0sDQoJCQlob3VyID0gcGFyc2VJbnQodGltZS5ob3VyLCAxMCk7DQoNCiAgICAgICAgaWYgKGhvdXIgPiAxMSkgew0KICAgICAgICAgICAgYW1wbU5hbWUgPSBvcHRpb25zLnBtTmFtZXNbMF07DQogICAgICAgIH0NCg0KICAgICAgICB0bXB0aW1lID0gdG1wdGltZS5yZXBsYWNlKC8oPzpISD98aGg/fG1tP3xzcz98W3RUXXsxLDJ9fFt6Wl18W2xjXXwnLio/JykvZywgZnVuY3Rpb24gKG1hdGNoKSB7DQogICAgICAgICAgICBzd2l0Y2ggKG1hdGNoKSB7DQogICAgICAgICAgICAgICAgY2FzZSAnSEgnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCcwJyArIGhvdXIpLnNsaWNlKC0yKTsNCiAgICAgICAgICAgICAgICBjYXNlICdIJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7DQogICAgICAgICAgICAgICAgY2FzZSAnaGgnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCcwJyArIGNvbnZlcnQyNHRvMTIoaG91cikpLnNsaWNlKC0yKTsNCiAgICAgICAgICAgICAgICBjYXNlICdoJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnQyNHRvMTIoaG91cik7DQogICAgICAgICAgICAgICAgY2FzZSAnbW0nOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCcwJyArIHRpbWUubWludXRlKS5zbGljZSgtMik7DQogICAgICAgICAgICAgICAgY2FzZSAnbSc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lLm1pbnV0ZTsNCiAgICAgICAgICAgICAgICBjYXNlICdzcyc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAoJzAnICsgdGltZS5zZWNvbmQpLnNsaWNlKC0yKTsNCiAgICAgICAgICAgICAgICBjYXNlICdzJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWUuc2Vjb25kOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2wnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCcwMCcgKyB0aW1lLm1pbGxpc2VjKS5zbGljZSgtMyk7DQogICAgICAgICAgICAgICAgY2FzZSAnYyc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAoJzAwJyArIHRpbWUubWljcm9zZWMpLnNsaWNlKC0zKTsNCiAgICAgICAgICAgICAgICBjYXNlICd6JzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQudGltZXBpY2tlci50aW1lem9uZU9mZnNldFN0cmluZyh0aW1lLnRpbWV6b25lID09PSBudWxsID8gb3B0aW9ucy50aW1lem9uZSA6IHRpbWUudGltZXpvbmUsIGZhbHNlKTsNCiAgICAgICAgICAgICAgICBjYXNlICdaJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQudGltZXBpY2tlci50aW1lem9uZU9mZnNldFN0cmluZyh0aW1lLnRpbWV6b25lID09PSBudWxsID8gb3B0aW9ucy50aW1lem9uZSA6IHRpbWUudGltZXpvbmUsIHRydWUpOw0KICAgICAgICAgICAgICAgIGNhc2UgJ1QnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW1wbU5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7DQogICAgICAgICAgICAgICAgY2FzZSAnVFQnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW1wbU5hbWUudG9VcHBlckNhc2UoKTsNCiAgICAgICAgICAgICAgICBjYXNlICd0JzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFtcG1OYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3R0JzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFtcG1OYW1lLnRvTG93ZXJDYXNlKCk7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnJlcGxhY2UoLycvZywgIiIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gdG1wdGltZTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIHRoZSBiYWQgaGFjayA6LyBvdmVycmlkZSBkYXRlcGlja2VyIHNvIGl0IGRvZXNuJ3QgY2xvc2Ugb24gc2VsZWN0DQoJLy8gaW5zcGlyZWQ6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTI1MjUxMi9qcXVlcnktZGF0ZXBpY2tlci1wcmV2ZW50LWNsb3NpbmctcGlja2VyLXdoZW4tY2xpY2tpbmctYS1kYXRlLzE3NjIzNzgjMTc2MjM3OA0KCSovDQogICAgJC5kYXRlcGlja2VyLl9iYXNlX3NlbGVjdERhdGUgPSAkLmRhdGVwaWNrZXIuX3NlbGVjdERhdGU7DQogICAgJC5kYXRlcGlja2VyLl9zZWxlY3REYXRlID0gZnVuY3Rpb24gKGlkLCBkYXRlU3RyKSB7DQogICAgICAgIHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCgkKGlkKVswXSksDQoJCQl0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQoNCiAgICAgICAgaWYgKHRwX2luc3QgJiYgaW5zdC5zZXR0aW5ncy5zaG93VGltZXBpY2tlcikgew0KICAgICAgICAgICAgdHBfaW5zdC5fbGltaXRNaW5NYXhEYXRlVGltZShpbnN0LCB0cnVlKTsNCiAgICAgICAgICAgIGluc3QuaW5saW5lID0gaW5zdC5zdGF5X29wZW4gPSB0cnVlOw0KICAgICAgICAgICAgLy9UaGlzIHdheSB0aGUgb25TZWxlY3QgaGFuZGxlciBjYWxsZWQgZnJvbSBjYWxlbmRhcnBpY2tlciBnZXQgdGhlIGZ1bGwgZGF0ZVRpbWUNCiAgICAgICAgICAgIHRoaXMuX2Jhc2Vfc2VsZWN0RGF0ZShpZCwgZGF0ZVN0cik7DQogICAgICAgICAgICBpbnN0LmlubGluZSA9IGluc3Quc3RheV9vcGVuID0gZmFsc2U7DQogICAgICAgICAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoaW5zdCk7DQogICAgICAgICAgICB0aGlzLl91cGRhdGVEYXRlcGlja2VyKGluc3QpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5fYmFzZV9zZWxlY3REYXRlKGlkLCBkYXRlU3RyKTsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICAvKg0KCSogc2Vjb25kIGJhZCBoYWNrIDovIG92ZXJyaWRlIGRhdGVwaWNrZXIgc28gaXQgdHJpZ2dlcnMgYW4gZXZlbnQgd2hlbiBjaGFuZ2luZyB0aGUgaW5wdXQgZmllbGQNCgkqIGFuZCBkb2VzIG5vdCByZWRyYXcgdGhlIGRhdGVwaWNrZXIgb24gZXZlcnkgc2VsZWN0RGF0ZSBldmVudA0KCSovDQogICAgJC5kYXRlcGlja2VyLl9iYXNlX3VwZGF0ZURhdGVwaWNrZXIgPSAkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXI7DQogICAgJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyID0gZnVuY3Rpb24gKGluc3QpIHsNCg0KICAgICAgICAvLyBkb24ndCBwb3B1cCB0aGUgZGF0ZXBpY2tlciBpZiB0aGVyZSBpcyBhbm90aGVyIGluc3RhbmNlIGFscmVhZHkgb3BlbmVkDQogICAgICAgIHZhciBpbnB1dCA9IGluc3QuaW5wdXRbMF07DQogICAgICAgIGlmICgkLmRhdGVwaWNrZXIuX2N1ckluc3QgJiYgJC5kYXRlcGlja2VyLl9jdXJJbnN0ICE9PSBpbnN0ICYmICQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgJiYgJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQgIT09IGlucHV0KSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodHlwZW9mIChpbnN0LnN0YXlfb3BlbikgIT09ICdib29sZWFuJyB8fCBpbnN0LnN0YXlfb3BlbiA9PT0gZmFsc2UpIHsNCg0KICAgICAgICAgICAgdGhpcy5fYmFzZV91cGRhdGVEYXRlcGlja2VyKGluc3QpOw0KDQogICAgICAgICAgICAvLyBSZWxvYWQgdGhlIHRpbWUgY29udHJvbCB3aGVuIGNoYW5naW5nIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgdGV4dCBmaWVsZC4NCiAgICAgICAgICAgIHZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQogICAgICAgICAgICBpZiAodHBfaW5zdCkgew0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2FkZFRpbWVQaWNrZXIoaW5zdCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgLyoNCgkqIHRoaXJkIGJhZCBoYWNrIDovIG92ZXJyaWRlIGRhdGVwaWNrZXIgc28gaXQgYWxsb3dzIHNwYWNlcyBhbmQgY29sb24gaW4gdGhlIGlucHV0IGZpZWxkDQoJKi8NCiAgICAkLmRhdGVwaWNrZXIuX2Jhc2VfZG9LZXlQcmVzcyA9ICQuZGF0ZXBpY2tlci5fZG9LZXlQcmVzczsNCiAgICAkLmRhdGVwaWNrZXIuX2RvS2V5UHJlc3MgPSBmdW5jdGlvbiAoZXZlbnQpIHsNCiAgICAgICAgdmFyIGluc3QgPSAkLmRhdGVwaWNrZXIuX2dldEluc3QoZXZlbnQudGFyZ2V0KSwNCgkJCXRwX2luc3QgPSAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KDQogICAgICAgIGlmICh0cF9pbnN0KSB7DQogICAgICAgICAgICBpZiAoJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ2NvbnN0cmFpbklucHV0JykpIHsNCiAgICAgICAgICAgICAgICB2YXIgYW1wbSA9IHRwX2luc3Quc3VwcG9ydC5hbXBtLA0KCQkJCQl0eiA9IHRwX2luc3QuX2RlZmF1bHRzLnNob3dUaW1lem9uZSAhPT0gbnVsbCA/IHRwX2luc3QuX2RlZmF1bHRzLnNob3dUaW1lem9uZSA6IHRwX2luc3Quc3VwcG9ydC50aW1lem9uZSwNCgkJCQkJZGF0ZUNoYXJzID0gJC5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKCQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICdkYXRlRm9ybWF0JykpLA0KCQkJCQlkYXRldGltZUNoYXJzID0gdHBfaW5zdC5fZGVmYXVsdHMudGltZUZvcm1hdC50b1N0cmluZygpDQoJCQkJCQkJCQkJCS5yZXBsYWNlKC9baG1zXS9nLCAnJykNCgkJCQkJCQkJCQkJLnJlcGxhY2UoL1RUL2csIGFtcG0gPyAnQVBNJyA6ICcnKQ0KCQkJCQkJCQkJCQkucmVwbGFjZSgvVHQvZywgYW1wbSA/ICdBYVBwTW0nIDogJycpDQoJCQkJCQkJCQkJCS5yZXBsYWNlKC90VC9nLCBhbXBtID8gJ0FhUHBNbScgOiAnJykNCgkJCQkJCQkJCQkJLnJlcGxhY2UoL1QvZywgYW1wbSA/ICdBUCcgOiAnJykNCgkJCQkJCQkJCQkJLnJlcGxhY2UoL3R0L2csIGFtcG0gPyAnYXBtJyA6ICcnKQ0KCQkJCQkJCQkJCQkucmVwbGFjZSgvdC9nLCBhbXBtID8gJ2FwJyA6ICcnKSArDQoJCQkJCQkJCQkJCSIgIiArIHRwX2luc3QuX2RlZmF1bHRzLnNlcGFyYXRvciArDQoJCQkJCQkJCQkJCXRwX2luc3QuX2RlZmF1bHRzLnRpbWVTdWZmaXggKw0KCQkJCQkJCQkJCQkodHogPyB0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZUxpc3Quam9pbignJykgOiAnJykgKw0KCQkJCQkJCQkJCQkodHBfaW5zdC5fZGVmYXVsdHMuYW1OYW1lcy5qb2luKCcnKSkgKyAodHBfaW5zdC5fZGVmYXVsdHMucG1OYW1lcy5qb2luKCcnKSkgKw0KCQkJCQkJCQkJCQlkYXRlQ2hhcnMsDQoJCQkJCWNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUgPT09IHVuZGVmaW5lZCA/IGV2ZW50LmtleUNvZGUgOiBldmVudC5jaGFyQ29kZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXkgfHwgKGNociA8ICcgJyB8fCAhZGF0ZUNoYXJzIHx8IGRhdGV0aW1lQ2hhcnMuaW5kZXhPZihjaHIpID4gLTEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICQuZGF0ZXBpY2tlci5fYmFzZV9kb0tleVByZXNzKGV2ZW50KTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIEZvdXJ0aCBiYWQgaGFjayA6LyBvdmVycmlkZSBfdXBkYXRlQWx0ZXJuYXRlIGZ1bmN0aW9uIHVzZWQgaW4gaW5saW5lIG1vZGUgdG8gaW5pdCBhbHRGaWVsZA0KCSogVXBkYXRlIGFueSBhbHRlcm5hdGUgZmllbGQgdG8gc3luY2hyb25pc2Ugd2l0aCB0aGUgbWFpbiBmaWVsZC4NCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fYmFzZV91cGRhdGVBbHRlcm5hdGUgPSAkLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZTsNCiAgICAkLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZSA9IGZ1bmN0aW9uIChpbnN0KSB7DQogICAgICAgIHZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQogICAgICAgIGlmICh0cF9pbnN0KSB7DQogICAgICAgICAgICB2YXIgYWx0RmllbGQgPSB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGaWVsZDsNCiAgICAgICAgICAgIGlmIChhbHRGaWVsZCkgeyAvLyB1cGRhdGUgYWx0ZXJuYXRlIGZpZWxkIHRvbw0KICAgICAgICAgICAgICAgIHZhciBhbHRGb3JtYXQgPSB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGb3JtYXQgfHwgdHBfaW5zdC5fZGVmYXVsdHMuZGF0ZUZvcm1hdCwNCgkJCQkJZGF0ZSA9IHRoaXMuX2dldERhdGUoaW5zdCksDQoJCQkJCWZvcm1hdENmZyA9ICQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKGluc3QpLA0KCQkJCQlhbHRGb3JtYXR0ZWREYXRlVGltZSA9ICcnLA0KCQkJCQlhbHRTZXBhcmF0b3IgPSB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRTZXBhcmF0b3IgPyB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRTZXBhcmF0b3IgOiB0cF9pbnN0Ll9kZWZhdWx0cy5zZXBhcmF0b3IsDQoJCQkJCWFsdFRpbWVTdWZmaXggPSB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRUaW1lU3VmZml4ID8gdHBfaW5zdC5fZGVmYXVsdHMuYWx0VGltZVN1ZmZpeCA6IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVTdWZmaXgsDQoJCQkJCWFsdFRpbWVGb3JtYXQgPSB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRUaW1lRm9ybWF0ICE9PSBudWxsID8gdHBfaW5zdC5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCA6IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQ7DQoNCiAgICAgICAgICAgICAgICBhbHRGb3JtYXR0ZWREYXRlVGltZSArPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZShhbHRUaW1lRm9ybWF0LCB0cF9pbnN0LCB0cF9pbnN0Ll9kZWZhdWx0cykgKyBhbHRUaW1lU3VmZml4Ow0KICAgICAgICAgICAgICAgIGlmICghdHBfaW5zdC5fZGVmYXVsdHMudGltZU9ubHkgJiYgIXRwX2luc3QuX2RlZmF1bHRzLmFsdEZpZWxkVGltZU9ubHkgJiYgZGF0ZSAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodHBfaW5zdC5fZGVmYXVsdHMuYWx0Rm9ybWF0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbHRGb3JtYXR0ZWREYXRlVGltZSA9ICQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKHRwX2luc3QuX2RlZmF1bHRzLmFsdEZvcm1hdCwgZGF0ZSwgZm9ybWF0Q2ZnKSArIGFsdFNlcGFyYXRvciArIGFsdEZvcm1hdHRlZERhdGVUaW1lOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSB0cF9pbnN0LmZvcm1hdHRlZERhdGUgKyBhbHRTZXBhcmF0b3IgKyBhbHRGb3JtYXR0ZWREYXRlVGltZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkKGFsdEZpZWxkKS52YWwoaW5zdC5pbnB1dC52YWwoKSA/IGFsdEZvcm1hdHRlZERhdGVUaW1lIDogIiIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJC5kYXRlcGlja2VyLl9iYXNlX3VwZGF0ZUFsdGVybmF0ZShpbnN0KTsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICAvKg0KCSogT3ZlcnJpZGUga2V5IHVwIGV2ZW50IHRvIHN5bmMgbWFudWFsIGlucHV0IGNoYW5nZXMuDQoJKi8NCiAgICAkLmRhdGVwaWNrZXIuX2Jhc2VfZG9LZXlVcCA9ICQuZGF0ZXBpY2tlci5fZG9LZXlVcDsNCiAgICAkLmRhdGVwaWNrZXIuX2RvS2V5VXAgPSBmdW5jdGlvbiAoZXZlbnQpIHsNCiAgICAgICAgdmFyIGluc3QgPSAkLmRhdGVwaWNrZXIuX2dldEluc3QoZXZlbnQudGFyZ2V0KSwNCgkJCXRwX2luc3QgPSAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KDQogICAgICAgIGlmICh0cF9pbnN0KSB7DQogICAgICAgICAgICBpZiAodHBfaW5zdC5fZGVmYXVsdHMudGltZU9ubHkgJiYgKGluc3QuaW5wdXQudmFsKCkgIT09IGluc3QubGFzdFZhbCkpIHsNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7DQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7DQogICAgICAgICAgICAgICAgICAgICQudGltZXBpY2tlci5sb2coZXJyKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJC5kYXRlcGlja2VyLl9iYXNlX2RvS2V5VXAoZXZlbnQpOw0KICAgIH07DQoNCiAgICAvKg0KCSogb3ZlcnJpZGUgIlRvZGF5IiBidXR0b24gdG8gYWxzbyBncmFiIHRoZSB0aW1lLg0KCSovDQogICAgJC5kYXRlcGlja2VyLl9iYXNlX2dvdG9Ub2RheSA9ICQuZGF0ZXBpY2tlci5fZ290b1RvZGF5Ow0KICAgICQuZGF0ZXBpY2tlci5fZ290b1RvZGF5ID0gZnVuY3Rpb24gKGlkKSB7DQogICAgICAgIHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCgkKGlkKVswXSksDQoJCQkkZHAgPSBpbnN0LmRwRGl2Ow0KICAgICAgICB0aGlzLl9iYXNlX2dvdG9Ub2RheShpZCk7DQogICAgICAgIHZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQogICAgICAgIHNlbGVjdExvY2FsVGltZXpvbmUodHBfaW5zdCk7DQogICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOw0KICAgICAgICB0aGlzLl9zZXRUaW1lKGluc3QsIG5vdyk7DQogICAgICAgICQoJy51aS1kYXRlcGlja2VyLXRvZGF5JywgJGRwKS5jbGljaygpOw0KICAgIH07DQoNCiAgICAvKg0KCSogRGlzYWJsZSAmIGVuYWJsZSB0aGUgVGltZSBpbiB0aGUgZGF0ZXRpbWVwaWNrZXINCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fZGlzYWJsZVRpbWVwaWNrZXJEYXRlcGlja2VyID0gZnVuY3Rpb24gKHRhcmdldCkgew0KICAgICAgICB2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0KTsNCiAgICAgICAgaWYgKCFpbnN0KSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KICAgICAgICAkKHRhcmdldCkuZGF0ZXBpY2tlcignZ2V0RGF0ZScpOyAvLyBJbml0IHNlbGVjdGVkW1llYXJ8TW9udGh8RGF5XQ0KICAgICAgICBpZiAodHBfaW5zdCkgew0KICAgICAgICAgICAgaW5zdC5zZXR0aW5ncy5zaG93VGltZXBpY2tlciA9IGZhbHNlOw0KICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMuc2hvd1RpbWVwaWNrZXIgPSBmYWxzZTsNCiAgICAgICAgICAgIHRwX2luc3QuX3VwZGF0ZURhdGVUaW1lKGluc3QpOw0KICAgICAgICB9DQogICAgfTsNCg0KICAgICQuZGF0ZXBpY2tlci5fZW5hYmxlVGltZXBpY2tlckRhdGVwaWNrZXIgPSBmdW5jdGlvbiAodGFyZ2V0KSB7DQogICAgICAgIHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpOw0KICAgICAgICBpZiAoIWluc3QpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQogICAgICAgICQodGFyZ2V0KS5kYXRlcGlja2VyKCdnZXREYXRlJyk7IC8vIEluaXQgc2VsZWN0ZWRbWWVhcnxNb250aHxEYXldDQogICAgICAgIGlmICh0cF9pbnN0KSB7DQogICAgICAgICAgICBpbnN0LnNldHRpbmdzLnNob3dUaW1lcGlja2VyID0gdHJ1ZTsNCiAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLnNob3dUaW1lcGlja2VyID0gdHJ1ZTsNCiAgICAgICAgICAgIHRwX2luc3QuX2FkZFRpbWVQaWNrZXIoaW5zdCk7IC8vIENvdWxkIGJlIGRpc2FibGVkIG9uIHBhZ2UgbG9hZA0KICAgICAgICAgICAgdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoaW5zdCk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgLyoNCgkqIENyZWF0ZSBvdXIgb3duIHNldCB0aW1lIGZ1bmN0aW9uDQoJKi8NCiAgICAkLmRhdGVwaWNrZXIuX3NldFRpbWUgPSBmdW5jdGlvbiAoaW5zdCwgZGF0ZSkgew0KICAgICAgICB2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KICAgICAgICBpZiAodHBfaW5zdCkgew0KICAgICAgICAgICAgdmFyIGRlZmF1bHRzID0gdHBfaW5zdC5fZGVmYXVsdHM7DQoNCiAgICAgICAgICAgIC8vIGNhbGxpbmcgX3NldFRpbWUgd2l0aCBubyBkYXRlIHNldHMgdGltZSB0byBkZWZhdWx0cw0KICAgICAgICAgICAgdHBfaW5zdC5ob3VyID0gZGF0ZSA/IGRhdGUuZ2V0SG91cnMoKSA6IGRlZmF1bHRzLmhvdXI7DQogICAgICAgICAgICB0cF9pbnN0Lm1pbnV0ZSA9IGRhdGUgPyBkYXRlLmdldE1pbnV0ZXMoKSA6IGRlZmF1bHRzLm1pbnV0ZTsNCiAgICAgICAgICAgIHRwX2luc3Quc2Vjb25kID0gZGF0ZSA/IGRhdGUuZ2V0U2Vjb25kcygpIDogZGVmYXVsdHMuc2Vjb25kOw0KICAgICAgICAgICAgdHBfaW5zdC5taWxsaXNlYyA9IGRhdGUgPyBkYXRlLmdldE1pbGxpc2Vjb25kcygpIDogZGVmYXVsdHMubWlsbGlzZWM7DQogICAgICAgICAgICB0cF9pbnN0Lm1pY3Jvc2VjID0gZGF0ZSA/IGRhdGUuZ2V0TWljcm9zZWNvbmRzKCkgOiBkZWZhdWx0cy5taWNyb3NlYzsNCg0KICAgICAgICAgICAgLy9jaGVjayBpZiB3aXRoaW4gbWluL21heCB0aW1lcy4uIA0KICAgICAgICAgICAgdHBfaW5zdC5fbGltaXRNaW5NYXhEYXRlVGltZShpbnN0LCB0cnVlKTsNCg0KICAgICAgICAgICAgdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7DQogICAgICAgICAgICB0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShpbnN0KTsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICAvKg0KCSogQ3JlYXRlIG5ldyBwdWJsaWMgbWV0aG9kIHRvIHNldCBvbmx5IHRpbWUsIGNhbGxhYmxlIGFzICQoKS5kYXRlcGlja2VyKCdzZXRUaW1lJywgZGF0ZSkNCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fc2V0VGltZURhdGVwaWNrZXIgPSBmdW5jdGlvbiAodGFyZ2V0LCBkYXRlLCB3aXRoRGF0ZSkgew0KICAgICAgICB2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0KTsNCiAgICAgICAgaWYgKCFpbnN0KSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KDQogICAgICAgIGlmICh0cF9pbnN0KSB7DQogICAgICAgICAgICB0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGluc3QpOw0KICAgICAgICAgICAgdmFyIHRwX2RhdGU7DQogICAgICAgICAgICBpZiAoZGF0ZSkgew0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gInN0cmluZyIpIHsNCiAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fcGFyc2VUaW1lKGRhdGUsIHdpdGhEYXRlKTsNCiAgICAgICAgICAgICAgICAgICAgdHBfZGF0ZSA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICAgICAgICAgIHRwX2RhdGUuc2V0SG91cnModHBfaW5zdC5ob3VyLCB0cF9pbnN0Lm1pbnV0ZSwgdHBfaW5zdC5zZWNvbmQsIHRwX2luc3QubWlsbGlzZWMpOw0KICAgICAgICAgICAgICAgICAgICB0cF9kYXRlLnNldE1pY3Jvc2Vjb25kcyh0cF9pbnN0Lm1pY3Jvc2VjKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB0cF9kYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpOw0KICAgICAgICAgICAgICAgICAgICB0cF9kYXRlLnNldE1pY3Jvc2Vjb25kcyhkYXRlLmdldE1pY3Jvc2Vjb25kcygpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHRwX2RhdGUudG9TdHJpbmcoKSA9PT0gJ0ludmFsaWQgRGF0ZScpIHsNCiAgICAgICAgICAgICAgICAgICAgdHBfZGF0ZSA9IHVuZGVmaW5lZDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy5fc2V0VGltZShpbnN0LCB0cF9kYXRlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgfTsNCg0KICAgIC8qDQoJKiBvdmVycmlkZSBzZXREYXRlKCkgdG8gYWxsb3cgc2V0dGluZyB0aW1lIHRvbyB3aXRoaW4gRGF0ZSBvYmplY3QNCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fYmFzZV9zZXREYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fc2V0RGF0ZURhdGVwaWNrZXI7DQogICAgJC5kYXRlcGlja2VyLl9zZXREYXRlRGF0ZXBpY2tlciA9IGZ1bmN0aW9uICh0YXJnZXQsIF9kYXRlKSB7DQogICAgICAgIHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpOw0KICAgICAgICB2YXIgZGF0ZSA9IF9kYXRlOw0KICAgICAgICBpZiAoIWluc3QpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh0eXBlb2YgKF9kYXRlKSA9PT0gJ3N0cmluZycpIHsNCiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShfZGF0ZSk7DQogICAgICAgICAgICBpZiAoIWRhdGUuZ2V0VGltZSgpKSB7DQogICAgICAgICAgICAgICAgdGhpcy5fYmFzZV9zZXREYXRlRGF0ZXBpY2tlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOw0KICAgICAgICAgICAgICAgIGRhdGUgPSAkKHRhcmdldCkuZGF0ZXBpY2tlcignZ2V0RGF0ZScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsNCiAgICAgICAgdmFyIHRwX2RhdGU7DQogICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkgew0KICAgICAgICAgICAgdHBfZGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgIHRwX2RhdGUuc2V0TWljcm9zZWNvbmRzKGRhdGUuZ2V0TWljcm9zZWNvbmRzKCkpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdHBfZGF0ZSA9IGRhdGU7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBpZiB5b3UgYXJlIHVzaW5nIHRoZSB0aW1lem9uZSBvcHRpb24sIGphdmFzY3JpcHQncyBEYXRlIA0KICAgICAgICAvLyBvYmplY3Qgd2lsbCBvbmx5IHJldHVybiB0aGUgdGltZXpvbmUgb2Zmc2V0IGZvciB0aGUgY3VycmVudCBsb2NhbGUsIHNvIHdlIA0KICAgICAgICAvLyBhZGp1c3QgaXQgYWNjb3JkaW5nbHkuICBJZiBub3QgdXNpbmcgdGltZXpvbmUgb3B0aW9uIHRoaXMgd29uJ3QgbWF0dGVyLi4NCiAgICAgICAgLy8gSWYgYSB0aW1lem9uZSBpcyBkaWZmZXJlbnQgaW4gdHAsIGtlZXAgdGhlIHRpbWV6b25lIGFzIGlzDQogICAgICAgIGlmICh0cF9pbnN0ICYmIHRwX2RhdGUpIHsNCiAgICAgICAgICAgIC8vIGxvb2sgb3V0IGZvciBEU1QgaWYgdHogd2Fzbid0IHNwZWNpZmllZA0KICAgICAgICAgICAgaWYgKCF0cF9pbnN0LnN1cHBvcnQudGltZXpvbmUgJiYgdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmUgPT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICB0cF9pbnN0LnRpbWV6b25lID0gdHBfZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogLTE7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBkYXRlID0gJC50aW1lcGlja2VyLnRpbWV6b25lQWRqdXN0KGRhdGUsIHRwX2luc3QudGltZXpvbmUpOw0KICAgICAgICAgICAgdHBfZGF0ZSA9ICQudGltZXBpY2tlci50aW1lem9uZUFkanVzdCh0cF9kYXRlLCB0cF9pbnN0LnRpbWV6b25lKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7DQogICAgICAgIHRoaXMuX2Jhc2Vfc2V0RGF0ZURhdGVwaWNrZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsNCiAgICAgICAgdGhpcy5fc2V0VGltZURhdGVwaWNrZXIodGFyZ2V0LCB0cF9kYXRlLCB0cnVlKTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIG92ZXJyaWRlIGdldERhdGUoKSB0byBhbGxvdyBnZXR0aW5nIHRpbWUgdG9vIHdpdGhpbiBEYXRlIG9iamVjdA0KCSovDQogICAgJC5kYXRlcGlja2VyLl9iYXNlX2dldERhdGVEYXRlcGlja2VyID0gJC5kYXRlcGlja2VyLl9nZXREYXRlRGF0ZXBpY2tlcjsNCiAgICAkLmRhdGVwaWNrZXIuX2dldERhdGVEYXRlcGlja2VyID0gZnVuY3Rpb24gKHRhcmdldCwgbm9EZWZhdWx0KSB7DQogICAgICAgIHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpOw0KICAgICAgICBpZiAoIWluc3QpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQoNCiAgICAgICAgaWYgKHRwX2luc3QpIHsNCiAgICAgICAgICAgIC8vIGlmIGl0IGhhc24ndCB5ZXQgYmVlbiBkZWZpbmVkLCBncmFiIGZyb20gZmllbGQNCiAgICAgICAgICAgIGlmIChpbnN0Lmxhc3RWYWwgPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIHRoaXMuX3NldERhdGVGcm9tRmllbGQoaW5zdCwgbm9EZWZhdWx0KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIGRhdGUgPSB0aGlzLl9nZXREYXRlKGluc3QpOw0KICAgICAgICAgICAgaWYgKGRhdGUgJiYgdHBfaW5zdC5fcGFyc2VUaW1lKCQodGFyZ2V0KS52YWwoKSwgdHBfaW5zdC50aW1lT25seSkpIHsNCiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKHRwX2luc3QuaG91ciwgdHBfaW5zdC5taW51dGUsIHRwX2luc3Quc2Vjb25kLCB0cF9pbnN0Lm1pbGxpc2VjKTsNCiAgICAgICAgICAgICAgICBkYXRlLnNldE1pY3Jvc2Vjb25kcyh0cF9pbnN0Lm1pY3Jvc2VjKTsNCg0KICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGlmIHlvdSBhcmUgdXNpbmcgdGhlIHRpbWV6b25lIG9wdGlvbiwgamF2YXNjcmlwdCdzIERhdGUgDQogICAgICAgICAgICAgICAgLy8gb2JqZWN0IHdpbGwgb25seSByZXR1cm4gdGhlIHRpbWV6b25lIG9mZnNldCBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlLCBzbyB3ZSANCiAgICAgICAgICAgICAgICAvLyBhZGp1c3QgaXQgYWNjb3JkaW5nbHkuICBJZiBub3QgdXNpbmcgdGltZXpvbmUgb3B0aW9uIHRoaXMgd29uJ3QgbWF0dGVyLi4NCiAgICAgICAgICAgICAgICBpZiAodHBfaW5zdC50aW1lem9uZSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgb3V0IGZvciBEU1QgaWYgdHogd2Fzbid0IHNwZWNpZmllZA0KICAgICAgICAgICAgICAgICAgICBpZiAoIXRwX2luc3Quc3VwcG9ydC50aW1lem9uZSAmJiB0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZSA9PT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC50aW1lem9uZSA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGRhdGUgPSAkLnRpbWVwaWNrZXIudGltZXpvbmVBZGp1c3QoZGF0ZSwgdHBfaW5zdC50aW1lem9uZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGRhdGU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VfZ2V0RGF0ZURhdGVwaWNrZXIodGFyZ2V0LCBub0RlZmF1bHQpOw0KICAgIH07DQoNCiAgICAvKg0KCSogb3ZlcnJpZGUgcGFyc2VEYXRlKCkgYmVjYXVzZSBVSSAxLjguMTQgdGhyb3dzIGFuIGVycm9yIGFib3V0ICJFeHRyYSBjaGFyYWN0ZXJzIg0KCSogQW4gb3B0aW9uIGluIGRhdGFwaWNrZXIgdG8gaWdub3JlIGV4dHJhIGZvcm1hdCBjaGFyYWN0ZXJzIHdvdWxkIGJlIG5pY2VyLg0KCSovDQogICAgJC5kYXRlcGlja2VyLl9iYXNlX3BhcnNlRGF0ZSA9ICQuZGF0ZXBpY2tlci5wYXJzZURhdGU7DQogICAgJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSA9IGZ1bmN0aW9uIChmb3JtYXQsIHZhbHVlLCBzZXR0aW5ncykgew0KICAgICAgICB2YXIgZGF0ZTsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGRhdGUgPSB0aGlzLl9iYXNlX3BhcnNlRGF0ZShmb3JtYXQsIHZhbHVlLCBzZXR0aW5ncyk7DQogICAgICAgIH0gY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgLy8gSGFjayEgIFRoZSBlcnJvciBtZXNzYWdlIGVuZHMgd2l0aCBhIGNvbG9uLCBhIHNwYWNlLCBhbmQNCiAgICAgICAgICAgIC8vIHRoZSAiZXh0cmEiIGNoYXJhY3RlcnMuICBXZSByZWx5IG9uIHRoYXQgaW5zdGVhZCBvZg0KICAgICAgICAgICAgLy8gYXR0ZW1wdGluZyB0byBwZXJmZWN0bHkgcmVwcm9kdWNlIHRoZSBwYXJzaW5nIGFsZ29yaXRobS4NCiAgICAgICAgICAgIGlmIChlcnIuaW5kZXhPZigiOiIpID49IDApIHsNCiAgICAgICAgICAgICAgICBkYXRlID0gdGhpcy5fYmFzZV9wYXJzZURhdGUoZm9ybWF0LCB2YWx1ZS5zdWJzdHJpbmcoMCwgdmFsdWUubGVuZ3RoIC0gKGVyci5sZW5ndGggLSBlcnIuaW5kZXhPZignOicpIC0gMikpLCBzZXR0aW5ncyk7DQogICAgICAgICAgICAgICAgJC50aW1lcGlja2VyLmxvZygiRXJyb3IgcGFyc2luZyB0aGUgZGF0ZSBzdHJpbmc6ICIgKyBlcnIgKyAiXG5kYXRlIHN0cmluZyA9ICIgKyB2YWx1ZSArICJcbmRhdGUgZm9ybWF0ID0gIiArIGZvcm1hdCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRocm93IGVycjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZGF0ZTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIG92ZXJyaWRlIGZvcm1hdERhdGUgdG8gc2V0IGRhdGUgd2l0aCB0aW1lIHRvIHRoZSBpbnB1dA0KCSovDQogICAgJC5kYXRlcGlja2VyLl9iYXNlX2Zvcm1hdERhdGUgPSAkLmRhdGVwaWNrZXIuX2Zvcm1hdERhdGU7DQogICAgJC5kYXRlcGlja2VyLl9mb3JtYXREYXRlID0gZnVuY3Rpb24gKGluc3QsIGRheSwgbW9udGgsIHllYXIpIHsNCiAgICAgICAgdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsNCiAgICAgICAgaWYgKHRwX2luc3QpIHsNCiAgICAgICAgICAgIHRwX2luc3QuX3VwZGF0ZURhdGVUaW1lKGluc3QpOw0KICAgICAgICAgICAgcmV0dXJuIHRwX2luc3QuJGlucHV0LnZhbCgpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzLl9iYXNlX2Zvcm1hdERhdGUoaW5zdCk7DQogICAgfTsNCg0KICAgIC8qDQoJKiBvdmVycmlkZSBvcHRpb25zIHNldHRlciB0byBhZGQgdGltZSB0byBtYXhEYXRlKFRpbWUpIGFuZCBtaW5EYXRlKFRpbWUpLiBNYXhEYXRlDQoJKi8NCiAgICAkLmRhdGVwaWNrZXIuX2Jhc2Vfb3B0aW9uRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fb3B0aW9uRGF0ZXBpY2tlcjsNCiAgICAkLmRhdGVwaWNrZXIuX29wdGlvbkRhdGVwaWNrZXIgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCB2YWx1ZSkgew0KICAgICAgICB2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0KSwNCgkJCW5hbWVfY2xvbmU7DQogICAgICAgIGlmICghaW5zdCkgew0KICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KICAgICAgICBpZiAodHBfaW5zdCkgew0KICAgICAgICAgICAgdmFyIG1pbiA9IG51bGwsDQoJCQkJbWF4ID0gbnVsbCwNCgkJCQlvbnNlbGVjdCA9IG51bGwsDQoJCQkJb3ZlcnJpZGVzID0gdHBfaW5zdC5fZGVmYXVsdHMuZXZudHMsDQoJCQkJZm5zID0ge30sDQoJCQkJcHJvcDsNCiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHsgLy8gaWYgbWluL21heCB3YXMgc2V0IHdpdGggdGhlIHN0cmluZw0KICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnbWluRGF0ZScgfHwgbmFtZSA9PT0gJ21pbkRhdGVUaW1lJykgew0KICAgICAgICAgICAgICAgICAgICBtaW4gPSB2YWx1ZTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdtYXhEYXRlJyB8fCBuYW1lID09PSAnbWF4RGF0ZVRpbWUnKSB7DQogICAgICAgICAgICAgICAgICAgIG1heCA9IHZhbHVlOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ29uU2VsZWN0Jykgew0KICAgICAgICAgICAgICAgICAgICBvbnNlbGVjdCA9IHZhbHVlOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3ZlcnJpZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ3VuZGVmaW5lZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdmVycmlkZXNbbmFtZV07DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZm5zW25hbWVdID0gdmFsdWU7DQogICAgICAgICAgICAgICAgICAgIG5hbWVfY2xvbmUgPSB7fTsgLy9lbXB0eSByZXN1bHRzIGluIGV4aXRpbmcgZnVuY3Rpb24gYWZ0ZXIgb3ZlcnJpZGVzIHVwZGF0ZWQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JykgeyAvL2lmIG1pbi9tYXggd2FzIHNldCB3aXRoIHRoZSBKU09ODQogICAgICAgICAgICAgICAgaWYgKG5hbWUubWluRGF0ZSkgew0KICAgICAgICAgICAgICAgICAgICBtaW4gPSBuYW1lLm1pbkRhdGU7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLm1pbkRhdGVUaW1lKSB7DQogICAgICAgICAgICAgICAgICAgIG1pbiA9IG5hbWUubWluRGF0ZVRpbWU7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLm1heERhdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgbWF4ID0gbmFtZS5tYXhEYXRlOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5tYXhEYXRlVGltZSkgew0KICAgICAgICAgICAgICAgICAgICBtYXggPSBuYW1lLm1heERhdGVUaW1lOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmb3IgKHByb3AgaW4gb3ZlcnJpZGVzKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgbmFtZVtwcm9wXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm5zW3Byb3BdID0gbmFtZVtwcm9wXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGZvciAocHJvcCBpbiBmbnMpIHsNCiAgICAgICAgICAgICAgICBpZiAoZm5zLmhhc093blByb3BlcnR5KHByb3ApKSB7DQogICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlc1twcm9wXSA9IGZuc1twcm9wXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lX2Nsb25lKSB7IG5hbWVfY2xvbmUgPSAkLmV4dGVuZCh7fSwgbmFtZSk7IH0NCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5hbWVfY2xvbmVbcHJvcF07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKG5hbWVfY2xvbmUgJiYgaXNFbXB0eU9iamVjdChuYW1lX2Nsb25lKSkgeyByZXR1cm47IH0NCiAgICAgICAgICAgIGlmIChtaW4pIHsgLy9pZiBtaW4gd2FzIHNldA0KICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgbWluID0gbmV3IERhdGUoKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBtaW4gPSBuZXcgRGF0ZShtaW4pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID0gbWluOw0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lID0gbWluOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChtYXgpIHsgLy9pZiBtYXggd2FzIHNldA0KICAgICAgICAgICAgICAgIGlmIChtYXggPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgbWF4ID0gbmV3IERhdGUoKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBtYXggPSBuZXcgRGF0ZShtYXgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlID0gbWF4Ow0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGVUaW1lID0gbWF4Ow0KICAgICAgICAgICAgfSBlbHNlIGlmIChvbnNlbGVjdCkgew0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm9uU2VsZWN0ID0gb25zZWxlY3Q7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlX29wdGlvbkRhdGVwaWNrZXIuY2FsbCgkLmRhdGVwaWNrZXIsIHRhcmdldCwgbmFtZSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2Vfb3B0aW9uRGF0ZXBpY2tlci5jYWxsKCQuZGF0ZXBpY2tlciwgdGFyZ2V0LCBuYW1lX2Nsb25lIHx8IG5hbWUsIHZhbHVlKTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIGpRdWVyeSBpc0VtcHR5T2JqZWN0IGRvZXMgbm90IGNoZWNrIGhhc093blByb3BlcnR5IC0gaWYgc29tZW9uZSBoYXMgYWRkZWQgdG8gdGhlIG9iamVjdCBwcm90b3R5cGUsDQoJKiBpdCB3aWxsIHJldHVybiBmYWxzZSBmb3IgYWxsIG9iamVjdHMNCgkqLw0KICAgIHZhciBpc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24gKG9iaikgew0KICAgICAgICB2YXIgcHJvcDsNCiAgICAgICAgZm9yIChwcm9wIGluIG9iaikgew0KICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIGpRdWVyeSBleHRlbmQgbm93IGlnbm9yZXMgbnVsbHMhDQoJKi8NCiAgICB2YXIgZXh0ZW5kUmVtb3ZlID0gZnVuY3Rpb24gKHRhcmdldCwgcHJvcHMpIHsNCiAgICAgICAgJC5leHRlbmQodGFyZ2V0LCBwcm9wcyk7DQogICAgICAgIGZvciAodmFyIG5hbWUgaW4gcHJvcHMpIHsNCiAgICAgICAgICAgIGlmIChwcm9wc1tuYW1lXSA9PT0gbnVsbCB8fCBwcm9wc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gcHJvcHNbbmFtZV07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRhcmdldDsNCiAgICB9Ow0KDQogICAgLyoNCgkqIERldGVybWluZSBieSB0aGUgdGltZSBmb3JtYXQgd2hpY2ggdW5pdHMgYXJlIHN1cHBvcnRlZA0KCSogUmV0dXJucyBhbiBvYmplY3Qgb2YgYm9vbGVhbnMgZm9yIGVhY2ggdW5pdA0KCSovDQogICAgdmFyIGRldGVjdFN1cHBvcnQgPSBmdW5jdGlvbiAodGltZUZvcm1hdCkgew0KICAgICAgICB2YXIgdGYgPSB0aW1lRm9ybWF0LnJlcGxhY2UoLycuKj8nL2csICcnKS50b0xvd2VyQ2FzZSgpLCAvLyByZW1vdmVzIGxpdGVyYWxzDQoJCQlpc0luID0gZnVuY3Rpb24gKGYsIHQpIHsgLy8gZG9lcyB0aGUgZm9ybWF0IGNvbnRhaW4gdGhlIHRva2VuPw0KCQkJICAgIHJldHVybiBmLmluZGV4T2YodCkgIT09IC0xID8gdHJ1ZSA6IGZhbHNlOw0KCQkJfTsNCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIGhvdXI6IGlzSW4odGYsICdoJyksDQogICAgICAgICAgICBtaW51dGU6IGlzSW4odGYsICdtJyksDQogICAgICAgICAgICBzZWNvbmQ6IGlzSW4odGYsICdzJyksDQogICAgICAgICAgICBtaWxsaXNlYzogaXNJbih0ZiwgJ2wnKSwNCiAgICAgICAgICAgIG1pY3Jvc2VjOiBpc0luKHRmLCAnYycpLA0KICAgICAgICAgICAgdGltZXpvbmU6IGlzSW4odGYsICd6JyksDQogICAgICAgICAgICBhbXBtOiBpc0luKHRmLCAndCcpICYmIGlzSW4odGltZUZvcm1hdCwgJ2gnKSwNCiAgICAgICAgICAgIGlzbzg2MDE6IGlzSW4odGltZUZvcm1hdCwgJ1onKQ0KICAgICAgICB9Ow0KICAgIH07DQoNCiAgICAvKg0KCSogQ29udmVydHMgMjQgaG91ciBmb3JtYXQgaW50byAxMiBob3VyDQoJKiBSZXR1cm5zIDEyIGhvdXIgd2l0aG91dCBsZWFkaW5nIDANCgkqLw0KICAgIHZhciBjb252ZXJ0MjR0bzEyID0gZnVuY3Rpb24gKGhvdXIpIHsNCiAgICAgICAgaG91ciAlPSAxMjsNCg0KICAgICAgICBpZiAoaG91ciA9PT0gMCkgew0KICAgICAgICAgICAgaG91ciA9IDEyOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIFN0cmluZyhob3VyKTsNCiAgICB9Ow0KDQogICAgdmFyIGNvbXB1dGVFZmZlY3RpdmVTZXR0aW5nID0gZnVuY3Rpb24gKHNldHRpbmdzLCBwcm9wZXJ0eSkgew0KICAgICAgICByZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3NbcHJvcGVydHldID8gc2V0dGluZ3NbcHJvcGVydHldIDogJC50aW1lcGlja2VyLl9kZWZhdWx0c1twcm9wZXJ0eV07DQogICAgfTsNCg0KICAgIC8qDQoJKiBTcGxpdHMgZGF0ZXRpbWUgc3RyaW5nIGludG8gZGF0ZSBhbmQgdGltZSBzdWJzdHJpbmdzLg0KCSogVGhyb3dzIGV4Y2VwdGlvbiB3aGVuIGRhdGUgY2FuJ3QgYmUgcGFyc2VkDQoJKiBSZXR1cm5zIHtkYXRlU3RyaW5nOiBkYXRlU3RyaW5nLCB0aW1lU3RyaW5nOiB0aW1lU3RyaW5nfQ0KCSovDQogICAgdmFyIHNwbGl0RGF0ZVRpbWUgPSBmdW5jdGlvbiAoZGF0ZVRpbWVTdHJpbmcsIHRpbWVTZXR0aW5ncykgew0KICAgICAgICAvLyBUaGUgaWRlYSBpcyB0byBnZXQgdGhlIG51bWJlciBzZXBhcmF0b3Igb2NjdXJyZW5jZXMgaW4gZGF0ZXRpbWUgYW5kIHRoZSB0aW1lIGZvcm1hdCByZXF1ZXN0ZWQgKHNpbmNlIHRpbWUgaGFzDQogICAgICAgIC8vIGZld2VyIHVua25vd25zLCBtb3N0bHkgbnVtYmVycyBhbmQgYW0vcG0pLiBXZSB3aWxsIHVzZSB0aGUgdGltZSBwYXR0ZXJuIHRvIHNwbGl0Lg0KICAgICAgICB2YXIgc2VwYXJhdG9yID0gY29tcHV0ZUVmZmVjdGl2ZVNldHRpbmcodGltZVNldHRpbmdzLCAnc2VwYXJhdG9yJyksDQoJCQlmb3JtYXQgPSBjb21wdXRlRWZmZWN0aXZlU2V0dGluZyh0aW1lU2V0dGluZ3MsICd0aW1lRm9ybWF0JyksDQoJCQl0aW1lUGFydHMgPSBmb3JtYXQuc3BsaXQoc2VwYXJhdG9yKSwgLy8gaG93IG1hbnkgb2NjdXJyZW5jZXMgb2Ygc2VwYXJhdG9yIG1heSBiZSBpbiBvdXIgZm9ybWF0Pw0KCQkJdGltZVBhcnRzTGVuID0gdGltZVBhcnRzLmxlbmd0aCwNCgkJCWFsbFBhcnRzID0gZGF0ZVRpbWVTdHJpbmcuc3BsaXQoc2VwYXJhdG9yKSwNCgkJCWFsbFBhcnRzTGVuID0gYWxsUGFydHMubGVuZ3RoOw0KDQogICAgICAgIGlmIChhbGxQYXJ0c0xlbiA+IDEpIHsNCiAgICAgICAgICAgIHJldHVybiB7DQogICAgICAgICAgICAgICAgZGF0ZVN0cmluZzogYWxsUGFydHMuc3BsaWNlKDAsIGFsbFBhcnRzTGVuIC0gdGltZVBhcnRzTGVuKS5qb2luKHNlcGFyYXRvciksDQogICAgICAgICAgICAgICAgdGltZVN0cmluZzogYWxsUGFydHMuc3BsaWNlKDAsIHRpbWVQYXJ0c0xlbikuam9pbihzZXBhcmF0b3IpDQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIGRhdGVTdHJpbmc6IGRhdGVUaW1lU3RyaW5nLA0KICAgICAgICAgICAgdGltZVN0cmluZzogJycNCiAgICAgICAgfTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIEludGVybmFsIGZ1bmN0aW9uIHRvIHBhcnNlIGRhdGV0aW1lIGludGVydmFsDQoJKiBSZXR1cm5zOiB7ZGF0ZTogRGF0ZSwgdGltZU9iajogT2JqZWN0fSwgd2hlcmUNCgkqICAgZGF0ZSAtIHBhcnNlZCBkYXRlIHdpdGhvdXQgdGltZSAodHlwZSBEYXRlKQ0KCSogICB0aW1lT2JqID0ge2hvdXI6ICwgbWludXRlOiAsIHNlY29uZDogLCBtaWxsaXNlYzogLCBtaWNyb3NlYzogfSAtIHBhcnNlZCB0aW1lLiBPcHRpb25hbA0KCSovDQogICAgdmFyIHBhcnNlRGF0ZVRpbWVJbnRlcm5hbCA9IGZ1bmN0aW9uIChkYXRlRm9ybWF0LCB0aW1lRm9ybWF0LCBkYXRlVGltZVN0cmluZywgZGF0ZVNldHRpbmdzLCB0aW1lU2V0dGluZ3MpIHsNCiAgICAgICAgdmFyIGRhdGUsDQoJCQlwYXJ0cywNCgkJCXBhcnNlZFRpbWU7DQoNCiAgICAgICAgcGFydHMgPSBzcGxpdERhdGVUaW1lKGRhdGVUaW1lU3RyaW5nLCB0aW1lU2V0dGluZ3MpOw0KICAgICAgICBkYXRlID0gJC5kYXRlcGlja2VyLl9iYXNlX3BhcnNlRGF0ZShkYXRlRm9ybWF0LCBwYXJ0cy5kYXRlU3RyaW5nLCBkYXRlU2V0dGluZ3MpOw0KDQogICAgICAgIGlmIChwYXJ0cy50aW1lU3RyaW5nID09PSAnJykgew0KICAgICAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgICAgICBkYXRlOiBkYXRlDQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgcGFyc2VkVGltZSA9ICQuZGF0ZXBpY2tlci5wYXJzZVRpbWUodGltZUZvcm1hdCwgcGFydHMudGltZVN0cmluZywgdGltZVNldHRpbmdzKTsNCg0KICAgICAgICBpZiAoIXBhcnNlZFRpbWUpIHsNCiAgICAgICAgICAgIHRocm93ICdXcm9uZyB0aW1lIGZvcm1hdCc7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgZGF0ZTogZGF0ZSwNCiAgICAgICAgICAgIHRpbWVPYmo6IHBhcnNlZFRpbWUNCiAgICAgICAgfTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIEludGVybmFsIGZ1bmN0aW9uIHRvIHNldCB0aW1lem9uZV9zZWxlY3QgdG8gdGhlIGxvY2FsIHRpbWV6b25lDQoJKi8NCiAgICB2YXIgc2VsZWN0TG9jYWxUaW1lem9uZSA9IGZ1bmN0aW9uICh0cF9pbnN0LCBkYXRlKSB7DQogICAgICAgIGlmICh0cF9pbnN0ICYmIHRwX2luc3QudGltZXpvbmVfc2VsZWN0KSB7DQogICAgICAgICAgICB2YXIgbm93ID0gZGF0ZSB8fCBuZXcgRGF0ZSgpOw0KICAgICAgICAgICAgdHBfaW5zdC50aW1lem9uZV9zZWxlY3QudmFsKC1ub3cuZ2V0VGltZXpvbmVPZmZzZXQoKSk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgLyoNCgkqIENyZWF0ZSBhIFNpbmdsZXRvbiBJbnN0YW5jZQ0KCSovDQogICAgJC50aW1lcGlja2VyID0gbmV3IFRpbWVwaWNrZXIoKTsNCg0KICAgIC8qKg0KCSAqIEdldCB0aGUgdGltZXpvbmUgb2Zmc2V0IGFzIHN0cmluZyBmcm9tIGEgZGF0ZSBvYmplY3QgKGVnICcrMDUzMCcgZm9yIFVUQys1LjUpDQoJICogQHBhcmFtIHtudW1iZXJ9IHR6TWludXRlcyBpZiBub3QgYSBudW1iZXIsIGxlc3MgdGhhbiAtNzIwICgtMTIwMCksIG9yIGdyZWF0ZXIgdGhhbiA4NDAgKCsxNDAwKSB0aGlzIHZhbHVlIGlzIHJldHVybmVkDQoJICogQHBhcmFtIHtib29sZWFufSBpc284NjAxIGlmIHRydWUgZm9ybWF0cyBpbiBhY2NvcmRhbmNlIHRvIGlzbzg2MDEgIisxMjo0NSINCgkgKiBAcmV0dXJuIHtzdHJpbmd9DQoJICovDQogICAgJC50aW1lcGlja2VyLnRpbWV6b25lT2Zmc2V0U3RyaW5nID0gZnVuY3Rpb24gKHR6TWludXRlcywgaXNvODYwMSkgew0KICAgICAgICBpZiAoaXNOYU4odHpNaW51dGVzKSB8fCB0ek1pbnV0ZXMgPiA4NDAgfHwgdHpNaW51dGVzIDwgLTcyMCkgew0KICAgICAgICAgICAgcmV0dXJuIHR6TWludXRlczsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBvZmYgPSB0ek1pbnV0ZXMsDQoJCQltaW51dGVzID0gb2ZmICUgNjAsDQoJCQlob3VycyA9IChvZmYgLSBtaW51dGVzKSAvIDYwLA0KCQkJaXNvID0gaXNvODYwMSA/ICc6JyA6ICcnLA0KCQkJdHogPSAob2ZmID49IDAgPyAnKycgOiAnLScpICsgKCcwJyArIE1hdGguYWJzKGhvdXJzKSkuc2xpY2UoLTIpICsgaXNvICsgKCcwJyArIE1hdGguYWJzKG1pbnV0ZXMpKS5zbGljZSgtMik7DQoNCiAgICAgICAgaWYgKHR6ID09PSAnKzAwOjAwJykgew0KICAgICAgICAgICAgcmV0dXJuICdaJzsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHo7DQogICAgfTsNCg0KICAgIC8qKg0KCSAqIEdldCB0aGUgbnVtYmVyIGluIG1pbnV0ZXMgdGhhdCByZXByZXNlbnRzIGEgdGltZXpvbmUgc3RyaW5nDQoJICogQHBhcmFtICB7c3RyaW5nfSB0elN0cmluZyBmb3JtYXR0ZWQgbGlrZSAiKzA1MDAiLCAiLTEyNDUiLCAiWiINCgkgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBvZmZzZXQgbWludXRlcyBvciB0aGUgb3JpZ2luYWwgc3RyaW5nIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggZXhwZWN0YXRpb25zDQoJICovDQogICAgJC50aW1lcGlja2VyLnRpbWV6b25lT2Zmc2V0TnVtYmVyID0gZnVuY3Rpb24gKHR6U3RyaW5nKSB7DQogICAgICAgIHZhciBub3JtYWxpemVkID0gdHpTdHJpbmcudG9TdHJpbmcoKS5yZXBsYWNlKCc6JywgJycpOyAvLyBleGN1c2UgYW55IGlzbzg2MDEsIGVuZCB1cCB3aXRoICIrMTI0NSINCg0KICAgICAgICBpZiAobm9ybWFsaXplZC50b1VwcGVyQ2FzZSgpID09PSAnWicpIHsgLy8gaWYgaXNvODYwMSB3aXRoIFosIGl0cyAwIG1pbnV0ZSBvZmZzZXQNCiAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCEvXihcLXxcKylcZHs0fSQvLnRlc3Qobm9ybWFsaXplZCkpIHsgLy8gcG9zc2libHkgYSB1c2VyIGRlZmluZWQgdHosIHNvIGp1c3QgZ2l2ZSBpdCBiYWNrDQogICAgICAgICAgICByZXR1cm4gdHpTdHJpbmc7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gKChub3JtYWxpemVkLnN1YnN0cigwLCAxKSA9PT0gJy0nID8gLTEgOiAxKSAqIC8vIHBsdXMgb3IgbWludXMNCgkJCQkJKChwYXJzZUludChub3JtYWxpemVkLnN1YnN0cigxLCAyKSwgMTApICogNjApICsgLy8gaG91cnMgKGNvbnZlcnRlZCB0byBtaW51dGVzKQ0KCQkJCQlwYXJzZUludChub3JtYWxpemVkLnN1YnN0cigzLCAyKSwgMTApKSk7IC8vIG1pbnV0ZXMNCiAgICB9Ow0KDQogICAgLyoqDQoJICogTm8gd2F5IHRvIHNldCB0aW1lem9uZSBpbiBqcyBEYXRlLCBzbyB3ZSBtdXN0IGFkanVzdCB0aGUgbWludXRlcyB0byBjb21wZW5zYXRlLiAodGhpbmsgc2V0RGF0ZSwgZ2V0RGF0ZSkNCgkgKiBAcGFyYW0gIHtEYXRlfSBkYXRlDQoJICogQHBhcmFtICB7c3RyaW5nfSB0b1RpbWV6b25lIGZvcm1hdHRlZCBsaWtlICIrMDUwMCIsICItMTI0NSINCgkgKiBAcmV0dXJuIHtEYXRlfQ0KCSAqLw0KICAgICQudGltZXBpY2tlci50aW1lem9uZUFkanVzdCA9IGZ1bmN0aW9uIChkYXRlLCB0b1RpbWV6b25lKSB7DQogICAgICAgIHZhciB0b1R6ID0gJC50aW1lcGlja2VyLnRpbWV6b25lT2Zmc2V0TnVtYmVyKHRvVGltZXpvbmUpOw0KICAgICAgICBpZiAoIWlzTmFOKHRvVHopKSB7DQogICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgKyAtZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpIC0gdG9Ueik7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGRhdGU7DQogICAgfTsNCg0KICAgIC8qKg0KCSAqIENhbGxzIGB0aW1lcGlja2VyKClgIG9uIHRoZSBgc3RhcnRUaW1lYCBhbmQgYGVuZFRpbWVgIGVsZW1lbnRzLCBhbmQgY29uZmlndXJlcyB0aGVtIHRvDQoJICogZW5mb3JjZSBkYXRlIHJhbmdlIGxpbWl0cy4NCgkgKiBuLmIuIFRoZSBpbnB1dCB2YWx1ZSBtdXN0IGJlIGNvcnJlY3RseSBmb3JtYXR0ZWQgKHJlZm9ybWF0dGluZyBpcyBub3Qgc3VwcG9ydGVkKQ0KCSAqIEBwYXJhbSAge0VsZW1lbnR9IHN0YXJ0VGltZQ0KCSAqIEBwYXJhbSAge0VsZW1lbnR9IGVuZFRpbWUNCgkgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHRpbWVwaWNrZXIoKSBjYWxsDQoJICogQHJldHVybiB7alF1ZXJ5fQ0KCSAqLw0KICAgICQudGltZXBpY2tlci50aW1lUmFuZ2UgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKSB7DQogICAgICAgIHJldHVybiAkLnRpbWVwaWNrZXIuaGFuZGxlUmFuZ2UoJ3RpbWVwaWNrZXInLCBzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMpOw0KICAgIH07DQoNCiAgICAvKioNCgkgKiBDYWxscyBgZGF0ZXRpbWVwaWNrZXJgIG9uIHRoZSBgc3RhcnRUaW1lYCBhbmQgYGVuZFRpbWVgIGVsZW1lbnRzLCBhbmQgY29uZmlndXJlcyB0aGVtIHRvDQoJICogZW5mb3JjZSBkYXRlIHJhbmdlIGxpbWl0cy4NCgkgKiBAcGFyYW0gIHtFbGVtZW50fSBzdGFydFRpbWUNCgkgKiBAcGFyYW0gIHtFbGVtZW50fSBlbmRUaW1lDQoJICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBgdGltZXBpY2tlcigpYCBjYWxsLiBBbHNvIHN1cHBvcnRzIGByZWZvcm1hdGAsDQoJICogICBhIGJvb2xlYW4gdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0byByZWZvcm1hdCB0aGUgaW5wdXQgdmFsdWVzIHRvIHRoZSBgZGF0ZUZvcm1hdGAuDQoJICogQHBhcmFtICB7c3RyaW5nfSBtZXRob2QgQ2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBwaWNrZXIgdG8gYmUgYWRkZWQNCgkgKiBAcmV0dXJuIHtqUXVlcnl9DQoJICovDQogICAgJC50aW1lcGlja2VyLmRhdGV0aW1lUmFuZ2UgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKSB7DQogICAgICAgICQudGltZXBpY2tlci5oYW5kbGVSYW5nZSgnZGF0ZXRpbWVwaWNrZXInLCBzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMpOw0KICAgIH07DQoNCiAgICAvKioNCgkgKiBDYWxscyBgZGF0ZXBpY2tlcmAgb24gdGhlIGBzdGFydFRpbWVgIGFuZCBgZW5kVGltZWAgZWxlbWVudHMsIGFuZCBjb25maWd1cmVzIHRoZW0gdG8NCgkgKiBlbmZvcmNlIGRhdGUgcmFuZ2UgbGltaXRzLg0KCSAqIEBwYXJhbSAge0VsZW1lbnR9IHN0YXJ0VGltZQ0KCSAqIEBwYXJhbSAge0VsZW1lbnR9IGVuZFRpbWUNCgkgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGB0aW1lcGlja2VyKClgIGNhbGwuIEFsc28gc3VwcG9ydHMgYHJlZm9ybWF0YCwNCgkgKiAgIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZm9ybWF0IHRoZSBpbnB1dCB2YWx1ZXMgdG8gdGhlIGBkYXRlRm9ybWF0YC4NCgkgKiBAcmV0dXJuIHtqUXVlcnl9DQoJICovDQogICAgJC50aW1lcGlja2VyLmRhdGVSYW5nZSA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMpIHsNCiAgICAgICAgJC50aW1lcGlja2VyLmhhbmRsZVJhbmdlKCdkYXRlcGlja2VyJywgc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKTsNCiAgICB9Ow0KDQogICAgLyoqDQoJICogQ2FsbHMgYG1ldGhvZGAgb24gdGhlIGBzdGFydFRpbWVgIGFuZCBgZW5kVGltZWAgZWxlbWVudHMsIGFuZCBjb25maWd1cmVzIHRoZW0gdG8NCgkgKiBlbmZvcmNlIGRhdGUgcmFuZ2UgbGltaXRzLg0KCSAqIEBwYXJhbSAge3N0cmluZ30gbWV0aG9kIENhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgcGlja2VyIHRvIGJlIGFkZGVkDQoJICogQHBhcmFtICB7RWxlbWVudH0gc3RhcnRUaW1lDQoJICogQHBhcmFtICB7RWxlbWVudH0gZW5kVGltZQ0KCSAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgYHRpbWVwaWNrZXIoKWAgY2FsbC4gQWxzbyBzdXBwb3J0cyBgcmVmb3JtYXRgLA0KCSAqICAgYSBib29sZWFuIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVmb3JtYXQgdGhlIGlucHV0IHZhbHVlcyB0byB0aGUgYGRhdGVGb3JtYXRgLg0KCSAqIEByZXR1cm4ge2pRdWVyeX0NCgkgKi8NCiAgICAkLnRpbWVwaWNrZXIuaGFuZGxlUmFuZ2UgPSBmdW5jdGlvbiAobWV0aG9kLCBzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMpIHsNCiAgICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB7DQogICAgICAgICAgICBtaW5JbnRlcnZhbDogMCwgLy8gbWluIGFsbG93ZWQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzDQogICAgICAgICAgICBtYXhJbnRlcnZhbDogMCwgLy8gbWF4IGFsbG93ZWQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzDQogICAgICAgICAgICBzdGFydDoge30sICAgICAgLy8gb3B0aW9ucyBmb3Igc3RhcnQgcGlja2VyDQogICAgICAgICAgICBlbmQ6IHt9ICAgICAgICAgLy8gb3B0aW9ucyBmb3IgZW5kIHBpY2tlcg0KICAgICAgICB9LCBvcHRpb25zKTsNCg0KICAgICAgICAvLyBmb3IgdGhlIG1lYW4gdGltZSB0aGlzIGZpeGVzIGFuIGlzc3VlIHdpdGggY2FsbGluZyBnZXREYXRlIHdpdGggdGltZXBpY2tlcigpDQogICAgICAgIHZhciB0aW1lT25seSA9IGZhbHNlOw0KICAgICAgICBpZiAobWV0aG9kID09PSAndGltZXBpY2tlcicpIHsNCiAgICAgICAgICAgIHRpbWVPbmx5ID0gdHJ1ZTsNCiAgICAgICAgICAgIG1ldGhvZCA9ICdkYXRldGltZXBpY2tlcic7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBjaGVja0RhdGVzKGNoYW5nZWQsIG90aGVyKSB7DQogICAgICAgICAgICB2YXIgc3RhcnRkdCA9IHN0YXJ0VGltZVttZXRob2RdKCdnZXREYXRlJyksDQoJCQkJZW5kZHQgPSBlbmRUaW1lW21ldGhvZF0oJ2dldERhdGUnKSwNCgkJCQljaGFuZ2VkZHQgPSBjaGFuZ2VkW21ldGhvZF0oJ2dldERhdGUnKTsNCg0KICAgICAgICAgICAgaWYgKHN0YXJ0ZHQgIT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICB2YXIgbWluRGF0ZSA9IG5ldyBEYXRlKHN0YXJ0ZHQuZ2V0VGltZSgpKSwNCgkJCQkJbWF4RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0ZHQuZ2V0VGltZSgpKTsNCg0KICAgICAgICAgICAgICAgIG1pbkRhdGUuc2V0TWlsbGlzZWNvbmRzKG1pbkRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgKyBvcHRpb25zLm1pbkludGVydmFsKTsNCiAgICAgICAgICAgICAgICBtYXhEYXRlLnNldE1pbGxpc2Vjb25kcyhtYXhEYXRlLmdldE1pbGxpc2Vjb25kcygpICsgb3B0aW9ucy5tYXhJbnRlcnZhbCk7DQoNCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5taW5JbnRlcnZhbCA+IDAgJiYgbWluRGF0ZSA+IGVuZGR0KSB7IC8vIG1pbkludGVydmFsIGNoZWNrDQogICAgICAgICAgICAgICAgICAgIGVuZFRpbWVbbWV0aG9kXSgnc2V0RGF0ZScsIG1pbkRhdGUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLm1heEludGVydmFsID4gMCAmJiBtYXhEYXRlIDwgZW5kZHQpIHsgLy8gbWF4IGludGVydmFsIGNoZWNrDQogICAgICAgICAgICAgICAgICAgIGVuZFRpbWVbbWV0aG9kXSgnc2V0RGF0ZScsIG1heERhdGUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGFydGR0ID4gZW5kZHQpIHsNCiAgICAgICAgICAgICAgICAgICAgb3RoZXJbbWV0aG9kXSgnc2V0RGF0ZScsIGNoYW5nZWRkdCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gc2VsZWN0ZWQoY2hhbmdlZCwgb3RoZXIsIG9wdGlvbikgew0KICAgICAgICAgICAgaWYgKCFjaGFuZ2VkLnZhbCgpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIGRhdGUgPSBjaGFuZ2VkW21ldGhvZF0uY2FsbChjaGFuZ2VkLCAnZ2V0RGF0ZScpOw0KICAgICAgICAgICAgaWYgKGRhdGUgIT09IG51bGwgJiYgb3B0aW9ucy5taW5JbnRlcnZhbCA+IDApIHsNCiAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09PSAnbWluRGF0ZScpIHsNCiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSArIG9wdGlvbnMubWluSW50ZXJ2YWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09PSAnbWF4RGF0ZScpIHsNCiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIG9wdGlvbnMubWluSW50ZXJ2YWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChkYXRlLmdldFRpbWUpIHsNCiAgICAgICAgICAgICAgICBvdGhlclttZXRob2RdLmNhbGwob3RoZXIsICdvcHRpb24nLCBvcHRpb24sIGRhdGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgJC5mblttZXRob2RdLmNhbGwoc3RhcnRUaW1lLCAkLmV4dGVuZCh7DQogICAgICAgICAgICB0aW1lT25seTogdGltZU9ubHksDQogICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHsNCiAgICAgICAgICAgICAgICBjaGVja0RhdGVzKCQodGhpcyksIGVuZFRpbWUpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoc2VsZWN0ZWREYXRlVGltZSkgew0KICAgICAgICAgICAgICAgIHNlbGVjdGVkKCQodGhpcyksIGVuZFRpbWUsICdtaW5EYXRlJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIG9wdGlvbnMsIG9wdGlvbnMuc3RhcnQpKTsNCiAgICAgICAgJC5mblttZXRob2RdLmNhbGwoZW5kVGltZSwgJC5leHRlbmQoew0KICAgICAgICAgICAgdGltZU9ubHk6IHRpbWVPbmx5LA0KICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gKGRhdGVUZXh0LCBpbnN0KSB7DQogICAgICAgICAgICAgICAgY2hlY2tEYXRlcygkKHRoaXMpLCBzdGFydFRpbWUpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoc2VsZWN0ZWREYXRlVGltZSkgew0KICAgICAgICAgICAgICAgIHNlbGVjdGVkKCQodGhpcyksIHN0YXJ0VGltZSwgJ21heERhdGUnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgb3B0aW9ucywgb3B0aW9ucy5lbmQpKTsNCg0KICAgICAgICBjaGVja0RhdGVzKHN0YXJ0VGltZSwgZW5kVGltZSk7DQogICAgICAgIHNlbGVjdGVkKHN0YXJ0VGltZSwgZW5kVGltZSwgJ21pbkRhdGUnKTsNCiAgICAgICAgc2VsZWN0ZWQoZW5kVGltZSwgc3RhcnRUaW1lLCAnbWF4RGF0ZScpOw0KICAgICAgICByZXR1cm4gJChbc3RhcnRUaW1lLmdldCgwKSwgZW5kVGltZS5nZXQoMCldKTsNCiAgICB9Ow0KDQogICAgLyoqDQoJICogTG9nIGVycm9yIG9yIGRhdGEgdG8gdGhlIGNvbnNvbGUgZHVyaW5nIGVycm9yIG9yIGRlYnVnZ2luZw0KCSAqIEBwYXJhbSAge09iamVjdH0gZXJyIHBhc3MgYW55IHR5cGUgb2JqZWN0IHRvIGxvZyB0byB0aGUgY29uc29sZSBkdXJpbmcgZXJyb3Igb3IgZGVidWdnaW5nDQoJICogQHJldHVybiB7dm9pZH0NCgkgKi8NCiAgICAkLnRpbWVwaWNrZXIubG9nID0gZnVuY3Rpb24gKGVycikgew0KICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpIHsNCiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZyhlcnIpOw0KICAgICAgICB9DQogICAgfTsNCg0KICAgIC8qDQoJICogQWRkIHV0aWwgb2JqZWN0IHRvIGFsbG93IGFjY2VzcyB0byBwcml2YXRlIG1ldGhvZHMgZm9yIHRlc3RhYmlsaXR5Lg0KCSAqLw0KICAgICQudGltZXBpY2tlci5fdXRpbCA9IHsNCiAgICAgICAgX2V4dGVuZFJlbW92ZTogZXh0ZW5kUmVtb3ZlLA0KICAgICAgICBfaXNFbXB0eU9iamVjdDogaXNFbXB0eU9iamVjdCwNCiAgICAgICAgX2NvbnZlcnQyNHRvMTI6IGNvbnZlcnQyNHRvMTIsDQogICAgICAgIF9kZXRlY3RTdXBwb3J0OiBkZXRlY3RTdXBwb3J0LA0KICAgICAgICBfc2VsZWN0TG9jYWxUaW1lem9uZTogc2VsZWN0TG9jYWxUaW1lem9uZSwNCiAgICAgICAgX2NvbXB1dGVFZmZlY3RpdmVTZXR0aW5nOiBjb21wdXRlRWZmZWN0aXZlU2V0dGluZywNCiAgICAgICAgX3NwbGl0RGF0ZVRpbWU6IHNwbGl0RGF0ZVRpbWUsDQogICAgICAgIF9wYXJzZURhdGVUaW1lSW50ZXJuYWw6IHBhcnNlRGF0ZVRpbWVJbnRlcm5hbA0KICAgIH07DQoNCiAgICAvKg0KCSogTWljcm9zZWNvbmQgc3VwcG9ydA0KCSovDQogICAgaWYgKCFEYXRlLnByb3RvdHlwZS5nZXRNaWNyb3NlY29uZHMpIHsNCiAgICAgICAgRGF0ZS5wcm90b3R5cGUubWljcm9zZWNvbmRzID0gMDsNCiAgICAgICAgRGF0ZS5wcm90b3R5cGUuZ2V0TWljcm9zZWNvbmRzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5taWNyb3NlY29uZHM7IH07DQogICAgICAgIERhdGUucHJvdG90eXBlLnNldE1pY3Jvc2Vjb25kcyA9IGZ1bmN0aW9uIChtKSB7DQogICAgICAgICAgICB0aGlzLnNldE1pbGxpc2Vjb25kcyh0aGlzLmdldE1pbGxpc2Vjb25kcygpICsgTWF0aC5mbG9vcihtIC8gMTAwMCkpOw0KICAgICAgICAgICAgdGhpcy5taWNyb3NlY29uZHMgPSBtICUgMTAwMDsNCiAgICAgICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIC8qDQoJKiBLZWVwIHVwIHdpdGggdGhlIHZlcnNpb24NCgkqLw0KICAgICQudGltZXBpY2tlci52ZXJzaW9uID0gIjEuNC41IjsNCg0KfSkoalF1ZXJ5KTsNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCi8qCiAqIGpRdWVyeSBNdWx0aVNlbGVjdCBVSSBXaWRnZXQgRmlsdGVyaW5nIFBsdWdpbiAxLjQKICogQ29weXJpZ2h0IChjKSAyMDExIEVyaWMgSHluZHMKICoKICogaHR0cDovL3d3dy5lcmljaHluZHMuY29tL2pxdWVyeS9qcXVlcnktdWktbXVsdGlzZWxlY3Qtd2lkZ2V0LwogKgogKiBEZXBlbmRzOgogKiAgIC0galF1ZXJ5IFVJIE11bHRpU2VsZWN0IHdpZGdldAogKgogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlczoKICogICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKiAgIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbAogKgoqLwooZnVuY3Rpb24oYSl7dmFyIGY9L1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2c7YS53aWRnZXQoImVjaC5tdWx0aXNlbGVjdGZpbHRlciIse29wdGlvbnM6e2xhYmVsOiJGaWx0ZXI6Iix3aWR0aDpudWxsLHBsYWNlaG9sZGVyOiJFbnRlciBrZXl3b3JkcyIsYXV0b1Jlc2V0OiExfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU7dmFyIGI9dGhpcyxjPXRoaXMub3B0aW9ucyxkPXRoaXMuaW5zdGFuY2U9YSh0aGlzLmVsZW1lbnQpLmRhdGEoIm11bHRpc2VsZWN0Iik7dGhpcy5oZWFkZXI9ZC5tZW51LmZpbmQoIi51aS1tdWx0aXNlbGVjdC1oZWFkZXIiKS5hZGRDbGFzcygidWktbXVsdGlzZWxlY3QtaGFzZmlsdGVyIik7ZT10aGlzLndyYXBwZXI9YSgnPGRpdiBjbGFzcz0idWktbXVsdGlzZWxlY3QtZmlsdGVyIj4nKyhjLmxhYmVsLmxlbmd0aD9jLmxhYmVsOiIiKSsnPGlucHV0IHBsYWNlaG9sZGVyPSInK2MucGxhY2Vob2xkZXIrJyIgdHlwZT0ic2VhcmNoIicrKC9cZC8udGVzdChjLndpZHRoKT8gICdzdHlsZT0id2lkdGg6JytjLndpZHRoKydweCInOiIiKSsiIC8+PFwvZGl2PiIpLnByZXBlbmRUbyh0aGlzLmhlYWRlciksYz1lO3RoaXMuaW5wdXRzPWQubWVudS5maW5kKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdLCBpbnB1dFt0eXBlPSJyYWRpbyJdJyk7dGhpcy5pbnB1dD1jLmZpbmQoImlucHV0IikuYmluZCh7a2V5ZG93bjpmdW5jdGlvbihhKXsxMz09PWEud2hpY2gmJmEucHJldmVudERlZmF1bHQoKX0sa2V5dXA6YS5wcm94eShiLl9oYW5kbGVyLGIpLGNsaWNrOmEucHJveHkoYi5faGFuZGxlcixiKX0pO3RoaXMudXBkYXRlQ2FjaGUoKTtkLl90b2dnbGVDaGVja2VkPWZ1bmN0aW9uKGMsZCl7dmFyIGU9ZCYmZC5sZW5ndGg/ZDp0aGlzLmxhYmVscy5maW5kKCJpbnB1dCIpLGk9dGhpcyxlPWUubm90KGIuaW5zdGFuY2UuX2lzT3Blbj8iOmRpc2FibGVkLCA6aGlkZGVuIjoiOmRpc2FibGVkIikuZWFjaCh0aGlzLl90b2dnbGVTdGF0ZSgiY2hlY2tlZCIsYykpO3RoaXMudXBkYXRlKCk7IHZhciBqPWUubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9KS5nZXQoKTt0aGlzLmVsZW1lbnQuZmluZCgib3B0aW9uIikuZmlsdGVyKGZ1bmN0aW9uKCl7IXRoaXMuZGlzYWJsZWQmJi0xPGEuaW5BcnJheSh0aGlzLnZhbHVlLGopJiZpLl90b2dnbGVTdGF0ZSgic2VsZWN0ZWQiLGMpLmNhbGwodGhpcyl9KX07ZD1hKGRvY3VtZW50KS5iaW5kKCJtdWx0aXNlbGVjdHJlZnJlc2giLGZ1bmN0aW9uKCl7Yi51cGRhdGVDYWNoZSgpO2IuX2hhbmRsZXIoKX0pO3RoaXMub3B0aW9ucy5hdXRvUmVzZXQmJmQuYmluZCgibXVsdGlzZWxlY3RjbG9zZSIsYS5wcm94eSh0aGlzLl9yZXNldCx0aGlzKSl9LF9oYW5kbGVyOmZ1bmN0aW9uKGIpe3ZhciBjPWEudHJpbSh0aGlzLmlucHV0WzBdLnZhbHVlLnRvTG93ZXJDYXNlKCkpLGQ9dGhpcy5yb3dzLGc9dGhpcy5pbnB1dHMsaD10aGlzLmNhY2hlO2lmKGMpe2QuaGlkZSgpO3ZhciBlPVJlZ0V4cChjLnJlcGxhY2UoZiwiXFwkJiIpLCJnaSIpOyB0aGlzLl90cmlnZ2VyKCJmaWx0ZXIiLGIsYS5tYXAoaCxmdW5jdGlvbihhLGIpe3JldHVybi0xIT09YS5zZWFyY2goZSk/KGQuZXEoYikuc2hvdygpLGcuZ2V0KGIpKTpudWxsfSkpfWVsc2UgZC5zaG93KCk7dGhpcy5pbnN0YW5jZS5tZW51LmZpbmQoIi51aS1tdWx0aXNlbGVjdC1vcHRncm91cC1sYWJlbCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGM9Yi5uZXh0VW50aWwoIi51aS1tdWx0aXNlbGVjdC1vcHRncm91cC1sYWJlbCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJub25lIiE9PWEuY3NzKHRoaXMsImRpc3BsYXkiKX0pLmxlbmd0aDtiW2M/InNob3ciOiJoaWRlIl0oKX0pfSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmlucHV0LnZhbCgiIikudHJpZ2dlcigia2V5dXAiKX0sdXBkYXRlQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLnJvd3M9dGhpcy5pbnN0YW5jZS5tZW51LmZpbmQoIi51aS1tdWx0aXNlbGVjdC1jaGVja2JveGVzIGxpOm5vdCgudWktbXVsdGlzZWxlY3Qtb3B0Z3JvdXAtbGFiZWwpIik7dGhpcy5jYWNoZT10aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5tYXAoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpOyJvcHRncm91cCI9PT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmKGI9Yi5jaGlsZHJlbigpKTtyZXR1cm4gYi5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lckhUTUwudG9Mb3dlckNhc2UoKX0pLmdldCgpfSkuZ2V0KCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZXJ9LGRlc3Ryb3k6ZnVuY3Rpb24oKXthLldpZGdldC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMuaW5wdXQudmFsKCIiKS50cmlnZ2VyKCJrZXl1cCIpO3RoaXMud3JhcHBlci5yZW1vdmUoKX19KX0pKGpRdWVyeSk7Cg0KLyogXV0+ICovDQo8L3NjcmlwdD4NCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8qIDwhW0NEQVRBWyAqLw0KLyoKICogalF1ZXJ5IE11bHRpU2VsZWN0IFVJIFdpZGdldCAxLjEzCiAqIENvcHlyaWdodCAoYykgMjAxMiBFcmljIEh5bmRzCiAqCiAqIGh0dHA6Ly93d3cuZXJpY2h5bmRzLmNvbS9qcXVlcnkvanF1ZXJ5LXVpLW11bHRpc2VsZWN0LXdpZGdldC8KICoKICogRGVwZW5kczoKICogICAtIGpRdWVyeSAxLjQuMisKICogICAtIGpRdWVyeSBVSSAxLjggd2lkZ2V0IGZhY3RvcnkKICoKICogT3B0aW9uYWw6CiAqICAgLSBqUXVlcnkgVUkgZWZmZWN0cwogKiAgIC0galF1ZXJ5IFVJIHBvc2l0aW9uIHV0aWxpdHkKICoKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXM6CiAqICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAKICogICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKICoKICovCihmdW5jdGlvbihkKXt2YXIgaz0wO2Qud2lkZ2V0KCJlY2gubXVsdGlzZWxlY3QiLHtvcHRpb25zOntoZWFkZXI6ITAsaGVpZ2h0OjE3NSxtaW5XaWR0aDoyMjUsY2xhc3NlczoiIixjaGVja0FsbFRleHQ6IkNoZWNrIGFsbCIsdW5jaGVja0FsbFRleHQ6IlVuY2hlY2sgYWxsIixub25lU2VsZWN0ZWRUZXh0OiJTZWxlY3Qgb3B0aW9ucyIsc2VsZWN0ZWRUZXh0OiIjIHNlbGVjdGVkIixzZWxlY3RlZExpc3Q6MCxzaG93Om51bGwsaGlkZTpudWxsLGF1dG9PcGVuOiExLG11bHRpcGxlOiEwLHBvc2l0aW9uOnt9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50LmhpZGUoKSxiPXRoaXMub3B0aW9uczt0aGlzLnNwZWVkPWQuZnguc3BlZWRzLl9kZWZhdWx0O3RoaXMuX2lzT3Blbj0hMTthPSh0aGlzLmJ1dHRvbj1kKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi10cmlhbmdsZS0yLW4tcyI+PFwvc3Bhbj48XC9idXR0b24+JykpLmFkZENsYXNzKCJ1aS1tdWx0aXNlbGVjdCB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIikuYWRkQ2xhc3MoYi5jbGFzc2VzKS5hdHRyKHt0aXRsZTphLmF0dHIoInRpdGxlIiksImFyaWEtaGFzcG9wdXAiOiEwLHRhYkluZGV4OmEuYXR0cigidGFiSW5kZXgiKX0pLmluc2VydEFmdGVyKGEpOyh0aGlzLmJ1dHRvbmxhYmVsPWQoIjxzcGFuIC8+IikpLmh0bWwoYi5ub25lU2VsZWN0ZWRUZXh0KS5hcHBlbmRUbyhhKTt2YXIgYT0odGhpcy5tZW51PWQoIjxkaXYgLz4iKSkuYWRkQ2xhc3MoInVpLW11bHRpc2VsZWN0LW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5hZGRDbGFzcyhiLmNsYXNzZXMpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLGM9KHRoaXMuaGVhZGVyPWQoIjxkaXYgLz4iKSkuYWRkQ2xhc3MoInVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCB1aS1tdWx0aXNlbGVjdC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IikuYXBwZW5kVG8oYSk7KHRoaXMuaGVhZGVyTGlua0NvbnRhaW5lcj1kKCI8dWwgLz4iKSkuYWRkQ2xhc3MoInVpLWhlbHBlci1yZXNldCIpLmh0bWwoZnVuY3Rpb24oKXtyZXR1cm4hMD09PWIuaGVhZGVyPyc8bGk+PGEgY2xhc3M9InVpLW11bHRpc2VsZWN0LWFsbCIgaHJlZj0iIyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaGVjayI+PFwvc3Bhbj48c3Bhbj4nK2IuY2hlY2tBbGxUZXh0Kyc8XC9zcGFuPjxcL2E+PFwvbGk+PGxpPjxhIGNsYXNzPSJ1aS1tdWx0aXNlbGVjdC1ub25lIiBocmVmPSIjIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNsb3NldGhpY2siPjxcL3NwYW4+PHNwYW4+JytiLnVuY2hlY2tBbGxUZXh0KyI8XC9zcGFuPjxcL2E+PFwvbGk+Ijoic3RyaW5nIj09PXR5cGVvZiBiLmhlYWRlcj8iPGxpPiIrYi5oZWFkZXIrIjxcL2xpPiI6IiJ9KS5hcHBlbmQoJzxsaSBjbGFzcz0idWktbXVsdGlzZWxlY3QtY2xvc2UiPjxhIGhyZWY9IiMiIGNsYXNzPSJ1aS1tdWx0aXNlbGVjdC1jbG9zZSI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtY2xvc2UiPjxcL3NwYW4+PFwvYT48XC9saT4nKS5hcHBlbmRUbyhjKTsodGhpcy5jaGVja2JveENvbnRhaW5lcj1kKCI8dWwgLz4iKSkuYWRkQ2xhc3MoInVpLW11bHRpc2VsZWN0LWNoZWNrYm94ZXMgdWktaGVscGVyLXJlc2V0IikuYXBwZW5kVG8oYSk7dGhpcy5fYmluZEV2ZW50cygpO3RoaXMucmVmcmVzaCghMCk7Yi5tdWx0aXBsZXx8YS5hZGRDbGFzcygidWktbXVsdGlzZWxlY3Qtc2luZ2xlIil9LF9pbml0OmZ1bmN0aW9uKCl7ITE9PT10aGlzLm9wdGlvbnMuaGVhZGVyJiZ0aGlzLmhlYWRlci5oaWRlKCk7dGhpcy5vcHRpb25zLm11bHRpcGxlfHx0aGlzLmhlYWRlckxpbmtDb250YWluZXIuZmluZCgiLnVpLW11bHRpc2VsZWN0LWFsbCwgLnVpLW11bHRpc2VsZWN0LW5vbmUiKS5oaWRlKCk7dGhpcy5vcHRpb25zLmF1dG9PcGVuJiZ0aGlzLm9wZW4oKTt0aGlzLmVsZW1lbnQuaXMoIjpkaXNhYmxlZCIpJiZ0aGlzLmRpc2FibGUoKX0scmVmcmVzaDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVsZW1lbnQsYz10aGlzLm9wdGlvbnMsZj10aGlzLm1lbnUsaD10aGlzLmNoZWNrYm94Q29udGFpbmVyLGc9W10sZT0iIixpPWIuYXR0cigiaWQiKXx8aysrO2IuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbihiKXtkKHRoaXMpO3ZhciBhPXRoaXMucGFyZW50Tm9kZSxmPXRoaXMuaW5uZXJIVE1MLGg9dGhpcy50aXRsZSxrPXRoaXMudmFsdWUsYj0idWktbXVsdGlzZWxlY3QtIisodGhpcy5pZHx8aSsiLW9wdGlvbi0iK2IpLGw9dGhpcy5kaXNhYmxlZCxuPXRoaXMuc2VsZWN0ZWQsbT1bInVpLWNvcm5lci1hbGwiXSxvPShsPyJ1aS1tdWx0aXNlbGVjdC1kaXNhYmxlZCAiOiIgIikrdGhpcy5jbGFzc05hbWUsajsiT1BUR1JPVVAiPT09YS50YWdOYW1lJiYoaj1hLmdldEF0dHJpYnV0ZSgibGFiZWwiKSwtMT09PWQuaW5BcnJheShqLGcpJiYoZSs9JzxsaSBjbGFzcz0idWktbXVsdGlzZWxlY3Qtb3B0Z3JvdXAtbGFiZWwgJythLmNsYXNzTmFtZSsnIj48YSBocmVmPSIjIj4nK2orIjxcL2E+PFwvbGk+IixnLnB1c2goaikpKTtsJiZtLnB1c2goInVpLXN0YXRlLWRpc2FibGVkIik7biYmIWMubXVsdGlwbGUmJm0ucHVzaCgidWktc3RhdGUtYWN0aXZlIik7ZSs9JzxsaSBjbGFzcz0iJytvKyciPic7ZSs9JzxsYWJlbCBmb3I9IicrYisnIiB0aXRsZT0iJytoKyciIGNsYXNzPSInK20uam9pbigiICIpKyciPic7ZSs9JzxpbnB1dCBpZD0iJytiKyciIG5hbWU9Im11bHRpc2VsZWN0XycraSsnIiB0eXBlPSInKyhjLm11bHRpcGxlPyJjaGVja2JveCI6InJhZGlvIikrJyIgdmFsdWU9IicraysnIiB0aXRsZT0iJytmKyciJztuJiYoZSs9JyBjaGVja2VkPSJjaGVja2VkIicsZSs9JyBhcmlhLXNlbGVjdGVkPSJ0cnVlIicpO2wmJihlKz0nIGRpc2FibGVkPSJkaXNhYmxlZCInLGUrPScgYXJpYS1kaXNhYmxlZD0idHJ1ZSInKTtlKz0iIC8+PHNwYW4+IitmKyI8XC9zcGFuPjxcL2xhYmVsPjxcL2xpPiJ9KTtoLmh0bWwoZSk7dGhpcy5sYWJlbHM9Zi5maW5kKCJsYWJlbCIpO3RoaXMuaW5wdXRzPXRoaXMubGFiZWxzLmNoaWxkcmVuKCJpbnB1dCIpO3RoaXMuX3NldEJ1dHRvbldpZHRoKCk7dGhpcy5fc2V0TWVudVdpZHRoKCk7dGhpcy5idXR0b25bMF0uZGVmYXVsdFZhbHVlPXRoaXMudXBkYXRlKCk7YXx8dGhpcy5fdHJpZ2dlcigicmVmcmVzaCIpfSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYj10aGlzLmlucHV0cyxjPWIuZmlsdGVyKCI6Y2hlY2tlZCIpLGY9Yy5sZW5ndGgsYT0wPT09Zj9hLm5vbmVTZWxlY3RlZFRleHQ6ZC5pc0Z1bmN0aW9uKGEuc2VsZWN0ZWRUZXh0KT9hLnNlbGVjdGVkVGV4dC5jYWxsKHRoaXMsZixiLmxlbmd0aCxjLmdldCgpKTovXGQvLnRlc3QoYS5zZWxlY3RlZExpc3QpJiYwPGEuc2VsZWN0ZWRMaXN0JiZmPD1hLnNlbGVjdGVkTGlzdD9jLm1hcChmdW5jdGlvbigpe3JldHVybiBkKHRoaXMpLm5leHQoKS5odG1sKCl9KS5nZXQoKS5qb2luKCIsICIpOmEuc2VsZWN0ZWRUZXh0LnJlcGxhY2UoIiMiLGYpLnJlcGxhY2UoIiMiLGIubGVuZ3RoKTt0aGlzLmJ1dHRvbmxhYmVsLmh0bWwoYSk7cmV0dXJuIGF9LF9iaW5kRXZlbnRzOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2JbYi5faXNPcGVuPyAiY2xvc2UiOiJvcGVuIl0oKTtyZXR1cm4hMX12YXIgYj10aGlzLGM9dGhpcy5idXR0b247Yy5maW5kKCJzcGFuIikuYmluZCgiY2xpY2subXVsdGlzZWxlY3QiLGEpO2MuYmluZCh7Y2xpY2s6YSxrZXlwcmVzczpmdW5jdGlvbihhKXtzd2l0Y2goYS53aGljaCl7Y2FzZSAyNzpjYXNlIDM4OmNhc2UgMzc6Yi5jbG9zZSgpO2JyZWFrO2Nhc2UgMzk6Y2FzZSA0MDpiLm9wZW4oKX19LG1vdXNlZW50ZXI6ZnVuY3Rpb24oKXtjLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHxkKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKCl7ZCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKX0sZm9jdXM6ZnVuY3Rpb24oKXtjLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHxkKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxibHVyOmZ1bmN0aW9uKCl7ZCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX19KTt0aGlzLmhlYWRlci5kZWxlZ2F0ZSgiYSIsImNsaWNrLm11bHRpc2VsZWN0IixmdW5jdGlvbihhKXtpZihkKHRoaXMpLmhhc0NsYXNzKCJ1aS1tdWx0aXNlbGVjdC1jbG9zZSIpKWIuY2xvc2UoKTtlbHNlIGJbZCh0aGlzKS5oYXNDbGFzcygidWktbXVsdGlzZWxlY3QtYWxsIik/ImNoZWNrQWxsIjoidW5jaGVja0FsbCJdKCk7YS5wcmV2ZW50RGVmYXVsdCgpfSk7dGhpcy5tZW51LmRlbGVnYXRlKCJsaS51aS1tdWx0aXNlbGVjdC1vcHRncm91cC1sYWJlbCBhIiwiY2xpY2subXVsdGlzZWxlY3QiLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKTt2YXIgYz1kKHRoaXMpLGc9Yy5wYXJlbnQoKS5uZXh0VW50aWwoImxpLnVpLW11bHRpc2VsZWN0LW9wdGdyb3VwLWxhYmVsIikuZmluZCgiaW5wdXQ6dmlzaWJsZTpub3QoOmRpc2FibGVkKSIpLGU9Zy5nZXQoKSxjPWMucGFyZW50KCkudGV4dCgpOyExIT09Yi5fdHJpZ2dlcigiYmVmb3Jlb3B0Z3JvdXB0b2dnbGUiLGEse2lucHV0czplLGxhYmVsOmN9KSYmKGIuX3RvZ2dsZUNoZWNrZWQoZy5maWx0ZXIoIjpjaGVja2VkIikubGVuZ3RoIT09Zy5sZW5ndGgsZyksYi5fdHJpZ2dlcigib3B0Z3JvdXB0b2dnbGUiLGEse2lucHV0czplLGxhYmVsOmMsY2hlY2tlZDplWzBdLmNoZWNrZWR9KSl9KS5kZWxlZ2F0ZSgibGFiZWwiLCJtb3VzZWVudGVyLm11bHRpc2VsZWN0IixmdW5jdGlvbigpe2QodGhpcykuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIil8fChiLmxhYmVscy5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSxkKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLmZpbmQoImlucHV0IikuZm9jdXMoKSl9KS5kZWxlZ2F0ZSgibGFiZWwiLCJrZXlkb3duLm11bHRpc2VsZWN0IixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCk7c3dpdGNoKGEud2hpY2gpe2Nhc2UgOTpjYXNlIDI3OmIuY2xvc2UoKTticmVhaztjYXNlIDM4OmNhc2UgNDA6Y2FzZSAzNzpjYXNlIDM5OmIuX3RyYXZlcnNlKGEud2hpY2gsdGhpcyk7YnJlYWs7Y2FzZSAxMzpkKHRoaXMpLmZpbmQoImlucHV0IilbMF0uY2xpY2soKX19KS5kZWxlZ2F0ZSgnaW5wdXRbdHlwZT0iY2hlY2tib3giXSwgaW5wdXRbdHlwZT0icmFkaW8iXScsImNsaWNrLm11bHRpc2VsZWN0IixmdW5jdGlvbihhKXt2YXIgYz1kKHRoaXMpLGc9dGhpcy52YWx1ZSxlPXRoaXMuY2hlY2tlZCxpPWIuZWxlbWVudC5maW5kKCJvcHRpb24iKTt0aGlzLmRpc2FibGVkfHwhMT09PWIuX3RyaWdnZXIoImNsaWNrIixhLHt2YWx1ZTpnLHRleHQ6dGhpcy50aXRsZSxjaGVja2VkOmV9KT9hLnByZXZlbnREZWZhdWx0KCk6KGMuZm9jdXMoKSxjLmF0dHIoImFyaWEtc2VsZWN0ZWQiLGUpLGkuZWFjaChmdW5jdGlvbigpe3RoaXMudmFsdWU9PT1nP3RoaXMuc2VsZWN0ZWQ9ZTpiLm9wdGlvbnMubXVsdGlwbGV8fCh0aGlzLnNlbGVjdGVkPSExKX0pLGIub3B0aW9ucy5tdWx0aXBsZXx8KGIubGFiZWxzLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSxjLmNsb3Nlc3QoImxhYmVsIikudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIsZSksYi5jbG9zZSgpKSxiLmVsZW1lbnQudHJpZ2dlcigiY2hhbmdlIiksc2V0VGltZW91dChkLnByb3h5KGIudXBkYXRlLGIpLDEwKSl9KTtkKGRvY3VtZW50KS5iaW5kKCJtb3VzZWRvd24ubXVsdGlzZWxlY3QiLGZ1bmN0aW9uKGEpe2IuX2lzT3BlbiYmKCFkLmNvbnRhaW5zKGIubWVudVswXSxhLnRhcmdldCkmJiFkLmNvbnRhaW5zKGIuYnV0dG9uWzBdLGEudGFyZ2V0KSYmYS50YXJnZXQhPT1iLmJ1dHRvblswXSkmJmIuY2xvc2UoKX0pO2QodGhpcy5lbGVtZW50WzBdLmZvcm0pLmJpbmQoInJlc2V0Lm11bHRpc2VsZWN0IixmdW5jdGlvbigpe3NldFRpbWVvdXQoZC5wcm94eShiLnJlZnJlc2gsYiksMTApfSl9LF9zZXRCdXR0b25XaWR0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksYj10aGlzLm9wdGlvbnM7L1xkLy50ZXN0KGIubWluV2lkdGgpJiZhPGIubWluV2lkdGgmJihhPWIubWluV2lkdGgpO3RoaXMuYnV0dG9uLndpZHRoKGEpfSxfc2V0TWVudVdpZHRoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tZW51LGI9dGhpcy5idXR0b24ub3V0ZXJXaWR0aCgpLXBhcnNlSW50KGEuY3NzKCJwYWRkaW5nLWxlZnQiKSwxMCktcGFyc2VJbnQoYS5jc3MoInBhZGRpbmctcmlnaHQiKSwxMCktcGFyc2VJbnQoYS5jc3MoImJvcmRlci1yaWdodC13aWR0aCIpLDEwKS1wYXJzZUludChhLmNzcygiYm9yZGVyLWxlZnQtd2lkdGgiKSwxMCk7YS53aWR0aChifHx0aGlzLmJ1dHRvbi5vdXRlcldpZHRoKCkpfSxfdHJhdmVyc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz1kKGIpLGY9Mzg9PT1hfHwzNz09PWEsYz1jLnBhcmVudCgpW2Y/InByZXZBbGwiOiJuZXh0QWxsIl0oImxpOm5vdCgudWktbXVsdGlzZWxlY3QtZGlzYWJsZWQsIC51aS1tdWx0aXNlbGVjdC1vcHRncm91cC1sYWJlbCkiKVtmPyJsYXN0IjoiZmlyc3QiXSgpO2MubGVuZ3RoP2MuZmluZCgibGFiZWwiKS50cmlnZ2VyKCJtb3VzZW92ZXIiKTooYz10aGlzLm1lbnUuZmluZCgidWwiKS5sYXN0KCksdGhpcy5tZW51LmZpbmQoImxhYmVsIilbZj8gImxhc3QiOiJmaXJzdCJdKCkudHJpZ2dlcigibW91c2VvdmVyIiksYy5zY3JvbGxUb3AoZj9jLmhlaWdodCgpOjApKX0sX3RvZ2dsZVN0YXRlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXNbYV09Yik7Yj90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsITApOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIil9fSxfdG9nZ2xlQ2hlY2tlZDpmdW5jdGlvbihhLGIpe3ZhciBjPWImJmIubGVuZ3RoP2I6dGhpcy5pbnB1dHMsZj10aGlzO2MuZWFjaCh0aGlzLl90b2dnbGVTdGF0ZSgiY2hlY2tlZCIsYSkpO2MuZXEoMCkuZm9jdXMoKTt0aGlzLnVwZGF0ZSgpO3ZhciBoPWMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9KS5nZXQoKTt0aGlzLmVsZW1lbnQuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpeyF0aGlzLmRpc2FibGVkJiYtMTxkLmluQXJyYXkodGhpcy52YWx1ZSxoKSYmZi5fdG9nZ2xlU3RhdGUoInNlbGVjdGVkIixhKS5jYWxsKHRoaXMpfSk7Yy5sZW5ndGgmJnRoaXMuZWxlbWVudC50cmlnZ2VyKCJjaGFuZ2UiKX0sX3RvZ2dsZURpc2FibGVkOmZ1bmN0aW9uKGEpe3RoaXMuYnV0dG9uLmF0dHIoe2Rpc2FibGVkOmEsImFyaWEtZGlzYWJsZWQiOmF9KVthPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oInVpLXN0YXRlLWRpc2FibGVkIik7dmFyIGI9dGhpcy5tZW51LmZpbmQoImlucHV0IiksYj1hP2IuZmlsdGVyKCI6ZW5hYmxlZCIpLmRhdGEoImVjaC1tdWx0aXNlbGVjdC1kaXNhYmxlZCIsITApOmIuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuITA9PT1kLmRhdGEodGhpcywiZWNoLW11bHRpc2VsZWN0LWRpc2FibGVkIil9KS5yZW1vdmVEYXRhKCJlY2gtbXVsdGlzZWxlY3QtZGlzYWJsZWQiKTtiLmF0dHIoe2Rpc2FibGVkOmEsImFyaWFsLWRpc2FibGVkIjphfSkucGFyZW50KClbYT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpO3RoaXMuZWxlbWVudC5hdHRyKHtkaXNhYmxlZDphLCJhcmlhLWRpc2FibGVkIjphfSl9LG9wZW46ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ1dHRvbixiPXRoaXMubWVudSxjPXRoaXMuc3BlZWQsZj10aGlzLm9wdGlvbnMsaD1bXTtpZighKCExPT09dGhpcy5fdHJpZ2dlcigiYmVmb3Jlb3BlbiIpfHxhLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHx0aGlzLl9pc09wZW4pKXt2YXIgZz1iLmZpbmQoInVsIikubGFzdCgpLGU9Zi5zaG93LGk9YS5vZmZzZXQoKTtkLmlzQXJyYXkoZi5zaG93KSYmKGU9Zi5zaG93WzBdLGM9Zi5zaG93WzFdfHx0aGlzLnNwZWVkKTtlJiYoaD1bZSxjXSk7Zy5zY3JvbGxUb3AoMCkuaGVpZ2h0KGYuaGVpZ2h0KTtkLnVpLnBvc2l0aW9uJiYhZC5pc0VtcHR5T2JqZWN0KGYucG9zaXRpb24pPyhmLnBvc2l0aW9uLm9mPWYucG9zaXRpb24ub2Z8fGEsYi5zaG93KCkucG9zaXRpb24oZi5wb3NpdGlvbikuaGlkZSgpKTpiLmNzcyh7dG9wOmkudG9wK2Eub3V0ZXJIZWlnaHQoKSxsZWZ0OmkubGVmdH0pO2QuZm4uc2hvdy5hcHBseShiLGgpO3RoaXMubGFiZWxzLmVxKDApLnRyaWdnZXIoIm1vdXNlb3ZlciIpLnRyaWdnZXIoIm1vdXNlZW50ZXIiKS5maW5kKCJpbnB1dCIpLnRyaWdnZXIoImZvY3VzIik7YS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIik7dGhpcy5faXNPcGVuPSEwO3RoaXMuX3RyaWdnZXIoIm9wZW4iKX19LGNsb3NlOmZ1bmN0aW9uKCl7aWYoITEhPT10aGlzLl90cmlnZ2VyKCJiZWZvcmVjbG9zZSIpKXt2YXIgYT10aGlzLm9wdGlvbnMsYj1hLmhpZGUsYz10aGlzLnNwZWVkLGY9W107ZC5pc0FycmF5KGEuaGlkZSkmJihiPWEuaGlkZVswXSxjPWEuaGlkZVsxXXx8dGhpcy5zcGVlZCk7YiYmKGY9W2IsY10pO2QuZm4uaGlkZS5hcHBseSh0aGlzLm1lbnUsZik7dGhpcy5idXR0b24ucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLnRyaWdnZXIoImJsdXIiKS50cmlnZ2VyKCJtb3VzZWxlYXZlIik7dGhpcy5faXNPcGVuPSExO3RoaXMuX3RyaWdnZXIoImNsb3NlIil9fSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl90b2dnbGVEaXNhYmxlZCghMSl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLl90b2dnbGVEaXNhYmxlZCghMCl9LGNoZWNrQWxsOmZ1bmN0aW9uKCl7dGhpcy5fdG9nZ2xlQ2hlY2tlZCghMCk7dGhpcy5fdHJpZ2dlcigiY2hlY2tBbGwiKX0sdW5jaGVja0FsbDpmdW5jdGlvbigpe3RoaXMuX3RvZ2dsZUNoZWNrZWQoITEpO3RoaXMuX3RyaWdnZXIoInVuY2hlY2tBbGwiKX0sZ2V0Q2hlY2tlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnUuZmluZCgiaW5wdXQiKS5maWx0ZXIoIjpjaGVja2VkIil9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtkLldpZGdldC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMuYnV0dG9uLnJlbW92ZSgpO3RoaXMubWVudS5yZW1vdmUoKTt0aGlzLmVsZW1lbnQuc2hvdygpO3JldHVybiB0aGlzfSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNPcGVufSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51fSxnZXRCdXR0b246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idXR0b259LF9zZXRPcHRpb246ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLm1lbnU7c3dpdGNoKGEpe2Nhc2UgImhlYWRlciI6Yy5maW5kKCJkaXYudWktbXVsdGlzZWxlY3QtaGVhZGVyIilbYj8ic2hvdyI6ImhpZGUiXSgpO2JyZWFrO2Nhc2UgImNoZWNrQWxsVGV4dCI6Yy5maW5kKCJhLnVpLW11bHRpc2VsZWN0LWFsbCBzcGFuIikuZXEoLTEpLnRleHQoYik7YnJlYWs7Y2FzZSAidW5jaGVja0FsbFRleHQiOmMuZmluZCgiYS51aS1tdWx0aXNlbGVjdC1ub25lIHNwYW4iKS5lcSgtMSkudGV4dChiKTticmVhaztjYXNlICJoZWlnaHQiOmMuZmluZCgidWwiKS5sYXN0KCkuaGVpZ2h0KHBhcnNlSW50KGIsMTApKTticmVhaztjYXNlICJtaW5XaWR0aCI6dGhpcy5vcHRpb25zW2FdPXBhcnNlSW50KGIsMTApO3RoaXMuX3NldEJ1dHRvbldpZHRoKCk7dGhpcy5fc2V0TWVudVdpZHRoKCk7YnJlYWs7Y2FzZSAic2VsZWN0ZWRUZXh0IjpjYXNlICJzZWxlY3RlZExpc3QiOmNhc2UgIm5vbmVTZWxlY3RlZFRleHQiOnRoaXMub3B0aW9uc1thXT1iO3RoaXMudXBkYXRlKCk7YnJlYWs7Y2FzZSAiY2xhc3NlcyI6Yy5hZGQodGhpcy5idXR0b24pLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5jbGFzc2VzKS5hZGRDbGFzcyhiKTticmVhaztjYXNlICJtdWx0aXBsZSI6Yy50b2dnbGVDbGFzcygidWktbXVsdGlzZWxlY3Qtc2luZ2xlIiwhYiksdGhpcy5vcHRpb25zLm11bHRpcGxlPWIsdGhpcy5lbGVtZW50WzBdLm11bHRpcGxlPWIsdGhpcy5yZWZyZXNoKCl9ZC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSkoalF1ZXJ5KTsKDQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovKiEgalF1ZXJ5IFZhbGlkYXRpb24gUGx1Z2luIC0gdjEuMTMuMCAtIDcvMS8yMDE0DQogKiBodHRwOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvDQogKiBDb3B5cmlnaHQgKGMpIDIwMTQgSkF+wrZybiBaYWVmZmVyZXI7IExpY2Vuc2VkIE1JVCAqLw0KIWZ1bmN0aW9uIChhKSB7ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsianF1ZXJ5Il0sIGEpIDogYShqUXVlcnkpIH0oZnVuY3Rpb24gKGEpIHsgYS5leHRlbmQoYS5mbiwgeyB2YWxpZGF0ZTogZnVuY3Rpb24gKGIpIHsgaWYgKCF0aGlzLmxlbmd0aCkgcmV0dXJuIHZvaWQgKGIgJiYgYi5kZWJ1ZyAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4oIk5vdGhpbmcgc2VsZWN0ZWQsIGNhbid0IHZhbGlkYXRlLCByZXR1cm5pbmcgbm90aGluZy4iKSk7IHZhciBjID0gYS5kYXRhKHRoaXNbMF0sICJ2YWxpZGF0b3IiKTsgcmV0dXJuIGMgPyBjIDogKHRoaXMuYXR0cigibm92YWxpZGF0ZSIsICJub3ZhbGlkYXRlIiksIGMgPSBuZXcgYS52YWxpZGF0b3IoYiwgdGhpc1swXSksIGEuZGF0YSh0aGlzWzBdLCAidmFsaWRhdG9yIiwgYyksIGMuc2V0dGluZ3Mub25zdWJtaXQgJiYgKHRoaXMudmFsaWRhdGVEZWxlZ2F0ZSgiOnN1Ym1pdCIsICJjbGljayIsIGZ1bmN0aW9uIChiKSB7IGMuc2V0dGluZ3Muc3VibWl0SGFuZGxlciAmJiAoYy5zdWJtaXRCdXR0b24gPSBiLnRhcmdldCksIGEoYi50YXJnZXQpLmhhc0NsYXNzKCJjYW5jZWwiKSAmJiAoYy5jYW5jZWxTdWJtaXQgPSAhMCksIHZvaWQgMCAhPT0gYShiLnRhcmdldCkuYXR0cigiZm9ybW5vdmFsaWRhdGUiKSAmJiAoYy5jYW5jZWxTdWJtaXQgPSAhMCkgfSksIHRoaXMuc3VibWl0KGZ1bmN0aW9uIChiKSB7IGZ1bmN0aW9uIGQoKSB7IHZhciBkOyByZXR1cm4gYy5zZXR0aW5ncy5zdWJtaXRIYW5kbGVyID8gKGMuc3VibWl0QnV0dG9uICYmIChkID0gYSgiPGlucHV0IHR5cGU9J2hpZGRlbicvPiIpLmF0dHIoIm5hbWUiLCBjLnN1Ym1pdEJ1dHRvbi5uYW1lKS52YWwoYShjLnN1Ym1pdEJ1dHRvbikudmFsKCkpLmFwcGVuZFRvKGMuY3VycmVudEZvcm0pKSwgYy5zZXR0aW5ncy5zdWJtaXRIYW5kbGVyLmNhbGwoYywgYy5jdXJyZW50Rm9ybSwgYiksIGMuc3VibWl0QnV0dG9uICYmIGQucmVtb3ZlKCksICExKSA6ICEwIH0gcmV0dXJuIGMuc2V0dGluZ3MuZGVidWcgJiYgYi5wcmV2ZW50RGVmYXVsdCgpLCBjLmNhbmNlbFN1Ym1pdCA/IChjLmNhbmNlbFN1Ym1pdCA9ICExLCBkKCkpIDogYy5mb3JtKCkgPyBjLnBlbmRpbmdSZXF1ZXN0ID8gKGMuZm9ybVN1Ym1pdHRlZCA9ICEwLCAhMSkgOiBkKCkgOiAoYy5mb2N1c0ludmFsaWQoKSwgITEpIH0pKSwgYykgfSwgdmFsaWQ6IGZ1bmN0aW9uICgpIHsgdmFyIGIsIGM7IHJldHVybiBhKHRoaXNbMF0pLmlzKCJmb3JtIikgPyBiID0gdGhpcy52YWxpZGF0ZSgpLmZvcm0oKSA6IChiID0gITAsIGMgPSBhKHRoaXNbMF0uZm9ybSkudmFsaWRhdGUoKSwgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgYiA9IGMuZWxlbWVudCh0aGlzKSAmJiBiIH0pKSwgYiB9LCByZW1vdmVBdHRyczogZnVuY3Rpb24gKGIpIHsgdmFyIGMgPSB7fSwgZCA9IHRoaXM7IHJldHVybiBhLmVhY2goYi5zcGxpdCgvXHMvKSwgZnVuY3Rpb24gKGEsIGIpIHsgY1tiXSA9IGQuYXR0cihiKSwgZC5yZW1vdmVBdHRyKGIpIH0pLCBjIH0sIHJ1bGVzOiBmdW5jdGlvbiAoYiwgYykgeyB2YXIgZCwgZSwgZiwgZywgaCwgaSwgaiA9IHRoaXNbMF07IGlmIChiKSBzd2l0Y2ggKGQgPSBhLmRhdGEoai5mb3JtLCAidmFsaWRhdG9yIikuc2V0dGluZ3MsIGUgPSBkLnJ1bGVzLCBmID0gYS52YWxpZGF0b3Iuc3RhdGljUnVsZXMoaiksIGIpIHsgY2FzZSAiYWRkIjogYS5leHRlbmQoZiwgYS52YWxpZGF0b3Iubm9ybWFsaXplUnVsZShjKSksIGRlbGV0ZSBmLm1lc3NhZ2VzLCBlW2oubmFtZV0gPSBmLCBjLm1lc3NhZ2VzICYmIChkLm1lc3NhZ2VzW2oubmFtZV0gPSBhLmV4dGVuZChkLm1lc3NhZ2VzW2oubmFtZV0sIGMubWVzc2FnZXMpKTsgYnJlYWs7IGNhc2UgInJlbW92ZSI6IHJldHVybiBjID8gKGkgPSB7fSwgYS5lYWNoKGMuc3BsaXQoL1xzLyksIGZ1bmN0aW9uIChiLCBjKSB7IGlbY10gPSBmW2NdLCBkZWxldGUgZltjXSwgInJlcXVpcmVkIiA9PT0gYyAmJiBhKGopLnJlbW92ZUF0dHIoImFyaWEtcmVxdWlyZWQiKSB9KSwgaSkgOiAoZGVsZXRlIGVbai5uYW1lXSwgZikgfSByZXR1cm4gZyA9IGEudmFsaWRhdG9yLm5vcm1hbGl6ZVJ1bGVzKGEuZXh0ZW5kKHt9LCBhLnZhbGlkYXRvci5jbGFzc1J1bGVzKGopLCBhLnZhbGlkYXRvci5hdHRyaWJ1dGVSdWxlcyhqKSwgYS52YWxpZGF0b3IuZGF0YVJ1bGVzKGopLCBhLnZhbGlkYXRvci5zdGF0aWNSdWxlcyhqKSksIGopLCBnLnJlcXVpcmVkICYmIChoID0gZy5yZXF1aXJlZCwgZGVsZXRlIGcucmVxdWlyZWQsIGcgPSBhLmV4dGVuZCh7IHJlcXVpcmVkOiBoIH0sIGcpLCBhKGopLmF0dHIoImFyaWEtcmVxdWlyZWQiLCAidHJ1ZSIpKSwgZy5yZW1vdGUgJiYgKGggPSBnLnJlbW90ZSwgZGVsZXRlIGcucmVtb3RlLCBnID0gYS5leHRlbmQoZywgeyByZW1vdGU6IGggfSkpLCBnIH0gfSksIGEuZXh0ZW5kKGEuZXhwclsiOiJdLCB7IGJsYW5rOiBmdW5jdGlvbiAoYikgeyByZXR1cm4gIWEudHJpbSgiIiArIGEoYikudmFsKCkpIH0sIGZpbGxlZDogZnVuY3Rpb24gKGIpIHsgcmV0dXJuICEhYS50cmltKCIiICsgYShiKS52YWwoKSkgfSwgdW5jaGVja2VkOiBmdW5jdGlvbiAoYikgeyByZXR1cm4gIWEoYikucHJvcCgiY2hlY2tlZCIpIH0gfSksIGEudmFsaWRhdG9yID0gZnVuY3Rpb24gKGIsIGMpIHsgdGhpcy5zZXR0aW5ncyA9IGEuZXh0ZW5kKCEwLCB7fSwgYS52YWxpZGF0b3IuZGVmYXVsdHMsIGIpLCB0aGlzLmN1cnJlbnRGb3JtID0gYywgdGhpcy5pbml0KCkgfSwgYS52YWxpZGF0b3IuZm9ybWF0ID0gZnVuY3Rpb24gKGIsIGMpIHsgcmV0dXJuIDEgPT09IGFyZ3VtZW50cy5sZW5ndGggPyBmdW5jdGlvbiAoKSB7IHZhciBjID0gYS5tYWtlQXJyYXkoYXJndW1lbnRzKTsgcmV0dXJuIGMudW5zaGlmdChiKSwgYS52YWxpZGF0b3IuZm9ybWF0LmFwcGx5KHRoaXMsIGMpIH0gOiAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYy5jb25zdHJ1Y3RvciAhPT0gQXJyYXkgJiYgKGMgPSBhLm1ha2VBcnJheShhcmd1bWVudHMpLnNsaWNlKDEpKSwgYy5jb25zdHJ1Y3RvciAhPT0gQXJyYXkgJiYgKGMgPSBbY10pLCBhLmVhY2goYywgZnVuY3Rpb24gKGEsIGMpIHsgYiA9IGIucmVwbGFjZShuZXcgUmVnRXhwKCJcXHsiICsgYSArICJcXH0iLCAiZyIpLCBmdW5jdGlvbiAoKSB7IHJldHVybiBjIH0pIH0pLCBiKSB9LCBhLmV4dGVuZChhLnZhbGlkYXRvciwgeyBkZWZhdWx0czogeyBtZXNzYWdlczoge30sIGdyb3Vwczoge30sIHJ1bGVzOiB7fSwgZXJyb3JDbGFzczogImVycm9yIiwgdmFsaWRDbGFzczogInZhbGlkIiwgZXJyb3JFbGVtZW50OiAibGFiZWwiLCBmb2N1c0ludmFsaWQ6ICEwLCBlcnJvckNvbnRhaW5lcjogYShbXSksIGVycm9yTGFiZWxDb250YWluZXI6IGEoW10pLCBvbnN1Ym1pdDogITAsIGlnbm9yZTogIjpoaWRkZW4iLCBpZ25vcmVUaXRsZTogITEsIG9uZm9jdXNpbjogZnVuY3Rpb24gKGEpIHsgdGhpcy5sYXN0QWN0aXZlID0gYSwgdGhpcy5zZXR0aW5ncy5mb2N1c0NsZWFudXAgJiYgIXRoaXMuYmxvY2tGb2N1c0NsZWFudXAgJiYgKHRoaXMuc2V0dGluZ3MudW5oaWdobGlnaHQgJiYgdGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodC5jYWxsKHRoaXMsIGEsIHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcywgdGhpcy5zZXR0aW5ncy52YWxpZENsYXNzKSwgdGhpcy5oaWRlVGhlc2UodGhpcy5lcnJvcnNGb3IoYSkpKSB9LCBvbmZvY3Vzb3V0OiBmdW5jdGlvbiAoYSkgeyB0aGlzLmNoZWNrYWJsZShhKSB8fCAhKGEubmFtZSBpbiB0aGlzLnN1Ym1pdHRlZCkgJiYgdGhpcy5vcHRpb25hbChhKSB8fCB0aGlzLmVsZW1lbnQoYSkgfSwgb25rZXl1cDogZnVuY3Rpb24gKGEsIGIpIHsgKDkgIT09IGIud2hpY2ggfHwgIiIgIT09IHRoaXMuZWxlbWVudFZhbHVlKGEpKSAmJiAoYS5uYW1lIGluIHRoaXMuc3VibWl0dGVkIHx8IGEgPT09IHRoaXMubGFzdEVsZW1lbnQpICYmIHRoaXMuZWxlbWVudChhKSB9LCBvbmNsaWNrOiBmdW5jdGlvbiAoYSkgeyBhLm5hbWUgaW4gdGhpcy5zdWJtaXR0ZWQgPyB0aGlzLmVsZW1lbnQoYSkgOiBhLnBhcmVudE5vZGUubmFtZSBpbiB0aGlzLnN1Ym1pdHRlZCAmJiB0aGlzLmVsZW1lbnQoYS5wYXJlbnROb2RlKSB9LCBoaWdobGlnaHQ6IGZ1bmN0aW9uIChiLCBjLCBkKSB7ICJyYWRpbyIgPT09IGIudHlwZSA/IHRoaXMuZmluZEJ5TmFtZShiLm5hbWUpLmFkZENsYXNzKGMpLnJlbW92ZUNsYXNzKGQpIDogYShiKS5hZGRDbGFzcyhjKS5yZW1vdmVDbGFzcyhkKSB9LCB1bmhpZ2hsaWdodDogZnVuY3Rpb24gKGIsIGMsIGQpIHsgInJhZGlvIiA9PT0gYi50eXBlID8gdGhpcy5maW5kQnlOYW1lKGIubmFtZSkucmVtb3ZlQ2xhc3MoYykuYWRkQ2xhc3MoZCkgOiBhKGIpLnJlbW92ZUNsYXNzKGMpLmFkZENsYXNzKGQpIH0gfSwgc2V0RGVmYXVsdHM6IGZ1bmN0aW9uIChiKSB7IGEuZXh0ZW5kKGEudmFsaWRhdG9yLmRlZmF1bHRzLCBiKSB9LCBtZXNzYWdlczogeyByZXF1aXJlZDogIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIiwgcmVtb3RlOiAiUGxlYXNlIGZpeCB0aGlzIGZpZWxkLiIsIGVtYWlsOiAiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iLCB1cmw6ICJQbGVhc2UgZW50ZXIgYSB2YWxpZCBVUkwuIiwgZGF0ZTogIlBsZWFzZSBlbnRlciBhIHZhbGlkIGRhdGUuIiwgZGF0ZUlTTzogIlBsZWFzZSBlbnRlciBhIHZhbGlkIGRhdGUgKCBJU08gKS4iLCBudW1iZXI6ICJQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXIuIiwgZGlnaXRzOiAiUGxlYXNlIGVudGVyIG9ubHkgZGlnaXRzLiIsIGNyZWRpdGNhcmQ6ICJQbGVhc2UgZW50ZXIgYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIiwgZXF1YWxUbzogIlBsZWFzZSBlbnRlciB0aGUgc2FtZSB2YWx1ZSBhZ2Fpbi4iLCBtYXhsZW5ndGg6IGEudmFsaWRhdG9yLmZvcm1hdCgiUGxlYXNlIGVudGVyIG5vIG1vcmUgdGhhbiB7MH0gY2hhcmFjdGVycy4iKSwgbWlubGVuZ3RoOiBhLnZhbGlkYXRvci5mb3JtYXQoIlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gY2hhcmFjdGVycy4iKSwgcmFuZ2VsZW5ndGg6IGEudmFsaWRhdG9yLmZvcm1hdCgiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfSBjaGFyYWN0ZXJzIGxvbmcuIiksIHJhbmdlOiBhLnZhbGlkYXRvci5mb3JtYXQoIlBsZWFzZSBlbnRlciBhIHZhbHVlIGJldHdlZW4gezB9IGFuZCB7MX0uIiksIG1heDogYS52YWxpZGF0b3IuZm9ybWF0KCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gezB9LiIpLCBtaW46IGEudmFsaWRhdG9yLmZvcm1hdCgiUGxlYXNlIGVudGVyIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHswfS4iKSB9LCBhdXRvQ3JlYXRlUmFuZ2VzOiAhMSwgcHJvdG90eXBlOiB7IGluaXQ6IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gYihiKSB7IHZhciBjID0gYS5kYXRhKHRoaXNbMF0uZm9ybSwgInZhbGlkYXRvciIpLCBkID0gIm9uIiArIGIudHlwZS5yZXBsYWNlKC9edmFsaWRhdGUvLCAiIiksIGUgPSBjLnNldHRpbmdzOyBlW2RdICYmICF0aGlzLmlzKGUuaWdub3JlKSAmJiBlW2RdLmNhbGwoYywgdGhpc1swXSwgYikgfSB0aGlzLmxhYmVsQ29udGFpbmVyID0gYSh0aGlzLnNldHRpbmdzLmVycm9yTGFiZWxDb250YWluZXIpLCB0aGlzLmVycm9yQ29udGV4dCA9IHRoaXMubGFiZWxDb250YWluZXIubGVuZ3RoICYmIHRoaXMubGFiZWxDb250YWluZXIgfHwgYSh0aGlzLmN1cnJlbnRGb3JtKSwgdGhpcy5jb250YWluZXJzID0gYSh0aGlzLnNldHRpbmdzLmVycm9yQ29udGFpbmVyKS5hZGQodGhpcy5zZXR0aW5ncy5lcnJvckxhYmVsQ29udGFpbmVyKSwgdGhpcy5zdWJtaXR0ZWQgPSB7fSwgdGhpcy52YWx1ZUNhY2hlID0ge30sIHRoaXMucGVuZGluZ1JlcXVlc3QgPSAwLCB0aGlzLnBlbmRpbmcgPSB7fSwgdGhpcy5pbnZhbGlkID0ge30sIHRoaXMucmVzZXQoKTsgdmFyIGMsIGQgPSB0aGlzLmdyb3VwcyA9IHt9OyBhLmVhY2godGhpcy5zZXR0aW5ncy5ncm91cHMsIGZ1bmN0aW9uIChiLCBjKSB7ICJzdHJpbmciID09IHR5cGVvZiBjICYmIChjID0gYy5zcGxpdCgvXHMvKSksIGEuZWFjaChjLCBmdW5jdGlvbiAoYSwgYykgeyBkW2NdID0gYiB9KSB9KSwgYyA9IHRoaXMuc2V0dGluZ3MucnVsZXMsIGEuZWFjaChjLCBmdW5jdGlvbiAoYiwgZCkgeyBjW2JdID0gYS52YWxpZGF0b3Iubm9ybWFsaXplUnVsZShkKSB9KSwgYSh0aGlzLmN1cnJlbnRGb3JtKS52YWxpZGF0ZURlbGVnYXRlKCI6dGV4dCwgW3R5cGU9J3Bhc3N3b3JkJ10sIFt0eXBlPSdmaWxlJ10sIHNlbGVjdCwgdGV4dGFyZWEsIFt0eXBlPSdudW1iZXInXSwgW3R5cGU9J3NlYXJjaCddICxbdHlwZT0ndGVsJ10sIFt0eXBlPSd1cmwnXSwgW3R5cGU9J2VtYWlsJ10sIFt0eXBlPSdkYXRldGltZSddLCBbdHlwZT0nZGF0ZSddLCBbdHlwZT0nbW9udGgnXSwgW3R5cGU9J3dlZWsnXSwgW3R5cGU9J3RpbWUnXSwgW3R5cGU9J2RhdGV0aW1lLWxvY2FsJ10sIFt0eXBlPSdyYW5nZSddLCBbdHlwZT0nY29sb3InXSwgW3R5cGU9J3JhZGlvJ10sIFt0eXBlPSdjaGVja2JveCddIiwgImZvY3VzaW4gZm9jdXNvdXQga2V5dXAiLCBiKS52YWxpZGF0ZURlbGVnYXRlKCJzZWxlY3QsIG9wdGlvbiwgW3R5cGU9J3JhZGlvJ10sIFt0eXBlPSdjaGVja2JveCddIiwgImNsaWNrIiwgYiksIHRoaXMuc2V0dGluZ3MuaW52YWxpZEhhbmRsZXIgJiYgYSh0aGlzLmN1cnJlbnRGb3JtKS5iaW5kKCJpbnZhbGlkLWZvcm0udmFsaWRhdGUiLCB0aGlzLnNldHRpbmdzLmludmFsaWRIYW5kbGVyKSwgYSh0aGlzLmN1cnJlbnRGb3JtKS5maW5kKCJbcmVxdWlyZWRdLCBbZGF0YS1ydWxlLXJlcXVpcmVkXSwgLnJlcXVpcmVkIikuYXR0cigiYXJpYS1yZXF1aXJlZCIsICJ0cnVlIikgfSwgZm9ybTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaGVja0Zvcm0oKSwgYS5leHRlbmQodGhpcy5zdWJtaXR0ZWQsIHRoaXMuZXJyb3JNYXApLCB0aGlzLmludmFsaWQgPSBhLmV4dGVuZCh7fSwgdGhpcy5lcnJvck1hcCksIHRoaXMudmFsaWQoKSB8fCBhKHRoaXMuY3VycmVudEZvcm0pLnRyaWdnZXJIYW5kbGVyKCJpbnZhbGlkLWZvcm0iLCBbdGhpc10pLCB0aGlzLnNob3dFcnJvcnMoKSwgdGhpcy52YWxpZCgpIH0sIGNoZWNrRm9ybTogZnVuY3Rpb24gKCkgeyB0aGlzLnByZXBhcmVGb3JtKCk7IGZvciAodmFyIGEgPSAwLCBiID0gdGhpcy5jdXJyZW50RWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzKCkgOyBiW2FdOyBhKyspIHRoaXMuY2hlY2soYlthXSk7IHJldHVybiB0aGlzLnZhbGlkKCkgfSwgZWxlbWVudDogZnVuY3Rpb24gKGIpIHsgdmFyIGMgPSB0aGlzLmNsZWFuKGIpLCBkID0gdGhpcy52YWxpZGF0aW9uVGFyZ2V0Rm9yKGMpLCBlID0gITA7IHJldHVybiB0aGlzLmxhc3RFbGVtZW50ID0gZCwgdm9pZCAwID09PSBkID8gZGVsZXRlIHRoaXMuaW52YWxpZFtjLm5hbWVdIDogKHRoaXMucHJlcGFyZUVsZW1lbnQoZCksIHRoaXMuY3VycmVudEVsZW1lbnRzID0gYShkKSwgZSA9IHRoaXMuY2hlY2soZCkgIT09ICExLCBlID8gZGVsZXRlIHRoaXMuaW52YWxpZFtkLm5hbWVdIDogdGhpcy5pbnZhbGlkW2QubmFtZV0gPSAhMCksIGEoYikuYXR0cigiYXJpYS1pbnZhbGlkIiwgIWUpLCB0aGlzLm51bWJlck9mSW52YWxpZHMoKSB8fCAodGhpcy50b0hpZGUgPSB0aGlzLnRvSGlkZS5hZGQodGhpcy5jb250YWluZXJzKSksIHRoaXMuc2hvd0Vycm9ycygpLCBlIH0sIHNob3dFcnJvcnM6IGZ1bmN0aW9uIChiKSB7IGlmIChiKSB7IGEuZXh0ZW5kKHRoaXMuZXJyb3JNYXAsIGIpLCB0aGlzLmVycm9yTGlzdCA9IFtdOyBmb3IgKHZhciBjIGluIGIpIHRoaXMuZXJyb3JMaXN0LnB1c2goeyBtZXNzYWdlOiBiW2NdLCBlbGVtZW50OiB0aGlzLmZpbmRCeU5hbWUoYylbMF0gfSk7IHRoaXMuc3VjY2Vzc0xpc3QgPSBhLmdyZXAodGhpcy5zdWNjZXNzTGlzdCwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuICEoYS5uYW1lIGluIGIpIH0pIH0gdGhpcy5zZXR0aW5ncy5zaG93RXJyb3JzID8gdGhpcy5zZXR0aW5ncy5zaG93RXJyb3JzLmNhbGwodGhpcywgdGhpcy5lcnJvck1hcCwgdGhpcy5lcnJvckxpc3QpIDogdGhpcy5kZWZhdWx0U2hvd0Vycm9ycygpIH0sIHJlc2V0Rm9ybTogZnVuY3Rpb24gKCkgeyBhLmZuLnJlc2V0Rm9ybSAmJiBhKHRoaXMuY3VycmVudEZvcm0pLnJlc2V0Rm9ybSgpLCB0aGlzLnN1Ym1pdHRlZCA9IHt9LCB0aGlzLmxhc3RFbGVtZW50ID0gbnVsbCwgdGhpcy5wcmVwYXJlRm9ybSgpLCB0aGlzLmhpZGVFcnJvcnMoKSwgdGhpcy5lbGVtZW50cygpLnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcykucmVtb3ZlRGF0YSgicHJldmlvdXNWYWx1ZSIpLnJlbW92ZUF0dHIoImFyaWEtaW52YWxpZCIpIH0sIG51bWJlck9mSW52YWxpZHM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMub2JqZWN0TGVuZ3RoKHRoaXMuaW52YWxpZCkgfSwgb2JqZWN0TGVuZ3RoOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9IDA7IGZvciAoYiBpbiBhKSBjKys7IHJldHVybiBjIH0sIGhpZGVFcnJvcnM6IGZ1bmN0aW9uICgpIHsgdGhpcy5oaWRlVGhlc2UodGhpcy50b0hpZGUpIH0sIGhpZGVUaGVzZTogZnVuY3Rpb24gKGEpIHsgYS5ub3QodGhpcy5jb250YWluZXJzKS50ZXh0KCIiKSwgdGhpcy5hZGRXcmFwcGVyKGEpLmhpZGUoKSB9LCB2YWxpZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gMCA9PT0gdGhpcy5zaXplKCkgfSwgc2l6ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lcnJvckxpc3QubGVuZ3RoIH0sIGZvY3VzSW52YWxpZDogZnVuY3Rpb24gKCkgeyBpZiAodGhpcy5zZXR0aW5ncy5mb2N1c0ludmFsaWQpIHRyeSB7IGEodGhpcy5maW5kTGFzdEFjdGl2ZSgpIHx8IHRoaXMuZXJyb3JMaXN0Lmxlbmd0aCAmJiB0aGlzLmVycm9yTGlzdFswXS5lbGVtZW50IHx8IFtdKS5maWx0ZXIoIjp2aXNpYmxlIikuZm9jdXMoKS50cmlnZ2VyKCJmb2N1c2luIikgfSBjYXRjaCAoYikgeyB9IH0sIGZpbmRMYXN0QWN0aXZlOiBmdW5jdGlvbiAoKSB7IHZhciBiID0gdGhpcy5sYXN0QWN0aXZlOyByZXR1cm4gYiAmJiAxID09PSBhLmdyZXAodGhpcy5lcnJvckxpc3QsIGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmVsZW1lbnQubmFtZSA9PT0gYi5uYW1lIH0pLmxlbmd0aCAmJiBiIH0sIGVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7IHZhciBiID0gdGhpcywgYyA9IHt9OyByZXR1cm4gYSh0aGlzLmN1cnJlbnRGb3JtKS5maW5kKCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLm5vdCgiOnN1Ym1pdCwgOnJlc2V0LCA6aW1hZ2UsIFtkaXNhYmxlZF0iKS5ub3QodGhpcy5zZXR0aW5ncy5pZ25vcmUpLmZpbHRlcihmdW5jdGlvbiAoKSB7IHJldHVybiAhdGhpcy5uYW1lICYmIGIuc2V0dGluZ3MuZGVidWcgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvcigiJW8gaGFzIG5vIG5hbWUgYXNzaWduZWQiLCB0aGlzKSwgdGhpcy5uYW1lIGluIGMgfHwgIWIub2JqZWN0TGVuZ3RoKGEodGhpcykucnVsZXMoKSkgPyAhMSA6IChjW3RoaXMubmFtZV0gPSAhMCwgITApIH0pIH0sIGNsZWFuOiBmdW5jdGlvbiAoYikgeyByZXR1cm4gYShiKVswXSB9LCBlcnJvcnM6IGZ1bmN0aW9uICgpIHsgdmFyIGIgPSB0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3Muc3BsaXQoIiAiKS5qb2luKCIuIik7IHJldHVybiBhKHRoaXMuc2V0dGluZ3MuZXJyb3JFbGVtZW50ICsgIi4iICsgYiwgdGhpcy5lcnJvckNvbnRleHQpIH0sIHJlc2V0OiBmdW5jdGlvbiAoKSB7IHRoaXMuc3VjY2Vzc0xpc3QgPSBbXSwgdGhpcy5lcnJvckxpc3QgPSBbXSwgdGhpcy5lcnJvck1hcCA9IHt9LCB0aGlzLnRvU2hvdyA9IGEoW10pLCB0aGlzLnRvSGlkZSA9IGEoW10pLCB0aGlzLmN1cnJlbnRFbGVtZW50cyA9IGEoW10pIH0sIHByZXBhcmVGb3JtOiBmdW5jdGlvbiAoKSB7IHRoaXMucmVzZXQoKSwgdGhpcy50b0hpZGUgPSB0aGlzLmVycm9ycygpLmFkZCh0aGlzLmNvbnRhaW5lcnMpIH0sIHByZXBhcmVFbGVtZW50OiBmdW5jdGlvbiAoYSkgeyB0aGlzLnJlc2V0KCksIHRoaXMudG9IaWRlID0gdGhpcy5lcnJvcnNGb3IoYSkgfSwgZWxlbWVudFZhbHVlOiBmdW5jdGlvbiAoYikgeyB2YXIgYywgZCA9IGEoYiksIGUgPSBiLnR5cGU7IHJldHVybiAicmFkaW8iID09PSBlIHx8ICJjaGVja2JveCIgPT09IGUgPyBhKCJpbnB1dFtuYW1lPSciICsgYi5uYW1lICsgIiddOmNoZWNrZWQiKS52YWwoKSA6ICJudW1iZXIiID09PSBlICYmICJ1bmRlZmluZWQiICE9IHR5cGVvZiBiLnZhbGlkaXR5ID8gYi52YWxpZGl0eS5iYWRJbnB1dCA/ICExIDogZC52YWwoKSA6IChjID0gZC52YWwoKSwgInN0cmluZyIgPT0gdHlwZW9mIGMgPyBjLnJlcGxhY2UoL1xyL2csICIiKSA6IGMpIH0sIGNoZWNrOiBmdW5jdGlvbiAoYikgeyBiID0gdGhpcy52YWxpZGF0aW9uVGFyZ2V0Rm9yKHRoaXMuY2xlYW4oYikpOyB2YXIgYywgZCwgZSwgZiA9IGEoYikucnVsZXMoKSwgZyA9IGEubWFwKGYsIGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiIH0pLmxlbmd0aCwgaCA9ICExLCBpID0gdGhpcy5lbGVtZW50VmFsdWUoYik7IGZvciAoZCBpbiBmKSB7IGUgPSB7IG1ldGhvZDogZCwgcGFyYW1ldGVyczogZltkXSB9OyB0cnkgeyBpZiAoYyA9IGEudmFsaWRhdG9yLm1ldGhvZHNbZF0uY2FsbCh0aGlzLCBpLCBiLCBlLnBhcmFtZXRlcnMpLCAiZGVwZW5kZW5jeS1taXNtYXRjaCIgPT09IGMgJiYgMSA9PT0gZykgeyBoID0gITA7IGNvbnRpbnVlIH0gaWYgKGggPSAhMSwgInBlbmRpbmciID09PSBjKSByZXR1cm4gdm9pZCAodGhpcy50b0hpZGUgPSB0aGlzLnRvSGlkZS5ub3QodGhpcy5lcnJvcnNGb3IoYikpKTsgaWYgKCFjKSByZXR1cm4gdGhpcy5mb3JtYXRBbmRBZGQoYiwgZSksICExIH0gY2F0Y2ggKGopIHsgdGhyb3cgdGhpcy5zZXR0aW5ncy5kZWJ1ZyAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmxvZygiRXhjZXB0aW9uIG9jY3VycmVkIHdoZW4gY2hlY2tpbmcgZWxlbWVudCAiICsgYi5pZCArICIsIGNoZWNrIHRoZSAnIiArIGUubWV0aG9kICsgIicgbWV0aG9kLiIsIGopLCBqIH0gfSBpZiAoIWgpIHJldHVybiB0aGlzLm9iamVjdExlbmd0aChmKSAmJiB0aGlzLnN1Y2Nlc3NMaXN0LnB1c2goYiksICEwIH0sIGN1c3RvbURhdGFNZXNzYWdlOiBmdW5jdGlvbiAoYiwgYykgeyByZXR1cm4gYShiKS5kYXRhKCJtc2ciICsgYy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGMuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkpIHx8IGEoYikuZGF0YSgibXNnIikgfSwgY3VzdG9tTWVzc2FnZTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSB0aGlzLnNldHRpbmdzLm1lc3NhZ2VzW2FdOyByZXR1cm4gYyAmJiAoYy5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nID8gYyA6IGNbYl0pIH0sIGZpbmREZWZpbmVkOiBmdW5jdGlvbiAoKSB7IGZvciAodmFyIGEgPSAwOyBhIDwgYXJndW1lbnRzLmxlbmd0aDsgYSsrKSBpZiAodm9pZCAwICE9PSBhcmd1bWVudHNbYV0pIHJldHVybiBhcmd1bWVudHNbYV07IHJldHVybiB2b2lkIDAgfSwgZGVmYXVsdE1lc3NhZ2U6IGZ1bmN0aW9uIChiLCBjKSB7IHJldHVybiB0aGlzLmZpbmREZWZpbmVkKHRoaXMuY3VzdG9tTWVzc2FnZShiLm5hbWUsIGMpLCB0aGlzLmN1c3RvbURhdGFNZXNzYWdlKGIsIGMpLCAhdGhpcy5zZXR0aW5ncy5pZ25vcmVUaXRsZSAmJiBiLnRpdGxlIHx8IHZvaWQgMCwgYS52YWxpZGF0b3IubWVzc2FnZXNbY10sICI8c3Ryb25nPldhcm5pbmc6IE5vIG1lc3NhZ2UgZGVmaW5lZCBmb3IgIiArIGIubmFtZSArICI8XC9zdHJvbmc+IikgfSwgZm9ybWF0QW5kQWRkOiBmdW5jdGlvbiAoYiwgYykgeyB2YXIgZCA9IHRoaXMuZGVmYXVsdE1lc3NhZ2UoYiwgYy5tZXRob2QpLCBlID0gL1wkP1x7KFxkKylcfS9nOyAiZnVuY3Rpb24iID09IHR5cGVvZiBkID8gZCA9IGQuY2FsbCh0aGlzLCBjLnBhcmFtZXRlcnMsIGIpIDogZS50ZXN0KGQpICYmIChkID0gYS52YWxpZGF0b3IuZm9ybWF0KGQucmVwbGFjZShlLCAieyQxfSIpLCBjLnBhcmFtZXRlcnMpKSwgdGhpcy5lcnJvckxpc3QucHVzaCh7IG1lc3NhZ2U6IGQsIGVsZW1lbnQ6IGIsIG1ldGhvZDogYy5tZXRob2QgfSksIHRoaXMuZXJyb3JNYXBbYi5uYW1lXSA9IGQsIHRoaXMuc3VibWl0dGVkW2IubmFtZV0gPSBkIH0sIGFkZFdyYXBwZXI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLnNldHRpbmdzLndyYXBwZXIgJiYgKGEgPSBhLmFkZChhLnBhcmVudCh0aGlzLnNldHRpbmdzLndyYXBwZXIpKSksIGEgfSwgZGVmYXVsdFNob3dFcnJvcnM6IGZ1bmN0aW9uICgpIHsgdmFyIGEsIGIsIGM7IGZvciAoYSA9IDA7IHRoaXMuZXJyb3JMaXN0W2FdOyBhKyspIGMgPSB0aGlzLmVycm9yTGlzdFthXSwgdGhpcy5zZXR0aW5ncy5oaWdobGlnaHQgJiYgdGhpcy5zZXR0aW5ncy5oaWdobGlnaHQuY2FsbCh0aGlzLCBjLmVsZW1lbnQsIHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcywgdGhpcy5zZXR0aW5ncy52YWxpZENsYXNzKSwgdGhpcy5zaG93TGFiZWwoYy5lbGVtZW50LCBjLm1lc3NhZ2UpOyBpZiAodGhpcy5lcnJvckxpc3QubGVuZ3RoICYmICh0aGlzLnRvU2hvdyA9IHRoaXMudG9TaG93LmFkZCh0aGlzLmNvbnRhaW5lcnMpKSwgdGhpcy5zZXR0aW5ncy5zdWNjZXNzKSBmb3IgKGEgPSAwOyB0aGlzLnN1Y2Nlc3NMaXN0W2FdOyBhKyspIHRoaXMuc2hvd0xhYmVsKHRoaXMuc3VjY2Vzc0xpc3RbYV0pOyBpZiAodGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodCkgZm9yIChhID0gMCwgYiA9IHRoaXMudmFsaWRFbGVtZW50cygpIDsgYlthXTsgYSsrKSB0aGlzLnNldHRpbmdzLnVuaGlnaGxpZ2h0LmNhbGwodGhpcywgYlthXSwgdGhpcy5zZXR0aW5ncy5lcnJvckNsYXNzLCB0aGlzLnNldHRpbmdzLnZhbGlkQ2xhc3MpOyB0aGlzLnRvSGlkZSA9IHRoaXMudG9IaWRlLm5vdCh0aGlzLnRvU2hvdyksIHRoaXMuaGlkZUVycm9ycygpLCB0aGlzLmFkZFdyYXBwZXIodGhpcy50b1Nob3cpLnNob3coKSB9LCB2YWxpZEVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmN1cnJlbnRFbGVtZW50cy5ub3QodGhpcy5pbnZhbGlkRWxlbWVudHMoKSkgfSwgaW52YWxpZEVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7IHJldHVybiBhKHRoaXMuZXJyb3JMaXN0KS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lbGVtZW50IH0pIH0sIHNob3dMYWJlbDogZnVuY3Rpb24gKGIsIGMpIHsgdmFyIGQsIGUsIGYsIGcgPSB0aGlzLmVycm9yc0ZvcihiKSwgaCA9IHRoaXMuaWRPck5hbWUoYiksIGkgPSBhKGIpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKTsgZy5sZW5ndGggPyAoZy5yZW1vdmVDbGFzcyh0aGlzLnNldHRpbmdzLnZhbGlkQ2xhc3MpLmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcyksIGcuaHRtbChjKSkgOiAoZyA9IGEoIjwiICsgdGhpcy5zZXR0aW5ncy5lcnJvckVsZW1lbnQgKyAiPiIpLmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcykuaHRtbChjIHx8ICIiKSwgZCA9IGcsIHRoaXMuc2V0dGluZ3Mud3JhcHBlciAmJiAoZCA9IGcuaGlkZSgpLnNob3coKS53cmFwKCI8IiArIHRoaXMuc2V0dGluZ3Mud3JhcHBlciArICIvPiIpLnBhcmVudCgpKSwgdGhpcy5sYWJlbENvbnRhaW5lci5sZW5ndGggPyB0aGlzLmxhYmVsQ29udGFpbmVyLmFwcGVuZChkKSA6IHRoaXMuc2V0dGluZ3MuZXJyb3JQbGFjZW1lbnQgPyB0aGlzLnNldHRpbmdzLmVycm9yUGxhY2VtZW50KGQsIGEoYikpIDogZC5pbnNlcnRBZnRlcihiKSwgZy5pcygibGFiZWwiKSA/IGcuYXR0cigiZm9yIiwgaCkgOiAwID09PSBnLnBhcmVudHMoImxhYmVsW2Zvcj0nIiArIGggKyAiJ10iKS5sZW5ndGggJiYgKGYgPSBnLmF0dHIoImlkIiksIGkgPyBpLm1hdGNoKG5ldyBSZWdFeHAoIlxiIiArIGYgKyAiXGIiKSkgfHwgKGkgKz0gIiAiICsgZikgOiBpID0gZiwgYShiKS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IiwgaSksIGUgPSB0aGlzLmdyb3Vwc1tiLm5hbWVdLCBlICYmIGEuZWFjaCh0aGlzLmdyb3VwcywgZnVuY3Rpb24gKGIsIGMpIHsgYyA9PT0gZSAmJiBhKCJbbmFtZT0nIiArIGIgKyAiJ10iLCB0aGlzLmN1cnJlbnRGb3JtKS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IiwgZy5hdHRyKCJpZCIpKSB9KSkpLCAhYyAmJiB0aGlzLnNldHRpbmdzLnN1Y2Nlc3MgJiYgKGcudGV4dCgiIiksICJzdHJpbmciID09IHR5cGVvZiB0aGlzLnNldHRpbmdzLnN1Y2Nlc3MgPyBnLmFkZENsYXNzKHRoaXMuc2V0dGluZ3Muc3VjY2VzcykgOiB0aGlzLnNldHRpbmdzLnN1Y2Nlc3MoZywgYikpLCB0aGlzLnRvU2hvdyA9IHRoaXMudG9TaG93LmFkZChnKSB9LCBlcnJvcnNGb3I6IGZ1bmN0aW9uIChiKSB7IHZhciBjID0gdGhpcy5pZE9yTmFtZShiKSwgZCA9IGEoYikuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpLCBlID0gImxhYmVsW2Zvcj0nIiArIGMgKyAiJ10sIGxhYmVsW2Zvcj0nIiArIGMgKyAiJ10gKiI7IHJldHVybiBkICYmIChlID0gZSArICIsICMiICsgZC5yZXBsYWNlKC9ccysvZywgIiwgIyIpKSwgdGhpcy5lcnJvcnMoKS5maWx0ZXIoZSkgfSwgaWRPck5hbWU6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLmdyb3Vwc1thLm5hbWVdIHx8ICh0aGlzLmNoZWNrYWJsZShhKSA/IGEubmFtZSA6IGEuaWQgfHwgYS5uYW1lKSB9LCB2YWxpZGF0aW9uVGFyZ2V0Rm9yOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5jaGVja2FibGUoYSkgJiYgKGEgPSB0aGlzLmZpbmRCeU5hbWUoYS5uYW1lKS5ub3QodGhpcy5zZXR0aW5ncy5pZ25vcmUpWzBdKSwgYSB9LCBjaGVja2FibGU6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAvcmFkaW98Y2hlY2tib3gvaS50ZXN0KGEudHlwZSkgfSwgZmluZEJ5TmFtZTogZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGEodGhpcy5jdXJyZW50Rm9ybSkuZmluZCgiW25hbWU9JyIgKyBiICsgIiddIikgfSwgZ2V0TGVuZ3RoOiBmdW5jdGlvbiAoYiwgYykgeyBzd2l0Y2ggKGMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgeyBjYXNlICJzZWxlY3QiOiByZXR1cm4gYSgib3B0aW9uOnNlbGVjdGVkIiwgYykubGVuZ3RoOyBjYXNlICJpbnB1dCI6IGlmICh0aGlzLmNoZWNrYWJsZShjKSkgcmV0dXJuIHRoaXMuZmluZEJ5TmFtZShjLm5hbWUpLmZpbHRlcigiOmNoZWNrZWQiKS5sZW5ndGggfSByZXR1cm4gYi5sZW5ndGggfSwgZGVwZW5kOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcy5kZXBlbmRUeXBlc1t0eXBlb2YgYV0gPyB0aGlzLmRlcGVuZFR5cGVzW3R5cGVvZiBhXShhLCBiKSA6ICEwIH0sIGRlcGVuZFR5cGVzOiB7ICJib29sZWFuIjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgfSwgc3RyaW5nOiBmdW5jdGlvbiAoYiwgYykgeyByZXR1cm4gISFhKGIsIGMuZm9ybSkubGVuZ3RoIH0sICJmdW5jdGlvbiI6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhKGIpIH0gfSwgb3B0aW9uYWw6IGZ1bmN0aW9uIChiKSB7IHZhciBjID0gdGhpcy5lbGVtZW50VmFsdWUoYik7IHJldHVybiAhYS52YWxpZGF0b3IubWV0aG9kcy5yZXF1aXJlZC5jYWxsKHRoaXMsIGMsIGIpICYmICJkZXBlbmRlbmN5LW1pc21hdGNoIiB9LCBzdGFydFJlcXVlc3Q6IGZ1bmN0aW9uIChhKSB7IHRoaXMucGVuZGluZ1thLm5hbWVdIHx8ICh0aGlzLnBlbmRpbmdSZXF1ZXN0KyssIHRoaXMucGVuZGluZ1thLm5hbWVdID0gITApIH0sIHN0b3BSZXF1ZXN0OiBmdW5jdGlvbiAoYiwgYykgeyB0aGlzLnBlbmRpbmdSZXF1ZXN0LS0sIHRoaXMucGVuZGluZ1JlcXVlc3QgPCAwICYmICh0aGlzLnBlbmRpbmdSZXF1ZXN0ID0gMCksIGRlbGV0ZSB0aGlzLnBlbmRpbmdbYi5uYW1lXSwgYyAmJiAwID09PSB0aGlzLnBlbmRpbmdSZXF1ZXN0ICYmIHRoaXMuZm9ybVN1Ym1pdHRlZCAmJiB0aGlzLmZvcm0oKSA/IChhKHRoaXMuY3VycmVudEZvcm0pLnN1Ym1pdCgpLCB0aGlzLmZvcm1TdWJtaXR0ZWQgPSAhMSkgOiAhYyAmJiAwID09PSB0aGlzLnBlbmRpbmdSZXF1ZXN0ICYmIHRoaXMuZm9ybVN1Ym1pdHRlZCAmJiAoYSh0aGlzLmN1cnJlbnRGb3JtKS50cmlnZ2VySGFuZGxlcigiaW52YWxpZC1mb3JtIiwgW3RoaXNdKSwgdGhpcy5mb3JtU3VibWl0dGVkID0gITEpIH0sIHByZXZpb3VzVmFsdWU6IGZ1bmN0aW9uIChiKSB7IHJldHVybiBhLmRhdGEoYiwgInByZXZpb3VzVmFsdWUiKSB8fCBhLmRhdGEoYiwgInByZXZpb3VzVmFsdWUiLCB7IG9sZDogbnVsbCwgdmFsaWQ6ICEwLCBtZXNzYWdlOiB0aGlzLmRlZmF1bHRNZXNzYWdlKGIsICJyZW1vdGUiKSB9KSB9IH0sIGNsYXNzUnVsZVNldHRpbmdzOiB7IHJlcXVpcmVkOiB7IHJlcXVpcmVkOiAhMCB9LCBlbWFpbDogeyBlbWFpbDogITAgfSwgdXJsOiB7IHVybDogITAgfSwgZGF0ZTogeyBkYXRlOiAhMCB9LCBkYXRlSVNPOiB7IGRhdGVJU086ICEwIH0sIG51bWJlcjogeyBudW1iZXI6ICEwIH0sIGRpZ2l0czogeyBkaWdpdHM6ICEwIH0sIGNyZWRpdGNhcmQ6IHsgY3JlZGl0Y2FyZDogITAgfSB9LCBhZGRDbGFzc1J1bGVzOiBmdW5jdGlvbiAoYiwgYykgeyBiLmNvbnN0cnVjdG9yID09PSBTdHJpbmcgPyB0aGlzLmNsYXNzUnVsZVNldHRpbmdzW2JdID0gYyA6IGEuZXh0ZW5kKHRoaXMuY2xhc3NSdWxlU2V0dGluZ3MsIGIpIH0sIGNsYXNzUnVsZXM6IGZ1bmN0aW9uIChiKSB7IHZhciBjID0ge30sIGQgPSBhKGIpLmF0dHIoImNsYXNzIik7IHJldHVybiBkICYmIGEuZWFjaChkLnNwbGl0KCIgIiksIGZ1bmN0aW9uICgpIHsgdGhpcyBpbiBhLnZhbGlkYXRvci5jbGFzc1J1bGVTZXR0aW5ncyAmJiBhLmV4dGVuZChjLCBhLnZhbGlkYXRvci5jbGFzc1J1bGVTZXR0aW5nc1t0aGlzXSkgfSksIGMgfSwgYXR0cmlidXRlUnVsZXM6IGZ1bmN0aW9uIChiKSB7IHZhciBjLCBkLCBlID0ge30sIGYgPSBhKGIpLCBnID0gYi5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgZm9yIChjIGluIGEudmFsaWRhdG9yLm1ldGhvZHMpICJyZXF1aXJlZCIgPT09IGMgPyAoZCA9IGIuZ2V0QXR0cmlidXRlKGMpLCAiIiA9PT0gZCAmJiAoZCA9ICEwKSwgZCA9ICEhZCkgOiBkID0gZi5hdHRyKGMpLCAvbWlufG1heC8udGVzdChjKSAmJiAobnVsbCA9PT0gZyB8fCAvbnVtYmVyfHJhbmdlfHRleHQvLnRlc3QoZykpICYmIChkID0gTnVtYmVyKGQpKSwgZCB8fCAwID09PSBkID8gZVtjXSA9IGQgOiBnID09PSBjICYmICJyYW5nZSIgIT09IGcgJiYgKGVbY10gPSAhMCk7IHJldHVybiBlLm1heGxlbmd0aCAmJiAvLTF8MjE0NzQ4MzY0N3w1MjQyODgvLnRlc3QoZS5tYXhsZW5ndGgpICYmIGRlbGV0ZSBlLm1heGxlbmd0aCwgZSB9LCBkYXRhUnVsZXM6IGZ1bmN0aW9uIChiKSB7IHZhciBjLCBkLCBlID0ge30sIGYgPSBhKGIpOyBmb3IgKGMgaW4gYS52YWxpZGF0b3IubWV0aG9kcykgZCA9IGYuZGF0YSgicnVsZSIgKyBjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYy5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKSksIHZvaWQgMCAhPT0gZCAmJiAoZVtjXSA9IGQpOyByZXR1cm4gZSB9LCBzdGF0aWNSdWxlczogZnVuY3Rpb24gKGIpIHsgdmFyIGMgPSB7fSwgZCA9IGEuZGF0YShiLmZvcm0sICJ2YWxpZGF0b3IiKTsgcmV0dXJuIGQuc2V0dGluZ3MucnVsZXMgJiYgKGMgPSBhLnZhbGlkYXRvci5ub3JtYWxpemVSdWxlKGQuc2V0dGluZ3MucnVsZXNbYi5uYW1lXSkgfHwge30pLCBjIH0sIG5vcm1hbGl6ZVJ1bGVzOiBmdW5jdGlvbiAoYiwgYykgeyByZXR1cm4gYS5lYWNoKGIsIGZ1bmN0aW9uIChkLCBlKSB7IGlmIChlID09PSAhMSkgcmV0dXJuIHZvaWQgZGVsZXRlIGJbZF07IGlmIChlLnBhcmFtIHx8IGUuZGVwZW5kcykgeyB2YXIgZiA9ICEwOyBzd2l0Y2ggKHR5cGVvZiBlLmRlcGVuZHMpIHsgY2FzZSAic3RyaW5nIjogZiA9ICEhYShlLmRlcGVuZHMsIGMuZm9ybSkubGVuZ3RoOyBicmVhazsgY2FzZSAiZnVuY3Rpb24iOiBmID0gZS5kZXBlbmRzLmNhbGwoYywgYykgfSBmID8gYltkXSA9IHZvaWQgMCAhPT0gZS5wYXJhbSA/IGUucGFyYW0gOiAhMCA6IGRlbGV0ZSBiW2RdIH0gfSksIGEuZWFjaChiLCBmdW5jdGlvbiAoZCwgZSkgeyBiW2RdID0gYS5pc0Z1bmN0aW9uKGUpID8gZShjKSA6IGUgfSksIGEuZWFjaChbIm1pbmxlbmd0aCIsICJtYXhsZW5ndGgiXSwgZnVuY3Rpb24gKCkgeyBiW3RoaXNdICYmIChiW3RoaXNdID0gTnVtYmVyKGJbdGhpc10pKSB9KSwgYS5lYWNoKFsicmFuZ2VsZW5ndGgiLCAicmFuZ2UiXSwgZnVuY3Rpb24gKCkgeyB2YXIgYzsgYlt0aGlzXSAmJiAoYS5pc0FycmF5KGJbdGhpc10pID8gYlt0aGlzXSA9IFtOdW1iZXIoYlt0aGlzXVswXSksIE51bWJlcihiW3RoaXNdWzFdKV0gOiAic3RyaW5nIiA9PSB0eXBlb2YgYlt0aGlzXSAmJiAoYyA9IGJbdGhpc10ucmVwbGFjZSgvW1xbXF1dL2csICIiKS5zcGxpdCgvW1xzLF0rLyksIGJbdGhpc10gPSBbTnVtYmVyKGNbMF0pLCBOdW1iZXIoY1sxXSldKSkgfSksIGEudmFsaWRhdG9yLmF1dG9DcmVhdGVSYW5nZXMgJiYgKGIubWluICYmIGIubWF4ICYmIChiLnJhbmdlID0gW2IubWluLCBiLm1heF0sIGRlbGV0ZSBiLm1pbiwgZGVsZXRlIGIubWF4KSwgYi5taW5sZW5ndGggJiYgYi5tYXhsZW5ndGggJiYgKGIucmFuZ2VsZW5ndGggPSBbYi5taW5sZW5ndGgsIGIubWF4bGVuZ3RoXSwgZGVsZXRlIGIubWlubGVuZ3RoLCBkZWxldGUgYi5tYXhsZW5ndGgpKSwgYiB9LCBub3JtYWxpemVSdWxlOiBmdW5jdGlvbiAoYikgeyBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGIpIHsgdmFyIGMgPSB7fTsgYS5lYWNoKGIuc3BsaXQoL1xzLyksIGZ1bmN0aW9uICgpIHsgY1t0aGlzXSA9ICEwIH0pLCBiID0gYyB9IHJldHVybiBiIH0sIGFkZE1ldGhvZDogZnVuY3Rpb24gKGIsIGMsIGQpIHsgYS52YWxpZGF0b3IubWV0aG9kc1tiXSA9IGMsIGEudmFsaWRhdG9yLm1lc3NhZ2VzW2JdID0gdm9pZCAwICE9PSBkID8gZCA6IGEudmFsaWRhdG9yLm1lc3NhZ2VzW2JdLCBjLmxlbmd0aCA8IDMgJiYgYS52YWxpZGF0b3IuYWRkQ2xhc3NSdWxlcyhiLCBhLnZhbGlkYXRvci5ub3JtYWxpemVSdWxlKGIpKSB9LCBtZXRob2RzOiB7IHJlcXVpcmVkOiBmdW5jdGlvbiAoYiwgYywgZCkgeyBpZiAoIXRoaXMuZGVwZW5kKGQsIGMpKSByZXR1cm4gImRlcGVuZGVuY3ktbWlzbWF0Y2giOyBpZiAoInNlbGVjdCIgPT09IGMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgeyB2YXIgZSA9IGEoYykudmFsKCk7IHJldHVybiBlICYmIGUubGVuZ3RoID4gMCB9IHJldHVybiB0aGlzLmNoZWNrYWJsZShjKSA/IHRoaXMuZ2V0TGVuZ3RoKGIsIGMpID4gMCA6IGEudHJpbShiKS5sZW5ndGggPiAwIH0sIGVtYWlsOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcy5vcHRpb25hbChiKSB8fCAvXlthLXpBLVowLTkuISMkJSYnKitcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8udGVzdChhKSB9LCB1cmw6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0aGlzLm9wdGlvbmFsKGIpIHx8IC9eKGh0dHBzP3xzP2Z0cCk6XC9cLygoKChbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbIVwkJidcKFwpXCpcKyw7PV18OikqQCk/KCgoXGR8WzEtOV1cZHwxXGRcZHwyWzAtNF1cZHwyNVswLTVdKVwuKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSlcLihcZHxbMS05XVxkfDFcZFxkfDJbMC00XVxkfDI1WzAtNV0pXC4oXGR8WzEtOV1cZHwxXGRcZHwyWzAtNF1cZHwyNVswLTVdKSl8KCgoW2Etel18XGR8W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCgoW2Etel18XGR8W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSooW2Etel18XGR8W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKSlcLikrKChbYS16XXxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KChbYS16XXxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKihbYS16XXxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkpKVwuPykoOlxkKik/KShcLygoKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshXCQmJ1woXClcKlwrLDs9XXw6fEApKyhcLygoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCYnXChcKVwqXCssOz1dfDp8QCkqKSopPyk/KFw/KCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCYnXChcKVwqXCssOz1dfDp8QCl8W1x1RTAwMC1cdUY4RkZdfFwvfFw/KSopPygjKCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCYnXChcKVwqXCssOz1dfDp8QCl8XC98XD8pKik/JC9pLnRlc3QoYSkgfSwgZGF0ZTogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMub3B0aW9uYWwoYikgfHwgIS9JbnZhbGlkfE5hTi8udGVzdChuZXcgRGF0ZShhKS50b1N0cmluZygpKSB9LCBkYXRlSVNPOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcy5vcHRpb25hbChiKSB8fCAvXlxkezR9W1wvXC1dKDA/WzEtOV18MVswMTJdKVtcL1wtXSgwP1sxLTldfFsxMl1bMC05XXwzWzAxXSkkLy50ZXN0KGEpIH0sIG51bWJlcjogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMub3B0aW9uYWwoYikgfHwgL14tPyg/OlxkK3xcZHsxLDN9KD86LFxkezN9KSspPyg/OlwuXGQrKT8kLy50ZXN0KGEpIH0sIGRpZ2l0czogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMub3B0aW9uYWwoYikgfHwgL15cZCskLy50ZXN0KGEpIH0sIGNyZWRpdGNhcmQ6IGZ1bmN0aW9uIChhLCBiKSB7IGlmICh0aGlzLm9wdGlvbmFsKGIpKSByZXR1cm4gImRlcGVuZGVuY3ktbWlzbWF0Y2giOyBpZiAoL1teMC05IFwtXSsvLnRlc3QoYSkpIHJldHVybiAhMTsgdmFyIGMsIGQsIGUgPSAwLCBmID0gMCwgZyA9ICExOyBpZiAoYSA9IGEucmVwbGFjZSgvXEQvZywgIiIpLCBhLmxlbmd0aCA8IDEzIHx8IGEubGVuZ3RoID4gMTkpIHJldHVybiAhMTsgZm9yIChjID0gYS5sZW5ndGggLSAxOyBjID49IDA7IGMtLSkgZCA9IGEuY2hhckF0KGMpLCBmID0gcGFyc2VJbnQoZCwgMTApLCBnICYmIChmICo9IDIpID4gOSAmJiAoZiAtPSA5KSwgZSArPSBmLCBnID0gIWc7IHJldHVybiBlICUgMTAgPT09IDAgfSwgbWlubGVuZ3RoOiBmdW5jdGlvbiAoYiwgYywgZCkgeyB2YXIgZSA9IGEuaXNBcnJheShiKSA/IGIubGVuZ3RoIDogdGhpcy5nZXRMZW5ndGgoYS50cmltKGIpLCBjKTsgcmV0dXJuIHRoaXMub3B0aW9uYWwoYykgfHwgZSA+PSBkIH0sIG1heGxlbmd0aDogZnVuY3Rpb24gKGIsIGMsIGQpIHsgdmFyIGUgPSBhLmlzQXJyYXkoYikgPyBiLmxlbmd0aCA6IHRoaXMuZ2V0TGVuZ3RoKGEudHJpbShiKSwgYyk7IHJldHVybiB0aGlzLm9wdGlvbmFsKGMpIHx8IGQgPj0gZSB9LCByYW5nZWxlbmd0aDogZnVuY3Rpb24gKGIsIGMsIGQpIHsgdmFyIGUgPSBhLmlzQXJyYXkoYikgPyBiLmxlbmd0aCA6IHRoaXMuZ2V0TGVuZ3RoKGEudHJpbShiKSwgYyk7IHJldHVybiB0aGlzLm9wdGlvbmFsKGMpIHx8IGUgPj0gZFswXSAmJiBlIDw9IGRbMV0gfSwgbWluOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gdGhpcy5vcHRpb25hbChiKSB8fCBhID49IGMgfSwgbWF4OiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gdGhpcy5vcHRpb25hbChiKSB8fCBjID49IGEgfSwgcmFuZ2U6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiB0aGlzLm9wdGlvbmFsKGIpIHx8IGEgPj0gY1swXSAmJiBhIDw9IGNbMV0gfSwgZXF1YWxUbzogZnVuY3Rpb24gKGIsIGMsIGQpIHsgdmFyIGUgPSBhKGQpOyByZXR1cm4gdGhpcy5zZXR0aW5ncy5vbmZvY3Vzb3V0ICYmIGUudW5iaW5kKCIudmFsaWRhdGUtZXF1YWxUbyIpLmJpbmQoImJsdXIudmFsaWRhdGUtZXF1YWxUbyIsIGZ1bmN0aW9uICgpIHsgYShjKS52YWxpZCgpIH0pLCBiID09PSBlLnZhbCgpIH0sIHJlbW90ZTogZnVuY3Rpb24gKGIsIGMsIGQpIHsgaWYgKHRoaXMub3B0aW9uYWwoYykpIHJldHVybiAiZGVwZW5kZW5jeS1taXNtYXRjaCI7IHZhciBlLCBmLCBnID0gdGhpcy5wcmV2aW91c1ZhbHVlKGMpOyByZXR1cm4gdGhpcy5zZXR0aW5ncy5tZXNzYWdlc1tjLm5hbWVdIHx8ICh0aGlzLnNldHRpbmdzLm1lc3NhZ2VzW2MubmFtZV0gPSB7fSksIGcub3JpZ2luYWxNZXNzYWdlID0gdGhpcy5zZXR0aW5ncy5tZXNzYWdlc1tjLm5hbWVdLnJlbW90ZSwgdGhpcy5zZXR0aW5ncy5tZXNzYWdlc1tjLm5hbWVdLnJlbW90ZSA9IGcubWVzc2FnZSwgZCA9ICJzdHJpbmciID09IHR5cGVvZiBkICYmIHsgdXJsOiBkIH0gfHwgZCwgZy5vbGQgPT09IGIgPyBnLnZhbGlkIDogKGcub2xkID0gYiwgZSA9IHRoaXMsIHRoaXMuc3RhcnRSZXF1ZXN0KGMpLCBmID0ge30sIGZbYy5uYW1lXSA9IGIsIGEuYWpheChhLmV4dGVuZCghMCwgeyB1cmw6IGQsIG1vZGU6ICJhYm9ydCIsIHBvcnQ6ICJ2YWxpZGF0ZSIgKyBjLm5hbWUsIGRhdGFUeXBlOiAianNvbiIsIGRhdGE6IGYsIGNvbnRleHQ6IGUuY3VycmVudEZvcm0sIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkKSB7IHZhciBmLCBoLCBpLCBqID0gZCA9PT0gITAgfHwgInRydWUiID09PSBkOyBlLnNldHRpbmdzLm1lc3NhZ2VzW2MubmFtZV0ucmVtb3RlID0gZy5vcmlnaW5hbE1lc3NhZ2UsIGogPyAoaSA9IGUuZm9ybVN1Ym1pdHRlZCwgZS5wcmVwYXJlRWxlbWVudChjKSwgZS5mb3JtU3VibWl0dGVkID0gaSwgZS5zdWNjZXNzTGlzdC5wdXNoKGMpLCBkZWxldGUgZS5pbnZhbGlkW2MubmFtZV0sIGUuc2hvd0Vycm9ycygpKSA6IChmID0ge30sIGggPSBkIHx8IGUuZGVmYXVsdE1lc3NhZ2UoYywgInJlbW90ZSIpLCBmW2MubmFtZV0gPSBnLm1lc3NhZ2UgPSBhLmlzRnVuY3Rpb24oaCkgPyBoKGIpIDogaCwgZS5pbnZhbGlkW2MubmFtZV0gPSAhMCwgZS5zaG93RXJyb3JzKGYpKSwgZy52YWxpZCA9IGosIGUuc3RvcFJlcXVlc3QoYywgaikgfSB9LCBkKSksICJwZW5kaW5nIikgfSB9IH0pLCBhLmZvcm1hdCA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgIiQuZm9ybWF0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJC52YWxpZGF0b3IuZm9ybWF0IGluc3RlYWQuIiB9OyB2YXIgYiwgYyA9IHt9OyBhLmFqYXhQcmVmaWx0ZXIgPyBhLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24gKGEsIGIsIGQpIHsgdmFyIGUgPSBhLnBvcnQ7ICJhYm9ydCIgPT09IGEubW9kZSAmJiAoY1tlXSAmJiBjW2VdLmFib3J0KCksIGNbZV0gPSBkKSB9KSA6IChiID0gYS5hamF4LCBhLmFqYXggPSBmdW5jdGlvbiAoZCkgeyB2YXIgZSA9ICgibW9kZSIgaW4gZCA/IGQgOiBhLmFqYXhTZXR0aW5ncykubW9kZSwgZiA9ICgicG9ydCIgaW4gZCA/IGQgOiBhLmFqYXhTZXR0aW5ncykucG9ydDsgcmV0dXJuICJhYm9ydCIgPT09IGUgPyAoY1tmXSAmJiBjW2ZdLmFib3J0KCksIGNbZl0gPSBiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIGNbZl0pIDogYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0pLCBhLmV4dGVuZChhLmZuLCB7IHZhbGlkYXRlRGVsZWdhdGU6IGZ1bmN0aW9uIChiLCBjLCBkKSB7IHJldHVybiB0aGlzLmJpbmQoYywgZnVuY3Rpb24gKGMpIHsgdmFyIGUgPSBhKGMudGFyZ2V0KTsgcmV0dXJuIGUuaXMoYikgPyBkLmFwcGx5KGUsIGFyZ3VtZW50cykgOiB2b2lkIDAgfSkgfSB9KSB9KTsNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIE1MIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCnZhciBlcnJvclZhbGlkYXRlRm9jdXNPdXQgPSBmYWxzZTsNCnZhciBmb2N1c091dFZhbGlkYXRlTGlzdCA9IFtdOw0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQooZnVuY3Rpb24gKCQpIHsNCiAgICBpZiAoISQudmFsaWRhdG9yKSB7DQogICAgICAgIHRocm93ICckLnZhbGlkYXRvciBpcyBtaXNzaW5nLic7DQogICAgfQ0KDQogICAgdmFyIGN1c3RvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZWxlbWVudCwgbWV0aG9kTmFtZSkgew0KICAgICAgICBpZiAoIW1ldGhvZE5hbWUpIHsNCiAgICAgICAgICAgIHRocm93ICdJbnZhbGlkIG1ldGhvZC4nOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIG1ldGhvZCA9IHdpbmRvd1ttZXRob2ROYW1lXTsNCiAgICAgICAgaWYgKCFtZXRob2QpIHsNCiAgICAgICAgICAgIHRocm93ICdJbnZhbGlkIG1ldGhvZCAnICsgbWV0aG9kTmFtZSArICcuJzsNCiAgICAgICAgfQ0KICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBNTCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KICAgICAgICAvL3JldHVybiBtZXRob2QuYXBwbHkodGhpcywgW2VsZW1lbnQsICctMScsIDFdKTsNCiAgICAgICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0aGlzLCBbZWxlbWVudCwgdGhpcy52YWxpZGF0b3JPYmplY3Quc2VjdGlvblNjb3BlID8gdGhpcy52YWxpZGF0b3JPYmplY3Quc2VjdGlvblNjb3BlLnBhZ2UgLSAxIDogJy0xJywgMV0pOw0KICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KICAgIH07DQogICAgJC52YWxpZGF0b3IuYWRkTWV0aG9kKCdjdXN0b21FJywgZnVuY3Rpb24gKHZhbHVlLCBlbGVtZW50LCBtZXRob2ROYW1lKSB7DQogICAgICAgIHJldHVybiBjdXN0b20odmFsdWUsIGVsZW1lbnQsIG1ldGhvZE5hbWUpOw0KICAgIH0pOw0KDQogICAgJC52YWxpZGF0b3IuYWRkTWV0aG9kKCdjdXN0b21XJywgZnVuY3Rpb24gKHZhbHVlLCBlbGVtZW50LCBtZXRob2ROYW1lKSB7DQogICAgICAgIHJldHVybiBjdXN0b20odmFsdWUsIGVsZW1lbnQsIG1ldGhvZE5hbWUpOw0KICAgIH0pOw0KDQogICAgJC52YWxpZGF0b3IuYWRkTWV0aG9kKCJkYXRlIiwgZnVuY3Rpb24gKHZhbHVlLCBlbGVtZW50KSB7DQogICAgICAgIHZhciBjaGVjayA9IGZhbHNlOw0KICAgICAgICBpZiAoISQoIiMiICsgZWxlbWVudC5pZCkuaGFzQ2xhc3MoImRhdGV0aW1lcGlja2VyIikpIHsNCiAgICAgICAgICAgIHZhciByZSA9IC9eXGR7MSwyfVwuXGR7MSwyfVwuXGR7NH0kLzsNCiAgICAgICAgICAgIGlmIChyZS50ZXN0KHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHZhciBhZGF0YSA9IHZhbHVlLnNwbGl0KCcuJyk7DQogICAgICAgICAgICAgICAgdmFyIGRheSA9IHBhcnNlSW50KGFkYXRhWzBdLCAxMCk7DQogICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gcGFyc2VJbnQoYWRhdGFbMV0sIDEwKTsNCiAgICAgICAgICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KGFkYXRhWzJdLCAxMCk7DQogICAgICAgICAgICAgICAgY2hlY2sgPSBpc1ZhbGlkRGF0ZShkYXksIG1vbnRoLCB5ZWFyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIHZhciByZTIgPSAvXlxkezEsMn1cLlxkezEsMn1cLlxkezR9XHNcZHsxLDJ9OlxkezEsMn0kLzsNCiAgICAgICAgICAgIGlmIChyZTIudGVzdCh2YWx1ZSkpIHsNCiAgICAgICAgICAgICAgICB2YXIgYWRhdGEgPSB2YWx1ZS5zcGxpdCgnICcpOw0KICAgICAgICAgICAgICAgIHZhciBkYXRlUGFydHMgPSBhZGF0YVswXS5zcGxpdCgnLicpOw0KDQogICAgICAgICAgICAgICAgdmFyIGRheSA9IHBhcnNlSW50KGRhdGVQYXJ0c1swXSwgMTApOw0KICAgICAgICAgICAgICAgIHZhciBtb250aCA9IHBhcnNlSW50KGRhdGVQYXJ0c1sxXSwgMTApOw0KICAgICAgICAgICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoZGF0ZVBhcnRzWzJdLCAxMCk7DQoNCiAgICAgICAgICAgICAgICB2YXIgdGltZVBhcnRzID0gYWRhdGFbMV0uc3BsaXQoJzonKTsNCg0KICAgICAgICAgICAgICAgIHZhciBob3VycyA9IHBhcnNlSW50KHRpbWVQYXJ0c1swXSwgMTApOw0KICAgICAgICAgICAgICAgIHZhciBtaW51dGVzID0gcGFyc2VJbnQodGltZVBhcnRzWzFdLCAxMCk7DQogICAgICAgICAgICAgICAgY2hlY2sgPSBpc1ZhbGlkRGF0ZVRpbWUoZGF5LCBtb250aCwgeWVhciwgaG91cnMsIG1pbnV0ZXMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uYWwoZWxlbWVudCkgfHwgY2hlY2s7DQogICAgfSwgIlBsZWFzZSBlbnRlciBhIGNvcnJlY3QgZGF0ZSIpOw0KDQoNCiAgICAkLnZhbGlkYXRvci5hZGRNZXRob2QoIm1heFZhbHVlIiwgZnVuY3Rpb24gKHZhbHVlLCBlbGVtZW50LCBhcmcpIHsNCiAgICAgICAgdmFyIGNoZWNrID0gdHJ1ZTsNCiAgICAgICAgdmFyIG1heCA9IHBhcnNlRmxvYXQoYXJnKTsNCiAgICAgICAgaWYgKHZhbHVlID4gbWF4KQ0KICAgICAgICAgICAgY2hlY2sgPSBmYWxzZTsNCg0KICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25hbChlbGVtZW50KSB8fCBjaGVjazsNCiAgICB9LCAiQmFkIHZhbHVlIik7DQoNCiAgICAkLnZhbGlkYXRvci5hZGRNZXRob2QoIm1pblZhbHVlIiwgZnVuY3Rpb24gKHZhbHVlLCBlbGVtZW50LCBhcmcpIHsNCiAgICAgICAgdmFyIGNoZWNrID0gdHJ1ZTsNCiAgICAgICAgdmFyIG1pbiA9IHBhcnNlRmxvYXQoYXJnKTsNCiAgICAgICAgaWYgKHZhbHVlIDwgbWluKQ0KICAgICAgICAgICAgY2hlY2sgPSBmYWxzZTsNCg0KICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25hbChlbGVtZW50KSB8fCBjaGVjazsNCiAgICB9LCAiQmFkIHZhbHVlIik7DQoNCn0oalF1ZXJ5KSk7DQoNCmZ1bmN0aW9uIGlzVmFsaWREYXRlKGRheSwgbW9udGgsIHllYXIpIHsNCiAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICAgIGlmICgobW9udGggPT0gNCB8fCBtb250aCA9PSA2IHx8IG1vbnRoID09IDkgfHwgbW9udGggPT0gMTEpICYmIGRheSA9PSAzMSkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICAgIGlmIChtb250aCA9PSAyKSB7IC8vIGNoZWNrIGZvciBmZWJydWFyeSAyOXRoDQogICAgICAgIHZhciBpc2xlYXAgPSAoeWVhciAlIDQgPT0gMCAmJiAoeWVhciAlIDEwMCAhPSAwIHx8IHllYXIgJSA0MDAgPT0gMCkpOw0KICAgICAgICBpZiAoZGF5ID4gMjkgfHwgKGRheSA9PSAyOSAmJiAhaXNsZWFwKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiB0cnVlOyAgLy8gZGF0ZSBpcyB2YWxpZA0KfQ0KDQpmdW5jdGlvbiBpc1ZhbGlkRGF0ZVRpbWUoZGF5LCBtb250aCwgeWVhciwgaG91cnMsIG1pbnV0ZXMpIHsNCiAgICBpZiAoIWlzVmFsaWREYXRlKGRheSwgbW9udGgsIHllYXIpKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICBpZiAoaG91cnMgPCAwIHx8IGhvdXJzID4gMjMpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgICBpZiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICByZXR1cm4gdHJ1ZTsgIC8vIGRhdGUgaXMgdmFsaWQNCn0NCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCnZhciBhZGQgPSAiYWRkIjsNCnZhciByZW1vdmUgPSAicmVtb3ZlIjsNCg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgew0KICAgIEluaXRWYWxpZGF0aW9uKCk7DQogICAgUmVpbmRleEVsZW1lbnRzKCk7DQogICAgSW5pdFBvcFVwRGlhbG9nKCk7DQogICAgSW5pdFBpY2tlcnMoKTsNCiAgICBJbml0U2VjdGlvbkFjY29yZGlvbigpOw0KICAgIEluaXREYXRhVGFibGVQbHVnSW4oKTsNCiAgICBJbml0Q29uZGl0aW9uYWxSdWxlcygpOw0KICAgIEluaXRSYWRpbygpOw0KICAgIEluaXRCdXR0b25zKCk7DQogICAgTG9jYWxpemVFcnJvck1lc3NhZ2VzKCk7DQogICAgQ2xlYW5SZXBldGl0aW9uQnV0dG9ucygpOw0KICAgIEluaXRSZXBldGl0aW9uU2VjdGlvbnMoJCh0aGlzKSk7DQogICAgSW5pdERlYnVnQ29kZSgpOw0KICAgIFJlc2l6ZVRleHRhcmVhRmllbGQoKTsNCiAgICBMYXlvdXRUZW1wUmVwZXRpdG9uU2VjdGlvbigpOw0KICAgIEluaXRIZWxwKCk7DQogICAgSW5pdE11bHRpQ29tYm9ib3goKTsNCiAgICBJbml0UmVtb3RlQ29tYm9ib3goKTsNCiAgICAvLyBJbml0IHBhZ2VhYmxlIHNlY3Rpb24NCiAgICBJbml0UGFnZWFibGVTZWN0aW9uKCk7DQogICAgSW5pdENsb3NlQnRucygpOw0KICAgIEluaXRIaWVyYXJjaGljYWxseVRyZWUoKTsNCiAgICBleHBhbmRMYXlvdXRSb3dzQW5kRm9jdXMoKTsNCn0pOw0KDQokKHdpbmRvdykubG9hZChmdW5jdGlvbiAoKSB7DQogICAgSW5pdFRhYkluZGV4ZXMoKTsNCn0pOw0KDQpmdW5jdGlvbiBJbml0Q2xvc2VCdG5zKGNvbnRleHQpIHsNCglpZiAoY29udGV4dCA9PSBudWxsKSBjb250ZXh0ID0gJCgiOnJvb3QiKTsNCiAgICBjb250ZXh0LmZpbmQoIltpZF49J3JlbW92ZVNlY3Rpb25sYXlvdXRSb3cnXSIpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgcmVtb3ZlQnRuID0gJCh0aGlzKTsNCiAgICAgICAgdmFyIGxheW91dFJvdyA9IHJlbW92ZUJ0bi5wYXJlbnQoKS5wYXJlbnQoKTsNCgkJaWYgKCFsYXlvdXRSb3cuaGFzQ2xhc3MoIm5vQ2xvc2VCdXR0b24iKSkgew0KCQkJdmFyIG9uQ2xpY2tGbiA9IHJlbW92ZUJ0bi5hdHRyKCJvbmNsaWNrIik7DQoJCQl2YXIgaGVhZGVyQ2xhc3MgPSAid2l0aEhlYWRlciI7DQoJCQl2YXIgc3R5bGVTdHIgPSAiZGlzcGxheTogbm9uZTsiOw0KCQkJdmFyIGxheW91dFJvd0lkID0gbGF5b3V0Um93LmF0dHIoImlkIikuc3BsaXQoJ18nKTsNCg0KCQkJaWYgKGxheW91dFJvdy5jaGlsZHJlbigiZGl2W2NsYXNzXj1jYXB0aW9uXSIpWzBdID09IG51bGwgfHwgbGF5b3V0Um93LmNoaWxkcmVuKCJkaXZbY2xhc3NePWNhcHRpb25dIikuY2hpbGRyZW4oIltjbGFzc149aGVhZGVyY29ycmVjdGlvbl0iKVswXSA9PSBudWxsKSB7DQoJCQkgICAgaGVhZGVyQ2xhc3MgPSAibm9IZWFkZXIiOw0KCQkJfQ0KDQoNCg0KCQkJaWYgKGxheW91dFJvdy5wYXJlbnQoKS5jaGlsZHJlbigiW2lkXj0iICsgbGF5b3V0Um93SWRbMF0gKyAiXSIpLmxlbmd0aCA+IDEpDQoJCQkJc3R5bGVTdHIgPSAiZGlzcGxheTogYmxvY2s7IjsNCg0KCQkJLy/DunByYXZhIGtlxI8gamUgxaFpcsWhw60gY29sdW1uIGFrbyByw6FtIHNla2NpZSAgICANCgkJCXZhciBjb2x1bW4gPSBsYXlvdXRSb3cucGFyZW50KCkucGFyZW50KCk7DQoJCQlpZiAoY29sdW1uWzBdLm9mZnNldFdpZHRoID4gY29sdW1uLnBhcmVudCgpWzBdLm9mZnNldFdpZHRoKSB7DQoJCQkJc3R5bGVTdHIgPSBzdHlsZVN0ciArICIgbWFyZ2luLWxlZnQ6IiArIChjb2x1bW4ucGFyZW50KClbMF0ub2Zmc2V0V2lkdGggLSAxNSkudG9TdHJpbmcoKSArICJweDsiOw0KCQkJCWlmIChoZWFkZXJDbGFzcyAhPSAid2l0aEhlYWRlciIpDQoJCQkJCWhlYWRlckNsYXNzID0gIiI7DQoJCQl9DQoNCgkJCXZhciBjbG9zZUJ0bkNsYXNzID0gImNsb3NlQnV0dG9uIHVpLWljb24gdWktaWNvbi1jbG9zZXRoaWNrICIgKyBoZWFkZXJDbGFzczsNCgkJCXZhciBzcGFuU3RyID0gJzxzcGFuIGNsYXNzPSInICsgY2xvc2VCdG5DbGFzcyArICciIG9uY2xpY2s9IicgKyBvbkNsaWNrRm4gKyAnIiBzdHlsZT0iJyArIHN0eWxlU3RyICsgJyI+PFwvc3Bhbj4nOw0KDQoJCQlsYXlvdXRSb3cuY2hpbGRyZW4oIjpmaXJzdCIpLmJlZm9yZShzcGFuU3RyKTsNCgkJfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBJbml0SGllcmFyY2hpY2FsbHlUcmVlKCkgew0KICAgICQoImZvcm0iKS5Jbml0SGllcmFyY2hpY2FsbHlUcmVlKCk7DQp9DQoNCmZ1bmN0aW9uIEluaXRQYWdlYWJsZVNlY3Rpb24oKSB7DQogICAgLy8gSW5pdCBhbGwgcGFnZWFibGUgc2VjdGlvbg0KICAgICQoJy5zZWN0aW9uLnBhZ2VhYmxlU2VjdGlvbicsICdmb3JtJykucGFnZWFibGVTZWN0aW9uKHsNCiAgICAgICAgdmFsaWRhdG9yOiB3aW5kb3cudmFsaWRhdG9yT2JqZWN0DQogICAgfSk7DQp9DQoNCmZ1bmN0aW9uIEluaXRNdWx0aUNvbWJvYm94KCkgew0KICAgICQoImZvcm0iKS5Jbml0TXVsdGlDb21ib2JveCgpOw0KfQ0KDQpmdW5jdGlvbiBEZWxldGVNdWx0aUNvbWJvYm94KCkgew0KICAgICQoImZvcm0iKS5EZWxldGVNdWx0aUNvbWJvYm94KCk7DQp9DQoNCmZ1bmN0aW9uIEluaXRSZW1vdGVDb21ib2JveCgpIHsNCiAgICAkKCJmb3JtIikuSW5pdFJlbW90ZUNvbWJvYm94KCk7DQp9DQoNCmZ1bmN0aW9uIEluaXRIZWxwKCkgew0KICAgICQoImZvcm0iKS5Jbml0SGVscCgpOw0KfQ0KDQpmdW5jdGlvbiBJbml0UmVwZXRpdGlvblNlY3Rpb25zKGNvbnRleHQpIHsNCiAgICB2YXIgc2VsZWN0b3IgPSAnZGl2W2lkXj1sYXlvdXRSb3ddJzsNCiAgICB2YXIgcmVtb3ZlQnRucyA9IGNvbnRleHQuZmluZCgnc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKTsNCiAgICByZW1vdmVCdG5zLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgbGF5b3V0Um93ID0gJCh0aGlzKS5jbG9zZXN0KHNlbGVjdG9yKTsNCiAgICAgICAgJChsYXlvdXRSb3cpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIGhhc1ZhbCA9IGZhbHNlOw0KICAgICAgICAgICAgJCh0aGlzKS5maW5kKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKVswXTsNCiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlICE9ICdyYWRpbycgJiYgZWxlbWVudC52YWx1ZSAhPSAnJyAmJiBlbGVtZW50LnR5cGUgIT0gJ2J1dHRvbicpDQogICAgICAgICAgICAgICAgICAgIGhhc1ZhbCA9IHRydWU7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGlmICghaGFzVmFsKQ0KICAgICAgICAgICAgICAgIHJlbW92ZVNlY3Rpb25Jbml0KHRoaXMpOw0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KICAgIEluY3JlbWVudERlY3JlbWVudElubmVyUmVwZWF0aW5nSWRzKGNvbnRleHQpOw0KfQ0KDQpmdW5jdGlvbiByZW1vdmVTZWN0aW9uSW5pdChzZW5kZXIpIHsNCiAgICB2YXIgbGF5b3V0Um93ID0gJChzZW5kZXIpOw0KICAgIHZhciBsYXlvdXRSb3dQcmV2aW91cyA9ICQobGF5b3V0Um93WzBdLmlkKS5wcmV2KCdkaXZbaWRePWxheW91dFJvd10nKTsNCiAgICB2YXIgaWQgPSBzZW5kZXIuaWQ7DQogICAgaWYgKGlkLmluZGV4T2YocmVwZWF0aW5nUG9zdGZpeCkgPT0gLTEpIHsNCiAgICAgICAgdmFyIHJlbW92ZUJ1dHRvbiA9IGxheW91dFJvdy5maW5kKCcjcmVtb3ZlU2VjdGlvbicgKyBpZCk7DQogICAgICAgIHZhciBzdHJpbmcgPSByZW1vdmVCdXR0b24uYXR0cignb25jbGljaycpLnRvU3RyaW5nKCk7DQogICAgICAgIHZhciBtaW5SZXBldGl0aW9uID0gc3RyaW5nLnN1YnN0cmluZyhzdHJpbmcubGFzdEluZGV4T2YoIigiKSArIDEsIHN0cmluZy5sYXN0SW5kZXhPZigiLCB0aGlzIikpOw0KICAgICAgICB2YXIgc2VjdGlvbnNDb3VudCA9IGNvdW50U2VjdGlvbihyZW1vdmVCdXR0b24sICdyZW1vdmVTZWN0aW9uJyk7DQoNCiAgICAgICAgaWYgKHNlY3Rpb25zQ291bnQgPT0gbWluUmVwZXRpdGlvbikNCiAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICB2YXIgY2hpbGRyZW4gPSBsYXlvdXRSb3dQcmV2aW91cy5jaGlsZHJlbignZGl2W2lkXj1yZXBldGl0aW9uQ29tbWFuZHNdJyk7DQogICAgICAgIGlmIChzZWN0aW9uc0NvdW50ID09IG1pblJlcGV0aXRpb24gJiYgc2VjdGlvbnNDb3VudCA+IDEpDQogICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbignc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKS5oaWRlKCk7DQoNCiAgICAgICAgaWYgKHNlY3Rpb25zQ291bnQgPT0gMSkgew0KICAgICAgICAgICAgbGF5b3V0Um93LmF0dHIoImlzRW1wdHkiLCAidHJ1ZSIpOw0KICAgICAgICAgICAgbGF5b3V0Um93LmNoaWxkcmVuKCdkaXZbaWRePWxheW91dFJvd0NvbnRlbnRdJykuaGlkZSgpLlRvZ2dsZVZhbGlkYXRvcnModHJ1ZSk7DQogICAgICAgICAgICBsYXlvdXRSb3cuUmVpbml0aWFsaXplQ29uZGl0aW9uYWxSdWxlcygpOw0KDQogICAgICAgICAgICB2YXIgcmVwZXRpdGlvbkNvbW1hbmRzID0gbGF5b3V0Um93LmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKTsNCiAgICAgICAgICAgIHJlcGV0aXRpb25Db21tYW5kcy5jaGlsZHJlbignc3BhbltpZF49YWRkU2VjdGlvbl0nKS5zaG93KCk7DQogICAgICAgICAgICBsYXlvdXRSb3cuY2xpY2soKTsNCiAgICAgICAgICAgIHJldHVybiByZXBldGl0aW9uQ29tbWFuZHMuY2hpbGRyZW4oJ3NwYW5baWRePXJlbW92ZVNlY3Rpb25dJykuaGlkZSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgY2hpbGRyZW4uc2hvdygpOw0KICAgICAgICBsYXlvdXRSb3cucmVtb3ZlKCk7DQogICAgICAgIGxheW91dFJvd1ByZXZpb3VzLlJlaW5pdGlhbGl6ZUNvbmRpdGlvbmFsUnVsZXMoKTsNCg0KICAgICAgICBpZiAoKHNlY3Rpb25zQ291bnQgLSAxKSA9PSBtaW5SZXBldGl0aW9uKSB7DQogICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbignc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKS5oaWRlKCk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGNvbXBhcmVCeVRhYkluZGV4KGEsIGIpIHsNCiAgICB2YXIgYVRhYkluZGV4ID0gaXNOYU4oJChhKS5hdHRyKCd0YWJpbmRleCcpKSA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IE51bWJlcigkKGEpLmF0dHIoJ3RhYmluZGV4JykpOw0KICAgIHZhciBiVGFiSW5kZXggPSBpc05hTigkKGIpLmF0dHIoJ3RhYmluZGV4JykpID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyKCQoYikuYXR0cigndGFiaW5kZXgnKSk7DQoNCiAgICBpZiAoYVRhYkluZGV4IDwgYlRhYkluZGV4KQ0KICAgICAgICByZXR1cm4gLTE7DQogICAgaWYgKGFUYWJJbmRleCA+IGJUYWJJbmRleCkNCiAgICAgICAgcmV0dXJuIDE7DQogICAgcmV0dXJuIDA7DQp9DQoNCmZ1bmN0aW9uIFVwQWxsVGFiSW5kZXgodXApIHsNCiAgICB2YXIgZm9jdXNhYmxlcyA9ICQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QiKTsNCiAgICB2YXIganVtcCA9IDA7DQoNCiAgICBmb2N1c2FibGVzLnNvcnQoY29tcGFyZUJ5VGFiSW5kZXgpOw0KDQogICAgZm9jdXNhYmxlcy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQodGhpcykuYXR0cigndGFiaW5kZXgnKSAhPSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgIHZhciBuZXdUYWJJbmRleCA9IE51bWJlcigkKHRoaXMpLmF0dHIoJ3RhYmluZGV4JykpICsganVtcDsNCiAgICAgICAgICAgICQodGhpcykuYXR0cigndGFiaW5kZXgnLCBuZXdUYWJJbmRleCk7DQogICAgICAgICAgICBqdW1wICs9IHVwOw0KICAgICAgICB9DQogICAgfSk7DQp9DQoNCmZ1bmN0aW9uIFNocmluZ1RhYkluZGV4UmFuZ2UoKSB7DQogICAgdmFyIGZvY3VzYWJsZXMgPSAkKCJpbnB1dFtJRF0sIHNlbGVjdCwgdGV4dGFyZWEsIGEsIGFyZWEsIGJ1dHRvbiwgb2JqZWN0LCAuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAuY2xvc2VCdXR0b24iKTsNCiAgICB2YXIganVtcCA9IDA7DQoNCiAgICBmb2N1c2FibGVzLnNvcnQoY29tcGFyZUJ5VGFiSW5kZXgpOw0KDQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2N1c2FibGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICQoZm9jdXNhYmxlc1tpXSkuYXR0cigndGFiSW5kZXgnLCBpICsgMSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBJbml0VGFiSW5kZXhlcygpIHsNCiAgICBpZiAoJCgnLmFkZFJlbW92ZVNlY3Rpb24sIC5sb29rdXBidXR0b24sIC5pbmZvSWNvbiwgLmNsb3NlQnV0dG9uJykubGVuZ3RoICE9ICQoJ3NwYW5bdGFiaW5kZXhdJykubGVuZ3RoKSB7DQogICAgICAgIHZhciBwcmV2aW91c1RhYkluZGV4ID0gMDsNCiAgICAgICAgdmFyIGp1bXAgPSAwOw0KICAgICAgICB2YXIgZm9jdXNhYmxlcyA9ICQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QiKTsNCiAgICAgICAgdmFyIGFsbEZvY3VzYWJsZXMgPSAkKCJpbnB1dFtJRF0sIHNlbGVjdCwgdGV4dGFyZWEsIGEsIGFyZWEsIGJ1dHRvbiwgb2JqZWN0LCAuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAuY2xvc2VCdXR0b24iKTsNCg0KICAgICAgICAvLyBQb21vY25hIHVwcmF2YSB0YWJJbmRleG92DQogICAgICAgIFVwQWxsVGFiSW5kZXgoMTAwKTsNCg0KICAgICAgICBmb2N1c2FibGVzLnNvcnQoY29tcGFyZUJ5VGFiSW5kZXgpOw0KDQogICAgICAgIGZvY3VzYWJsZXMuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCd0YWJpbmRleCcpICE9IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdyZW1vdGVMb29rdXAnKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VGFiSW5kZXggPSBOdW1iZXIoJCh0aGlzKS5hdHRyKCd0YWJpbmRleCcpKSArIGp1bXA7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cigndGFiaW5kZXgnLCBuZXdUYWJJbmRleCk7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuc2libGluZ3MoJy5sb29rdXBidXR0b24nKS5hdHRyKCd0YWJpbmRleCcsIG5ld1RhYkluZGV4ICsgMSk7DQogICAgICAgICAgICAgICAgICAgIGp1bXArKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cigndGFiaW5kZXgnLCBOdW1iZXIoJCh0aGlzKS5hdHRyKCd0YWJpbmRleCcpKSArIGp1bXApOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAganVtcCA9IDA7DQoNCiAgICAgICAgYWxsRm9jdXNhYmxlcy5lYWNoKGZ1bmN0aW9uIChpKSB7DQogICAgICAgICAgICB2YXIgdGFiSW5kZXggPSAkKHRoaXMpLmF0dHIoJ3RhYmluZGV4Jyk7DQogICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdpZCcpID09ICd0aXR1bEl0ZW1OYW1lJykNCiAgICAgICAgICAgICAgICB2YXIgcG9tOw0KDQogICAgICAgICAgICBpZiAodGFiSW5kZXggPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgcHJldmlvdXNUYWJJbmRleCsrOw0KICAgICAgICAgICAgICAgICQodGhpcykuYXR0cigndGFiaW5kZXgnLCBwcmV2aW91c1RhYkluZGV4KTsNCiAgICAgICAgICAgICAgICBqdW1wKys7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBwcmV2aW91c1RhYkluZGV4ID0gTnVtYmVyKHRhYkluZGV4KSArIGp1bXA7DQogICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCd0YWJpbmRleCcsIHByZXZpb3VzVGFiSW5kZXgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICAvLyBQb21vY25hIHVwcmF2YSB0YWJJbmRleG92DQogICAgICAgIFNocmluZ1RhYkluZGV4UmFuZ2UoKTsNCiAgICB9DQoNCiAgICAkKCcuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAudWktZGlhbG9nLWNvbnRlbnQsIC5jbG9zZUJ1dHRvbicpLmxpdmUoJ2tleWRvd24nLCBmdW5jdGlvbiAoZGF0YSkgew0KICAgICAgICBpZiAoZGF0YS53aGljaCA9PSAxMyB8fCBkYXRhLndoaWNoID09IDMyKSB7DQogICAgICAgICAgICB2YXIgZm9jdXNhYmxlcyA9ICQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QsIC5hZGRSZW1vdmVTZWN0aW9uLCAubG9va3VwYnV0dG9uLCAuaW5mb0ljb24sIC5jbG9zZUJ1dHRvbiIpOw0KICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBmb2N1c2FibGVzLmluZGV4KHRoaXMpOw0KICAgICAgICAgICAgdmFyIG5leHQ7DQoNCiAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdpbmZvSWNvbicpKSB7DQogICAgICAgICAgICAgICAgJCh0aGlzKS5kZWxheSgxMDApLnF1ZXVlKGZ1bmN0aW9uIChuZXh0KSB7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykubW91c2VvdmVyKCkubW91c2Vkb3duKCk7DQogICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZUJ1dHRvbiA9ICQoJy51aS1kaWFsb2ctdGl0bGViYXItY2xvc2U6dmlzaWJsZScpOw0KICAgICAgICAgICAgICAgICAgICBjbG9zZUJ1dHRvbi5mb2N1c2luKCk7DQogICAgICAgICAgICAgICAgICAgIG5leHQoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIHZhciBjb250ZW50TGF5b3RSb3cgPSAkKHRoaXMpLmNsb3Nlc3QoJ1tpZF49bGF5b3V0Um93XScpLmZpbmQoJ1tpZF49bGF5b3V0Um93Q29udGVudGxheW91dFJvd10nKTsNCiAgICAgICAgICAgICAgICB2YXIgaXNGaXJzdEhpZGRlblNlY3Rpb24gPSB0aGlzLmlkLmluZGV4T2YoJ2FkZFNlY3Rpb25sYXlvdXRSb3cnKSAhPSAtMSAmJiAhY29udGVudExheW90Um93LmlzKCc6dmlzaWJsZScpOw0KICAgICAgICAgICAgICAgIHRoaXMuY2xpY2soKTsNCg0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmlkLmluZGV4T2YoJ2FkZFNlY3Rpb25sYXlvdXRSb3cnKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGVzID0gJCgiaW5wdXRbSURdLCBzZWxlY3QsIHRleHRhcmVhLCBhLCBhcmVhLCBidXR0b24sIG9iamVjdCwgLmFkZFJlbW92ZVNlY3Rpb24sIC5sb29rdXBidXR0b24sIC5pbmZvSWNvbiwgLmNsb3NlQnV0dG9uIik7DQogICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBmb2N1c2FibGVzLmluZGV4KHRoaXMpOw0KDQogICAgICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0SGlkZGVuU2VjdGlvbikNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgLT0gY29udGVudExheW90Um93LmZpbmQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QsIC5hZGRSZW1vdmVTZWN0aW9uLCAubG9va3VwYnV0dG9uLCAuaW5mb0ljb24sIC5jbG9zZUJ1dHRvbiIpLmxlbmd0aDsNCg0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCA8IGZvY3VzYWJsZXMubGVuZ3RoICYmIGZvY3VzYWJsZXMuZXEoY3VycmVudCArIDEpLmxlbmd0aCAmJiAoIWZvY3VzYWJsZXMuZXEoY3VycmVudCkuaXMoJzp2aXNpYmxlJykgfHwgZm9jdXNhYmxlcy5lcShjdXJyZW50KS5pcygnc3BhbicpKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCsrOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGZvY3VzYWJsZXMuZXEoY3VycmVudCkubGVuZ3RoID8gZm9jdXNhYmxlcy5lcShjdXJyZW50KSA6IGZvY3VzYWJsZXMuZXEoMCk7DQogICAgICAgICAgICAgICAgICAgIG5leHQuZm9jdXMoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pZC5pbmRleE9mKCdyZW1vdmVTZWN0aW9ubGF5b3V0Um93JykgIT0gLTEgfHwgJCh0aGlzKS5oYXNDbGFzcygnY2xvc2VCdXR0b24nKSkgew0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCA+IDAgJiYgZm9jdXNhYmxlcy5lcShjdXJyZW50IC0gMSkubGVuZ3RoICYmICghZm9jdXNhYmxlcy5lcShjdXJyZW50KS5pcygnOnZpc2libGUnKSB8fCBmb2N1c2FibGVzLmVxKGN1cnJlbnQpLmlzKCdzcGFuJykpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LS07DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBuZXh0ID0gZm9jdXNhYmxlcy5lcShjdXJyZW50KS5sZW5ndGggPyBmb2N1c2FibGVzLmVxKGN1cnJlbnQpIDogZm9jdXNhYmxlcy5lcSgwKTsNCiAgICAgICAgICAgICAgICAgICAgbmV4dC5mb2N1cygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBJbml0UGlja2VycygpIHsNCiAgICBSZWFkT25seVBpY2tlcnMoKTsNCiAgICBJbml0RGF0ZVBpY2tlclZhbHVlcygpOw0KICAgIEluaXREYXRlUGlja2VyRGF0ZUZvcm1hdCgpOw0KICAgIEluaXREYXRlVGltZVBpY2tlcigpOw0KICAgIEluaXRUaW1lUGlja2VyVmFsdWVzKCk7DQogICAgSW5pdERhdGVSYW5nZVBpY2tlcigpOw0KfQ0KDQpmdW5jdGlvbiBSZWluZGV4RWxlbWVudHMoKSB7DQogICAgdmFyIHJlcGV0aXRpb25TZWN0aW9ucyA9IG5ldyBBcnJheSgpOw0KICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gIklEIjsNCiAgICAkKCJkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc2xheW91dFJvd10iKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGxheW91dFJvdyA9ICQodGhpcyk7DQogICAgICAgIHZhciB2YWx1ZSA9IGxheW91dFJvdy5hdHRyKGF0dHJpYnV0ZU5hbWUpOw0KICAgICAgICB2YXIgaW5kZXhPZiA9IHZhbHVlLmluZGV4T2YocmVwZWF0aW5nUG9zdGZpeCk7DQogICAgICAgIGlmIChpbmRleE9mICE9IC0xKSB7DQogICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBpbmRleE9mKTsNCiAgICAgICAgICAgIGxheW91dFJvdy5hdHRyKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJC5pbkFycmF5KHZhbHVlLCByZXBldGl0aW9uU2VjdGlvbnMpID09IC0xKSB7DQogICAgICAgICAgICByZXBldGl0aW9uU2VjdGlvbnMucHVzaCh2YWx1ZSk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwZXRpdGlvblNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBzZWN0aW9ucyA9ICQoImRpdltpZF49IiArIHJlcGV0aXRpb25TZWN0aW9uc1tpXS5yZXBsYWNlKCdyZXBldGl0aW9uQ29tbWFuZHMnLCAnJykgKyAiXSIpOw0KICAgICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID4gMSkgew0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBzZWN0aW9ucy5sZW5ndGg7IGorKykgew0KICAgICAgICAgICAgICAgIHZhciBsYXlvdXRSb3cgPSBzZWN0aW9ucy5lcShqKTsNCiAgICAgICAgICAgICAgICBsYXlvdXRSb3cuSW5jcmVtZW50RmllbGRJZHMoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gUmVzaXplVGV4dGFyZWFGaWVsZCgpIHsgIC8vIHJlYWRPbmx5IG1vZGUNCiAgICAkKCJ0ZXh0YXJlYVtkaXNhYmxlZF0iKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHRleHRBcmVhID0gJCh0aGlzKTsNCiAgICAgICAgdGV4dEFyZWEuYXR0cigncm93cycsIChNYXRoLnJvdW5kKHRleHRBcmVhWzBdLnNjcm9sbEhlaWdodCAvIDE1KSkpOw0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBDbGVhblJlcGV0aXRpb25CdXR0b25zKCkgew0KICAgICQoJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzbGF5b3V0Um93XScpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgcmVwZXRpdGlvblNlY3Rpb24gPSAkKHRoaXMpOw0KICAgICAgICBpZiAocmVwZXRpdGlvblNlY3Rpb25bMF0ubGFzdENoaWxkICE9IG51bGwpIHsNCiAgICAgICAgICAgIHZhciBwYXJlbnRSZXBldGl0aW9uU2VjdGlvbiA9IHJlcGV0aXRpb25TZWN0aW9uLnBhcmVudCgpOw0KICAgICAgICAgICAgdmFyIGlkID0gZ2V0T3JpZ2luYWxJZChwYXJlbnRSZXBldGl0aW9uU2VjdGlvblswXS5pZCwgJ18nKTsNCiAgICAgICAgICAgIHZhciBhZGRCdXR0b24gPSByZXBldGl0aW9uU2VjdGlvbi5maW5kKCdbaWQ9YWRkU2VjdGlvbicgKyBpZCArICddJyk7DQogICAgICAgICAgICBpZiAoYWRkQnV0dG9uLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlQnV0dG9uID0gcmVwZXRpdGlvblNlY3Rpb24uZmluZCgnW2lkPXJlbW92ZVNlY3Rpb24nICsgaWQgKyAnXScpOw0KICAgICAgICAgICAgICAgIHZhciBzdHJpbmcgPSBhZGRCdXR0b24uYXR0cignb25jbGljaycpLnRvU3RyaW5nKCk7DQogICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gc3RyaW5nLnN1YnN0cmluZyhzdHJpbmcubGFzdEluZGV4T2YoIigiKSArIDEsIHN0cmluZy5sYXN0SW5kZXhPZigiLCB0aGlzIikpLnNwbGl0KCcsJyk7DQogICAgICAgICAgICAgICAgdmFyIG1pblJlcGV0aXRpb24gPSBhcnJheVswXTsNCiAgICAgICAgICAgICAgICB2YXIgbWF4UmVwZXRpdGlvbiA9IGFycmF5WzFdOw0KDQogICAgICAgICAgICAgICAgaWYgKG1pblJlcGV0aXRpb24gPT0gMCAmJiBtYXhSZXBldGl0aW9uID09IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc1ZhbCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICBwYXJlbnRSZXBldGl0aW9uU2VjdGlvbi5maW5kKCdpbnB1dCxzZWxlY3QsdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCAmJiBlbGVtZW50WzBdLnR5cGUgIT0gJ3JhZGlvJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNWYWwgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVmFsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24uaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnV0dG9uLnNob3coKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHNlY3Rpb25zQ291bnQgPSBjb3VudFNlY3Rpb24oYWRkQnV0dG9uLCAnYWRkU2VjdGlvbicpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbnNDb3VudCA9PSBtYXhSZXBldGl0aW9uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24uaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnV0dG9uLnNob3coKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uc0NvdW50ID09IG1pblJlcGV0aXRpb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbi5zaG93KCk7DQogICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVCdXR0b24uaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25zQ291bnQgPiAwICYmIG1pblJlcGV0aXRpb24gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnV0dG9uLnNob3coKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBMYXlvdXRUZW1wUmVwZXRpdG9uU2VjdGlvbigpIHsNCiAgICAkKCdkaXZbYWRqdXN0cG9zaXRpb25ePXRydWVdJykuZWFjaChMYXlvdXQpOw0KfQ0KDQpmdW5jdGlvbiBJbml0RGVidWdDb2RlKCkgew0KICAgIHZhciBpZ25vcmVDbGllbnRFcnJvcnMgPSAkLkdldFVybFBhcmFtKCJpZ25vcmVDbGllbnRFcnJvcnMiKTsNCiAgICBpZiAoaWdub3JlQ2xpZW50RXJyb3JzICE9IDApDQogICAgICAgIHZhbGlkYXRvck9iamVjdC5zZXR0aW5ncy5pZ25vcmVDbGllbnRFcnJvcnMgPSB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBJbml0RXhpc3RpbmdGb3JtKCkgew0KICAgICQoImZvcm0gOnJhZGlvOmNoZWNrZWQiKS5jbGljaygpOw0KfQ0KDQpmdW5jdGlvbiBSZWFkT25seVBpY2tlcnMoKSB7DQogICAgJCgiLmRhdGVwaWNrZXJbcmVhZG9ubHk9J3JlYWRvbmx5J10sLmRhdGVwaWNrZXJJU09bcmVhZG9ubHk9J3JlYWRvbmx5J10iKS5kYXRlcGlja2VyKHsgbWluRGF0ZTogLTEsIG1heERhdGU6IC0yIH0pOw0KICAgICQoIi50aW1lcGlja2VyW3JlYWRvbmx5PSdyZWFkb25seSddIikudGltZXBpY2tlcih7IGhvdXJNaW46IDAsIGhvdXJNYXg6IDAsIG1pbnV0ZU1pbjogMCwgbWludXRlTWF4OiAwIH0pOw0KICAgICQoIi5kYXRldGltZXBpY2tlcltyZWFkb25seT0ncmVhZG9ubHknXSIpLmRhdGV0aW1lcGlja2VyKHsgbWluRGF0ZTogLTEsIG1heERhdGU6IC0yLCBob3VyTWluOiAwLCBob3VyTWF4OiAwLCBtaW51dGVNaW46IDAsIG1pbnV0ZU1heDogMCB9KTsNCn0NCg0KZnVuY3Rpb24gSW5pdERhdGVQaWNrZXJWYWx1ZXMoKSB7DQogICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICAvLyBFbiBpcyBkZWZhdWx0DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICQuZGF0ZXBpY2tlci5yZWdpb25hbFsnc2snXSA9IHsNCiAgICAgICAgICAgICAgICBjbG9zZVRleHQ6ICdaYXZyaWXFpScsDQogICAgICAgICAgICAgICAgcHJldlRleHQ6ICcmI3gzYztQcmVkY2jDoWR6YWrDumNpJywNCiAgICAgICAgICAgICAgICBuZXh0VGV4dDogJ05hc2xlZHVqw7pjaSYjeDNlOycsDQogICAgICAgICAgICAgICAgY3VycmVudFRleHQ6ICdEbmVzJywNCiAgICAgICAgICAgICAgICBtb250aE5hbWVzOiBbJ0phbnXDoXInLCAnRmVicnXDoXInLCAnTWFyZWMnLCAnQXByw61sJywgJ03DoWonLCAnSsO6bicsDQogICAgICAgICAgICAgICAgJ0rDumwnLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPa3TDs2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddLA0KICAgICAgICAgICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTcOhaicsICdKw7puJywNCiAgICAgICAgICAgICAgICAnSsO6bCcsICdBdWcnLCAnU2VwJywgJ09rdCcsICdOb3YnLCAnRGVjJ10sDQogICAgICAgICAgICAgICAgZGF5TmFtZXM6IFsnTmVkZcS+YScsICdQb25kZWxvaycsICdVdG9yb2snLCAnU3RyZWRhJywgJ8WgdHZydG9rJywgJ1BpYXRvaycsICdTb2JvdGEnXSwNCiAgICAgICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ05lZCcsICdQb24nLCAnVXRvJywgJ1N0cicsICfFoHR2JywgJ1BpYScsICdTb2InXSwNCiAgICAgICAgICAgICAgICBkYXlOYW1lc01pbjogWydOZScsICdQbycsICdVdCcsICdTdCcsICfFoHQnLCAnUGlhJywgJ1NvJ10sDQogICAgICAgICAgICAgICAgd2Vla0hlYWRlcjogJ1R5JywNCiAgICAgICAgICAgICAgICAvL2RhdGVGb3JtYXQ6ICdkZC5tbS55eScsDQogICAgICAgICAgICAgICAgZmlyc3REYXk6IDEsDQogICAgICAgICAgICAgICAgaXNSVEw6IGZhbHNlLA0KICAgICAgICAgICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsDQogICAgICAgICAgICAgICAgeWVhclN1ZmZpeDogJycNCiAgICAgICAgICAgIH07DQogICAgfQ0KDQogICAgJC5kYXRlcGlja2VyLnNldERlZmF1bHRzKCQuZGF0ZXBpY2tlci5yZWdpb25hbFsnc2snXSk7DQp9DQoNCmZ1bmN0aW9uIEluaXRUaW1lUGlja2VyVmFsdWVzKCkgew0KICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgY2FzZSAnZW4nOiAvLyBFbiBpcyBkZWZhdWx0DQogICAgICAgICAgICAkKCIudGltZXBpY2tlciIpLnRpbWVwaWNrZXIoew0KICAgICAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkgew0KICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZvY3Vzb3V0KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICQoIi50aW1lcGlja2VyIikudGltZXBpY2tlcih7DQogICAgICAgICAgICAgICAgdGltZU9ubHlUaXRsZTogJ1Z5YmVyIMSNYXMnLA0KICAgICAgICAgICAgICAgIHRpbWVUZXh0OiAnxIxhcycsDQogICAgICAgICAgICAgICAgaG91clRleHQ6ICdIb2RpbmEnLA0KICAgICAgICAgICAgICAgIG1pbnV0ZVRleHQ6ICfQnGluw7p0YScsDQogICAgICAgICAgICAgICAgc2Vjb25kVGV4dDogJ1Nla3VuZGEnLA0KICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0OiAnQWt0dcOhbG55JywNCiAgICAgICAgICAgICAgICBjbG9zZVRleHQ6ICdWeWJyYcWlJywNCiAgICAgICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5mb2N1c291dCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgIH07DQoNCiAgICAkKCcudGltZXBpY2tlcicpLmxpdmUoJ2tleXByZXNzJywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgdmFyIG5ld1ZhbCA9ICQodGhpcykudmFsKCkgKyAoZS53aGljaCAhPT0gMCA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZS53aGljaCkgOiAnJykNCiAgICAgICAgdmFyIGNoYXJQYXR0ZXJuID0gL15bMC05XT8kfF5cOj8kLzsNCg0KICAgICAgICBpZiAoZS53aGljaCAhPSA4ICYmICFlLmN0cmxLZXkgJiYgIWNoYXJQYXR0ZXJuLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKSkgJiYgbmV3VmFsLmxlbmd0aCA+ICQodGhpcykudmFsKCkubGVuZ3RoKQ0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgIH0pOw0KfQ0KDQovLyBQb3RyZWJuZSBwcmUgRGF0ZVJhbmdlUGlja2VyDQokLmRhdGVwaWNrZXIuX2RlZmF1bHRzLm9uQWZ0ZXJVcGRhdGUgPSBudWxsOw0KDQp2YXIgZGF0ZXBpY2tlcl9fdXBkYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcjsNCiQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlciA9IGZ1bmN0aW9uIChpbnN0KSB7DQogICAgZGF0ZXBpY2tlcl9fdXBkYXRlRGF0ZXBpY2tlci5jYWxsKHRoaXMsIGluc3QpOw0KDQogICAgdmFyIG9uQWZ0ZXJVcGRhdGUgPSB0aGlzLl9nZXQoaW5zdCwgJ29uQWZ0ZXJVcGRhdGUnKTsNCg0KICAgIGlmIChvbkFmdGVyVXBkYXRlKQ0KICAgICAgICBvbkFmdGVyVXBkYXRlLmFwcGx5KChpbnN0LmlucHV0ID8gaW5zdC5pbnB1dFswXSA6IG51bGwpLCBbKGluc3QuaW5wdXQgPyBpbnN0LmlucHV0LnZhbCgpIDogJycpLCBpbnN0XSk7DQp9DQovLyAtLS0tDQoNCmZ1bmN0aW9uIEluaXREYXRlUmFuZ2VQaWNrZXIoKSB7DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBjdXIgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgdmFyIHBydiA9IG5ldyBBcnJheSgpOw0KICAgICAgICB2YXIgbGlzdCA9ICQoJy5kYXRlcmFuZ2VwaWNrZXJkaXYnKTsNCiAgICAgICAgdmFyIGNvdW50ID0gbGlzdC5sZW5ndGg7DQogICAgICAgIHZhciBudW1iZXJPZk1vbnRoc1ZhbHMgPSBuZXcgQXJyYXkoKTsNCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsNCiAgICAgICAgICAgIHZhciBkUlBJbnB1dDsNCg0KICAgICAgICAgICAgaWYgKGxpc3RbaV0pIHsNCiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoRGl2ID0gbGlzdFtpXS5wYXJlbnROb2RlOw0KICAgICAgICAgICAgICAgIGRSUElucHV0ID0gJChzZWFyY2hEaXYpLmZpbmQoImlucHV0W0lEXSIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoZFJQSW5wdXRbMF0udmFsdWUgIT0gJycpIHsNCiAgICAgICAgICAgICAgICB2YXIgdiA9IGRSUElucHV0WzBdLnZhbHVlOw0KICAgICAgICAgICAgICAgIHZhciBkOw0KDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHYuaW5kZXhPZignIC0gJykgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSB2LnNwbGl0KCcgLSAnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBydi5wdXNoKCQuZGF0ZXBpY2tlci5wYXJzZURhdGUoJ2RkLm1tLnl5JywgZFswXSkuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ci5wdXNoKCQuZGF0ZXBpY2tlci5wYXJzZURhdGUoJ2RkLm1tLnl5JywgZFsxXSkuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2Lmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lID0gJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgnZGQubW0ueXknLCB2KS5nZXRUaW1lKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBwcnYucHVzaCh0aW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ci5wdXNoKHRpbWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgew0KICAgICAgICAgICAgICAgICAgICBjdXIucHVzaCgtMSk7DQogICAgICAgICAgICAgICAgICAgIHBydi5wdXNoKC0xKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBjdXIucHVzaCgtMSk7DQogICAgICAgICAgICAgICAgcHJ2LnB1c2goLTEpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBudW1iZXJPZk1vbnRoc1ZhbHMucHVzaCgxKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGFycmF5T2JqZWN0SW5kZXhPZihteUFycmF5LCBzZWFyY2hPYmplY3QpIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXlBcnJheS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIGlmIChteUFycmF5W2ldID09PSBzZWFyY2hPYmplY3QpDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICB9DQoNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOiAvLyBFbiBpcyBkZWZhdWx0DQogICAgICAgICAgICAgICAgJCgnLmRhdGVyYW5nZXBpY2tlcmRpdicpDQogICAgICAgICAgICAgICAgICAuZGF0ZXBpY2tlcih7DQogICAgICAgICAgICAgICAgICAgICAgd2Vla0hlYWRlcjogJ1R5JywNCiAgICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiAnZGQubW0ueXknLA0KICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF5OiAxLA0KICAgICAgICAgICAgICAgICAgICAgIGlzUlRMOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgICBzaG93TW9udGhBZnRlclllYXI6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgIHllYXJTdWZmaXg6ICcnLA0KICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICAgeWVhclJhbmdlOiAiLTEwMDorMTAwIiwNCiAgICAgICAgICAgICAgICAgICAgICBzaG93QnV0dG9uUGFuZWw6IHRydWUsDQoNCiAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTaG93RGF5OiBmdW5jdGlvbiAoZGF0ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCAoKGRhdGUuZ2V0VGltZSgpID49IE1hdGgubWluKHBydltpbmRleF0sIGN1cltpbmRleF0pICYmIGRhdGUuZ2V0VGltZSgpIDw9IE1hdGgubWF4KHBydltpbmRleF0sIGN1cltpbmRleF0pKSA/ICdkYXRlLXJhbmdlLXNlbGVjdGVkJyA6ICcnKV07DQogICAgICAgICAgICAgICAgICAgICAgfSwNCg0KICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQxLCBkMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRSUElucHV0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hEaXYgPSB0aGlzLnBhcmVudE5vZGU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dCA9ICQoc2VhcmNoRGl2KS5maW5kKCJpbnB1dFtJRF0iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkUlBJbnB1dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2W2luZGV4XSA9IGN1cltpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJbaW5kZXhdID0gKG5ldyBEYXRlKGluc3Quc2VsZWN0ZWRZZWFyLCBpbnN0LnNlbGVjdGVkTW9udGgsIGluc3Quc2VsZWN0ZWREYXkpKS5nZXRUaW1lKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcnZbaW5kZXhdID09IC0xIHx8IHBydltpbmRleF0gPT0gY3VyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2W2luZGV4XSA9IGN1cltpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkUlBJbnB1dCkudmFsKGRhdGVUZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQxID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoJ2RkLm1tLnl5JywgbmV3IERhdGUoTWF0aC5taW4ocHJ2W2luZGV4XSwgY3VyW2luZGV4XSkpLCB7fSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDIgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnZGQubW0ueXknLCBuZXcgRGF0ZShNYXRoLm1heChwcnZbaW5kZXhdLCBjdXJbaW5kZXhdKSksIHt9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRSUElucHV0KS52YWwoZDEgKyAnIC0gJyArIGQyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24gKHllYXIsIG1vbnRoLCBpbnN0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGUgb24gbW9udGggb3IgeWVhciBjaGFuZ2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyp2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyW2luZGV4XSA9IHBydltpbmRleF0gPSAtMTsqLw0KICAgICAgICAgICAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgICAgICAgICAgICBvbkFmdGVyVXBkYXRlOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzRFJQRGlyID0gdGhpczsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0iaGlkZSIgZGF0YS1ldmVudD0iY2xpY2siPlNlbGVjdDxcL2J1dHRvbj4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKCQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRSUElucHV0Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNEUlBEaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaERpdiA9IHRoaXNEUlBEaXIucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQgPSAkKHNlYXJjaERpdikuZmluZCgiaW5wdXRbSURdIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRSUElucHV0WzBdLnZhbHVlID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGFycmF5T2JqZWN0SW5kZXhPZihsaXN0LCB0aGlzRFJQRGlyKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJbaW5kZXhdID0gcHJ2W2luZGV4XSA9IC0xOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpc0RSUERpcikuaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRSUElucHV0LmZvY3Vzb3V0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgZGF0YS1ldmVudD0iY2xpY2siPkNsZWFyPFwvYnV0dG9uPicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJCgnLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZScpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpc0RSUERpcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRSUElucHV0Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNEUlBEaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaERpdiA9IHRoaXNEUlBEaXIucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQgPSAkKHNlYXJjaERpdikuZmluZCgiaW5wdXRbSURdIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRSUElucHV0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRSUElucHV0WzBdLnZhbHVlID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cltpbmRleF0gPSBwcnZbaW5kZXhdID0gLTE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpc0RSUERpcikuZGF0ZXBpY2tlcigicmVmcmVzaCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiBkYXRhLWV2ZW50PSJjbGljayI+PjxcL2J1dHRvbj4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKCQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXNEUlBEaXIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPCA2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPSBudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdICsgMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9ICQodGhpc0RSUERpcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPCA1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0ZXBpY2tlcigib3B0aW9uIiwgIm51bWJlck9mTW9udGhzIiwgWzEsIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF1dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRlcGlja2VyKCJvcHRpb24iLCAibnVtYmVyT2ZNb250aHMiLCBbbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSAtIDMsIDRdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiBkYXRhLWV2ZW50PSJjbGljayI+PDxcL2J1dHRvbj4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKCQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXNEUlBEaXIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPiAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPSBudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdIC0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9ICQodGhpc0RSUERpcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPCA1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0ZXBpY2tlcigib3B0aW9uIiwgIm51bWJlck9mTW9udGhzIiwgWzEsIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF1dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRlcGlja2VyKCJvcHRpb24iLCAibnVtYmVyT2ZNb250aHMiLCBbbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSAtIDMsIDRdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZFJQSW5wdXQ7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzRFJQRGlyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaERpdiA9IHRoaXNEUlBEaXIucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dCA9ICQoc2VhcmNoRGl2KS5maW5kKCJpbnB1dFtJRF0iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNEZXNjZW5kYW50T3JVaURQKHBhcmVudCwgY2hpbGQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGNoaWxkLnBhcmVudE5vZGU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBwYXJlbnQgfHwgbm9kZS5jbGFzc05hbWUuaW5kZXhPZigndWktZGF0ZXBpY2tlcicpICE9IC0xKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5pZCAhPSBkUlBJbnB1dFswXS5pZCAmJiAhaXNEZXNjZW5kYW50T3JVaURQKHRoaXNEUlBEaXIsIGUudGFyZ2V0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkUlBJbnB1dFswXS52YWx1ZSA9PSAnJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpc0RSUERpcik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyW2luZGV4XSA9IHBydltpbmRleF0gPSAtMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXNEUlBEaXIpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dC5mb2N1c291dCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgekluZGV4OiAxIH0pOw0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIH0pLmhpZGUoKTsNCg0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICAkKCcuZGF0ZXJhbmdlcGlja2VyZGl2JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kYXRlcGlja2VyKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVRleHQ6ICdaYXZyaWXFpScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlRleHQ6ICcmI3gzYztQcmVkY2jDoWR6YWrDumNpJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0VGV4dDogJ05hc2xlZHVqw7pjaSYjeDNlOycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQ6ICdEbmVzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aE5hbWVzOiBbJ0phbnXDoXInLCAnRmVicnXDoXInLCAnTWFyZWMnLCAnQXByw61sJywgJ03DoWonLCAnSsO6bicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSsO6bCcsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09rdMOzYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNw6FqJywgJ0rDum4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0rDumwnLCAnQXVnJywgJ1NlcCcsICdPa3QnLCAnTm92JywgJ0RlYyddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheU5hbWVzOiBbJ05lZGXEvmEnLCAnUG9uZGVsb2snLCAnVXRvcm9rJywgJ1N0cmVkYScsICfFoHR2cnRvaycsICdQaWF0b2snLCAnU29ib3RhJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5TmFtZXNTaG9ydDogWydOZWQnLCAnUG9uJywgJ1V0bycsICdTdHInLCAnxaB0dicsICdQaWEnLCAnU29iJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5TmFtZXNNaW46IFsnTmUnLCAnUG8nLCAnVXQnLCAnU3QnLCAnxaB0JywgJ1BpYScsICdTbyddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtIZWFkZXI6ICdUeScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ2RkLm1tLnl5JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdERheTogMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JUTDogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01vbnRoQWZ0ZXJZZWFyOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyU3VmZml4OiAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VNb250aDogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXJSYW5nZTogIi0xMDA6KzEwMCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0J1dHRvblBhbmVsOiB0cnVlLA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2hvd0RheTogZnVuY3Rpb24gKGRhdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXMpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgKChkYXRlLmdldFRpbWUoKSA+PSBNYXRoLm1pbihwcnZbaW5kZXhdLCBjdXJbaW5kZXhdKSAmJiBkYXRlLmdldFRpbWUoKSA8PSBNYXRoLm1heChwcnZbaW5kZXhdLCBjdXJbaW5kZXhdKSkgPyAnZGF0ZS1yYW5nZS1zZWxlY3RlZCcgOiAnJyldOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdDogZnVuY3Rpb24gKGRhdGVUZXh0LCBpbnN0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkMSwgZDI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkUlBJbnB1dDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXMpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoRGl2ID0gdGhpcy5wYXJlbnROb2RlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQgPSAkKHNlYXJjaERpdikuZmluZCgiaW5wdXRbSURdIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFJQSW5wdXQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydltpbmRleF0gPSBjdXJbaW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyW2luZGV4XSA9IChuZXcgRGF0ZShpbnN0LnNlbGVjdGVkWWVhciwgaW5zdC5zZWxlY3RlZE1vbnRoLCBpbnN0LnNlbGVjdGVkRGF5KSkuZ2V0VGltZSgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJ2W2luZGV4XSA9PSAtMSB8fCBwcnZbaW5kZXhdID09IGN1cikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydltpbmRleF0gPSBjdXJbaW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZFJQSW5wdXQpLnZhbChkYXRlVGV4dCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkMSA9ICQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKCdkZC5tbS55eScsIG5ldyBEYXRlKE1hdGgubWluKHBydltpbmRleF0sIGN1cltpbmRleF0pKSwge30pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQyID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoJ2RkLm1tLnl5JywgbmV3IERhdGUoTWF0aC5tYXgocHJ2W2luZGV4XSwgY3VyW2luZGV4XSkpLCB7fSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkUlBJbnB1dCkudmFsKGQxICsgJyAtICcgKyBkMik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2VNb250aFllYXI6IGZ1bmN0aW9uICh5ZWFyLCBtb250aCwgaW5zdCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCBkYXRlIG9uIG1vbnRoIG9yIHllYXIgY2hhbmdlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cltpbmRleF0gPSBwcnZbaW5kZXhdID0gLTE7Ki8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25BZnRlclVwZGF0ZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhpc0RSUERpciA9IHRoaXM7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsIiBkYXRhLWhhbmRsZXI9ImhpZGUiIGRhdGEtZXZlbnQ9ImNsaWNrIj5WeWJyYcWlPFwvYnV0dG9uPicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJCgnLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZScpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZFJQSW5wdXQ7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0RSUERpcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoRGl2ID0gdGhpc0RSUERpci5wYXJlbnROb2RlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dCA9ICQoc2VhcmNoRGl2KS5maW5kKCJpbnB1dFtJRF0iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFJQSW5wdXRbMF0udmFsdWUgPT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXNEUlBEaXIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cltpbmRleF0gPSBwcnZbaW5kZXhdID0gLTE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzRFJQRGlyKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQuZm9jdXNvdXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiBkYXRhLWV2ZW50PSJjbGljayI+VnltYcW+PFwvYnV0dG9uPicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJCgnLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZScpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpc0RSUERpcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRSUElucHV0Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNEUlBEaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaERpdiA9IHRoaXNEUlBEaXIucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQgPSAkKHNlYXJjaERpdikuZmluZCgiaW5wdXRbSURdIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRSUElucHV0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRSUElucHV0WzBdLnZhbHVlID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cltpbmRleF0gPSBwcnZbaW5kZXhdID0gLTE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpc0RSUERpcikuZGF0ZXBpY2tlcigicmVmcmVzaCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiBkYXRhLWV2ZW50PSJjbGljayI+PjxcL2J1dHRvbj4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKCQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXNEUlBEaXIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPCA2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPSBudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdICsgMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9ICQodGhpc0RSUERpcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPCA1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0ZXBpY2tlcigib3B0aW9uIiwgIm51bWJlck9mTW9udGhzIiwgWzEsIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF1dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRlcGlja2VyKCJvcHRpb24iLCAibnVtYmVyT2ZNb250aHMiLCBbbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSAtIDMsIDRdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiBkYXRhLWV2ZW50PSJjbGljayI+PDxcL2J1dHRvbj4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKCQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXNEUlBEaXIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPiAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPSBudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdIC0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9ICQodGhpc0RSUERpcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPCA1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0ZXBpY2tlcigib3B0aW9uIiwgIm51bWJlck9mTW9udGhzIiwgWzEsIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF1dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRlcGlja2VyKCJvcHRpb24iLCAibnVtYmVyT2ZNb250aHMiLCBbbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSAtIDMsIDRdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZFJQSW5wdXQ7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzRFJQRGlyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaERpdiA9IHRoaXNEUlBEaXIucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dCA9ICQoc2VhcmNoRGl2KS5maW5kKCJpbnB1dFtJRF0iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNEZXNjZW5kYW50T3JVaURQKHBhcmVudCwgY2hpbGQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGNoaWxkLnBhcmVudE5vZGU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBwYXJlbnQgfHwgbm9kZS5jbGFzc05hbWUuaW5kZXhPZigndWktZGF0ZXBpY2tlcicpICE9IC0xKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5pZCAhPSBkUlBJbnB1dFswXS5pZCAmJiAhaXNEZXNjZW5kYW50T3JVaURQKHRoaXNEUlBEaXIsIGUudGFyZ2V0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkUlBJbnB1dFswXS52YWx1ZSA9PSAnJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpc0RSUERpcik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyW2luZGV4XSA9IHBydltpbmRleF0gPSAtMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXNEUlBEaXIpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dC5mb2N1c291dCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgekluZGV4OiAxIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmhpZGUoKTsNCiAgICAgICAgfQ0KDQogICAgICAgICQoJy5kYXRlcmFuZ2VwaWNrZXInKS5vbignZm9jdXMnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgdiA9IHRoaXMudmFsdWU7DQogICAgICAgICAgICB2YXIgZDsNCiAgICAgICAgICAgIHZhciBpbmRleCA9IGFycmF5T2JqZWN0SW5kZXhPZihsaXN0LCB0aGlzKTsNCg0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBpZiAodi5pbmRleE9mKCcgLSAnKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICBkID0gdi5zcGxpdCgnIC0gJyk7DQoNCiAgICAgICAgICAgICAgICAgICAgcHJ2W2luZGV4XSA9ICQuZGF0ZXBpY2tlci5wYXJzZURhdGUoJ2RkLm1tLnl5JywgZFswXSkuZ2V0VGltZSgpOw0KICAgICAgICAgICAgICAgICAgICBjdXJbaW5kZXhdID0gJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgnZGQubW0ueXknLCBkWzFdKS5nZXRUaW1lKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHYubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgICAgICAgICBwcnZbaW5kZXhdID0gY3VyW2luZGV4XSA9ICQuZGF0ZXBpY2tlci5wYXJzZURhdGUoJ2RkLm1tLnl5JywgdikuZ2V0VGltZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICBjdXJbaW5kZXhdID0gcHJ2W2luZGV4XSA9IC0xOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgZFJQRGl2Ow0KDQogICAgICAgICAgICBpZiAodGhpcykgew0KICAgICAgICAgICAgICAgIHZhciBzZWFyY2hEaXYgPSB0aGlzLnBhcmVudE5vZGU7DQogICAgICAgICAgICAgICAgZFJQRGl2ID0gJChzZWFyY2hEaXYpLmZpbmQoIi5kYXRlcmFuZ2VwaWNrZXJkaXYiKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKGN1cltpbmRleF0gPiAtMSkNCiAgICAgICAgICAgICAgICAkKGRSUERpdikuZGF0ZXBpY2tlcignc2V0RGF0ZScsIG5ldyBEYXRlKGN1cltpbmRleF0pKTsNCg0KICAgICAgICAgICAgJChkUlBEaXYpLmRhdGVwaWNrZXIoJ3JlZnJlc2gnKS5zaG93KCk7DQogICAgICAgIH0pOw0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBMb2NhbGl6ZUVycm9yTWVzc2FnZXMoKSB7DQogICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICAvLyBFbiBpcyBkZWZhdWx0DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoalF1ZXJ5LnZhbGlkYXRvci5tZXNzYWdlcywgew0KICAgICAgICAgICAgICAgIGRhdGU6ICJaYWRhanRlIHBsYXRuw70gZMOhdHVtLiIsDQogICAgICAgICAgICAgICAgZGF0ZUlTTzogIlphZGFqdGUgcGxhdG7DvSBkw6F0dW0gKElTTykuIg0KICAgICAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBJbml0RGF0ZVBpY2tlckRhdGVGb3JtYXQoKSB7DQogICAgJCgiLmRhdGVwaWNrZXIiKS5kYXRlcGlja2VyKHsNCiAgICAgICAgZGF0ZUZvcm1hdDogJ2RkLm1tLnl5JywNCiAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkgew0KICAgICAgICAgICAgJCh0aGlzKS5mb2N1c291dCgpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgiLmRhdGVwaWNrZXJJU08iKS5kYXRlcGlja2VyKHsNCiAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJywNCiAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkgew0KICAgICAgICAgICAgJCh0aGlzKS5mb2N1c291dCgpOw0KICAgICAgICB9DQogICAgfSk7DQp9DQoNCmZ1bmN0aW9uIEluaXREYXRlVGltZVBpY2tlcigpIHsNCiAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgIGNhc2UgJ2VuJzogLy8gRW4gaXMgZGVmYXVsdA0KICAgICAgICAgICAgJCgiLmRhdGV0aW1lcGlja2VyIikuZGF0ZXRpbWVwaWNrZXIoew0KICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5tbS55eScsDQogICAgICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gKGRhdGVUZXh0LCBpbnN0KSB7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuZm9jdXNvdXQoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgJCgiLmRhdGV0aW1lcGlja2VyIikuZGF0ZXRpbWVwaWNrZXIoew0KICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5tbS55eScsDQogICAgICAgICAgICAgICAgdGltZU9ubHlUaXRsZTogJ1Z5YmVyIGTDoXR1bScsDQogICAgICAgICAgICAgICAgdGltZVRleHQ6ICfEjGFzJywNCiAgICAgICAgICAgICAgICBob3VyVGV4dDogJ0hvZGluYScsDQogICAgICAgICAgICAgICAgbWludXRlVGV4dDogJ9CcaW7DunRhJywNCiAgICAgICAgICAgICAgICBzZWNvbmRUZXh0OiAnU2VrdW5kYScsDQogICAgICAgICAgICAgICAgY3VycmVudFRleHQ6ICdBa3R1w6FsbnknLA0KICAgICAgICAgICAgICAgIGNsb3NlVGV4dDogJ1Z5YnJhxaUnLA0KICAgICAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkgew0KICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZvY3Vzb3V0KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBJbml0U2VjdGlvbkFjY29yZGlvbigpIHsNCiAgICAkKCJmb3JtIikuSW5pdFNlY3Rpb25BY2NvcmRpb24oKTsNCn0NCg0KZnVuY3Rpb24gSW5pdFJhZGlvKCkgew0KICAgICQoImlucHV0W3R5cGU9J3JhZGlvJ11bY2hlY2tlZF0iKS5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgcmFkaW8gPSAkKHRoaXMpOw0KICAgICAgICBpZiAocmFkaW8uYXR0cigiZGlzYWJsZWQiKSAhPT0gdW5kZWZpbmVkIHx8IHJhZGlvLmF0dHIoInJlYWRvbmx5IikgIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgcmFkaW8uYXR0cigiY2hlY2tlZCIsICJ0cnVlIik7DQogICAgICAgIH0NCg0KICAgICAgICByYWRpby5jbGljaygpOw0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBJbml0QnV0dG9ucyhjb250ZXh0KSB7DQoJaWYgKGNvbnRleHQgPT0gbnVsbCkgew0KICAgICQoIi5idXR0b24iKS5idXR0b24oKTsNCiAgICAkKCIjY2FuY2VsRm9ybSIpLmNsaWNrKFRyeVJlZGlyZWN0VG9SZXR1cm5VcmwpOw0KCX0gZWxzZSB7DQoJCWNvbnRleHQuZmluZCgiLmJ1dHRvbiIpLmJ1dHRvbigpOw0KfQ0KfQ0KDQpmdW5jdGlvbiBJbml0UG9wVXBEaWFsb2coKSB7DQogICAgJCgiZm9ybSIpLkluaXRQb3BVcERpYWxvZygpOw0KfQ0KDQp2YXIgb1RhYmxlOw0KDQpmdW5jdGlvbiBmbkdldFNlbGVjdGVkKG9UYWJsZUxvY2FsKSB7DQogICAgdmFyIGFSZXR1cm4gPSBuZXcgQXJyYXkoKTsNCiAgICB2YXIgYVRycyA9IG9UYWJsZUxvY2FsLmZuR2V0Tm9kZXMoKTsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYVRycy5sZW5ndGg7IGkrKykgew0KICAgICAgICBpZiAoJChhVHJzW2ldKS5oYXNDbGFzcygncm93X3NlbGVjdGVkJykpIHsNCiAgICAgICAgICAgIGFSZXR1cm4ucHVzaChhVHJzW2ldKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gYVJldHVybjsNCn0NCg0KZnVuY3Rpb24gSW5pdERhdGFUYWJsZVBsdWdJbigpIHsNCiAgICAkLmZuLmRhdGFUYWJsZUV4dC5vQXBpLmZuRmlsdGVyT25SZXR1cm4gPSBmdW5jdGlvbiAob1NldHRpbmdzKSB7DQogICAgICAgIHZhciB0aGF0ID0gdGhpczsNCg0KICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24gKGkpIHsNCiAgICAgICAgICAgICQuZm4uZGF0YVRhYmxlRXh0LmlBcGlJbmRleCA9IGk7DQogICAgICAgICAgICB2YXIgYW5Db250cm9sID0gJCgnaW5wdXQnLCB0aGF0LmZuU2V0dGluZ3MoKS5hYW5GZWF0dXJlcy5mKTsNCiAgICAgICAgICAgIGFuQ29udHJvbC51bmJpbmQoJ2tleXVwJykuYmluZCgna2V5cHJlc3MnLCBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgIGlmIChlLndoaWNoID09IDEzKSB7DQogICAgICAgICAgICAgICAgICAgICQuZm4uZGF0YVRhYmxlRXh0LmlBcGlJbmRleCA9IGk7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuZm5GaWx0ZXIoYW5Db250cm9sLnZhbCgpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgICB9KTsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgfTsNCn0NCg0KZnVuY3Rpb24gaW5pdFJlcGV0aXRpb25TZWN0aW9uKG1pblJlcGV0aXRpb24sIG1heFJlcGV0aXRpb24sIHNlbmRlcikgew0KICAgIGlmIChtaW5SZXBldGl0aW9uID09IDEpIHsNCiAgICAgICAgdmFyIHJlcGV0aXRpdmVDb21tYW5kcyA9ICQoJ2RpdltpZF49JyArIHNlbmRlciArICddJykuY2hpbGRyZW4oJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzXScpOw0KICAgICAgICByZXBldGl0aXZlQ29tbWFuZHMuY2hpbGRyZW4oJ3NwYW5baWRePXJlbW92ZVNlY3Rpb25dJykuaGlkZSgpOw0KICAgIH0NCiAgICBpZiAobWluUmVwZXRpdGlvbiA+IDEpIHsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW5SZXBldGl0aW9uOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhZGRCdXR0b24gPSAkKCdkaXZbaWRePScgKyBzZW5kZXIgKyAnXScpLmxhc3QoKS5maW5kKCcjYWRkU2VjdGlvbicgKyBzZW5kZXIpOw0KICAgICAgICAgICAgYWRkU2VjdGlvbihtaW5SZXBldGl0aW9uLCBtYXhSZXBldGl0aW9uLCBhZGRCdXR0b24pOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UgaWYgKG1pblJlcGV0aXRpb24gPT0gMCAmJiAoKHByb2plY3RUeXBlID09ICJORVYiICYmICQoJ2RpdltpZF49JyArIHNlbmRlciArICddJykuYXR0cigiaXNlbXB0eSIpICE9ICJmYWxzZSIpIHx8IHByb2plY3RUeXBlICE9ICJORVYiKSkgew0KICAgICAgICB2YXIgcmVtb3ZlQnV0dG9uID0gJCgnZGl2W2lkXj0nICsgc2VuZGVyICsgJ10nKS5sYXN0KCkuZmluZCgnI3JlbW92ZVNlY3Rpb24nICsgc2VuZGVyKTsNCiAgICAgICAgcmVtb3ZlU2VjdGlvbihtaW5SZXBldGl0aW9uLCByZW1vdmVCdXR0b24pOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gcGFyc2VJZChzZW5kZXIsIHJlcGxhY2VUZXh0KSB7DQogICAgdmFyIGlkID0gc2VuZGVyLmlkOw0KICAgIGlmIChpZCA9PSBudWxsKSB7DQogICAgICAgIGlkID0gc2VuZGVyWzBdLmlkOw0KICAgIH0NCiAgICByZXR1cm4gaWQucmVwbGFjZShyZXBsYWNlVGV4dCwgJycpOw0KfQ0KDQpmdW5jdGlvbiBjb3VudFNlY3Rpb24oc2VuZGVyLCByZXBsYWNlVGV4dCkgew0KICAgIGlmICgkKHNlbmRlcikuaGFzQ2xhc3MoImNsb3NlQnV0dG9uIikgPT0gdHJ1ZSkgew0KICAgICAgICB2YXIgbGF5b3V0Um93ID0gJChzZW5kZXIpLmNsb3Nlc3QoJ2RpdltpZF49bGF5b3V0Um93XScpOw0KICAgICAgICB2YXIgbGF5b3V0Um93SWQgPSBsYXlvdXRSb3cuYXR0cigiSUQiKS5zcGxpdCgnXycpWzBdOw0KICAgICAgICByZXR1cm4gbGF5b3V0Um93LnBhcmVudCgpLmNoaWxkcmVuKCkuZmlsdGVyKCdkaXZbaWRePScgKyBsYXlvdXRSb3dJZCArICddJykubGVuZ3RoOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiAkKHNlbmRlcikucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkuY2hpbGRyZW4oKS5maWx0ZXIoJ2RpdltpZF49JyArIHBhcnNlSWQoc2VuZGVyLCByZXBsYWNlVGV4dCkgKyAnXScpLmxlbmd0aDsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFJlbW92ZURhdGVSYW5nZVBpY2tlcigpIHsNCiAgICB2YXIgZFJQaWNrZXJEaXZzID0gJChkb2N1bWVudCkuZmluZCgiLmRhdGVyYW5nZXBpY2tlcmRpdiIpOw0KICAgIHZhciBjb3VudCA9IGRSUGlja2VyRGl2cy5sZW5ndGg7DQogICAgLy8gT2RzdHJhbmVuaWUgdnNldGt5Y2ggcG90b21rb3YgdnNldGt5bSBkYXRlcmFuZ2VwaWNrZXJkaXZvbQ0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KICAgICAgICBpZiAoZFJQaWNrZXJEaXZzW2ldKSB7DQogICAgICAgICAgICB3aGlsZSAoZFJQaWNrZXJEaXZzW2ldLmZpcnN0Q2hpbGQgJiYgZFJQaWNrZXJEaXZzW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICBkUlBpY2tlckRpdnNbaV0ucmVtb3ZlQ2hpbGQoZFJQaWNrZXJEaXZzW2ldLmZpcnN0Q2hpbGQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIC8vIFNhbW90bmUgb2RzdHJhbmVuaWUgY2xhc3N5DQogICAgZFJQaWNrZXJEaXZzLnJlbW92ZUNsYXNzKCJoYXNEYXRlcGlja2VyIik7DQp9DQoNCmZ1bmN0aW9uIFJlaW5pdFRhYkluZGV4SW5jcmVtZW50KGxheW91dFJvdykgew0KICAgIHZhciBhbGxMYXlvdXRSb3dFbGVtZW50cyA9ICQobGF5b3V0Um93KS5maW5kKCJpbnB1dFtJRF0sIHNlbGVjdCwgdGV4dGFyZWEsIGEsIGFyZWEsIGJ1dHRvbiwgb2JqZWN0LCAuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAuY2xvc2VCdXR0b24iKS5zb3J0KGNvbXBhcmVCeVRhYkluZGV4KTsNCiAgICB2YXIgYWxsUHJldmlvdXNMYXlvdXRSb3dFbGVtZW50cyA9ICQobGF5b3V0Um93KS5wcmV2KCJbaWRePSciICsgJChsYXlvdXRSb3cpLmF0dHIoJ2lkJykgKyAiJ10iKS5maW5kKCJpbnB1dFtJRF0sIHNlbGVjdCwgdGV4dGFyZWEsIGEsIGFyZWEsIGJ1dHRvbiwgb2JqZWN0LCAuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAuY2xvc2VCdXR0b24iKS5zb3J0KGNvbXBhcmVCeVRhYkluZGV4KTsNCg0KICAgIGlmIChhbGxMYXlvdXRSb3dFbGVtZW50c1swXSAmJiBhbGxMYXlvdXRSb3dFbGVtZW50c1swXS50YWJJbmRleCAmJiBhbGxQcmV2aW91c0xheW91dFJvd0VsZW1lbnRzWzBdICYmIGFsbFByZXZpb3VzTGF5b3V0Um93RWxlbWVudHNbMF0udGFiSW5kZXgpIHsNCiAgICAgICAgdmFyIGFsbEVsZW1lbnRzID0gJCgiaW5wdXRbSURdLCBzZWxlY3QsIHRleHRhcmVhLCBhLCBhcmVhLCBidXR0b24sIG9iamVjdCwgLmFkZFJlbW92ZVNlY3Rpb24sIC5sb29rdXBidXR0b24sIC5pbmZvSWNvbiwgLmNsb3NlQnV0dG9uIikuc29ydChjb21wYXJlQnlUYWJJbmRleCk7DQoNCiAgICAgICAgaWYgKGFsbEVsZW1lbnRzKSB7DQogICAgICAgICAgICB2YXIgaW5jcmVtZW50UmFuZ2UgPSBhbGxMYXlvdXRSb3dFbGVtZW50c1thbGxMYXlvdXRSb3dFbGVtZW50cy5sZW5ndGggLSAxXS50YWJJbmRleCAtIGFsbExheW91dFJvd0VsZW1lbnRzWzBdLnRhYkluZGV4ICsgMTsNCiAgICAgICAgICAgIHZhciBpbmNyZW1lbnRTdWJSZXBlYXRpbmdSYW5nZSA9IGFsbFByZXZpb3VzTGF5b3V0Um93RWxlbWVudHNbYWxsUHJldmlvdXNMYXlvdXRSb3dFbGVtZW50cy5sZW5ndGggLSAxXS50YWJJbmRleCAtIGFsbExheW91dFJvd0VsZW1lbnRzW2FsbExheW91dFJvd0VsZW1lbnRzLmxlbmd0aCAtIDFdLnRhYkluZGV4Ow0KDQogICAgICAgICAgICAkKGFsbEVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJJbmRleCA+IGFsbFByZXZpb3VzTGF5b3V0Um93RWxlbWVudHNbYWxsUHJldmlvdXNMYXlvdXRSb3dFbGVtZW50cy5sZW5ndGggLSAxXS50YWJJbmRleCkNCiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJJbmRleCA9IHRoaXMudGFiSW5kZXggKyBpbmNyZW1lbnRSYW5nZTsNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAkKGFsbExheW91dFJvd0VsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy50YWJJbmRleCArIGluY3JlbWVudFN1YlJlcGVhdGluZ1JhbmdlICsgaW5jcmVtZW50UmFuZ2U7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gUmVpbml0VGFiSW5kZXhEZWNyZW1lbnQobGF5b3V0Um93KSB7DQogICAgdmFyIGFsbExheW91dFJvd0VsZW1lbnRzID0gJChsYXlvdXRSb3cpLmZpbmQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QsIC5hZGRSZW1vdmVTZWN0aW9uLCAubG9va3VwYnV0dG9uLCAuaW5mb0ljb24sIC5jbG9zZUJ1dHRvbiIpLnNvcnQoY29tcGFyZUJ5VGFiSW5kZXgpOw0KDQogICAgaWYgKGFsbExheW91dFJvd0VsZW1lbnRzWzBdICYmIGFsbExheW91dFJvd0VsZW1lbnRzWzBdLnRhYkluZGV4KSB7DQogICAgICAgIHZhciBhbGxFbGVtZW50cyA9ICQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QsIC5hZGRSZW1vdmVTZWN0aW9uLCAubG9va3VwYnV0dG9uLCAuaW5mb0ljb24sIC5jbG9zZUJ1dHRvbiIpLnNvcnQoY29tcGFyZUJ5VGFiSW5kZXgpOw0KDQogICAgICAgIGlmIChhbGxFbGVtZW50cykgew0KICAgICAgICAgICAgdmFyIGluY3JlbWVudFJhbmdlID0gYWxsTGF5b3V0Um93RWxlbWVudHNbYWxsTGF5b3V0Um93RWxlbWVudHMubGVuZ3RoIC0gMV0udGFiSW5kZXggLSBhbGxMYXlvdXRSb3dFbGVtZW50c1swXS50YWJJbmRleCArIDE7DQoNCiAgICAgICAgICAgICQoYWxsRWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhYkluZGV4ID4gYWxsTGF5b3V0Um93RWxlbWVudHNbYWxsTGF5b3V0Um93RWxlbWVudHMubGVuZ3RoIC0gMV0udGFiSW5kZXgpDQogICAgICAgICAgICAgICAgICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnRhYkluZGV4IC0gaW5jcmVtZW50UmFuZ2U7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gYWRkU2VjdGlvbihtaW5SZXBldGl0aW9uLCBtYXhSZXBldGl0aW9uLCBzZW5kZXIpIHsNCiAgICBEZWxldGVNdWx0aUNvbWJvYm94KCk7DQogICAgLy8gUG90cmVibmUgb2RzdHJhbml0IGRhdGVyYW5nZXBpY2tlciBlc3RlIHByZWQgY2xvbmUNCiAgICBSZW1vdmVEYXRlUmFuZ2VQaWNrZXIoKTsNCiAgICB2YXIgbGF5b3V0Um93ID0gJChzZW5kZXIpLmNsb3Nlc3QoJ2RpdltpZF49bGF5b3V0Um93XScpOw0KICAgIHZhciBmaXJzdExheW91dFJvdyA9IEdldFJlcGVhdGluZ1NlY3Rpb25zKGxheW91dFJvdykuZmlyc3QoKTsNCiAgICB2YXIgbGF5b3V0Um93Q29weSA9IGZpcnN0TGF5b3V0Um93LmNsb25lKCk7DQoNCiAgICBpZiAoZmlyc3RMYXlvdXRSb3cuYXR0cigiaXNlbXB0eSIpID09ICJ0cnVlIikgew0KICAgICAgICBsYXlvdXRSb3dDb3B5LnJlbW92ZUF0dHIoImlzZW1wdHkiKTsNCiAgICAgICAgbGF5b3V0Um93Q29weS5jaGlsZHJlbigiI2xheW91dFJvd0NvbnRlbnQiICsgZmlyc3RMYXlvdXRSb3cuYXR0cigiaWQiKSkuc2hvdygpOw0KICAgIH0NCg0KCWlmICh0eXBlb2YgTG9hZFNlY3Rpb25IdG1sRnJhZ21lbnQgPT0gJ3Z1Y0FkZFNlY3Rpb24nKSB7IC8vIHdlIGFyZSBsb2FkZWQgaW4gVlVDIGNvbmZpZ3VyYXRpb24gKGZ1bmN0aW9uIGluIHBfdnVjLmpzKQ0KCQl2dWNBZGRTZWN0aW9uKGxheW91dFJvd0NvcHkpOw0KCX0NCiAgICB2YXIgc2VjdGlvbnNDb3VudCA9IGNvdW50U2VjdGlvbihzZW5kZXIsICdhZGRTZWN0aW9uJyk7DQogICAgdmFyIGlzU2VjdGlvbkxpc3RFbXB0eSA9IGxheW91dFJvdy5hdHRyKCdpc0VtcHR5Jyk7DQogICAgdmFyIHNlY3Rpb25Db3VudEZvclggPSBjb3VudFNlY3Rpb24oc2VuZGVyLCAiIik7DQoNCiAgICBpZiAoc2VjdGlvbnNDb3VudCA9PSAxICYmIGlzU2VjdGlvbkxpc3RFbXB0eSA9PSAndHJ1ZScpDQogICAgICAgIHNlY3Rpb25zQ291bnQgPSAwOw0KDQogICAgaWYgKHNlY3Rpb25zQ291bnQgPj0gbWF4UmVwZXRpdGlvbikNCiAgICAgICAgcmV0dXJuIGFsZXJ0KCdEb3NpYWhsaSBzdGUgbWF4aW3DoWxueSBwb8SNZXQgb3Bha292YW5pYSB6dm9sZW5laiBzZWtjaWUuJyk7DQoNCiAgICBpZiAoc2VjdGlvbnNDb3VudCA9PSAwKSB7DQogICAgICAgIGxheW91dFJvdy5jaGlsZHJlbignZGl2W2lkXj1sYXlvdXRSb3dDb250ZW50XScpLnNob3coKS5Ub2dnbGVWYWxpZGF0b3JzKGZhbHNlKTsgLy9idWcgYnkgInN0eWxlIiBhdHJpYnV0ZQ0KICAgICAgICBsYXlvdXRSb3cuY2hpbGRyZW4oJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzXScpLmNoaWxkcmVuKCdzcGFuW2lkXj1yZW1vdmVTZWN0aW9uXScpLnNob3coKTsgLy9JRSBidWcgYnkgIk9kb2JyYcWlIiBidXR0b24NCiAgICAgICAgbGF5b3V0Um93LmNoaWxkcmVuKCcuY2xvc2VCdXR0b24nKS5zaG93KCk7DQogICAgICAgIGxheW91dFJvdy5hdHRyKCJpc0VtcHR5IiwgImZhbHNlIik7DQogICAgICAgIGxheW91dFJvdy5maW5kKCdpbnB1dFt0eXBlPSJyYWRpbyJdOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICQodGhpcykuY2xpY2soKTsNCiAgICAgICAgfSk7DQogICAgICAgIGxheW91dFJvdy5JbmNyZW1lbnRGaWVsZElkcygpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgbGF5b3V0Um93Q29weS5Ub2dnbGVWYWxpZGF0b3JzKGZhbHNlKTsNCiAgICAgICAgbGF5b3V0Um93Q29weS50b2dnbGVDbGFzcygnaGlkZGVuU2VjdGlvbicsIGZhbHNlKTsNCiAgICAgICAgbGF5b3V0Um93Q29weS5DbGVhckZvcm1FbGVtZW50cygpDQogICAgICAgICAgICAuUmVzZXRSZXBldGl0aW9uU2VjdGlvbigpDQogICAgICAgICAgICAuSW5pdFNlY3Rpb25BY2NvcmRpb24oKQ0KICAgICAgICAgICAgLlJlbW92ZURhdGVQaWNrZXJDbGFzcygpDQogICAgICAgICAgICAuSW5pdFJlbW90ZUNvbWJvYm94KCkNCiAgICAgICAgICAgIC5Jbml0UG9wVXBEaWFsb2coKQ0KICAgICAgICAgICAgLkluaXRIZWxwKCkNCiAgICAgICAgICAgIC5Jbml0SGllcmFyY2hpY2FsbHlUcmVlKCk7DQogICAgICAgIGxheW91dFJvdy5hZnRlcihsYXlvdXRSb3dDb3B5KTsNCiAgICAgICAgbGF5b3V0Um93Q29weS5JbmNyZW1lbnRGaWVsZElkcygpOw0KICAgICAgICBSZWluaXRUYWJJbmRleEluY3JlbWVudChsYXlvdXRSb3dDb3B5KTsNCiAgICB9DQoNCiAgICBJbml0UGlja2VycygpOw0KICAgIEluaXRIZWxwKCk7DQogICAgSW5pdE11bHRpQ29tYm9ib3goKTsNCiAgICBJbmNyZW1lbnREZWNyZW1lbnRTZWN0aW9uSWQobGF5b3V0Um93Q29weSk7DQoNCiAgICAvL0FrIHByaWRhdmFuYSBzZWtjaWEgamUgcG9zbGVuYSBtb3puYSAobWF4cmVwZXRpdGlvbikgc2tyeWplbSBqZWogYnV0dG9uIFByaWRhag0KICAgIHZhciByZXBldGl0aXZlQ29tbWFuZHMgPSBsYXlvdXRSb3dDb3B5LmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKTsNCiAgICB2YXIgYWRkQnV0dG9uID0gcmVwZXRpdGl2ZUNvbW1hbmRzLmNoaWxkcmVuKCdzcGFuW2lkXj1hZGRTZWN0aW9uXScpOw0KICAgIHZhciByZW1vdmVCdXR0b24gPSByZXBldGl0aXZlQ29tbWFuZHMuY2hpbGRyZW4oJ3NwYW5baWRePXJlbW92ZVNlY3Rpb25dJyk7DQogICAgaWYgKChzZWN0aW9uc0NvdW50ICsgMSkgPT0gbWF4UmVwZXRpdGlvbikgew0KICAgICAgICBpZiAobWluUmVwZXRpdGlvbiA9PSAwICYmIG1heFJlcGV0aXRpb24gPT0gMSkgew0KICAgICAgICAgICAgbGF5b3V0Um93LmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKS5jaGlsZHJlbignc3BhbltpZF49YWRkU2VjdGlvbl0nKS5oaWRlKCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhZGRCdXR0b24uaGlkZSgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgaWYgKHNlY3Rpb25zQ291bnQgPiAwKSB7DQogICAgICAgIC8vTmEgcHJpZGFuZWogc2VrY2lpIHpvYnJhemltIGJ1dHRvbiBPZG9iZXINCg0KICAgICAgICByZW1vdmVCdXR0b24uc2hvdygpOw0KICAgICAgICAvL05hIHByZWRjaGFkemFqdWNlaiBzZWtjaWkgc2tyeWplbSBjb21tYW5kIGJhcg0KICAgICAgICBsYXlvdXRSb3cuY2hpbGRyZW4oJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzXScpLmhpZGUoKTsNCiAgICB9DQoNCiAgICBpZiAoKHNlY3Rpb25zQ291bnQgKyAxKSA9PSBtaW5SZXBldGl0aW9uKQ0KICAgICAgICByZW1vdmVCdXR0b24uaGlkZSgpOw0KDQogICAgSW5pdFJlcGV0aXRpb25TZWN0aW9ucyhsYXlvdXRSb3dDb3B5KTsNCiAgICBsYXlvdXRSb3dDb3B5LlJlaW5pdGlhbGl6ZUNvbmRpdGlvbmFsUnVsZXMoKS5SZWluaXRSYWRpb0RlZmF1bHRDaGVjaygpOw0KICAgIEhpZGVTaG93WChsYXlvdXRSb3csIHNlY3Rpb25Db3VudEZvclggKyBtaW5SZXBldGl0aW9uLCAtMSk7DQogICAgSW5pdFhJbkNvcHlTZWN0aW9uKGxheW91dFJvd0NvcHkpOw0KfQ0KDQpmdW5jdGlvbiByZW1vdmVTZWN0aW9uKG1pblJlcGV0aXRpb24sIHNlbmRlcikgew0KICAgIHZhciBsYXlvdXRSb3cgPSAkKHNlbmRlcikuY2xvc2VzdCgnZGl2W2lkXj1sYXlvdXRSb3ddJyk7DQogICAgdmFyIGxheW91dFJvd1ByZXZpb3VzID0gbGF5b3V0Um93LnByZXYoJ2RpdltpZF49bGF5b3V0Um93XScpOw0KICAgIHZhciBzZWN0aW9uc0NvdW50ID0gY291bnRTZWN0aW9uKHNlbmRlciwgJ3JlbW92ZVNlY3Rpb24nKTsNCiAgICB2YXIgc2VjdGlvbkNvdW50Rm9yWCA9IGNvdW50U2VjdGlvbihzZW5kZXIsICIiKTsNCiAgICB2YXIgbGF5b3V0Um93SWRDbGVhbiA9IGxheW91dFJvdy5hdHRyKCJpZCIpLnNwbGl0KCdfJylbMF0ucmVwbGFjZSgicmVtb3ZlU2VjdGlvbiIsICIiKTsNCg0KICAgIGlmIChzZWN0aW9uc0NvdW50ID09IG1pblJlcGV0aXRpb24pDQogICAgICAgIHJldHVybiBhbGVydCgnU2VrY2l1IG5pZSBqZSBtb8W+bsOpIG9kb2JyYcWlLicpOw0KDQogICAgdmFyIGNoaWxkcmVuID0gbGF5b3V0Um93UHJldmlvdXMuY2hpbGRyZW4oJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzXScpOw0KICAgIGlmIChzZWN0aW9uc0NvdW50ID09IG1pblJlcGV0aXRpb24gJiYgc2VjdGlvbnNDb3VudCA+IDEpDQogICAgICAgIGNoaWxkcmVuLmNoaWxkcmVuKCdzcGFuW2lkXj1yZW1vdmVTZWN0aW9uXScpLmhpZGUoKTsNCg0KICAgIGlmIChzZWN0aW9uc0NvdW50ID09IDEpIHsNCiAgICAgICAgbGF5b3V0Um93LmF0dHIoImlzRW1wdHkiLCAidHJ1ZSIpOw0KICAgICAgICBsYXlvdXRSb3cuY2hpbGRyZW4oJ2RpdltpZF49bGF5b3V0Um93Q29udGVudF0nKS5oaWRlKCkuVG9nZ2xlVmFsaWRhdG9ycyh0cnVlKTsNCiAgICAgICAgbGF5b3V0Um93LkluY3JlbWVudEZpZWxkSWRzKCk7DQogICAgICAgIGxheW91dFJvdy5SZWluaXRpYWxpemVDb25kaXRpb25hbFJ1bGVzKCk7DQoNCiAgICAgICAgdmFyIHJlcGV0aXRpb25Db21tYW5kcyA9IGxheW91dFJvdy5jaGlsZHJlbignZGl2W2lkXj1yZXBldGl0aW9uQ29tbWFuZHNdJyk7DQogICAgICAgIGxheW91dFJvdy5jaGlsZHJlbignLmNsb3NlQnV0dG9uJykuaGlkZSgpOw0KICAgICAgICByZXBldGl0aW9uQ29tbWFuZHMuY2hpbGRyZW4oJ3NwYW5baWRePWFkZFNlY3Rpb25dJykuc2hvdygpOw0KICAgICAgICByZXR1cm4gcmVwZXRpdGlvbkNvbW1hbmRzLmNoaWxkcmVuKCdzcGFuW2lkXj1yZW1vdmVTZWN0aW9uXScpLmhpZGUoKTsNCiAgICB9DQoNCiAgICBSZWluaXRUYWJJbmRleERlY3JlbWVudChsYXlvdXRSb3cpOw0KICAgIGNoaWxkcmVuLnNob3coKTsNCg0KICAgIGlmICgkKHNlbmRlcikuaGFzQ2xhc3MoImNsb3NlQnV0dG9uIikgfHwgKHNlY3Rpb25zQ291bnQgLSAxKSA9PSAxKSB7DQogICAgICAgIGlmICghJChzZW5kZXIpLmhhc0NsYXNzKCJjbG9zZUJ1dHRvbiIpKSB7IHNlY3Rpb25Db3VudEZvclggPSBzZWN0aW9uc0NvdW50IC0gMTsgfQ0KICAgICAgICBIaWRlU2hvd1gobGF5b3V0Um93LCBzZWN0aW9uQ291bnRGb3JYIC0gMSwgbWluUmVwZXRpdGlvbik7DQogICAgfQ0KDQogICAgaWYgKCQoc2VuZGVyKS5oYXNDbGFzcygiY2xvc2VCdXR0b24iKSkgew0KICAgICAgICBIaWRlQW5kU2hvd1JlbW92ZUJ0bnMobGF5b3V0Um93LnNpYmxpbmdzKCJkaXZbaWRePSciICsgbGF5b3V0Um93SWRDbGVhbiArICInXSIpLCBzZWN0aW9uQ291bnRGb3JYIC0gMSwgbWluUmVwZXRpdGlvbik7DQogICAgfQ0KDQogICAgbGF5b3V0Um93LnJlbW92ZSgpOw0KDQogICAgaWYgKChzZWN0aW9uc0NvdW50IC0gMSkgPT0gbWluUmVwZXRpdGlvbikgew0KICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbignc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKS5oaWRlKCk7DQogICAgfQ0KICAgIGNoaWxkcmVuLmNoaWxkcmVuKCdzcGFuW2lkXj1hZGRTZWN0aW9uXScpLnNob3coKTsNCiAgICANCiAgICBpZiAobGF5b3V0Um93UHJldmlvdXNbMF0pIHsNCiAgICAgICAgJChsYXlvdXRSb3dQcmV2aW91cykuSW5jcmVtZW50RmllbGRJZHMoKTsNCiAgICAgICAgSW5jcmVtZW50RGVjcmVtZW50U2VjdGlvbklkKGxheW91dFJvd1ByZXZpb3VzKTsNCiAgICAgICAgSW5jcmVtZW50RGVjcmVtZW50SW5uZXJSZXBlYXRpbmdJZHMobGF5b3V0Um93UHJldmlvdXMpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHZhciBsYXlvdXRSb3dQb20gPSAkKCJbaWRePSciICsgbGF5b3V0Um93SWRDbGVhbiArICInXSIpWzBdOw0KICAgICAgICAkKGxheW91dFJvd1BvbSkuSW5jcmVtZW50RmllbGRJZHMoKS5SZWluaXRpYWxpemVDb25kaXRpb25hbFJ1bGVzKCk7DQogICAgICAgIFJlbW92ZVJlcFNlY0NsYXNzKGxheW91dFJvd1BvbSk7DQogICAgICAgIEluY3JlbWVudERlY3JlbWVudFNlY3Rpb25JZChsYXlvdXRSb3dQb20pOw0KICAgICAgICBJbmNyZW1lbnREZWNyZW1lbnRJbm5lclJlcGVhdGluZ0lkcyhsYXlvdXRSb3dQb20pOw0KICAgIH0NCg0KICAgIHZhciBsYXlvdXRSb3dBbGwgPSAkKCJbaWRePSciICsgbGF5b3V0Um93SWRDbGVhbiArICInXSIpOyAvLyB2eWJlciBvcGFrb3ZhY2t5DQogICAgJChsYXlvdXRSb3dBbGwpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAkKHRoaXMpLlJlbW92ZURhdGVQaWNrZXJDbGFzcygpOy8vIHJlc2V0bmUgZGF0ZXBpY2tlciBzZWtjaWUga3RvcnUgbWF6ZW1lIA0KICAgIH0pOw0KICAgIEluaXRQaWNrZXJzKCk7IC8vIG9wZXRvdm5hIGluaWNpYWxpemFjaWEgDQp9DQoNCmZ1bmN0aW9uIFJlbW92ZVJlcFNlY0NsYXNzKHNlbmRlcikgew0KICAgIHZhciBsYXlvdXRSb3dJZENsZWFuID0gJChzZW5kZXIpLmF0dHIoImlkIikuc3BsaXQoJ18nKVswXTsNCiAgICB2YXIgbHIgPSAkKGRvY3VtZW50KS5maW5kKCJkaXZbaWRePSciICsgbGF5b3V0Um93SWRDbGVhbiArICInXTpmaXJzdCIpOw0KICAgIGxyLnJlbW92ZUNsYXNzKCJyZXBlYXRpbmdTZWN0aW9uIik7DQogICAgbHIuZmluZCgiLnJlcGVhdGluZ1NlY3Rpb24iKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygicmVwZWF0aW5nU2VjdGlvbiIpOw0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBIaWRlU2hvd1goc2VuZGVyLCBzZWN0aW9uQ291bnQsIG1pblJlcGV0aXRpb24pIHsNCiAgICB2YXIgbGF5b3V0Um93SWRDbGVhbiA9IHNlbmRlci5hdHRyKCJpZCIpLnNwbGl0KCdfJylbMF07DQogICAgdmFyIGxheW91dFJvd3MgPSBzZW5kZXIucGFyZW50KCkuY2hpbGRyZW4oImRpdltpZF49JyIgKyBsYXlvdXRSb3dJZENsZWFuICsgIiddIik7DQogICAgdmFyIGxheW91dFJvd3NDb3VudCA9IGxheW91dFJvd3MubGVuZ3RoOw0KDQogICAgaWYgKChsYXlvdXRSb3dzQ291bnQgLSAxKSA9PSAxICYmIG1pblJlcGV0aXRpb24gIT0gLTEpIHsNCiAgICAgICAgdmFyIGxyID0gJChzZW5kZXIpLmNoaWxkcmVuKCdkaXZbaWRePWxheW91dFJvd10nKTsNCiAgICAgICAgbGF5b3V0Um93cy5jaGlsZHJlbignLmNsb3NlQnV0dG9uJykuaGlkZSgpOw0KICAgIH0gZWxzZSBpZiAobGF5b3V0Um93c0NvdW50ID4gMSkNCiAgICAgICAgbGF5b3V0Um93cy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJy5jbG9zZUJ1dHRvbicpLnNob3coKTsNCiAgICAgICAgfSk7DQp9DQoNCmZ1bmN0aW9uIEhpZGVBbmRTaG93UmVtb3ZlQnRucyhsYXlvdXRSb3dzLCBzZWN0aW9uQ291bnQsIG1pblJlcGV0aXRpb24pIHsNCiAgICBpZiAobWluUmVwZXRpdGlvbiAhPSAtMSkgew0KICAgICAgICB2YXIgY291bnQgPSAwOw0KICAgICAgICBsYXlvdXRSb3dzLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvdW50ICE9IGxheW91dFJvd3MubGVuZ3RoIC0gMSkNCiAgICAgICAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKS5oaWRlKCk7DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBpZiAoKGxheW91dFJvd3MubGVuZ3RoKSA9PSBtaW5SZXBldGl0aW9uKSB7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzXScpLmNoaWxkcmVuKCdzcGFuW2lkXj1yZW1vdmVTZWN0aW9uXScpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKS5zaG93KCk7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzXScpLmNoaWxkcmVuKCdzcGFuW2lkXj1hZGRTZWN0aW9uXScpLnNob3coKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjb3VudCsrOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIEluaXRYSW5Db3B5U2VjdGlvbihzZW5kZXIpIHsNCiAgICB2YXIgc3ViU2VjdGlvbiA9ICQoc2VuZGVyKS5jaGlsZHJlbigiW2lkXj0nbGF5b3V0Um93Q29udGVudGxheW91dFJvdyddIik7DQogICAgc3ViU2VjdGlvbi5maW5kKCcuY2xvc2VCdXR0b24nKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgfSk7DQp9DQoNCiQuZm4uTmV3R3VpZCA9IGZ1bmN0aW9uICgpIHsNCiAgICBmdW5jdGlvbiBwOChzKSB7DQogICAgICAgIHZhciBwID0gKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpICsgIjAwMDAwMDAwMCIpLnN1YnN0cigyLCA4KTsNCiAgICAgICAgcmV0dXJuIHMgPyAiLSIgKyBwLnN1YnN0cigwLCA0KSArICItIiArIHAuc3Vic3RyKDQsIDQpIDogcDsNCiAgICB9DQogICAgcmV0dXJuIHA4KCkgKyBwOCh0cnVlKSArIHA4KHRydWUpICsgcDgoKTsNCn07DQoNCmZ1bmN0aW9uIFN3aXRjaFNlY3Rpb25zKHN3aXRjaGVzVG9TZWN0aW9ucywgY29udGV4dCwgaXNDaGVja0JveExpc3QpIHsNCiAgICBpZiAodHlwZW9mIGNvbnRleHQgPT09ICJvYmplY3QiKQ0KICAgICAgICB0aHJvdyAia29udGV4dCBuZW3DtMW+ZSBiecWlIG9iamVrdCI7DQoNCiAgICBjb250ZXh0ID0gJCgnZGl2W2lkXj0nICsgY29udGV4dCArICddJyk7DQoNCiAgICBmb3IgKHZhciBzaW5nbGVTd2l0Y2ggaW4gc3dpdGNoZXNUb1NlY3Rpb25zKSB7DQogICAgICAgIGZvciAodmFyIHNlY3Rpb24gaW4gc3dpdGNoZXNUb1NlY3Rpb25zW3NpbmdsZVN3aXRjaF0pIHsNCiAgICAgICAgICAgIGlmIChzd2l0Y2hlc1RvU2VjdGlvbnNbc2luZ2xlU3dpdGNoXVtzZWN0aW9uXS5pbmRleE9mKCdePScpID09IC0xICYmIHN3aXRjaGVzVG9TZWN0aW9uc1tzaW5nbGVTd2l0Y2hdW3NlY3Rpb25dICE9ICcnKQ0KICAgICAgICAgICAgICAgIHN3aXRjaGVzVG9TZWN0aW9uc1tzaW5nbGVTd2l0Y2hdW3NlY3Rpb25dID0gJ1tpZF49JyArIHN3aXRjaGVzVG9TZWN0aW9uc1tzaW5nbGVTd2l0Y2hdW3NlY3Rpb25dLnJlcGxhY2UoJyMnLCAnJykgKyAnXSc7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoY29udGV4dFswXSA9PT0gInVuZGVmaW5lZCIpDQogICAgICAgIHRocm93ICJuZXpuw6FteSBrb250ZXh0IjsNCg0KICAgIGlmIChpc0NoZWNrQm94TGlzdCA9PSB0cnVlKQ0KICAgICAgICBjb250ZXh0LkhpZGVTd2l0Y2hTZWN0aW9ucyhzd2l0Y2hlc1RvU2VjdGlvbnMpOw0KDQogICAgY29udGV4dC5Td2l0Y2hTZWN0aW9ucyhzd2l0Y2hlc1RvU2VjdGlvbnMsIGlzQ2hlY2tCb3hMaXN0KTsNCn0NCg0KZnVuY3Rpb24gRmluZFZhbHVlSW5YbWwoZWxlbWVudE5hbWUsIHhtbERvYykgew0KICAgIHZhciAkeG1sID0gJCh4bWxEb2MpOw0KICAgIHZhciAkeG1sVmFsdWUgPSAkeG1sLmZpbmQoZWxlbWVudE5hbWUpOw0KICAgIHJldHVybiAkeG1sVmFsdWUudGV4dCgpOw0KfQ0KDQovLyBXQ0YgIFZhbGlkYXRpb24gU2VydmljZSAgICAgICANCg0KDQpmdW5jdGlvbiBBZGRWYWxpZGF0aW9uTWVzc2FnZShpbmRleCwgaXRlbSwgdmFsTXNnKSB7DQogICAgdmFyIGlucHV0ID0gJChpdGVtKTsNCiAgICB2YXIga2V5ID0gaW5wdXQuYXR0cigia2V5Iik7DQogICAgdmFyIG9yZGVyID0gKGlucHV0LmF0dHIoIm9yZGVyIikgPT0gbnVsbCB8fCBpbnB1dC5hdHRyKCJvcmRlciIpID09IHVuZGVmaW5lZCkgPyAwIDogaW5wdXQuYXR0cigib3JkZXIiKTsNCg0KICAgIGlmIChrZXkgIT0gbnVsbCkgew0KICAgICAgICB2YXIgcG9zdGZpeCA9IG9yZGVyID09IDAgPyAiIiA6ICItIiArIG9yZGVyOw0KICAgICAgICB2YXIga2V5TmFtZSA9IGtleSArIHBvc3RmaXg7DQogICAgICAgIGlmICgkKCIjIiArIGtleU5hbWUpLmxlbmd0aCA9PSAwKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodmFsTXNnW2tleU5hbWVdID09IHVuZGVmaW5lZCkNCiAgICAgICAgICAgIHZhbE1zZ1trZXlOYW1lXSA9IGlucHV0LnRleHQoKSArICc8XC9icj4nOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICB2YWxNc2dba2V5TmFtZV0gKz0gaW5wdXQudGV4dCgpICsgJzxcL2JyPic7DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLy9hayBqZSBmYWxzZSwgem5hbWVuYSwgemUgc2EgbmVkYWwgbmFqc3QgemlhZGVuIGlucHV0IGEgdHJlYmEgdG8gZXZpZG92YXQgYWtvIHhzbHQgZXJyb3INCiAgICByZXR1cm4gZmFsc2U7DQp9DQoNCmZ1bmN0aW9uIFRyeVJlZGlyZWN0VG9SZXR1cm5VcmwoKSB7DQogICAgdmFyIHJldHVyblVybCA9ICQuR2V0VXJsUGFyYW0oIlJldHVyblVybCIpOw0KDQogICAgaWYgKHJldHVyblVybCAhPSAwKQ0KICAgICAgICBzZWxmLmxvY2F0aW9uLmhyZWYgPSB1bmVzY2FwZShyZXR1cm5VcmwpOw0KfQ0KDQpmdW5jdGlvbiBodG1sRW5jb2RlKHZhbHVlKSB7DQogICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cbi9naSwgIiUwQSIpOw0KICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFwvZ2ksICIlMEIiKTsNCiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyIvZ2ksICIlMFgiKTsNCiAgICByZXR1cm4gJCgnPGRpdi8+JykudGV4dCh2YWx1ZSkuaHRtbCgpOw0KfQ0KDQp2YXIgYmFzZU1hcmdpbiA9IDQ7DQpmdW5jdGlvbiBMYXlvdXQoKSB7DQogICAgdmFyIHRlbXBsYXRlU2VjdGlvbiA9ICQodGhpcyk7DQogICAgdmFyIHBhcmVudENlbGxDb3VudCA9IHRlbXBsYXRlU2VjdGlvbi5wYXJlbnRzKCJkaXZbY2xhc3NePSdjZWxsICddIikubGVuZ3RoOw0KICAgIHZhciBtYXJnaW4gPSAocGFyZW50Q2VsbENvdW50ICsgMSkgKiBiYXNlTWFyZ2luOw0KICAgIGlmIChtYXJnaW4gPiBiYXNlTWFyZ2luICYmIHRlbXBsYXRlU2VjdGlvbi5jaGlsZHJlbigpLmNoaWxkcmVuKCJkaXZbY2xhc3NePSdjYXB0aW9uICddIikuY3NzKCdib3JkZXItbGVmdC13aWR0aCcpID09ICcxcHgnKSB7DQogICAgICAgIG1hcmdpbiAtPSBiYXNlTWFyZ2luOw0KICAgIH0NCiAgICB0ZW1wbGF0ZVNlY3Rpb24uY3NzKCdtYXJnaW4tbGVmdCcsICctJyArIG1hcmdpbiArICdweCcpOw0KICAgIHRlbXBsYXRlU2VjdGlvbi5maW5kKCdsYWJlbCcpLmVhY2goTW92ZSk7DQp9DQoNCmZ1bmN0aW9uIE1vdmUoKSB7DQogICAgdmFyIGxhYmVsID0gJCh0aGlzKTsNCiAgICBsYWJlbC5jc3MoJ21hcmdpbi1sZWZ0JywgIi0iICsgcGFyc2VJbnQobGFiZWwucGFyZW50cygiZGl2W2FkanVzdHBvc2l0aW9uXj0ndHJ1ZSddIikuY3NzKCdtYXJnaW4tbGVmdCcpLnJlcGxhY2UoIi0iLCAiIikucmVwbGFjZSgicHgiLCAiIikgLSBiYXNlTWFyZ2luKSArICdweCcpOw0KICAgIGxhYmVsLndpZHRoKGxhYmVsLndpZHRoKCkgKyAxNik7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIE1MIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGdW5rY2lhIEhvZG5vdGEgcHJlIE1MIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQpmdW5jdGlvbiBIb2Rub3RhVHlwUG9sYShlbGVtZW50LCBuYXpvdikgew0KICAgIHZhciB2YWx1ZSA9IDA7DQoNCiAgICB2YXIgZWxlbWVudHM7DQoNCiAgICBpZiAoIWVsZW1lbnQpIHsNCiAgICAgICAgZWxlbWVudHMgPSAkKCcjJyArIG5hem92KTsNCiAgICAgICAgaWYgKCFlbGVtZW50cyB8fCBlbGVtZW50cy5sZW5ndGggPT0gMCkNCiAgICAgICAgICAgIGVsZW1lbnRzID0gJCgiW25hbWU9JyIgKyBuYXpvdiArICInXSIpOw0KICAgICAgICBlbGVtZW50ID0gZWxlbWVudHNbMF07DQogICAgfQ0KDQogICAgaWYgKGVsZW1lbnQudHlwZSA9PSAnc2VsZWN0LW9uZScpIHsNCiAgICAgICAgdmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYXpvdikuc2VsZWN0ZWRJbmRleDsNCiAgICB9DQogICAgZWxzZSBpZiAoZWxlbWVudC50eXBlID09ICdyYWRpbycpIHsNCiAgICAgICAgLy9qZSByYWRpb2J1dHRvbgkJDQogICAgICAgIC8vamUgcmFkaW9idXR0b25saXN0DQogICAgICAgIC8va29kIGplIHVuaXZlcnphbG55LCB6YWZ1bmd1amUgYWogYWoNCiAgICAgICAgdmFsdWUgPSAwOw0KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmIChlbGVtZW50c1tpXS5jaGVja2VkKSB7DQogICAgICAgICAgICAgICAgdmFsdWUgPSBpICsgMTsgLy92cmF0IGluZGV4IG96bmFjZW5laG8gcG9sYSBvZCAxIC0gbg0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PSAnY2hlY2tib3gnKSB7DQogICAgICAgIC8vamUgY2hlY2tib3gNCiAgICAgICAgaWYgKGVsZW1lbnQuY2hlY2tlZCkgew0KICAgICAgICAgICAgdmFsdWUgPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgdmFsdWUgPSAwOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7DQogICAgfQ0KDQogICAgcmV0dXJuIHZhbHVlOw0KfQ0KDQpmdW5jdGlvbiBob2Rub3RhKGVsZW1lbnQsIG5hem92LCBvcGFrX3R5cCwgc2lkLCBsYXlvdXROYXpvdiwgZGF0YVR5cGUpIHsgLy8gc2lkIGplIGluZGV4b3Zhbnkgb2QgMC4uDQogICAgdmFyIHRzdHI7DQoNCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyB6YWNpYXRvayBvcGFrb3ZhbmENCiAgICBpZiAob3Bha190eXAgPT0gJ28nKSB7DQogICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsNCiAgICAgICAgICAgIGlmIChzaWQgPT0gMCB8fCBzaWQgPT0gLTEpDQogICAgICAgICAgICAgICAgdHN0ciA9IEhvZG5vdGFUeXBQb2xhKG51bGwsIG5hem92KTsgIC8vZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmF6b3YpLnZhbHVlOw0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHRzdHIgPSBIb2Rub3RhVHlwUG9sYShudWxsLCBHZXRFbGVtZW50SW5jcmVtZW50YWxWYWx1ZShuYXpvdiwgc2lkKSk7IC8vZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoR2V0SW5jcmVtZW50YWxWYWx1ZShuYXpvdiwgc2lkKSkudmFsdWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0c3RyID0gSG9kbm90YVR5cFBvbGEoZWxlbWVudCwgbmF6b3YpOw0KICAgICAgICB9DQogICAgfSBlbHNlDQogICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIGtvbmllYyBvcGFrb3ZhbmENCiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gemFjaWF0b2sgc3RyYW5rb3ZhbmENCiAgICAgICAgaWYgKG9wYWtfdHlwID09ICdzJyB8fCBvcGFrX3R5cCA9PSAncCcpIHsNCiAgICAgICAgICAgIHZhciBzZWN0aW9uID0gJCgnIycgKyBsYXlvdXROYXpvdikucGFnZWFibGVTZWN0aW9uKCk7DQogICAgICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uLmN1cnJlbnRQYWdlICE9IHNpZCArIDEpIHsNCiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNlY3Rpb24uZ2V0VmFsdWVGb3IobmF6b3YsIHNpZCArIDEpOw0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcCA9PT0gJ2Jvb2xlYW4nKSB7DQogICAgICAgICAgICAgICAgICAgIHRzdHIgPSB0ZW1wID8gMSA6IDA7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdHN0ciA9IHRlbXA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0c3RyID0gSG9kbm90YVR5cFBvbGEoZWxlbWVudCwgbmF6b3YpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UNCiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIGtvbmllYyBzdHJhbmtvdmFuYQ0KICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gemFjaWF0b2sgbm9ybWFsbmENCiAgICAgICAgICAgIGlmIChvcGFrX3R5cCA9PSAnbicpIHsNCiAgICAgICAgICAgICAgICB0c3RyID0gSG9kbm90YVR5cFBvbGEoZWxlbWVudCwgbmF6b3YpOw0KICAgICAgICAgICAgfQ0KICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIGtvbmllYyBvcGFrb3ZhbmlhDQogICAgaWYgKHRzdHIgPT0gbnVsbCAmJiBkYXRhVHlwZSA9PSAneCcpDQogICAgICAgIHJldHVybiAnJzsNCiAgICBpZiAodHN0ciAhPSBudWxsICYmIGRhdGFUeXBlID09ICd4JykNCiAgICAgICAgcmV0dXJuIHRzdHIudG9TdHJpbmcoKTsNCiAgICBpZiAodHN0ciA9PSBudWxsIHx8IHRzdHIgPT09IHVuZGVmaW5lZCB8fCB0c3RyID09ICcnKQ0KICAgICAgICByZXR1cm4gMDsNCiAgICAvL3RzdHIgPSAwOw0KDQogICAgLy9hayBqZSBkYXRvdnkgdHlwIHN0cmluZywgdnJhdCBkbHprdSByZXRhemNhDQogICAgaWYgKGRhdGFUeXBlID09ICdzJykgew0KICAgICAgICAvKg0KICAgICAgICBpZiAodHN0ciA9PSAwKSB7DQogICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAgICAgICovDQogICAgICAgIGlmICh0c3RyLmxlbmd0aCkgew0KICAgICAgICAgICAgcmV0dXJuIHRzdHIubGVuZ3RoOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiBwYXJzZUZsb2F0KHRzdHIpOw0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyYW5rb3ZhY2llIHNla2NpZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCg0KKGZ1bmN0aW9uICgkLCB1bmRlZmluZWQpIHsNCiAgICAndXNlIHN0cmljdCc7DQoNCiAgICBmdW5jdGlvbiBQYWdlYWJsZVNlY3Rpb24oKSB7DQoNCiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhZ2VhYmxlU2VjdGlvbikpIHsNCiAgICAgICAgICAgIHJldHVybiBuZXcgUGFnZWFibGVTZWN0aW9uKCk7DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLnNlY3Rpb24gPSBudWxsOw0KICAgICAgICB0aGlzLnBhZ2VyID0gbnVsbDsNCiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUxhYmVsID0gbnVsbDsNCiAgICAgICAgdGhpcy50b3RhbFBhZ2VzTGFiZWwgPSBudWxsOw0KICAgICAgICB0aGlzLnByZXZQYWdlQnV0dG9uID0gbnVsbDsNCiAgICAgICAgdGhpcy5uZXh0UGFnZUJ1dHRvbiA9IG51bGw7DQogICAgICAgIHRoaXMuYWRkUGFnZUJ1dHRvbiA9IG51bGw7DQogICAgICAgIHRoaXMucmVtb3ZlUGFnZUJ1dHRvbiA9IG51bGw7DQoNCiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7DQogICAgICAgIHRoaXMudG90YWxQYWdlcyA9IDE7DQoNCiAgICAgICAgdGhpcy5wYWdlcyA9IFtdOw0KICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZXMgPSB7fTsNCg0KICAgICAgICB0aGlzLm9wdGlvbnMgPSB7DQogICAgICAgICAgICBuYW1lc3BhY2U6ICcucGFnZWFibGUtc2VjdGlvbicsDQogICAgICAgICAgICB2YWxpZGF0b3I6IG51bGwsDQogICAgICAgICAgICBzZWN0aW9uTmFtZTogJycsDQogICAgICAgICAgICB4bWxOb2RlTmFtZTogJycsDQogICAgICAgICAgICBtaW46IDEsDQogICAgICAgICAgICBtYXg6IDUNCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICAkLmV4dGVuZChQYWdlYWJsZVNlY3Rpb24ucHJvdG90eXBlLCB7DQogICAgICAgIGluaXQ6IGZ1bmN0aW9uICh0YXJnZXQsIHVzZXJPcHRpb25zKSB7DQogICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLm9wdGlvbnMsIHVzZXJPcHRpb25zKTsNCg0KICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLA0KCQkJICAgIG9wdGlvbnMgPSBzZWxmLm9wdGlvbnMsDQoJCQkgICAgbmFtZXNwYWNlID0gb3B0aW9ucy5uYW1lc3BhY2U7DQoNCiAgICAgICAgICAgIC8vIHNlY3Rpb24NCiAgICAgICAgICAgIHRoaXMuc2VjdGlvbiA9ICQodGFyZ2V0KTsNCg0KICAgICAgICAgICAgaWYgKCFvcHRpb25zLnNlY3Rpb25OYW1lKSB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5zZWN0aW9uTmFtZSA9IHRoaXMuc2VjdGlvblswXS5pZDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKCFvcHRpb25zLnhtbE5vZGVOYW1lKSB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy54bWxOb2RlTmFtZSA9ICQoJ2lucHV0OmhpZGRlbicsIHRoaXMuc2VjdGlvbilbMF0ubmFtZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gbWluLCBtYXgNCiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLnNlY3Rpb24uZGF0YSgnc2VjdGlvbi1taW4nKSAqIDEsDQoJCQkgICAgbWF4ID0gdGhpcy5zZWN0aW9uLmRhdGEoJ3NlY3Rpb24tbWF4JykgKiAxOw0KDQogICAgICAgICAgICBpZiAoIWlzTmFOKG1pbikpIHsNCiAgICAgICAgICAgICAgICBvcHRpb25zLm1pbiA9IG1pbjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghaXNOYU4obWF4KSkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMubWF4ID0gbWF4Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBwYWdlcg0KICAgICAgICAgICAgdGhpcy5wYWdlciA9ICQoJy5zZWN0aW9uUGFnZXInLCB0aGlzLnNlY3Rpb24pOw0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUxhYmVsID0gJCgnLmN1cnJlbnRQYWdlJywgdGhpcy5wYWdlcik7DQogICAgICAgICAgICB0aGlzLnRvdGFsUGFnZXNMYWJlbCA9ICQoJy50b3RhbFBhZ2UnLCB0aGlzLnBhZ2VyKTsNCiAgICAgICAgICAgIHRoaXMucHJldlBhZ2VCdXR0b24gPSAkKCcucHJldlBhZ2VCdXR0b24nLCB0aGlzLnBhZ2VyKTsNCiAgICAgICAgICAgIHRoaXMubmV4dFBhZ2VCdXR0b24gPSAkKCcubmV4dFBhZ2VCdXR0b24nLCB0aGlzLnBhZ2VyKTsNCiAgICAgICAgICAgIHRoaXMuYWRkUGFnZUJ1dHRvbiA9ICQoJy5hZGRQYWdlQnV0dG9uJywgdGhpcy5wYWdlcik7DQogICAgICAgICAgICB0aGlzLmdvdG9QYWdlQnV0dG9uID0gJCgnLmdvdG9QYWdlQnV0dG9uJywgdGhpcy5wYWdlcik7DQogICAgICAgICAgICB0aGlzLnJlbW92ZVBhZ2VCdXR0b24gPSAkKCcucmVtb3ZlUGFnZUJ1dHRvbicsIHRoaXMucGFnZXIpOw0KDQogICAgICAgICAgICB0aGlzLnByZXZQYWdlQnV0dG9uDQoJCQkJLnVuYmluZChuYW1lc3BhY2UpDQoJCQkJLmJpbmQoJ2NsaWNrJyArIG5hbWVzcGFjZSwgJC5wcm94eShmdW5jdGlvbiAoZSkgew0KCQkJCSAgICBlLnByZXZlbnREZWZhdWx0KCk7DQoJCQkJICAgIHRoaXMucHJldmlvdXNQYWdlKCk7DQoJCQkJfSwgdGhpcykpOw0KDQogICAgICAgICAgICB0aGlzLm5leHRQYWdlQnV0dG9uDQoJCQkJLnVuYmluZChuYW1lc3BhY2UpDQoJCQkJLmJpbmQoJ2NsaWNrJyArIG5hbWVzcGFjZSwgJC5wcm94eShmdW5jdGlvbiAoZSkgew0KCQkJCSAgICBlLnByZXZlbnREZWZhdWx0KCk7DQoJCQkJICAgIHRoaXMubmV4dFBhZ2UoKTsNCgkJCQl9LCB0aGlzKSk7DQoNCiAgICAgICAgICAgIHRoaXMuYWRkUGFnZUJ1dHRvbg0KCQkJCS51bmJpbmQobmFtZXNwYWNlKQ0KCQkJCS5iaW5kKCdjbGljaycgKyBuYW1lc3BhY2UsICQucHJveHkoZnVuY3Rpb24gKGUpIHsNCgkJCQkgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KCQkJCSAgICB0aGlzLmFkZFBhZ2UoKTsNCgkJCQl9LCB0aGlzKSk7DQoNCiAgICAgICAgICAgIHRoaXMucmVtb3ZlUGFnZUJ1dHRvbg0KCQkJCS51bmJpbmQobmFtZXNwYWNlKQ0KCQkJCS5iaW5kKCdjbGljaycgKyBuYW1lc3BhY2UsICQucHJveHkoZnVuY3Rpb24gKGUpIHsNCgkJCQkgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KCQkJCSAgICB0aGlzLnJlbW92ZVBhZ2UoKTsNCgkJCQl9LCB0aGlzKSk7DQoNCiAgICAgICAgICAgIHRoaXMuZ290b1BhZ2VCdXR0b24NCgkJCQkudW5iaW5kKG5hbWVzcGFjZSkNCgkJCQkuYmluZCgnY2xpY2snICsgbmFtZXNwYWNlLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7DQoJCQkJICAgIGUucHJldmVudERlZmF1bHQoKTsNCgkJCQkgICAgdmFyIGN1cnJlbnRJbnB1dCA9ICQoZS5jdXJyZW50VGFyZ2V0KS5uZXh0KCk7DQoJCQkJICAgIGlmIChpc05hTihwYXJzZUludChjdXJyZW50SW5wdXQudmFsKCkpKSkgew0KCQkJCSAgICAgICAgdmFyIHN0cmFuYSA9IHRoaXMuY3VycmVudFBhZ2U7DQoJCQkJICAgICAgICBjdXJyZW50SW5wdXQudmFsKCIiKTsNCgkJCQkgICAgfSBlbHNlIHsNCgkJCQkgICAgICAgIHZhciBzdHJhbmEgPSBwYXJzZUludChjdXJyZW50SW5wdXQudmFsKCkpOw0KCQkJCSAgICAgICAgY3VycmVudElucHV0LnZhbCgiIik7DQoJCQkJICAgIH0NCgkJCQkgICAgdGhpcy5nb1RvUGFnZShzdHJhbmEpOw0KCQkJCX0sIHRoaXMpKTsNCg0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUxhYmVsLnRleHQodGhpcy5jdXJyZW50UGFnZSk7DQogICAgICAgICAgICB0aGlzLnRvdGFsUGFnZXNMYWJlbC50ZXh0KHRoaXMudG90YWxQYWdlcyk7DQoNCiAgICAgICAgICAgIHRoaXMudXBkYXRlQnV0dG9ucygpOw0KICAgICAgICAgICAgdGhpcy5zYXZlQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgICAgIHRoaXMuc2F2ZURlZmF1bHRWYWx1ZXMoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBwcmV2aW91c1BhZ2U6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlIDw9IDEpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlIDw9IHRoaXMudG90YWxQYWdlcykNCiAgICAgICAgICAgICAgICB0aGlzLnNhdmVDdXJyZW50UGFnZSgpOw0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZS0tOw0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUxhYmVsLnRleHQodGhpcy5jdXJyZW50UGFnZSk7DQoNCiAgICAgICAgICAgIHRoaXMucmVzZXRMYXlvdXQoKTsNCg0KICAgICAgICAgICAgdGhpcy5sb2FkQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBuZXh0UGFnZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPj0gdGhpcy50b3RhbFBhZ2VzKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0aGlzLnNhdmVDdXJyZW50UGFnZSgpOw0KDQogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlKys7DQogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlTGFiZWwudGV4dCh0aGlzLmN1cnJlbnRQYWdlKTsNCg0KICAgICAgICAgICAgdGhpcy5yZXNldExheW91dCgpOw0KICAgICAgICAgICAgdGhpcy5sb2FkQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBhZGRQYWdlOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAodGhpcy50b3RhbFBhZ2VzID49IHRoaXMub3B0aW9ucy5tYXgpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHRoaXMudG90YWxQYWdlcysrOw0KICAgICAgICAgICAgdGhpcy50b3RhbFBhZ2VzTGFiZWwudGV4dCh0aGlzLnRvdGFsUGFnZXMpOw0KICAgICAgICAgICAgdGhpcy51cGRhdGVCdXR0b25zKCk7DQoNCiAgICAgICAgICAgIHRoaXMuc2F2ZUN1cnJlbnRQYWdlKCk7DQogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy50b3RhbFBhZ2VzOw0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUxhYmVsLnRleHQodGhpcy5jdXJyZW50UGFnZSk7DQoNCiAgICAgICAgICAgIHRoaXMucmVzZXRMYXlvdXQoKTsNCiAgICAgICAgICAgIHRoaXMuc2F2ZUN1cnJlbnRQYWdlKCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgcmVtb3ZlUGFnZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKHRoaXMudG90YWxQYWdlcyA8PSB0aGlzLm9wdGlvbnMubWluKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMtLTsNCiAgICAgICAgICAgIHRoaXMudG90YWxQYWdlc0xhYmVsLnRleHQodGhpcy50b3RhbFBhZ2VzKTsNCiAgICAgICAgICAgIHRoaXMudXBkYXRlQnV0dG9ucygpOw0KDQogICAgICAgICAgICB0aGlzLnJlbW92ZUN1cnJlbnRQYWdlKCk7DQogICAgICAgICAgICB0aGlzLnJlc2V0TGF5b3V0KCk7DQogICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMudG90YWxQYWdlcykgew0KICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlKCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRoaXMubG9hZEN1cnJlbnRQYWdlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgdXBkYXRlQnV0dG9uczogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5hZGRQYWdlQnV0dG9uLnRvZ2dsZSh0aGlzLnRvdGFsUGFnZXMgPCB0aGlzLm9wdGlvbnMubWF4KTsNCiAgICAgICAgICAgIHRoaXMucmVtb3ZlUGFnZUJ1dHRvbi50b2dnbGUodGhpcy50b3RhbFBhZ2VzID4gdGhpcy5vcHRpb25zLm1pbik7DQogICAgICAgIH0sDQoNCiAgICAgICAgcmVzZXRMYXlvdXQ6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICQoJzp0ZXh0LCA6cGFzc3dvcmQsIDpmaWxlLCBzZWxlY3QsIHRleHRhcmVhJywgdGhpcy5zZWN0aW9uKS5lYWNoKCQucHJveHkoZnVuY3Rpb24gKF8sIGlucHV0KSB7DQogICAgICAgICAgICAgICAgaWYgKGlucHV0LmlkKSB7DQogICAgICAgICAgICAgICAgICAgICQoaW5wdXQpLnZhbCh0aGlzLmRlZmF1bHRWYWx1ZXNbaW5wdXQuaWRdIHx8ICcnKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkKGlucHV0KS52YWwoJycpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0sIHRoaXMpKTsNCg0KICAgICAgICAgICAgJCgnOnJhZGlvLCA6Y2hlY2tib3gnLCB0aGlzLnNlY3Rpb24pLmVhY2goJC5wcm94eShmdW5jdGlvbiAoXywgaW5wdXQpIHsNCiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IHRoaXMuZGVmYXVsdFZhbHVlc1tpbnB1dC5pZF0gfHwgZmFsc2U7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0sIHRoaXMpKTsNCg0KICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9IHRoaXMub3B0aW9ucy52YWxpZGF0b3I7DQogICAgICAgICAgICBpZiAodmFsaWRhdG9yICYmIHZhbGlkYXRvci5zZXR0aW5ncykgew0KICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHZhbGlkYXRvci5zZXR0aW5ncy5lcnJvckNsYXNzLA0KCQkJCSAgICB3YXJuaW5nID0gdmFsaWRhdG9yLnNldHRpbmdzLndhcm5pbmdDbGFzczsNCg0KICAgICAgICAgICAgICAgICQoJy4nICsgZXJyb3IgKyAnLCAuJyArIHdhcm5pbmcsIHRoaXMuc2VjdGlvbikucmVtb3ZlQ2xhc3MoZXJyb3IgKyAnICcgKyB3YXJuaW5nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBzYXZlRGVmYXVsdFZhbHVlczogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIGlucHV0cyA9ICQoJzp0ZXh0LCA6cGFzc3dvcmQsIDpmaWxlLCBzZWxlY3QsIHRleHRhcmVhJywgdGhpcy5zZWN0aW9uKTsNCg0KICAgICAgICAgICAgdmFyIGRlZmF1bHRzID0ge307DQogICAgICAgICAgICAkLmVhY2goaW5wdXRzLCBmdW5jdGlvbiAoXywgaW5wdXQpIHsNCiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHNbaW5wdXQuaWRdID0gaW5wdXQudmFsdWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIHZhciBjaGVja2FibGUgPSAkKCc6cmFkaW8sIDpjaGVja2JveCcsIHRoaXMuc2VjdGlvbik7DQogICAgICAgICAgICAkLmVhY2goY2hlY2thYmxlLCBmdW5jdGlvbiAoXywgaW5wdXQpIHsNCiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHNbaW5wdXQuaWRdID0gaW5wdXQuY2hlY2tlZDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzID0gZGVmYXVsdHM7DQogICAgICAgIH0sDQoNCiAgICAgICAgc2F2ZUN1cnJlbnRQYWdlOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgcmFkaW9CdXR0b25MaXN0cyA9IFtdOw0KDQogICAgICAgICAgICB2YXIgZ2V0RXJyb3JUeXBlID0gJC5wcm94eShmdW5jdGlvbiAoJGVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdG9yID0gdGhpcy5vcHRpb25zLnZhbGlkYXRvcjsNCiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yICYmIHZhbGlkYXRvci5zZXR0aW5ncykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGVsZW1lbnQuaGFzQ2xhc3ModmFsaWRhdG9yLnNldHRpbmdzLmVycm9yQ2xhc3MpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2UnOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRlbGVtZW50Lmhhc0NsYXNzKHZhbGlkYXRvci5zZXR0aW5ncy53YXJuaW5nQ2xhc3MpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3cnOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSwgdGhpcyk7DQoNCiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSAkLm1hcCgkKCc6aW5wdXQnLCB0aGlzLnNlY3Rpb24pLCAkLnByb3h5KGZ1bmN0aW9uIChpbnB1dCkgew0KICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pZCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJChpbnB1dCksDQoJCQkJCSAgICByZXN1bHQgPSB7IGtleTogaW5wdXQuaWQsIHZhbHVlOiAkaW5wdXQudmFsKCkgfTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbnB1dC5pcygnOnJhZGlvJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gJGlucHV0LmNsb3Nlc3QoJy5yYWRpb0J1dHRvbkxpc3QnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYWRpb0J1dHRvbkxpc3ROYW1lID0gaW5wdXQubmFtZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KHJhZGlvQnV0dG9uTGlzdE5hbWUsIHJhZGlvQnV0dG9uTGlzdHMpID49IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dHMgPSBsaXN0LmZpbmQoJzpyYWRpbycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja2VkID0gaW5wdXRzLmZpbHRlcignOmNoZWNrZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBjaGVja2VkLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uTGlzdHMucHVzaChyYWRpb0J1dHRvbkxpc3ROYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUgPSB2YWx1ZSB8fCAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0gcmFkaW9CdXR0b25MaXN0TmFtZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmIgPSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Q6IGxpc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJhZGlvQnV0dG9uTGlzdE5hbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yVHlwZXMgPSBbXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goaW5wdXRzLCAkLnByb3h5KGZ1bmN0aW9uIChfLCByYWRpbykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXQgPSBnZXRFcnJvclR5cGUoJChyYWRpbykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yVHlwZXMucHVzaChldCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmIuZXJyb3JUeXBlcyA9IGVycm9yVHlwZXM7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9ICRpbnB1dC5pcygnOmNoZWNrZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkaW5wdXQuaXMoJzpjaGVja2JveCcpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUgPSBpbnB1dC5jaGVja2VkOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yVHlwZSA9IGdldEVycm9yVHlwZSgkaW5wdXQpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JUeXBlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3JUeXBlID0gZXJyb3JUeXBlOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LCB0aGlzKSk7DQoNCiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VzLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlIC0gMV07DQogICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgY3VycmVudC52YWx1ZXMgPSB2YWx1ZXM7DQogICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHRoaXMucGFnZXMuc3BsaWNlKHRoaXMuY3VycmVudFBhZ2UgLSAxLCAwLCB7IHZhbHVlczogdmFsdWVzIH0pOw0KICAgICAgICB9LA0KDQogICAgICAgIHJlbW92ZUN1cnJlbnRQYWdlOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggJiYgdGhpcy5wYWdlcy5sZW5ndGggPj0gdGhpcy5jdXJyZW50UGFnZSkgew0KICAgICAgICAgICAgICAgIHRoaXMucGFnZXMuc3BsaWNlKHRoaXMuY3VycmVudFBhZ2UgLSAxLCAxKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52YWxpZGF0b3IpIHsNCiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMudmFsaWRhdG9yLnJlbW92ZUFsbFNlY3Rpb25FcnJvcnModGhpcy5nZXRTZWN0aW9uTmFtZSgpLCB0aGlzLmN1cnJlbnRQYWdlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBfbG9hZFJhZGlvQnV0dG9uTGlzdDogZnVuY3Rpb24gKHZhbHVlKSB7DQogICAgICAgICAgICB2YXIgbGlzdCA9IHZhbHVlLnJiLmxpc3Q7DQogICAgICAgICAgICBsaXN0LmZpbmQoJzpyYWRpbycpLmVhY2goZnVuY3Rpb24gKF8sIHJhZGlvKSB7DQogICAgICAgICAgICAgICAgcmFkaW8uY2hlY2tlZCA9IHJhZGlvLnZhbHVlID09PSB2YWx1ZS52YWx1ZTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9LA0KDQogICAgICAgIGxvYWRDdXJyZW50UGFnZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKHRoaXMucGFnZXMubGVuZ3RoICYmIHRoaXMucGFnZXMubGVuZ3RoID49IHRoaXMuY3VycmVudFBhZ2UpIHsNCiAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZSAtIDFdOw0KICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQudmFsdWVzKSB7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY3VycmVudC52YWx1ZXMubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGN1cnJlbnQudmFsdWVzW2pdLA0KCQkJCQkJICAgIHJiID0gdmFsdWUucmI7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRSYWRpb0J1dHRvbkxpc3QodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJCgnIycgKyB2YWx1ZS5rZXksIHRoaXMuc2VjdGlvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRpbnB1dCB8fCAkaW5wdXQubGVuZ3RoID09PSAwKSB7IC8vcmFkaW8gdiBzdHJhbmtvdmFjaWNoIHNla2NpYWNoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlICE9PSAnMCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0ID0gJCgnaW5wdXRbbmFtZT0iJyArIHZhbHVlLmtleSArICciXScsIHRoaXMuc2VjdGlvbik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dFt2YWx1ZS52YWx1ZSAtIDFdLmNoZWNrZWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaW5wdXQuaXMoJzpyYWRpbycpIHx8ICRpbnB1dC5pcygnOmNoZWNrYm94JykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0WzBdLmNoZWNrZWQgPSAodmFsdWUudmFsdWUgPT09IHRydWUgfHwgdmFsdWUudmFsdWUgPT0gJzEnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC52YWwodmFsdWUudmFsdWUpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmVycm9yVHlwZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdG9yID0gdGhpcy5vcHRpb25zLnZhbGlkYXRvcjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvciAmJiB2YWxpZGF0b3Iuc2V0dGluZ3MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5lcnJvclR5cGUgPT09ICdlJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC5hZGRDbGFzcyh2YWxpZGF0b3Iuc2V0dGluZ3MuZXJyb3JDbGFzcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmVycm9yVHlwZSA9PT0gJ3cnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LmFkZENsYXNzKHZhbGlkYXRvci5zZXR0aW5ncy53YXJuaW5nQ2xhc3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIGdvVG9QYWdlOiBmdW5jdGlvbiAocGFnZSkgew0KICAgICAgICAgICAgaWYgKHBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMpIHsNCiAgICAgICAgICAgICAgICBwYWdlID0gdGhpcy50b3RhbFBhZ2VzOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAocGFnZSA8IDEpIHsNCiAgICAgICAgICAgICAgICBwYWdlID0gMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy5zYXZlQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlOw0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUxhYmVsLnRleHQodGhpcy5jdXJyZW50UGFnZSk7DQogICAgICAgICAgICB0aGlzLnJlc2V0TGF5b3V0KCk7DQogICAgICAgICAgICB0aGlzLmxvYWRDdXJyZW50UGFnZSgpOw0KICAgICAgICB9LA0KDQogICAgICAgIGdldFNlY3Rpb25OYW1lOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNlY3Rpb25OYW1lIHx8ICcnOw0KICAgICAgICB9LA0KDQogICAgICAgIGdldFNlY3Rpb25YbWxOb2RlTmFtZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy54bWxOb2RlTmFtZSB8fCAnJzsNCiAgICAgICAgfSwNCg0KICAgICAgICBnZXRDdXJyZW50UGFnZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2U7DQogICAgICAgIH0sDQoNCiAgICAgICAgZm9jdXNpbjogZnVuY3Rpb24gKGVsZW1lbnRJZCkgew0KICAgICAgICAgICAgaWYgKGVsZW1lbnRJZCkgew0KICAgICAgICAgICAgICAgICQoJyMnICsgZWxlbWVudElkLCB0aGlzLnNlY3Rpb24pLmZvY3VzKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgZ2V0VmFsdWVGb3I6IGZ1bmN0aW9uIChlbGVtZW50SWQsIHBhZ2UpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPiAwICYmIHBhZ2UgPT09IHRoaXMuY3VycmVudFBhZ2UpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNhdmVDdXJyZW50UGFnZSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICBwYWdlID0gcGFnZSB8fCAxOw0KICAgICAgICAgICAgICAgIGlmIChwYWdlID4gdGhpcy5wYWdlcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBwYWdlVmFsdWVzID0gdGhpcy5wYWdlc1twYWdlIC0gMV07DQoNCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VWYWx1ZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhZ2VWYWx1ZXMudmFsdWVzW2ldOw0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUua2V5ID09PSBlbGVtZW50SWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSB8fCAnJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICB9LA0KDQogICAgICAgIGdldFZhbHVlc0ZvcjogZnVuY3Rpb24gKGVsZW1lbnRJZCkgew0KICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdOw0KDQogICAgICAgICAgICBpZiAodGhpcy50b3RhbFBhZ2VzID4gMCkgew0KICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUN1cnJlbnRQYWdlKCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBwYWdlVmFsdWVzID0gdGhpcy5wYWdlc1tpXTsNCg0KICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFnZVZhbHVlcy52YWx1ZXMubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFnZVZhbHVlcy52YWx1ZXNbal07DQogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5rZXkgPT09IGVsZW1lbnRJZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUudmFsdWUgfHwgJycpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgICB9LA0KDQogICAgICAgIHZhbGlkYXRlUGFnZTogZnVuY3Rpb24gKHBhZ2UpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPCBwYWdlKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgcGFnZVZhbHVlcyA9IHRoaXMucGFnZXNbcGFnZSAtIDFdLnZhbHVlczsNCg0KICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9IHRoaXMub3B0aW9ucy52YWxpZGF0b3I7DQogICAgICAgICAgICBpZiAoIXZhbGlkYXRvcikgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFsaWRhdG9yLnNlY3Rpb25TY29wZSA9IHsNCiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdldFNlY3Rpb25OYW1lKCksDQogICAgICAgICAgICAgICAgcGFnZTogcGFnZSwNCiAgICAgICAgICAgICAgICB2YWx1ZXM6IHBhZ2VWYWx1ZXMNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZVZhbHVlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBwYWdlVmFsdWUgPSBwYWdlVmFsdWVzW2ldOw0KICAgICAgICAgICAgICAgIHZhciBlbGVtID0gJCgnIycgKyBwYWdlVmFsdWUua2V5LCB0aGlzLnNlY3Rpb24pDQogICAgICAgICAgICAgICAgaWYgKCFlbGVtIHx8IGVsZW0ubGVuZ3RoID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIGVsZW0gPSAkKCdpbnB1dFtuYW1lPSInICsgcGFnZVZhbHVlLmtleSArICciXScsIHRoaXMuc2VjdGlvbilbMF07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHZhbGlkYXRvci5jaGVjayhlbGVtKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZGVsZXRlIHZhbGlkYXRvci5zZWN0aW9uU2NvcGU7DQogICAgICAgIH0sDQoNCiAgICAgICAgdmFsaWRhdGU6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPiAwKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zYXZlQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gdGhpcy50b3RhbFBhZ2VzOyBpKyspIHsNCiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFnZShpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICB2YWxpZGF0ZUVsZW1lbnRPblBhZ2U6IGZ1bmN0aW9uIChlbGVtZW50SWQsIHBhZ2UsIHJ1bGVOYW1lKSB7DQogICAgICAgICAgICBpZiAodGhpcy50b3RhbFBhZ2VzIDwgcGFnZSkgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHRoaXMudG90YWxQYWdlcyA+IDApIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNhdmVDdXJyZW50UGFnZSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgcGFnZVZhbHVlcyA9IHRoaXMucGFnZXNbcGFnZSAtIDFdLnZhbHVlczsNCiAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSB0aGlzLm9wdGlvbnMudmFsaWRhdG9yOw0KICAgICAgICAgICAgaWYgKCF2YWxpZGF0b3IpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhbGlkYXRvci5zZWN0aW9uU2NvcGUgPSB7DQogICAgICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRTZWN0aW9uTmFtZSgpLA0KICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsDQogICAgICAgICAgICAgICAgdmFsdWVzOiBwYWdlVmFsdWVzLA0KICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiBydWxlTmFtZQ0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgdmFsaWRhdG9yLmVsZW1lbnQoJCgnIycgKyBlbGVtZW50SWQsIHRoaXMuc2VjdGlvbikpOw0KICAgICAgICAgICAgZGVsZXRlIHZhbGlkYXRvci5zZWN0aW9uU2NvcGU7DQogICAgICAgIH0sDQoNCiAgICAgICAgcmVzZXRTZWN0aW9uOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnBhZ2VzID0gW107DQoNCiAgICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IDE7DQogICAgICAgICAgICB0aGlzLnRvdGFsUGFnZXNMYWJlbC50ZXh0KHRoaXMudG90YWxQYWdlcyk7DQoNCiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOw0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUxhYmVsLnRleHQodGhpcy5jdXJyZW50UGFnZSk7DQoNCiAgICAgICAgICAgIHRoaXMudXBkYXRlQnV0dG9ucygpOw0KDQogICAgICAgICAgICB0aGlzLnJlc2V0TGF5b3V0KCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgc3RydWN0dXJlOiBudWxsLA0KDQogICAgICAgIGJ1aWxkVXBTdHJ1Y3R1cmU6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5zZWN0aW9uOw0KICAgICAgICAgICAgdmFyIHJvd3MgPSAkKCcubGF5b3V0Um93Jywgc2VjdGlvbikNCgkJCQkuZmlsdGVyKGZ1bmN0aW9uIChfLCByb3cpIHsNCgkJCQkgICAgcmV0dXJuICQocm93KS5hdHRyKCdpc2VtcHR5JykgIT09ICd0cnVlJzsNCgkJCQl9KS5tYXAoZnVuY3Rpb24gKF8sIHJvdykgew0KCQkJCSAgICB2YXIgJHJvdyA9ICQocm93KTsNCgkJCQkgICAgcmV0dXJuIHsgaWQ6IHJvdy5pZCwgbm9kZTogJHJvdy5jaGlsZHJlbignaW5wdXQ6aGlkZGVuJykuYXR0cignbmFtZScpLCBwYXJlbnQ6ICRyb3cucGFyZW50KCkuY2xvc2VzdCgnLmxheW91dFJvdycpWzBdLCBlbGVtZW50OiByb3cgfTsNCgkJCQl9KTsNCg0KICAgICAgICAgICAgdmFyIHNlY3Rpb25FbGVtZW50ID0gc2VjdGlvblswXTsNCg0KICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmUgPSB7DQogICAgICAgICAgICAgICAgaWQ6IHNlY3Rpb25FbGVtZW50LmlkLA0KICAgICAgICAgICAgICAgIG5vZGU6IHNlY3Rpb24uY2hpbGRyZW4oJ2lucHV0OmhpZGRlbicpLmF0dHIoJ25hbWUnKSwNCiAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsDQogICAgICAgICAgICAgICAgZWxlbWVudDogc2VjdGlvbkVsZW1lbnQNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIHZhciBidWlsZFJvd3NSZWN1cnNpdmUgPSBmdW5jdGlvbiAocGFyZW50KSB7DQogICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuID0gJC5ncmVwKHJvd3MsIGZ1bmN0aW9uIChyb3cpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdy5wYXJlbnQgPT09IHBhcmVudC5lbGVtZW50Ow0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbiAmJiBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgICAgICQuZWFjaChwYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uIChfLCBjaGlsZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRSb3dzUmVjdXJzaXZlKGNoaWxkKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgaWYgKHJvd3MubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgYnVpbGRSb3dzUmVjdXJzaXZlKHRoaXMuc3RydWN0dXJlKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gJCgnOmlucHV0Om5vdCg6aGlkZGVuKScsIHNlY3Rpb24pLm1hcChmdW5jdGlvbiAoXywgZWxlbWVudCkgew0KICAgICAgICAgICAgICAgIHZhciAkZWxlbWVudCA9ICQoZWxlbWVudCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IGVsZW1lbnQuaWQsIG5hbWU6IGVsZW1lbnQubmFtZSwgZWxlbWVudDogZWxlbWVudCwgcGFyZW50OiAkZWxlbWVudC5jbG9zZXN0KCcubGF5b3V0Um93JylbMF0gfTsNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICB2YXIgYnVpbGRFbGVtZW50c1JlY3Vyc2l2ZSA9IGZ1bmN0aW9uIChwYXJlbnQpIHsNCiAgICAgICAgICAgICAgICBwYXJlbnQuZWxlbWVudHMgPSAkLmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uIChlbGVtZW50KSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudCA9PT0gcGFyZW50LmVsZW1lbnQ7DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuICYmIHBhcmVudC5jaGlsZHJlbi5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHBhcmVudC5jaGlsZHJlbiwgZnVuY3Rpb24gKF8sIGNoaWxkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBidWlsZEVsZW1lbnRzUmVjdXJzaXZlKGNoaWxkKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgIGJ1aWxkRWxlbWVudHNSZWN1cnNpdmUodGhpcy5zdHJ1Y3R1cmUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIHdyaXRlWG1sOiBmdW5jdGlvbiAoc2IsIHBhZ2UpIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5zdHJ1Y3R1cmUpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkVXBTdHJ1Y3R1cmUoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKCFzYikgew0KICAgICAgICAgICAgICAgIHNiID0gbmV3ICQuU3RyaW5nQnVpbGRlcigpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgd3JpdGVSZWN1cnNpdmUgPSBmdW5jdGlvbiAocGFyZW50KSB7DQoNCiAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJzwnICsgcGFyZW50Lm5vZGUgKyAnPicpOw0KDQogICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDsNCiAgICAgICAgICAgICAgICB2YXIgbGFzdFJhZGlvID0gJyQkJCc7DQogICAgICAgICAgICAgICAgdmFyIGxhc3RSYWRpb0VtcHR5ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAkLmVhY2gocGFyZW50LmVsZW1lbnRzLCBmdW5jdGlvbiAoXywgZWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBpbmRleCsrOw0KICAgICAgICAgICAgICAgICAgICB2YXIgcGFpciA9ICQuZ3JlcChwYWdlLnZhbHVlcywgZnVuY3Rpb24gKHZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUua2V5ID09PSBlbGVtZW50LmlkOw0KICAgICAgICAgICAgICAgICAgICB9KVswXTsNCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlbWVudDsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCQoZWxlbWVudCkuaXMoJzpyYWRpbycpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFJhZGlvICE9IGVsZW1lbnQubmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0UmFkaW9FbXB0eSAmJiBsYXN0UmFkaW8gIT0gJyQkJCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCc8JyArIGxhc3RSYWRpbyArICc+JyArIDAgKyAnPC8nICsgbGFzdFJhZGlvICsgJz4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJhZGlvID0gZWxlbWVudC5uYW1lOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSYWRpb0VtcHR5ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyICYmIHBhaXIudmFsdWUgPT09IHRydWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJzwnICsgZWxlbWVudC5uYW1lICsgJz4nICsgaW5kZXggKyAnPC8nICsgZWxlbWVudC5uYW1lICsgJz4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0UmFkaW9FbXB0eSA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQoZWxlbWVudCkuaXMoJzpjaGVja2JveCcpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJzwnICsgcGFpci5rZXkgKyAnPicgKyAocGFpci52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIChwYWlyLnZhbHVlID09PSB0cnVlIHx8IHBhaXIudmFsdWUgPT0gJzEnKSA/IDEgOiAwKSArICc8LycgKyBwYWlyLmtleSArICc+Jyk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLnZhbHVlICYmIHBhaXIudmFsdWUubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50KS5hdHRyKCdpc2VtcHR5JykgPT0gdW5kZWZpbmVkIHx8ICQoZWxlbWVudCkuYXR0cignaXNlbXB0eScpID09ICJmYWxzZSIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGVsZW1lbnQpLmF0dHIoImNsYXNzIikgJiYgJChlbGVtZW50KS5hdHRyKCJjbGFzcyIpLmluZGV4T2YoImRhdGUiKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhaXIudmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoZWxlbWVudCkuaXMoJ1tjbGFzcyo9ZGF0ZV0nKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHhtbEhlbHBlci50b1htbERhdGUodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJzwnICsgcGFpci5rZXkgKyAnPicgKyB2YWx1ZSArICc8LycgKyBwYWlyLmtleSArICc+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnPCcgKyBwYWlyLmtleSArICc+JyArIHBhaXIudmFsdWUgKyAnPC8nICsgcGFpci5rZXkgKyAnPicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zYi5hcHBlbmQoJzwnICsgcGFpci5rZXkgKyAnIC8+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NiLmFwcGVuZCgnPCcgKyBlbGVtZW50ICsgJyAvPicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgaWYgKGxhc3RSYWRpb0VtcHR5ICYmIGxhc3RSYWRpbyAhPSAnJCQkJykgew0KICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJzwnICsgbGFzdFJhZGlvICsgJz4nICsgMCArICc8LycgKyBsYXN0UmFkaW8gKyAnPicpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHBhcmVudC5jaGlsZHJlbiwgZnVuY3Rpb24gKF8sIGNoaWxkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVJlY3Vyc2l2ZShjaGlsZCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnPC8nICsgcGFyZW50Lm5vZGUgKyAnPicpOw0KDQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICB3cml0ZVJlY3Vyc2l2ZSh0aGlzLnN0cnVjdHVyZSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgbG9hZFhtbDogZnVuY3Rpb24gKHhtbE5vZGUsIG5vZGVOYW1lKSB7DQogICAgICAgICAgICBpZiAoIXhtbE5vZGUgfHwgIXhtbE5vZGUuY2hpbGROb2Rlcykgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy5yZXNldFNlY3Rpb24oKTsNCg0KICAgICAgICAgICAgaWYgKCF0aGlzLnN0cnVjdHVyZSkgew0KICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRVcFN0cnVjdHVyZSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgbG9hZFhtbFJlY3Vyc2l2ZSA9IGZ1bmN0aW9uIChzdHJ1Y3R1cmVOb2RlLCBzZWN0aW9uTm9kZSwgdmFsdWVzKSB7DQogICAgICAgICAgICAgICAgaWYgKCFzZWN0aW9uTm9kZSB8fCAhc2VjdGlvbk5vZGUuY2hpbGROb2Rlcykgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGorKykgew0KICAgICAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbkNoaWxkTm9kZSA9IHNlY3Rpb25Ob2RlLmNoaWxkTm9kZXNbal07DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc3NpYmxlU2VjdGlvbnMgPSAkLmdyZXAoc3RydWN0dXJlTm9kZS5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQubm9kZSA9PT0gc2VjdGlvbkNoaWxkTm9kZS5ub2RlTmFtZTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlU2VjdGlvbnMubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBsb2FkWG1sUmVjdXJzaXZlKHBvc3NpYmxlU2VjdGlvbnNbMF0sIHNlY3Rpb25DaGlsZE5vZGUsIHZhbHVlcyk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB2YXIgcG9zc2libGVFbGVtZW50cyA9ICQuZ3JlcChzdHJ1Y3R1cmVOb2RlLmVsZW1lbnRzLCBmdW5jdGlvbiAoZWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoZWxlbWVudC5lbGVtZW50KS5pcygnOnJhZGlvJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5uYW1lID09PSBzZWN0aW9uQ2hpbGROb2RlLm5vZGVOYW1lOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaWQgPT09IHNlY3Rpb25DaGlsZE5vZGUubm9kZU5hbWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZUVsZW1lbnRzLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc2VjdGlvbkNoaWxkTm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gcG9zc2libGVFbGVtZW50c1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGVsZW1lbnQuZWxlbWVudCkuaXMoJ1tjbGFzcyo9ZGF0ZV0nKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0geG1sSGVscGVyLmZyb21YbWxEYXRlKHZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGVsZW1lbnQuZWxlbWVudCkuaXMoJzpjaGVja2JveCcvKiwgOnJhZGlvJyovKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09ICcxJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHsga2V5OiBzZWN0aW9uQ2hpbGROb2RlLm5vZGVOYW1lLCB2YWx1ZTogdmFsdWUgfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhtbE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSB4bWxOb2RlLmNoaWxkTm9kZXNbaV07DQoNCiAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVOYW1lICE9PSBub2RlTmFtZSkgew0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107DQogICAgICAgICAgICAgICAgbG9hZFhtbFJlY3Vyc2l2ZSh0aGlzLnN0cnVjdHVyZSwgY2hpbGROb2RlLCB2YWx1ZXMpOw0KICAgICAgICAgICAgICAgIHRoaXMucGFnZXMucHVzaCh7IHZhbHVlczogdmFsdWVzIH0pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSB0aGlzLnBhZ2VzLmxlbmd0aCB8fCAxOw0KICAgICAgICAgICAgdGhpcy50b3RhbFBhZ2VzTGFiZWwudGV4dCh0aGlzLnRvdGFsUGFnZXMpOw0KDQogICAgICAgICAgICB0aGlzLmxvYWRDdXJyZW50UGFnZSgpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICAkLmZuLnBhZ2VhYmxlU2VjdGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgIHZhciBzZWxmID0gdGhpczsNCg0KICAgICAgICBpZiAoIW9wdGlvbnMpIHsNCiAgICAgICAgICAgIHJldHVybiBzZWxmLmRhdGEoJ3BhZ2VhYmxlLXNlY3Rpb24nKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAkLmVhY2goc2VsZiwgZnVuY3Rpb24gKF8sIGVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBQYWdlYWJsZVNlY3Rpb24oKTsNCiAgICAgICAgICAgICAgICBzZWN0aW9uLmluaXQoZWxlbWVudCwgb3B0aW9ucyk7DQoNCiAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmRhdGEoJ3BhZ2VhYmxlLXNlY3Rpb24nLCBzZWN0aW9uKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgfTsNCn0pKGpRdWVyeSk7DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEZ1bmtjaWUgcHJlIE1MIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCmZ1bmN0aW9uIHphb2tydWhsaV9kb2xlKGNpc2xvLCBwb2NfZGVzYXRpbikgew0KICAgIHZyYXQgPSBjaXNsbzsNCiAgICBwb21iID0gTWF0aC5wb3coMTAsIHBvY19kZXNhdGluKTsNCiAgICBwb21hID0gY2lzbG8gKiBwb21iOw0KICAgIHZyYXQgPSBNYXRoLmZsb29yKHBvbWEgKyAwLjAwMDAwMDAxKSAvIHBvbWI7DQogICAgcmV0dXJuIHZyYXQudG9GaXhlZChwb2NfZGVzYXRpbik7DQp9DQoNCmZ1bmN0aW9uIHphb2tydWhsaV9kb2xlbWoocG9jX2Rlc2F0aW4sIGNpc2xvKSB7DQogICAgdnJhdCA9IGNpc2xvOw0KICAgIHBvbWIgPSBNYXRoLnBvdygxMCwgcG9jX2Rlc2F0aW4pOw0KICAgIHBvbWEgPSBjaXNsbyAqIHBvbWI7DQogICAgdnJhdCA9IE1hdGguZmxvb3IocG9tYSArIDAuMDAwMDAwMDEpIC8gcG9tYjsNCiAgICByZXR1cm4gdnJhdC50b0ZpeGVkKHBvY19kZXNhdGluKTsNCn0NCg0KZnVuY3Rpb24gemFva3J1aGxpX2hvcmUoY2lzbG8sIHBvY19kZXNhdGluKSB7DQogICAgdnJhdCA9IGNpc2xvOw0KICAgIHBvbWIgPSBNYXRoLnBvdygxMCwgcG9jX2Rlc2F0aW4pOw0KICAgIHBvbWEgPSBjaXNsbyAqIHBvbWI7DQogICAgdnJhdCA9IE1hdGguY2VpbChwb21hKSAvIHBvbWI7DQogICAgcmV0dXJuIHZyYXQudG9GaXhlZChwb2NfZGVzYXRpbik7DQp9DQoNCmZ1bmN0aW9uIHphb2tydWhsaV9ob3JlbWoocG9jX2Rlc2F0aW4sIGNpc2xvKSB7DQogICAgdnJhdCA9IGNpc2xvOw0KICAgIHBvbWIgPSBNYXRoLnBvdygxMCwgcG9jX2Rlc2F0aW4pOw0KICAgIHBvbWEgPSBjaXNsbyAqIHBvbWI7DQogICAgdnJhdCA9IE1hdGguY2VpbChwb21hKSAvIHBvbWI7DQogICAgcmV0dXJuIHZyYXQudG9GaXhlZChwb2NfZGVzYXRpbik7DQp9DQoNCg0KZnVuY3Rpb24gemFva3J1aGxpX21hdGUoY2lzbG8sIHBvY19kZXNhdGluKSB7DQogICAgdnJhdCA9IGNpc2xvOw0KICAgIHBvbWIgPSBNYXRoLnBvdygxMCwgcG9jX2Rlc2F0aW4pOw0KICAgIHBvbWEgPSBjaXNsbyAqIHBvbWI7DQogICAgdnJhdCA9IE1hdGgucm91bmQocG9tYSkgLyBwb21iOw0KICAgIHJldHVybiB2cmF0LnRvRml4ZWQocG9jX2Rlc2F0aW4pOw0KfQ0KDQpmdW5jdGlvbiB6YW9rcnVobGlfbWF0bWoocG9jX2Rlc2F0aW4sIGNpc2xvKSB7DQogICAgdnJhdCA9IGNpc2xvOw0KICAgIHBvbWIgPSBNYXRoLnBvdygxMCwgcG9jX2Rlc2F0aW4pOw0KICAgIHBvbWEgPSBjaXNsbyAqIHBvbWI7DQogICAgdnJhdCA9IE1hdGgucm91bmQocG9tYSkgLyBwb21iOw0KICAgIHJldHVybiB2cmF0LnRvRml4ZWQocG9jX2Rlc2F0aW4pOw0KfQ0KDQpmdW5jdGlvbiBjaXNsb196bmFtaWVua28oY2lzbG8pIHsNCiAgICB2cmF0ID0gY2lzbG87DQogICAgaWYgKGNpc2xvID4gMCkgeyB2cmF0ID0gJysnICsgdnJhdDsgfQ0KICAgIHJldHVybiB2cmF0Ow0KfQ0KDQpmdW5jdGlvbiBzdW1fb3BhayhlbGVtZW50KSB7DQogICAgdmFyIHN1bSA9ICcnOw0KDQogICAgJCgiW2lkXj0nIiArIGVsZW1lbnQgKyAiJ10iKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCFpc05hTih0aGlzLnZhbHVlKSkNCiAgICAgICAgICAgIHN1bSA9IE51bWJlcihzdW0pICsgTnVtYmVyKHRoaXMudmFsdWUpOw0KICAgIH0pOw0KDQogICAgcmV0dXJuIHN1bTsNCn0NCg0KZnVuY3Rpb24gY291bnRfb3BhayhlbGVtZW50KSB7DQogICAgcmV0dXJuICQoIltpZF49JyIgKyBlbGVtZW50ICsgIiddIikubGVuZ3RoOw0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCnZhciBkaXNhYmxlVmFsaWRhdG9yUG9zdGZpeCA9ICJfU2VjdGlvbkluY3JlbWVudF8iOw0KdmFyIGRpc2FibGVWYWxpZGF0b3JQcmVmaXggPSAiRG9Ob3RWYWxpZGF0ZV8iOw0KdmFyIHJlcGVhdGluZ1Bvc3RmaXggPSAiX1JlcGVhdGluZ18iOw0KLy8vLy8vLy8vLy8vLy8vLyBNTCAvLy8vLy8vLy8vLy8vLw0KdmFyIHJlcGVhdGluZ0VsZW1lbnRQb3N0Zml4ID0gIi0iOw0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCnZhciBjb3VudCA9IDA7DQp2YXIgZmllbGRJbmRleCA9IDA7DQp2YXIgc2lnbiA9ICItIjsNCnZhciBkaXNhYmxlVmFsaWRhdG9ycyA9ICJkaXNhYmxlVmFsaWRhdG9ycyI7DQoNCmZ1bmN0aW9uIEdldExvb2t1cFVyaSgpIHsNCiAgICB0cnkgew0KICAgICAgICBpZiAobG9va3VwVXJpICE9IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgcmV0dXJuIGxvb2t1cFVyaTsNCiAgICAgICAgfQ0KICAgIH0gY2F0Y2ggKGVycikgeyB9DQoNCiAgICByZXR1cm4gJ2h0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvdXRpbC9GaWxsZXIvbG9va3VwLmFzcHgnOw0KfQ0KDQokLmZuLkluaXRIaWVyYXJjaGljYWxseVRyZWUgPSBmdW5jdGlvbiAoKSB7DQogICAgLy9hayBzdSBuZWpha2UgaGllcmFyY2hpY2tlIGNvbXBvbmVudHkNCiAgICB2YXIgaGllcmFyY2hpY2FsVHJpZXMgPSB0aGlzLmZpbmQoIi5oaWVyYXJjaGljYWxUcmVlIik7DQoNCiAgICBpZiAoaGllcmFyY2hpY2FsVHJpZXMubGVuZ3RoID09IDApIHsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgfQ0KDQogICAgLy96aXNrYW5pZSBhZHJlc3kgc2x1emJ5DQogICAgdmFyIHVybCA9IEdldExvb2t1cFVyaSgpOw0KDQogICAgLy9uYWNpdGFuaWUgYWRyZXN5IHNsdXpieQ0KICAgIHZhciBsb2FkQ2hpbGRyZW4gPSBmdW5jdGlvbiAobm9kZSwgbGV2ZWwsIG5vZGVJZCwgY2FsbGJhY2ssIGxvb2t1cElELCBsb29rdXBTb3VyY2UpIHsNCiAgICAgICAgdmFyIGRhdGEgPSAnaWQ9JyArIGxvb2t1cElEICsgJyZsb29rdXBTb3VyY2U9JyArIGxvb2t1cFNvdXJjZTsNCiAgICAgICAgaWYgKG5vZGVJZCAhPSBudWxsKSB7DQogICAgICAgICAgICBkYXRhICs9ICImcGFyZW50SWQ9IiArIG5vZGVJZDsNCiAgICAgICAgfQ0KDQogICAgICAgICQuYWpheCh7DQogICAgICAgICAgICBhc3luYzogdHJ1ZSwNCiAgICAgICAgICAgIHVybDogdXJsLA0KICAgICAgICAgICAgZGF0YTogZGF0YSwNCiAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbnAiDQogICAgICAgIH0pLmRvbmUoZnVuY3Rpb24gKGRhdGEpIHsNCiAgICAgICAgICAgIGlmIChkYXRhLmlUb3RhbERpc3BsYXlSZWNvcmRzID09IDApIHsNCiAgICAgICAgICAgICAgICBub2RlLmhhc19jaGlsZHJlbiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIG5vZGUuYnVzeSA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIGRlbGV0ZSBub2RlLmNoaWxkcmVuWzBdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQoNCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEuYWFEYXRhLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICBpZDogZGF0YS5hYURhdGFbaV1bMF0sDQogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5hYURhdGFbaV1bMV0sDQogICAgICAgICAgICAgICAgICAgICAgICBoYXNfY2hpbGRyZW46IHRydWUsDQogICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogbm9kZS5sZXZlbCArIDEsDQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10NCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBjYWxsYmFjayhub2RlKTsNCiAgICAgICAgfSkNCiAgICAgICAgLmVycm9yKGZ1bmN0aW9uIChkYXRhKSB7DQoNCiAgICAgICAgfSk7DQogICAgfTsNCg0KICAgIGhpZXJhcmNoaWNhbFRyaWVzLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgaGllcmFyY2hpY2FsVHJlZSA9ICQodGhpcyk7DQogICAgICAgIGlmICghaGllcmFyY2hpY2FsVHJlZS5oYXNDbGFzcygiY2hvc2VudHJlZSIpKSB7DQogICAgICAgICAgICBoaWVyYXJjaGljYWxUcmVlLmFkZENsYXNzKCJjaG9zZW50cmVlIik7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24gPSBoaWVyYXJjaGljYWxUcmVlLnNpYmxpbmdzKCJzcGFuLmxvb2t1cENvbmZpZ3VyYXRpb24iKTsNCiAgICAgICAgdmFyIHJlbW90ZVNvdXJjZUlkZW50aWZpZXIgPSBzcGFuTG9va3VwQ29uZmlndXJhdGlvbi5jaGlsZHJlbigic3Bhbi5yZW1vdGVTb3VyY2VJZGVudGlmaWVyIik7DQogICAgICAgIHZhciByZW1vdGVMb29rdXBDb2RlID0gc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24uY2hpbGRyZW4oInNwYW4ucmVtb3RlTG9va3VwQ29kZSIpOw0KICAgICAgICB2YXIgcmVtb3RlU291cmNlSWQgPSBzcGFuTG9va3VwQ29uZmlndXJhdGlvbi5jaGlsZHJlbigic3Bhbi5sb29rdXBDb21wb25lbnRJZCIpOw0KICAgICAgICB2YXIgcmVtb3RlU291cmNlTmFtZSA9IHNwYW5Mb29rdXBDb25maWd1cmF0aW9uLmNoaWxkcmVuKCJzcGFuLmxvb2t1cENvbXBvbmVudE5hbWUiKTsNCg0KICAgICAgICBpZiAocmVtb3RlU291cmNlSWRlbnRpZmllci5sZW5ndGggPiAwICYmIHJlbW90ZUxvb2t1cENvZGUubGVuZ3RoID4gMCAmJiByZW1vdGVTb3VyY2VJZC5sZW5ndGggPiAwICYmIHJlbW90ZVNvdXJjZU5hbWUubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgaGllcmFyY2hpY2FsVHJlZS5jaG9zZW50cmVlKHsNCiAgICAgICAgICAgICAgICBpbnB1dElkOiByZW1vdGVTb3VyY2VJZFswXS5pbm5lckhUTUwsDQogICAgICAgICAgICAgICAgaW5wdXROYW1lOiByZW1vdGVTb3VyY2VOYW1lWzBdLmlubmVySFRNTCwNCiAgICAgICAgICAgICAgICB3aWR0aDogNTAwLA0KICAgICAgICAgICAgICAgIGRlZXBMb2FkOiB0cnVlLA0KICAgICAgICAgICAgICAgIHNob3d0cmVlOiB0cnVlLA0KICAgICAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChub2RlLCBjYWxsYmFjaykgew0KICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZUlkID0gbm9kZS5pZCA9PSAwID8gbnVsbCA6IG5vZGUuaWQ7DQogICAgICAgICAgICAgICAgICAgIGxvYWRDaGlsZHJlbihub2RlLCAwLCBub2RlSWQsIGNhbGxiYWNrLCByZW1vdGVMb29rdXBDb2RlWzBdLmlubmVySFRNTCwgcmVtb3RlU291cmNlSWRlbnRpZmllclswXS5pbm5lckhUTUwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICByZXR1cm4gdGhpczsNCn0NCg0KJC5mbi5Jbml0SGVscCA9IGZ1bmN0aW9uICgpIHsNCg0KICAgIHZhciBJbmZvRGlhbG9nID0gZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciBpbmZvSWNvbiA9ICQodGhpcyk7DQogICAgICAgIHZhciBtb2RhbCA9IGluZm9JY29uLmZpbmQoIi5kaWFsb2ctbW9kYWwiKTsNCiAgICAgICAgbW9kYWwuZGlhbG9nKHsNCiAgICAgICAgICAgIHBvc2l0aW9uOiB7DQogICAgICAgICAgICAgICAgbXk6ICJsZWZ0IiwNCiAgICAgICAgICAgICAgICBhdDogInJpZ2h0IiwNCiAgICAgICAgICAgICAgICBvZjogaW5mb0ljb24sDQogICAgICAgICAgICAgICAgb2Zmc2V0OiAiMjAgMjAiDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24gKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgIGluZm9JY29uLnVuYmluZCgnbW91c2VvdXQnKTsNCiAgICAgICAgICAgICAgICBpbmZvSWNvbi5tb3VzZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChldmVudC50YXJnZXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmRpYWxvZygnZGVzdHJveScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZFRvKG1vZGFsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBpbmZvSWNvbi5tb3VzZWRvd24oZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICBpbmZvSWNvbi51bmJpbmQoJ21vdXNlb3V0Jyk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIChldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChldmVudC50YXJnZXQpOw0KICAgICAgICAgICAgICAgIHRhcmdldC5kaWFsb2coJ2Rlc3Ryb3knKTsNCiAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kVG8obW9kYWwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9Ow0KDQogICAgdGhpcy5maW5kKCIuaW5mbyIpLm1vdXNlb3ZlcihJbmZvRGlhbG9nKTsNCg0KICAgIHJldHVybiB0aGlzOw0KfQ0KDQokLmZuLkluaXRNdWx0aUNvbWJvYm94ID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBlbGVtZW50cyA9ICQoIi5tdWx0aUNvbWJvYm94Iik7DQogICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgZWxlbWVudHMubXVsdGlzZWxlY3QoKTsNCiAgICB9DQp9DQoNCiQuZm4uRGVsZXRlTXVsdGlDb21ib2JveCA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgZWxlbWVudHMgPSAkKCIubXVsdGlDb21ib2JveCIpOw0KICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAwKSB7DQogICAgICAgIGVsZW1lbnRzLm11bHRpc2VsZWN0KCJkZXN0cm95Iik7DQogICAgfQ0KfQ0KDQokLmZuLkluaXRSZW1vdGVDb21ib2JveCA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmZpbmQoIi5yZW1vdGVDb21ib0JveCIpOw0KICAgIHZhciBsYXlvdXRSb3cgPSB0aGlzOw0KICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAwKSB7DQogICAgICAgIGVsZW1lbnRzLmNoYW5nZShmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgcmVtb3RlQ29tYm9Cb3ggPSAkKHRoaXMpOw0KDQogICAgICAgICAgICBpZiAocmVtb3RlQ29tYm9Cb3guYXR0cigiZmllbGRJRCIpID09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIFJlbW90ZUNvbWJvYm94TmV3KHJlbW90ZUNvbWJvQm94LCBsYXlvdXRSb3cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgUmVtb3RlQ29tYm9ib3hPbGQocmVtb3RlQ29tYm9Cb3gsIGxheW91dFJvdyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIHJldHVybiB0aGlzOw0KfQ0KDQpmdW5jdGlvbiBSZW1vdGVDb21ib2JveE5ldyhyZW1vdGVDb21ib0JveCwgbGF5b3V0Um93KSB7DQogICAgdmFyIHJlbW90ZUNvbWJvYm94SWQgPSByZW1vdGVDb21ib0JveC5hdHRyKCJpZCIpOw0KICAgIHZhciByZXBldGlvbnNTZWN0aW9uSWQgPSAiIjsNCiAgICB2YXIgcmVwZXRpb25zU2VjdGlvbklkUG9zdGZpeCA9ICIiOw0KICAgIHZhciBpZFBhcnRzID0gcmVtb3RlQ29tYm9Cb3guYXR0cigiaWQiKS5zcGxpdCgnLScpOw0KICAgIGlmIChpZFBhcnRzLmxlbmd0aCA+IDEpIHsNCiAgICAgICAgcmVwZXRpb25zU2VjdGlvbklkID0gaWRQYXJ0c1tpZFBhcnRzLmxlbmd0aCAtIDFdOw0KICAgICAgICByZW1vdGVDb21ib2JveElkID0gaWRQYXJ0c1swXTsNCiAgICAgICAgcmVwZXRpb25zU2VjdGlvbklkUG9zdGZpeCA9ICItIiArIHJlcGV0aW9uc1NlY3Rpb25JZDsNCiAgICB9DQoNCiAgICAvL25hamRpIG5hamJsaXpzaSBza3J5dHkgc3Bhbiwga3Rvcnkgb2JzYWh1amUgaW5mb3JtYWNpdSBvIHJlbW90ZUNvbWJvYm94ZSANCiAgICB2YXIgc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24gPSByZW1vdGVDb21ib0JveC5zaWJsaW5ncygic3Bhbi5sb29rdXBDb25maWd1cmF0aW9uIik7DQogICAgdmFyIHNwYW5Mb29rdXBDb21wb25lbnRJZCA9IHNwYW5Mb29rdXBDb25maWd1cmF0aW9uLmNoaWxkcmVuKCJzcGFuLmxvb2t1cENvbXBvbmVudElkIik7DQogICAgdmFyIHNwYW5GaWVsZElkID0gc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24uY2hpbGRyZW4oInNwYW4uZmllbGRJZCIpOw0KDQogICAgaWYgKHNwYW5Mb29rdXBDb25maWd1cmF0aW9uLmxlbmd0aCA+IDApIHsNCiAgICAgICAgaWYgKHNwYW5Mb29rdXBDb21wb25lbnRJZC5sZW5ndGggPiAwICYmIHNwYW5GaWVsZElkLmxlbmd0aCA+IDAgJiYgc3Bhbkxvb2t1cENvbXBvbmVudElkWzBdLmlubmVySFRNTCA9PSByZW1vdGVDb21ib2JveElkKSB7DQogICAgICAgICAgICB2YXIgZmllbGRJZCA9IHNwYW5GaWVsZElkWzBdLmlubmVySFRNTCArIHJlcGV0aW9uc1NlY3Rpb25JZFBvc3RmaXg7DQogICAgICAgICAgICB2YXIgZmllbGRzID0gbGF5b3V0Um93LmZpbmQoIiMiICsgZmllbGRJZCk7DQogICAgICAgICAgICBmaWVsZHMuZmlyc3QoKS52YWwocmVtb3RlQ29tYm9Cb3gudmFsKCkpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQovL3RvZG8gb2Jzb2xldGUNCmZ1bmN0aW9uIFJlbW90ZUNvbWJvYm94T2xkKHJlbW90ZUNvbWJvQm94LCBsYXlvdXRSb3cpIHsNCiAgICB2YXIgcmVwZXRpb25zU2VjdGlvbklkID0gIiI7DQogICAgdmFyIGlkUGFydHMgPSByZW1vdGVDb21ib0JveC5hdHRyKCJpZCIpLnNwbGl0KCctJyk7DQogICAgaWYgKGlkUGFydHMubGVuZ3RoID4gMSkgew0KICAgICAgICByZXBldGlvbnNTZWN0aW9uSWQgPSBpZFBhcnRzW2lkUGFydHMubGVuZ3RoIC0gMV07DQogICAgfQ0KDQogICAgdmFyIGZpZWxkSWQgPSByZW1vdGVDb21ib0JveC5hdHRyKCJmaWVsZElEIik7DQogICAgdmFyIGZpZWxkcyA9IGxheW91dFJvdy5maW5kKCJpbnB1dFsiICsgImZpZWxkaWQiICsgIj0nIiArIGZpZWxkSWQgKyAiJ10iKTsNCiAgICBpZiAocmVwZXRpb25zU2VjdGlvbklkICE9ICIiKSB7DQogICAgICAgIGZpZWxkcy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBmaWVsZCA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgaWRQYXJ0c0ZpbGVzID0gZmllbGQuYXR0cigiaWQiKS5zcGxpdCgnLScpOw0KICAgICAgICAgICAgaWYgKGlkUGFydHNGaWxlc1tpZFBhcnRzRmlsZXMubGVuZ3RoIC0gMV0gPT0gcmVwZXRpb25zU2VjdGlvbklkKSB7DQogICAgICAgICAgICAgICAgZmllbGRzID0gZmllbGQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIGlmIChmaWVsZHMubGVuZ3RoID09IDApIHsNCiAgICAgICAgZmllbGRzID0gbGF5b3V0Um93LmZpbmQoInRleHRhcmVhWyIgKyAiZmllbGRpZCIgKyAiPSciICsgZmllbGRJZCArICInXSIpOw0KICAgICAgICBpZiAocmVwZXRpb25zU2VjdGlvbklkICE9ICIiKSB7DQogICAgICAgICAgICBmaWVsZHMuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdmFyIGZpZWxkID0gJCh0aGlzKTsNCiAgICAgICAgICAgICAgICB2YXIgaWRQYXJ0c0ZpbGVzID0gZmllbGQuYXR0cigiaWQiKS5zcGxpdCgnLScpOw0KICAgICAgICAgICAgICAgIGlmIChpZFBhcnRzRmlsZXNbaWRQYXJ0c0ZpbGVzLmxlbmd0aCAtIDFdID09IHJlcGV0aW9uc1NlY3Rpb25JZCkgew0KICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBmaWVsZDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGlmIChmaWVsZHMubGVuZ3RoID4gMCkNCiAgICAgICAgZmllbGRzLmZpcnN0KCkudmFsKHJlbW90ZUNvbWJvQm94LnZhbCgpKTsNCn0NCg0KJC5mbi5Jbml0U2VjdGlvbkFjY29yZGlvbiA9IGZ1bmN0aW9uICgpIHsNCiAgICB0aGlzLmZpbmQoIi5jYXB0aW9uIikuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgY2FwdGlvbiA9ICQodGhpcyk7DQogICAgICAgIHZhciBsYXlvdXRSb3dDb250ZW50ID0gY2FwdGlvbi5uZXh0KCIuY29sdW1ucyIpOw0KICAgICAgICAvL3ZhciBsYXlvdXRSb3cgPSBsYXlvdXRSb3dDb250ZW50LnBhcmVudCgpOw0KICAgICAgICAvL3ZhciBpc0VtcHR5ID0gbGF5b3V0Um93LmF0dHIoJ2lzRW1wdHknKTsNCg0KICAgICAgICAvL2lmIChpc0VtcHR5ID09ICd0cnVlJyl7ICAgICAgICAgICAgIA0KICAgICAgICAvLyAgICByZXR1cm47DQogICAgICAgIC8vfQ0KDQogICAgICAgIHZhciBhcnJvd1NwYW4gPSBjYXB0aW9uLmNoaWxkcmVuKCJzcGFuLnVpLWljb24iKTsNCiAgICAgICAgYXJyb3dTcGFuLnRvZ2dsZUNsYXNzKCJ1aS1pY29uLWNhcmF0LTEtbiIpLnRvZ2dsZUNsYXNzKCJ1aS1pY29uLWNhcmF0LTEtcyIpOw0KICAgICAgICAvL2xheW91dFJvd0NvbnRlbnQuc2xpZGVUb2dnbGUoMCk7DQogICAgICAgIGlmIChhcnJvd1NwYW4uaGFzQ2xhc3MoInVpLWljb24tY2FyYXQtMS1uIikpIHsNCiAgICAgICAgICAgIGxheW91dFJvd0NvbnRlbnQuc2hvdygpOw0KICAgICAgICB9IGVsc2UgaWYgKGFycm93U3Bhbi5oYXNDbGFzcygidWktaWNvbi1jYXJhdC0xLXMiKSkgew0KICAgICAgICAgICAgbGF5b3V0Um93Q29udGVudC5oaWRlKCk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KLy8gU2tvayBuYSBwb3phZG92YW55IGVsZW1lbnQgcyBwcmlwYWRueW0gcm96YmFsZW5pbSB6YmFsZW55Y2ggc2VrY2lpIGludGVyYWtjaW91IGNoeWJvdmVqIGhsYXNreQ0KZnVuY3Rpb24gZXhwYW5kTGF5b3V0Um93c0FuZEZvY3VzKCkgew0KICAgICQoJy5lcnJvcltmb3JdLCAud2FybmluZ1tmb3JdJykubGl2ZSgiZm9jdXMgY2xpY2siLCBmdW5jdGlvbiAoZSkgew0KICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQoNCiAgICAgICAgdmFyIGNsb3Nlc3RMYXlvdFJvdyA9ICQoIltpZD0nIiArIHRoaXMuaHRtbEZvciArICInXSIpLmNsb3Nlc3QoJy5sYXlvdXRSb3cnKTsNCiAgICAgICAgdmFyIGZpcnN0Q2FwdGlvbjsNCg0KICAgICAgICBpZiAoY2xvc2VzdExheW90Um93WzBdKSB7DQogICAgICAgICAgICBmaXJzdENhcHRpb24gPSAkKGNsb3Nlc3RMYXlvdFJvd1swXSkuZmluZCgnLmNhcHRpb24nKS5maXJzdCgpOw0KDQogICAgICAgICAgICBpZiAoZmlyc3RDYXB0aW9uLmNoaWxkcmVuKCJzcGFuLnVpLWljb24iKS5oYXNDbGFzcygidWktaWNvbi1jYXJhdC0xLXMiKSkNCiAgICAgICAgICAgICAgICBmaXJzdENhcHRpb24uY2xpY2soKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHdoaWxlIChjbG9zZXN0TGF5b3RSb3dbMF0pIHsNCiAgICAgICAgICAgIGlmIChjbG9zZXN0TGF5b3RSb3dbMF0ucGFyZW50RWxlbWVudCkgew0KICAgICAgICAgICAgICAgIGNsb3Nlc3RMYXlvdFJvdyA9ICQoY2xvc2VzdExheW90Um93WzBdLnBhcmVudEVsZW1lbnQpLmNsb3Nlc3QoJy5sYXlvdXRSb3cnKTsNCg0KICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0TGF5b3RSb3dbMF0pIHsNCiAgICAgICAgICAgICAgICAgICAgZmlyc3RDYXB0aW9uID0gJChjbG9zZXN0TGF5b3RSb3dbMF0pLmZpbmQoJy5jYXB0aW9uJykuZmlyc3QoKTsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDYXB0aW9uLmNoaWxkcmVuKCJzcGFuLnVpLWljb24iKS5oYXNDbGFzcygidWktaWNvbi1jYXJhdC0xLXMiKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2FwdGlvbi5jbGljaygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgICQoIltpZD0nIiArIHRoaXMuaHRtbEZvciArICInXSIpLmZvY3VzKCk7DQogICAgfSk7DQp9DQoNCiQuZm4uUmVtb3ZlRGF0ZVBpY2tlckNsYXNzID0gZnVuY3Rpb24gKCkgew0KICAgIHRoaXMuZmluZCgiLmRhdGVwaWNrZXIsIC5kYXRlcGlja2VySVNPLCAudGltZXBpY2tlciwgLmRhdGV0aW1lcGlja2VyIikucmVtb3ZlQ2xhc3MoImhhc0RhdGVwaWNrZXIiKTsNCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KJC5mbi5Jbml0RGF0ZVBpY2tlciA9IGZ1bmN0aW9uICgpIHsNCiAgICB0aGlzLmZpbmQoIi5kYXRlcGlja2VyIikuZGF0ZXBpY2tlcigpOw0KDQogICAgcmV0dXJuIHRoaXM7DQp9Ow0KDQokLmZuLkluaXREYXRlVGltZUNvbnRyb2wgPSBmdW5jdGlvbiAoKSB7DQogICAgdGhpcy5maW5kKCIuZGF0ZXRpbWVwaWNrZXIiKS5kYXRldGltZXBpY2tlcigpOw0KDQogICAgcmV0dXJuIHRoaXM7DQp9Ow0KDQokLmZuLkluaXRQb3BVcERpYWxvZyA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmZpbmQoIi5yZW1vdGVMb29rdXAiKTsNCg0KICAgIC8vIHZ5aHlia2Egc3RhcmVqIGEgbm92ZWogdmVyemllIHNjcmlwdHUNCiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkgew0KICAgICAgICBSZW1vdGVMb29rdXBOZXcodGhpcyk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICBSZW1vdGVMb29rdXBPbGQodGhpcyk7DQogICAgfQ0KDQogICAgcmV0dXJuIHRoaXM7DQp9DQoNCmZ1bmN0aW9uIEdldEZvcm1MYW5ndWFnZSgpIHsNCiAgICByZXR1cm4gJCgnbWV0YVtuYW1lPWxhbmd1YWdlXScpLmF0dHIoImNvbnRlbnQiKTsNCn0NCg0KLy90b2RvIG9ic29sZXRlDQpmdW5jdGlvbiBSZW1vdGVMb29rdXBPbGQobGF5b3V0Um93KSB7DQogICAgbGF5b3V0Um93LmZpbmQoImRpdltMb29rdXBEZXRhaWxdIikuZGlhbG9nKHsNCiAgICAgICAgYXV0b09wZW46IGZhbHNlLA0KICAgICAgICBtb2RhbDogdHJ1ZQ0KICAgIH0pOw0KDQogICAgbGF5b3V0Um93LmZpbmQoIltMb29rdXBCdXR0b25dIikuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgbG9va3VwQnRuID0gJCh0aGlzKTsNCiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSAiZmllbGRJRCI7DQogICAgICAgIHZhciBmaWVsZElkID0gbG9va3VwQnRuLmF0dHIoYXR0cmlidXRlTmFtZSk7DQogICAgICAgIHZhciBsb29rdXBTb3VyY2UgPSBsb29rdXBCdG4uYXR0cignbG9va3VwU291cmNlJyk7DQogICAgICAgIGZpZWxkSW5kZXggPSAkKCJzcGFuLmxvb2t1cGJ1dHRvblsiICsgYXR0cmlidXRlTmFtZSArICI9JyIgKyBmaWVsZElkICsgIiddIikuaW5kZXgodGhpcyk7DQogICAgICAgIHZhciBub25Qb3N0Zml4RmllbGRJRCA9IGZpZWxkSWQuc3BsaXQoZGlzYWJsZVZhbGlkYXRvclBvc3RmaXgpWzBdOw0KICAgICAgICB2YXIgZGlhbG9nID0gJCgiW0xvb2t1cEZvcm1dWyIgKyBhdHRyaWJ1dGVOYW1lICsgIj0nIiArIG5vblBvc3RmaXhGaWVsZElEICsgIiddIikuZXEoMCk7DQogICAgICAgIGRpYWxvZy5hdHRyKCJmaWVsZElEIiwgZmllbGRJZCk7DQogICAgICAgIGRpYWxvZy5hdHRyKCJsb29rdXBTb3VyY2UiLCBsb29rdXBTb3VyY2UpOw0KICAgICAgICBkaWFsb2cuY2xvc2VzdCgiLnVpLWRpYWxvZyIpLmFkZENsYXNzKCJsb29rdXAtZGlhbG9nIik7DQogICAgICAgIGRpYWxvZy5kaWFsb2coIm9wZW4iKTsNCiAgICB9KTsNCg0KICAgIGxheW91dFJvdy5maW5kKCJbRmllbGRJbmZvXSIpLm1vdXNlb3ZlcihmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBmaWVsZEluZm8gPSAkKHRoaXMpOw0KICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9ICJmaWVsZElEIjsNCiAgICAgICAgdmFyIGluZm9JY29uID0gZmllbGRJbmZvLmNoaWxkcmVuKCJzcGFuIik7DQogICAgICAgIHZhciB0YXJnZXRGaWVsZCA9IGluZm9JY29uLnBhcmVudCgpLnNpYmxpbmdzKCJbY2xhc3M9J2ZpZWxkQ29udGVudCddIikuY2hpbGRyZW4oImlucHV0W2lkXSIpOw0KICAgICAgICB2YXIgdGFyZ2V0V2lkdGggPSB0YXJnZXRGaWVsZC53aWR0aCgpOw0KICAgICAgICB2YXIgZmllbGRJZCA9IGZpZWxkSW5mby5hdHRyKGF0dHJpYnV0ZU5hbWUpOw0KICAgICAgICB2YXIgbm9uUG9zdGZpeEZpZWxkSUQgPSBmaWVsZElkLnNwbGl0KGRpc2FibGVWYWxpZGF0b3JQb3N0Zml4KVswXTsNCiAgICAgICAgdmFyIGZpZWxkSW5mb0luZGV4ID0gJCgiW0ZpZWxkSW5mb11bIiArIGF0dHJpYnV0ZU5hbWUgKyAiPSciICsgbm9uUG9zdGZpeEZpZWxkSUQgKyAiJ10iKS5pbmRleCh0aGlzKTsNCiAgICAgICAgdmFyIGluZm9UZXh0ID0gJCgiaW5wdXRbTG9va3VwRGV0YWlsSW5mb11bIiArIGF0dHJpYnV0ZU5hbWUgKyAiPSciICsgZmllbGRJZCArICInXSIpLmVxKGZpZWxkSW5mb0luZGV4KS52YWwoKTsNCiAgICAgICAgJCgiZGl2W0xvb2t1cERldGFpbF1bIiArIGF0dHJpYnV0ZU5hbWUgKyAiPSciICsgbm9uUG9zdGZpeEZpZWxkSUQgKyAiJ10iKS50ZXh0KGluZm9UZXh0KTsNCiAgICAgICAgdmFyIG1vZGFsID0gJCgiZGl2W0xvb2t1cERldGFpbF1bIiArIGF0dHJpYnV0ZU5hbWUgKyAiPSciICsgbm9uUG9zdGZpeEZpZWxkSUQgKyAiJ10iKS5lcSgwKTsNCiAgICAgICAgbW9kYWwuZGlhbG9nKHsNCiAgICAgICAgICAgIGF1dG9PcGVuOiB0cnVlLA0KICAgICAgICAgICAgbW9kYWw6IGZhbHNlLA0KICAgICAgICAgICAgcG9zaXRpb246IHsgbXk6ICJsZWZ0IGJvdHRvbS0zIiwgYXQ6ICJsZWZ0IHRvcCIsIG9mOiB0YXJnZXRGaWVsZCB9LA0KICAgICAgICAgICAgd2lkdGg6IHRhcmdldFdpZHRoLA0KICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24gKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgIGluZm9JY29uLnVuYmluZCgnbW91c2VvdXQnKTsNCiAgICAgICAgICAgICAgICBpbmZvSWNvbi5tb3VzZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAkKGV2ZW50LnRhcmdldCk7DQogICAgICAgICAgICAgICAgICAgIHRhcmdldC5kaWFsb2coJ2Nsb3NlJyk7DQogICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmRUbyhtb2RhbCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgaW5mb0ljb24ubW91c2Vkb3duKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgaW5mb0ljb24udW5iaW5kKCdtb3VzZW91dCcpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTsNCiAgICAgICAgICAgICAgICB0YXJnZXQuZGlhbG9nKCdjbG9zZScpOw0KICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmRUbyhtb2RhbCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0pOw0KDQogICAgbGF5b3V0Um93LmZpbmQoIltMb29rdXBGb3JtXSIpLmRpYWxvZyh7DQogICAgICAgIGF1dG9PcGVuOiBmYWxzZSwNCiAgICAgICAgaGVpZ2h0OiAzNTAsDQogICAgICAgIHdpZHRoOiA0MjAsDQogICAgICAgIG1vZGFsOiB0cnVlLA0KICAgICAgICBidXR0b25zOiB7DQogICAgICAgICAgICAiT0siOiBTdWJtaXRMb29rdXAsDQogICAgICAgICAgICAiWnJ1xaFpxaUiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgJCh0aGlzKS5kaWFsb2coImNsb3NlIik7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgIG9wZW46IE9wZW5Mb29rdXANCiAgICB9KTsNCg0KICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgbGF5b3V0Um93LmZpbmQoIltMb29rdXBGb3JtXSIpLmRpYWxvZyh7DQogICAgICAgICAgICAgICAgYnV0dG9uczogew0KICAgICAgICAgICAgICAgICAgICAiT0siOiBTdWJtaXRMb29rdXAsDQogICAgICAgICAgICAgICAgICAgICJDYW5jZWwiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmRpYWxvZygiY2xvc2UiKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgZGVmYXVsdDogLy8gc2sgYSBkZWZhdWx0DQogICAgICAgICAgICBsYXlvdXRSb3cuZmluZCgiW0xvb2t1cEZvcm1dIikuZGlhbG9nKHsNCiAgICAgICAgICAgICAgICBidXR0b25zOiB7DQogICAgICAgICAgICAgICAgICAgICJPSyI6IFN1Ym1pdExvb2t1cCwNCiAgICAgICAgICAgICAgICAgICAgIlpydcWhacWlIjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5kaWFsb2coImNsb3NlIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBTdWJtaXRMb29rdXAoKSB7DQogICAgICAgIHZhciBsb29rdXAgPSAkKHRoaXMpOw0KICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9ICJmaWVsZElEIjsNCiAgICAgICAgdmFyIGZpZWxkSWQgPSBsb29rdXAuYXR0cihhdHRyaWJ1dGVOYW1lKTsNCiAgICAgICAgdmFyIG5vblBvc3RmaXhGaWVsZElkID0gZmllbGRJZC5zcGxpdChkaXNhYmxlVmFsaWRhdG9yUG9zdGZpeClbMF07DQogICAgICAgIHZhciBhblNlbGVjdGVkID0gZm5HZXRTZWxlY3RlZChvVGFibGUpOw0KICAgICAgICB2YXIgZmllbGQgPSAkKCJbTG9va3VwRmllbGRdWyIgKyBhdHRyaWJ1dGVOYW1lICsgIj0nIiArIGZpZWxkSWQgKyAiJ10iKS5lcShmaWVsZEluZGV4KTsNCiAgICAgICAgdmFyIHR1cm5lZCA9ICJ0dXJuZWQiOw0KICAgICAgICB2YXIgbG9va3VwRGV0YWlsSW5mbyA9ICQoImlucHV0W0xvb2t1cERldGFpbEluZm9dWyIgKyBhdHRyaWJ1dGVOYW1lICsgIj0nIiArIGZpZWxkSWQgKyAiJ10iKS5lcShmaWVsZEluZGV4KTsNCiAgICAgICAgdmFyIGxvb2t1cEZpZWxkVmFsdWUgPSAkKCJpbnB1dFtMb29rdXBGaWVsZFZhbHVlXVsiICsgYXR0cmlidXRlTmFtZSArICI9JyIgKyBmaWVsZElkICsgIiddIikuZXEoZmllbGRJbmRleCk7DQogICAgICAgIHZhciBhRGF0YTsNCiAgICAgICAgaWYgKGFuU2VsZWN0ZWQubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgdmFyIGRhdGE7DQogICAgICAgICAgICBhRGF0YSA9IG9UYWJsZS5mbkdldERhdGEoYW5TZWxlY3RlZFswXSk7DQogICAgICAgICAgICBpZiAoZmllbGQuaGFzQ2xhc3ModHVybmVkKSkgew0KICAgICAgICAgICAgICAgIGZpZWxkLnZhbChhRGF0YVsxXSk7DQogICAgICAgICAgICAgICAgZGF0YSA9IGFEYXRhWzBdOw0KICAgICAgICAgICAgICAgIGxvb2t1cERldGFpbEluZm8udmFsKGRhdGEpOw0KICAgICAgICAgICAgICAgIGxvb2t1cEZpZWxkVmFsdWUudmFsKGRhdGEpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBmaWVsZC52YWwoYURhdGFbMF0pOw0KICAgICAgICAgICAgICAgIGRhdGEgPSBhRGF0YVsxXTsNCiAgICAgICAgICAgICAgICBsb29rdXBEZXRhaWxJbmZvLnZhbChkYXRhKTsNCiAgICAgICAgICAgICAgICBsb29rdXBGaWVsZFZhbHVlLnZhbChkYXRhKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIGFEYXRhID0gb1RhYmxlLmZuR2V0RGF0YShhblNlbGVjdGVkWzBdKTsNCiAgICAgICAgICAgIGZpZWxkLnZhbChmaWVsZC5oYXNDbGFzcyh0dXJuZWQpID8gYURhdGFbMF1bMV0gOiBhRGF0YVswXVswXSk7DQogICAgICAgICAgICBsb29rdXBEZXRhaWxJbmZvLnZhbChhRGF0YVsxXSk7DQogICAgICAgIH0NCiAgICAgICAgbG9va3VwLmF0dHIoYXR0cmlidXRlTmFtZSwgbm9uUG9zdGZpeEZpZWxkSWQpOw0KICAgICAgICBmaWVsZC5mb2N1cygpOw0KICAgICAgICBsb29rdXAuZGlhbG9nKCJjbG9zZSIpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIE9wZW5Mb29rdXAoKSB7DQogICAgICAgIHZhciBsb29rdXAgPSAkKHRoaXMpOw0KICAgICAgICB2YXIgbG9va3VwSWQgPSBsb29rdXAuYXR0cignbG9va3VwSUQnKTsNCiAgICAgICAgdmFyIGxvb2t1cFNvdXJjZSA9IGxvb2t1cC5hdHRyKCdsb29rdXBTb3VyY2UnKTsNCg0KICAgICAgICBvVGFibGUgPSBsb29rdXAuZmluZCgidGFibGVbaWRePSdMb29rdXBUYWJsZSddIikuZGF0YVRhYmxlKHsNCiAgICAgICAgICAgICJiQXV0b1dpZHRoIjogdHJ1ZSwNCiAgICAgICAgICAgICJiRmlsdGVyIjogdHJ1ZSwNCiAgICAgICAgICAgICJiU2VydmVyU2lkZSI6IHRydWUsDQogICAgICAgICAgICAiYkpRdWVyeVVJIjogdHJ1ZSwNCiAgICAgICAgICAgICJiUHJvY2Vzc2luZyI6IHRydWUsDQogICAgICAgICAgICAiYkxlbmd0aENoYW5nZSI6IGZhbHNlLA0KICAgICAgICAgICAgImlEaXNwbGF5TGVuZ3RoIjogMTAsDQogICAgICAgICAgICAiYlBhZ2luYXRlIjogdHJ1ZSwNCiAgICAgICAgICAgICJiSW5mbyI6IGZhbHNlLA0KICAgICAgICAgICAgImJSZXRyaWV2ZSI6IHRydWUsDQogICAgICAgICAgICAic0FqYXhTb3VyY2UiOiBHZXRMb29rdXBVcmkoKSArICc/aWQ9JyArIGxvb2t1cElkICsgJyZsb29rdXBTb3VyY2U9JyArIGxvb2t1cFNvdXJjZSArICcmY2FsbGJhY2s9PycsDQogICAgICAgICAgICAiYW9Db2x1bW5zIjogW3sgInNOYW1lIjogIktvZCIgfSwgeyAic05hbWUiOiAiSG9kbm90YSIgfV0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgb1RhYmxlLmZuRmlsdGVyT25SZXR1cm4oKTsNCg0KICAgICAgICBsb29rdXAuZmluZCgiW2lkXj0nTG9va3VwVGFibGUnXVtpZCQ9J19maWx0ZXInXSIpLmhpZGUoKTsNCiAgICAgICAgbG9va3VwLmZpbmQoIltpZF49J0ZpbHRlckJ1dHRvbiddIikuYnV0dG9uKCkuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgb1RhYmxlLmZuRmlsdGVyKCQodGhpcykucHJldigpLnZhbCgpKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgbG9va3VwLmZpbmQoInRhYmxlW2lkXj0nTG9va3VwVGFibGUnXSB0Ym9keSIpLmNsaWNrKGZ1bmN0aW9uIChldmVudCkgew0KICAgICAgICAgICAgJChvVGFibGUuZm5TZXR0aW5ncygpLmFvRGF0YSkuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgJCh0aGlzLm5UcikucmVtb3ZlQ2xhc3MoJ3Jvd19zZWxlY3RlZCcpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkKGV2ZW50LnRhcmdldC5wYXJlbnROb2RlKS5hZGRDbGFzcygncm93X3NlbGVjdGVkJyk7DQogICAgICAgIH0pOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gUmVtb3RlTG9va3VwTmV3KGxheW91dFJvdykgew0KDQogICAgdmFyIGVsZW1lbnRzID0gbGF5b3V0Um93LmZpbmQoIi5yZW1vdGVMb29rdXAiKTsNCiAgICBlbGVtZW50cy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHJlbW90ZUxvb2t1cCA9ICQodGhpcyk7DQoNCiAgICAgICAgdmFyIGxvb2t1cERldGFpbEluZm8gPSByZW1vdGVMb29rdXAuc2libGluZ3MoJy5Mb29rdXBEZXRhaWxJbmZvJyk7DQogICAgICAgIHZhciBsb29rdXBJbmZvID0gcmVtb3RlTG9va3VwLnBhcmVudCgpLnNpYmxpbmdzKCIuZmllbGRJbmZvIik7DQogICAgICAgIHZhciBsb29rdXBGaWVsZFZhbHVlID0gbnVsbDsNCiAgICAgICAgbG9va3VwRGV0YWlsSW5mby52YWwoIiIpOw0KDQogICAgICAgIC8vTmFjaXRhbmllIGhvZG5vdCB6IGtvbmZpZ3VyYWNuZWogc2VrY2llDQogICAgICAgIHZhciBzcGFuTG9va3VwQ29uZmlndXJhdGlvbiA9IHJlbW90ZUxvb2t1cC5zaWJsaW5ncygic3Bhbi5sb29rdXBDb25maWd1cmF0aW9uIik7DQogICAgICAgIHZhciBzcGFuTG9va3VwQ29tcG9uZW50SWQgPSBzcGFuTG9va3VwQ29uZmlndXJhdGlvbi5jaGlsZHJlbigic3Bhbi5sb29rdXBDb21wb25lbnRJZCIpOw0KICAgICAgICB2YXIgc3BhbkZpZWxkSWQgPSBzcGFuTG9va3VwQ29uZmlndXJhdGlvbi5jaGlsZHJlbigic3Bhbi5maWVsZElkIik7DQogICAgICAgIHZhciByZW1vdGVTb3VyY2VJZGVudGlmaWVyID0gc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24uY2hpbGRyZW4oInNwYW4ucmVtb3RlU291cmNlSWRlbnRpZmllciIpOw0KICAgICAgICB2YXIgcmVtb3RlTG9va3VwQ29kZSA9IHNwYW5Mb29rdXBDb25maWd1cmF0aW9uLmNoaWxkcmVuKCJzcGFuLnJlbW90ZUxvb2t1cENvZGUiKTsNCg0KICAgICAgICB2YXIgY2xvc2VzdExheW91dFJvdyA9IHJlbW90ZUxvb2t1cC5jbG9zZXN0KCIubGF5b3V0Um93Iik7DQoNCiAgICAgICAgaWYgKHNwYW5GaWVsZElkLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIGxvb2t1cEZpZWxkVmFsdWUgPSBjbG9zZXN0TGF5b3V0Um93LmZpbmQoJ1tpZHw9IicgKyBzcGFuRmllbGRJZC5odG1sKCkgKyAnIl0nKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vbmFqZGVuaWUgbG9va3VwIEZvcm11DQogICAgICAgIHZhciBsb29rdXBGb3JtcyA9ICQoIi5Mb29rdXBGb3JtIik7DQogICAgICAgIHZhciBsb29rdXBGb3JtID0gbnVsbDsNCiAgICAgICAgbG9va3VwRm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgbG9va3VwRm9ybUxvY2FsID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBzcGFuTG9va3VwRm9ybUNvbmZpZ3VyYXRpb24gPSBsb29rdXBGb3JtTG9jYWwuY2hpbGRyZW4oInNwYW4ubG9va3VwQ29uZmlndXJhdGlvbiIpOw0KICAgICAgICAgICAgdmFyIHNwYW5Mb29rdXBGb3JtQ29tcG9uZW50SWQgPSBzcGFuTG9va3VwRm9ybUNvbmZpZ3VyYXRpb24uY2hpbGRyZW4oInNwYW4ubG9va3VwQ29tcG9uZW50SWQiKTsNCiAgICAgICAgICAgIGlmIChzcGFuTG9va3VwRm9ybUNvbXBvbmVudElkWzBdLmlubmVySFRNTCA9PSBzcGFuTG9va3VwQ29tcG9uZW50SWRbMF0uaW5uZXJIVE1MKSB7DQogICAgICAgICAgICAgICAgbG9va3VwRm9ybSA9IGxvb2t1cEZvcm1Mb2NhbDsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KDQogICAgICAgIC8vbmFqZGVuaWUgbG9va3VwIGRldGFpbHUNCiAgICAgICAgdmFyIGxvb2t1cERldGFpbHMgPSAkKCIuTG9va3VwRGV0YWlsIik7DQogICAgICAgIHZhciBsb29rdXBEZXRhaWwgPSBudWxsOw0KICAgICAgICB2YXIgbG9va3VwVGFibGUgPSBudWxsOw0KICAgICAgICBsb29rdXBEZXRhaWxzLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIGxvb2t1cERldGFpbExvY2FsID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBzcGFuTG9va3VwRGV0YWlsQ29uZmlndXJhdGlvbiA9IGxvb2t1cERldGFpbExvY2FsLmNoaWxkcmVuKCJzcGFuLmxvb2t1cENvbmZpZ3VyYXRpb24iKTsNCiAgICAgICAgICAgIHZhciBzcGFuTG9va3VwRGV0YWlsQ29tcG9uZW50SWQgPSBzcGFuTG9va3VwRGV0YWlsQ29uZmlndXJhdGlvbi5jaGlsZHJlbigic3Bhbi5sb29rdXBDb21wb25lbnRJZCIpOw0KICAgICAgICAgICAgaWYgKHNwYW5Mb29rdXBEZXRhaWxDb21wb25lbnRJZFswXS5pbm5lckhUTUwgPT0gc3Bhbkxvb2t1cENvbXBvbmVudElkWzBdLmlubmVySFRNTCkgew0KICAgICAgICAgICAgICAgIGxvb2t1cERldGFpbCA9IGxvb2t1cERldGFpbExvY2FsOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgLy9uYXN0YXZuaWUgbG9va3VwIHRhYmxlDQogICAgICAgIGlmIChsb29rdXBGb3JtICE9IG51bGwpIHsNCiAgICAgICAgICAgIGxvb2t1cFRhYmxlID0gbG9va3VwRm9ybS5maW5kKCcuTG9va3VwVGFibGUnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChsb29rdXBEZXRhaWwhPSBudWxsICYmIGxvb2t1cERldGFpbC5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBsb29rdXBEZXRhaWwuZGlhbG9nKHsNCiAgICAgICAgICAgICAgICBhdXRvT3BlbjogZmFsc2UsDQogICAgICAgICAgICAgICAgbW9kYWw6IHRydWUNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgcmVtb3RlTG9va3VwLnNpYmxpbmdzKCIubG9va3VwYnV0dG9uIikuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgbG9va3VwRm9ybS5kaWFsb2coew0KICAgICAgICAgICAgICAgIGF1dG9PcGVuOiBmYWxzZSwNCiAgICAgICAgICAgICAgICBoZWlnaHQ6IDM1MCwNCiAgICAgICAgICAgICAgICB3aWR0aDogNDIwLA0KICAgICAgICAgICAgICAgIG1vZGFsOiB0cnVlLA0KICAgICAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIChhcmdzLCBjYWxsYmFjaykgew0KICAgICAgICAgICAgICAgICAgICBPcGVuTG9va3VwKGxvb2t1cEZvcm0sIGxvb2t1cFRhYmxlLCByZW1vdGVTb3VyY2VJZGVudGlmaWVyWzBdLmlubmVySFRNTCwgcmVtb3RlTG9va3VwQ29kZVswXS5pbm5lckhUTUwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgbG9va3VwRm9ybS5jbG9zZXN0KCIudWktZGlhbG9nIikuYWRkQ2xhc3MoImxvb2t1cC1kaWFsb2ciKTsNCiAgICAgICAgICAgIGxvb2t1cEZvcm0uZGlhbG9nKCJvcGVuIik7DQogICAgICAgIH0pOw0KDQogICAgICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICByZW1vdGVMb29rdXAuc2libGluZ3MoIi5sb29rdXBidXR0b24iKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIGxvb2t1cEZvcm0uZGlhbG9nKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0siOiBmdW5jdGlvbiAoYXJncywgY2FsbGJhY2spIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VibWl0TG9va3VwKGxvb2t1cEZvcm0sIHJlbW90ZUxvb2t1cCwgbG9va3VwRGV0YWlsSW5mbywgbG9va3VwRmllbGRWYWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuY2VsIjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmRpYWxvZygiY2xvc2UiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICByZW1vdGVMb29rdXAuc2libGluZ3MoIi5sb29rdXBidXR0b24iKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIGxvb2t1cEZvcm0uZGlhbG9nKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0siOiBmdW5jdGlvbiAoYXJncywgY2FsbGJhY2spIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VibWl0TG9va3VwKGxvb2t1cEZvcm0sIHJlbW90ZUxvb2t1cCwgbG9va3VwRGV0YWlsSW5mbywgbG9va3VwRmllbGRWYWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWnJ1xaFpxaUiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZGlhbG9nKCJjbG9zZSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobG9va3VwSW5mby5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBsb29rdXBJbmZvLm1vdXNlb3ZlcihmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdmFyIGluZm9JY29uID0gbG9va3VwSW5mby5jaGlsZHJlbigic3BhbiIpOw0KICAgICAgICAgICAgICAgIHZhciB0YXJnZXRXaWR0aCA9IHJlbW90ZUxvb2t1cC53aWR0aCgpOw0KICAgICAgICAgICAgICAgIHZhciBpbmZvVGV4dCA9IGxvb2t1cERldGFpbEluZm8udmFsKCk7DQogICAgICAgICAgICAgICAgbG9va3VwRGV0YWlsLmNoaWxkcmVuKCcuTG9va3VwRGV0YWlsSW5mb1RleHQnKS50ZXh0KGluZm9UZXh0KTsNCg0KICAgICAgICAgICAgICAgIGxvb2t1cERldGFpbC5kaWFsb2coew0KICAgICAgICAgICAgICAgICAgICBhdXRvT3BlbjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgbW9kYWw6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogeyBteTogImxlZnQgYm90dG9tLTMiLCBhdDogImxlZnQgdG9wIiwgb2Y6IHJlbW90ZUxvb2t1cCB9LA0KICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGFyZ2V0V2lkdGgsDQogICAgICAgICAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIChldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGluZm9JY29uLnVuYmluZCgnbW91c2VvdXQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGluZm9JY29uLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChldmVudC50YXJnZXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5kaWFsb2coJ2Nsb3NlJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZFRvKGxvb2t1cERldGFpbCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGluZm9JY29uLm1vdXNlZG93bihmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0ljb24udW5iaW5kKCdtb3VzZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChldmVudC50YXJnZXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmRpYWxvZygnY2xvc2UnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmRUbyhsb29rdXBEZXRhaWwpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KDQogICAgfSk7DQoNCiAgICBmdW5jdGlvbiBTdWJtaXRMb29rdXAobG9va3VwRm9ybSwgZmllbGQsIGxvb2t1cERldGFpbEluZm8sIGxvb2t1cEZpZWxkVmFsdWUpIHsNCiAgICAgICAgdmFyIGFuU2VsZWN0ZWQgPSBmbkdldFNlbGVjdGVkKG9UYWJsZSk7DQogICAgICAgIHZhciB0dXJuZWQgPSAidHVybmVkIjsNCiAgICAgICAgdmFyIGFEYXRhOw0KICAgICAgICBpZiAoYW5TZWxlY3RlZC5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICB2YXIgZGF0YTsNCiAgICAgICAgICAgIGFEYXRhID0gb1RhYmxlLmZuR2V0RGF0YShhblNlbGVjdGVkWzBdKTsNCiAgICAgICAgICAgIGlmIChmaWVsZC5oYXNDbGFzcyh0dXJuZWQpKSB7DQogICAgICAgICAgICAgICAgZmllbGQudmFsKGFEYXRhWzFdKTsNCiAgICAgICAgICAgICAgICBkYXRhID0gYURhdGFbMF07DQogICAgICAgICAgICAgICAgbG9va3VwRGV0YWlsSW5mby52YWwoZGF0YSk7DQogICAgICAgICAgICAgICAgaWYgKGxvb2t1cEZpZWxkVmFsdWUgIT0gbnVsbCkNCiAgICAgICAgICAgICAgICAgICAgbG9va3VwRmllbGRWYWx1ZS52YWwoZGF0YSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGZpZWxkLnZhbChhRGF0YVswXSk7DQogICAgICAgICAgICAgICAgZGF0YSA9IGFEYXRhWzFdOw0KICAgICAgICAgICAgICAgIGxvb2t1cERldGFpbEluZm8udmFsKGRhdGEpOw0KICAgICAgICAgICAgICAgIGlmIChsb29rdXBGaWVsZFZhbHVlICE9IG51bGwpDQogICAgICAgICAgICAgICAgICAgIGxvb2t1cEZpZWxkVmFsdWUudmFsKGRhdGEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgYURhdGEgPSBvVGFibGUuZm5HZXREYXRhKGFuU2VsZWN0ZWRbMF0pOw0KICAgICAgICAgICAgZmllbGQudmFsKGZpZWxkLmhhc0NsYXNzKHR1cm5lZCkgPyBhRGF0YVswXVsxXSA6IGFEYXRhWzBdWzBdKTsNCiAgICAgICAgICAgIGxvb2t1cERldGFpbEluZm8udmFsKGFEYXRhWzFdKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZpZWxkLmZvY3VzKCk7DQogICAgICAgIGxvb2t1cEZvcm0uZGlhbG9nKCJjbG9zZSIpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIE9wZW5Mb29rdXAobG9va3VwRm9ybSwgbG9va3VwVGFibGUsIGxvb2t1cFNvdXJjZSwgbG9va3VwSWQpIHsNCg0KICAgICAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICAgICAgb1RhYmxlID0gbG9va3VwVGFibGUuZGF0YVRhYmxlKHsNCiAgICAgICAgICAgICAgICAgICAgImJBdXRvV2lkdGgiOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAiYkZpbHRlciI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICJiU2VydmVyU2lkZSI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICJiSlF1ZXJ5VUkiOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAiYlByb2Nlc3NpbmciOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAiYkxlbmd0aENoYW5nZSI6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAiaURpc3BsYXlMZW5ndGgiOiAxMCwNCiAgICAgICAgICAgICAgICAgICAgImJQYWdpbmF0ZSI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICJiSW5mbyI6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAiYlJldHJpZXZlIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgInNBamF4U291cmNlIjogR2V0TG9va3VwVXJpKCkgKyAnP2lkPScgKyBsb29rdXBJZCArICcmbG9va3VwU291cmNlPScgKyBsb29rdXBTb3VyY2UgKyAnJmNhbGxiYWNrPT8nLA0KICAgICAgICAgICAgICAgICAgICAiYW9Db2x1bW5zIjogW3sgInNOYW1lIjogIkNvZGUiIH0sIHsgInNOYW1lIjogIlZhbHVlIiB9XSwNCiAgICAgICAgICAgICAgICAgICAgIm9MYW5ndWFnZSI6IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICJzRW1wdHlUYWJsZSI6ICJObyBkYXRhIGF2YWlsYWJsZSBpbiB0YWJsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAic0luZm8iOiAiU2hvd2luZyBfU1RBUlRfIHRvIF9FTkRfIG9mIF9UT1RBTF8gZW50cmllcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAic0luZm9FbXB0eSI6ICJTaG93aW5nIDAgdG8gMCBvZiAwIGVudHJpZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNJbmZvRmlsdGVyZWQiOiAiKGZpbHRlcmVkIGZyb20gX01BWF8gdG90YWwgZW50cmllcykiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNJbmZvUG9zdEZpeCI6ICIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNJbmZvVGhvdXNhbmRzIjogIiwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNMZW5ndGhNZW51IjogIlNob3cgX01FTlVfIGVudHJpZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNMb2FkaW5nUmVjb3JkcyI6ICJMb2FkaW5nLi4uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzUHJvY2Vzc2luZyI6ICJQcm9jZXNzaW5nLi4uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzU2VhcmNoIjogIlNlYXJjaDoiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNaZXJvUmVjb3JkcyI6ICJObyBtYXRjaGluZyByZWNvcmRzIGZvdW5kIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJvUGFnaW5hdGUiOiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNGaXJzdCI6ICJGaXJzdCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNMYXN0IjogIkxhc3QiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzTmV4dCI6ICJOZXh0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic1ByZXZpb3VzIjogIlByZXZpb3VzIg0KICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICJvQXJpYSI6IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic1NvcnRBc2NlbmRpbmciOiAiOiBhY3RpdmF0ZSB0byBzb3J0IGNvbHVtbiBhc2NlbmRpbmciLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzU29ydERlc2NlbmRpbmciOiAiOiBhY3RpdmF0ZSB0byBzb3J0IGNvbHVtbiBkZXNjZW5kaW5nIg0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIG9UYWJsZSA9IGxvb2t1cFRhYmxlLmRhdGFUYWJsZSh7DQogICAgICAgICAgICAgICAgICAgICJiQXV0b1dpZHRoIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgImJGaWx0ZXIiOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAiYlNlcnZlclNpZGUiOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAiYkpRdWVyeVVJIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgImJQcm9jZXNzaW5nIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgImJMZW5ndGhDaGFuZ2UiOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgImlEaXNwbGF5TGVuZ3RoIjogMTAsDQogICAgICAgICAgICAgICAgICAgICJiUGFnaW5hdGUiOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAiYkluZm8iOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgImJSZXRyaWV2ZSI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICJzQWpheFNvdXJjZSI6IEdldExvb2t1cFVyaSgpICsgJz9pZD0nICsgbG9va3VwSWQgKyAnJmxvb2t1cFNvdXJjZT0nICsgbG9va3VwU291cmNlICsgJyZjYWxsYmFjaz0/JywNCiAgICAgICAgICAgICAgICAgICAgImFvQ29sdW1ucyI6IFt7ICJzTmFtZSI6ICJLb2QiIH0sIHsgInNOYW1lIjogIkhvZG5vdGEiIH1dLA0KICAgICAgICAgICAgICAgICAgICAib0xhbmd1YWdlIjogew0KICAgICAgICAgICAgICAgICAgICAgICAgInNFbXB0eVRhYmxlIjogIk5pZSBzw7ogayBkaXNwb3rDrWNpaSDFvmlhZG5lIGTDoXRhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzSW5mbyI6ICJaw6F6bmFteSBfU1RBUlRfIGHFviBfRU5EXyB6IGNlbGtvbSBfVE9UQUxfIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzSW5mb0VtcHR5IjogIlrDoXpuYW15IDAgYcW+IDAgeiBjZWxrb20gMCAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNJbmZvRmlsdGVyZWQiOiAiKHZ5ZmlsdHJvdmFuw6kgc3BvbWVkemkgX01BWF8gesOhem5hbW92KSIsDQogICAgICAgICAgICAgICAgICAgICAgICAic0luZm9Qb3N0Rml4IjogIiIsDQogICAgICAgICAgICAgICAgICAgICAgICAic0luZm9UaG91c2FuZHMiOiAiLCIsDQogICAgICAgICAgICAgICAgICAgICAgICAic0xlbmd0aE1lbnUiOiAiWm9icmF6IF9NRU5VXyB6w6F6bmFtb3YiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNMb2FkaW5nUmVjb3JkcyI6ICJOYcSNw610YXZhbS4uLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAic1Byb2Nlc3NpbmciOiAiU3ByYWPDunZhbS4uLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAic1NlYXJjaCI6ICJIxL5hZGHFpToiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNaZXJvUmVjb3JkcyI6ICJOZW5hxaFsaSBzYSDFvmlhZG5lIHZ5aG92dWrDumNlIHrDoXpuYW15IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJvUGFnaW5hdGUiOiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNGaXJzdCI6ICJQcnbDoSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNMYXN0IjogIlBvc2xlZG7DoSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNOZXh0IjogIk5hc2xlZHVqw7pjYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNQcmV2aW91cyI6ICJQcmVkY2jDoWR6YWrDumNhIg0KICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICJvQXJpYSI6IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic1NvcnRBc2NlbmRpbmciOiAiOiBha3RpdnVqdGUgbmEgem9yYWRlbmllIHN0xLpwY2Egdnpvc3R1cG5lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic1NvcnREZXNjZW5kaW5nIjogIjogYWt0aXZ1anRlIG5hIHpvcmFkZW5pZSBzdMS6cGNhIHpvc3R1cG5lIg0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCg0KICAgICAgICBvVGFibGUuZm5GaWx0ZXJPblJldHVybigpOw0KDQogICAgICAgIHZhciBmaWx0ZXJCdXR0b24gPSBsb29rdXBGb3JtLmZpbmQoIi5GaWx0ZXJCdXR0b24iKTsNCiAgICAgICAgdmFyIGxvb2t1cFRhYmxlVGJvZHkgPSBsb29rdXBUYWJsZS5maW5kKCJ0Ym9keSIpOw0KICAgICAgICBmaWx0ZXJCdXR0b24udW5iaW5kKCJjbGljayIpOw0KICAgICAgICBsb29rdXBUYWJsZVRib2R5LnVuYmluZCgiY2xpY2siKTsNCg0KICAgICAgICBsb29rdXBGb3JtLmZpbmQoIi5kYXRhVGFibGVzX2ZpbHRlciIpLmhpZGUoKTsNCiAgICAgICAgZmlsdGVyQnV0dG9uLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciB0YWJsZUZpbHRlcklnbm9yZUNhc2VTZW5zaXRpdmUgPSBsb29rdXBGb3JtLmZpbmQoIi50YWJsZUZpbHRlcklnbm9yZUNhc2VTZW5zaXRpdmUiKTsNCiAgICAgICAgICAgIGlmICh0YWJsZUZpbHRlcklnbm9yZUNhc2VTZW5zaXRpdmUubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgICAgIHZhciBvU2V0dGluZ3MgPSBvVGFibGUuZm5TZXR0aW5ncygpOw0KICAgICAgICAgICAgICAgIG9TZXR0aW5ncy5zQWpheFNvdXJjZSA9IG9TZXR0aW5ncy5zQWpheFNvdXJjZS5yZXBsYWNlKCcmaWdub3JlQ2FzZVNlbnNpdGl2aXR5PXRydWUnLCAnJyk7DQogICAgICAgICAgICAgICAgb1NldHRpbmdzLnNBamF4U291cmNlID0gb1NldHRpbmdzLnNBamF4U291cmNlLnJlcGxhY2UoJyZpZ25vcmVDYXNlU2Vuc2l0aXZpdHk9ZmFsc2UnLCAnJyk7DQogICAgICAgICAgICAgICAgb1NldHRpbmdzLnNBamF4U291cmNlID0gb1NldHRpbmdzLnNBamF4U291cmNlICsgJyZpZ25vcmVDYXNlU2Vuc2l0aXZpdHk9JyArIHRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZS5pcygnOmNoZWNrZWQnKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgb1RhYmxlLmZuRmlsdGVyKCQodGhpcykucHJldigpLnZhbCgpKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgbG9va3VwVGFibGVUYm9keS5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsNCiAgICAgICAgICAgICQob1RhYmxlLmZuU2V0dGluZ3MoKS5hb0RhdGEpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICQodGhpcy5uVHIpLnJlbW92ZUNsYXNzKCdyb3dfc2VsZWN0ZWQnKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgJChldmVudC50YXJnZXQucGFyZW50Tm9kZSkuYWRkQ2xhc3MoJ3Jvd19zZWxlY3RlZCcpOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGpzb25Mb29rdXBDYWxsYmFjayhqc29uLCBmaWVsZElkKSB7DQogICAgdmFyIG9wdGlvbnMgPSAnJzsNCg0KICAgICQuZWFjaChqc29uLCBmdW5jdGlvbiAoa2V5LCB2YWwpIHsNCiAgICAgICAgb3B0aW9ucyArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIHZhbC5vcHRpb25WYWx1ZSArICciPicgKyB2YWwub3B0aW9uRGlzcGxheSArICc8XC9vcHRpb24+JzsNCiAgICB9KTsNCg0KICAgICQoInNlbGVjdCMiICsgZmllbGRJZCArICJTZWxlY3RMb29rdXAiKS5odG1sKG9wdGlvbnMpOw0KfQ0KDQokLmZuLkNsZWFyRm9ybUVsZW1lbnRzID0gZnVuY3Rpb24gKCkgew0KICAgIHRoaXMuZmluZCgnOmlucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKTsNCiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsNCiAgICAgICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzoNCiAgICAgICAgICAgIGNhc2UgJ3RleHQnOg0KICAgICAgICAgICAgY2FzZSAndGV4dGFyZWEnOg0KICAgICAgICAgICAgY2FzZSAnc2VsZWN0LW11bHRpcGxlJzoNCiAgICAgICAgICAgICAgICBlbGVtZW50LnZhbCgnJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdjaGVja2JveCc6DQogICAgICAgICAgICBjYXNlICdyYWRpbyc6DQogICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgZXJyb3JDbGFzcyA9ICJlcnJvciI7DQogICAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKGVycm9yQ2xhc3MpKSB7DQogICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKGVycm9yQ2xhc3MpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICB0aGlzLmZpbmQoJ3RleHRhcmVhJykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICQodGhpcykuaHRtbCgiIik7DQogICAgfSk7DQogICAgdGhpcy5maW5kKCdzZWxlY3QnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCh0aGlzKS52YWwoIiIpOw0KICAgIH0pOw0KDQogICAgcmV0dXJuIHRoaXM7DQp9Ow0KDQokLmZuLlJlaW5pdFJhZGlvRGVmYXVsdENoZWNrID0gZnVuY3Rpb24gKCkgew0KICAgIHRoaXMuZmluZCgnOmlucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7DQogICAgICAgIGNhc2UgJ3JhZGlvJzoNCiAgICAgICAgICAgIHZhciBpbnB1dCA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgZGVmYXVsdFZhbCA9IGlucHV0LmF0dHIoJ2RlZmF1bHQnKTsNCiAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsID09ICd0cnVlJykgew0KICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgaW5wdXQuY2xpY2soKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgcmV0dXJuIHRoaXM7DQp9Ow0KDQokLmZuLlJlc2V0UmVwZXRpdGlvblNlY3Rpb24gPSBmdW5jdGlvbiAoKSB7DQogICAgdGhpcy5maW5kKCcubGF5b3V0Um93LnJlcGVhdGluZ1NlY3Rpb24nKS5yZW1vdmUoKTsNCiAgICB0aGlzLmZpbmQoJy5sYXlvdXRSb3cuaGlkZGVuU2VjdGlvbicpLnRvZ2dsZUNsYXNzKCJoaWRkZW5TZWN0aW9uIik7DQogICAgdGhpcy5maW5kKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKS5zaG93KCk7DQogICAgdGhpcy5maW5kKCdzcGFuW2lkXj1yZW1vdmVTZWN0aW9ubGF5b3V0Um93XScpLmhpZGUoKTsNCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KZnVuY3Rpb24gY2xlYW5TZWN0aW9uSUQobGF5b3V0Um93SUQpIHsNCiAgICB2YXIgcmVnRXggPSBuZXcgUmVnRXhwKHJlcGVhdGluZ1Bvc3RmaXggKyAiXFxkKyQiKTsNCiAgICByZXR1cm4gbGF5b3V0Um93SUQucmVwbGFjZShyZWdFeCwgJycpOw0KfQ0KDQpmdW5jdGlvbiBHZXRSZXBlYXRpbmdTZWN0aW9ucyhyZXBlYXRTZWN0aW9uKSB7DQogICAgdmFyIHNlY3Rpb25zOw0KICAgIHZhciBmaWx0ZXJTZWN0aW9uID0gW107DQoNCiAgICBpZiAoJChyZXBlYXRTZWN0aW9uKS5oYXNDbGFzcygiY2xvc2VCdXR0b24iKSA9PSB0cnVlKSB7DQogICAgICAgIHZhciBsYXlvdXRSb3cgPSAkKHJlcGVhdFNlY3Rpb24pLmNsb3Nlc3QoJ2RpdltpZF49bGF5b3V0Um93XScpOw0KICAgICAgICB2YXIgbGF5b3V0Um93SWQgPSBsYXlvdXRSb3cuYXR0cigiSUQiKS5zcGxpdCgnXycpWzBdOw0KDQogICAgICAgIHNlY3Rpb25zID0gJCgnZGl2W2lkXj0nICsgbGF5b3V0Um93SWQgKyAnXScpOw0KDQogICAgICAgIHNlY3Rpb25zLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNsZWFuU2VjdGlvbklEKCQodGhpcykuYXR0cignSUQnKSkgPT0gbGF5b3V0Um93SWQpDQogICAgICAgICAgICAgICAgZmlsdGVyU2VjdGlvbi5wdXNoKCQodGhpcykpOw0KICAgICAgICB9KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICB2YXIgY2xlYW5JZCA9IGNsZWFuU2VjdGlvbklEKHBhcnNlSWQocmVwZWF0U2VjdGlvbiwgJ2FkZFNlY3Rpb24nKSk7DQogICAgICAgIHNlY3Rpb25zID0gJCgnZGl2W2lkXj0nICsgY2xlYW5JZCArICddJyk7DQoNCiAgICAgICAgc2VjdGlvbnMuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY2xlYW5TZWN0aW9uSUQoJCh0aGlzKS5hdHRyKCdJRCcpKSA9PSBjbGVhbklkKQ0KICAgICAgICAgICAgICAgIGZpbHRlclNlY3Rpb24ucHVzaCgkKHRoaXMpKTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgcmV0dXJuICQoJC5tYXAoZmlsdGVyU2VjdGlvbiwgZnVuY3Rpb24gKGVsKSB7IHJldHVybiAkLm1ha2VBcnJheShlbCkgfSkpOw0KfQ0KDQpmdW5jdGlvbiBJbmNyZW1lbnREZWNyZW1lbnRTZWN0aW9uSWQobGF5b3V0Um93Q29weSkgew0KICAgIHZhciByZXBlYXRTZWN0aW9uID0gbGF5b3V0Um93Q29weVswXTsNCiAgICBpZiAocmVwZWF0U2VjdGlvbiA9PSB1bmRlZmluZWQpIHsgcmVwZWF0U2VjdGlvbiA9IGxheW91dFJvd0NvcHk7IH0NCiAgICB2YXIgc2VjdGlvbnMgPSBHZXRSZXBlYXRpbmdTZWN0aW9ucyhyZXBlYXRTZWN0aW9uKTsNCg0KICAgIGlmIChzZWN0aW9ucy5maXJzdCgpWzBdKSB7DQogICAgICAgICQoc2VjdGlvbnMuZmlyc3QoKVswXSkuYXR0cigiSUQiLCBjbGVhblNlY3Rpb25JRCgkKHNlY3Rpb25zLmZpcnN0KClbMF0pLmF0dHIoIklEIikpKTsNCiAgICB9DQoNCiAgICB2YXIgaSA9IDA7DQoNCiAgICBzZWN0aW9ucy5zbGljZSgxKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHNlY3Rpb24gPSAkKHRoaXMpOw0KDQogICAgICAgIHNlY3Rpb24uYXR0cigiSUQiLCBHZXRJbmNyZW1lbnRhbFZhbHVlKHNlY3Rpb24uYXR0cigiSUQiKSwgKytpKSk7DQogICAgICAgIHNlY3Rpb24uYWRkQ2xhc3MoInJlcGVhdGluZ1NlY3Rpb24iKTsNCiAgICB9KTsNCn07DQoNCmZ1bmN0aW9uIEluY3JlbWVudERlY3JlbWVudElubmVyUmVwZWF0aW5nSWRzKGxheW91dFJvd0NvcHkpIHsNCiAgICAkKGxheW91dFJvd0NvcHkpLmZpbmQoJ2RpdltpZF0nKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgSW5jcmVtZW50RGVjcmVtZW50U2VjdGlvbklkKCQodGhpcykpOw0KICAgIH0pOw0KfQ0KDQokLmZuLkluY3JlbWVudEZpZWxkSWRzID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBsYXlvdXRSb3cgPSB0aGlzOw0KICAgIGxheW91dFJvdy5maW5kKCdbSURdLmRhdGVwaWNrZXIsIFtJRF06aW5wdXQsIFtJRF0uZGF0ZXJhbmdlcGlja2VyZGl2JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIEluY3JlbWVudEVsZW1lbnRzKGxheW91dFJvdywgJCh0aGlzKSwgWyJpZCIsICJuYW1lIl0pOw0KICAgIH0pOw0KDQogICAgcmV0dXJuIGxheW91dFJvdzsNCn07DQoNCmZ1bmN0aW9uIEluY3JlbWVudEVsZW1lbnRzKGxheW91dFJvdywgY29weUVsZW1lbnQsIGF0dHJpYnV0ZXMpIHsNCiAgICB2YXIgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZXNbMF07DQogICAgdmFyIG9sZElkID0gY29weUVsZW1lbnQuYXR0cihhdHRyaWJ1dGVOYW1lKTsNCiAgICBvbGRJZCA9IGdldE9yaWdpbmFsSWQob2xkSWQsIHNpZ24pOw0KICAgIHZhciBzZWxlY3RvciA9ICJbIiArIGF0dHJpYnV0ZU5hbWUgKyAifD0nIiArIG9sZElkICsgIiddIjsNCiAgICB2YXIgZWxlbWVudHMgPSAkKCIjbWFpbiIpLmZpbmQoc2VsZWN0b3IpOw0KDQogICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgdmFyIHN1ZmZpeCA9ICIiOw0KDQogICAgICAgIHN3aXRjaCAoY29weUVsZW1lbnRbMF0udHlwZSkgew0KICAgICAgICBjYXNlICdjaGVja2JveCc6DQogICAgICAgIGNhc2UgJ3JhZGlvJzoNCiAgICAgICAgICAgIHZhciBjb3VudFJhZGlvcyA9IGxheW91dFJvdy5maW5kKHNlbGVjdG9yKS5sZW5ndGg7DQogICAgICAgICAgICB2YXIgY291bnRHcm91cHMgPSBlbGVtZW50cy5sZW5ndGggLyBjb3VudFJhZGlvczsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnRHcm91cHM7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGkgKiBjb3VudFJhZGlvczsNCiAgICAgICAgICAgICAgICBlbGVtZW50cy5zbGljZShzdGFydCwgc3RhcnQgKyBjb3VudFJhZGlvcykuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9IHNpZ24gKyBpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgU2V0QXR0cmlidXRlRm9yKGVsZW1lbnQsIG9sZElkLCBzdWZmaXgpOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKGEgPSAwOyBhIDwgYXR0cmlidXRlcy5sZW5ndGg7IGErKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgU2V0QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZXNbYV0sIHN1ZmZpeCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgaSA9IDA7DQogICAgICAgICAgICB2YXIgZmlydHNFbGVtZW50ID0gZWxlbWVudHMuZmlyc3QoKTsNCiAgICAgICAgICAgIFNldEF0dHJpYnV0ZUZvcihmaXJ0c0VsZW1lbnQsIG9sZElkLCBzdWZmaXgpOw0KICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgYSsrKSB7DQogICAgICAgICAgICAgICAgU2V0QXR0cmlidXRlKGZpcnRzRWxlbWVudCwgYXR0cmlidXRlc1thXSwgc3VmZml4KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZWxlbWVudHMuc2xpY2UoMSkuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgc3VmZml4ID0gc2lnbiArICsraTsNCiAgICAgICAgICAgICAgICBTZXRBdHRyaWJ1dGVGb3IoZWxlbWVudCwgb2xkSWQsIHN1ZmZpeCk7DQogICAgICAgICAgICAgICAgZm9yIChhID0gMDsgYSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBhKyspIHsNCiAgICAgICAgICAgICAgICAgICAgU2V0QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZXNbYV0sIHN1ZmZpeCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgbGFzdEVsZW1lbnQgPSBlbGVtZW50cy5zbGljZShlbGVtZW50cy5sZW5ndGggLSAxKTsNCiAgICAgICAgaWYgKGxhc3RFbGVtZW50ICE9IGNvcHlFbGVtZW50KSB7DQogICAgICAgICAgICBDb3B5VmFsaWRhdGlvblJ1bGVzKG9sZElkLCBsYXN0RWxlbWVudCk7DQogICAgICAgIH0NCiAgICAgICAgQ29weVZhbGlkYXRpb25SdWxlcyhvbGRJZCwgY29weUVsZW1lbnQpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gU2V0QXR0cmlidXRlKGlucHV0LCBhdHRyaWJ1dGVOYW1lLCBzdWZmaXgpIHsNCiAgICB2YXIgdmFsdWUgPSBpbnB1dC5hdHRyKGF0dHJpYnV0ZU5hbWUpOw0KICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7DQogICAgICAgIHZhbHVlID0gZ2V0T3JpZ2luYWxJZCh2YWx1ZSwgc2lnbik7DQoNCiAgICAgICAgaW5wdXQuYXR0cihhdHRyaWJ1dGVOYW1lLCB2YWx1ZSArIHN1ZmZpeCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBnZXRPcmlnaW5hbElkKHZhbHVlLCBzaWduKSB7DQogICAgdmFyIGluZGV4ID0gdmFsdWUuaW5kZXhPZihzaWduKTsNCiAgICBpZiAoaW5kZXggPiAtMSkgew0KICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBpbmRleCk7DQogICAgfQ0KDQogICAgcmV0dXJuIHZhbHVlOw0KfQ0KDQpmdW5jdGlvbiBTZXRBdHRyaWJ1dGVGb3IoZWxlbWVudCwgb2xkSWQsIHN1ZmZpeCkgew0KICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gImZvciI7DQogICAgdmFyIHNlbGVjdG9yRm9yID0gIlsiICsgYXR0cmlidXRlTmFtZSArICJ8PSciICsgb2xkSWQgKyAiJ10iOw0KICAgIHZhciBsYWJlbCA9IGVsZW1lbnQuY2xvc2VzdCgnZGl2JykuZmluZChzZWxlY3RvckZvcik7DQogICAgaWYgKGxhYmVsICE9IHVuZGVmaW5lZCkgew0KICAgICAgICBTZXRBdHRyaWJ1dGUobGFiZWwsIGF0dHJpYnV0ZU5hbWUsIHN1ZmZpeCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBDb3B5VmFsaWRhdGlvblJ1bGVzKG9sZElkLCBjb3B5RWxlbWVudCkgew0KICAgIGlmIChjb3B5RWxlbWVudC5hdHRyKCJuYW1lIikpIHsNCiAgICAgICAgdmFyIGVsZW1lbnQgPSAkKCcjJyArIG9sZElkKTsNCiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSAibmFtZSI7DQogICAgICAgIHZhciBlbGVtZW50TmFtZSA9IGVsZW1lbnQuYXR0cihhdHRyaWJ1dGVOYW1lKTsNCiAgICAgICAgaWYgKGVsZW1lbnROYW1lICE9IG51bGwpIHsNCiAgICAgICAgICAgIHZhciBiYWNrVXBFbGVtZW50TmFtZSA9IGVsZW1lbnRbMF0ubmFtZTsNCiAgICAgICAgICAgIHZhciBiYWNrVXBDb3B5RWxlbWVudCA9IGNvcHlFbGVtZW50WzBdLm5hbWU7DQogICAgICAgICAgICBlbGVtZW50WzBdLm5hbWUgPSBlbGVtZW50WzBdLm5hbWUucmVwbGFjZShkaXNhYmxlVmFsaWRhdG9yUHJlZml4LCAnJyk7DQogICAgICAgICAgICBjb3B5RWxlbWVudFswXS5uYW1lID0gY29weUVsZW1lbnRbMF0ubmFtZS5yZXBsYWNlKGRpc2FibGVWYWxpZGF0b3JQcmVmaXgsICcnKTsNCiAgICAgICAgICAgIHZhciBydWxlcyA9IGVsZW1lbnQucnVsZXMoKTsNCg0KICAgICAgICAgICAgaWYgKGVsZW1lbnRbMF0gIT0gY29weUVsZW1lbnRbMF0pDQogICAgICAgICAgICAgICAgZWxlbWVudFswXS5uYW1lID0gYmFja1VwRWxlbWVudE5hbWU7DQoNCiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50WzBdOw0KICAgICAgICAgICAgdmFyIG5ld1J1bGVzID0ge307DQogICAgICAgICAgICB2YXIgbmV3TWVzc2FnZXMgPSB7fTsNCiAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9ICQuZGF0YShlbGVtZW50LmZvcm0sICd2YWxpZGF0b3InKS5zZXR0aW5nczsNCiAgICAgICAgICAgIGZvciAodmFyIG1ldGhvZCBpbiBydWxlcykgew0KICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWV0aG9kLnJlcGxhY2UoZWxlbWVudE5hbWUsIGNvcHlFbGVtZW50LmF0dHIoYXR0cmlidXRlTmFtZSkpOw0KICAgICAgICAgICAgICAgIHZhciB2YWxpZGF0aW9uT2JqZWN0ID0gc2V0dGluZ3MubWVzc2FnZXNbZWxlbWVudC5uYW1lLnJlcGxhY2UoZGlzYWJsZVZhbGlkYXRvclByZWZpeCwgJycpXTsNCiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbk9iamVjdCAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIG5ld1J1bGVzW25hbWVdID0gcnVsZXNbbWV0aG9kXTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2VzID0gdmFsaWRhdGlvbk9iamVjdFttZXRob2RdOw0KICAgICAgICAgICAgICAgICAgICBuZXdNZXNzYWdlc1tuYW1lXSA9IG1lc3NhZ2VzOw0KICAgICAgICAgICAgICAgICAgICAkLnZhbGlkYXRvci5hZGRNZXRob2QobmFtZSwgJC52YWxpZGF0b3IubWV0aG9kc1ttZXRob2RdKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBuZXdSdWxlcy5tZXNzYWdlcyA9IG5ld01lc3NhZ2VzOw0KICAgICAgICAgICAgY29weUVsZW1lbnQucnVsZXMoJ2FkZCcsIG5ld1J1bGVzKTsNCiAgICAgICAgICAgIGNvcHlFbGVtZW50WzBdLm5hbWUgPSBiYWNrVXBDb3B5RWxlbWVudDsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gR2V0SW5jcmVtZW50YWxWYWx1ZSh2YWx1ZSwgc2VjdGlvbkluY3JlbWVudCkgew0KICAgIHZhciByZWdFeCA9IG5ldyBSZWdFeHAocmVwZWF0aW5nUG9zdGZpeCArICJcXGQrJCIpOw0KICAgIHZhciBjbGVhblZhbCA9IHZhbHVlLnJlcGxhY2UocmVnRXgsICcnKTsNCiAgICAvLy8vLy8gTUwgdnJhdGkgcG92b2RudSAvLy8vDQogICAgLy9pZiAoc2VjdGlvbkluY3JlbWVudCA9PSAnJykNCiAgICAvLyAgICByZXR1cm4gY2xlYW5WYWw7DQogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KICAgIHJldHVybiBjbGVhblZhbCArIHJlcGVhdGluZ1Bvc3RmaXggKyBzZWN0aW9uSW5jcmVtZW50Ow0KfQ0KDQpmdW5jdGlvbiBSZWluZGV4QWRkcmVzc0lucHV0KHZhbHVlKSB7DQogICAgdmFyIGluZGV4ID0gdmFsdWUuaW5kZXhPZihzaWduKTsNCiAgICBpZiAoaW5kZXggPiAwKSB7DQogICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KTsNCiAgICB9DQoNCiAgICB2YXIgY291bnQgPSAwOw0KICAgIHZhciBzZWxlY3RvciA9IHZhbHVlOw0KICAgIHZhciBlbGVtZW50ID0gJCgnIycgKyBzZWxlY3Rvcik7DQoNCiAgICB3aGlsZSAoZWxlbWVudFswXSAhPSB1bmRlZmluZWQpIHsNCiAgICAgICAgY291bnQgPSBjb3VudCArIDE7DQogICAgICAgIHNlbGVjdG9yID0gdmFsdWUgKyBzaWduICsgY291bnQ7DQogICAgICAgIGVsZW1lbnQgPSAkKCcjJyArIHNlbGVjdG9yKTsNCiAgICB9DQoNCiAgICByZXR1cm4gc2VsZWN0b3I7DQp9DQoNCmZ1bmN0aW9uIEdldFZhbHVlV2l0aG91dEluY3JlbWVudGFsKHZhbHVlKSB7DQogICAgdmFyIHJlZ0V4ID0gbmV3IFJlZ0V4cChyZXBlYXRpbmdQb3N0Zml4ICsgIlxcZCskIik7DQogICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmVnRXgsICcnKTsNCn0NCg0KZnVuY3Rpb24gSW5jcmVtZW50SXRlbURlbGVnYXRlKGNvbnRleHQsIHNlY3Rpb25JbmNyZW1lbnQpIHsNCiAgICB2YXIgYXR0cmlidXRlTmFtZSA9ICJuYW1lIjsNCiAgICBjb250ZXh0LmF0dHIoYXR0cmlidXRlTmFtZSwgR2V0SW5jcmVtZW50YWxWYWx1ZShjb250ZXh0LmF0dHIoYXR0cmlidXRlTmFtZSksIHNlY3Rpb25JbmNyZW1lbnQpKTsNCn0NCg0KJC5mbi5Ub2dnbGVWYWxpZGF0b3JzID0gZnVuY3Rpb24gKHRvZ2dsZSkgew0KICAgIHZhciBhdHRyaWJ1dGVOYW1lOw0KICAgIGlmICh0b2dnbGUgPT0gZmFsc2UpIHsNCiAgICAgICAgYXR0cmlidXRlTmFtZSA9ICJuYW1lIjsNCiAgICAgICAgdGhpcy5maW5kKCdbSURdOmlucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpOw0KICAgICAgICAgICAgaW5wdXQuYXR0cihhdHRyaWJ1dGVOYW1lLCBpbnB1dC5hdHRyKGF0dHJpYnV0ZU5hbWUpLnJlcGxhY2UoZGlzYWJsZVZhbGlkYXRvclByZWZpeCwgJycpKTsNCiAgICAgICAgfSk7DQogICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAiZm9yIjsNCiAgICAgICAgdGhpcy5maW5kKCdsYWJlbCcpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIGlucHV0ID0gJCh0aGlzKTsNCiAgICAgICAgICAgIGlucHV0LmF0dHIoYXR0cmlidXRlTmFtZSwgaW5wdXQuYXR0cihhdHRyaWJ1dGVOYW1lKS5yZXBsYWNlKGRpc2FibGVWYWxpZGF0b3JQcmVmaXgsICcnKSk7DQogICAgICAgIH0pOw0KICAgICAgICB0aGlzLmZpbmQoIltpZF49J2xheW91dFJvdyddW2lzZW1wdHk9J3RydWUnXSIpLlRvZ2dsZVZhbGlkYXRvcnModHJ1ZSk7DQogICAgICAgIHRoaXMuZmluZCgiZGl2LmxheW91dFJvdy5oaWRkZW5TZWN0aW9uIikuVG9nZ2xlVmFsaWRhdG9ycyh0cnVlKTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBhdHRyaWJ1dGVOYW1lID0gIm5hbWUiOw0KICAgICAgICB0aGlzLmZpbmQoJ1tJRF06aW5wdXQnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBpbnB1dCA9ICQodGhpcyk7DQogICAgICAgICAgICBpZiAoaW5wdXQuYXR0cihhdHRyaWJ1dGVOYW1lKS5pbmRleE9mKGRpc2FibGVWYWxpZGF0b3JQcmVmaXgpID09IC0xKQ0KICAgICAgICAgICAgICAgIGlucHV0LmF0dHIoYXR0cmlidXRlTmFtZSwgZGlzYWJsZVZhbGlkYXRvclByZWZpeCArIGlucHV0LmF0dHIoYXR0cmlidXRlTmFtZSkpOw0KDQogICAgICAgICAgICBpbnB1dC5mb2N1c291dCgpOw0KICAgICAgICB9KTsNCiAgICAgICAgYXR0cmlidXRlTmFtZSA9ICJmb3IiOw0KICAgICAgICB0aGlzLmZpbmQoJ2xhYmVsJykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpOw0KICAgICAgICAgICAgaWYgKGlucHV0LmF0dHIoYXR0cmlidXRlTmFtZSkuaW5kZXhPZihkaXNhYmxlVmFsaWRhdG9yUHJlZml4KSA9PSAtMSkNCiAgICAgICAgICAgICAgICBpbnB1dC5hdHRyKGF0dHJpYnV0ZU5hbWUsIGRpc2FibGVWYWxpZGF0b3JQcmVmaXggKyBpbnB1dC5hdHRyKGF0dHJpYnV0ZU5hbWUpKTsNCiAgICAgICAgfSk7DQogICAgfQ0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KJC5mbi5Ub2dnbGVWYWxpZGF0b3JzU3R5bGUgPSBmdW5jdGlvbiAodG9nZ2xlKSB7DQogICAgdmFyIGRpc2FibGV2YWxpZGF0b3JzID0gZGlzYWJsZVZhbGlkYXRvcnM7DQogICAgdGhpcy5maW5kKCdbSURdOmlucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBpbnB1dCA9ICQodGhpcyk7DQogICAgICAgIGlmICh0b2dnbGUgPT0gZmFsc2UpIHsNCiAgICAgICAgICAgIGlucHV0LnJlbW92ZUNsYXNzKGRpc2FibGV2YWxpZGF0b3JzKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlucHV0LmFkZENsYXNzKGRpc2FibGV2YWxpZGF0b3JzKTsNCiAgICAgICAgfQ0KICAgICAgICBpbnB1dC5mb2N1c291dCgpOw0KICAgIH0pOw0KDQogICAgcmV0dXJuIHRoaXM7DQp9Ow0KDQokLmZuLkhpZGVTd2l0Y2hTZWN0aW9ucyA9IGZ1bmN0aW9uIChzd2l0Y2hlc1RvU2VjdGlvbnMpIHsNCiAgICBmb3IgKHZhciBvbmVTd2l0Y2ggaW4gc3dpdGNoZXNUb1NlY3Rpb25zKSB7DQogICAgICAgIHZhciB0cmlnZ2VyID0gJChvbmVTd2l0Y2gpOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaWdnZXIubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjdXJyZW50VHJpZ2dlciA9ICQodHJpZ2dlcltpXSk7DQogICAgICAgICAgICBpZiAoIWN1cnJlbnRUcmlnZ2VyLmlzKCI6Y2hlY2tlZCIpKSB7DQogICAgICAgICAgICAgICAgdmFyIHNlY3Rpb25zQ29sbGVjdGlvbiA9IHN3aXRjaGVzVG9TZWN0aW9uc1tvbmVTd2l0Y2hdOw0KICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gR2V0Q29udGV4dChjdXJyZW50VHJpZ2dlciwgc2VjdGlvbnNDb2xsZWN0aW9uKTsNCiAgICAgICAgICAgICAgICBmb3IgKHNlY3Rpb24gaW4gc2VjdGlvbnNDb2xsZWN0aW9uKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uID0gY29udGV4dC5maW5kKHNlY3Rpb25zQ29sbGVjdGlvbltzZWN0aW9uXSkuZXEoMCk7DQogICAgICAgICAgICAgICAgICAgIHZhciBoaWRkZW5zZWN0aW9uID0gImhpZGRlblNlY3Rpb24iOw0KICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5oYXNDbGFzcygnY2VsbCcpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbkNoaWxkID0gc2VjdGlvbi5jaGlsZHJlbigpLmZpcnN0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQudG9nZ2xlQ2xhc3MoaGlkZGVuc2VjdGlvbiwgdHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQuVG9nZ2xlVmFsaWRhdG9ycyh0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnRvZ2dsZUNsYXNzKGhpZGRlbnNlY3Rpb24sIHRydWUpOw0KICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLlRvZ2dsZVZhbGlkYXRvcnModHJ1ZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIHRoaXM7DQp9Ow0KDQokLmZuLlN3aXRjaFNlY3Rpb25zID0gZnVuY3Rpb24gKHN3aXRjaGVzVG9TZWN0aW9ucywgaXNDaGVja0JveExpc3QpIHsNCiAgICB2YXIgY29udGV4dCA9ICQodGhpcyk7DQogICAgdmFyIGlzU2hvd0FsbDsNCiAgICB2YXIgaGFzVmFsOw0KDQogICAgJCgnZm9ybScpLmZpbmQoY29udGV4dC5zZWxlY3RvcikuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBhY3R1YWxDb250ZXh0ID0gJCh0aGlzKTsNCiAgICAgICAgaGFzVmFsID0gZmFsc2U7DQogICAgICAgIGZvciAodmFyIHNpbmdsZVN3aXRjaCBpbiBzd2l0Y2hlc1RvU2VjdGlvbnMpIHsNCiAgICAgICAgICAgIGlzU2hvd0FsbCA9IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRhcmdldCA9IHN3aXRjaGVzVG9TZWN0aW9uc1tzaW5nbGVTd2l0Y2hdOw0KICAgICAgICAgICAgdmFyIHRyaWdnZXIgPSBhY3R1YWxDb250ZXh0LmZpbmQoc2luZ2xlU3dpdGNoKTsNCiAgICAgICAgICAgIGZvciAodmFyIHNlY3Rpb24gaW4gdGFyZ2V0KSB7DQogICAgICAgICAgICAgICAgaWYgKGlzU2hvd0FsbCkNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgICAgICAgICAgYWN0dWFsQ29udGV4dC5maW5kKHRhcmdldFtzZWN0aW9uXSkuZmluZCgnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpWzBdOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlICE9ICdyYWRpbycgJiYgZWxlbWVudC52YWx1ZSAhPSAnJykNCiAgICAgICAgICAgICAgICAgICAgICAgIGhhc1ZhbCA9IHRydWU7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgaXNTaG93QWxsID0gdHJpZ2dlci5pcygnW3JlYWRvbmx5XScpICYmICFoYXNWYWw7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIWlzU2hvd0FsbCkgew0KICAgICAgICAgICAgZm9yIChzaW5nbGVTd2l0Y2ggaW4gc3dpdGNoZXNUb1NlY3Rpb25zKSB7DQogICAgICAgICAgICAgICAgdHJpZ2dlciA9IGFjdHVhbENvbnRleHQuZmluZChzaW5nbGVTd2l0Y2gpOw0KICAgICAgICAgICAgICAgIGlmICh0cmlnZ2VyLmxlbmd0aCA9PSAwKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsNCg0KICAgICAgICAgICAgICAgIHRyaWdnZXIuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoaXNDaGVja0JveExpc3QgPT0gdHJ1ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaENoZWNrYm94Q2xpY2tlZChzd2l0Y2hlc1RvU2VjdGlvbnMsIHRoaXMpOw0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hSYWRpb0NsaWNrZWQoc3dpdGNoZXNUb1NlY3Rpb25zLCB0aGlzKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgcmV0dXJuIHRoaXM7DQp9Ow0KDQokLmZuLlJlaW5pdGlhbGl6ZUNvbmRpdGlvbmFsUnVsZXMgPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIGNvbnRleHQgPSAkKHRoaXMpOw0KDQogICAgSW5pdENvbmRpdGlvbmFsUnVsZXMoY29udGV4dCk7DQoNCiAgICByZXR1cm4gdGhpczsNCn07DQoNCmZ1bmN0aW9uIEdldENvbnRleHQoY3VycmVudGNsaWNrLCB0YXJnZXQpIHsNCiAgICByZXR1cm4gcmVjdXIoJChjdXJyZW50Y2xpY2spLCB0YXJnZXRbMF0pOw0KfQ0KDQpmdW5jdGlvbiBmaW5kUGFyZW50KGVsZW1lbnQpIHsNCiAgICB2YXIgcGF0dCA9IG5ldyBSZWdFeHAoIl5sYXlvdXRSb3dbMC05XSskIik7DQogICAgdmFyIHBhdHQyID0gbmV3IFJlZ0V4cCgiXmxheW91dFJvd1swLTldK19SZXBlYXRpbmdfWzAtOV0rJCIpOw0KICAgIHZhciBpZCA9IGVsZW1lbnRbMF0uaWQ7DQogICAgaWYgKHBhdHQudGVzdChpZCkgfHwgcGF0dDIudGVzdChpZCkgfHwgaWQgPT0gIm1haW4iKSB7DQogICAgICAgIHJldHVybiBlbGVtZW50Ow0KICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBmaW5kUGFyZW50KGVsZW1lbnQucGFyZW50KCkpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gcmVjdXIoZWxlbWVudCwgdGFyZ2V0KSB7DQogICAgdmFyIGY7DQogICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudFswXS5jaGlsZHJlbjsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07DQogICAgICAgIGlmIChjaGlsZC5pZCA9PSAibWFpbiIpIHsNCiAgICAgICAgICAgIHJldHVybiAkKCJmb3JtIik7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIHZhciBhID0gJChjaGlsZCkuZmluZCh0YXJnZXQpOw0KICAgICAgICAgICAgaWYgKGEubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgICAgIGYgPSBmaW5kUGFyZW50KGEucGFyZW50KCkpOw0KICAgICAgICAgICAgfSANCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGlmIChmID09IG51bGwpIHsNCiAgICAgICAgcmV0dXJuIHJlY3VyKGVsZW1lbnQucGFyZW50KCksIHRhcmdldCk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuIGY7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBjdXN0b21GdW5jdGlvbkFmdGVyU3dpdGNoU2VjdGlvbihzd2l0Y2hlc1RvU2VjdGlvbnMsIGN1cnJlbnRjbGljaykgew0KICAgIC8vIE92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gY3VzdG9tIHBfUFJPSkVDVC5qcyBmaWxlDQp9DQoNCmZ1bmN0aW9uIHN3aXRjaFJhZGlvQ2xpY2tlZChzd2l0Y2hlc1RvU2VjdGlvbnMsIGN1cnJlbnRjbGljaykgew0KICAgIGZvciAodmFyIG9uZVN3aXRjaCBpbiBzd2l0Y2hlc1RvU2VjdGlvbnMpIHsNCiAgICAgICAgdmFyIHRhcmdldCA9IHN3aXRjaGVzVG9TZWN0aW9uc1tvbmVTd2l0Y2hdOw0KICAgICAgICB2YXIgY29udGV4dCA9IEdldENvbnRleHQoY3VycmVudGNsaWNrLCB0YXJnZXQpOw0KICAgICAgICBvbmVTd2l0Y2ggPSBjb250ZXh0LmZpbmQob25lU3dpdGNoKTsNCg0KICAgICAgICBmb3IgKHZhciBzZWN0aW9uIGluIHRhcmdldCkgew0KICAgICAgICAgICAgc2VjdGlvbiA9IGNvbnRleHQuZmluZCh0YXJnZXRbc2VjdGlvbl0pOw0KICAgICAgICAgICAgdmFyIHNlY3Rpb25DaGlsZDsNCiAgICAgICAgICAgIHZhciBoaWRkZW5zZWN0aW9uID0gImhpZGRlblNlY3Rpb24iOw0KICAgICAgICAgICAgdmFyIGNlbGwgPSAnY2VsbCc7DQogICAgICAgICAgICBpZiAob25lU3dpdGNoWzBdID09IGN1cnJlbnRjbGljaykgew0KICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLmhhc0NsYXNzKGNlbGwpKSB7DQogICAgICAgICAgICAgICAgICAgIHNlY3Rpb25DaGlsZCA9IHNlY3Rpb24uY2hpbGRyZW4oKS5maXJzdCgpOw0KICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQudG9nZ2xlQ2xhc3MoaGlkZGVuc2VjdGlvbiwgZmFsc2UpOw0KICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQuVG9nZ2xlVmFsaWRhdG9ycyhmYWxzZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHNlY3Rpb24udG9nZ2xlQ2xhc3MoaGlkZGVuc2VjdGlvbiwgZmFsc2UpOw0KICAgICAgICAgICAgICAgIHNlY3Rpb24uVG9nZ2xlVmFsaWRhdG9ycyhmYWxzZSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLmhhc0NsYXNzKGNlbGwpKSB7DQogICAgICAgICAgICAgICAgICAgIHNlY3Rpb25DaGlsZCA9IHNlY3Rpb24uY2hpbGRyZW4oKS5maXJzdCgpOw0KICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQudG9nZ2xlQ2xhc3MoaGlkZGVuc2VjdGlvbiwgdHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgIHNlY3Rpb25DaGlsZC5Ub2dnbGVWYWxpZGF0b3JzKHRydWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBzZWN0aW9uLnRvZ2dsZUNsYXNzKGhpZGRlbnNlY3Rpb24sIHRydWUpOw0KICAgICAgICAgICAgICAgIHNlY3Rpb24uVG9nZ2xlVmFsaWRhdG9ycyh0cnVlKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJCgnW2lkXj0nICsgR2V0VmFsdWVXaXRob3V0SW5jcmVtZW50YWwoc2VjdGlvbi5hdHRyKCdpZCcpICsgJ10nKSkuUmVtb3ZlRGF0ZVBpY2tlckNsYXNzKCk7DQogICAgICAgICAgICBzZWN0aW9uLkluY3JlbWVudEZpZWxkSWRzKCk7DQogICAgICAgICAgICBJbml0UGlja2VycygpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgY3VzdG9tRnVuY3Rpb25BZnRlclN3aXRjaFNlY3Rpb24oc3dpdGNoZXNUb1NlY3Rpb25zLCBjdXJyZW50Y2xpY2spOw0KfQ0KDQpmdW5jdGlvbiBzd2l0Y2hDaGVja2JveENsaWNrZWQoc3dpdGNoZXNUb1NlY3Rpb25zLCBjdXJyZW50Y2xpY2spIHsNCiAgICB2YXIgaXNDaGVja2JveFNlbGVjdGVkID0gJChjdXJyZW50Y2xpY2spLmlzKCc6Y2hlY2tlZCcpOw0KICAgIHZhciBzZWN0aW9uc0NvbGxlY3Rpb24gPSBudWxsOw0KDQogICAgZm9yICh2YXIgc2VjdGlvbnNLZXkgaW4gc3dpdGNoZXNUb1NlY3Rpb25zKSB7DQogICAgICAgIHZhciB0YXJnZXQgPSBzd2l0Y2hlc1RvU2VjdGlvbnNbc2VjdGlvbnNLZXldOw0KICAgICAgICB2YXIgY29udGV4dCA9IEdldENvbnRleHQoY3VycmVudGNsaWNrLCB0YXJnZXQpOw0KICAgICAgICB2YXIgb25lU3dpdGNoID0gY29udGV4dC5maW5kKHNlY3Rpb25zS2V5KTsNCiAgICAgICAgaWYgKG9uZVN3aXRjaFswXSA9PSBjdXJyZW50Y2xpY2spIHsNCiAgICAgICAgICAgIHNlY3Rpb25zQ29sbGVjdGlvbiA9IHRhcmdldDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgaWYgKHNlY3Rpb25zQ29sbGVjdGlvbiA9PSBudWxsKQ0KICAgICAgICByZXR1cm47DQoNCiAgICBmb3IgKHZhciBzZWN0aW9uIGluIHNlY3Rpb25zQ29sbGVjdGlvbikgew0KICAgICAgICBzZWN0aW9uID0gY29udGV4dC5maW5kKHNlY3Rpb25zQ29sbGVjdGlvbltzZWN0aW9uXSkuZXEoMCk7DQogICAgICAgIHZhciBzZWN0aW9uQ2hpbGQ7DQogICAgICAgIHZhciBoaWRkZW5zZWN0aW9uID0gImhpZGRlblNlY3Rpb24iOw0KICAgICAgICB2YXIgY2VsbCA9ICdjZWxsJzsNCiAgICAgICAgaWYgKGlzQ2hlY2tib3hTZWxlY3RlZCkgew0KICAgICAgICAgICAgaWYgKHNlY3Rpb24uaGFzQ2xhc3MoY2VsbCkpIHsNCiAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQgPSBzZWN0aW9uLmNoaWxkcmVuKCkuZmlyc3QoKTsNCiAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQudG9nZ2xlQ2xhc3MoaGlkZGVuc2VjdGlvbiwgZmFsc2UpOw0KICAgICAgICAgICAgICAgIHNlY3Rpb25DaGlsZC5Ub2dnbGVWYWxpZGF0b3JzKGZhbHNlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHNlY3Rpb24udG9nZ2xlQ2xhc3MoaGlkZGVuc2VjdGlvbiwgZmFsc2UpOw0KICAgICAgICAgICAgc2VjdGlvbi5Ub2dnbGVWYWxpZGF0b3JzKGZhbHNlKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIGlmIChzZWN0aW9uLmhhc0NsYXNzKGNlbGwpKSB7DQogICAgICAgICAgICAgICAgc2VjdGlvbkNoaWxkID0gc2VjdGlvbi5jaGlsZHJlbigpLmZpcnN0KCk7DQogICAgICAgICAgICAgICAgc2VjdGlvbkNoaWxkLnRvZ2dsZUNsYXNzKGhpZGRlbnNlY3Rpb24sIHRydWUpOw0KICAgICAgICAgICAgICAgIHNlY3Rpb25DaGlsZC5Ub2dnbGVWYWxpZGF0b3JzKHRydWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc2VjdGlvbi50b2dnbGVDbGFzcyhoaWRkZW5zZWN0aW9uLCB0cnVlKTsNCiAgICAgICAgICAgIHNlY3Rpb24uVG9nZ2xlVmFsaWRhdG9ycyh0cnVlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGN1c3RvbUZ1bmN0aW9uQWZ0ZXJTd2l0Y2hTZWN0aW9uKHN3aXRjaGVzVG9TZWN0aW9ucywgY3VycmVudGNsaWNrKTsNCn0NCg0KJC5HZXRVcmxQYXJhbSA9IGZ1bmN0aW9uIChuYW1lKSB7DQogICAgdmFyIHJlc3VsdHMgPSBuZXcgUmVnRXhwKCdbXFw/Jl0nICsgbmFtZSArICc9KFteJiNdKiknKS5leGVjKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsNCg0KICAgIGlmIChyZXN1bHRzID09IG51bGwpDQogICAgICAgIHJldHVybiAwOw0KDQogICAgcmV0dXJuIHJlc3VsdHNbMV0gfHwgMDsNCn0NCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBNTCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCmZ1bmN0aW9uIEdldE9ubHlJbmNyZW1lbnRWYWx1ZSh2YWx1ZSkgeyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgcm96c2lyZW5pZQ0KDQogICAgdmFyIHJlZ0V4ID0gbmV3IFJlZ0V4cChyZXBlYXRpbmdFbGVtZW50UG9zdGZpeCArICIoXFxkKykkIikNCiAgICB2YXIgY2xlYW5WYWwgPSByZWdFeC5leGVjKHZhbHVlKTsNCiAgICBpZiAoY2xlYW5WYWwgPT0gbnVsbCkNCiAgICAgICAgcmV0dXJuICcnOw0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGNsZWFuVmFsWzFdKTsNCn0NCg0KZnVuY3Rpb24gZ2V0UGFnZWRTZWN0aW9uTmFtZShlbGVtZW50KSB7ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgcm96c2lyZW5pZQ0KICAgIHZhciBsc2VjcGcgPSAkKGVsZW1lbnQpLmNsb3Nlc3QoJ2Rpdi5wYWdlYWJsZVNlY3Rpb24nKTsNCiAgICBpZiAobHNlY3BnICE9IG51bGwpDQogICAgICAgIHJldHVybiBsc2VjcGcuYXR0cignaWQnKTsNCiAgICBlbHNlDQogICAgICAgIHJldHVybiBudWxsOw0KfQ0KDQpmdW5jdGlvbiBHZXRFbGVtZW50SW5jcmVtZW50YWxWYWx1ZSh2YWx1ZSwgc2VjdGlvbkluY3JlbWVudCkgew0KICAgIHZhciByZWdFeCA9IG5ldyBSZWdFeHAocmVwZWF0aW5nRWxlbWVudFBvc3RmaXggKyAiXFxkKyQiKTsNCiAgICB2YXIgY2xlYW5WYWwgPSB2YWx1ZS5yZXBsYWNlKHJlZ0V4LCAnJyk7DQogICAgLy8vLyBNTCB2cmF0aSBwb3ZvZG51IC8vLy8NCiAgICBpZiAoc2VjdGlvbkluY3JlbWVudCA9PSAnJykNCiAgICAgICAgcmV0dXJuIGNsZWFuVmFsOw0KDQogICAgcmV0dXJuIGNsZWFuVmFsICsgcmVwZWF0aW5nRWxlbWVudFBvc3RmaXggKyBzZWN0aW9uSW5jcmVtZW50Ow0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLyogXV0+ICovDQo8L3NjcmlwdD4NCgkJCQ0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8qIDwhW0NEQVRBWyAqLw0KLy8vIDxyZWZlcmVuY2UgcGF0aD0ianF1ZXJ5LTEuNC4xLXZzZG9jLmpzIiAvPg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgew0KICAgIEluaXRTdGF0dXNEaWFsb2coKTsNCn0pOw0KDQpmdW5jdGlvbiBJbml0U3RhdHVzRGlhbG9nKCkgew0KICAgIHN0YXR1c0RpYWxvZy5pbml0RGlhbG9nKCk7DQp9DQoNCnZhciBzdGF0dXNEaWFsb2cgPSB7DQoNCiAgICBnZXREaWFsb2c6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuICQoIiNzdGF0dXNEaWFsb2ciKTsNCiAgICB9LA0KDQogICAgaW5pdERpYWxvZzogZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZGxnID0gc3RhdHVzRGlhbG9nLmdldERpYWxvZygpOw0KDQogICAgICAgIGRsZy5kaWFsb2coeyANCiAgICAgICAgICAgICdhdXRvT3Blbic6IGZhbHNlLA0KICAgICAgICAgICAgJ21vZGFsJzogdHJ1ZSwNCiAgICAgICAgICAgICd0aXRsZSc6ICdEaWFsb2cnLA0KICAgICAgICAgICAgJ3Jlc2l6YWJsZSc6ICdkaXNhYmxlJywNCiAgICAgICAgICAgICd3aWR0aCc6ICczNTBweCcsDQogICAgICAgICAgICAnaGVpZ2h0JzogJ2F1dG8nDQogICAgICAgIH0pOw0KICAgIH0sDQoNCiAgICBzaG93RGlhbG9nOiBmdW5jdGlvbiAoKSB7DQogICAgICAgIHN0YXR1c0RpYWxvZy5nZXREaWFsb2coKS5kaWFsb2coJ29wZW4nKTsNCiAgICB9LA0KDQogICAgaGlkZURpYWxvZzogZnVuY3Rpb24gKCkgew0KICAgICAgICBzdGF0dXNEaWFsb2cuZ2V0RGlhbG9nKCkuZGlhbG9nKCdjbG9zZScpOw0KICAgIH0sDQoNCiAgICBzaG93UHJvZ3Jlc3M6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgc3RhdHVzRGlhbG9nLmdldERpYWxvZygpLmZpbmQoIiNzdGF0dXNMb2FkZXIiKS5zaG93KCk7DQogICAgfSwNCg0KICAgIGhpZGVQcm9ncmVzczogZnVuY3Rpb24gKCkgew0KICAgICAgICBzdGF0dXNEaWFsb2cuZ2V0RGlhbG9nKCkuZmluZCgiI3N0YXR1c0xvYWRlciIpLmhpZGUoKTsNCiAgICB9LA0KDQogICAgc2V0VGl0bGU6IGZ1bmN0aW9uICh0aXRsZSkgew0KICAgICAgICBzdGF0dXNEaWFsb2cuZ2V0RGlhbG9nKCkuZGlhbG9nKCJvcHRpb24iLCAidGl0bGUiLCB0aXRsZSk7DQogICAgfSwNCg0KICAgIHNldE1lc3NhZ2U6IGZ1bmN0aW9uIChtZXNzYWdlKSB7DQogICAgICAgIHN0YXR1c0RpYWxvZy5nZXREaWFsb2coKS5maW5kKCIjc3RhdHVzTWVzc2FnZSIpLnRleHQobWVzc2FnZSk7DQogICAgfSwNCg0KICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgIHN0YXR1c0RpYWxvZy5nZXREaWFsb2coKS5kaWFsb2coIm9wdGlvbiIsIG9wdGlvbnMpOw0KICAgIH0NCg0KfQ0KDQoNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCihmdW5jdGlvbigkKSB7CgogIC8qKgogICAqIFRoaXMgYWRkcyBhIENob3NlbiBzdHlsZSBzZWxlY3RvciBmb3IgdGhlIHRyZWUgc2VsZWN0IHdpZGdldC4KICAgKgogICAqIFRoaXMgd2lkZ2V0IHJlcXVpcmVzIGNob3Nlbi5jc3MuCiAgICovCiAgJC5mbi5jaG9zZW50cmVlID0gZnVuY3Rpb24ocGFyYW1zKSB7CgogICAgLy8gU2V0dXAgdGhlIGRlZmF1bHQgcGFyYW1ldGVycy4KICAgIHBhcmFtcyA9ICQuZXh0ZW5kKHsKICAgICAgaW5wdXRJZDogJ2Nob3NlbnRyZWUtc2VsZWN0JywgICAgIC8qKiBUaGUgaW5wdXQgZWxlbWVudCBJRCBhbmQgTkFNRS4gKi8KICAgICAgbGFiZWw6ICcnLCAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBUaGUgbGFiZWwgdG8gYWRkIHRvIHRoZSBpbnB1dC4gKi8KICAgICAgZGVzY3JpcHRpb246ICcnLCAgICAgICAgICAgICAgICAgIC8qKiBUaGUgZGVzY3JpcHRpb24gZm9yIHRoZSBpbnB1dC4gKi8KICAgICAgaW5wdXRfcGxhY2Vob2xkZXI6IG51bGwsIC8qKiBUaGUgaW5wdXQgcGxhY2Vob2xkZXIgdGV4dC4gKi8KICAgICAgaW5wdXRfdHlwZTogJ3RleHQnLCAgICAgICAgICAgICAgIC8qKiBEZWZpbmUgdGhlIGlucHV0IHR5cGUuICovCiAgICAgIGF1dG9zZWFyY2g6IGZhbHNlLCAgICAgICAgICAgICAgICAvKiogSWYgd2Ugd291bGQgbGlrZSB0byBhdXRvc2VhcmNoLiAqLwogICAgICBzZWFyY2hfdGV4dDogJ1NlYXJjaCcsICAgICAgICAgICAgLyoqIFRoZSBzZWFyY2ggYnV0dG9uIHRleHQuICovCiAgICAgIG5vX3Jlc3VsdHNfdGV4dDogJ05vIHJlc3VsdHMgZm91bmQnLCAvKiogU2hvd24gd2hlbiBubyByZXN1bHRzLiAqLwogICAgICBtaW5faGVpZ2h0OiAxMDAsICAgICAgICAgICAgICAgICAgLyoqIFRoZSBtaW5pdW11bSBoZWlnaHQuICovCiAgICAgIG1vcmVfdGV4dDogJyslbnVtJSBtb3JlJywgICAgICAgICAvKiogVGhlIHRleHQgdG8gc2hvdyBpbiB0aGUgbW9yZS4gKi8KICAgICAgbG9hZGVkOiBudWxsLCAgICAgICAgICAgICAgICAgICAgIC8qKiBDYWxsZWQgd2hlbiBhbGwgaXRlbXMgYXJlIGxvYWRlZC4gKi8KICAgICAgY29sbGFwc2VkOiB0cnVlLCAgICAgICAgICAgICAgICAgIC8qKiBJZiB0aGUgdHJlZSBzaG91bGQgYmUgY29sbGFwc2VkLiAqLwogICAgICBzaG93dHJlZTogZmFsc2UsICAgICAgICAgICAgICAgICAgIC8qKiBUbyBzaG93IHRoZSB0cmVlLiAqLwogICAgICBpbnB1dE5hbWU6J3RyZWVzZWxlY3QnCiAgICB9LCBwYXJhbXMpOwoKICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGluc3RhbmNlLgogICAgcmV0dXJuICQodGhpcykuZWFjaChmdW5jdGlvbigpIHsKCiAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIHRyZWVzZWxlY3QuCiAgICAgIHZhciBzZWxlY3RvciA9IG51bGw7CiAgICAgIHZhciBjaG9pY2VzID0gbnVsbDsKICAgICAgdmFyIHNlYXJjaCA9IG51bGw7CiAgICAgIHZhciBpbnB1dCA9IG51bGw7CiAgICAgIHZhciBzZWFyY2hfYnRuID0gbnVsbDsKICAgICAgdmFyIGxhYmVsID0gbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0aW9uID0gbnVsbDsKICAgICAgdmFyIHRyZWVzZWxlY3QgPSBudWxsOwogICAgICB2YXIgdHJlZXdyYXBwZXIgPSBudWxsOwogICAgICB2YXIgc2VsZWN0ZWRUaW1lciA9IDA7CiAgICAgIHZhciByb290ID0gbnVsbDsKCiAgICAgIC8vIFNob3cgb3IgaGlkZSB0aGUgdHJlZS4KICAgICAgdmFyIHNob3dUcmVlID0gZnVuY3Rpb24oc2hvdywgdHdlZW4pIHsKICAgICAgICB0d2VlbiA9IHR3ZWVuIHx8ICdmYXN0JzsKICAgICAgICBpZiAoc2hvdyAmJiAoIXJvb3QgfHwgcm9vdC5oYXNfY2hpbGRyZW4pKSB7CiAgICAgICAgICB0cmVld3JhcHBlci5hZGRDbGFzcygndHJlZXZpc2libGUnKS5zaG93KCdmYXN0Jyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgdHJlZXdyYXBwZXIucmVtb3ZlQ2xhc3MoJ3RyZWV2aXNpYmxlJykuaGlkZSgnZmFzdCcpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIGlmICgkKHRoaXMpLmZpbmQoIi5jaHpudHJlZS1jb250YWluZXIiKS5sZW5ndGggPT0gMCkgewoKICAgICAgICAgIC8vIENyZWF0ZSB0aGUgc2VsZWN0b3IgZWxlbWVudC4KICAgICAgICAgIHNlbGVjdG9yID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgICAgICBzZWxlY3Rvci5hZGRDbGFzcygnY2h6bnRyZWUtY29udGFpbmVyJyk7CiAgICAgICAgICBzZWxlY3Rvci5hZGRDbGFzcygnY2h6bnRyZWUtY29udGFpbmVyLW11bHRpJyk7CiAgICAgICAgICBjaG9pY2VzID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpKTsKICAgICAgICAgIGNob2ljZXMuYWRkQ2xhc3MoJ2Noem50cmVlLWNob2ljZXMgY2hvc2VudHJlZS1jaG9pY2VzJyk7CgogICAgICAgICAgLy8gSWYgdGhleSB3aXNoIHRvIGhhdmUgYSBsYWJlbC4KICAgICAgICAgIGxhYmVsID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpKTsKICAgICAgICAgIGxhYmVsLmF0dHIoew0KICAgICAgICAgICAgICAnZm9yJzogcGFyYW1zLmlucHV0SWQNCiAgICAgICAgICB9KTsKICAgICAgICAgIGxhYmVsLnRleHQocGFyYW1zLmxhYmVsKTsKCiAgICAgICAgICAvLyBJZiB0aGV5IHdpc2ggdG8gaGF2ZSBhIGRlc2NyaXB0aW9uLgogICAgICAgICAgZGVzY3JpcHRpb24gPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKICAgICAgICAgIGRlc2NyaXB0aW9uLmF0dHIoew0KICAgICAgICAgICAgICAnY2xhc3MnOiAnZGVzY3JpcHRpb24nDQogICAgICAgICAgfSk7CiAgICAgICAgICBkZXNjcmlwdGlvbi50ZXh0KHBhcmFtcy5kZXNjcmlwdGlvbik7CgogICAgICAgICAgLy8gQ3JlYXQgdGhlIGNob3NlbiBzZWxlY3Rvci4KICAgICAgICAgIGlmIChjaG9pY2VzKSB7DQogICAgICAgICAgICAgIHNlbGVjdG9yLmFwcGVuZChsYWJlbCkuYXBwZW5kKGNob2ljZXMuYXBwZW5kKHNlYXJjaCkpOw0KICAgICAgICAgIH0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICBzZWxlY3Rvci5hcHBlbmQobGFiZWwpLmFwcGVuZChzZWFyY2gpOw0KICAgICAgICAgIH0KCiAgICAgICAgICAvLyBBZGQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAgICAgJCh0aGlzKS5hcHBlbmQoZGVzY3JpcHRpb24pOw0KICAgICAgfQogICAgICBlbHNlIHsNCiAgICAgICAgICB0cmVlc2VsZWN0ID0gJCh0aGlzKS5maW5kKCcudHJlZXNlbGVjdCcpOwogICAgICAgICAgdHJlZXdyYXBwZXIgPSAkKHRoaXMpLmZpbmQoJy50cmVld3JhcHBlcicpOwogICAgICAgICAgc2VsZWN0b3IgPSAkKHRoaXMpLmZpbmQoJy5jaHpudHJlZS1jb250YWluZXInKTsKICAgICAgICAgIHRyZWVzZWxlY3QucmVtb3ZlKCk7CiAgICAgICAgICB0cmVld3JhcHBlci5yZW1vdmUoKTs7CiAgICAgIH0KCiAgICAgIHRyZWV3cmFwcGVyID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgIHRyZWV3cmFwcGVyLmFkZENsYXNzKCd0cmVld3JhcHBlcicpOwogICAgICB0cmVld3JhcHBlci5oaWRlKCk7CgogICAgICAgIC8vIEdldCB0aGUgdHJlZSBzZWxlY3QuCiAgICAgIHRyZWVzZWxlY3QgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKICAgICAgdHJlZXNlbGVjdC5hZGRDbGFzcygndHJlZXNlbGVjdCcpOwoKICAgICAgICAvLyBTZXR1cCB0aGUga2V5ZXZlbnRzLgogICAgICAkKHRoaXMpLmtleXVwKGZ1bmN0aW9uIChldmVudCkgew0KICAgICAgICAgIGlmIChldmVudC53aGljaCA9PSAyNykgew0KICAgICAgICAgICAgICBzaG93VHJlZShmYWxzZSk7DQogICAgICAgICAgfQ0KICAgICAgfSk7CgogICAgICAgIC8vIEFkZCB0aGUgdHJlZXNlbGVjdCB3aWRnZXQuCiAgICAgIHRyZWV3cmFwcGVyLmFwcGVuZCh0cmVlc2VsZWN0KTsKICAgICAgJCh0aGlzKS5hcHBlbmQoc2VsZWN0b3IuYXBwZW5kKHRyZWV3cmFwcGVyKSk7CgogICAgICAvLyBOb3cgZGVjbGFyZSB0aGUgdHJlZXNlbGVjdC4KICAgICAgdmFyIHRyZWVwYXJhbXMgPSBwYXJhbXM7CgogICAgICAvLyBOb3cgZGVjbGFyZSBvdXIgdHJlZXNlbGVjdCBjb250cm9sLgogICAgICB0cmVlc2VsZWN0LnRyZWVzZWxlY3QodHJlZXBhcmFtcyk7CiAgICAgIHJvb3QgPSB0cmVlc2VsZWN0LmVxKDApWzBdLnRyZWVub2RlOwoKICAgICAgLy8gU2hvdyB0aGUgdHJlZSBieSBkZWZhdWx0LgogICAgICBpZiAodHJlZXBhcmFtcy5zaG93dHJlZSB8fCAhdHJlZXBhcmFtcy5jb2xsYXBzZWQpIHsKICAgICAgICBzaG93VHJlZSh0cnVlLCBudWxsKTsKICAgICAgfQogICAgfSk7CiAgfTsKfSkoalF1ZXJ5KTsKDQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQooZnVuY3Rpb24oJCkgewoKICAvLyBGcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9rZXlzCiAgaWYgKCFPYmplY3Qua2V5cykgewogICAgT2JqZWN0LmtleXMgPSAoZnVuY3Rpb24gKCkgewogICAgICAndXNlIHN0cmljdCc7CiAgICAgIHZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksCiAgICAgICAgaGFzRG9udEVudW1CdWcgPSAhKHt0b1N0cmluZzogbnVsbH0pLnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpLAogICAgICAgIGRvbnRFbnVtcyA9IFsKICAgICAgICAgICd0b1N0cmluZycsCiAgICAgICAgICAndG9Mb2NhbGVTdHJpbmcnLAogICAgICAgICAgJ3ZhbHVlT2YnLAogICAgICAgICAgJ2hhc093blByb3BlcnR5JywKICAgICAgICAgICdpc1Byb3RvdHlwZU9mJywKICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsCiAgICAgICAgICAnY29uc3RydWN0b3InCiAgICAgICAgXSwKICAgICAgICBkb250RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoOwoKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHsKICAgICAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgKHR5cGVvZiBvYmogIT09ICdmdW5jdGlvbicgfHwgb2JqID09PSBudWxsKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmtleXMgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTsKICAgICAgICB9CgogICAgICAgIHZhciByZXN1bHQgPSBbXSwgcHJvcCwgaTsKCiAgICAgICAgZm9yIChwcm9wIGluIG9iaikgewogICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkgewogICAgICAgICAgICByZXN1bHQucHVzaChwcm9wKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChoYXNEb250RW51bUJ1ZykgewogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRvbnRFbnVtc0xlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgZG9udEVudW1zW2ldKSkgewogICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRvbnRFbnVtc1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgIH0oKSk7CiAgfQoKICAvLyBUaGUgdHJlZSBzZWxlY3QgY29udHJvbC4KICAkLmZuLnRyZWVzZWxlY3QgPSBmdW5jdGlvbihwYXJhbXMpIHsKCiAgICAvLyBTZXR1cCB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciB0aGUgdHJlZSBzZWxlY3QgY29udHJvbC4KICAgIHBhcmFtcyA9ICQuZXh0ZW5kKHsKICAgICAgY29sd2lkdGg6IDE4LCAgICAgICAgICAgICAgIC8qKiBUaGUgd2lkdGggb2YgdGhlIGNvbHVtbnMuICovCiAgICAgIGRlZmF1bHRfdmFsdWU6IHt9LCAgICAgICAgICAvKiogQW4gYXJyYXkgb2YgZGVmYXVsdCB2YWx1ZXMuICovCiAgICAgIHNlbGVjdGVkOiBudWxsLCAgICAgICAgICAgICAvKiogQ2FsbGJhY2sgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkLiAqLwogICAgICB0cmVlbG9hZGVkOiBudWxsLCAgICAgICAgICAgLyoqIENhbGxlZCB3aGVuIHRoZSB0cmVlIGlzIGxvYWRlZC4gKi8KICAgICAgbG9hZDogbnVsbCwgICAgICAgICAgICAgICAgIC8qKiBDYWxsYmFjayB0byBsb2FkIG5ldyB0cmVlJ3MgKi8KICAgICAgc2VhcmNoZXI6IG51bGwsICAgICAgICAgICAgIC8qKiBDYWxsYmFjayB0byBzZWFyY2ggYSB0cmVlICovCiAgICAgIGRlZXBMb2FkOiBmYWxzZSwgICAgICAgICAgICAvKiogUGVyZm9ybXMgYSBkZWVwIGxvYWQgKi8KICAgICAgb25idWlsZDogbnVsbCwgICAgICAgICAgICAgIC8qKiBDYWxsZWQgd2hlbiBlYWNoIG5vZGUgaXMgYnVpbGRpbmcuICovCiAgICAgIHBvc3RidWlsZDogbnVsbCwgICAgICAgICAgICAvKiogQ2FsbGVkIHdoZW4gdGhlIG5vZGUgaXMgZG9uZSBidWlsZGluZy4gKi8KICAgICAgaW5wdXROYW1lOiAndHJlZXNlbGVjdCcsICAgIC8qKiBUaGUgaW5wdXQgbmFtZS4gKi8KICAgICAgYXV0b1NlbGVjdENoaWxkcmVuOiB0cnVlLCAgIC8qKiBTZWxlY3QgY2hsZHJuIHdoZW4gcGFyZW50IGlzIHNlbGVjdGVkLiAqLwogICAgICBzaG93Um9vdDogZmFsc2UsICAgICAgICAgICAgLyoqIFNob3cgdGhlIHJvb3QgaXRlbSB3aXRoIGEgY2hlY2tib3guICovCiAgICAgIHNlbGVjdEFsbDogZmFsc2UsICAgICAgICAgICAvKiogSWYgd2Ugd2lzaCB0byBzZWUgYSBzZWxlY3QgYWxsLiAqLwogICAgICBzZWxlY3RBbGxUZXh0OiAnU2VsZWN0IEFsbCcgLyoqIFRoZSBzZWxlY3QgYWxsIHRleHQuICovCiAgICB9LCBwYXJhbXMpOwoKICAgIC8qKiBLZWVwIHRyYWNrIG9mIGFsbCBsb2FkZWQgbm9kZXMgKi8KICAgIHZhciBsb2FkZWROb2RlcyA9IHt9OwoKICAgIC8qKiBWYXJpYWJsZSBmb3IgdGhlIGJ1c3kgc3RhdGVzLiAqLwogICAgdmFyIGJ1c3lsb2FkaW5nID0gJ3RyZWVidXN5LWxvYWRpbmcnOwogICAgdmFyIGJ1c3lsb2FkaW5nYWxsID0gJ3RyZWVidXN5LWxvYWRpbmctYWxsJzsKICAgIHZhciBidXN5c2VsZWN0aW5nID0gJ3RyZWVidXN5LXNlbGVjdGluZyc7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3Rvci4KICAgICAqLwogICAgdmFyIFRyZWVOb2RlID0gZnVuY3Rpb24obm9kZXBhcmFtcywgcm9vdCkgewoKICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSByb290IGl0ZW0uCiAgICAgIHRoaXMucm9vdCA9ICEhcm9vdDsKCiAgICAgIC8vIFNldHVwIHRoZSBwYXJhbWV0ZXJzLgogICAgICBub2RlcGFyYW1zLnRpdGxlID0gbm9kZXBhcmFtcy50aXRsZSB8fCAnYW5vbnltb3VzJzsKICAgICAgJC5leHRlbmQodGhpcywgewogICAgICAgIGlkOiAwLCAgICAgICAgICAgICAgICAvKiogVGhlIElEIG9mIHRoaXMgbm9kZS4gKi8KICAgICAgICBub2RlbG9hZGVkOiBmYWxzZSwgICAgLyoqIEZsYWcgdG8gc2VlIGlmIHRoaXMgbm9kZSBpcyBsb2FkZWQuICovCiAgICAgICAgYWxsTG9hZGVkOiBmYWxzZSwgICAgIC8qKiBGbGFnIHRvIHNlZSBpZiB3ZSBoYXZlIGxvYWRlZCBhbGwgbm9kZXMuICovCiAgICAgICAgdmFsdWU6IDAsICAgICAgICAgICAgIC8qKiBUaGUgaW5wdXQgdmFsdWUgZm9yIHRoaXMgbm9kZS4gKi8KICAgICAgICB0aXRsZTogJycsICAgICAgICAgICAgLyoqIFRoZSB0aXRsZSBvZiB0aGlzIG5vZGUuICovCiAgICAgICAgdXJsOiAnJywgICAgICAgICAgICAgIC8qKiBUaGUgVVJMIHRvIHRoaXMgbm9kZS4gKi8KICAgICAgICBoYXNfY2hpbGRyZW46IHRydWUsICAgLyoqIEJvb2xlYW4gaWYgdGhpcyBub2RlIGhhcyBjaGlsZHJlbi4gKi8KICAgICAgICBjaGlsZHJlbjogW10sICAgICAgICAgLyoqIEFycmF5IG9mIGNoaWxkcmVuLiAqLwogICAgICAgIGRhdGE6IHt9LCAgICAgICAgICAgICAvKiogQWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgbm9kZS4gKi8KICAgICAgICBsZXZlbDogMCwgICAgICAgICAgICAgLyoqIFRoZSBsZXZlbCBvZiB0aGlzIG5vZGUuICovCiAgICAgICAgb2RkOiBmYWxzZSwgICAgICAgICAgIC8qKiBUaGUgb2RkL2V2ZW4gc3RhdGUgb2YgdGhpcyByb3cuICovCiAgICAgICAgY2hlY2tlZDogZmFsc2UsICAgICAgIC8qKiBJZiB0aGlzIG5vZGUgaXMgY2hlY2tlZC4gKi8KICAgICAgICBidXN5OiBmYWxzZSwgICAgICAgICAgLyoqIElmIHRoaXMgbm9kZSBpcyBidXN5LiAqLwogICAgICAgIGRpc3BsYXk6ICQoKSwgICAgICAgICAvKiogVGhlIGRpc3BsYXkgb2YgdGhpcyBub2RlLiAqLwogICAgICAgIGlucHV0OiAkKCksICAgICAgICAgICAvKiogVGhlIGlucHV0IGRpc3BsYXkuICovCiAgICAgICAgbGluazogJCgpLCAgICAgICAgICAgIC8qKiBUaGUgbGluayBkaXNwbGF5LiAqLwogICAgICAgIHNwYW46ICQoKSwgICAgICAgICAgICAvKiogVGhlIHNwYW4gZGlzcGxheS4gKi8KICAgICAgICBjaGlsZGxpc3Q6ICQoKSwgICAgICAgLyoqIFRoZSBjaGlsZGxpc3QgZGlzcGxheS4gKi8KICAgICAgICBleGNsdWRlOiB7fSAgICAgICAgICAgLyoqIEFuIGFycmF5IG9mIG5vZGVzIHRvIGV4Y2x1ZGUgZm9yIHNlbGVjdGlvbi4gKi8KICAgICAgfSwgbm9kZXBhcmFtcyk7CgogICAgICAvLyBTYXkgdGhhdCB3ZSBhcmUgYSBUcmVlTm9kZS4KICAgICAgdGhpcy5pc1RyZWVOb2RlID0gdHJ1ZTsKCiAgICAgIC8vIERldGVybWluZSBpZiBhIG5vZGUgaXMgbG9hZGluZy4KICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CgogICAgICAvLyBUaGUgbG9hZCBjYWxsYmFjayBxdWV1ZS4KICAgICAgdGhpcy5sb2FkcXVldWUgPSBbXTsKICAgIH07CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGJ1c3kgY3Vyc29yIGZvciB0aGlzIG5vZGUuCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5zZXRCdXN5ID0gZnVuY3Rpb24oc3RhdGUsIHR5cGUpIHsKCiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaGFzIGNoYW5nZWQuCiAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLnNwYW4uaGFzQ2xhc3ModHlwZSkpIHsKICAgICAgICB0aGlzLmJ1c3kgPSBzdGF0ZTsKICAgICAgICBpZiAoc3RhdGUpIHsKCiAgICAgICAgICAvLyBTZXQgdGhlIGJ1c3kgdHlwZSBhbmQgdHJlZWJ1c3kuCiAgICAgICAgICB0aGlzLnNwYW4uYWRkQ2xhc3ModHlwZSk7CiAgICAgICAgICB0aGlzLnNwYW4uYWRkQ2xhc3MoJ3RyZWVidXN5Jyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgIC8vIFJlbW92ZSB0aGUgYnVzeSB0eXBlLgogICAgICAgICAgdGhpcy5zcGFuLnJlbW92ZUNsYXNzKHR5cGUpOwoKICAgICAgICAgIC8vIE9ubHkgcmVtb3ZlIHRoZSBidXN5IGlmIHRoZSBidXN5IGZsYWdzIGFyZSBlbXB0eS4KICAgICAgICAgIHZhciBvdGhlcnR5cGUgPSAodHlwZSA9PSBidXN5bG9hZGluZykgPyBidXN5c2VsZWN0aW5nIDogYnVzeWxvYWRpbmc7CiAgICAgICAgICBpZiAoIXRoaXMuc3Bhbi5oYXNDbGFzcyhvdGhlcnR5cGUpKSB7CiAgICAgICAgICAgIHRoaXMuc3Bhbi5yZW1vdmVDbGFzcygndHJlZWJ1c3knKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiB0aGlzIG5vZGUgaXMgYWxyZWFkeSBsb2FkZWQuCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5pc0xvYWRlZCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgbG9hZGVkID0gdGhpcy5ub2RlbG9hZGVkOwogICAgICBsb2FkZWQgfD0gbG9hZGVkTm9kZXMuaGFzT3duUHJvcGVydHkodGhpcy5pZCk7CiAgICAgIGxvYWRlZCB8PSAhdGhpcy5oYXNfY2hpbGRyZW47CiAgICAgIGxvYWRlZCB8PSAodGhpcy5oYXNfY2hpbGRyZW4gJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKTsKICAgICAgcmV0dXJuIGxvYWRlZDsKICAgIH07CgogICAgLyoqCiAgICAgKiBMb2FkcyB0aGUgY3VycmVudCBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHdoZW4gdGhlIG5vZGUgaXMgbG9hZGVkLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUubG9hZE5vZGUgPSBmdW5jdGlvbihjYWxsYmFjaywgaGlkZUJ1c3kpIHsKCiAgICAgIC8vIElmIHdlIGFyZSBsb2FkaW5nLCB0aGVuIGp1c3QgYWRkIHRoaXMgY2FsbGJhY2sgdG8gdGhlIHF1ZXVlIGFuZCByZXR1cm4uCiAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHsKICAgICAgICBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgIHRoaXMubG9hZHF1ZXVlLnB1c2goY2FsbGJhY2spOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIC8vIFRyaWdnZXIgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIG5vZGUgaXMgZG9uZSBsb2FkaW5nLgogICAgICB2YXIgdHJpZ2dlckNhbGxiYWNrID0gZnVuY3Rpb24oKSB7CgogICAgICAgIC8vIENhbGxiYWNrIHRoYXQgd2UgYXJlIGxvYWRlZC4KICAgICAgICBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgLy8gUHJvY2VzcyB0aGUgbG9hZHF1ZXVlLgogICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5sb2FkcXVldWUpIHsKICAgICAgICAgIHRoaXMubG9hZHF1ZXVlW2ldKHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgLy8gRW1wdHkgdGhlIGxvYWRxdWV1ZS4KICAgICAgICB0aGlzLmxvYWRxdWV1ZS5sZW5ndGggPSAwOwoKICAgICAgICAvLyBTYXkgd2UgYXJlIG5vdCBidXN5LgogICAgICAgIGlmICghaGlkZUJ1c3kpIHsKICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSwgYnVzeWxvYWRpbmcpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIC8vIFNheSB3ZSBhcmUgbG9hZGluZy4KICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKCiAgICAgIC8vIE9ubHkgbG9hZCBpZiB3ZSBoYXZlIG5vdCBsb2FkZWQgeWV0LgogICAgICBpZiAocGFyYW1zLmxvYWQgJiYgIXRoaXMuaXNMb2FkZWQoKSkgewoKICAgICAgICAvLyBNYWtlIHRoaXMgbm9kZSBidXN5LgogICAgICAgIGlmICghaGlkZUJ1c3kpIHsKICAgICAgICAgIHRoaXMuc2V0QnVzeSh0cnVlLCBidXN5bG9hZGluZyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDYWxsIHRoZSBsb2FkIGZ1bmN0aW9uLgogICAgICAgIHBhcmFtcy5sb2FkKHRoaXMsIChmdW5jdGlvbih0cmVlbm9kZSkgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHsKCiAgICAgICAgICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgbWVyZ2luZyBhbmQgYnVpbGQgaWYgaXQgaGFzbid0IGxvYWRlZC4KICAgICAgICAgICAgaWYgKCF0cmVlbm9kZS5ub2RlbG9hZGVkKSB7CgogICAgICAgICAgICAgIC8vIE1lcmdlIHRoZSByZXN1bHQgd2l0aCB0aGlzIG5vZGUuCiAgICAgICAgICAgICAgdHJlZW5vZGUgPSBqUXVlcnkuZXh0ZW5kKHRyZWVub2RlLCBub2RlKTsKCiAgICAgICAgICAgICAgLy8gU2F5IHRoaXMgbm9kZSBpcyBsb2FkZWQuCiAgICAgICAgICAgICAgdHJlZW5vZGUubm9kZWxvYWRlZCA9IHRydWU7CgogICAgICAgICAgICAgIC8vIEFkZCB0byB0aGUgbG9hZGVkIG5vZGVzIGFycmF5LgogICAgICAgICAgICAgIGxvYWRlZE5vZGVzW3RyZWVub2RlLmlkXSA9IHRyZWVub2RlLmlkOwoKICAgICAgICAgICAgICAvLyBCdWlsZCB0aGUgbm9kZS4KICAgICAgICAgICAgICB0cmVlbm9kZS5idWlsZChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICAvLyBDYWxsYmFjayB0aGF0IHdlIGFyZSBsb2FkZWQuCiAgICAgICAgICAgICAgICB0cmlnZ2VyQ2FsbGJhY2suY2FsbCh0cmVlbm9kZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgIC8vIENhbGxiYWNrIHRoYXQgd2UgYXJlIGxvYWRlZC4KICAgICAgICAgICAgICB0cmlnZ2VyQ2FsbGJhY2suY2FsbCh0cmVlbm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgfSkodGhpcykpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrKSB7CgogICAgICAgIC8vIEp1c3QgY2FsbGJhY2sgc2luY2Ugd2UgYXJlIGFscmVhZHkgbG9hZGVkLgogICAgICAgIHRyaWdnZXJDYWxsYmFjay5jYWxsKHRoaXMpOwogICAgICB9CgogICAgICAvLyBTYXkgdGhhdCB3ZSBhcmUgbm90IGxvYWRpbmcgYW55bW9yZS4KICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICB9OwoKICAgIC8qKgogICAgICogUmVjdXJzaXZlbHkgbG9hZHMgYW5kIGJ1aWxkcyBhbGwgbm9kZXMgYmVuZWF0aCB0aGlzIG5vZGUuCiAgICAgKgogICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIHdoZW4gdGhlIHRyZWUgaGFzIGxvYWRlZC4KICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9wZXJhdGlvbiBBbGxvdyBzb21lb25lIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUubG9hZEFsbCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBvcGVyYXRpb24sIGhpZGVCdXN5LCBpZHMpIHsKICAgICAgaWRzID0gaWRzIHx8IHt9OwoKICAgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBsb2FkZWQgZmlyc3QuCiAgICAgIHRoaXMubG9hZE5vZGUoZnVuY3Rpb24obm9kZSkgewoKICAgICAgICAvLyBTZWUgaWYgYW4gb3BlcmF0aW9uIG5lZWRzIHRvIGJlIHBlcmZvcm1lZC4KICAgICAgICBpZiAob3BlcmF0aW9uKSB7CiAgICAgICAgICBvcGVyYXRpb24obm9kZSk7CiAgICAgICAgfQoKICAgICAgICAvLyBHZXQgb3VyIGNoaWxkcmVuIGNvdW50LgogICAgICAgIHZhciBpID0gbm9kZS5jaGlsZHJlbi5sZW5ndGgsIGNvdW50ID0gaTsKCiAgICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIHRoZW4ganVzdCBjYWxsIHRoZSBjYWxsYmFjayBpbW1lZGlhdGVseS4KICAgICAgICBpZiAoIWkgfHwgaWRzLmhhc093blByb3BlcnR5KG5vZGUuaWQpKSB7CiAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgICAgY2FsbGJhY2suY2FsbChub2RlLCBub2RlKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIEFkZCB0aGlzIHRvIHRoZSBpZHMgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlY3Vyc2lvbi4KICAgICAgICBpZHNbbm9kZS5pZF0gPSBub2RlLmlkOwoKICAgICAgICAvLyBNYWtlIHRoaXMgbm9kZSBidXN5LgogICAgICAgIGlmICghaGlkZUJ1c3kpIHsKICAgICAgICAgIG5vZGUuc2V0QnVzeSh0cnVlLCBidXN5bG9hZGluZ2FsbCk7CiAgICAgICAgfQoKICAgICAgICAvLyBMb2FkIGNoaWxkcmVuIGF0IGEgc3BlY2lmaWMgaW5kZXguCiAgICAgICAgdmFyIGxvYWRDaGlsZHJlbiA9IGZ1bmN0aW9uKGluZGV4KSB7CiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAvLyBMb2FkIHRoaXMgY2hpbGRzIGNoaWxkcmVuLi4uCiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW5baW5kZXhdLmxvYWRBbGwoZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgIC8vIERlY3JlbWVudCB0aGUgY2hpbGQgY291bnQuCiAgICAgICAgICAgICAgY291bnQtLTsKCiAgICAgICAgICAgICAgLy8gSWYgYWxsIGNoaWxkcmVuIGFyZSBkb25lIGxvYWRpbmcsIGNhbGwgdGhlIGNhbGxiYWNrLgogICAgICAgICAgICAgIGlmICghY291bnQpIHsKCiAgICAgICAgICAgICAgICAvLyBDYWxsYmFjayB0aGF0IHdlIGFyZSBkb25lIGxvYWRpbmcgdGhpcyB0cmVlLgogICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTWFrZSB0aGlzIG5vZGUgYnVzeS4KICAgICAgICAgICAgICAgIGlmICghaGlkZUJ1c3kpIHsKICAgICAgICAgICAgICAgICAgbm9kZS5zZXRCdXN5KGZhbHNlLCBidXN5bG9hZGluZ2FsbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCBvcGVyYXRpb24sIGhpZGVCdXN5LCBpZHMpOwogICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBjaGlsZC4KICAgICAgICB3aGlsZSAoaS0tKSB7CgogICAgICAgICAgLy8gTG9hZCByZWN1cnNzaW9uIG9uIGEgc2VwYXJhdGUgdGhyZWFkLgogICAgICAgICAgc2V0VGltZW91dChsb2FkQ2hpbGRyZW4oaSksIDIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwoKICAgIC8qKgogICAgICogRXhwYW5kcyB0aGUgbm9kZS4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLmV4cGFuZCA9IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgIGlmIChzdGF0ZSkgewogICAgICAgIHRoaXMubGluay5yZW1vdmVDbGFzcygnY29sbGFwc2VkJykuYWRkQ2xhc3MoJ2V4cGFuZGVkJyk7CiAgICAgICAgdGhpcy5zcGFuLnJlbW92ZUNsYXNzKCdjb2xsYXBzZWQnKS5hZGRDbGFzcygnZXhwYW5kZWQnKTsKICAgICAgICB0aGlzLmNoaWxkbGlzdC5zaG93KCdmYXN0Jyk7CgogICAgICAgIC8vIElmIHRoaXMgbm9kZSBpcyBjaGVja2VkIGFzIGluY2x1ZGluZyBjaGlsZHJlbiwgZ28gdGhyb3VnaCBhbmQgc2VsZWN0CiAgICAgICAgLy8gYWxsIG9mIGl0J3MgY2hpbGRyZW4uCiAgICAgICAgaWYgKCFwYXJhbXMuZGVlcExvYWQgJiYgdGhpcy5jaGVja2VkICYmIHRoaXMuaW5jbHVkZV9jaGlsZHJlbikgewogICAgICAgICAgdGhpcy5pbmNsdWRlX2NoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICB0aGlzLnNlbGVjdENoaWxkcmVuKHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBPbmx5IGNvbGxhcHNlIGlmIHRoZXkgY2FuIG9wZW4gaXQgYmFjayB1cC4KICAgICAgZWxzZSBpZiAodGhpcy5zcGFuLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLmxpbmsucmVtb3ZlQ2xhc3MoJ2V4cGFuZGVkJykuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpOwogICAgICAgIHRoaXMuc3Bhbi5yZW1vdmVDbGFzcygnZXhwYW5kZWQnKS5hZGRDbGFzcygnY29sbGFwc2VkJyk7CiAgICAgICAgdGhpcy5jaGlsZGxpc3QuaGlkZSgnZmFzdCcpOwogICAgICB9CgogICAgICAvLyBJZiB0aGUgc3RhdGUgaXMgZXhwYW5kLCBidXQgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGJlZW4gbG9hZGVkLgogICAgICBpZiAoc3RhdGUgJiYgIXRoaXMuaXNMb2FkZWQoKSkgewoKICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4sIHRoZW4gd2UgbmVlZCB0byBsb2FkIHRoZW0uCiAgICAgICAgdGhpcy5sb2FkTm9kZShmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICBpZiAobm9kZS5jaGVja2VkKSB7CiAgICAgICAgICAgIG5vZGUuc2VsZWN0Q2hpbGRyZW4obm9kZS5jaGVja2VkKTsKICAgICAgICAgIH0KICAgICAgICAgIG5vZGUuZXhwYW5kKHRydWUpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogU2VsZWN0cyBhbGwgY2hpbGRyZW4gb2YgdGhpcyBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhdGUgVGhlIHN0YXRlIG9mIHRoZSBzZWxlY3Rpb24gb3IgYXJyYXkgb2YgZGVmYXVsdHMuCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBkb25lIENhbGxlZCB3aGVuIHdlIGFyZSBkb25lIHNlbGVjdGluZy4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLnNlbGVjdENoaWxkcmVuID0gZnVuY3Rpb24oc3RhdGUsIGRvbmUsIGNoaWxkKSB7CgogICAgICAvLyBTZWUgaWYgdGhlIHN0YXRlIGlzIGEgYm9vbGVhbi4KICAgICAgdmFyIGRlZmF1bHRzID0gKHR5cGVvZiBzdGF0ZSA9PSAnb2JqZWN0Jyk7CgogICAgICAvLyBDcmVhdGUgYSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gd2UgYXJlIGRvbmUgc2VsZWN0aW5nLgogICAgICB2YXIgZG9uZVNlbGVjdGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghY2hpbGQpIHsKCiAgICAgICAgICAvLyBJZiB0aGV5IHByb3ZpZGVkIGEgc2VsZWN0ZWQgcGFyYW1ldGVyLgogICAgICAgICAgaWYgKHBhcmFtcy5zZWxlY3RlZCkgewogICAgICAgICAgICBwYXJhbXMuc2VsZWN0ZWQodGhpcywgdHJ1ZSk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gU2F5IHRoYXQgd2UgYXJlIGRvbmUuCiAgICAgICAgICBpZiAoZG9uZSkgewoKICAgICAgICAgICAgZG9uZS5jYWxsKHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKCiAgICAgIGlmIChwYXJhbXMuZGVlcExvYWQpIHsKCiAgICAgICAgLy8gTG9hZCBhbGwgbm9kZXMgdW5kZXJuZWF0aCB0aGlzIG5vZGUuCiAgICAgICAgdGhpcy5sb2FkQWxsKGZ1bmN0aW9uKCkgewoKICAgICAgICAgIC8vIFNldCB0aGlzIG5vZGUgbm90IGJ1c3kuCiAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UsIGJ1c3lzZWxlY3RpbmcpOwoKICAgICAgICAgIC8vIFdlIGFyZSBkb25lIHNlbGVjdGluZy4KICAgICAgICAgIGRvbmVTZWxlY3RpbmcuY2FsbCh0aGlzKTsKCiAgICAgICAgfSwgZnVuY3Rpb24obm9kZSkgewoKICAgICAgICAgIHZhciB2YWwgPSBzdGF0ZTsKICAgICAgICAgIGlmIChkZWZhdWx0cykgewogICAgICAgICAgICB2YWwgPSBzdGF0ZS5oYXNPd25Qcm9wZXJ0eShub2RlLnZhbHVlKTsKICAgICAgICAgICAgdmFsIHw9IHN0YXRlLmhhc093blByb3BlcnR5KG5vZGUuaWQpOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFNlbGVjdCB0aGlzIG5vZGUuCiAgICAgICAgICBub2RlLnNlbGVjdCh2YWwpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVsc2UgewoKICAgICAgICAvLyBTZWxlY3QgdGhlIGN1cnJlbnQgbm9kZS4KICAgICAgICB0aGlzLnNlbGVjdChzdGF0ZSk7CiAgICAgICAgdmFyIG5hbWUgPSBwYXJhbXMuaW5wdXROYW1lICsgJy0nICsgdGhpcy52YWx1ZTsKICAgICAgICAkKCdpbnB1dFtuYW1lPSInICsgbmFtZSArICctaW5jbHVkZS1iZWxvdyJdJykuYXR0cigKICAgICAgICAgICduYW1lJywKICAgICAgICAgIG5hbWUKICAgICAgICApOwoKICAgICAgICAvLyBXZSBzaG91bGQgbG9hZCBjaGlsZHJlbiBpZiB0aGUgY3VycmVudCBub2RlIGlzIGV4cGFuZGVkLCBvciB0aGUKICAgICAgICAvLyBjdXJyZW50IG5vZGUgaXMgYmVpbmcgZGVzZWxlY3RlZCBhbmQgcG9zc2libHkgaGFzIGNoaWxkcmVuIHNlbGVjdGVkCiAgICAgICAgLy8gYmVsb3cgdGhlbS4KICAgICAgICBpZiAoKHRoaXMucm9vdCA9PT0gdHJ1ZSkgfHwKICAgICAgICAgICAgKHN0YXRlID09PSBmYWxzZSAmJiAhdGhpcy5pbmNsdWRlX2NoaWxkcmVuKSB8fAogICAgICAgICAgICAodGhpcy5saW5rICE9PSB1bmRlZmluZWQgJiYgdGhpcy5saW5rWzBdICE9PSB1bmRlZmluZWQgJiYKICAgICAgICAgICAgIHRoaXMubGlua1swXS5jbGFzc05hbWUuaW5kZXhPZignZXhwYW5kZWQnKSAhPT0gLTEpCiAgICAgICAgICAgKSB7CiAgICAgICAgICB0aGlzLmluY2x1ZGVfY2hpbGRyZW4gPSBmYWxzZTsKICAgICAgICAgIHRoaXMuZXhwYW5kKHN0YXRlKTsKICAgICAgICAgIHZhciBpID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7CiAgICAgICAgICB3aGlsZSAoaS0tKSB7CgogICAgICAgICAgICAvLyBTZWxlY3QgYWxsIHRoZSBjaGlsZHJlbi4KICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5zZWxlY3RDaGlsZHJlbihzdGF0ZSwgZG9uZSwgdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgLy8gRmxhZyB0aGlzIG5vYWQgYXMgaW5jbHVkaW5nIGFsbCBjaGlsZHJlbiBiZWxvdyBpZiBpdCBoYXMgY2hpbGRyZW4uCiAgICAgICAgICBpZiAodGhpcy5oYXNfY2hpbGRyZW4gPiAwICYmIHN0YXRlKSB7CiAgICAgICAgICAgIHRoaXMuaW5jbHVkZV9jaGlsZHJlbiA9IHRydWU7CiAgICAgICAgICAgICQoJ2lucHV0W25hbWU9IicgKyBuYW1lICsgJyJdJykuYXR0cigKICAgICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICAgbmFtZSArICctaW5jbHVkZS1iZWxvdycKICAgICAgICAgICAgKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFdlIGFyZSBkb25lIHNlbGVjdGluZy4KICAgICAgICBkb25lU2VsZWN0aW5nLmNhbGwodGhpcyk7CiAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBTZWxlY3RzIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBUcmVlTm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRlZmF1bHRzIEFycmF5IG9mIGRlZmF1bHRzLgogICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZG9uZSBDYWxsZWQgd2hlbiB3ZSBhcmUgZG9uZSBzZWxlY3RpbmcuCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5zZWxlY3REZWZhdWx0cyA9IGZ1bmN0aW9uKGRlZmF1bHRzLCBkb25lKSB7CgogICAgICB2YXIgZGVmYXVsdHNMZWZ0ID0gT2JqZWN0LmtleXMoZGVmYXVsdHMpLmxlbmd0aDsKCiAgICAgIHZhciBkZWZhdWx0c1F1ZXVlID0gW107CiAgICAgIGRlZmF1bHRzUXVldWUucHVzaCh0aGlzKTsKCiAgICAgIC8vIExvb3AgdGhyb3VnaCBub2RlcyBkZXB0aCBmaXJzdCB0byBmaW5kIHRoZSBkZWZhdWx0cy4KICAgICAgd2hpbGUgKGRlZmF1bHRzTGVmdCA+IDAgJiYgZGVmYXVsdHNRdWV1ZS5sZW5ndGggPiAwKSB7CiAgICAgICAgdmFyIHF1ZXVlSXRlbSA9IGRlZmF1bHRzUXVldWUuc2hpZnQoKTsKICAgICAgICB2YXIgc3RhdGUgPSBmYWxzZTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHF1ZXVlZCBpdGVtIGlzIGxpc3RlZCBpbiB0aGUgZGVmYXVsdHMuCiAgICAgICAgaWYgKGRlZmF1bHRzLmhhc093blByb3BlcnR5KHF1ZXVlSXRlbS52YWx1ZSkpIHsKICAgICAgICAgIGRlbGV0ZSBkZWZhdWx0c1txdWV1ZUl0ZW0udmFsdWVdOwogICAgICAgICAgc3RhdGUgPSB0cnVlOwogICAgICAgICAgZGVmYXVsdHNMZWZ0LS07CiAgICAgICAgfQogICAgICAgIGlmIChkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShxdWV1ZUl0ZW0uaWQpKSB7CiAgICAgICAgICBkZWxldGUgZGVmYXVsdHNbcXVldWVJdGVtLmlkXTsKICAgICAgICAgIHN0YXRlID0gdHJ1ZTsKICAgICAgICAgIGRlZmF1bHRzTGVmdC0tOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHF1ZXVlZCBpdGVtIGlzIGxpc3RlZCBpbiB0aGUgZGVmYXVsdHMgYW5kIGlzIGZsYWdnZWQgdG8KICAgICAgICAvLyBpbmNsdWRlIGRlZmF1bHRzLgogICAgICAgIGlmIChkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShxdWV1ZUl0ZW0udmFsdWUgKyAnLWluY2x1ZGUtYmVsb3cnKSkgewogICAgICAgICAgZGVsZXRlIGRlZmF1bHRzW3F1ZXVlSXRlbS52YWx1ZSArICctaW5jbHVkZS1iZWxvdyddOwogICAgICAgICAgcXVldWVJdGVtLmluY2x1ZGVfY2hpbGRyZW4gPSB0cnVlOwogICAgICAgICAgc3RhdGUgPSB0cnVlOwogICAgICAgICAgZGVmYXVsdHNMZWZ0LS07CiAgICAgICAgfQogICAgICAgIGlmIChkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShxdWV1ZUl0ZW0uaWQgKyAnLWluY2x1ZGUtYmVsb3cnKSkgewogICAgICAgICAgZGVsZXRlIGRlZmF1bHRzW3F1ZXVlSXRlbS5pZCArICctaW5jbHVkZS1iZWxvdyddOwogICAgICAgICAgcXVldWVJdGVtLmluY2x1ZGVfY2hpbGRyZW4gPSB0cnVlOwogICAgICAgICAgc3RhdGUgPSB0cnVlOwogICAgICAgICAgZGVmYXVsdHNMZWZ0LS07CiAgICAgICAgfQoKICAgICAgICAvLyBTZWxlY3QgdGhlIHF1ZXVlZCBpdGVtLgogICAgICAgIHF1ZXVlSXRlbS5zZWxlY3Qoc3RhdGUpOwoKICAgICAgICAvLyBTZXQgdGhlIGlucHV0IG5hbWUgdG8gdGhlIGNvcnJlY3QgdmFsdWUuCiAgICAgICAgdmFyIG5hbWUgPSBwYXJhbXMuaW5wdXROYW1lICsgJy0nICsgcXVldWVJdGVtLnZhbHVlOwogICAgICAgICQoJ2lucHV0W25hbWU9IicgKyBuYW1lICsgJy1pbmNsdWRlLWJlbG93Il0nKS5hdHRyKCduYW1lJywgbmFtZSk7CiAgICAgICAgaWYgKCFxdWV1ZUl0ZW0ucm9vdCAmJiBzdGF0ZSAmJiBxdWV1ZUl0ZW0uaW5jbHVkZV9jaGlsZHJlbikgewogICAgICAgICAgJCgnaW5wdXRbbmFtZT0iJyArIG5hbWUgKyAnIl0nKS5hdHRyKCduYW1lJywgbmFtZSArICctaW5jbHVkZS1iZWxvdycpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChkZWZhdWx0c0xlZnQgPiAwKSB7CiAgICAgICAgICAvLyBBZGQgdGhpcyBub2RlJ3MgY2hpbGRyZW4gdG8gdGhlIHF1ZXVlLgogICAgICAgICAgdmFyIGkgPSBxdWV1ZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoOwogICAgICAgICAgd2hpbGUgKGktLSkgewogICAgICAgICAgICBkZWZhdWx0c1F1ZXVlLnB1c2gocXVldWVJdGVtLmNoaWxkcmVuW2ldKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocXVldWVJdGVtLnJvb3QgJiYgcXVldWVJdGVtLmluY2x1ZGVfY2hpbGRyZW4pIHsKCiAgICAgICAgICAvLyBTZWxlY3QgdGhlIHJvb3Qgbm9kZSdzIGNoaWxkcmVuLgogICAgICAgICAgcXVldWVJdGVtLnNlbGVjdENoaWxkcmVuKHRydWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gU2F5IHRoaXMgbm9kZSBpcyBub3cgZnVsbHkgc2VsZWN0ZWQuCiAgICAgIGlmIChwYXJhbXMuc2VsZWN0ZWQpIHsKICAgICAgICBwYXJhbXMuc2VsZWN0ZWQodGhpcywgdHJ1ZSk7CiAgICAgIH0KCiAgICAgIC8vIFNheSB3ZSBhcmUgbm93IGRvbmUuCiAgICAgIGlmIChkb25lKSB7CiAgICAgICAgZG9uZS5jYWxsKHRoaXMpOwogICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY2hlY2tlZCBzdGF0ZSBmb3IgdGhlIGlucHV0IGZpZWxkIGRlcGVuZGluZyBvbiB0aGUgc3RhdGUuCiAgICAgKgogICAgICogQHBhcmFtIHtib29sZWFufSBzdGF0ZQogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuc2V0Q2hlY2tlZCA9IGZ1bmN0aW9uKHN0YXRlKSB7CgogICAgICAvLyBTZXQgdGhlIGNoZWNrZWQgc3RhdGUuCiAgICAgIHRoaXMuY2hlY2tlZCA9IHN0YXRlOwoKICAgICAgLy8gU2V0IHRoZSBjaGVja2VkIHN0YXRlIGZvciB0aGlzIGlucHV0LgogICAgICBpZiAodGhpcy5pbnB1dC5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5pbnB1dC5lcSgwKVswXS5jaGVja2VkID0gc3RhdGU7CiAgICAgIH0KCiAgICAgIC8vIFRyaWdnZXIgdGhlIGNoYW5nZSBldmVudC4KICAgICAgdGhpcy5pbnB1dC5jaGFuZ2UoKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBTZWxlY3RzIGEgbm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXRlIFRoZSBzdGF0ZSBvZiB0aGUgc2VsZWN0aW9uLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc3RhdGUpIHsKCiAgICAgIC8vIE9ubHkgY2hlY2sgdGhpcyBub2RlIGlmIGl0IGlzIGEgc2VsZWN0YWJsZSBpbnB1dC4KICAgICAgaWYgKCF0aGlzLmlucHV0Lmhhc0NsYXNzKCd0cmVlbm9kZS1uby1zZWxlY3QnKSkgewoKICAgICAgICAvLyBDb252ZXJ0IHN0YXRlIHRvIGEgYm9vbGVhbi4KICAgICAgICBzdGF0ZSA9ICEhc3RhdGU7CgogICAgICAgIC8vIFNlbGVjdCB0aGUgZWxlbWVudCB1bmxlc3MgdGhlIHN0YXRlIGlzIGZhbHNlIGFuZCB3ZSBhcmUgb24gdGhlIHJvb3QKICAgICAgICAvLyBlbGVtZW50IHdoaWNoIGlzbid0IHVuc2VsZWN0YWJsZS4KICAgICAgICBpZiAoc3RhdGUgfHwgIXRoaXMucm9vdCB8fCAodGhpcy5zaG93Um9vdCAmJiB0aGlzLmhhc19jaGlsZHJlbikpIHsKCiAgICAgICAgICAvLyBTZXQgdGhlIGNoZWNrZWQgc3RhdGUuCiAgICAgICAgICB0aGlzLnNldENoZWNrZWQoc3RhdGUpOwoKICAgICAgICAgIC8vIFNheSB0aGF0IHRoaXMgbm9kZSBpcyBzZWxlY3RlZC4KICAgICAgICAgIGlmIChwYXJhbXMuc2VsZWN0ZWQpIHsKICAgICAgICAgICAgcGFyYW1zLnNlbGVjdGVkKHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIEJ1aWxkIHRoZSB0cmVlbm9kZSBlbGVtZW50LgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuYnVpbGRfdHJlZW5vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIHRyZWVub2RlID0gJCgpOwogICAgICB0cmVlbm9kZSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLnJvb3QgPyAnZGl2JyA6ICdsaScpKTsKICAgICAgdHJlZW5vZGUuYWRkQ2xhc3MoJ3RyZWVub2RlJyk7CiAgICAgIHRyZWVub2RlLmFkZENsYXNzKHRoaXMub2RkID8gJ29kZCcgOiAnZXZlbicpOwogICAgICByZXR1cm4gdHJlZW5vZGU7CiAgICB9OwoKICAgIC8qKgogICAgICogQnVpbGQgdGhlIGlucHV0IGFuZCByZXR1cm4uCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5idWlsZF9pbnB1dCA9IGZ1bmN0aW9uKGxlZnQpIHsKCiAgICAgIC8vIE9ubHkgYWRkIGFuIGlucHV0IGlmIHRoZSBpbnB1dCBuYW1lIGlzIGRlZmluZWQuCiAgICAgIGlmIChwYXJhbXMuaW5wdXROYW1lKSB7CgogICAgICAgIC8vIElmIHRoaXMgbm9kZSBpcyBleGNsdWRlZCBvciBoYXMgbm8gcm9sZXMgZW5hYmxlZCBpbiB0aGUgZ3JvdXAgZmluZGVyLAogICAgICAgIC8vIHRoZW4gYWRkIGEgZHVtbXkgZGl2IHRhZy4KICAgICAgICBpZiAoKHR5cGVvZiB0aGlzLmV4Y2x1ZGVbdGhpcy5pZF0gIT09ICd1bmRlZmluZWQnKSB8fAogICAgICAgICAgKHBhcmFtcy5pbnB1dE5hbWUgPT0gJ2dyb3VwX2ZpbmRlcicgJiYgIXRoaXMuZGF0YS5yb2xlc19lbmFibGVkKSkgewogICAgICAgICAgdGhpcy5pbnB1dCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwogICAgICAgICAgdGhpcy5pbnB1dC5hZGRDbGFzcygndHJlZW5vZGUtbm8tc2VsZWN0Jyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgIC8vIENyZWF0ZSB0aGUgaW5wdXQgZWxlbWVudC4KICAgICAgICAgIHRoaXMuaW5wdXQgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOwoKICAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUgZm9yIHRoaXMgaW5wdXQgaXRlbS4KICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUgfHwgdGhpcy5pZDsKCiAgICAgICAgICAvLyBDcmVhdGUgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoaXMgaW5wdXQgaXRlbS4KICAgICAgICAgIHRoaXMuaW5wdXQuYXR0cih7CiAgICAgICAgICAgICd0eXBlJzogJ2NoZWNrYm94JywKICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsCiAgICAgICAgICAgICduYW1lJzogcGFyYW1zLmlucHV0TmFtZSArICctJyArIHZhbHVlLAogICAgICAgICAgICAnaWQnOiAnY2hvaWNlXycgKyB0aGlzLmlkCiAgICAgICAgICB9KS5hZGRDbGFzcygndHJlZW5vZGUtaW5wdXQnKTsKCiAgICAgICAgICAvLyBDaGVjayB0aGUgaW5wdXQuCiAgICAgICAgICB0aGlzLnNldENoZWNrZWQodGhpcy5jaGVja2VkKTsKCiAgICAgICAgICAvLyBCaW5kIHRvIHRoZSBjbGljayBvbiB0aGUgaW5wdXQuCiAgICAgICAgICB0aGlzLmlucHV0LmJpbmQoJ2NsaWNrJywgKGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CgogICAgICAgICAgICAgIC8vIFNldCB0aGUgY2hlY2tlZCBzdGF0ZSBiYXNlZCBvbiBpbnB1dC4KICAgICAgICAgICAgICBub2RlLmNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDsKCiAgICAgICAgICAgICAgLy8gT25seSBleHBhbmQvY29sbGFwc2UgYW5kIHNlbGVjdCBjaGlsZHJlbiBpZiBhdXRvIHNlbGVjdAogICAgICAgICAgICAgIC8vIGNoaWxkcmVuIGlzIGVuYWJsZWQuCiAgICAgICAgICAgICAgaWYgKHBhcmFtcy5hdXRvU2VsZWN0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBpZiBkZWVwIGxvYWRpbmcuIENvbGxhcHNlIGlmIHVuY2hlY2tlZC4KICAgICAgICAgICAgICAgIGlmICghbm9kZS5jaGVja2VkIHx8IHBhcmFtcy5kZWVwTG9hZCkgewogICAgICAgICAgICAgICAgICBub2RlLmV4cGFuZChub2RlLmNoZWNrZWQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENhbGwgdGhlIHNlbGVjdCBtZXRob2QuCiAgICAgICAgICAgICAgICBub2RlLnNlbGVjdENoaWxkcmVuKG5vZGUuY2hlY2tlZCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgfSkodGhpcykpOwoKICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSByb290IGl0ZW0gYW5kIHdlIGFyZSBub3Qgc2hvd2luZyB0aGUgcm9vdCBpdGVtLCB0aGVuCiAgICAgICAgICAvLyBqdXN0IGhpZGUgdGhlIGlucHV0LgogICAgICAgICAgaWYgKHRoaXMucm9vdCAmJiAhcGFyYW1zLnNob3dSb290KSB7CiAgICAgICAgICAgIHRoaXMuaW5wdXQuaGlkZSgpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU2V0IHRoZSBpbnB1dCBsZWZ0LgogICAgICAgIHRoaXMuaW5wdXQuY3NzKCdsZWZ0JywgbGVmdCArICdweCcpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmlucHV0OwogICAgfTsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBub2RlIGxpbmsuCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5idWlsZF9saW5rID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgICBlbGVtZW50LmNzcygnY3Vyc29yJywgJ3BvaW50ZXInKS5hZGRDbGFzcygnY29sbGFwc2VkJyk7CiAgICAgIGVsZW1lbnQuYmluZCgnY2xpY2snLCB7bm9kZTogdGhpc30sIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICBldmVudC5kYXRhLm5vZGUuZXhwYW5kKCQoZXZlbnQudGFyZ2V0KS5oYXNDbGFzcygnY29sbGFwc2VkJykpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9OwoKICAgIC8qKgogICAgICogQnVpbGQgdGhlIHNwYW4gKy8tIHN5bWJvbC4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLmJ1aWxkX3NwYW4gPSBmdW5jdGlvbihsZWZ0KSB7CgogICAgICAvLyBJZiB3ZSBhcmUgc2hvd2luZyB0aGUgcm9vdCBpdGVtIG9yIHdlIGFyZSBub3Qgcm9vdCwgYW5kIHdlIGhhdmUKICAgICAgLy8gY2hpbGRyZW4sIHNob3cgYSArLy0gc3ltYm9sLgogICAgICBpZiAoKCF0aGlzLnJvb3QgfHwgdGhpcy5zaG93Um9vdCkgJiYgdGhpcy5oYXNfY2hpbGRyZW4pIHsKICAgICAgICB0aGlzLnNwYW4gPSB0aGlzLmJ1aWxkX2xpbmsoJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykpLmF0dHIoewogICAgICAgICAgJ2NsYXNzJzogJ3RyZWVzZWxlY3QtZXhwYW5kJwogICAgICAgIH0pKTsKICAgICAgICB0aGlzLnNwYW4uY3NzKCdsZWZ0JywgbGVmdCArICdweCcpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnNwYW47CiAgICB9OwoKICAgIC8qKgogICAgICogQnVpbGQgdGhlIHRpdGxlIGxpbmsuCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5idWlsZF90aXRsZSA9IGZ1bmN0aW9uKGxlZnQpIHsKCiAgICAgIC8vIElmIHRoZXJlIGlzIGEgdGl0bGUsIHRoZW4gYnVpbGQgaXQuCiAgICAgIGlmICgoIXRoaXMucm9vdCB8fCB0aGlzLnNob3dSb290KSAmJiB0aGlzLnRpdGxlKSB7CgogICAgICAgIC8vIENyZWF0ZSBhIG5vZGUgbGluay4KICAgICAgICB0aGlzLm5vZGVMaW5rID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJykpLmF0dHIoewogICAgICAgICAgJ2NsYXNzJzogJ3RyZWVzZWxlY3QtdGl0bGUnLAogICAgICAgICAgJ2hyZWYnOiB0aGlzLnVybCwKICAgICAgICAgICd0YXJnZXQnOiAnX2JsYW5rJwogICAgICAgIH0pLmNzcygnbWFyZ2luTGVmdCcsIGxlZnQgKyAncHgnKS50ZXh0KHRoaXMudGl0bGUpOwoKICAgICAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGNoaWxkcmVuLCB0aGVuIGl0IHNob3VsZCBiZSBhIGxpbmsuCiAgICAgICAgaWYgKHRoaXMuaGFzX2NoaWxkcmVuKSB7CiAgICAgICAgICB0aGlzLmxpbmsgPSB0aGlzLmJ1aWxkX2xpbmsodGhpcy5ub2RlTGluay5jbG9uZSgpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB0aGlzLmxpbmsgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hdHRyKHsKICAgICAgICAgICAgJ2NsYXNzJzogJ3RyZWVzZWxlY3QtdGl0bGUnCiAgICAgICAgICB9KS5jc3MoJ21hcmdpbkxlZnQnLCBsZWZ0ICsgJ3B4JykudGV4dCh0aGlzLnRpdGxlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFJldHVybiB0aGUgbGluay4KICAgICAgcmV0dXJuIHRoaXMubGluazsKICAgIH07CgogICAgLyoqCiAgICAgKiBCdWlsZCB0aGUgY2hpbGRyZW4uCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5idWlsZF9jaGlsZHJlbiA9IGZ1bmN0aW9uKGRvbmUpIHsKCiAgICAgIC8vIENyZWF0ZSB0aGUgY2hpbGRsaXN0IGVsZW1lbnQuCiAgICAgIHRoaXMuY2hpbGRsaXN0ID0gJCgpOwoKICAgICAgLy8gSWYgdGhpcyBub2RlIGhhcyBjaGlsZHJlbi4KICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkgewoKICAgICAgICAvLyBDcmVhdGUgdGhlIGNoaWxkIGxpc3QuCiAgICAgICAgdGhpcy5jaGlsZGxpc3QgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJykpOwoKICAgICAgICAvLyBTZXQgdGhlIG9kZCBzdGF0ZS4KICAgICAgICB2YXIgb2RkID0gdGhpcy5vZGQ7CgogICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLgogICAgICAgIHZhciBudW1DaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOwoKICAgICAgICAvLyBGdW5jdGlvbiB0byBhcHBlbmQgY2hpbGRyZW4uCiAgICAgICAgdmFyIGFwcGVuZENoaWxkcmVuID0gZnVuY3Rpb24odHJlZW5vZGUsIGluZGV4KSB7CiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAvLyBBZGQgdGhlIGNoaWxkIHRyZWUgdG8gdGhlIGxpc3QuCiAgICAgICAgICAgIHRyZWVub2RlLmNoaWxkcmVuW2luZGV4XS5idWlsZChmdW5jdGlvbihjaGlsZCkgewoKICAgICAgICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBsb2FkZWQuCiAgICAgICAgICAgICAgbnVtQ2hpbGRyZW4tLTsKCiAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBjaGlsZCB0byB0aGUgbGlzdC4KICAgICAgICAgICAgICB0cmVlbm9kZS5jaGlsZGxpc3QuYXBwZW5kKGNoaWxkLmRpc3BsYXkpOwoKICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBjaGxpZHJlbiwgdGhlbiBzYXkgd2UgYXJlIGRvbmUuCiAgICAgICAgICAgICAgaWYgKCFudW1DaGlsZHJlbikgewogICAgICAgICAgICAgICAgZG9uZS5jYWxsKHRyZWVub2RlLCB0cmVlbm9kZS5jaGlsZGxpc3QpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9OwogICAgICAgIH07CgogICAgICAgIC8vIE5vdyBpZiB0aGVyZSBhcmUgY2hpbGRyZW4sIGl0ZXJhdGUgYW5kIGJ1aWxkIHRoZW0uCiAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLmNoaWxkcmVuKSB7CgogICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjaGlsZCBpcyBhIHZhbGlkIG9iamVjdCBpbiB0aGUgbGlzdC4KICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmhhc093blByb3BlcnR5KGkpKSB7CgogICAgICAgICAgICAvLyBTZXQgdGhlIGNoaWxkLgogICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldOwoKICAgICAgICAgICAgLy8gQWx0ZXJuYXRlIHRoZSBvZGQgc3RhdGUuCiAgICAgICAgICAgIG9kZCA9ICFvZGQ7CgogICAgICAgICAgICAvLyBHZXQgdGhlIGNoZWNrZWQgdmFsdWUuCiAgICAgICAgICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7CiAgICAgICAgICAgIGlmIChjaGlsZC5oYXNPd25Qcm9wZXJ0eSgnY2hlY2tlZCcpKSB7CiAgICAgICAgICAgICAgaXNDaGVja2VkID0gY2hpbGQuY2hlY2tlZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IFRyZWVOb2RlIGZvciB0aGlzIGNoaWxkLgogICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldID0gbmV3IFRyZWVOb2RlKCQuZXh0ZW5kKGNoaWxkLCB7CiAgICAgICAgICAgICAgbGV2ZWw6IHRoaXMubGV2ZWwgKyAxLAogICAgICAgICAgICAgIG9kZDogb2RkLAogICAgICAgICAgICAgIGNoZWNrZWQ6IGlzQ2hlY2tlZCwKICAgICAgICAgICAgICBleGNsdWRlOiB0aGlzLmV4Y2x1ZGUKICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgLy8gU2V0IHRpbWVvdXQgdG8gaGVscCB3aXRoIHJlY3Vyc2lvbi4KICAgICAgICAgICAgc2V0VGltZW91dChhcHBlbmRDaGlsZHJlbih0aGlzLCBpKSwgMik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgewoKICAgICAgICAvLyBDYWxsIHRoYXQgd2UgYXJlIGRvbmUgbG9hZGluZyB0aGlzIGNoaWxkLgogICAgICAgIGRvbmUuY2FsbCh0aGlzLCB0aGlzLmNoaWxkbGlzdCk7CiAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBCdWlsZHMgdGhlIERPTSBhbmQgdGhlIHRyZWUgZm9yIHRoaXMgbm9kZS4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oZG9uZSkgewoKICAgICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgbGVmdCBtYXJnaW4gZm9yIGVhY2ggZWxlbWVudC4KICAgICAgdmFyIGxlZnQgPSA1LCBlbGVtID0gbnVsbDsKCiAgICAgIC8vIENyZWF0ZSB0aGUgbGlzdCBkaXNwbGF5LgogICAgICBpZiAodGhpcy5kaXNwbGF5Lmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuZGlzcGxheSA9IHRoaXMuYnVpbGRfdHJlZW5vZGUoKTsKICAgICAgfQogICAgICBlbHNlIGlmICh0aGlzLnJvb3QpIHsKICAgICAgICB2YXIgdHJlZW5vZGUgPSB0aGlzLmJ1aWxkX3RyZWVub2RlKCk7CiAgICAgICAgdGhpcy5kaXNwbGF5LmFwcGVuZCh0cmVlbm9kZSk7CiAgICAgICAgdGhpcy5kaXNwbGF5ID0gdHJlZW5vZGU7CiAgICAgIH0KCiAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGlucHV0LgogICAgICBpZiAoKHRoaXMuaW5wdXQubGVuZ3RoID09PSAwKSAmJgogICAgICAgICAgKGVsZW0gPSB0aGlzLmJ1aWxkX2lucHV0KGxlZnQpKSAmJgogICAgICAgICAgKGVsZW0ubGVuZ3RoID4gMCkpIHsKCiAgICAgICAgLy8gQWRkIHRoZSBpbnB1dCB0byB0aGUgZGlzcGxheS4KICAgICAgICB0aGlzLmRpc3BsYXkuYXBwZW5kKGVsZW0pOwogICAgICAgIGxlZnQgKz0gcGFyYW1zLmNvbHdpZHRoOwogICAgICB9CgogICAgICAvLyBOb3cgY3JlYXRlIHRoZSArLy0gc2lnbiBpZiBuZWVkZWQuCiAgICAgIGlmICh0aGlzLnNwYW4ubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy5kaXNwbGF5LmFwcGVuZCh0aGlzLmJ1aWxkX3NwYW4obGVmdCkpOwogICAgICAgIGxlZnQgKz0gcGFyYW1zLmNvbHdpZHRoOwogICAgICB9CgogICAgICAvLyBOb3cgYXBwZW5kIHRoZSBub2RlIHRpdGxlLgogICAgICBpZiAodGhpcy5saW5rLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuZGlzcGxheS5hcHBlbmQodGhpcy5idWlsZF90aXRsZShsZWZ0KSk7CiAgICAgIH0KCiAgICAgIC8vIENhbGxlZCB3aGVuIHRoZSBub2RlIGlzIGRvbmUgYnVpbGRpbmcuCiAgICAgIHZhciBvbkRvbmUgPSBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gU2VlIGlmIHRoZXkgd2lzaCB0byBhbHRlciB0aGUgYnVpbGQuCiAgICAgICAgaWYgKHBhcmFtcy5vbmJ1aWxkKSB7CiAgICAgICAgICBwYXJhbXMub25idWlsZCh0aGlzKTsKICAgICAgICB9CgogICAgICAgIC8vIENyZWF0ZSBhIHNlYXJjaCBpdGVtLgogICAgICAgIHRoaXMuc2VhcmNoSXRlbSA9IHRoaXMuZGlzcGxheS5jbG9uZSgpOwogICAgICAgICQoJy50cmVlc2VsZWN0LWV4cGFuZCcsIHRoaXMuc2VhcmNoSXRlbSkucmVtb3ZlKCk7CgogICAgICAgIC8vIElmIHRoZSBzZWFyY2ggdGl0bGUgaXMgbm90IGEgbGluaywgdGhlbiBtYWtlIGl0IG9uZS4uLgogICAgICAgIHZhciBzZWFyY2hUaXRsZSA9ICQoJ2Rpdi50cmVlc2VsZWN0LXRpdGxlJywgdGhpcy5zZWFyY2hJdGVtKTsKICAgICAgICBpZiAoc2VhcmNoVGl0bGUubGVuZ3RoID4gMCkgewogICAgICAgICAgc2VhcmNoVGl0bGUucmVwbGFjZVdpdGgodGhpcy5ub2RlTGluayk7CiAgICAgICAgfQoKICAgICAgICAvLyBTZWUgaWYgdGhleSB3aXNoIHRvIGhvb2sgaW50byB0aGUgcG9zdGJ1aWxkIHByb2Nlc3MuCiAgICAgICAgaWYgKHBhcmFtcy5wb3N0YnVpbGQpIHsKICAgICAgICAgIHBhcmFtcy5wb3N0YnVpbGQodGhpcyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG5vZGUgaXMgZXhjbHVkZWQsIGFuZCBoaWRlIGlmIHNvLgogICAgICAgIGlmICh0eXBlb2YgdGhpcy5leGNsdWRlW3RoaXMuaWRdICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgaWYgKCQoJy50cmVlbm9kZS1pbnB1dCcsIHRoaXMuZGlzcGxheSkubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMuZGlzcGxheS5oaWRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGV5IHdpc2ggdG8ga25vdyB3aGVuIHdlIGFyZSBkb25lIGJ1aWxkaW5nLgogICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICBkb25lLmNhbGwodGhpcywgdGhpcyk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgLy8gQXBwZW5kIHRoZSBjaGlsZHJlbi4KICAgICAgaWYgKHRoaXMuY2hpbGRsaXN0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuYnVpbGRfY2hpbGRyZW4oZnVuY3Rpb24oY2hpbGRyZW4pIHsKICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHRoaXMuZGlzcGxheS5hcHBlbmQoY2hpbGRyZW4pOwogICAgICAgICAgfQogICAgICAgICAgb25Eb25lLmNhbGwodGhpcyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgb25Eb25lLmNhbGwodGhpcyk7CiAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RBbGwgdGV4dCBpZiB0aGF0IGFwcGxpZXMgdG8gdGhpcyBub2RlLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuZ2V0U2VsZWN0QWxsID0gZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLnJvb3QgJiYgdGhpcy5zZWxlY3RBbGwpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RBbGxUZXh0OwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBTZWFyY2ggdGhpcyBub2RlIGZvciBtYXRjaGluZyB0ZXh0LgogICAgICoKICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaC4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLnNlYXJjaCA9IGZ1bmN0aW9uKHRleHQsIGNhbGxiYWNrKSB7CiAgICAgIC8vIElmIG5vIHRleHQgd2FzIHByb3ZpZGVkLCB0aGVuIGp1c3QgcmV0dXJuIHRoZSByb290IGNoaWxkcmVuLgogICAgICBpZiAoIXRleHQpIHsKICAgICAgICBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgIGNhbGxiYWNrKHRoaXMuY2hpbGRyZW4sIGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSB7CgogICAgICAgIC8vIEluaXRpYWxpemUgb3VyIHJlc3VsdHMuCiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTsKCiAgICAgICAgLy8gQ29udmVydCB0aGUgdGV4dCB0byBsb3dlcmNhc2UuCiAgICAgICAgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgLy8gU2VlIGlmIHRoZXkgcHJvdmlkZWQgYSBzZWFyY2ggZW5kcG9pbnQuCiAgICAgICAgaWYgKHBhcmFtcy5zZWFyY2hlcikgewoKICAgICAgICAgIC8vIENhbGwgdGhlIHNlYXJjaGVyIGZvciB0aGUgbmV3IG5vZGVzLgogICAgICAgICAgcGFyYW1zLnNlYXJjaGVyKHRoaXMsIHRleHQsIGZ1bmN0aW9uKG5vZGVzLCBnZXROb2RlKSB7CgogICAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBub2Rlcy4KICAgICAgICAgICAgdmFyIG51bU5vZGVzID0gT2JqZWN0LmtleXMobm9kZXMpLmxlbmd0aDsKCiAgICAgICAgICAgIC8vIElmIG5vIG5vZGVzIHdlcmUgcmV0dXJuZWQgdGhlbiByZXR1cm4gbm90aGluZy4KICAgICAgICAgICAgaWYgKG51bU5vZGVzID09PSAwKSB7CiAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0cywgdHJ1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIENhbGxlZCB3aGVuIHRoZSB0cmVlIG5vZGUgaXMgYnVpbHQuCiAgICAgICAgICAgIHZhciBvbkJ1aWx0ID0gZnVuY3Rpb24oaWQpIHsKCiAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBtZXRob2QgdG8gY2FsbCB3aGVuIHRoZSBub2RlIGlzIGJ1aWx0LgogICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0cmVlbm9kZSkgewoKICAgICAgICAgICAgICAgIC8vIERlY3JlbWVudCB0aGUgY291bnRlci4KICAgICAgICAgICAgICAgIG51bU5vZGVzLS07CgogICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBub2RlIHRvIHRoZSByZXN1bHRzLgogICAgICAgICAgICAgICAgcmVzdWx0c1tpZF0gPSB0cmVlbm9kZTsKCiAgICAgICAgICAgICAgICAvLyBJZiBubyBtb3JlIG5vZGVzIGFyZSBsb2FkaW5nLCB0aGVuIGNhbGxiYWNrLgogICAgICAgICAgICAgICAgaWYgKCFudW1Ob2RlcykgewoKICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgd2l0aCB0aGUgc2VhcmNoIHJlc3VsdHMuCiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdHMsIHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH07CgogICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBub2Rlcy4KICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gbm9kZXMpIHsKCiAgICAgICAgICAgICAgLy8gU2V0IHRoZSB0cmVlbm9kZS4KICAgICAgICAgICAgICB2YXIgdHJlZW5vZGUgPSBuZXcgVHJlZU5vZGUoZ2V0Tm9kZSA/IGdldE5vZGUobm9kZXNbaWRdKSA6IG5vZGVzW2lkXSk7CgogICAgICAgICAgICAgIC8vIFNheSB0aGlzIG5vZGUgaXMgbG9hZGVkLgogICAgICAgICAgICAgIHRyZWVub2RlLm5vZGVsb2FkZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAvLyBBZGQgdG8gdGhlIGxvYWRlZCBub2RlcyBhcnJheS4KICAgICAgICAgICAgICBsb2FkZWROb2Rlc1t0cmVlbm9kZS5pZF0gPSB0cmVlbm9kZS5pZDsKCiAgICAgICAgICAgICAgLy8gQnVpbGQgdGhlIG5vZGUuCiAgICAgICAgICAgICAgdHJlZW5vZGUuYnVpbGQob25CdWlsdChpZCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgLy8gTG9hZCBhbGwgbm9kZXMuCiAgICAgICAgICB0aGlzLmxvYWRBbGwoZnVuY3Rpb24obm9kZSkgewoKICAgICAgICAgICAgLy8gQ2FsbGJhY2sgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaC4KICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0cywgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIGZ1bmN0aW9uKG5vZGUpIHsKCiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgdGhlIHJvb3Qgbm9kZSwgYW5kIHRoZSB0ZXh0IG1hdGNoZXMgdGhlIHRpdGxlLgogICAgICAgICAgICBpZiAoIW5vZGUucm9vdCAmJiBub2RlLnRpdGxlLnRvTG93ZXJDYXNlKCkuc2VhcmNoKHRleHQpICE9PSAtMSkgewoKICAgICAgICAgICAgICAvLyBBZGQgdGhpcyB0byBvdXIgc2VhcmNoIHJlc3VsdHMuCiAgICAgICAgICAgICAgcmVzdWx0c1tub2RlLmlkXSA9IG5vZGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKCiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBpbnN0YW5jZS4KICAgIHJldHVybiAkKHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7CgogICAgICAvLyBHZXQgdGhlIHRyZWUgbm9kZSBwYXJhbWV0ZXJzLgogICAgICB2YXIgdHJlZVBhcmFtcyA9ICQuZXh0ZW5kKHBhcmFtcywge2Rpc3BsYXk6ICQodGhpcyl9KTsKCiAgICAgIC8vIENyZWF0ZSBhIHJvb3QgdHJlZSBub2RlIGFuZCBsb2FkIGl0LgogICAgICB2YXIgcm9vdCA9IHRoaXMudHJlZW5vZGUgPSBuZXcgVHJlZU5vZGUodHJlZVBhcmFtcywgdHJ1ZSk7CgogICAgICAvLyBBZGQgYSBzZWxlY3QgYWxsIGxpbmsuCiAgICAgIHZhciBzZWxlY3RBbGwgPSByb290LmdldFNlbGVjdEFsbCgpOwogICAgICBpZiAoc2VsZWN0QWxsICE9PSBmYWxzZSAmJiAhcm9vdC5zaG93Um9vdCkgewoKICAgICAgICAvLyBTZWUgaWYgdGhlIHNlbGVjdCBhbGwgYnV0dG9uIHNob3VsZCBiZSBjaGVja2VkLgogICAgICAgIHZhciBjaGVja2VkID0gZmFsc2U7CiAgICAgICAgdmFyIGRlZmF1bHRfdmFsdWUgPSBwYXJhbXMuZGVmYXVsdF92YWx1ZTsKICAgICAgICBpZiAoZGVmYXVsdF92YWx1ZS5oYXNPd25Qcm9wZXJ0eShyb290LnZhbHVlICsgJy1pbmNsdWRlLWJlbG93JykpIHsKICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gQ3JlYXRlIGFuIGlucHV0IGVsZW1lbnQuCiAgICAgICAgdmFyIGlucHV0RWxlbWVudCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSkuYXR0cih7CiAgICAgICAgICAndHlwZSc6ICdjaGVja2JveCcKICAgICAgICB9KTsKCiAgICAgICAgLy8gU2V0IHRoZSBjaGVja2VkIHN0YXRlLgogICAgICAgIGlucHV0RWxlbWVudC5lcSgwKVswXS5jaGVja2VkID0gY2hlY2tlZDsKCiAgICAgICAgLy8gQmluZCB0byB0aGUgY2xpY2sgZXZlbnQuCiAgICAgICAgaW5wdXRFbGVtZW50LmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgIHJvb3Quc2VsZWN0Q2hpbGRyZW4oZXZlbnQudGFyZ2V0LmNoZWNrZWQpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBBZGQgdGhlIGlucHV0IGl0ZW0gdG8gdGhlIHJvb3QuCiAgICAgICAgcm9vdC5kaXNwbGF5LmFwcGVuZChpbnB1dEVsZW1lbnQpOwoKICAgICAgICAvLyBJZiB0aGV5IHByb3ZpZGVkIHNlbGVjdCBhbGwgdGV4dCwgYWRkIGl0IGhlcmUuCiAgICAgICAgaWYgKHNlbGVjdEFsbCkgewogICAgICAgICAgdmFyIHNwYW4gPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSkuYXR0cih7CiAgICAgICAgICAgICdjbGFzcyc6ICd0cmVlc2VsZWN0LXNlbGVjdC1hbGwnCiAgICAgICAgICB9KS5odG1sKHNlbGVjdEFsbCk7CiAgICAgICAgICByb290LmRpc3BsYXkuYXBwZW5kKHNwYW4pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQ3JlYXRlIGEgbG9hZGluZyBzcGFuLgogICAgICB2YXIgaW5pdEJ1c3kgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSkuYWRkQ2xhc3MoJ3RyZWVidXN5Jyk7CiAgICAgIHJvb3QuZGlzcGxheS5hcHBlbmQoaW5pdEJ1c3kuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykpOwoKICAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIHJvb3Qgbm9kZSBpcyBkb25lIGxvYWRpbmcuCiAgICAgIHZhciBkb25lTG9hZGluZyA9IGZ1bmN0aW9uKCkgewoKICAgICAgICAvLyBSZW1vdmUgdGhlIGluaXQgYnVzeSBjdXJzb3IuCiAgICAgICAgaW5pdEJ1c3kucmVtb3ZlKCk7CgogICAgICAgIC8vIENhbGwgdGhlIHRyZWVsb2FkZWQgcGFyYW1zLgogICAgICAgIGlmIChwYXJhbXMudHJlZWxvYWRlZCkgewogICAgICAgICAgcGFyYW1zLnRyZWVsb2FkZWQodGhpcyk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgLy8gTG9hZCB0aGUgbm9kZS4KICAgICAgcm9vdC5sb2FkTm9kZShmdW5jdGlvbihub2RlKSB7CgogICAgICAgIC8vIENoZWNrIHRoZSBsZW5ndGggb2YgY2hpbGRyZW4gaW4gdGhpcyBub2RlLgogICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewoKICAgICAgICAgIC8vIElmIHRoZSByb290IG5vZGUgZG9lcyBub3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHRoZW4gaGlkZS4KICAgICAgICAgIG5vZGUuZGlzcGxheS5oaWRlKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBFeHBhbmQgdGhpcyByb290IG5vZGUuCiAgICAgICAgbm9kZS5leHBhbmQodHJ1ZSk7CgogICAgICAgIC8vIFNlbGVjdCB0aGlzIG5vZGUgYmFzZWQgb24gdGhlIGRlZmF1bHQgdmFsdWUuCiAgICAgICAgbm9kZS5zZWxlY3Qobm9kZS5jaGVja2VkKTsKCiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0cyBmb3IgYWxsIHRoZSBjaGlsZHJlbi4KICAgICAgICB2YXIgZGVmYXVsdHMgPSBub2RlLmNoZWNrZWQ7CiAgICAgICAgaWYgKCFqUXVlcnkuaXNFbXB0eU9iamVjdChwYXJhbXMuZGVmYXVsdF92YWx1ZSkpIHsKICAgICAgICAgIGRlZmF1bHRzID0gcGFyYW1zLmRlZmF1bHRfdmFsdWU7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZGVmYXVsdHMsIHRoZW4gc2VsZWN0IHRoZSBjaGlsZHJlbiB3aXRoIHRoZW0uCiAgICAgICAgaWYgKGRlZmF1bHRzKSB7CgogICAgICAgICAgLy8gU2VsZWN0IHRoZSBjaGlsZHJlbiBiYXNlZCBvbiB0aGUgZGVmYXVsdHMuCiAgICAgICAgICBpZiAocGFyYW1zLmRlZXBMb2FkKSB7CiAgICAgICAgICAgIG5vZGUuc2VsZWN0Q2hpbGRyZW4oZGVmYXVsdHMsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGRvbmVMb2FkaW5nLmNhbGwobm9kZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIFdoZW4gbm90IGRlZXAgbG9hZGluZywgdXNlIHNlbGVjdERlZmF1bHRzIHRvIHNlYXJjaCBmb3IgZGVmYXVsdHMKICAgICAgICAgICAgLy8gdXNpbmcgYnJlYWR0aCBmaXJzdCBjaGVjay4KICAgICAgICAgICAgbm9kZS5zZWxlY3REZWZhdWx0cyhkZWZhdWx0cywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgZG9uZUxvYWRpbmcuY2FsbChub2RlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgZG9uZUxvYWRpbmcuY2FsbChub2RlKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgLy8gSWYgdGhlIHJvb3QgZWxlbWVudCBkb2Vzbid0IGhhdmUgY2hpbGRyZW4sIHRoZW4gaGlkZSB0aGUgdHJlZXNlbGVjdC4KICAgICAgaWYgKCFyb290Lmhhc19jaGlsZHJlbikgewogICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICB9CiAgICB9KTsKICB9Owp9KShqUXVlcnkpOwoNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCi8qIEZpbGVTYXZlci5qcw0KKiBBIHNhdmVBcygpIEZpbGVTYXZlciBpbXBsZW1lbnRhdGlvbi4NCiogMjAxMy0xMC0yMQ0KKg0KKiBCeSBFbGkgR3JleSwgaHR0cDovL2VsaWdyZXkuY29tDQoqIExpY2Vuc2U6IFgxMS9NSVQNCiogICBTZWUgTElDRU5TRS5tZA0KKi8NCg0KLypnbG9iYWwgc2VsZiAqLw0KLypqc2xpbnQgYml0d2lzZTogdHJ1ZSwgcmVnZXhwOiB0cnVlLCBjb25mdXNpb246IHRydWUsIGVzNTogdHJ1ZSwgdmFyczogdHJ1ZSwgd2hpdGU6IHRydWUsDQpwbHVzcGx1czogdHJ1ZSAqLw0KDQovKiEgQHNvdXJjZSBodHRwOi8vcHVybC5lbGlncmV5LmNvbS9naXRodWIvRmlsZVNhdmVyLmpzL2Jsb2IvbWFzdGVyL0ZpbGVTYXZlci5qcyAqLw0KKGZ1bmN0aW9uICgkLCB1bmRlZmluZWQpIHsNCiAgICAkLnNhdmVBcyA9ICQuc2F2ZUFzDQoJICB8fCAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IgJiYgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IuYmluZChuYXZpZ2F0b3IpKQ0KCQkgIHx8IChmdW5jdGlvbiAodmlldykgew0KCQkgICAgICAidXNlIHN0cmljdCI7DQoJCSAgICAgIHZhcg0KCQkJCSAgZG9jID0gdmlldy5kb2N1bWVudA0KCQkgICAgICAvLyBvbmx5IGdldCBVUkwgd2hlbiBuZWNlc3NhcnkgaW4gY2FzZSBCbG9iQnVpbGRlci5qcyBoYXNuJ3Qgb3ZlcnJpZGRlbiBpdCB5ZXQNCgkJCQkJICAsIGdldF9VUkwgPSBmdW5jdGlvbiAoKSB7DQoJCQkJCSAgICAgIHJldHVybiB2aWV3LlVSTCB8fCB2aWV3LndlYmtpdFVSTCB8fCB2aWV3Ow0KCQkJCQkgIH0NCgkJCQksIFVSTCA9IHZpZXcuVVJMIHx8IHZpZXcud2Via2l0VVJMIHx8IHZpZXcNCgkJCQksIHNhdmVfbGluayA9IC8qIENVU1RPTSBDT0RFIFNUQVJUICovZG9jLmNyZWF0ZUVsZW1lbnROUyAmJiAvKiBDVVNUT00gQ09ERSBFTkQgKi9kb2MuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgImEiKQ0KCQkJCSwgY2FuX3VzZV9zYXZlX2xpbmsgPSAvKiBDVVNUT00gQ09ERSBTVEFSVCAqL3NhdmVfbGluayAmJiAvKiBDVVNUT00gQ09ERSBFTkQgKi8hdmlldy5leHRlcm5hbEhvc3QgJiYgImRvd25sb2FkIiBpbiBzYXZlX2xpbmsNCgkJCQkJICAsIGNsaWNrID0gZnVuY3Rpb24gKG5vZGUpIHsNCgkJCQkJICAgICAgdmFyIGV2ZW50ID0gZG9jLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpOw0KCQkJCQkgICAgICBldmVudC5pbml0TW91c2VFdmVudCgNCgkJCQkJCQkiY2xpY2siLCB0cnVlLCBmYWxzZSwgdmlldywgMCwgMCwgMCwgMCwgMA0KCQkJCQkJCSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwNCgkJCQkJCSk7DQoJCQkJCSAgICAgIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7DQoJCQkJCSAgfQ0KCQkJCSwgd2Via2l0X3JlcV9mcyA9IHZpZXcud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0NCgkJCQksIHJlcV9mcyA9IHZpZXcucmVxdWVzdEZpbGVTeXN0ZW0gfHwgd2Via2l0X3JlcV9mcyB8fCB2aWV3Lm1velJlcXVlc3RGaWxlU3lzdGVtDQoJCQkJLCB0aHJvd19vdXRzaWRlID0gZnVuY3Rpb24gKGV4KSB7DQoJCQkJICAgICh2aWV3LnNldEltbWVkaWF0ZSB8fCB2aWV3LnNldFRpbWVvdXQpKGZ1bmN0aW9uICgpIHsNCgkJCQkgICAgICAgIHRocm93IGV4Ow0KCQkJCSAgICB9LCAwKTsNCgkJCQl9DQoJCQkJLCBmb3JjZV9zYXZlYWJsZV90eXBlID0gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSINCgkJCQksIGZzX21pbl9zaXplID0gMA0KCQkJCSwgZGVsZXRpb25fcXVldWUgPSBbXQ0KCQkJCQkgICwgcHJvY2Vzc19kZWxldGlvbl9xdWV1ZSA9IGZ1bmN0aW9uICgpIHsNCgkJCQkJICAgICAgdmFyIGkgPSBkZWxldGlvbl9xdWV1ZS5sZW5ndGg7DQoJCQkJCSAgICAgIHdoaWxlIChpLS0pIHsNCgkJCQkJICAgICAgICAgIHZhciBmaWxlID0gZGVsZXRpb25fcXVldWVbaV07DQoJCQkJCSAgICAgICAgICBpZiAodHlwZW9mIGZpbGUgPT09ICJzdHJpbmciKSB7IC8vIGZpbGUgaXMgYW4gb2JqZWN0IFVSTA0KCQkJCQkgICAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZmlsZSk7DQoJCQkJCSAgICAgICAgICB9IGVsc2UgeyAvLyBmaWxlIGlzIGEgRmlsZQ0KCQkJCQkgICAgICAgICAgICAgIGZpbGUucmVtb3ZlKCk7DQoJCQkJCSAgICAgICAgICB9DQoJCQkJCSAgICAgIH0NCgkJCQkJICAgICAgZGVsZXRpb25fcXVldWUubGVuZ3RoID0gMDsgLy8gY2xlYXIgcXVldWUNCgkJCQkJICB9DQoJCQkJCSAgLCBkaXNwYXRjaCA9IGZ1bmN0aW9uIChmaWxlc2F2ZXIsIGV2ZW50X3R5cGVzLCBldmVudCkgew0KCQkJCQkgICAgICBldmVudF90eXBlcyA9IFtdLmNvbmNhdChldmVudF90eXBlcyk7DQoJCQkJCSAgICAgIHZhciBpID0gZXZlbnRfdHlwZXMubGVuZ3RoOw0KCQkJCQkgICAgICB3aGlsZSAoaS0tKSB7DQoJCQkJCSAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmaWxlc2F2ZXJbIm9uIiArIGV2ZW50X3R5cGVzW2ldXTsNCgkJCQkJICAgICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsNCgkJCQkJICAgICAgICAgICAgICB0cnkgew0KCQkJCQkgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKGZpbGVzYXZlciwgZXZlbnQgfHwgZmlsZXNhdmVyKTsNCgkJCQkJICAgICAgICAgICAgICB9IGNhdGNoIChleCkgew0KCQkJCQkgICAgICAgICAgICAgICAgICB0aHJvd19vdXRzaWRlKGV4KTsNCgkJCQkJICAgICAgICAgICAgICB9DQoJCQkJCSAgICAgICAgICB9DQoJCQkJCSAgICAgIH0NCgkJCQkJICB9DQoJCQkJCSAgLCBGaWxlU2F2ZXIgPSBmdW5jdGlvbiAoYmxvYiwgbmFtZSkgew0KCQkJCQkgICAgICAvLyBGaXJzdCB0cnkgYS5kb3dubG9hZCwgdGhlbiB3ZWIgZmlsZXN5c3RlbSwgdGhlbiBvYmplY3QgVVJMcw0KCQkJCQkgICAgICB2YXINCgkJCQkJCQkgIGZpbGVzYXZlciA9IHRoaXMNCgkJCQkJCQksIHR5cGUgPSBibG9iLnR5cGUNCgkJCQkJCQksIGJsb2JfY2hhbmdlZCA9IGZhbHNlDQoJCQkJCQkJLCBvYmplY3RfdXJsDQoJCQkJCQkJLCB0YXJnZXRfdmlldw0KCQkJCQkJCQkgICwgZ2V0X29iamVjdF91cmwgPSBmdW5jdGlvbiAoKSB7DQoJCQkJCQkJCSAgICAgIHZhciBvYmplY3RfdXJsID0gZ2V0X1VSTCgpLmNyZWF0ZU9iamVjdFVSTChibG9iKTsNCgkJCQkJCQkJICAgICAgZGVsZXRpb25fcXVldWUucHVzaChvYmplY3RfdXJsKTsNCgkJCQkJCQkJICAgICAgcmV0dXJuIG9iamVjdF91cmw7DQoJCQkJCQkJCSAgfQ0KCQkJCQkJCQkgICwgZGlzcGF0Y2hfYWxsID0gZnVuY3Rpb24gKCkgew0KCQkJCQkJCQkgICAgICBkaXNwYXRjaChmaWxlc2F2ZXIsICJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIHdyaXRlZW5kIi5zcGxpdCgiICIpKTsNCgkJCQkJCQkJICB9DQoJCQkJCSAgICAgIC8vIG9uIGFueSBmaWxlc3lzIGVycm9ycyByZXZlcnQgdG8gc2F2aW5nIHdpdGggb2JqZWN0IFVSTHMNCgkJCQkJCQkJICAsIGZzX2Vycm9yID0gZnVuY3Rpb24gKCkgew0KCQkJCQkJCQkgICAgICAvLyBkb24ndCBjcmVhdGUgbW9yZSBvYmplY3QgVVJMcyB0aGFuIG5lZWRlZA0KCQkJCQkJCQkgICAgICBpZiAoYmxvYl9jaGFuZ2VkIHx8ICFvYmplY3RfdXJsKSB7DQoJCQkJCQkJCSAgICAgICAgICBvYmplY3RfdXJsID0gZ2V0X29iamVjdF91cmwoYmxvYik7DQoJCQkJCQkJCSAgICAgIH0NCgkJCQkJCQkJICAgICAgaWYgKHRhcmdldF92aWV3KSB7DQoJCQkJCQkJCSAgICAgICAgICB0YXJnZXRfdmlldy5sb2NhdGlvbi5ocmVmID0gb2JqZWN0X3VybDsNCgkJCQkJCQkJICAgICAgfSBlbHNlIHsNCgkJCQkJCQkJICAgICAgICAgIHdpbmRvdy5vcGVuKG9iamVjdF91cmwsICJfYmxhbmsiKTsNCgkJCQkJCQkJICAgICAgfQ0KCQkJCQkJCQkgICAgICBmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FOw0KCQkJCQkJCQkgICAgICBkaXNwYXRjaF9hbGwoKTsNCgkJCQkJCQkJICB9DQoJCQkJCQkJCSAgLCBhYm9ydGFibGUgPSBmdW5jdGlvbiAoZnVuYykgew0KCQkJCQkJCQkgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgew0KCQkJCQkJCQkgICAgICAgICAgaWYgKGZpbGVzYXZlci5yZWFkeVN0YXRlICE9PSBmaWxlc2F2ZXIuRE9ORSkgew0KCQkJCQkJCQkgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7DQoJCQkJCQkJCSAgICAgICAgICB9DQoJCQkJCQkJCSAgICAgIH07DQoJCQkJCQkJCSAgfQ0KCQkJCQkJCQkgICwgY3JlYXRlX2lmX25vdF9mb3VuZCA9IHsgY3JlYXRlOiB0cnVlLCBleGNsdXNpdmU6IGZhbHNlIH0NCgkJCQkJCQksIHNsaWNlDQoJCQkJCSAgICAgIDsNCgkJCQkJICAgICAgZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuSU5JVDsNCgkJCQkJICAgICAgaWYgKCFuYW1lKSB7DQoJCQkJCSAgICAgICAgICBuYW1lID0gImRvd25sb2FkIjsNCgkJCQkJICAgICAgfQ0KCQkJCQkgICAgICBpZiAoY2FuX3VzZV9zYXZlX2xpbmspIHsNCgkJCQkJICAgICAgICAgIG9iamVjdF91cmwgPSBnZXRfb2JqZWN0X3VybChibG9iKTsNCgkJCQkJICAgICAgICAgIC8vIEZGIGZvciBBbmRyb2lkIGhhcyBhIG5hc3R5IGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20NCgkJCQkJICAgICAgICAgIC8vIHRoYXQgdHVybnMgYWxsIG9iamVjdHMgdGhhdCBhcmUgbm90IHB1cmUgamF2YXNjcmlwdCBpbnRvICdkZWFkT2JqZWN0Jw0KCQkJCQkgICAgICAgICAgLy8gdGhpcyBtZWFucyBgZG9jYCBhbmQgYHNhdmVfbGlua2AgYXJlIHVudXNhYmxlIGFuZCBuZWVkIHRvIGJlIHJlY3JlYXRlZA0KCQkJCQkgICAgICAgICAgLy8gYHZpZXdgIGlzIHVzYWJsZSB0aG91Z2g6DQoJCQkJCSAgICAgICAgICBkb2MgPSB2aWV3LmRvY3VtZW50Ow0KCQkJCQkgICAgICAgICAgc2F2ZV9saW5rID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJhIik7DQoJCQkJCSAgICAgICAgICBzYXZlX2xpbmsuaHJlZiA9IG9iamVjdF91cmw7DQoJCQkJCSAgICAgICAgICBzYXZlX2xpbmsuZG93bmxvYWQgPSBuYW1lOw0KCQkJCQkgICAgICAgICAgdmFyIGV2ZW50ID0gZG9jLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpOw0KCQkJCQkgICAgICAgICAgZXZlbnQuaW5pdE1vdXNlRXZlbnQoDQoJCQkJCQkJCSJjbGljayIsIHRydWUsIGZhbHNlLCB2aWV3LCAwLCAwLCAwLCAwLCAwDQoJCQkJCQkJCSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwNCgkJCQkJCQkpOw0KCQkJCQkgICAgICAgICAgc2F2ZV9saW5rLmRpc3BhdGNoRXZlbnQoZXZlbnQpOw0KCQkJCQkgICAgICAgICAgZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTsNCgkJCQkJICAgICAgICAgIGRpc3BhdGNoX2FsbCgpOw0KCQkJCQkgICAgICAgICAgcmV0dXJuOw0KCQkJCQkgICAgICB9DQoJCQkJCSAgICAgIC8vIE9iamVjdCBhbmQgd2ViIGZpbGVzeXN0ZW0gVVJMcyBoYXZlIGEgcHJvYmxlbSBzYXZpbmcgaW4gR29vZ2xlIENocm9tZSB3aGVuDQoJCQkJCSAgICAgIC8vIHZpZXdlZCBpbiBhIHRhYiwgc28gSSBmb3JjZSBzYXZlIHdpdGggYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtDQoJCQkJCSAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTkxMTU4DQoJCQkJCSAgICAgIGlmICh2aWV3LmNocm9tZSAmJiB0eXBlICYmIHR5cGUgIT09IGZvcmNlX3NhdmVhYmxlX3R5cGUpIHsNCgkJCQkJICAgICAgICAgIHNsaWNlID0gYmxvYi5zbGljZSB8fCBibG9iLndlYmtpdFNsaWNlOw0KCQkJCQkgICAgICAgICAgYmxvYiA9IHNsaWNlLmNhbGwoYmxvYiwgMCwgYmxvYi5zaXplLCBmb3JjZV9zYXZlYWJsZV90eXBlKTsNCgkJCQkJICAgICAgICAgIGJsb2JfY2hhbmdlZCA9IHRydWU7DQoJCQkJCSAgICAgIH0NCgkJCQkJICAgICAgLy8gU2luY2UgSSBjYW4ndCBiZSBzdXJlIHRoYXQgdGhlIGd1ZXNzZWQgbWVkaWEgdHlwZSB3aWxsIHRyaWdnZXIgYSBkb3dubG9hZA0KCQkJCQkgICAgICAvLyBpbiBXZWJLaXQsIEkgYXBwZW5kIC5kb3dubG9hZCB0byB0aGUgZmlsZW5hbWUuDQoJCQkJCSAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ0MA0KCQkJCQkgICAgICBpZiAod2Via2l0X3JlcV9mcyAmJiBuYW1lICE9PSAiZG93bmxvYWQiKSB7DQoJCQkJCSAgICAgICAgICBuYW1lICs9ICIuZG93bmxvYWQiOw0KCQkJCQkgICAgICB9DQoJCQkJCSAgICAgIGlmICh0eXBlID09PSBmb3JjZV9zYXZlYWJsZV90eXBlIHx8IHdlYmtpdF9yZXFfZnMpIHsNCgkJCQkJICAgICAgICAgIHRhcmdldF92aWV3ID0gdmlldzsNCgkJCQkJICAgICAgfQ0KCQkJCQkgICAgICBpZiAoIXJlcV9mcykgew0KCQkJCQkgICAgICAgICAgZnNfZXJyb3IoKTsNCgkJCQkJICAgICAgICAgIHJldHVybjsNCgkJCQkJICAgICAgfQ0KCQkJCQkgICAgICBmc19taW5fc2l6ZSArPSBibG9iLnNpemU7DQoJCQkJCSAgICAgIHJlcV9mcyh2aWV3LlRFTVBPUkFSWSwgZnNfbWluX3NpemUsIGFib3J0YWJsZShmdW5jdGlvbiAoZnMpIHsNCgkJCQkJICAgICAgICAgIGZzLnJvb3QuZ2V0RGlyZWN0b3J5KCJzYXZlZCIsIGNyZWF0ZV9pZl9ub3RfZm91bmQsIGFib3J0YWJsZShmdW5jdGlvbiAoZGlyKSB7DQoJCQkJCSAgICAgICAgICAgICAgdmFyIHNhdmUgPSBmdW5jdGlvbiAoKSB7DQoJCQkJCSAgICAgICAgICAgICAgICAgIGRpci5nZXRGaWxlKG5hbWUsIGNyZWF0ZV9pZl9ub3RfZm91bmQsIGFib3J0YWJsZShmdW5jdGlvbiAoZmlsZSkgew0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgZmlsZS5jcmVhdGVXcml0ZXIoYWJvcnRhYmxlKGZ1bmN0aW9uICh3cml0ZXIpIHsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIub253cml0ZWVuZCA9IGZ1bmN0aW9uIChldmVudCkgew0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdmlldy5sb2NhdGlvbi5ocmVmID0gZmlsZS50b1VSTCgpOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGlvbl9xdWV1ZS5wdXNoKGZpbGUpOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChmaWxlc2F2ZXIsICJ3cml0ZWVuZCIsIGV2ZW50KTsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICB9Ow0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5vbmVycm9yID0gZnVuY3Rpb24gKCkgew0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB3cml0ZXIuZXJyb3I7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5jb2RlICE9PSBlcnJvci5BQk9SVF9FUlIpIHsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX2Vycm9yKCk7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICB9Ow0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIGFib3J0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlclsib24iICsgZXZlbnRdID0gZmlsZXNhdmVyWyJvbiIgKyBldmVudF07DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKGJsb2IpOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzYXZlci5hYm9ydCA9IGZ1bmN0aW9uICgpIHsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFib3J0KCk7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5XUklUSU5HOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgfSksIGZzX2Vycm9yKTsNCgkJCQkJICAgICAgICAgICAgICAgICAgfSksIGZzX2Vycm9yKTsNCgkJCQkJICAgICAgICAgICAgICB9Ow0KCQkJCQkgICAgICAgICAgICAgIGRpci5nZXRGaWxlKG5hbWUsIHsgY3JlYXRlOiBmYWxzZSB9LCBhYm9ydGFibGUoZnVuY3Rpb24gKGZpbGUpIHsNCgkJCQkJICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIGZpbGUgaWYgaXQgYWxyZWFkeSBleGlzdHMNCgkJCQkJICAgICAgICAgICAgICAgICAgZmlsZS5yZW1vdmUoKTsNCgkJCQkJICAgICAgICAgICAgICAgICAgc2F2ZSgpOw0KCQkJCQkgICAgICAgICAgICAgIH0pLCBhYm9ydGFibGUoZnVuY3Rpb24gKGV4KSB7DQoJCQkJCSAgICAgICAgICAgICAgICAgIGlmIChleC5jb2RlID09PSBleC5OT1RfRk9VTkRfRVJSKSB7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICBzYXZlKCk7DQoJCQkJCSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICBmc19lcnJvcigpOw0KCQkJCQkgICAgICAgICAgICAgICAgICB9DQoJCQkJCSAgICAgICAgICAgICAgfSkpOw0KCQkJCQkgICAgICAgICAgfSksIGZzX2Vycm9yKTsNCgkJCQkJICAgICAgfSksIGZzX2Vycm9yKTsNCgkJCQkJICB9DQoJCQkJLCBGU19wcm90byA9IEZpbGVTYXZlci5wcm90b3R5cGUNCgkJCQkJICAsIHNhdmVBcyA9IGZ1bmN0aW9uIChibG9iLCBuYW1lKSB7DQoJCQkJCSAgICAgIHJldHVybiBuZXcgRmlsZVNhdmVyKGJsb2IsIG5hbWUpOw0KCQkJCQkgIH0NCgkJICAgICAgOw0KCQkgICAgICBGU19wcm90by5hYm9ydCA9IGZ1bmN0aW9uICgpIHsNCgkJICAgICAgICAgIHZhciBmaWxlc2F2ZXIgPSB0aGlzOw0KCQkgICAgICAgICAgZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTsNCgkJICAgICAgICAgIGRpc3BhdGNoKGZpbGVzYXZlciwgImFib3J0Iik7DQoJCSAgICAgIH07DQoJCSAgICAgIEZTX3Byb3RvLnJlYWR5U3RhdGUgPSBGU19wcm90by5JTklUID0gMDsNCgkJICAgICAgRlNfcHJvdG8uV1JJVElORyA9IDE7DQoJCSAgICAgIEZTX3Byb3RvLkRPTkUgPSAyOw0KDQoJCSAgICAgIEZTX3Byb3RvLmVycm9yID0NCgkJCUZTX3Byb3RvLm9ud3JpdGVzdGFydCA9DQoJCQlGU19wcm90by5vbnByb2dyZXNzID0NCgkJCUZTX3Byb3RvLm9ud3JpdGUgPQ0KCQkJRlNfcHJvdG8ub25hYm9ydCA9DQoJCQlGU19wcm90by5vbmVycm9yID0NCgkJCUZTX3Byb3RvLm9ud3JpdGVlbmQgPQ0KCQkJCW51bGw7DQoJCSAgICAgIC8qIENVU1RPTSBDT0RFIFJFUExBQ0UgU1RBUlQgKi8NCgkJICAgICAgaWYgKHZpZXcuYWRkRXZlbnRMaXN0ZW5lcikgew0KCQkgICAgICAgICAgdmlldy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLCBwcm9jZXNzX2RlbGV0aW9uX3F1ZXVlLCBmYWxzZSk7DQoJCSAgICAgIH0gZWxzZSB7DQoJCSAgICAgICAgICB2aWV3LmF0dGFjaEV2ZW50KCJ1bmxvYWQiLCBwcm9jZXNzX2RlbGV0aW9uX3F1ZXVlKTsNCgkJICAgICAgfQ0KCQkgICAgICAvLyB2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIHByb2Nlc3NfZGVsZXRpb25fcXVldWUsIGZhbHNlKTsNCgkJICAgICAgLyogQ1VTVE9NIENPREUgUkVQTEFDRSBFTkQgKi8NCgkJICAgICAgcmV0dXJuIHNhdmVBczsNCgkJICB9KHRoaXMuc2VsZiB8fCB0aGlzLndpbmRvdyB8fCB0aGlzLmNvbnRlbnQpKTsNCiAgICAvLyBgc2VsZmAgaXMgdW5kZWZpbmVkIGluIEZpcmVmb3ggZm9yIEFuZHJvaWQgY29udGVudCBzY3JpcHQgY29udGV4dA0KICAgIC8vIHdoaWxlIGB0aGlzYCBpcyBuc0lDb250ZW50RnJhbWVNZXNzYWdlTWFuYWdlcg0KICAgIC8vIHdpdGggYW4gYXR0cmlidXRlIGBjb250ZW50YCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB3aW5kb3cNCn0oalF1ZXJ5KSk7DQoNCmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykgbW9kdWxlLmV4cG9ydHMgPSBzYXZlQXM7DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQp2YXIgYXR0YWNobWVudHNEYXRhQXJyYXkgPSBuZXcgT2JqZWN0KCk7DQp2YXIgZmlsbGVyVXJpID0gImh0dHA6Ly9sb2NhbGhvc3QvZUdPLkZpbGxlci5XUy9GaWxsZXJTZXJ2aWNlLnN2Yy9yZXN0LyI7DQoNCmZ1bmN0aW9uIEdldERhdGEoYWNjZXB0RW1wdHlGb3JtKSB7DQoNCiAgICBpZiAoYWNjZXB0RW1wdHlGb3JtID09IHVuZGVmaW5lZCkgew0KICAgICAgICBhY2NlcHRFbXB0eUZvcm0gPSBmYWxzZTsNCiAgICB9IA0KDQogICAgdmFyIGZvcm1JZCA9IEdldEZvcm1JZCgpOw0KICAgIHZhciB4bWxucyA9IEdldE1ldGFkYXRhTmFtZXNwYWNlKCk7DQogICAgdmFyIHhtbCA9ICc8JyArIGZvcm1JZCArIHhtbG5zICsgJz4nOw0KICAgIHZhciBoYXNNZXRhZGF0YSA9ICQoIiNtdGRfZm9ybU1ldGFEYXRhIikubGVuZ3RoID4gMDsNCiAgICBmdW5jdGlvbiBwcm9jZXNzSHRtbCgpIHsNCiAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpOw0KICAgICAgICB2YXIgaXNlbXB0eSA9ICdpc2VtcHR5JzsNCg0KICAgICAgICBpZiAoIWFjY2VwdEVtcHR5Rm9ybSAmJiBlbGVtZW50LmF0dHIoaXNlbXB0eSkgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50LmF0dHIoaXNlbXB0eSkgPT0gInRydWUiKQ0KICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgIHZhciBuYW1lID0gJ25hbWUnOw0KICAgICAgICB2YXIgbGF5b3V0Um93ID0gJ2xheW91dFJvdyc7DQogICAgICAgIHZhciBmaXJzdElucHV0Ow0KICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcyhsYXlvdXRSb3cpKSB7DQogICAgICAgICAgICBmaXJzdElucHV0ID0gZWxlbWVudC5jaGlsZHJlbigiaW5wdXQ6Zmlyc3QiKTsNCiAgICAgICAgICAgIGlmIChmaXJzdElucHV0LmF0dHIobmFtZSkgIT0gJ0F0dGFjaG1lbnRzJykgew0KICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdoaWRkZW5TZWN0aW9uJykpIHsNCiAgICAgICAgICAgICAgICAgICAgeG1sICs9ICc8JyArIGRpc2FibGVWYWxpZGF0b3JQcmVmaXggKyBmaXJzdElucHV0LmF0dHIobmFtZSkgKyAnPic7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgeG1sICs9ICc8JyArIGZpcnN0SW5wdXQuYXR0cihuYW1lKSArICc+JzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZWxlbWVudC5pcygnOmlucHV0JykpIHsNCiAgICAgICAgICAgIGlmIChlbGVtZW50LmlzKCc6ZmlsZScpIHx8IGVsZW1lbnQuaXMoJzpidXR0b24nKSB8fCBlbGVtZW50LmF0dHIoJ0xvb2t1cERldGFpbEluZm8nKSA9PSAidHJ1ZSIpDQogICAgICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnQoKS5oYXNDbGFzcyhsYXlvdXRSb3cpKQ0KICAgICAgICAgICAgICAgIHJldHVybjsNCg0KICAgICAgICAgICAgdmFyIGF0dHIgPSBlbGVtZW50LmF0dHIobmFtZSk7DQogICAgICAgICAgICBpZiAoYXR0ciAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXR0ci5pbmRleE9mKHNpZ24pOw0KICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyLnN1YnN0cigwLCBpbmRleCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHZhciBjaGVja2VkID0gJzpjaGVja2VkJzsNCiAgICAgICAgICAgICAgICB2YXIgdmFsOw0KICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlzKCc6cmFkaW8nKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pcyhjaGVja2VkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsZWFuTmFtZSA9IEdldFZhbHVlV2l0aG91dEluY3JlbWVudGFsKGF0dHIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB4bWwgKz0gJzwnICsgY2xlYW5OYW1lICsgJz4nICsgZWxlbWVudC52YWwoKSArICc8LycgKyBjbGVhbk5hbWUgKyAnPic7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXMoJzpjaGVja2JveCcpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlzKGNoZWNrZWQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc01ldGFkYXRhKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sICs9ICc8JyArIGF0dHIgKyAnPicgKyAoKGVsZW1lbnQuaGFzQ2xhc3MoImNoZWNrQm94IikpID8gMSA6IGVsZW1lbnQudmFsKCkpICsgJzwvJyArIGF0dHIgKyAnPic7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCArPSAnPCcgKyBhdHRyICsgJz4nICsgKChlbGVtZW50Lmhhc0NsYXNzKCJjaGVja0JveCIpICYmIGVsZW1lbnQuaGFzQ2xhc3MoInhzZF9ib29sZWFuIikpID8gMSA6IGVsZW1lbnQudmFsKCkpICsgJzwvJyArIGF0dHIgKyAnPic7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygiY2hlY2tCb3giKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTWV0YWRhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sICs9ICc8JyArIGF0dHIgKyAnPicgKyAwICsgJzwvJyArIGF0dHIgKyAnPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoInhzZF9ib29sZWFuIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCArPSAnPCcgKyBhdHRyICsgJz4nICsgMCArICc8LycgKyBhdHRyICsgJz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmF0dHIoIm11bHRpcGxlIikpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFsID0gZWxlbWVudC52YWwoKSA9PT0gbnVsbCA/ICIiIDogZWxlbWVudC52YWwoKTsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB2YWwubGVuZ3RoOyBpIDwgajsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB4bWwgKz0gJzwnICsgYXR0ciArICc+JyArIEh0bWxFbmNvZGUodmFsW2ldKSArICc8LycgKyBhdHRyICsgJz4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdmFsID0gZWxlbWVudC52YWwoKSA9PT0gbnVsbCA/ICIiIDogZWxlbWVudC52YWwoKTsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygieHNkX2RlY2ltYWwiKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCcsJywgJy4nKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNDbGFzcygieHNkX2RhdGUiKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHhtbEhlbHBlci50b1htbERhdGUodmFsKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNDbGFzcygieHNkX3RpbWUiKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHhtbEhlbHBlci50b1htbFRpbWUodmFsKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNDbGFzcygieHNkX2RhdGVUaW1lIikpDQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB4bWxIZWxwZXIudG9YbWxEYXRlVGltZSh2YWwpOw0KDQogICAgICAgICAgICAgICAgICAgIHhtbCArPSAnPCcgKyBhdHRyICsgJz4nICsgSHRtbEVuY29kZSh2YWwpICsgJzwvJyArIGF0dHIgKyAnPic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGFjY2VwdEVtcHR5Rm9ybSkNCiAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4oKS5lYWNoKHByb2Nlc3NIdG1sKTsNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBpZiAoZWxlbWVudC5hdHRyKGlzZW1wdHkpID09PSB1bmRlZmluZWQgfHwgZWxlbWVudC5hdHRyKGlzZW1wdHkpID09ICJmYWxzZSIpDQogICAgICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbigpLmVhY2gocHJvY2Vzc0h0bWwpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MobGF5b3V0Um93KSkgew0KICAgICAgICAgICAgZmlyc3RJbnB1dCA9IGVsZW1lbnQuY2hpbGRyZW4oImlucHV0OmZpcnN0Iik7DQogICAgICAgICAgICBpZiAoZmlyc3RJbnB1dC5hdHRyKG5hbWUpICE9ICdBdHRhY2htZW50cycpIHsNCiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnaGlkZGVuU2VjdGlvbicpKSB7DQogICAgICAgICAgICAgICAgICAgIHhtbCArPSAnPC8nICsgZGlzYWJsZVZhbGlkYXRvclByZWZpeCArIGZpcnN0SW5wdXQuYXR0cihuYW1lKSArICc+JzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB4bWwgKz0gJzwvJyArIGZpcnN0SW5wdXQuYXR0cihuYW1lKSArICc+JzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAkKCcjbWFpbicpLmNoaWxkcmVuKCdkaXYnKS5lYWNoKHByb2Nlc3NIdG1sKTsNCg0KICAgIHhtbCArPSAnPC8nICsgZm9ybUlkICsgJz4nOw0KDQogICAgcmV0dXJuIHhtbDsNCn0NCg0KdmFyIHhtbEhlbHBlciA9IChmdW5jdGlvbiAoaGVscGVyKSB7DQogICAgdmFyIHRvRGF0ZVJlZ2V4ID0gL14oWzAtOV17MSwyfSlcLihbMC05XXsxLDJ9KVwuKFswLTldezEsNH0pJC9nLA0KCSAgICBmcm9tRGF0ZVJlZ2V4ID0gL14oWzAtOV17MSw0fSlcLShbMC05XXsxLDJ9KVwtKFswLTldezEsMn0pJC9nLA0KICAgICAgICB0b1RpbWVSZWdleCA9IC9eKFswLTldezEsMn0pXDooWzAtOV17MSwyfSkkL2csDQogICAgICAgIGZyb21UaW1lUmVnZXggPSAvXihbMC05XXsxLDJ9KVw6KFswLTldezEsMn0pXDooWzAtOV17MSwyfSkkL2csDQogICAgICAgIHRvRGF0ZVRpbWVSZWdleCA9IC9eKFswLTldezEsMn0pXC4oWzAtOV17MSwyfSlcLihbMC05XXsxLDR9KSAoWzAtOV17MSwyfSlcOihbMC05XXsxLDJ9KSQvZywNCgkgICAgZnJvbURhdGVUaW1lUmVnZXggPSAvXihbMC05XXsxLDR9KVwtKFswLTldezEsMn0pXC0oWzAtOV17MSwyfSlUKFswLTldezEsMn0pXDooWzAtOV17MSwyfSlcOihbMC05XXsxLDJ9KSQvZzsNCg0KICAgIGhlbHBlci50b1htbERhdGUgPSBmdW5jdGlvbiAodmFsdWUpIHsNCiAgICAgICAgaWYgKHZhbHVlKSB7DQogICAgICAgICAgICB0b0RhdGVSZWdleC5sYXN0SW5kZXggPSAwOw0KICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSB0b0RhdGVSZWdleC5leGVjKCQudHJpbSh2YWx1ZSkpOw0KICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDQpIHsNCiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1hdGNoZXNbM10gKyAnLScgKyBtYXRjaGVzWzJdICsgJy0nICsgbWF0Y2hlc1sxXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB2YWx1ZSB8fCAnJzsNCiAgICB9Ow0KDQogICAgaGVscGVyLmZyb21YbWxEYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7DQogICAgICAgIGlmICh2YWx1ZSkgew0KICAgICAgICAgICAgZnJvbURhdGVSZWdleC5sYXN0SW5kZXggPSAwOw0KICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBmcm9tRGF0ZVJlZ2V4LmV4ZWMoJC50cmltKHZhbHVlKSk7DQogICAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gNCkgew0KICAgICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2hlc1szXSArICcuJyArIG1hdGNoZXNbMl0gKyAnLicgKyBtYXRjaGVzWzFdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHZhbHVlIHx8ICcnOw0KICAgIH07DQoNCiAgICBoZWxwZXIudG9YbWxUaW1lID0gZnVuY3Rpb24gKHZhbHVlKSB7DQogICAgICAgIGlmICh2YWx1ZSkgew0KICAgICAgICAgICAgdG9UaW1lUmVnZXgubGFzdEluZGV4ID0gMDsNCiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gdG9UaW1lUmVnZXguZXhlYygkLnRyaW0odmFsdWUpKTsNCiAgICAgICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAzKSB7DQogICAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaGVzWzFdICsgJzonICsgbWF0Y2hlc1syXSArICc6MDAnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHZhbHVlIHx8ICcnOw0KICAgIH07DQoNCiAgICBoZWxwZXIuZnJvbVhtbFRpbWUgPSBmdW5jdGlvbiAodmFsdWUpIHsNCiAgICAgICAgaWYgKHZhbHVlKSB7DQogICAgICAgICAgICBmcm9tVGltZVJlZ2V4Lmxhc3RJbmRleCA9IDA7DQogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGZyb21UaW1lUmVnZXguZXhlYygkLnRyaW0odmFsdWUpKTsNCiAgICAgICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSA0KSB7DQogICAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaGVzWzFdICsgJzonICsgbWF0Y2hlc1syXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB2YWx1ZSB8fCAnJzsNCiAgICB9Ow0KDQogICAgaGVscGVyLnRvWG1sRGF0ZVRpbWUgPSBmdW5jdGlvbiAodmFsdWUpIHsNCiAgICAgICAgaWYgKHZhbHVlKSB7DQogICAgICAgICAgICB0b0RhdGVUaW1lUmVnZXgubGFzdEluZGV4ID0gMDsNCiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gdG9EYXRlVGltZVJlZ2V4LmV4ZWMoJC50cmltKHZhbHVlKSk7DQogICAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gNikgew0KICAgICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2hlc1szXSArICctJyArIG1hdGNoZXNbMl0gKyAnLScgKyBtYXRjaGVzWzFdICsgJ1QnICsgbWF0Y2hlc1s0XSArICc6JyArIG1hdGNoZXNbNV0gKyAnOjAwJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB2YWx1ZSB8fCAnJzsNCiAgICB9Ow0KDQogICAgaGVscGVyLmZyb21YbWxEYXRlVGltZSA9IGZ1bmN0aW9uICh2YWx1ZSkgew0KICAgICAgICBpZiAodmFsdWUpIHsNCiAgICAgICAgICAgIGZyb21EYXRlVGltZVJlZ2V4Lmxhc3RJbmRleCA9IDA7DQogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGZyb21EYXRlVGltZVJlZ2V4LmV4ZWMoJC50cmltKHZhbHVlKSk7DQogICAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gNykgew0KICAgICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2hlc1szXSArICcuJyArIG1hdGNoZXNbMl0gKyAnLicgKyBtYXRjaGVzWzFdICsgJyAnICsgbWF0Y2hlc1s0XSArICc6JyArIG1hdGNoZXNbNV07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdmFsdWUgfHwgJyc7DQogICAgfTsNCg0KICAgIGhlbHBlci5mcm9tWG1sQW55VVJJID0gZnVuY3Rpb24gKHZhbHVlKSB7DQogICAgICAgIGlmICh2YWx1ZSkgew0KICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9tYWlsdG86L2dpLCAiIik7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdmFsdWUgfHwgJyc7DQogICAgfTsNCg0KICAgIHJldHVybiBoZWxwZXI7DQp9KHt9KSk7DQoNCmZ1bmN0aW9uIEdldE1ldGFkYXRhTmFtZXNwYWNlKCkgew0KICAgIHZhciB4bWxucyA9ICcnOw0KICAgIHZhciBtdGROYW1lc3BhY2UgPSAkKCdmb3JtJykuZmluZCgiI210ZF9uYW1lc3BhY2UiKVswXTsNCiAgICBpZiAobXRkTmFtZXNwYWNlICE9IHVuZGVmaW5lZCkgew0KICAgICAgICBtdGROYW1lc3BhY2UgPSBtdGROYW1lc3BhY2UuaW5uZXJIVE1MOw0KICAgICAgICBpZiAobXRkTmFtZXNwYWNlICE9IHVuZGVmaW5lZCAmJiBtdGROYW1lc3BhY2UgIT0geG1sbnMpIHsNCiAgICAgICAgICAgIHhtbG5zID0gIiB4bWxucz0nIiArIG10ZE5hbWVzcGFjZSArICInIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4geG1sbnM7DQp9DQoNCmZ1bmN0aW9uIEdldFZhbHVlV2l0aG91dEluY3JlbWVudGFsKHZhbHVlKSB7DQogICAgdmFyIHJlZ0V4ID0gbmV3IFJlZ0V4cChyZXBlYXRpbmdQb3N0Zml4ICsgIlxcZCskIik7DQogICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmVnRXgsICcnKTsNCn0NCg0KZnVuY3Rpb24gU2hvd0RhdGEoKSB7DQogICAgdmFyIHhtbCA9IEdldERhdGEoKTsNCiAgICBhbGVydChkZWNvZGVVUklDb21wb25lbnQoeG1sKSk7DQp9DQoNCmZ1bmN0aW9uIFNob3dEYXRhV2l0aEF0dGFjaG1lbnRzKCkgew0KICAgIHZhciB4bWwgPSBHZXREYXRhKCk7DQogICAgdmFyIGZvcm1JZCA9IEdldEZvcm1JZCgpOw0KICAgIHZhciB4bWxXaXRoQXR0YWNobWVudHMgPSB4bWwucmVwbGFjZSgnPC8nICsgZm9ybUlkICsgJz4nLCAnJyk7DQoNCiAgICB2YXIgYXR0YWNobWVudHNEYXRhID0gJyc7DQogICAgZm9yICh2YXIga2V5IGluIGF0dGFjaG1lbnRzRGF0YUFycmF5KSB7DQogICAgICAgIGF0dGFjaG1lbnRzRGF0YSA9IGF0dGFjaG1lbnRzRGF0YSArIGF0dGFjaG1lbnRzRGF0YUFycmF5W2tleV07DQogICAgfQ0KDQogICAgeG1sV2l0aEF0dGFjaG1lbnRzICs9ICc8QXR0YWNobWVudHM+JyArIGF0dGFjaG1lbnRzRGF0YSArICc8XC9BdHRhY2htZW50cz4nOw0KICAgIHhtbFdpdGhBdHRhY2htZW50cyArPSAnPC8nICsgZm9ybUlkICsgJz4nOw0KDQogICAgdmFyIHBhcmVudFdpbmRvdyA9IHdpbmRvdy5vcGVuZXI7DQogICAgcGFyZW50V2luZG93LnNldEZpbmFsWG1sKHhtbFdpdGhBdHRhY2htZW50cyk7DQp9DQoNCmZ1bmN0aW9uIFNhdmVYbWwoKSB7DQogICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oR2V0Rm9ybVN0b3JhZ2VLZXkoKSwgR2V0RGF0YSgpKTsNCiAgICB2YXIgbWVzc2FnZSA9ICcnOw0KDQogICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICBtZXNzYWdlID0gIkZvcm0gIiArICInIiArIEdldEZvcm1TdG9yYWdlS2V5KCkucmVwbGFjZSgnZWdvXycsICcnKSArICInIiArICIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHN0b3JlZCBpbiB0aGUgcmVwb3NpdG9yeSI7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgIG1lc3NhZ2UgPSAiRm9ybXVsYXIgIiArICInIiArIEdldEZvcm1TdG9yYWdlS2V5KCkucmVwbGFjZSgnZWdvXycsICcnKSArICInIiArICIgYm9sIHVzcGVzbmUgdWxvemVueSBkbyBsb2thbG5laG8gdWxvemlza2EiOw0KICAgIH0NCg0KICAgIGFsZXJ0KG1lc3NhZ2UpOw0KDQogICAgU2hvd1NhdmVkRm9ybXMoKTsNCn0NCg0KZnVuY3Rpb24gU2hvd1NhdmVkRm9ybXMoKSB7DQogICAgdmFyIHNhdmVkRm9ybXMgPSAiPHNwYW4gY2xhc3M9J2ZpZWxkQ29udGVudCc+IjsNCiAgICB2YXIgc2F2ZWRGb3Jtc0NvdW50ID0gMDsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jYWxTdG9yYWdlLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGlmIChsb2NhbFN0b3JhZ2Uua2V5KGkpID09IEdldEZvcm1TdG9yYWdlS2V5KCkpIHsNCiAgICAgICAgICAgIHNhdmVkRm9ybXMgKz0gIjxzcGFuPiIgKyBsb2NhbFN0b3JhZ2Uua2V5KGkpLnN1YnN0cig0KSArICI8XC9zcGFuPjxici8+IjsNCiAgICAgICAgICAgIHNhdmVkRm9ybXNDb3VudCsrOw0KICAgICAgICB9DQogICAgfQ0KICAgIHNhdmVkRm9ybXMgKz0gIjxcL3NwYW4+IjsNCg0KICAgICQoJyNsY2VsbFNhdmVkRm9ybXMnKS5odG1sKHNhdmVkRm9ybXMpOw0KICAgIHZhciBlbGVtZW50ID0gJCgiI3NhdmVkRm9ybXNDb250YWluZXIiKTsNCiAgICBpZiAoc2F2ZWRGb3Jtc0NvdW50ID4gMCkgew0KICAgICAgICBlbGVtZW50LnNob3coKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIGVsZW1lbnQuaGlkZSgpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gUHJpbnRGb3JtKCkgew0KICAgIHdpbmRvdy5wcmludCgpOw0KfQ0KDQpmdW5jdGlvbiBHZXRGb3JtSWQoKSB7DQogICAgcmV0dXJuICQoImZvcm06aGFzKCNtYWluKSIpLmF0dHIoIklEIik7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vIE1MIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KZnVuY3Rpb24gSXNFcnJvcigpIHsNCiAgICB2YXIgZXJyb3JzID0gJCgnLmVycm9yJyk7DQoNCiAgICBmb3IgKGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGlmICgkKGVycm9yc1tpXSkuaXMoJzp2aXNpYmxlJykpDQogICAgICAgICAgICByZXR1cm4gdHJ1ZQ0KICAgIH0NCg0KICAgIHJldHVybiBmYWxzZTsNCn0NCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCmZ1bmN0aW9uIFZhbGlkYXRlRm9ybSgpIHsNCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLyBNTCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCiAgICBlcnJvclZhbGlkYXRlRm9jdXNPdXQgPSBmYWxzZTsNCg0KICAgIGlmICgkKCcjJyArIEdldEZvcm1JZCgpKS52YWxpZCgpKSB7DQogICAgICAgIC8qc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCJDaGVjayB0aGUgZm9ybSB3YXMgc3VjY2Vzc2Z1bC4iKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgZGVmYXVsdDogLy8gc2sgYSBkZWZhdWx0DQogICAgICAgICAgICAgICAgYWxlcnQoIktvbnRyb2xhIGZvcm11bMOhcmEgcHJlYmVobGEgw7pzcGXFoW5lLiIpOw0KICAgICAgICB9Ki8NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAgZWxzZSBpZiAoSXNFcnJvcigpKSB7DQogICAgICAgIC8qc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCJUaGUgZm9ybSBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBlcnJvcnMuIik7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIGFsZXJ0KCJGb3JtdWzDoXIgb2JzYWh1amUgdmFsaWRhxI1uw6kgY2h5YnkuIik7DQogICAgICAgIH0qLw0KDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIC8qc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCJGb3JtdWzDoXIgb2JzYWh1amUgbG9naWNrw6kgY2h5YnkuIE5hb3phaiBjaGNldGUgcG9rcmHEjW92YcWlPyIpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICBhbGVydCgiVGhlIGZvcm0gY29udGFpbnMgYSBsb2dpYyBlcnJvci4gQXJlIHlvdSBzdXJlPyIpOw0KICAgICAgICB9Ki8NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KICAgIC8vcmV0dXJuICQoJyMnICsgR2V0Rm9ybUlkKCkpLnZhbGlkKCk7DQp9DQoNCmZ1bmN0aW9uIENsb3NlRm9ybShmaWxsZXJVcmkpIHsNCiAgICB2YXIgeG1sID0gR2V0RGF0YSgpOw0KICAgIHZhciBwYXJlbnRXaW5kb3cgPSB3aW5kb3cub3BlbmVyOw0KDQogICAgdHJ5IHsNCiAgICAgICAgdmFyIGZvcm1JZCA9IHBhcmVudFdpbmRvdy5nZXRGb3JtSWQoKTsNCiAgICAgICAgdmFyIGVEb2MgPSBUcmFuc2xhdGVOYXRpdmVUb0VEb2MoeG1sLCBmaWxsZXJVcmkgKyAiVHJhbnNsYXRlTmF0aXZlVG9FRG9jIiwgZm9ybUlkKTsNCg0KICAgICAgICBwYXJlbnRXaW5kb3cuc2V0WG1sRGF0YShlRG9jKTsNCg0KICAgICAgICB3aW5kb3cuY2xvc2UoKTsNCiAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCd3b3JrZGVzayB3YXMgY2xvc2VkJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIGFsZXJ0KCd3b3JrZGVzayBib2wgdXphdnJldMO9Jyk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIENhbmNlbEZvcm0oKSB7DQogICAgd2luZG93LmNsb3NlKCk7DQp9DQoNCmZ1bmN0aW9uIFNhdmVBbmRDbG9zZUZvcm0oZmlsbGVyVXJpKSB7DQogICAgdmFyIGZvcm0gPSAkKCcjJyArIEdldEZvcm1JZCgpKTsNCiAgICB2YXIgJHZhbGlkYXRvciA9IGZvcm0udmFsaWRhdGUoKTsNCiAgICB2YXIgY29uZmlybVRleHQgPSAnJzsNCg0KICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgY29uZmlybVRleHQgPSAiVGhlIGZvcm0gY29udGFpbnMgZXJyb3JzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2F2ZT8iOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgZGVmYXVsdDogLy8gc2sgYSBkZWZhdWx0DQogICAgICAgICAgICBjb25maXJtVGV4dCA9ICJGb3JtdWzDoXIgb2JzYWh1amUgY2h5YnkuIE5hb3phaiBobyBjaGNldGUgdWxvxb5pxaU/IjsNCiAgICB9DQoNCiAgICBWYWxpZGF0ZUZvcm0oZm9ybSk7DQoNCiAgICBpZiAoJHZhbGlkYXRvci5udW1iZXJPZkludmFsaWRzKCkgPiAwKSB7DQogICAgICAgIGlmIChjb25maXJtKGNvbmZpcm1UZXh0KSkgew0KICAgICAgICAgICAgQ2xvc2VGb3JtKGZpbGxlclVyaSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIENsb3NlRm9ybShmaWxsZXJVcmkpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gR2V0QXR0YWNobWVudHMoKSB7DQogICAgdmFyIGZpbGVzID0gJCgnaW5wdXRbdHlwZT0iZmlsZSJdJylbMF0uZmlsZXM7DQogICAgdmFyIGF0dGFjaGVtZW50cyA9ICIiOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgYXR0YWNoZW1lbnRzICs9IGZpbGVzW2ldLm5hbWUgKyAiPGJyLz4iOw0KICAgIH0NCg0KICAgIHJldHVybiBhdHRhY2hlbWVudHM7DQp9DQoNCmZ1bmN0aW9uIENsZWFyRm9ybShlbGVtZW50KSB7DQogICAgJChlbGVtZW50KS5maW5kKCc6aW5wdXQnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsNCiAgICAgICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzoNCiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdC1tdWx0aXBsZSc6DQogICAgICAgICAgICBjYXNlICdzZWxlY3Qtb25lJzoNCiAgICAgICAgICAgIGNhc2UgJ3RleHQnOg0KICAgICAgICAgICAgY2FzZSAndGV4dGFyZWEnOg0KICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzoNCiAgICAgICAgICAgIGNhc2UgJ3JhZGlvJzoNCiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBHZXRGb3JtU3RvcmFnZUtleSgpIHsNCiAgICB2YXIgZm9ybUlkID0gR2V0Rm9ybUlkKCk7DQogICAgcmV0dXJuICdlZ29fJyArIGZvcm1JZDsNCn0NCg0KZnVuY3Rpb24gSGFuZGxlRmlsZVNlbGVjdChldnQpIHsNCiAgICB2YXIgZmlsZXMgPSBldnQudGFyZ2V0LmZpbGVzOw0KDQogICAgZm9yICh2YXIgaSA9IDAsIGY7IGYgPSBmaWxlc1tpXTsgaSsrKSB7DQogICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOw0KDQogICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZnVuY3Rpb24gKHRoZUZpbGUpIHsNCiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzRGF0YUFycmF5W2V2dC50YXJnZXQuaWRdID0gJzxBdHRhY2htZW50PjxOYW1lPicgKyB0aGVGaWxlLm5hbWUgKyAnPFwvTmFtZT48VHlwZT4nICsgdGhlRmlsZS50eXBlDQogICAgICAgICAgICAgICAgICAgICsgJzxcL1R5cGU+PFNpemU+JyArIHRoZUZpbGUuc2l6ZSArICc8XC9TaXplPicgKyAnPENvbnRlbnQ+JyArIGUudGFyZ2V0LnJlc3VsdCArICc8XC9Db250ZW50PjxcL0F0dGFjaG1lbnQ+JzsNCiAgICAgICAgICAgIH07DQogICAgICAgIH0pKGZpbGVzWzBdKTsNCg0KICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlc1swXSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBXcmFwWG1sRGF0YSh4bWwpIHsNCiAgICByZXR1cm4gIjxGb3JtRGF0YVhtbD48WG1sRGF0YT4iICsgeG1sICsgIjxcL1htbERhdGE+PFwvRm9ybURhdGFYbWw+IjsNCn0NCg0KZnVuY3Rpb24gVHJhbnNsYXRlTmF0aXZlVG9FRG9jKHhtbCwgdXJsLCBmb3JtSWQpIHsNCiAgICB2YXIgZm9ybURhdGFYbWwgPSBXcmFwWG1sRGF0YSh4bWwpOw0KICAgIHZhciBmb3JtRGF0YSA9ICd7IkZvcm1JZCI6ICInICsgZm9ybUlkICsgJyIsICJGb3JtRGF0YVhtbCI6ICInICsgZm9ybURhdGFYbWwgKyAnIn0nOw0KDQogICAgdmFyIGNvbnRlbnRUeXBlID0gImFwcGxpY2F0aW9uL2pzb24iOw0KDQogICAgdmFyIGVEb2MgPSAiIjsNCiAgICAkLmFqYXgoew0KICAgICAgICB0eXBlOiAnUE9TVCcsDQogICAgICAgIHVybDogdXJsLA0KICAgICAgICBkYXRhOiBmb3JtRGF0YSwNCiAgICAgICAgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlLA0KICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7DQogICAgICAgICAgICBlRG9jID0gcmVzdWx0Ow0KICAgICAgICB9LA0KICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3VsdCkgew0KICAgICAgICAgICAgYWxlcnQocmVzdWx0KTsNCiAgICAgICAgfSwNCiAgICAgICAgYXN5bmM6IGZhbHNlDQogICAgfSk7DQoNCiAgICByZXR1cm4gZURvYy5Db250ZW50Ow0KfQ0KDQpmdW5jdGlvbiBWYWxpZGF0ZUZvcm1XaXRoWHNkKGZpbGxlclVyaSkgew0KICAgIHZhciB4bWwgPSBHZXREYXRhKCk7DQogICAgdmFyIHBhcmVudFdpbmRvdyA9IHdpbmRvdy5vcGVuZXI7DQoNCiAgICB0cnkgew0KICAgICAgICB2YXIgZm9ybUlkID0gcGFyZW50V2luZG93LmdldEZvcm1JZCgpOw0KICAgICAgICB2YXIgdmFsUmVzID0gQ2FsbFZhbGlkYXRlRm9ybVdpdGhYc2QoeG1sLCBmaWxsZXJVcmkgKyAiVmFsaWRhdGVGb3JtV2l0aFhzZCIsIGZvcm1JZCk7DQoNCiAgICAgICAgU2hvd1ZhbGlkYXRpb25SZXN1bHQodmFsUmVzLCAieHNkVmFsaWRhdGlvbiIpOw0KDQogICAgfSBjYXRjaCAoZXJyKSB7DQogICAgICAgIGFsZXJ0KGVycik7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBWYWxpZGF0ZUZvcm1XaXRoU2VydmVyKGZpbGxlclVyaSkgew0KICAgIHZhciB4bWwgPSBHZXREYXRhKCk7DQogICAgdmFyIHBhcmVudFdpbmRvdyA9IHdpbmRvdy5vcGVuZXI7DQoNCiAgICB0cnkgew0KICAgICAgICB2YXIgZm9ybUlkID0gcGFyZW50V2luZG93LmdldEZvcm1JZCgpOw0KICAgICAgICB2YXIgdmFsUmVzID0gQ2FsbFZhbGlkYXRlRm9ybVdpdGhTZXJ2ZXIoeG1sLCBmaWxsZXJVcmkgKyAiVmFsaWRhdGVGb3JtIiwgZm9ybUlkKTsNCg0KICAgICAgICBTaG93VmFsaWRhdGlvblJlc3VsdCh2YWxSZXMsICJzZXJ2ZXJWYWxpZGF0aW9uIik7DQoNCiAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgYWxlcnQoZXJyKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFNob3dWYWxpZGF0aW9uUmVzdWx0KHJlc3VsdCwgdmFsaWRhdGlvblR5cGUpIHsNCiAgICB2YXIgdmFsaWQgPSB0cnVlOw0KICAgIHZhciByZXN1bHRYTUwgPSAkLnBhcnNlWE1MKHJlc3VsdCksDQogICAgcmVzdWx0WE1MVHJhdmVyc2FibGUgPSAkKHJlc3VsdFhNTCk7DQogICAgdmFyIHJlc3BvbnNlQ29kZSA9IHJlc3VsdFhNTFRyYXZlcnNhYmxlLmZpbmQoInJlc3BvbnNlID4gY29kZSIpLnRleHQoKTsNCiAgICB2YXIgcmVzcG9uc2VFcnJvcnMgPSByZXN1bHRYTUxUcmF2ZXJzYWJsZS5maW5kKCJyZXNwb25zZSA+IGVycm9ycyA+IGVycm9yIik7DQogICAgdmFyIHJlc3BvbnNlWHNsdEVycm9ycyA9IHJlc3VsdFhNTFRyYXZlcnNhYmxlLmZpbmQoInJlc3BvbnNlID4gZXJyb3JzID4geHNsdEVycm9yIik7DQogICAgdmFyIGxvY2FsRXJyb3JzID0gbmV3IEFycmF5KCk7DQogICAgdmFyIG9rID0gIm9rIjsNCiAgICB2YWxpZGF0b3JPYmplY3QucmVzZXRGb3JtKCk7DQoNCiAgICBpZiAocmVzcG9uc2VDb2RlID09IG9rICYmIHJlc3BvbnNlRXJyb3JzLmxlbmd0aCA9PSAwICYmIHJlc3BvbnNlWHNsdEVycm9ycy5sZW5ndGggPT0gMCkgew0KICAgICAgICB2YWxpZGF0b3JPYmplY3QucmVzZXRGb3JtKCk7DQogICAgICAgIHN0YXR1c0RpYWxvZy5oaWRlUHJvZ3Jlc3MoKTsNCg0KICAgICAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgICAgICBjYXNlICdlbic6IHsNCiAgICAgICAgICAgICAgICBzdGF0dXNEaWFsb2cuc2V0TWVzc2FnZSh2YWxpZGF0aW9uVHlwZSA9PT0gInhzZFZhbGlkYXRpb24iID8gIlRoZSBmb3JtIGlzIHZhbGlkIGFnYWluc3QgWFNEIHNjaGVtYS4iIDogIlRoZSBmb3JtIGlzIHZhbGlkLiIpOw0KICAgICAgICAgICAgICAgIHN0YXR1c0RpYWxvZy5zZXRPcHRpb25zKHsgImJ1dHRvbnMiOiB7ICJPayI6IGZ1bmN0aW9uICgpIHsgc3RhdHVzRGlhbG9nLmhpZGVEaWFsb2coKTsgfSB9IH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiB7IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIHN0YXR1c0RpYWxvZy5zZXRNZXNzYWdlKHZhbGlkYXRpb25UeXBlID09PSAieHNkVmFsaWRhdGlvbiIgPyAiRm9ybXVsw6FyIGplIHZhbGlkbsO9IHZvxI1pIFhTRCBzY2jDqW1lLiIgOiAiRm9ybXVsw6FyIGplIHZhbGlkbsO9LiIpOw0KICAgICAgICAgICAgICAgIHN0YXR1c0RpYWxvZy5zZXRPcHRpb25zKHsgImJ1dHRvbnMiOiB7ICJPayI6IGZ1bmN0aW9uICgpIHsgc3RhdHVzRGlhbG9nLmhpZGVEaWFsb2coKTsgfSB9IH0pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICAgICAgICBzdGF0dXNEaWFsb2cuc2hvd0RpYWxvZygpOw0KICAgIH0NCg0KICAgIHZhciB2YWxNc2cgPSBuZXcgT2JqZWN0Ow0KICAgIHJlc3BvbnNlRXJyb3JzLmVhY2goZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7DQogICAgICAgIGlmICghQWRkVmFsaWRhdGlvbk1lc3NhZ2UoaW5kZXgsIGl0ZW0sIHZhbE1zZykpIHsNCiAgICAgICAgICAgIGxvY2FsRXJyb3JzLnB1c2goJChpdGVtKS50ZXh0KCkpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICBpZiAocmVzcG9uc2VDb2RlICE9IG9rIHx8IHJlc3BvbnNlRXJyb3JzLmxlbmd0aCAhPSAwKSB7DQogICAgICAgIHZhbGlkID0gZmFsc2U7DQogICAgICAgIHZhbGlkYXRvck9iamVjdC5zZXR0aW5ncy5vbmZvY3Vzb3V0ID0gZmFsc2U7DQogICAgICAgIHZhbGlkYXRvck9iamVjdC5zaG93RXJyb3JzKHZhbE1zZyk7DQogICAgICAgIHZhbGlkYXRvck9iamVjdC5mb2N1c0ludmFsaWQoKTsNCiAgICB9DQoNCiAgICBpZiAocmVzcG9uc2VDb2RlICE9IG9rIHx8IHJlc3BvbnNlWHNsdEVycm9ycy5sZW5ndGggIT0gMCB8fCBsb2NhbEVycm9ycy5sZW5ndGggIT0gMCkgew0KICAgICAgICB2YWxpZCA9IGZhbHNlOw0KICAgICAgICB2YXIgeHNsdEVycm9yRGl2ID0gJCgiI3hzbHRFcnJvckNvbnRhaW5lciIpOw0KDQogICAgICAgIGlmICgheHNsdEVycm9yRGl2Lmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2Vycm9yc0NvbnRhaW5lckRpdicpLmFmdGVyKCc8ZGl2IGlkPSJ4c2x0RXJyb3JDb250YWluZXIiPjxcL2Rpdj4nKTsNCiAgICAgICAgICAgIHhzbHRFcnJvckRpdiA9ICQoIiN4c2x0RXJyb3JDb250YWluZXIiKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIHhzbHRFcnJvckRpdi5lbXB0eSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmVzcG9uc2VYc2x0RXJyb3JzLmVhY2goZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7DQogICAgICAgICAgICB2YXIgaW5wdXQgPSAkKGl0ZW0pOw0KICAgICAgICAgICAgeHNsdEVycm9yRGl2LmFwcGVuZCgnPGxpPicgKyBpbnB1dC50ZXh0KCkgKyAnPFwvbGk+Jyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jYWxFcnJvcnMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHhzbHRFcnJvckRpdi5hcHBlbmQoJzxsaT4nICsgbG9jYWxFcnJvcnNbaV0gKyAnPFwvbGk+Jyk7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIHZhciB4c2x0RXJyb3JEaXYgPSAkKCcjeHNsdEVycm9yQ29udGFpbmVyJyk7DQogICAgICAgIGlmICh4c2x0RXJyb3JEaXYubGVuZ3RoKSB7DQogICAgICAgICAgICB4c2x0RXJyb3JEaXYucmVtb3ZlKCk7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIHZhbGlkOw0KfQ0KDQpmdW5jdGlvbiBDYWxsVmFsaWRhdGVGb3JtV2l0aFhzZCh4bWwsIHVybCwgZm9ybUlkKSB7DQogICAgdmFyIGZvcm1EYXRhWG1sID0gV3JhcFhtbERhdGEoeG1sKTsNCiAgICB2YXIgZm9ybURhdGEgPSAneyJGb3JtSWQiOiAiJyArIGZvcm1JZCArICciLCAiRm9ybURhdGFYbWwiOiAiJyArIGZvcm1EYXRhWG1sICsgJyJ9JzsNCg0KICAgIHZhciBjb250ZW50VHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIjsNCg0KICAgIHZhciByZXNwb25zZSA9ICIiOw0KICAgICQuYWpheCh7DQogICAgICAgIHR5cGU6ICdQT1NUJywNCiAgICAgICAgdXJsOiB1cmwsDQogICAgICAgIGRhdGE6IGZvcm1EYXRhLA0KICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGUsDQogICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHsNCiAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzdWx0Ow0KICAgICAgICB9LA0KICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3VsdCkgew0KICAgICAgICAgICAgYWxlcnQocmVzdWx0KTsNCiAgICAgICAgfSwNCiAgICAgICAgYXN5bmM6IGZhbHNlDQogICAgfSk7DQoNCiAgICByZXR1cm4gcmVzcG9uc2UuRGV0YWlsczsNCn0NCg0KZnVuY3Rpb24gQ2FsbFZhbGlkYXRlRm9ybVdpdGhTZXJ2ZXIoeG1sLCB1cmwsIGZvcm1JZCkgew0KICAgIHZhciBmb3JtRGF0YVhtbCA9IFdyYXBYbWxEYXRhKHhtbCk7DQogICAgdmFyIGZvcm1EYXRhID0gJ3siRm9ybUlkIjogIicgKyBmb3JtSWQgKyAnIiwgIkZvcm1EYXRhWG1sIjogIicgKyBmb3JtRGF0YVhtbCArICcifSc7DQoNCiAgICB2YXIgY29udGVudFR5cGUgPSAiYXBwbGljYXRpb24vanNvbiI7DQoNCiAgICB2YXIgcmVzcG9uc2UgPSAiIjsNCiAgICAkLmFqYXgoew0KICAgICAgICB0eXBlOiAnUE9TVCcsDQogICAgICAgIHVybDogdXJsLA0KICAgICAgICBkYXRhOiBmb3JtRGF0YSwNCiAgICAgICAgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlLA0KICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7DQogICAgICAgICAgICByZXNwb25zZSA9IHJlc3VsdDsNCiAgICAgICAgfSwNCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXN1bHQpIHsNCiAgICAgICAgICAgIGFsZXJ0KHJlc3VsdCk7DQogICAgICAgIH0sDQogICAgICAgIGFzeW5jOiBmYWxzZQ0KICAgIH0pOw0KDQogICAgcmV0dXJuIHJlc3BvbnNlLkNvbnRlbnQ7DQp9DQoNCmZ1bmN0aW9uIEdldENvbmZpZ3VyYXRpb25WYWx1ZShrZXksIHVybCwgY2FsbGJhY2tOYW1lKSB7DQogICAgdmFyIHBhcmVudFdpbmRvdyA9IHdpbmRvdy5vcGVuZXI7DQogICAgdHJ5IHsNCiAgICAgICAgdmFyIGZvcm1JZCA9IHBhcmVudFdpbmRvdy5nZXRGb3JtSWQoKTsNCiAgICAgICAgdmFyIHZhbHVlcyA9ICJDb25maWd1cmF0aW9uS2V5PSIgKyBrZXkgKyAiJkZvcm1JZD0iICsgZm9ybUlkOw0KICAgICAgICB2YXIgY29udGVudFR5cGUgPSAiYXBwbGljYXRpb24vanNvbiI7DQoNCiAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgIHVybDogdXJsLA0KICAgICAgICAgICAgZGF0YVR5cGU6ICJqc29ucCIsDQogICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGUsDQogICAgICAgICAgICBkYXRhOiB2YWx1ZXMsDQogICAgICAgICAgICBqc29ucENhbGxiYWNrOiBjYWxsYmFja05hbWUsDQogICAgICAgICAgICBqc29ucDogJ2NhbGxiYWNrJw0KICAgICAgICB9KTsNCiAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCd3b3JrZGVzayB3YXMgY2xvc2VkJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIGFsZXJ0KCd3b3JrZGVzayBib2wgdXphdnJldMO9Jyk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIEh0bWxFbmNvZGUodmFsdWUpIHsNCiAgICBpZiAodmFsdWUgPT0gbnVsbCkgew0KICAgICAgICByZXR1cm4gdmFsdWU7DQogICAgfQ0KDQogICAgdmFsdWUgPSAkKCc8ZGl2Lz4nKS50ZXh0KHZhbHVlKS5odG1sKCk7DQogICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8mbmJzcDsvZywgIiYjMTYwOyIpOw0KDQogICAgdmFyIGNvZGluZyA9IEFycmF5KCk7DQoNCiAgICBjb2RpbmdbJzkyJ10gPSAnIzkyJzsNCiAgICBjb2RpbmdbJzEwJ10gPSAnIzEwJzsNCiAgICBjb2RpbmdbJzM0J10gPSAncXVvdCc7DQogICAgdmFyIGZpbmFsVGV4dCA9ICIiOw0KDQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGggOyBpKyspIHsNCiAgICAgICAgdmFyIGNoYXIgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpOw0KICAgICAgICB2YXIgY2hhcmFjdGVycyA9IHZhbHVlLmNoYXJBdChpKTsNCg0KICAgICAgICBmb3IgKHZhciBrZXkgaW4gY29kaW5nKSB7DQogICAgICAgICAgICBpZiAoa2V5ID09IGNoYXIpIHsNCiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gJyYnICsgY29kaW5nW2NoYXJdICsgJzsnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgZmluYWxUZXh0ICs9IGNoYXJhY3RlcnM7DQogICAgfQ0KDQogICAgcmV0dXJuIGZpbmFsVGV4dDsNCn0NCg0KZnVuY3Rpb24gRGlzYWJsZUZvcm0oKSB7ICQoJ2Zvcm0gOmlucHV0JykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsgfQ0KDQpmdW5jdGlvbiBFbmFibGVGb3JtKCkgew0KICAgICQoJ2Zvcm0gOmlucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBpbnB1dCA9ICQodGhpcyk7DQogICAgICAgIGlmIChpbnB1dC5hdHRyKCdpc1JlYWRvbmx5JykgPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICBpbnB1dC5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOw0KICAgICAgICB9DQogICAgfSk7DQp9DQoNCmZ1bmN0aW9uIFNhdmVYbWxBcygpIHsNCiAgICB0cnkgew0KICAgICAgICB2YXIgeG1sID0gR2V0RGF0YSgpOw0KICAgICAgICB2YXIgZmlsZU5hbWUgPSBHZXRGb3JtSWQoKSArICIueG1sIjsNCiAgICAgICAgdGhpcy5TYXZlVG9GaWxlKHhtbCwgJ3RleHQveG1sJywgZmlsZU5hbWUpOw0KICAgIH0NCiAgICBjYXRjaCAoZXhjKSB7DQogICAgICAgIGFsZXJ0KGV4Yyk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBTYXZlVG9GaWxlKGNvbnRlbnQsIHR5cGUsIGZpbGVuYW1lKSB7DQogICAgaWYgKHdpbmRvdy5CbG9iID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LkJsb2IpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIHRocm93ICJTYXZlIHRoaXMgYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkLCB1c2UgYSBuZXdlciBicm93c2VyIHZlcnNpb24iOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICB0aHJvdyAiVWtsYWRhbmllIHYgdG9tdG8gcHJlaGxpYWRhxI1pIG5pZSBqZSBwb2Rwb3JvdmFuw6ksIHBvdcW+aXRlIG5vdsWhaXUgdmVyeml1IHByZWhsaWFkYcSNYSI7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0cnkgew0KICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtjb250ZW50XSwgeyB0eXBlOiB0eXBlIH0pOw0KICAgICAgICAkLnNhdmVBcyhibG9iLCBmaWxlbmFtZSk7DQogICAgfQ0KICAgIGNhdGNoIChleGMpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIHRocm93ICJFcnJvciBzYXZpbmcgdGhlIGZpbGUgdG8gZGlzayI7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIHRocm93ICJDaHliYSBwcmkgdWtsYWRhbsOtIHPDumJvcnUgbmEgZGlzayI7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIExvYWRGcm9tRmlsZSgpIHsNCiAgICBpZiAoIXdpbmRvdy5GaWxlUmVhZGVyKSB7DQogICAgICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICB0aHJvdyAiVGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLCB1c2UgYSBuZXdlciBicm93c2VyIHZlcnNpb24iDQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIHRocm93ICJUw6F0byBmdW5rY2lvbmFsaXRhIG5pZSBqZSBwb2Rwb3JvdmFuw6EgdiB0b210byBwcmVobGlhZGHEjWksIHBvdcW+aXRlIG5vdsWhaXUgdmVyeml1IHByZWhsaWFkYcSNYSINCiAgICAgICAgfQ0KICAgIH0NCiAgICB2YXIgY29udGVudCA9ICQoIiNmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2ciKTsNCiAgICB2YXIgZXhpc3QgPSB0cnVlOw0KDQogICAgaWYgKGNvbnRlbnQubGVuZ3RoID09IDApIHsNCiAgICAgICAgZXhpc3QgPSBmYWxzZTsNCiAgICAgICAgdmFyIGZpbGUgPSAkKCc8aW5wdXQgdHlwZT0iZmlsZSIgaWQ9ImZvcm0tYnV0dG9ucy1pbnB1dC1maWxlIi8+Jyk7DQogICAgICAgIHZhciBzdWJtaXQgPSAnJzsNCg0KICAgICAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgICAgICBjYXNlICdlbic6IHsNCiAgICAgICAgICAgICAgICBzdWJtaXQgPSAkKCc8aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2ctY29uZmlybSIgY2xhc3M9ImJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmwiIHZhbHVlPSJMb2FkIGZpbGUiIGlkPSJmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2ctY29uZmlybSIgZGlzYWJsZWQgPSAiZGlzYWJsZWQiIC8+Jyk7DQogICAgICAgICAgICAgICAgY29udGVudCA9ICQoJzxkaXYgaWQ9ImZvcm0tYnV0dG9ucy1sb2FkLWRpYWxvZyIgLz4nKS5hdHRyKCd0aXRsZScsICJTZWxlY3QgdGhlIHhtbCBmaWxlIikuYXBwZW5kKGZpbGUpLmFwcGVuZChzdWJtaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiB7IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIHN1Ym1pdCA9ICQoJzxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9ImZvcm0tYnV0dG9ucy1sb2FkLWRpYWxvZy1jb25maXJtIiBjbGFzcz0iYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubCIgdmFsdWU9Ik5haHJhxaUgc8O6Ym9yIiBpZD0iZm9ybS1idXR0b25zLWxvYWQtZGlhbG9nLWNvbmZpcm0iIGRpc2FibGVkID0gImRpc2FibGVkIiAvPicpOw0KICAgICAgICAgICAgICAgIGNvbnRlbnQgPSAkKCc8ZGl2IGlkPSJmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2ciIC8+JykuYXR0cigndGl0bGUnLCAiVnliZXJ0ZSB4bWwgc8O6Ym9yIikuYXBwZW5kKGZpbGUpLmFwcGVuZChzdWJtaXQpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICAgICAgICBzdWJtaXQuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgdmFyIGRpYWxvZyA9ICQoJyNmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2cnKTsNCiAgICAgICAgICAgIHZhciBpbnB1dCA9ICQoJ2lucHV0OmZpbGUnLCBkaWFsb2cpWzBdOw0KICAgICAgICAgICAgdmFyIGN1cnJlbnRGaWxlID0gaW5wdXQuZmlsZXNbMF07DQoNCiAgICAgICAgICAgIGlmIChjdXJyZW50RmlsZSkgew0KICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZpbGUubmFtZS5tYXRjaCgvXi4qXC54bWwkL2kpKSB7DQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnSW5jb3JyZWN0IGZpbGUgZm9ybWF0LicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnTmVzcHLDoXZueSBmb3Jtw6F0IHPDumJvcnUuJyk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50RmlsZS5zaXplID4gMTUgKiAxMDI0ICogMTAyNCkgew0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ1RoZSBmaWxlIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiAxNU1CLicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnU8O6Ym9yIG5lc21pZSBiecWlIHbDpMSNxaHDrSBha28gMTVNQi4nKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIExvYWRYbWxGcm9tSW5wdXQoY3VycmVudEZpbGUpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBmaWxlLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgICBpZiAoJChlLnRhcmdldCkudmFsKCkpIHsNCiAgICAgICAgICAgICAgICAkKCcjZm9ybS1idXR0b25zLWxvYWQtZGlhbG9nLWNvbmZpcm0nKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkKCcjZm9ybS1idXR0b25zLWxvYWQtZGlhbG9nLWNvbmZpcm0nKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICAkKCcjJyArIEdldEZvcm1JZCgpKS5hcHBlbmQoY29udGVudCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAkKCIjZm9ybS1idXR0b25zLWlucHV0LWZpbGUiKS52YWwoJycpOw0KICAgIH0NCg0KICAgIGNvbnRlbnQuZGlhbG9nKHsNCiAgICAgICAgYXV0b09wZW46IGZhbHNlLA0KICAgICAgICBtb2RhbDogdHJ1ZSwNCiAgICAgICAgd2lkdGg6IDUwMA0KICAgIH0pOw0KDQogICAgaWYgKCFleGlzdCkgew0KICAgICAgICAkKCcjZm9ybS1idXR0b25zLWxvYWQtZGlhbG9nJykuY2xvc2VzdCgiLnVpLWRpYWxvZyIpLmFkZENsYXNzKCJsb2FkLWRpYWxvZyIpOw0KICAgIH0NCg0KICAgIGNvbnRlbnQuZGlhbG9nKCdvcGVuJyk7DQp9DQoNCmZ1bmN0aW9uIExvYWRYbWxGcm9tSW5wdXQoZmlsZSkgew0KICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOw0KICAgIHZhciByZWFkZXJIZWxwID0gbmV3IEZpbGVSZWFkZXIoKTsNCiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIHZhciB4bWxEb2MgPSAkLnBhcnNlWE1MKGUudGFyZ2V0LnJlc3VsdCk7DQogICAgICAgICAgICB2YXIgaW5kZXhlcyA9IEFycmF5KCk7DQogICAgICAgICAgICB2YXIgbm9kZVdpdGhDb250YWlucyA9IG5ldyBBcnJheSgpOw0KICAgICAgICAgICAgdmFyIGVtcHR5TmF0aXZlVGVtcGxhdGUgPSBHZXRFbXB0eU5hdGl2ZVRlbXBsYXRlKCk7DQogICAgICAgICAgICB2YXIgZW1wdHlOYXRpdmVUZW1wbGF0ZURvYyA9ICQucGFyc2VYTUwoZW1wdHlOYXRpdmVUZW1wbGF0ZSk7DQogICAgICAgICAgICBBZGRNaXNzaW5nRWxlbWVudHMoeG1sRG9jLmNoaWxkTm9kZXNbMF0sIGVtcHR5TmF0aXZlVGVtcGxhdGVEb2MuY2hpbGROb2Rlc1swXSwgbm9kZVdpdGhDb250YWlucyk7DQogICAgICAgICAgICBMb2FkWG1sKHhtbERvYy5jaGlsZE5vZGVzWzBdLCBpbmRleGVzKTsNCg0KICAgICAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ0ZpbGxpbmcgdGhlIGZvcm0gd2FzIHN1Y2Nlc3NmdWwnKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ05hcGxuZW5pZSBmb3JtdWzDoXJhIGJvbG8gw7pzcGXFoW7DqScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChleGMpIHsNCiAgICAgICAgICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdGaWxsaW5nIHRoZSBmb3JtIGhhcyBiZWVuIHVuc3VjY2Vzc2Z1bCcpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgICAgICBhbGVydCgnTmFwbG5lbmllIGZvcm11bMOhcmEgYm9sbyBuZcO6c3BlxaFuw6knKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCdDb3VsZCBub3QgcmVhZCBmaWxlLicpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICBhbGVydCgnTmVwb2RhcmlsbyBzYSBwcmXEjcOtdGHFpSBzw7pib3IuJyk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgcmVhZGVySGVscC5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgew0KICAgICAgICBpZiAoZS50YXJnZXQucmVzdWx0LnNlYXJjaCgiZW5jb2Rpbmc9XCJJU08tODg1OS0yXCIiKSA+IDAgfHwgZS50YXJnZXQucmVzdWx0LnNlYXJjaCgiZW5jb2Rpbmc9XCJpc28tODg1OS0yXCIiKSA+IDAgfHwgZS50YXJnZXQucmVzdWx0LnNlYXJjaCgiZW5jb2Rpbmc9XCJJc28tODg1OS0yXCIiKSA+IDApIHsNCiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUsICdJU08tODg1OS0yJyk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoZS50YXJnZXQucmVzdWx0LnNlYXJjaCgiZW5jb2Rpbmc9XCJXSU5ET1dTLTEyNTBcIiIpID4gMCB8fCBlLnRhcmdldC5yZXN1bHQuc2VhcmNoKCJlbmNvZGluZz1cIldpbmRvd3MtMTI1MFwiIikgPiAwIHx8IGUudGFyZ2V0LnJlc3VsdC5zZWFyY2goImVuY29kaW5nPVwid2luZG93cy0xMjUwXCIiKSA+IDApIHsNCiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUsICdXaW5kb3dzLTEyNTAnKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOw0KICAgICAgICB9DQogICAgfTsNCg0KICAgIHJlYWRlckhlbHAub25lcnJvciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCdDb3VsZCBub3QgcmVhZCBmaWxlLicpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICBhbGVydCgnTmVwb2RhcmlsbyBzYSBwcmXEjcOtdGHFpSBzw7pib3IuJyk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgcmVhZGVySGVscC5yZWFkQXNUZXh0KGZpbGUpOw0KfQ0KDQpmdW5jdGlvbiBHZXRGaWVsZE5vZGUobm9kZSkgew0KICAgIGlmIChub2RlID09IG51bGwpIHsNCiAgICAgICAgcmV0dXJuIG51bGw7DQogICAgfQ0KDQogICAgaWYgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7DQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICBpZiAobm9kZS5jaGlsZE5vZGVzW2tdLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzW2tdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIG51bGw7DQp9DQoNCmZ1bmN0aW9uIExvYWRYbWwocm9vdE5vZGUsIGluZGV4ZXMpIHsNCg0KICAgIGZ1bmN0aW9uIElzRW1wdHkobm9kZSkgew0KICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PSAiI3RleHQiKSB7DQogICAgICAgICAgICBpZiAobm9kZS5ub2RlVmFsdWUgIT0gbnVsbCB8fCBub2RlLm5vZGVWYWx1ZSAhPT0gIiIpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBJc0VtcHR5KG5vZGUuY2hpbGROb2Rlc1tpXSk7DQogICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICB2YXIgbGFzdE5vZGUgPSBudWxsOw0KDQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQoNCiAgICAgICAgdmFyIG5vZGUgPSByb290Tm9kZS5jaGlsZE5vZGVzW2ldOw0KDQogICAgICAgIHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7DQogICAgICAgIG5vZGVOYW1lID0gbm9kZU5hbWUucmVwbGFjZSgiRG9Ob3RWYWxpZGF0ZV8iLCAiIik7DQoNCiAgICAgICAgdmFyIGZpZWxkTm9kZSA9IEdldEZpZWxkTm9kZShub2RlKTsNCiAgICAgICAgdmFyIGxhc3RGaWVsZE5vZGUgPSBHZXRGaWVsZE5vZGUobGFzdE5vZGUpOw0KDQogICAgICAgIGlmIChpbmRleGVzW25vZGVOYW1lXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICBpbmRleGVzW25vZGVOYW1lXSA9IDA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAvL2FrIHN1IG9iYSBmaWVsZG5vZHkgYSBtYWp1IHJvdm5ha3kgbmFtZSwgdGFrIHNhIG5lYnVkZSB6dnlzb3ZhdCwgbGVibyBzYSBidWRlIGplZG5hdCBvIG11bHRpIHBydm9rDQogICAgICAgICAgICBpZiAoZmllbGROb2RlID09IG51bGwgfHwgbGFzdEZpZWxkTm9kZSA9PSBudWxsIHx8IGZpZWxkTm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lICE9IGxhc3RGaWVsZE5vZGUucGFyZW50Tm9kZS5ub2RlTmFtZSkgew0KICAgICAgICAgICAgICAgIGluZGV4ZXNbbm9kZU5hbWVdKys7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBsYXN0Tm9kZSA9IG5vZGU7DQoNCiAgICAgICAgaWYgKGZpZWxkTm9kZSA9PSBudWxsKSB7DQogICAgICAgICAgICB2YXIgYWxsTGF5b3V0Um93cyA9ICQoJ2RpdltpZF49bGF5b3V0Um93XScpOw0KICAgICAgICAgICAgdmFyIHJlcGVhdGluZ0luZGV4ID0gaW5kZXhlc1tub2RlTmFtZV07DQogICAgICAgICAgICB2YXIgcmVwZWF0aW5nUG9zdGZpeFRleHQgPSByZXBlYXRpbmdJbmRleDsNCiAgICAgICAgICAgIGlmIChyZXBlYXRpbmdJbmRleCA9PSAwKSB7DQogICAgICAgICAgICAgICAgcmVwZWF0aW5nUG9zdGZpeFRleHQgPSAnJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIHJlcGVhdGluZ1Bvc3RmaXhUZXh0ID0gcmVwZWF0aW5nUG9zdGZpeCArIHJlcGVhdGluZ0luZGV4Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgZm91bmRTZWN0aW9uID0gbnVsbDsNCiAgICAgICAgICAgIHZhciBsYXlvdXRSb3dJRCA9IG51bGw7DQoNCiAgICAgICAgICAgIGFsbExheW91dFJvd3MuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdmFyIGxheW91dFJvdyA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgaWYgKGxheW91dFJvdy5maW5kKCdbbmFtZT0nICsgbm9kZU5hbWUgKyAnXScpLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dFJvd1Bvc3RmaXggPSBsYXlvdXRSb3cuYXR0cignaWQnKS5yZXBsYWNlKEdldFZhbHVlV2l0aG91dEluY3JlbWVudGFsKGxheW91dFJvdy5hdHRyKCdpZCcpKSwgIiIpOw0KICAgICAgICAgICAgICAgICAgICBsYXlvdXRSb3dJRCA9IGxheW91dFJvdy5hdHRyKCdpZCcpOw0KICAgICAgICAgICAgICAgICAgICBpZiAobGF5b3V0Um93UG9zdGZpeCA9PSByZXBlYXRpbmdQb3N0Zml4VGV4dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTZWN0aW9uID0gbGF5b3V0Um93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGlmICgoZm91bmRTZWN0aW9uID09IG51bGwgfHwgKGZvdW5kU2VjdGlvbi5hdHRyKCJpc2VtcHR5IikgPT0gInRydWUiKSAmJiAhSXNFbXB0eShub2RlKSkgJiYgbGF5b3V0Um93SUQgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgIHZhciBsYXlvdXRSb3dJRFdpdGhvdXRJbmNyZW1lbnRhbCA9IEdldFZhbHVlV2l0aG91dEluY3JlbWVudGFsKGxheW91dFJvd0lEKTsNCiAgICAgICAgICAgICAgICB2YXIgYWRkQnV0dG9uID0gJCgnZGl2W2lkXj0nICsgbGF5b3V0Um93SUQgKyAnXScpLmxhc3QoKS5maW5kKCcjYWRkU2VjdGlvbicgKyBsYXlvdXRSb3dJRFdpdGhvdXRJbmNyZW1lbnRhbCk7DQogICAgICAgICAgICAgICAgaWYgKGFkZEJ1dHRvblswXSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbi5jbGljaygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgTG9hZFhtbChub2RlLCBpbmRleGVzKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIG5vZGUgPSBmaWVsZE5vZGU7DQogICAgICAgICAgICB2YXIgcmVwZWF0aW5nSW5kZXggPSBpbmRleGVzW25vZGVOYW1lXTsNCiAgICAgICAgICAgIHZhciByZXBlYXRpbmdQb3N0Zml4VGV4dCA9IHJlcGVhdGluZ0luZGV4Ow0KICAgICAgICAgICAgaWYgKHJlcGVhdGluZ0luZGV4ID09IDApIHsNCiAgICAgICAgICAgICAgICByZXBlYXRpbmdQb3N0Zml4VGV4dCA9ICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmVwZWF0aW5nUG9zdGZpeFRleHQgPSByZXBlYXRpbmdFbGVtZW50UG9zdGZpeCArIHJlcGVhdGluZ0luZGV4Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgZmllbGQgPSAkKCJbbmFtZT0iICsgbm9kZU5hbWUgKyByZXBlYXRpbmdQb3N0Zml4VGV4dCArICJdIik7DQoNCiAgICAgICAgICAgIGlmIChmaWVsZC5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzKCc6Y2hlY2tib3gnKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaGFzQ2xhc3MoImNoZWNrQm94IikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5oYXNDbGFzcygieHNkX2Jvb2xlYW4iKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVWYWx1ZSA9PSAiMSIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkQ2hlY2tib3ggPSAkKGZpZWxkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkQ2hlY2tib3guYXR0cigiZGlzYWJsZWQiKSAhPT0gdW5kZWZpbmVkIHx8IGZpZWxkQ2hlY2tib3guYXR0cigicmVhZG9ubHkiKSAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZENoZWNrYm94LmF0dHIoImNoZWNrZWQiLCAidHJ1ZSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmNsaWNrKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbCgpID09IG5vZGUubm9kZVZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZENoZWNrYm94ID0gJChmaWVsZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZENoZWNrYm94LmF0dHIoImRpc2FibGVkIikgIT09IHVuZGVmaW5lZCB8fCBmaWVsZENoZWNrYm94LmF0dHIoInJlYWRvbmx5IikgIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDaGVja2JveC5hdHRyKCJjaGVja2VkIiwgInRydWUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jbGljaygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZC5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZmllbGRbaW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUudmFsdWUgPT0gbm9kZS5ub2RlVmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkQ2hlY2tib3ggPSAkKGNoaWxkTm9kZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZENoZWNrYm94LmF0dHIoImRpc2FibGVkIikgIT09IHVuZGVmaW5lZCB8fCBmaWVsZENoZWNrYm94LmF0dHIoInJlYWRvbmx5IikgIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDaGVja2JveC5hdHRyKCJjaGVja2VkIiwgInRydWUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuY2xpY2soKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQuaXMoJzpyYWRpbycpKSB7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZC5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBmaWVsZFtpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLnZhbHVlID09IG5vZGUubm9kZVZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGlvID0gJChjaGlsZE5vZGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYWRpby5hdHRyKCJkaXNhYmxlZCIpICE9PSB1bmRlZmluZWQgfHwgcmFkaW8uYXR0cigicmVhZG9ubHkiKSAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvLmF0dHIoImNoZWNrZWQiLCAidHJ1ZSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5jbGljaygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLmF0dHIoIm11bHRpcGxlIikpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkWzBdLmNoaWxkTm9kZXMubGVuZ3RoOyBpbmRleCsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZmllbGRbMF0uY2hpbGROb2Rlc1tpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLnZhbHVlID09IG5vZGUubm9kZVZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLnNlbGVjdGVkID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHZhbCA9IG5vZGUubm9kZVZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9ICIiKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaGFzQ2xhc3MoInhzZF9kZWNpbWFsIikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJy4nLCAnLCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQuaGFzQ2xhc3MoInhzZF9kYXRlIikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0geG1sSGVscGVyLmZyb21YbWxEYXRlKHZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmaWVsZC5oYXNDbGFzcygieHNkX3RpbWUiKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB4bWxIZWxwZXIuZnJvbVhtbFRpbWUodmFsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLmhhc0NsYXNzKCJ4c2RfZGF0ZVRpbWUiKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB4bWxIZWxwZXIuZnJvbVhtbERhdGVUaW1lKHZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmaWVsZC5oYXNDbGFzcygieHNkX2FueVVSSSIpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHhtbEhlbHBlci5mcm9tWG1sQW55VVJJKHZhbCk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWwodmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8vIEZ1bmtjaWUgcHJlIHByZWtyeXRpZSB1a2xhZGFuaWEgYSBuYWNpdGF2YW5pYQ0KZnVuY3Rpb24gR2V0WHBhdGgoZWxlbWVudHMpIHsNCiAgICB2YXIgeHBhdGggPSAiIjsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHhwYXRoICs9ICIvIiArIGVsZW1lbnRzW2ldLm5vZGVOYW1lOw0KDQogICAgICAgIGlmIChlbGVtZW50c1tpXS5wYXJlbnROb2RlICE9IG51bGwgJiYgZWxlbWVudHNbaV0uYXR0cmlidXRlcyAhPSBudWxsKSB7DQogICAgICAgICAgICAvL3Jvb3R1IHNhIHByZXNrYWt1anUgbmFtZXNwYWNlcw0KICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMubGVuZ3RoID09IDAgfHwgaSA9PSAwKSB7DQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHhwYXRoICs9ICJbIjsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgeHBhdGggKz0gIkAiICsgZWxlbWVudHNbaV0uYXR0cmlidXRlc1tqXS5ub2RlTmFtZSArICI9JyIgKyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzW2pdLnZhbHVlICsgIiciOw0KICAgICAgICAgICAgICAgIGlmIChqICE9IGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMubGVuZ3RoIC0gMSkgew0KICAgICAgICAgICAgICAgICAgICB4cGF0aCArPSAiIGFuZCAiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgeHBhdGggKz0gIl0iOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIHhwYXRoOw0KfQ0KDQovL3ZyYXRpIGxpc3Qgbm9kb3YgLCBrdG9yeSB1cmN1amUgamVobyBhYnNvbHV0bnUgY2VzdHUgYXogZG8gcm9vdHUNCmZ1bmN0aW9uIEFuY2VzdG9yc0FuZFNlbGYoZWxlbWVudCkgew0KICAgIHZhciBwYXJ0cyA9IG5ldyBBcnJheSgpOw0KICAgIHZhciBhY3R1YWwgPSBlbGVtZW50Ow0KDQogICAgd2hpbGUgKGFjdHVhbCAhPSBudWxsICYmIGFjdHVhbC5wYXJlbnROb2RlICE9IG51bGwpIHsNCiAgICAgICAgcGFydHMucHVzaChhY3R1YWwpOw0KICAgICAgICBhY3R1YWwgPSBhY3R1YWwucGFyZW50Tm9kZTsNCiAgICB9DQoNCiAgICByZXR1cm4gcGFydHMucmV2ZXJzZSgpOw0KfQ0KDQovL25hamRlIG5vZCB2IHphZGFub20gcm9vdGUgbmEgemFrbGFkZSB4cGF0aHUNCmZ1bmN0aW9uIEZvdW5kTm9kZShyb290LCB4UGF0aCkgew0KDQogICAgdmFyIGFuY2VzdG9yc0FuZFNlbGZQYXJlbnQgPSBBbmNlc3RvcnNBbmRTZWxmKHJvb3QpOw0KICAgIHZhciB4UGF0aFBhcmVudCA9IEdldFhwYXRoKGFuY2VzdG9yc0FuZFNlbGZQYXJlbnQpOw0KICAgIGlmICh4UGF0aCA9PSB4UGF0aFBhcmVudCkgew0KICAgICAgICByZXR1cm4gcm9vdDsNCiAgICB9DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3QuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICB2YXIgZm91bmROb2RlID0gRm91bmROb2RlKHJvb3QuY2hpbGROb2Rlc1tpXSwgeFBhdGgpOw0KICAgICAgICBpZiAoZm91bmROb2RlICE9IG51bGwpIHsNCiAgICAgICAgICAgIHJldHVybiBmb3VuZE5vZGU7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICByZXR1cm4gbnVsbDsNCn0NCg0KLy9uYWpkZSBub2QgdiB6YWRhbm9tIHJvb3RlIG5hIHpha2xhZGUgbmF6dnUNCmZ1bmN0aW9uIEZvdW5kTm9kZUJ5TmFtZShyb290LCBuYW1lKSB7DQoNCiAgICBpZiAocm9vdC5ub2RlTmFtZSA9PSBuYW1lKSB7DQogICAgICAgIHJldHVybiByb290Ow0KICAgIH0NCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBmb3VuZE5vZGUgPSBGb3VuZE5vZGVCeU5hbWUocm9vdC5jaGlsZE5vZGVzW2ldLCBuYW1lKTsNCiAgICAgICAgaWYgKGZvdW5kTm9kZSAhPSBudWxsKSB7DQogICAgICAgICAgICByZXR1cm4gZm91bmROb2RlOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIG51bGw7DQp9DQoNCi8vbmEgemFrbGFkZSB4cGF0aG92IGRvZHJ6aSBzaWJibGluZ3MNCmZ1bmN0aW9uIFNvcnRYbWxCeVhQYXRoKHJvb3QpIHsNCiAgICB2YXIgc2liYmxpbmdzID0gQXJyYXkoKTsNCg0KICAgIGlmIChyb290Lm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBhbmNlc3RvckFuZFNpYmJsaW5ncyA9IEFuY2VzdG9yc0FuZFNlbGYocm9vdC5jaGlsZE5vZGVzW2ldKTsNCiAgICAgICAgdmFyIHhQYXRoID0gR2V0WHBhdGgoYW5jZXN0b3JBbmRTaWJibGluZ3MpOw0KDQogICAgICAgIC8vcG96YXpuYW1lbmF2YSBzaSBwb3ppY2llDQogICAgICAgIGlmIChzaWJibGluZ3NbeFBhdGhdID09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgc2liYmxpbmdzW3hQYXRoXSA9IG5ldyBBcnJheSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgc2liYmxpbmdzW3hQYXRoXS5wdXNoKGkpOw0KICAgIH0NCg0KICAgIHZhciBuZXdMaXN0ID0gbmV3IEFycmF5KCk7DQoNCiAgICAvL25hIHpha2xhZGUgcG96aWNpaSB2eXNrbGFkYSBub3ZlIHBvcmFkaWUgZWxlbWVudG92DQogICAgZm9yICh2YXIgc2liYmxpbmcgaW4gc2liYmxpbmdzKSB7DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2liYmxpbmdzW3NpYmJsaW5nXS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIHBvbSA9IHNpYmJsaW5nc1tzaWJibGluZ107DQogICAgICAgICAgICBuZXdMaXN0LnB1c2gocm9vdC5jaGlsZE5vZGVzW3BvbVtpXV0pOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy96bWF6YW5pZSBha3R1YWxueWNoIG5vZG92DQogICAgd2hpbGUgKHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7DQogICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQocm9vdC5jaGlsZE5vZGVzWzBdKTsNCiAgICB9DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0xpc3QubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChuZXdMaXN0W2ldKTsNCiAgICB9DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3QuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICBTb3J0WG1sQnlYUGF0aChyb290LmNoaWxkTm9kZXNbaV0pOw0KICAgIH0NCn0NCg0KLy9uYSB6YWtsYWRlIHhwYXRob3Ygdnl0dmFyYSB2eXNsZWRuZSB4bWwNCmZ1bmN0aW9uIEJ1aWxkWG1sRnJvbVhwYXRocyh4UGF0aCwgcm9vdCwgZG9jdW1lbnQpIHsNCiAgICBpZiAoeFBhdGggPT0gIiIpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIHZhciB4UGF0aFBhcnRzID0geFBhdGguc3BsaXQoJy8nKTsNCiAgICBpZiAoeFBhdGhQYXJ0cy5sZW5ndGggPT0gMCkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgdmFyIHhQYXRoRWxlbWVudE5hbWUgPSB4UGF0aFBhcnRzWzBdOw0KICAgIHZhciBmb3VuZE5vZGUgPSBGb3VuZE5vZGVCeU5hbWUocm9vdCwgeFBhdGhFbGVtZW50TmFtZSk7DQoNCiAgICBpZiAoZm91bmROb2RlID09IG51bGwpIHsNCiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHhQYXRoRWxlbWVudE5hbWUpOw0KICAgICAgICByb290LmFwcGVuZENoaWxkKGVsZW1lbnQpOw0KICAgICAgICByb290ID0gZWxlbWVudDsNCiAgICB9IGVsc2Ugew0KICAgICAgICByb290ID0gZm91bmROb2RlOw0KICAgIH0NCg0KICAgIHZhciBuZXdYUGF0aCA9ICIiOw0KICAgIGZvciAodmFyIGogPSAxOyBqIDwgeFBhdGhQYXJ0cy5sZW5ndGg7IGorKykgew0KICAgICAgICBuZXdYUGF0aCArPSB4UGF0aFBhcnRzW2pdICsgIi8iOw0KICAgIH0NCg0KICAgIGlmIChuZXdYUGF0aC5sZW5ndGggPiAwKSB7DQogICAgICAgIG5ld1hQYXRoID0gbmV3WFBhdGguc3Vic3RyaW5nKDAsIG5ld1hQYXRoLmxlbmd0aCAtIDEpOw0KICAgIH0NCg0KICAgIEJ1aWxkWG1sRnJvbVhwYXRocyhuZXdYUGF0aCwgcm9vdCwgZG9jdW1lbnQpOw0KfQ0KDQovL3ByZWpkZSBjZXogdnNldGt5IGVsZW1lbnR5IGEgdnJhdGkgeG1sIGFrbyBzdHJpbmcNCmZ1bmN0aW9uIEVsZW1lbnRUb1N0cmluZyhyb290KSB7DQogICAgdmFyIHhtbCA9ICIiOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gIiI7DQoNCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByb290LmNoaWxkTm9kZXNbaV0uYXR0cmlidXRlcy5sZW5ndGg7IGorKykgew0KICAgICAgICAgICAgYXR0cmlidXRlcyArPSAiICIgKyByb290LmNoaWxkTm9kZXNbaV0uYXR0cmlidXRlc1tqXS5uYW1lICsgIj1cIiIgKyByb290LmNoaWxkTm9kZXNbaV0uYXR0cmlidXRlc1tqXS52YWx1ZSArICJcIiI7DQogICAgICAgIH0NCg0KICAgICAgICB4bWwgKz0gIjwiICsgcm9vdC5jaGlsZE5vZGVzW2ldLm5vZGVOYW1lICsgYXR0cmlidXRlcyArICI+IjsNCiAgICAgICAgaWYgKHJvb3QuY2hpbGROb2Rlc1tpXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxICYmIHJvb3QuY2hpbGROb2Rlc1tpXS5jaGlsZE5vZGVzWzBdLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgIHhtbCArPSByb290LmNoaWxkTm9kZXNbaV0uY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB4bWwgKz0gRWxlbWVudFRvU3RyaW5nKHJvb3QuY2hpbGROb2Rlc1tpXSk7DQogICAgICAgIH0NCiAgICAgICAgeG1sICs9ICI8LyIgKyByb290LmNoaWxkTm9kZXNbaV0ubm9kZU5hbWUgKyAiPiI7DQogICAgfQ0KDQogICAgcmV0dXJuIHhtbDsNCn0NCg0KLy96bWF6ZSB2c2V0a3kgdnlwbG5lbmUgaG9kbm90eQ0KZnVuY3Rpb24gRW1wdHlYbWxOb2RlUmVjdXJzaXZlKG5vZGUpIHsNCiAgICBpZiAobm9kZS5ub2RlTmFtZSA9PSAiI3RleHQiKSB7DQogICAgICAgIG5vZGUubm9kZVZhbHVlID0gIiI7DQogICAgfSBlbHNlIHsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIEVtcHR5WG1sTm9kZVJlY3Vyc2l2ZShub2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQovL3ptYXplIGVsZW1lbnR5LCBrdG9yZSBuaWUgc3UgbmFtYXBvdmFuZQ0KZnVuY3Rpb24gUmVtb3ZlRWxlbWVudHNCeU5hbWVOb3RJbk1hcHBpbmcobm9kZSwgbWFwcGluZykgew0KICAgIGlmIChub2RlLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIHZhciBmb3VuZCA9IGZhbHNlOw0KICAgIHZhciBhY3R1YWxOb2RlID0gbm9kZTsNCg0KICAgIGZvciAodmFyIG1hcCBpbiBtYXBwaW5nKSB7DQogICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09IG1hcCkgew0KICAgICAgICAgICAgZm91bmQgPSB0cnVlOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgaWYgKCFmb3VuZCkgew0KICAgICAgICBhY3R1YWxOb2RlID0gbm9kZS5wYXJlbnROb2RlOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgYWN0dWFsTm9kZS5hcHBlbmRDaGlsZChub2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGFjdHVhbE5vZGUgPT0gbnVsbCkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgYWN0dWFsTm9kZS5yZW1vdmVDaGlsZChub2RlKTsNCiAgICB9DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICBSZW1vdmVFbGVtZW50c0J5TmFtZU5vdEluTWFwcGluZyhhY3R1YWxOb2RlLmNoaWxkTm9kZXNbaV0sIG1hcHBpbmcpOw0KICAgIH0NCn0NCg0KLy9wcmVsb3ppIHogbmF0aXZ1IGRvIGJ1c2luZXNzDQpmdW5jdGlvbiBUcmFuc2xhdGVOYXRpdmVUb0Vkb2MobmF0aXZlWG1sLCBza1htbFRlbXBsYXRlLCBtYXBwaW5nLCB0cmFuc2xhdGVUeXBlKSB7DQoNCiAgICBmdW5jdGlvbiBUcmFuc2xhdGVSZWN1cnNpdmUoeG1sRG9jTm9kZSwgc2tYbWxEb2NOb2RlLCB0ZW1wbGF0ZSwgdHJhbnNsYXRlVHlwZSkgew0KICAgICAgICB2YXIgc2liYmxpbmdzID0gQXJyYXkoKTsNCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhtbERvY05vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIHhtbE5vZGUgPSB4bWxEb2NOb2RlLmNoaWxkTm9kZXNbaV07DQoNCiAgICAgICAgICAgIGlmICh4bWxOb2RlLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgICAgICBpZiAoeG1sTm9kZS5ub2RlVmFsdWUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50WG1sTm9kZSA9IHhtbE5vZGUucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHhQYXRoRWRvYyA9IG1hcHBpbmdbcGFyZW50WG1sTm9kZS5ub2RlTmFtZV07DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHhQYXRoRWRvYyAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmROb2RlID0gRm91bmROb2RlKHNrWG1sRG9jTm9kZSwgeFBhdGhFZG9jKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE5vZGUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE5vZGUuYXBwZW5kQ2hpbGQoeG1sTm9kZS5jbG9uZU5vZGUoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmROb2RlLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlID0geG1sTm9kZS5ub2RlVmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChzaWJibGluZ3NbeG1sTm9kZS5ub2RlTmFtZV0gPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgc2liYmxpbmdzW3htbE5vZGUubm9kZU5hbWVdID0gMDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgc2liYmxpbmdzW3htbE5vZGUubm9kZU5hbWVdKys7DQoNCiAgICAgICAgICAgIC8vb3Bha29hdmFjaWEgc2VrYWNpYQ0KICAgICAgICAgICAgaWYgKHNpYmJsaW5nc1t4bWxOb2RlLm5vZGVOYW1lXSA+IDEpIHsNCiAgICAgICAgICAgICAgICAvL2tlZHplIG9wYWtvdmFjaWUgbm9keSBtYWp1IHJvdm5ha3kgbmF6b3YgYWtvIHYgbmF0b3ZlLCBzdGFjaSBsZW4gcG9kbGEgbmF6dnUNCiAgICAgICAgICAgICAgICB2YXIgcmVwZXRpdGlvbk5vZGUgPSBudWxsOw0KICAgICAgICAgICAgICAgIHZhciByZXBldGl0aW9uTm9kZVRlbXBsYXRlID0gbnVsbDsNCg0KICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVUeXBlID09ICJEaWN0aW9uYXJ5Iikgew0KICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZSA9IEZvdW5kTm9kZUJ5TmFtZShza1htbERvY05vZGUsIHhtbE5vZGUubm9kZU5hbWUpOw0KICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZVRlbXBsYXRlID0gRm91bmROb2RlQnlOYW1lKHRlbXBsYXRlLCB4bWxOb2RlLm5vZGVOYW1lKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZVR5cGUgPT0gIk1hcHBlciIpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHhQYXRoRWRvYyA9IG1hcHBpbmdbeG1sTm9kZS5ub2RlTmFtZV07DQogICAgICAgICAgICAgICAgICAgIHJlcGV0aXRpb25Ob2RlID0gRm91bmROb2RlKHNrWG1sRG9jTm9kZSwgeFBhdGhFZG9jKTsNCiAgICAgICAgICAgICAgICAgICAgcmVwZXRpdGlvbk5vZGVUZW1wbGF0ZSA9IEZvdW5kTm9kZSh0ZW1wbGF0ZSwgeFBhdGhFZG9jKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAocmVwZXRpdGlvbk5vZGVUZW1wbGF0ZSAhPSBudWxsICYmIHJlcGV0aXRpb25Ob2RlICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNsb25lZE5vZGUgPSByZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgcmVwZXRpdGlvbk5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTsNCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlUmVjdXJzaXZlKHhtbE5vZGUsIGNsb25lZE5vZGUsIHRlbXBsYXRlLCB0cmFuc2xhdGVUeXBlKTsNCg0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIFRyYW5zbGF0ZVJlY3Vyc2l2ZSh4bWxOb2RlLCBza1htbERvY05vZGUsIHRlbXBsYXRlLCB0cmFuc2xhdGVUeXBlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHZhciBuYXRpdmVEb2MgPSAkLnBhcnNlWE1MKG5hdGl2ZVhtbCk7DQogICAgdmFyIGVEb2NEb2MgPSAkLnBhcnNlWE1MKHNrWG1sVGVtcGxhdGUpOw0KICAgIHZhciB0ZW1wbGF0ZSA9ICQucGFyc2VYTUwoc2tYbWxUZW1wbGF0ZSk7DQogICAgVHJhbnNsYXRlUmVjdXJzaXZlKG5hdGl2ZURvYy5jaGlsZE5vZGVzWzBdLCBlRG9jRG9jLmNoaWxkTm9kZXNbMF0sIHRlbXBsYXRlLCB0cmFuc2xhdGVUeXBlKTsNCiAgICBTb3J0WG1sQnlYUGF0aChlRG9jRG9jLmNoaWxkTm9kZXNbMF0pOw0KDQogICAgcmV0dXJuIEVsZW1lbnRUb1N0cmluZyhlRG9jRG9jKTsNCn0NCg0KLy9wcmVsb3ppIHogZWRvYyBkbyBuYXRpdnUNCmZ1bmN0aW9uIFRyYW5zbGF0ZUVkb2NUb05hdGl2ZShlZG9jWG1sLCBuYXRpdmVYbWxUZW1wbGF0ZSwgbWFwcGluZywgdHJhbnNsYXRlVHlwZSkgew0KDQogICAgZnVuY3Rpb24gVHJhbnNsYXRlUmVjdXJzaXZlKGVkb2NEb2NOb2RlLCBuYXRpdmVYbWxEb2NOb2RlLCB0ZW1wbGF0ZSwgdHJhbnNsYXRlVHlwZSkgew0KICAgICAgICB2YXIgc2liYmxpbmdzID0gQXJyYXkoKTsNCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkb2NEb2NOb2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciB4bWxOb2RlID0gZWRvY0RvY05vZGUuY2hpbGROb2Rlc1tpXTsNCiAgICAgICAgICAgIHZhciBhbmNlc29yc0FuZFNlbGYgPSBBbmNlc3RvcnNBbmRTZWxmKHhtbE5vZGUpOw0KICAgICAgICAgICAgdmFyIGVEb2NYcGF0aCA9IEdldFhwYXRoKGFuY2Vzb3JzQW5kU2VsZik7DQoNCiAgICAgICAgICAgIGlmICh4bWxOb2RlLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgICAgICBlRG9jWHBhdGggPSBlRG9jWHBhdGguc3Vic3RyaW5nKDAsIGVEb2NYcGF0aC5sZW5ndGggLSA2KTsgLy8gb3JlemVtIGVzdGUgLyN0ZXh0IHpuYW1lDQogICAgICAgICAgICAgICAgaWYgKHhtbE5vZGUubm9kZVZhbHVlICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgLy9lZG9jIA0KICAgICAgICAgICAgICAgICAgICB2YXIgbmF0aXZlTmFtZSA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG1hcCBpbiBtYXBwaW5nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZ1ttYXBdID09IGVEb2NYcGF0aCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZU5hbWUgPSBtYXA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGV0aXRpb25Ob2RlVGVtcGxhdGUgPSBGb3VuZE5vZGVCeU5hbWUodGVtcGxhdGUsIG5hdGl2ZU5hbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW96dSBieXQgcm92bmFrZSB4cGF0aHksIGFsZSB6YXVqaW1hdnkgamUgbGVuIHRlbiBmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNoaWxkTm9kZXMubGVuZ3RoID09IDAgfHwgcmVwZXRpdGlvbk5vZGVUZW1wbGF0ZS5jaGlsZE5vZGVzWzBdLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZU5hbWUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kTm9kZSA9IEZvdW5kTm9kZUJ5TmFtZShuYXRpdmVYbWxEb2NOb2RlLCBuYXRpdmVOYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE5vZGUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE5vZGUuYXBwZW5kQ2hpbGQoeG1sTm9kZS5jbG9uZU5vZGUoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmROb2RlLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlID0geG1sTm9kZS5ub2RlVmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChzaWJibGluZ3NbZURvY1hwYXRoXSA9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICBzaWJibGluZ3NbZURvY1hwYXRoXSA9IDA7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHNpYmJsaW5nc1tlRG9jWHBhdGhdKys7DQoNCiAgICAgICAgICAgIC8vb3Bha29hdmFjaWEgc2VrYWNpYQ0KICAgICAgICAgICAgaWYgKHNpYmJsaW5nc1tlRG9jWHBhdGhdID4gMSkgew0KICAgICAgICAgICAgICAgIHZhciByZXBldGl0aW9uTm9kZSA9IG51bGw7DQogICAgICAgICAgICAgICAgdmFyIHJlcGV0aXRpb25Ob2RlVGVtcGxhdGUgPSBudWxsOw0KDQogICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZVR5cGUgPT0gIkRpY3Rpb25hcnkiKSB7DQogICAgICAgICAgICAgICAgICAgIC8va2VkemUgb3Bha292YWNpZSBub2R5IG1hanUgcm92bmFreSBuYXpvdiBha28gdiBuYXRvdmUsIHN0YWNpIGxlbiBwb2RsYSBuYXp2dQ0KICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZSA9IEZvdW5kTm9kZUJ5TmFtZShuYXRpdmVYbWxEb2NOb2RlLCB4bWxOb2RlLm5vZGVOYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgcmVwZXRpdGlvbk5vZGVUZW1wbGF0ZSA9IEZvdW5kTm9kZUJ5TmFtZSh0ZW1wbGF0ZSwgeG1sTm9kZS5ub2RlTmFtZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVUeXBlID09ICJNYXBwZXIiKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBhbmNlc29yc0FuZFNlbGYgPSBBbmNlc3RvcnNBbmRTZWxmKHhtbE5vZGUpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgZURvY1hwYXRoID0gR2V0WHBhdGgoYW5jZXNvcnNBbmRTZWxmKTsNCg0KICAgICAgICAgICAgICAgICAgICAvL2Vkb2MgDQogICAgICAgICAgICAgICAgICAgIHZhciBuYXRpdmVOYW1lID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbWFwIGluIG1hcHBpbmcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nW21hcF0gPT0gZURvY1hwYXRoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlTmFtZSA9IG1hcDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZVRlbXBsYXRlID0gRm91bmROb2RlQnlOYW1lKHRlbXBsYXRlLCBuYXRpdmVOYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL21venUgYnl0IHJvdm5ha2UgeHBhdGh5LCBhbGUgemF1amltYXZ5IGplIGxlbiB0ZW4gcHJlIHNla2NpdQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCAmJiByZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNoaWxkTm9kZXNbMF0ubm9kZU5hbWUgIT0gIiN0ZXh0Iikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZSA9IEZvdW5kTm9kZUJ5TmFtZShuYXRpdmVYbWxEb2NOb2RlLCBuYXRpdmVOYW1lKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAocmVwZXRpdGlvbk5vZGVUZW1wbGF0ZSAhPSBudWxsICYmIHJlcGV0aXRpb25Ob2RlICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNsb25lZE5vZGUgPSByZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgcmVwZXRpdGlvbk5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTsNCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlUmVjdXJzaXZlKHhtbE5vZGUsIGNsb25lZE5vZGUsIHRlbXBsYXRlLCB0cmFuc2xhdGVUeXBlKTsNCg0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIFRyYW5zbGF0ZVJlY3Vyc2l2ZSh4bWxOb2RlLCBuYXRpdmVYbWxEb2NOb2RlLCB0ZW1wbGF0ZSwgdHJhbnNsYXRlVHlwZSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB2YXIgZWRvY0RvYyA9ICQucGFyc2VYTUwoZWRvY1htbCk7DQogICAgdmFyIG5hdGl2ZURvYyA9ICQucGFyc2VYTUwobmF0aXZlWG1sVGVtcGxhdGUpOw0KICAgIHZhciB0ZW1wbGF0ZSA9ICQucGFyc2VYTUwobmF0aXZlWG1sVGVtcGxhdGUpOw0KICAgIFRyYW5zbGF0ZVJlY3Vyc2l2ZShlZG9jRG9jLmNoaWxkTm9kZXNbMF0sIG5hdGl2ZURvYy5jaGlsZE5vZGVzWzBdLCB0ZW1wbGF0ZSwgdHJhbnNsYXRlVHlwZSk7DQogICAgU29ydFhtbEJ5WFBhdGgobmF0aXZlRG9jLmNoaWxkTm9kZXNbMF0pOw0KDQogICAgcmV0dXJuIEVsZW1lbnRUb1N0cmluZyhuYXRpdmVEb2MpOw0KfQ0KDQovL3ByZWJyYW5lIHogMi4wDQpmdW5jdGlvbiBBZGRNaXNzaW5nRWxlbWVudHMoc291cmNlUm9vdE5vZGUsIGRlc3RpbmF0aW9uUm9vdE5vZGUsIG5vZGVXaXRoQ29udGFpbnMpIHsNCg0KICAgIC8vemlzdGksIGt0b3JlIGNhc3RpIHN0cm9tdSBtYWp1IGNvbnRhaW5zDQogICAgZnVuY3Rpb24gR2V0Q29udGFpbnNJbmZvcm1hdGlvbihub2RlLCBub2RlV2l0aENvbnRhaW5zKSB7DQogICAgICAgIGlmIChub2RlLm5vZGVOYW1lICE9ICIjdGV4dCIpIHsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZVdpdGhDb250YWlucy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIGlmIChub2RlV2l0aENvbnRhaW5zW2tdLm5vZGUgPT0gbm9kZSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjb250YWluc1ZhbHVlOiBub2RlV2l0aENvbnRhaW5zW2tdLmNvbnRhaW5zVmFsdWUsIGNvbnRhaW5zRWxlbWVudFhwYXRoOiBub2RlV2l0aENvbnRhaW5zW2tdLmNvbnRhaW5zRWxlbWVudFhwYXRoIH07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBwb20gPSBHZXRDb250YWluc0luZm9ybWF0aW9uKG5vZGUuY2hpbGROb2Rlc1tpXSwgbm9kZVdpdGhDb250YWlucyk7DQogICAgICAgICAgICAgICAgaWYgKHBvbSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBwb207DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIG51bGw7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gR2V0TXVsdGlwbGVFbGVtZW50cyhkZXN0aW5hdGlvblJvb3ROb2RlKSB7DQogICAgICAgIHZhciBtdWx0aXBsZU5hbWVzID0gbmV3IEFycmF5KCk7DQoNCiAgICAgICAgLy9uYWpkZW0gdmlhYyBuYXNibmUgdnlza3l0eSBuYSBkYW5laiB1cm92bmkNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhbmNlc3RvcnNBbmRTZWxmID0gQW5jZXN0b3JzQW5kU2VsZihkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICAgICAgdmFyIHhQYXRoU291cmNlID0gR2V0WHBhdGgoYW5jZXN0b3JzQW5kU2VsZik7DQoNCiAgICAgICAgICAgIGlmIChtdWx0aXBsZU5hbWVzW3hQYXRoU291cmNlXSA9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICBtdWx0aXBsZU5hbWVzW3hQYXRoU291cmNlXSA9IG5ldyBBcnJheSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBtdWx0aXBsZU5hbWVzW3hQYXRoU291cmNlXS5wdXNoKGRlc3RpbmF0aW9uUm9vdE5vZGUuY2hpbGROb2Rlc1tpXSk7DQogICAgICAgIH0NCg0KICAgICAgICAvL3Z5YmVyaWVtIGxlbiB0aWUsIGt0b3JlIHNhIHZpYWMga3JhdCBvcGFrdWp1DQogICAgICAgIHZhciBtdWx0aXBsZSA9IG5ldyBBcnJheSgpOw0KICAgICAgICBmb3IgKHZhciBtdWx0aXBsZU5hbWUgaW4gbXVsdGlwbGVOYW1lcykgew0KICAgICAgICAgICAgaWYgKG11bHRpcGxlTmFtZXNbbXVsdGlwbGVOYW1lXS5sZW5ndGggPiAxKSB7DQogICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtdWx0aXBsZU5hbWVzW211bHRpcGxlTmFtZV0ubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUucHVzaChtdWx0aXBsZU5hbWVzW211bHRpcGxlTmFtZV1ba10pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBtdWx0aXBsZTsNCiAgICB9DQoNCiAgICAvL3ppc3RpLCBjb250YWlucyBlbGVtZW50eQ0KICAgIGZ1bmN0aW9uIEdldEVsZW1lbnRXaXRoQ29udGFpbnMoZGVzdGluYXRpb25Sb290Tm9kZSwgbm9kZVdpdGhDb250YWlucykgew0KDQogICAgICAgIHZhciBtdWx0aXBsZSA9IEdldE11bHRpcGxlRWxlbWVudHMoZGVzdGluYXRpb25Sb290Tm9kZSk7DQogICAgICAgIHZhciBlbGVtZW50V2l0aENvbnRhaW5zID0gbmV3IEFycmF5KCk7DQoNCiAgICAgICAgLy9uYWpkZSBzIGNvbnRhaW5zIGEgdmxvemkgaWNoDQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXVsdGlwbGUubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjb250YWluc0luZm9ybWF0aW9uID0gR2V0Q29udGFpbnNJbmZvcm1hdGlvbihtdWx0aXBsZVtpXSwgbm9kZVdpdGhDb250YWlucyk7DQogICAgICAgICAgICBpZiAoY29udGFpbnNJbmZvcm1hdGlvbiAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgZWxlbWVudFdpdGhDb250YWlucy5wdXNoKHsgbm9kZTogbXVsdGlwbGVbaV0sIGNvbnRhaW5zVmFsdWU6IGNvbnRhaW5zSW5mb3JtYXRpb24uY29udGFpbnNWYWx1ZSwgY29udGFpbnNFbGVtZW50WHBhdGg6IGNvbnRhaW5zSW5mb3JtYXRpb24uY29udGFpbnNFbGVtZW50WHBhdGggfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZWxlbWVudFdpdGhDb250YWluczsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBGaW5kQWxsTm9kZXMoY2hpbGRyZW5Ob2RlcywgeHBhdGgsIGNvbnRhaW5zVmFsdWUsIHRlbXBsYXRlQ29udGFpbnNYUGF0aCkgew0KICAgICAgICB2YXIgZm91bmROb2RlcyA9IG5ldyBBcnJheSgpOw0KDQogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7IGorKykgew0KICAgICAgICAgICAgaWYgKGNoaWxkcmVuTm9kZXNbal0ubm9kZU5hbWUgPT0gIiN0ZXh0Iikgew0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgYW5jZXN0b3JzQW5kU2VsZiA9IEFuY2VzdG9yc0FuZFNlbGYoY2hpbGRyZW5Ob2Rlc1tqXSk7DQogICAgICAgICAgICB2YXIgeFBhdGhTb3VyY2UgPSBHZXRYcGF0aChhbmNlc3RvcnNBbmRTZWxmKTsNCg0KICAgICAgICAgICAgaWYgKHhwYXRoID09IHhQYXRoU291cmNlKSB7DQogICAgICAgICAgICAgICAgLy9hayBqZSBwcmVkY2hhZHphanVjaSBkZXN0aW5hdGlvbiB0byBpc3RlLCB0YWsgbmVzbWllIHZsb3ppdCBhbGUgYnVkZSBzYSBrbG9ub3ZhdA0KICAgICAgICAgICAgICAgIGlmIChjb250YWluc1ZhbHVlICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kRWxlbWVudCA9IEZpbmROb2RlKGNoaWxkcmVuTm9kZXNbal0sIHRlbXBsYXRlQ29udGFpbnNYUGF0aCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZEVsZW1lbnQgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGROb2RlID0gR2V0RmllbGROb2RlKGZvdW5kRWxlbWVudCk7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkTm9kZSA9PSBudWxsIHx8IGZpZWxkTm9kZS5ub2RlVmFsdWUuaW5kZXhPZihjb250YWluc1ZhbHVlKSA9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBmb3VuZE5vZGVzLnB1c2goY2hpbGRyZW5Ob2Rlc1tqXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZm91bmROb2RlczsNCiAgICB9DQoNCiAgICB2YXIgZmluYWxBcnJheSA9IG5ldyBBcnJheSgpOw0KICAgIHZhciBmaW5hbEV4aXN0aW5nRGVzdGluYXRpb24gPSBuZXcgQXJyYXkoKTsNCg0KICAgIHZhciBlbGVtZW50V2l0aENvbnN0YWlucyA9IEdldEVsZW1lbnRXaXRoQ29udGFpbnMoZGVzdGluYXRpb25Sb290Tm9kZSwgbm9kZVdpdGhDb250YWlucyk7DQogICAgdmFyIG11bHRpcGxlRWxlbWVudHMgPSBHZXRNdWx0aXBsZUVsZW1lbnRzKGRlc3RpbmF0aW9uUm9vdE5vZGUpOw0KDQogICAgdmFyIGFjdHVhbENoaWxkcmVuTm9kZXMgPSBuZXcgQXJyYXkoKTsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlUm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICBhY3R1YWxDaGlsZHJlbk5vZGVzLnB1c2goc291cmNlUm9vdE5vZGUuY2hpbGROb2Rlc1tpXSk7DQogICAgfQ0KDQogICAgdmFyIGluZGV4aXMgPSBuZXcgQXJyYXkoKTsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdGluYXRpb25Sb290Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGlmIChkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXNbaV0ubm9kZU5hbWUgPT0gIiN0ZXh0Iikgew0KICAgICAgICAgICAgY29udGludWU7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgaXNNdWx0aXBsZSA9IGZhbHNlOw0KICAgICAgICBmb3IgKHZhciBoID0gMDsgaCA8IG11bHRpcGxlRWxlbWVudHMubGVuZ3RoOyBoKyspIHsNCiAgICAgICAgICAgIGlmIChtdWx0aXBsZUVsZW1lbnRzW2hdID09IGRlc3RpbmF0aW9uUm9vdE5vZGUuY2hpbGROb2Rlc1tpXSkgew0KICAgICAgICAgICAgICAgIGlzTXVsdGlwbGUgPSB0cnVlOw0KDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgYW5jZXN0b3JzQW5kU2VsZkRlc3RpbmF0aW9uID0gQW5jZXN0b3JzQW5kU2VsZihkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICB2YXIgeFBhdGhEZXN0aW5hdGlvbiA9IEdldFhwYXRoKGFuY2VzdG9yc0FuZFNlbGZEZXN0aW5hdGlvbik7DQoNCiAgICAgICAgaWYgKGluZGV4aXNbeFBhdGhEZXN0aW5hdGlvbl0gPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICBpbmRleGlzW3hQYXRoRGVzdGluYXRpb25dID0gMDsNCiAgICAgICAgfQ0KDQogICAgICAgIGluZGV4aXNbeFBhdGhEZXN0aW5hdGlvbl0rKzsNCg0KICAgICAgICB2YXIgdGVtcGxhdGVDb250YWluc1ZhbHVlID0gbnVsbDsNCiAgICAgICAgdmFyIHRlbXBsYXRlQ29udGFpbnNYUGF0aCA9IG51bGw7DQoNCiAgICAgICAgLy9hayBqZSB0ZW1wbGF0b3Z5IGVsZW1lbnQgb3puYWNlbnksIHplIGJ1ZGUgbWF0IGFqIGNvbnRhaW5zDQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZWxlbWVudFdpdGhDb25zdGFpbnMubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgIGlmIChlbGVtZW50V2l0aENvbnN0YWluc1trXS5ub2RlID09IGRlc3RpbmF0aW9uUm9vdE5vZGUuY2hpbGROb2Rlc1tpXSkgew0KICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29udGFpbnNWYWx1ZSA9IGVsZW1lbnRXaXRoQ29uc3RhaW5zW2tdLmNvbnRhaW5zVmFsdWU7DQoNCiAgICAgICAgICAgICAgICAvL2FrIGplIGxlbiBuYSBrb25jaSB4cGF0aHUNCiAgICAgICAgICAgICAgICB2YXIgeHBhdGhJbkNvbnRhaW5zQ29uZGl0aW9ucyA9IGVsZW1lbnRXaXRoQ29uc3RhaW5zW2tdLmNvbnRhaW5zRWxlbWVudFhwYXRoOw0KICAgICAgICAgICAgICAgIHZhciBjb25uZWN0b3IgPSAiLyI7DQogICAgICAgICAgICAgICAgaWYgKHhwYXRoSW5Db250YWluc0NvbmRpdGlvbnMgPT0gJy4nKSB7DQogICAgICAgICAgICAgICAgICAgIHhwYXRoSW5Db250YWluc0NvbmRpdGlvbnMgPSAiIjsNCiAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yID0gIiI7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgdGVtcGxhdGVDb250YWluc1hQYXRoID0geFBhdGhEZXN0aW5hdGlvbiArIGNvbm5lY3RvciArIHhwYXRoSW5Db250YWluc0NvbmRpdGlvbnM7DQoNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vbmFqZGUgdnNldGt5IGVsZW1lbnR5LCBrdG9yZSBwcmlzbHVjaGFqdSB0ZW1wbGF0ZQ0KICAgICAgICB2YXIgZm91bmRCdXNpbmVzcyA9IEZpbmRBbGxOb2RlcyhhY3R1YWxDaGlsZHJlbk5vZGVzLCB4UGF0aERlc3RpbmF0aW9uLCB0ZW1wbGF0ZUNvbnRhaW5zVmFsdWUsIHRlbXBsYXRlQ29udGFpbnNYUGF0aCk7DQoNCiAgICAgICAgLy9hayBzYSBqZWRuYSBvIHZhcmlhbnR1LCB6ZSBqZSBlbGVtZW50IG9kbGlzZW55IHBvbW9jb3Uga29uc3RhbnR5LCBuaWUgY29udGFpbnMsIHRhayBzYSB6b2JlcmllIHBvZGxhIGluZGV4dQ0KICAgICAgICBpZiAoaXNNdWx0aXBsZSAmJiB0ZW1wbGF0ZUNvbnRhaW5zWFBhdGggPT0gbnVsbCkgew0KICAgICAgICAgICAgaWYgKGluZGV4aXNbeFBhdGhEZXN0aW5hdGlvbl0gPD0gZm91bmRCdXNpbmVzcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICB2YXIgdGVtcEZvdW5kQnVzaW5lc3MgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgICAgICAgICB0ZW1wRm91bmRCdXNpbmVzcy5wdXNoKGZvdW5kQnVzaW5lc3NbaW5kZXhpc1t4UGF0aERlc3RpbmF0aW9uXSAtIDFdKTsNCiAgICAgICAgICAgICAgICBmb3VuZEJ1c2luZXNzID0gdGVtcEZvdW5kQnVzaW5lc3M7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgdXNlZE5vZGVzID0gbmV3IEFycmF5KCk7DQoNCiAgICAgICAgLy96aXN0aSwga3RvcmUgbm9keSBzYSBwb3V6aWxpDQogICAgICAgIGZvciAodmFyIGggPSAwOyBoIDwgZm91bmRCdXNpbmVzcy5sZW5ndGg7IGgrKykgew0KICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBhY3R1YWxDaGlsZHJlbk5vZGVzLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgaWYgKGZvdW5kQnVzaW5lc3NbaF0gPT0gYWN0dWFsQ2hpbGRyZW5Ob2Rlc1trXSkgew0KICAgICAgICAgICAgICAgICAgICB1c2VkTm9kZXMucHVzaChhY3R1YWxDaGlsZHJlbk5vZGVzW2tdKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvL3ptYXplIG5vZHksIGt0b3JlIHV6IGJvbGkgcG91eml0ZQ0KICAgICAgICBpZiAodXNlZE5vZGVzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIHZhciBjbG9uZWRBY3R1YWxDaGlsZHJlbk5vZGVzID0gYWN0dWFsQ2hpbGRyZW5Ob2RlczsNCiAgICAgICAgICAgIGFjdHVhbENoaWxkcmVuTm9kZXMgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xvbmVkQWN0dWFsQ2hpbGRyZW5Ob2Rlcy5sZW5ndGg7IGwrKykgew0KICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOw0KDQogICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCB1c2VkTm9kZXMubGVuZ3RoOyBtKyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZWROb2Rlc1ttXSA9PSBjbG9uZWRBY3R1YWxDaGlsZHJlbk5vZGVzW2xdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsNCiAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ2hpbGRyZW5Ob2Rlcy5wdXNoKGNsb25lZEFjdHVhbENoaWxkcmVuTm9kZXNbbF0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChmb3VuZEJ1c2luZXNzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZm91bmRCdXNpbmVzcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIGZpbmFsQXJyYXkucHVzaChmb3VuZEJ1c2luZXNzW2tdKTsNCiAgICAgICAgICAgICAgICBmaW5hbEV4aXN0aW5nRGVzdGluYXRpb24ucHVzaChkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZmluYWxBcnJheS5wdXNoKGRlc3RpbmF0aW9uUm9vdE5vZGUuY2hpbGROb2Rlc1tpXS5jbG9uZU5vZGUodHJ1ZSkpOw0KICAgICAgICAgICAgZmluYWxFeGlzdGluZ0Rlc3RpbmF0aW9uLnB1c2goZGVzdGluYXRpb25Sb290Tm9kZS5jaGlsZE5vZGVzW2ldKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vZXN0ZSB0cmViYSBkbyBmaW5hbCBhcnJheSBwb3NsYXQgYWogb3N0YXRuZSBuZXByZWpkZW5lIGVsZW1lbnR5DQogICAgaWYgKGZpbmFsQXJyYXkubGVuZ3RoID09IDApIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8vem1heiBjZWxlIHBvbGUNCiAgICB3aGlsZSAoc291cmNlUm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7DQogICAgICAgIHNvdXJjZVJvb3ROb2RlLnJlbW92ZUNoaWxkKHNvdXJjZVJvb3ROb2RlLmNoaWxkTm9kZXNbMF0pOw0KICAgIH0NCg0KICAgIC8vbmFocmFqIGNoaWxkeSBuYW5vdm8NCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbmFsQXJyYXkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgc291cmNlUm9vdE5vZGUuYXBwZW5kQ2hpbGQoZmluYWxBcnJheVtpXSk7DQogICAgfQ0KDQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaW5hbEFycmF5Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgIEFkZE1pc3NpbmdFbGVtZW50cyhmaW5hbEFycmF5W2ldLCBmaW5hbEV4aXN0aW5nRGVzdGluYXRpb25baV0sIG5vZGVXaXRoQ29udGFpbnMpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gR2V0RW1wdHlOYXRpdmVUZW1wbGF0ZSgpIHsNCg0KICAgIHZhciBmb3JtSWQgPSBHZXRGb3JtSWQoKTsNCiAgICB2YXIgeG1sbnMgPSBHZXRNZXRhZGF0YU5hbWVzcGFjZSgpOw0KICAgIHZhciB4bWwgPSAnPCcgKyBmb3JtSWQgKyB4bWxucyArICc+JzsNCiAgICB2YXIgdXNlZFhtbE5hbWVzID0gbmV3IEFycmF5KCk7DQoNCiAgICBmdW5jdGlvbiBwcm9jZXNzSHRtbCgpIHsNCiAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpOw0KICAgICAgICB2YXIgbmFtZSA9ICduYW1lJzsNCiAgICAgICAgdmFyIGxheW91dFJvdyA9ICdsYXlvdXRSb3cnOw0KICAgICAgICB2YXIgZmlyc3RJbnB1dDsNCiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MobGF5b3V0Um93KSkgew0KICAgICAgICAgICAgZmlyc3RJbnB1dCA9IGVsZW1lbnQuY2hpbGRyZW4oImlucHV0OmZpcnN0Iik7DQogICAgICAgICAgICBpZiAoZmlyc3RJbnB1dC5hdHRyKG5hbWUpICE9ICdBdHRhY2htZW50cycpIHsNCiAgICAgICAgICAgICAgICB4bWwgKz0gJzwnICsgZmlyc3RJbnB1dC5hdHRyKG5hbWUpICsgJz4nOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGVsZW1lbnQuaXMoJzppbnB1dCcpKSB7DQogICAgICAgICAgICBpZiAoZWxlbWVudC5pcygnOmZpbGUnKSB8fCBlbGVtZW50LmlzKCc6YnV0dG9uJykgfHwgZWxlbWVudC5hdHRyKCdMb29rdXBEZXRhaWxJbmZvJykgPT0gInRydWUiKQ0KICAgICAgICAgICAgICAgIHJldHVybjsNCg0KICAgICAgICAgICAgaWYgKGVsZW1lbnQucGFyZW50KCkuaGFzQ2xhc3MobGF5b3V0Um93KSkNCiAgICAgICAgICAgICAgICByZXR1cm47DQoNCiAgICAgICAgICAgIHZhciBhdHRyID0gZWxlbWVudC5hdHRyKG5hbWUpOw0KICAgICAgICAgICAgaWYgKGF0dHIgIT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXR0ci5pbmRleE9mKHNpZ24pOw0KICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodXNlZFhtbE5hbWVzW2F0dHJdID09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGF0dHIucmVwbGFjZShkaXNhYmxlVmFsaWRhdG9yUHJlZml4LCAiIik7DQogICAgICAgICAgICAgICAgICAgICAgICB4bWwgKz0gJzwnICsgYXR0ciArICc+JyArICc8LycgKyBhdHRyICsgJz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFhtbE5hbWVzW2F0dHJdID0gIiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBlbGVtZW50LmNoaWxkcmVuKCkuZWFjaChwcm9jZXNzSHRtbCk7DQoNCiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MobGF5b3V0Um93KSkgew0KICAgICAgICAgICAgZmlyc3RJbnB1dCA9IGVsZW1lbnQuY2hpbGRyZW4oImlucHV0OmZpcnN0Iik7DQogICAgICAgICAgICBpZiAoZmlyc3RJbnB1dC5hdHRyKG5hbWUpICE9ICdBdHRhY2htZW50cycpIHsNCiAgICAgICAgICAgICAgICB4bWwgKz0gJzwvJyArIGZpcnN0SW5wdXQuYXR0cihuYW1lKSArICc+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgICQoJyNtYWluJykuY2hpbGRyZW4oJ2RpdicpLmVhY2gocHJvY2Vzc0h0bWwpOw0KDQogICAgeG1sICs9ICc8LycgKyBmb3JtSWQgKyAnPic7DQoNCiAgICByZXR1cm4geG1sOw0KfQ0KDQpmdW5jdGlvbiBGaWxsTG9va3VwKGVsZW1lbnQsIGxvb2t1cERldGFpbEluZm8sIGxvb2t1cEZpZWxkVmFsdWUpIHsNCiAgICB2YXIgbG9va3VwSXRlbXMgPSBudWxsOw0KICAgIHZhciBsb29rdXBVcmkgPSBHZXRMb29rdXBVcmkoKTsNCg0KICAgICQuYWpheCh7DQogICAgICAgIHR5cGU6ICJHRVQiLA0KICAgICAgICB1cmw6IEdldExvb2t1cFVyaSgpLA0KICAgICAgICBhc3luYzogZmFsc2UNCiAgICB9KS5kb25lKGZ1bmN0aW9uIChkYXRhKSB7DQogICAgICAgIGlmIChkYXRhICE9IG51bGwpIHsNCiAgICAgICAgICAgIGxvb2t1cEl0ZW1zID0gJC5wYXJzZUpTT04oZGF0YS5yZXBsYWNlKCIoIiwgIiIpLnJlcGxhY2UoIik7IiwgIiIpKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgaWYgKGxvb2t1cEl0ZW1zICE9IG51bGwgJiYgbG9va3VwSXRlbXMuYWFEYXRhICE9IG51bGwpIHsNCiAgICAgICAgdmFyIHJhbmRJbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxvb2t1cEl0ZW1zLmFhRGF0YS5sZW5ndGgpOw0KICAgICAgICB2YXIgcmFuZExvb2t1cEl0ZW0gPSBsb29rdXBJdGVtcy5hYURhdGFbcmFuZEluZGV4XTsNCg0KICAgICAgICBlbGVtZW50LnZhbChyYW5kTG9va3VwSXRlbVsxXSk7DQogICAgICAgIGxvb2t1cERldGFpbEluZm8udmFsKHJhbmRMb29rdXBJdGVtWzFdKTsNCiAgICAgICAgbG9va3VwRmllbGRWYWx1ZS52YWwocmFuZExvb2t1cEl0ZW1bMF0pOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gRmlsbFNwZWNpZmljSW5wdXQoZWxlbWVudCwgcnVsZXMsIGRhdGEpIHsNCiAgICB2YXIgcnVsZTsNCiAgICB2YXIgZmluYWxWYWx1ZSA9ICIiOw0KICAgIHZhciBySW5kZXggPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogZGF0YS5sZW5ndGgpKTsNCg0KICAgIGZvciAocnVsZSBpbiBydWxlcykgew0KICAgICAgICBpZiAocnVsZXMuaGFzT3duUHJvcGVydHkocnVsZSkpIHsNCiAgICAgICAgICAgIGlmIChydWxlID09ICJkYXRlIikgew0KICAgICAgICAgICAgICAgIHZhciBkYXRlVmFsdWUgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnZGQubW0ueXknLCBuZXcgRGF0ZSgpKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChydWxlLmluZGV4T2YoIlJlZ0V4IikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gIiI7DQogICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXR0cigiaWQiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVtYWlsIikgIT0gLTENCiAgICAgICAgICAgICAgICAgIHx8IGVsZW1lbnQuc2libGluZ3MoInNwYW4uWFBhdGhDbGFzcyIpLmh0bWwoKS5pbmRleE9mKCJJbnRlcm5ldEFkZHJlc3NbY29udGFpbnMoQWRkcmVzcywnQCcpXS9BZGRyZXNzIikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IGRhdGFbckluZGV4XSArICJAIiArIGRhdGFbckluZGV4XSArICIuY29tIjsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfSBlbHNlDQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmF0dHIoInRpdGxlIikudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ3ZWJvdsO6IGFkcmVzdSIpICE9IC0xDQogICAgICAgICAgICAgICAgICAgICAgfHwgZWxlbWVudC5zaWJsaW5ncygic3Bhbi5YUGF0aENsYXNzIikuaHRtbCgpLmluZGV4T2YoIkludGVybmV0QWRkcmVzc1tub3QoY29udGFpbnMoQWRkcmVzcywnQCcpKV0vQWRkcmVzcyIpICE9IC0xKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gZGF0YVtySW5kZXhdICsgIi5jb20iOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXR0cigidGl0bGUiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIsSNw61zbG8gdGVsZWbDs251IikgIT0gLTENCiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWxlbWVudC5zaWJsaW5ncygic3Bhbi5YUGF0aENsYXNzIikuaHRtbCgpLmluZGV4T2YoIlRlbGVwaG9uZUFkZHJlc3MvTnVtYmVyL0Zvcm1hdHRlZE51bWJlciIpICE9IC0xKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9ICIrNDIxIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSA4OyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmROdW1iZXIgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogMTApKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmF0dHIoInRpdGxlIikudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJpxI1vIikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gNzsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZE51bWJlciA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAxMCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hdHRyKCJ0aXRsZSIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZGnEjSIpICE9IC0xDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVsZW1lbnQuYXR0cigidGl0bGUiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoInJvZG7DqSDEjcOtc2xvIikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDk7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5kTnVtYmVyID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDEwKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXR0cigidGl0bGUiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoInBvxaF0b3bDqSBzbWVyb3ZhY2llIMSNw61zbG8iKSAhPSAtMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlbGVtZW50LnNpYmxpbmdzKCJzcGFuLlhQYXRoQ2xhc3MiKS5odG1sKCkuaW5kZXhPZigiRGVsaXZlcnlBZGRyZXNzL1Bvc3RhbENvZGUiKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDQ7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZE51bWJlciA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAxMCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlICs9IHJhbmROdW1iZXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXR0cigidGl0bGUiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImnEjSBkcGgiKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gIlNLIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gOTsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZE51bWJlciA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAxMCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygieHNkX2RlY2ltYWwiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmROdW1iZXIgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogMTAwKSArIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9maW5hbFZhbHVlID0gInJlZ2V4IjsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChydWxlID09ICJtaW5sZW5ndGgiKSB7DQogICAgICAgICAgICAgICAgdmFyIHJhbmRvbVZhbHVlID0gZGF0YVtySW5kZXhdOw0KICAgICAgICAgICAgICAgIHZhciBtaW5MZW5ndGggPSBwYXJzZUludChydWxlcy5taW5sZW5ndGgpOw0KDQogICAgICAgICAgICAgICAgd2hpbGUgKHJhbmRvbVZhbHVlLmxlbmd0aCA8IG1pbkxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICByYW5kb21WYWx1ZSArPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogMTApKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHJhbmRvbVZhbHVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHJ1bGUgPT0gIm1heGxlbmd0aCIpIHsNCiAgICAgICAgICAgICAgICB2YXIgcmFuZG9tVmFsdWUgPSBkYXRhW3JJbmRleF07DQogICAgICAgICAgICAgICAgdmFyIG1heExlbmd0aCA9IHBhcnNlSW50KHJ1bGVzLm1heGxlbmd0aCk7DQoNCiAgICAgICAgICAgICAgICBpZiAocmFuZG9tVmFsdWUubGVuZ3RoIDw9IG1heExlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gcmFuZG9tVmFsdWU7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHJhbmRvbVZhbHVlLnN1YnN0cmluZygwLCBtYXhMZW5ndGgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChlbGVtZW50LmF0dHIoInRpdGxlIikudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJwb8WhdG92w6kgc21lcm92YWNpZSDEjcOtc2xvIikgIT0gLTENCiAgICAgICAgICAgICAgfHwgZWxlbWVudC5zaWJsaW5ncygic3Bhbi5YUGF0aENsYXNzIikuaHRtbCgpLmluZGV4T2YoIkRlbGl2ZXJ5QWRkcmVzcy9Qb3N0YWxDb2RlIikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gIiI7DQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gNDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciByYW5kTnVtYmVyID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDEwKSk7DQogICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUgKz0gcmFuZE51bWJlcjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBlbGVtZW50LnZhbChmaW5hbFZhbHVlKS5jaGFuZ2UoKTsNCn0NCg0KZnVuY3Rpb24gRmlsbEZvcm0oKSB7DQogICAgLy8gcmFuZG9tIGNsaWNrIHRsYcSNaWRsYSBQcmlkYcWlICAgICAgICAgDQoNCiAgICB2YXIgZWxlbWVudHMgPSAkKCJpbnB1dDpyYWRpbywgaW5wdXQ6Y2hlY2tib3gsIHNlbGVjdCwgaW5wdXQ6dGV4dCwgdGV4dGFyZWEiKTsNCiAgICB2YXIgZGF0YSA9IFsibG9yZW0iLCAiaXBzdW0iLCAiZG9sb3IiLCAic2l0IiwgImFtZXQiLCAiY29uc2VjdGV0dXIiLCAiYWRpcGlzY2luZyIsICJlbGl0IiwgInV0IiwgImFsaXF1YW0iLCAicHVydXMiLCAic2l0IiwgImFtZXQiLCAibHVjdHVzIiwgInZlbmVuYXRpcyIsICJsZWN0dXMiLCAibWFnbmEiLCAiZnJpbmdpbGxhIiwgInVybmEiLCAicG9ydHRpdG9yIiwgInJob25jdXMiLCAiZG9sb3IiLCAicHVydXMiLCAibm9uIiwgImVuaW0iLCAicHJhZXNlbnQiLCAiZWxlbWVudHVtIiwgImZhY2lsaXNpcyIsICJsZW8iLCAidmVsIiwgImZyaW5naWxsYSIsICJlc3QiLCAidWxsYW1jb3JwZXIiLCAiZWdldCIsICJudWxsYSIsICJmYWNpbGlzaSIsICJldGlhbSIsICJkaWduaXNzaW0iLCAiZGlhbSIsICJxdWlzIiwgImVuaW0iLCAibG9ib3J0aXMiLCAic2NlbGVyaXNxdWUiLCAiZmVybWVudHVtIiwgImR1aSIsICJmYXVjaWJ1cyIsICJpbiIsICJvcm5hcmUiLCAicXVhbSIsICJ2aXZlcnJhIiwgIm9yY2kiLCAic2FnaXR0aXMiLCAiZXUiLCAidm9sdXRwYXQiLCAib2RpbyIsICJmYWNpbGlzaXMiLCAibWF1cmlzIiwgInNpdCIsICJhbWV0IiwgIm1hc3NhIiwgInZpdGFlIiwgInRvcnRvciIsICJjb25kaW1lbnR1bSIsICJsYWNpbmlhIiwgInF1aXMiLCAidmVsIiwgImVyb3MiLCAiZG9uZWMiLCAiYWMiLCAib2RpbyIsICJ0ZW1wb3IiLCAib3JjaSIsICJkYXBpYnVzIiwgInVsdHJpY2VzIiwgImluIiwgImlhY3VsaXMiLCAibnVuYyIsICJzZWQiLCAiYXVndWUiLCAibGFjdXMiLCAidml2ZXJyYSIsICJ2aXRhZSIsICJjb25ndWUiLCAiZXUiLCAiY29uc2VxdWF0IiwgImFjIiwgImZlbGlzIiwgImRvbmVjIiwgImV0IiwgIm9kaW8iLCAicGVsbGVudGVzcXVlIiwgImRpYW0iLCAidm9sdXRwYXQiLCAiY29tbW9kbyIsICJzZWQiLCAiZWdlc3RhcyIsICJlZ2VzdGFzIiwgImZyaW5naWxsYSIsICJwaGFzZWxsdXMiLCAiZmF1Y2lidXMiLCAic2NlbGVyaXNxdWUiLCAiZWxlaWZlbmQiLCAiZG9uZWMiLCAicHJldGl1bSIsICJ2dWxwdXRhdGUiLCAic2FwaWVuIiwgIm5lYyIsICJzYWdpdHRpcyIsICJhbGlxdWFtIiwgIm1hbGVzdWFkYSIsICJiaWJlbmR1bSIsICJhcmN1IiwgInZpdGFlIiwgImVsZW1lbnR1bSJdOw0KICAgIHZhciBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7DQoNCiAgICBlbGVtZW50cy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpOw0KICAgICAgICBpZiAoZWxlbWVudC5pcygiOnZpc2libGUiKSAmJiAhZWxlbWVudC5pcygiOmRpc2FibGVkIikgJiYgZWxlbWVudC5hdHRyKCJyZWFkb25seSIpICE9ICJyZWFkb25seSIpIHsNCiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSAncmFkaW8nOiB7DQogICAgICAgICAgICAgICAgICAgIHZhciBlbGVtTmFtZSA9IGVsZW1lbnQuYXR0cigibmFtZSIpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgYWxsUmIgPSAkKCJbbmFtZT0nIiArIGVsZW1OYW1lICsgIiddIik7DQogICAgICAgICAgICAgICAgICAgIGlmICghYWxsUmIuaXMoIjpjaGVja2VkIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5kSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhbGxSYi5sZW5ndGgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmIuZXEocmFuZEluZGV4KS5jbGljaygpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6IHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmRDaGVjayA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygieHNkX3JlcXVpcmVkIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRDaGVjayA9IDE7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmRDaGVjayAmJiAhZWxlbWVudC5pcygiOmNoZWNrZWQiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGljaygpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3Qtb25lJzogew0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pcygiOmJsYW5rIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gZWxlbWVudC5maW5kKCJvcHRpb24iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5kSW5kZXggPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogKG9wdGlvbnMubGVuZ3RoIC0gMSkpICsgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zLmVxKHJhbmRJbmRleCkudmFsKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbChzZWxlY3RlZE9wdGlvbikuY2hhbmdlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3RleHQnOiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlzKCI6YmxhbmsiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoInJlbW90ZUxvb2t1cCIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cERldGFpbEluZm8gPSBlbGVtZW50LnNpYmxpbmdzKCIuTG9va3VwRGV0YWlsSW5mbyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZFZhbHVlSWQgPSBlbGVtZW50LmF0dHIoImlkIikgKyAiSXRlbU5hbWUiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rdXBGaWVsZFZhbHVlID0gJCgiW2lkPSciICsgZmllbGRWYWx1ZUlkICsgIiddIik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxsTG9va3VwKGVsZW1lbnQsIGxvb2t1cERldGFpbEluZm8sIGxvb2t1cEZpZWxkVmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxsU3BlY2lmaWNJbnB1dChlbGVtZW50LCBlbGVtZW50LnJ1bGVzKCksIGRhdGEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXMoIjpibGFuayIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZExlbmd0aCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiBkYXRhTGVuZ3RoIC0gMSkgKyAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW5TdHJpbmcgPSAiIjsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcmFuZExlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmRJbmRleCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiBkYXRhTGVuZ3RoIC0gMSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuU3RyaW5nID0gZGF0YVtyYW5kSW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlblN0cmluZyArPSAiICIgKyBkYXRhW3JhbmRJbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbChnZW5TdHJpbmcpLmNoYW5nZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KLyogXV0+ICovDQo8L3NjcmlwdD4NCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8qIDwhW0NEQVRBWyAqLw0KJChkb2N1bWVudCkucmVhZHkoSW5pdE11bHRpcGxlTGluZUxhYmVsU3R5bGUpOw0KDQpmdW5jdGlvbiBJbml0TXVsdGlwbGVMaW5lTGFiZWxTdHlsZSgpIHsNCiAgICAkKGRvY3VtZW50KS5maW5kKCJsYWJlbC5maWVsZExhYmVsLHNwYW4uZmllbGRMYWJlbCIpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWxlbWVudCA9ICQodGhpcyk7DQogICAgICAgIHZhciBsaW5lcyA9IChlbGVtZW50LmhlaWdodCgpIC8gMzQpOw0KICAgICAgICBpZiAobGluZXMgPiAxKSB7DQogICAgICAgICAgICB2YXIgbWFyZ2luQm90dG9tID0gNSAqIChsaW5lcyAtIDEpOw0KICAgICAgICAgICAgdmFyIG5ld1N0eWxlID0gZWxlbWVudC5hdHRyKCJzdHlsZSIpICsgIjsgbWFyZ2luLWJvdHRvbTogIiArIG1hcmdpbkJvdHRvbS50b1N0cmluZygpICsgInB4OyI7DQogICAgICAgICAgICBlbGVtZW50LmF0dHIoInN0eWxlIiwgbmV3U3R5bGUpOw0KICAgICAgICB9DQogICAgfSk7DQp9DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkJdmFyIHByb2plY3RUeXBlID0gJ1VQVlMnOw0KCQkJCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCgkJCSQoIiNjYW5jZWxGb3JtIikuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkJCUNhbmNlbEZvcm0oKTsNCgkJCX0pOw0KDQoJCQkkKCIjdmFsaWRhdGVGb3JtIikuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkJCVZhbGlkYXRlRm9ybSgpOw0KCQkJfSk7DQoNCgkJCSQoIiNjbGVhckZvcm0iKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJCQkJQ2xlYXJGb3JtKHRoaXMuZm9ybSk7DQoJCQl9KTsNCg0KCQkJJCgiI2xvYWRGb3JtWG1sIikuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkJCUxvYWRGcm9tRmlsZSgpOw0KCQkJfSk7DQoNCgkJCSQoIiNzYXZlVG9YbWwiKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJCQkJU2F2ZVhtbEFzKCk7DQoJCQl9KTsNCgkJfSk7DQoJCQ0KCQkNCgkJCQkJLyogPCFbQ0RBVEFbICovDQoJCQ0KCQkNCgkJDQoJCQ0KCQlmdW5jdGlvbiBHZXRFeHRlcm5hbFJlc291cmNlSW5kZXgocmVzb3VyY2V0eXBlKSB7DQogIHN3aXRjaCAocmVzb3VyY2V0eXBlKSB7DQogICAgZGVmYXVsdDoNCiAgICAgIHJldHVybiBudWxsOw0KICB9DQogIHJldHVybiBudWxsOw0KfQ0KZnVuY3Rpb24gR2V0RXh0ZXJuYWxSZXNvdXJjZShyZXNvdXJjZXR5cGUsIGluZGV4KSB7DQogIHN3aXRjaCAocmVzb3VyY2V0eXBlKSB7DQogICAgZGVmYXVsdDoNCiAgICAgIHJldHVybiBudWxsOw0KICB9DQogIHJldHVybiBudWxsOw0KfQ0KDQoJCWZ1bmN0aW9uIFNldERlZmF1bHRWYWx1ZShrZXksIHZhbHVlKSB7DQogIGlmICh2YWx1ZSA9PSAnJyB8fCBrZXkgPT0gJycpIHsNCiAgICByZXR1cm47DQoJfQ0KfQ0KZnVuY3Rpb24gR2V0RGVmYXVsdFZhbHVlKCkgew0KICB2YXIgcmV0U3RyaW5nID0gJyc7DQogIHJldHVybiByZXRTdHJpbmc7DQp9DQoNCgkJCQlmdW5jdGlvbiBJbml0Q29uZGl0aW9uYWxSdWxlcyhjb250ZXh0LCBzaWQpIHsNCgkJCWlmIChzaWQgPT0gbnVsbCkgew0KDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KCQkJfQ0KCQl9DQoJCQkJCQkNCg0KCQl2YXIgdmFsaWRhdG9yT2JqZWN0ID0gbnVsbDsNCgkJDQoJCWZ1bmN0aW9uIEluaXRWYWxpZGF0aW9uKCkgew0KCQkJdmFsaWRhdG9yT2JqZWN0ID0gJCgiI2VGb3JtX2VHb3ZfMDBfUE8iKS52YWxpZGF0ZSh7DQoJCQkJCQkJZXJyb3JMYWJlbENvbnRhaW5lcjogJCgiI2Vycm9yc0NvbnRhaW5lciIpLA0KCQkJCXdyYXBwZXI6ICJsaSIsDQoJCQkJb25rZXl1cDogZmFsc2UsDQoJCQkJb25jbGljazogZmFsc2UsDQoJCSAgICAgICAgaWdub3JlOiAiLmRpc2FibGVWYWxpZGF0b3JzIiwNCgkJCQkJCQkJcnVsZXM6IHsNCgkJCSAgCQkNCg0KDQoNCg0KDQoNCg0KWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCg0KWmlhZGF0ZWxQT0RldGFpbFBPSUNPIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNCg0KWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNClppYWRhdGVsUE9TdGF0dXRhckZ1bmtjaWEgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCg0KWmlhZGF0ZWxQT1N0YXR1dGFyUHJpZXp2aXNrb19GYW1pbHlOYW1lIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQpaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCg0KDQpaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiA1DQp9LA0KDQoNCg0KDQoNCg0KDQoNCg0KDQpaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiA1DQp9LA0KDQoNCkRvcG5lbmllUG9kYW5pYUlkIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQpEb3BsbmVuaWVQb2RhbmlhUHJlZG1ldCA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KRG9wbG5lbmllUG9kYW5pYVBvcGlzIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNCk9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfQ0KCQkJICAJfSwNCgkJCQltZXNzYWdlczogewkJCQ0KCQkJICAgCQkNCg0KDQoNCg0KDQoNCg0KWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1RlbGVmw7NubmUgxI3DrXNsbycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNClppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnT2JjaG9kbsOpIG1lbm8nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpaaWFkYXRlbFBPRGV0YWlsUE9JQ08gOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnScSMTycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNCg0KWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnTWVubycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0Z1bmtjaWEnIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpaaWFkYXRlbFBPU3RhdHV0YXJQcmllenZpc2tvX0ZhbWlseU5hbWUgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnUHJpZXp2aXNrbycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNClppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1VsaWNhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNClppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eSA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdPYmVjJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCg0KDQpaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdTw7pwLsSNLicgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNClppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSA6DQp7DQptYXhsZW5ndGg6ICJNYXhpbcOhbG5hIGTEusW+a2EgcG9sb8W+a3kgJ1BTxIwnIG11c8OtIGJ5xaU6IDUgem5ha292Ig0KfSwNCg0KDQoNCg0KDQoNCg0KDQoNCg0KWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogIk1heGltw6FsbmEgZMS6xb5rYSBwb2xvxb5reSAnUFPEjCcgbXVzw60gYnnFpTogNSB6bmFrb3YiDQp9LA0KDQoNCkRvcG5lbmllUG9kYW5pYUlkIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0lkZW50aWZpa8OhdG9yIHDDtHZvZG7DqWhvIHBvZGFuaWEnIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KRG9wbG5lbmllUG9kYW5pYVByZWRtZXQgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnUHJlZG1ldCcgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpEb3BsbmVuaWVQb2RhbmlhUG9waXMgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnUG9waXMgcG9kYW5pYScgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNCk9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICfFvWlhZGF0ZcS+IGFrbyBkb3RrbnV0w6Egb3NvYmEsIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpzUgcMOtc20uIGEpIGEgwqcgMTQgesOha29uYSDEjS4gMTgvMjAxOCBaLiB6LiDigJMg4oCeWsOha29uIG8gb2NocmFuZSBvc29ibsO9Y2ggw7pkYWpvdiBhIG8gem1lbmUgYSBkb3BsbmVuw60gbmlla3RvcsO9Y2ggesOha29ub3YgKMSPYWxlaiBsZW4g4oCeesOha29u4oCcKSwgcG8gcHJlZGNow6FkemFqw7pjb20gb2Jvem7DoW1lbsOtIHNhIHMgaW5mb3Jtw6FjaWFtaSBwb2TEvmEgdXN0LiAxOSBaw6FrLiDEjS4gMTgvMjAxOCBaLiB6LiBuYSBzdHLDoW5rZSBlbGVrdHJvbmlja2VqIHNsdcW+YnkgeiBrdG9yZWogYm9sIHRlbnRvIGZvcm11bMOhciBvdHZvcmVuw70sIG9kb3NsYW7DrW0gdG9odG8gZWxla3Ryb25pY2vDqWhvIGZvcm11bMOhcmEgYSBzYW1vc3RhdG7DvW0gcG90dnJkZW7DrW0gdiB0ZWp0byBrb2zDs25rZSwgcG9za3l0dWplIE1lc3R1IFBlemlub2ssIGFrbyBwcmV2w6FkemtvdmF0ZcS+b3ZpLCBzw7pobGFzIHNvIHNwcmFjb3ZhbsOtbSBvc29ibsO9Y2ggw7pkYWpvdiB1dmVkZW7DvWNoIG5hIHRvbXRvIGVsZWt0cm9uaWNrb20gZm9ybXVsw6FyaSBhIHYgamVobyBwcsOtbG9ow6FjaC4gxb1pYWRhdGXEviBwb3NreXR1amUgdGlldG8gw7pkYWplIHphIMO6xI1lbG9tIGJlenBlxI1uZWogYSB6w6FtZW51IHZ5bHXEjXVqw7pjZWogaWRlbnRpZmlrw6FjaWUgZG90a251dGVqIG9zb2J5IHYgcHJlZG1ldG5laiDFvmlhZG9zdGkgKHBvZGFuw60pIGEgamVqIG7DoXNsZWRuw6kgc3ByYWNvdmFuaWUgeiB6bXlzbGUgesOha29uYSBhIHByw61zbHXFoW7DvWNoIG5hcmlhZGVuw60gdGFrLCBha28gamUgdG8gdXZlZGVuw6kgbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LiBEb2JhIHBsYXRub3N0aSBzw7pobGFzdSBzYSB2aWHFvmUgbmEgZG9idSB0cnZhbmlhIMO6xI1lbHUgc3ByYWPDunZhbmlhIHRvaHRvIHBvZGFuaWEgYSBzw7p2aXNpYWNpY2ggw7prb25vdiB2IHpteXNsZSBwcmVkbWV0bmVqIGxlZ2lzbGF0w612eS4gxb1pYWRhdGXEviBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIGtlZHlrb8S+dmVrIG9kdm9sYcWlIGZvcm1vdSBlbGVrdHJvbmlja8OpaG8gcG9kYW5pYSBWxaFlb2JlY25laiBhZ2VuZHkgbWVzdGEgYWxlYm8gaW7DvW0gcmVsZXZhbnRuw71tIHNww7Rzb2JvbSBwcmV1a8OhemF0ZcS+bmUgZG9ydcSNZW7DvW0gbWVzdHUuJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0JICAJDQoJCQkgIAl9DQoJCQl9KTsNCgkgIAl9DQoJLyogXV0+ICovDQoJCQk8L3NjcmlwdD4NCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCQkuaW5mb0ljb24ge2Rpc3BsYXk6bm9uZTt9DQoubG9nbyBpbWcge3dpZHRoOjg2cHg7IGhlaWdodDoxMDBweDt9DQouTGFiZWxCb2xkIGxhYmVsIHtmb250LXdlaWdodDogYm9sZDt9DQpib2R5IHtmb250LWZhbWlseTogVmVyZGFuYTtmb250LXNpemU6IDE2cHg7fQ0KLlZlY05hem92RnJtIHtmb250LXNpemU6MjZweDtmb250LXdlaWdodDpib2xkO3RleHQtYWxpZ246IGNlbnRlcjt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO30NCi5IZWFkZXJOYXpvdl9pbnRlcm5hbHt3aWR0aDo1MDBweDt9LlppYWRhdGVsUE9Lb250YWt0RW1haWxBZHJlc2FfaW50ZXJuYWx7d2lkdGg6MjIwcHg7fS5aaWFkYXRlbFBPRGV0YWlsTmF6b3ZfQ29ycG9yYXRlQm9keUZ1bGxOYW1lX2ludGVybmFse3dpZHRoOjIwMHB4O30uWmlhZGF0ZWxQT0RldGFpbFBPSUNPX2ludGVybmFse3dpZHRoOjEwMHB4O30uWmlhZGF0ZWxQT0RldGFpbElDRFBIX2ludGVybmFse3dpZHRoOjEwMHB4O30uWmlhZGF0ZWxQT0RldGFpbERJQ19pbnRlcm5hbHt3aWR0aDoxMDBweDt9LlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXhfaW50ZXJuYWx7d2lkdGg6NjBweDt9LlppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeF9pbnRlcm5hbHt3aWR0aDo2MHB4O30uWmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5X2ludGVybmFse3dpZHRoOjExMHB4O30uWmlhZGF0ZWxQT0FkcmVzYVN0YXRfQ291bnRyeV9pbnRlcm5hbHt3aWR0aDoxMTBweDt9LlppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdF9pbnRlcm5hbHt3aWR0aDoxNDBweDt9LlppYWRhdGVsUE9BZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWx7d2lkdGg6MTEwcHg7fS5aaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGVfaW50ZXJuYWx7d2lkdGg6NTBweDt9LlppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXJfaW50ZXJuYWx7d2lkdGg6NTBweDt9LlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWx7d2lkdGg6MTEwcHg7fS5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFse3dpZHRoOjExMHB4O30uWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5X2ludGVybmFse3dpZHRoOjExMHB4O30uWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0X2ludGVybmFse3dpZHRoOjE0MHB4O30uWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXJfaW50ZXJuYWx7d2lkdGg6NTBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbHt3aWR0aDoxMTBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXJfaW50ZXJuYWx7d2lkdGg6NTBweDt9LlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eV9pbnRlcm5hbHt3aWR0aDoxMTBweDt9LkRvcGxuZW5pZVBvZGFuaWFQb3Bpc19pbnRlcm5hbHt3aWR0aDo3NjBweDt9LkRvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZV9pbnRlcm5hbHt3aWR0aDo3NjBweDt9Lk5vdGlmaWthY2llWmFzaWVsYW5pZV9pbnRlcm5hbHt3aWR0aDo4MHB4O30uUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1X2ludGVybmFse3dpZHRoOjgwcHg7fS5WeXN0dXBLb250YWt0X2ludGVybmFse3dpZHRoOjIzNXB4O30NCgk8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQoJPG5vc2NyaXB0PjxwIGNsYXNzPSJub3NjcmlwdCI+UHJlIGtvbXBsZXRuw7ogZnVua8SNbm9zxaUgYXBsaWvDoWNpZSBqZSBwb3RyZWJuw6kgcG92b2xpxaUgSmF2YVNjcmlwdDwvcD48L25vc2NyaXB0Pg0KCTxkaXYgaWQ9ImVycm9yc0NvbnRhaW5lckRpdiIgY2xhc3M9ImVycm9yc0NvbnRhaW5lckRpdiI+IDx1bCBpZD0iZXJyb3JzQ29udGFpbmVyIiBjbGFzcz0iZXJyb3JzQ29udGFpbmVyIj48bGk+PC9saT48L3VsPiA8L2Rpdj4NCgk8Zm9ybSBpZD0iZUZvcm1fZUdvdl8wMF9QTyIgYWN0aW9uPSIiPg0KCQk8ZGl2IGlkPSJtYWluIiBjbGFzcz0ibGF5b3V0TWFpbiB1aS13aWRnZXQtY29udGVudCI+CQ0KCQkJCQkJIA0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc2OSIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgbm9jYXB0aW9uICIgdGl0bGU9IiI+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFPYmVjIj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3NjkiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM3MiIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgc3R5bGU9IndpZHRoOjEyMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDYyIiBjbGFzcz0iY2VsbCAgbG9nbyI+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW1nIHNyYz0iaHR0cDovL3d3dy5wZXppbm9rLnNrL3VwbG9hZGZpbGVzL0ltYWdlL29fbWVzdGUvZXJiLmdpZiIgYWx0PSIiIHRpdGxlPSIiPjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzNzMiIGNsYXNzPSJjb2x1bW4gIiBzdHlsZT0id2lkdGg6NDgwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNjMiIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQgYm9keSI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19Nc1UiIHN0eWxlPSJ3aWR0aDo0ODBweDsiPk1lc3RvIFBlemlub2s6IE1lc3Rza8O9IMO6cmFkIFBlemlub2ssIFJhZG5pxI1uw6kgbsOhbWVzdGllIDcsIDkwMiAxNCBQZXppbm9rIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjxpbnB1dCBpZD0iT2JlY19Nc1UiIG5hbWU9Ik9iZWNfTXNVIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjM0MCIgYWx0PSIiIHZhbHVlPSJNZXN0c2vDvSDDunJhZCBQZXppbm9rLCBSYWRuacSNbsOpIG7DoW1lc3RpZSA3LCA5MDIgMTQgUGV6aW5vayI+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2NCIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19UZWxlZm9uIiBzdHlsZT0id2lkdGg6NDgwcHg7Ij5UZWxlZsOzbjogMDMzLzY5MDEgMTEzIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjxpbnB1dCBpZD0iT2JlY19UZWxlZm9uIiBuYW1lPSJPYmVjX1RlbGVmb24iIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTUwIiBhbHQ9IiIgdmFsdWU9IjAzMy82OTAxIDExMyI+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA2NSIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19XZWIiIHN0eWxlPSJ3aWR0aDo0ODBweDsiPldFQjogd3d3LnBlemlub2suc2sgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX1dlYiIgbmFtZT0iT2JlY19XZWIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiBhbHQ9IiIgdmFsdWU9Ind3dy5wZXppbm9rLnNrIj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzNzQiIGNsYXNzPSJjb2x1bW4gIiBzdHlsZT0id2lkdGg6MjIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNjciIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfSUNPIiBzdHlsZT0id2lkdGg6MjIwcHg7Ij5JxIxPOiAwMDMwNTAyMiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj48aW5wdXQgaWQ9Ik9iZWNfSUNPIiBuYW1lPSJPYmVjX0lDTyIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMDAiIGFsdD0iIiB2YWx1ZT0iMDAzMDUwMjIiPg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNjgiIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfRElDIiBzdHlsZT0id2lkdGg6MjIwcHg7Ij5EScSMOiAyMDIwNjYyMjI2IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjxpbnB1dCBpZD0iT2JlY19ESUMiIG5hbWU9Ik9iZWNfRElDIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgYWx0PSIiIHZhbHVlPSIyMDIwNjYyMjI2Ij4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDY2IiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJPYmVjX0VtYWlsIiBzdHlsZT0id2lkdGg6MjIwcHg7Ij5FLW1haWw6IGluZm9ybWFjaWVAbXN1cGV6aW5vay5zayA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj48aW5wdXQgaWQ9Ik9iZWNfRW1haWwiIG5hbWU9Ik9iZWNfRW1haWwiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiBhbHQ9IiIgdmFsdWU9ImluZm9ybWFjaWVAbXN1cGV6aW5vay5zayI+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQkJCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc3MSIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgbm9jYXB0aW9uICIgdGl0bGU9IiI+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFIZWFkZXIiPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3MSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzc2IiBjbGFzcz0iY29sdW1uIGZpcnN0Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNzEiIGNsYXNzPSJjZWxsICBWZWNOYXpvdkZybSI+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgc3R5bGU9IndpZHRoOjg1MHB4OyI+RG9wbG5lbmllIHBvZGFuaWEgLSBQTyAgPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJCQkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzIiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgIE5lem9icmF6b3ZhdEluZm9Ja29udVJlbW90ZUxvb2t1cCAiIHRpdGxlPSIiPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5Ij4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IsW9aWFkYXRlxL4gLSBQcsOhdm5pY2vDoSBvc29iYSAvIFBvZG5pa2F0ZcS+Ij7FvWlhZGF0ZcS+IC0gUHLDoXZuaWNrw6Egb3NvYmEgLyBQb2RuaWthdGXEvgkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3NzIiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM3NyIgY2xhc3M9ImNvbHVtbiBmaXJzdCI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDc2IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkgDQoJCTxkaXYgaWQ9ImxheW91dFJvdzE1Nzc0IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiB0aXRsZT0iIj4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keSI+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1Nzc0IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODAiIGNsYXNzPSJjb2x1bW4gZmlyc3QiIHN0eWxlPSJ3aWR0aDo0MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA3NyIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRGV0YWlsTmF6b3ZfQ29ycG9yYXRlQm9keUZ1bGxOYW1lIiBzdHlsZT0id2lkdGg6MTI1cHg7Ij5PYmNob2Ruw6kgbWVubyA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxOYXpvdl9Db3Jwb3JhdGVCb2R5RnVsbE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0RldGFpbE5hem92X0NvcnBvcmF0ZUJvZHlGdWxsTmFtZV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjIwMCIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPYmNob2Ruw6kgbWVubyIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDc4IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIHN0eWxlPSJ3aWR0aDoxMjVweDsiPlBsYXRjYSBEUEggIDxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5WeWJlcnRlIGplZG51IHogbW/Fvm5vc3TDrS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj48L3NwYW4+PGZpZWxkc2V0PjxsZWdlbmQ+PC9sZWdlbmQ+PGRpdiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIj48c3Bhbj48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCAiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9IsOBbm8iIHZhbHVlPSLDgW5vIj48bGFiZWwgZm9yPSJaaWFkYXRlbFBPRGV0YWlsUGxhdGNhRFBIIiBjbGFzcz0ib3B0aW9uTGFiZWwiPsOBbm88L2xhYmVsPjwvc3Bhbj48c3Bhbj48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEhQb3N0Zml4TGlzdDEiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxQbGF0Y2FEUEgiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCAiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9Ik5pZSIgdmFsdWU9Ik5pZSI+PGxhYmVsIGZvcj0iWmlhZGF0ZWxQT0RldGFpbFBsYXRjYURQSFBvc3RmaXhMaXN0MSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5OaWU8L2xhYmVsPjwvc3Bhbj48L2Rpdj48L2ZpZWxkc2V0PgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM4MSIgY2xhc3M9ImNvbHVtbiAiIHN0eWxlPSJ3aWR0aDoyMjBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA3OSIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRGV0YWlsUE9JQ08iIHN0eWxlPSJ3aWR0aDo2MHB4OyI+ScSMTyA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxQT0lDTyIgbmFtZT0iWmlhZGF0ZWxQT0RldGFpbFBPSUNPIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9EZXRhaWxQT0lDT19pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJJxIxPIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODAiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RldGFpbElDRFBIIiBzdHlsZT0id2lkdGg6NjBweDsiPknEjCBEUEggPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxJQ0RQSCIgbmFtZT0iWmlhZGF0ZWxQT0RldGFpbElDRFBIIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9EZXRhaWxJQ0RQSF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJJxIwgRFBIIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM4MiIgY2xhc3M9ImNvbHVtbiAiIHN0eWxlPSJ3aWR0aDoxODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4MSIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRGV0YWlsRElDIiBzdHlsZT0id2lkdGg6MjBweDsiPkRJxIwgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9EZXRhaWxESUMiIG5hbWU9IlppYWRhdGVsUE9EZXRhaWxESUMiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0RldGFpbERJQ19pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJEScSMIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODgiIGNsYXNzPSJjZWxsICI+CQkNCgkJCSANCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzYiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgdGl0bGU9IiI+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcyI+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJBZHJlc2EgLSBTw61kbG8gLyBNaWVzdG8gcG9kbmlrYW5pYSI+QWRyZXNhIC0gU8OtZGxvIC8gTWllc3RvIHBvZG5pa2FuaWEJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1Nzc2IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODUiIGNsYXNzPSJjb2x1bW4gZmlyc3QiIHN0eWxlPSJ3aWR0aDoyOTBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5MSIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5IiBzdHlsZT0id2lkdGg6NDVweDsiPsWgdMOhdCA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InRleHQiIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxQT0FkcmVzYVN0YXRfQ291bnRyeV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixaB0w6F0IiBob2Rub3R1IGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiI+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0Ij4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSI+DQpJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoQ0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlcklnbm9yZUNhc2VTZW5zaXRpdmUiIHR5cGU9ImNoZWNrYm94IiB0aXRsZT0iSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6EiPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5MCIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIHN0eWxlPSJ3aWR0aDo0NXB4OyI+T2JlYyA8ZW0+KjwvZW0+PC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIHR5cGU9InRleHQiIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiPjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2JlYyIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIj4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSI+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDg5IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lIiBzdHlsZT0id2lkdGg6NDVweDsiPlVsaWNhIDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0FkcmVzYVVsaWNhX1N0cmVldE5hbWUiIG5hbWU9IlppYWRhdGVsUE9BZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJVbGljYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODYiIGNsYXNzPSJjb2x1bW4gIiBzdHlsZT0id2lkdGg6MjgwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTQiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uIiBzdHlsZT0id2lkdGg6MjBweDsiPktyYWogPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb24iIHR5cGU9InRleHQiIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb24iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiPjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiS3JhaiIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIj4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSI+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDkzIiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgc3R5bGU9IndpZHRoOjYwcHg7Ij7EjGFzxaUgb2JjZSA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0FkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0X2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTQwIiBhbHQ9IiIgdmFsdWU9IiI+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMYXPFpSBvYmNlIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTIiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHN0eWxlPSJ3aWR0aDo2MHB4OyI+U8O6cC7EjS4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgbmFtZT0iWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0FkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXJfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSI1MCIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJTw7pwLsSNLiIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODciIGNsYXNzPSJjb2x1bW4gIiBzdHlsZT0id2lkdGg6MjgwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwOTciIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eSIgc3R5bGU9IndpZHRoOjIwcHg7Ij5Pa3JlcyA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InRleHQiIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2tyZXMiIGhvZG5vdHUgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIj4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcz0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcz0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIj4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSI+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDk2IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSIgc3R5bGU9IndpZHRoOjIwcHg7Ij5QU8SMIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGUiIG5hbWU9IlppYWRhdGVsUE9BZHJlc2FQU0NfUG9zdGFsQ29kZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPQWRyZXNhUFNDX1Bvc3RhbENvZGVfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNSIgc2l6ZT0iNTAiIGFsdD0iIiB2YWx1ZT0iIj48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUFPEjCIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDk1IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIHN0eWxlPSJ3aWR0aDoyMHB4OyI+T3IuxI0uIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiBuYW1lPSJaaWFkYXRlbFBPQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9BZHJlc2FPckNfQnVpbGRpbmdOdW1iZXJfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSI1MCIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPci7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQkJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA5OCIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJIA0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc3NyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiB0aXRsZT0iIj4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIj4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IkFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIEFkcmVzYSAtIFPDrWRsbyAvIE1pZXN0byBwb2RuaWthbmlhKSI+QWRyZXNhIHByZSBkb3J1xI1lbmllICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gQWRyZXNhIC0gU8OtZGxvIC8gTWllc3RvIHBvZG5pa2FuaWEpCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3NyIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzg4IiBjbGFzcz0iY29sdW1uIGZpcnN0IiBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMDAiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSIgc3R5bGU9IndpZHRoOjQ1cHg7Ij7FoHTDoXQgPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5IiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiPjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsWgdMOhdCIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCI+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIj4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMDEiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiBzdHlsZT0id2lkdGg6NDVweDsiPk9iZWMgPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIHR5cGU9InRleHQiIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiPjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2JlYyIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIj4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSI+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDk5IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIiBzdHlsZT0id2lkdGg6NDVweDsiPlVsaWNhIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiBhbHQ9IiIgdmFsdWU9IiI+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlVsaWNhIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM4OSIgY2xhc3M9ImNvbHVtbiAiIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwNCIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24iIHN0eWxlPSJ3aWR0aDoyMHB4OyI+S3JhaiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0idGV4dCIgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLcmFqIiBob2Rub3R1IGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiI+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcz0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCI+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIj4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMDIiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiBzdHlsZT0id2lkdGg6NjBweDsiPsSMYXPFpSBvYmNlIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3RfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxNDAiIGFsdD0iIiB2YWx1ZT0iIj48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixIxhc8WlIG9iY2UiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwMyIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgc3R5bGU9IndpZHRoOjYwcHg7Ij5Tw7pwLsSNLiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIG5hbWU9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iNTAiIGFsdD0iIiB2YWx1ZT0iIj48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiU8O6cC7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzkwIiBjbGFzcz0iY29sdW1uICIgc3R5bGU9IndpZHRoOjI4MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTA3IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHkiIHN0eWxlPSJ3aWR0aDoyMHB4OyI+T2tyZXMgPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5IiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiPjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9rcmVzIiBob2Rub3R1IGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiI+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0Ij4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSI+DQpJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoQ0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlcklnbm9yZUNhc2VTZW5zaXRpdmUiIHR5cGU9ImNoZWNrYm94IiB0aXRsZT0iSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6EiPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwNiIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiIHN0eWxlPSJ3aWR0aDoyMHB4OyI+UFPEjCA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIiBuYW1lPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjUiIHNpemU9IjUwIiBhbHQ9IiIgdmFsdWU9IiI+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlBTxIwiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEwNSIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiBzdHlsZT0id2lkdGg6MjBweDsiPk9yLsSNLiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgbmFtZT0iWmlhZGF0ZWxQT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iNTAiIGFsdD0iIiB2YWx1ZT0iIj48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT3IuxI0uIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJCQk8ZGl2IGlkPSJyZXBldGl0aW9uQ29tbWFuZHNsYXlvdXRSb3cxNTc3NyIgY2xhc3M9InNlY3Rpb25QYWdlciI+DQoJCQkJCQkJCTxzcGFuIGlkPSJhZGRTZWN0aW9ubGF5b3V0Um93MTU3NzciIGNsYXNzPSJidXR0b24gYWRkUmVtb3ZlU2VjdGlvbiIgb25jbGljaz0iYWRkU2VjdGlvbigwLCAxLCB0aGlzKSIgdGl0bGU9IlByaWRhxaUgc2VrY2l1IEFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIEFkcmVzYSAtIFPDrWRsbyAvIE1pZXN0byBwb2RuaWthbmlhKSI+UHJpZGHFpTwvc3Bhbj4NCgkJCQk8c3BhbiBpZD0icmVtb3ZlU2VjdGlvbmxheW91dFJvdzE1Nzc3IiBjbGFzcz0iYnV0dG9uIGFkZFJlbW92ZVNlY3Rpb24iIG9uY2xpY2s9InJlbW92ZVNlY3Rpb24oMCwgdGhpcykiIHRpdGxlPSJPZG9icmHFpSBzZWtjaXUgQWRyZXNhIHByZSBkb3J1xI1lbmllICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gQWRyZXNhIC0gU8OtZGxvIC8gTWllc3RvIHBvZG5pa2FuaWEpIj5PZG9icmHFpTwvc3Bhbj4JDQoJCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCQkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7IGluaXRSZXBldGl0aW9uU2VjdGlvbigwLCAxLCAnbGF5b3V0Um93MTU3NzcnKSB9KTwvc2NyaXB0Pg0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODIiIGNsYXNzPSJjZWxsICI+CQkNCgkJCSANCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzUiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgdGl0bGU9IiI+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFaaWFkYXRlbFBPU3RhdHV0YXJfU3Rha2Vob2xkZXIiPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iT3Byw6F2bmVuw6Egb3NvYmEiPk9wcsOhdm5lbsOhIG9zb2JhCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3NSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzgzIiBjbGFzcz0iY29sdW1uIGZpcnN0IiBzdHlsZT0id2lkdGg6NDAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODUiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCIgc3R5bGU9IndpZHRoOjEyNXB4OyI+VGl0dWwgcHJlZCBtZW5vbSA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIHR5cGU9InRleHQiIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeF9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mjwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVGl0dWwgcHJlZCBtZW5vbSIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCI+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiPg0KSWdub3JvdmHFpSBkaWFrcml0aWt1IGEgdmXEvmvDqSBww61zbWVuw6ENCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJJZ25vcmVDYXNlU2Vuc2l0aXZlIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9Iklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhIj4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODMiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUiIHN0eWxlPSJ3aWR0aDoxMjVweDsiPk1lbm8gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPU3RhdHV0YXJNZW5vX0dpdmVuTmFtZSIgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyTWVub19HaXZlbk5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiBhbHQ9IiIgdmFsdWU9IiI+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk1lbm8iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA4NCIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPU3RhdHV0YXJGdW5rY2lhIiBzdHlsZT0id2lkdGg6MTI1cHg7Ij5GdW5rY2lhIDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT1N0YXR1dGFyRnVua2NpYSIgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyRnVua2NpYSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiIGFsdD0iIiB2YWx1ZT0iIj48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiRnVua2NpYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzODQiIGNsYXNzPSJjb2x1bW4gIiBzdHlsZT0id2lkdGg6NDAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwODciIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiBzdHlsZT0id2lkdGg6MTI1cHg7Ij5UaXR1bCB6YSBtZW5vbSA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCIgdHlwZT0idGV4dCIgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsUE9TdGF0dXRhclRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeF9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDYzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJUaXR1bCB6YSBtZW5vbSIgaG9kbm90dSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxQT1N0YXR1dGFyVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4PC9zcGFuPjxzcGFuIGNsYXNzPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mzwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3M9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3M9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDYzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIj4NCklnbm9yb3ZhxaUgZGlha3JpdGlrdSBhIHZlxL5rw6kgcMOtc21lbsOhDQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVySWdub3JlQ2FzZVNlbnNpdGl2ZSIgdHlwZT0iY2hlY2tib3giIHRpdGxlPSJJZ25vcm92YcWlIGRpYWtyaXRpa3UgYSB2ZcS+a8OpIHDDrXNtZW7DoSI+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMDg2IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZSIgc3R5bGU9IndpZHRoOjEyNXB4OyI+UHJpZXp2aXNrbyA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsUE9TdGF0dXRhclByaWV6dmlza29fRmFtaWx5TmFtZSIgbmFtZT0iWmlhZGF0ZWxQT1N0YXR1dGFyUHJpZXp2aXNrb19GYW1pbHlOYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQcmllenZpc2tvIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJCQk8ZGl2IGlkPSJyZXBldGl0aW9uQ29tbWFuZHNsYXlvdXRSb3cxNTc3NSIgY2xhc3M9InNlY3Rpb25QYWdlciI+DQoJCQkJCQkJCTxzcGFuIGlkPSJhZGRTZWN0aW9ubGF5b3V0Um93MTU3NzUiIGNsYXNzPSJidXR0b24gYWRkUmVtb3ZlU2VjdGlvbiIgb25jbGljaz0iYWRkU2VjdGlvbigxLCAxMCwgdGhpcykiIHRpdGxlPSJQcmlkYcWlIHNla2NpdSBPcHLDoXZuZW7DoSBvc29iYSI+UHJpZGHFpTwvc3Bhbj4NCgkJCQk8c3BhbiBpZD0icmVtb3ZlU2VjdGlvbmxheW91dFJvdzE1Nzc1IiBjbGFzcz0iYnV0dG9uIGFkZFJlbW92ZVNlY3Rpb24iIG9uY2xpY2s9InJlbW92ZVNlY3Rpb24oMSwgdGhpcykiIHRpdGxlPSJPZG9icmHFpSBzZWtjaXUgT3Byw6F2bmVuw6Egb3NvYmEiPk9kb2JyYcWlPC9zcGFuPgkNCgkJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJCQkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsgaW5pdFJlcGV0aXRpb25TZWN0aW9uKDEsIDEwLCAnbGF5b3V0Um93MTU3NzUnKSB9KTwvc2NyaXB0Pg0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNzMiIGNsYXNzPSJjZWxsICI+CQkNCgkJCSANCgkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzMiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgdGl0bGU9IiI+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFaaWFkYXRlbFBPS29udGFrdCI+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJLb250YWt0Ij5Lb250YWt0CQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3MyIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzc4IiBjbGFzcz0iY29sdW1uIGZpcnN0IiBzdHlsZT0id2lkdGg6NDAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAwNzQiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxQT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiBzdHlsZT0id2lkdGg6MTI1cHg7Ij5UZWxlZsOzbm5lIMSNw61zbG8gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbFBPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiIG5hbWU9IlppYWRhdGVsUE9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMDAiIGFsdD0iIiB2YWx1ZT0iIj48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVGVsZWbDs25uZSDEjcOtc2xvIiBob2Rub3R1LCBvZHBvcsO6xI1hbWUgdiBtZWR6aW7DoXJvZG5vbSB0dmFyZSArNDIxeHh4Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM3OSIgY2xhc3M9ImNvbHVtbiAiIHN0eWxlPSJ3aWR0aDo0MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDA3NSIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbFBPS29udGFrdEVtYWlsQWRyZXNhIiBzdHlsZT0id2lkdGg6MTIwcHg7Ij5FLW1haWxvdsOhIGFkcmVzYSA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxQT0tvbnRha3RFbWFpbEFkcmVzYSIgbmFtZT0iWmlhZGF0ZWxQT0tvbnRha3RFbWFpbEFkcmVzYSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbFBPS29udGFrdEVtYWlsQWRyZXNhX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMjIwIiBhbHQ9IiIgdmFsdWU9IiI+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIkUtbWFpbG92w6EgYWRyZXNhIiBob2Rub3R1IHYgdHZhcmUgbWVub0Bkb23DqW5hLjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJCQkJPGRpdiBpZD0ibGF5b3V0Um93MTU3NzgiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgdGl0bGU9IiI+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFEb3BuZW5pZVBvZGFuaWEiPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iRG9wbG5lbmllIHBvZGFuaWEiPkRvcGxuZW5pZSBwb2RhbmlhCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cxNTc3OCIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5MzkxIiBjbGFzcz0iY29sdW1uIGZpcnN0IiBzdHlsZT0id2lkdGg6ODAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMDkiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iRG9wbmVuaWVQb2RhbmlhSWQiIHN0eWxlPSJ3aWR0aDoyMDBweDsiPklkZW50aWZpa8OhdG9yIHDDtHZvZG7DqWhvIHBvZGFuaWEgPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJEb3BuZW5pZVBvZGFuaWFJZCIgbmFtZT0iRG9wbmVuaWVQb2RhbmlhSWQiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiBhbHQ9IiIgdmFsdWU9IiI+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIklkZW50aWZpa8OhdG9yIHDDtHZvZG7DqWhvIHBvZGFuaSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTEwIiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IkRvcGxuZW5pZVBvZGFuaWFQcmVkbWV0IiBzdHlsZT0id2lkdGg6MjAwcHg7Ij5QcmVkbWV0IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iRG9wbG5lbmllUG9kYW5pYVByZWRtZXQiIG5hbWU9IkRvcGxuZW5pZVBvZGFuaWFQcmVkbWV0IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQcmVkbWV0IiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMTEiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iRG9wbG5lbmllUG9kYW5pYVBvcGlzIiBzdHlsZT0id2lkdGg6MjAwcHg7Ij5Qb3BpcyBwb2RhbmlhIDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjx0ZXh0YXJlYSBpZD0iRG9wbG5lbmllUG9kYW5pYVBvcGlzIiBuYW1lPSJEb3BsbmVuaWVQb2RhbmlhUG9waXMiIHRpdGxlPSIiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRBcmVhIERvcGxuZW5pZVBvZGFuaWFQb3Bpc19pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgY29scz0iMTAwIiByb3dzPSIzIj48L3RleHRhcmVhPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQb3BpcyBwb2RhbmlhIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsNzAxMTIiIGNsYXNzPSJjZWxsICI+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iRG9wbG5lbmllUG9kYW5pYU9kb3ZvZG5lbmllIiBzdHlsZT0id2lkdGg6MjAwcHg7Ij5PZMO0dm9kbmVuaWUgcG9kYW5pYSA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjx0ZXh0YXJlYSBpZD0iRG9wbG5lbmllUG9kYW5pYU9kb3ZvZG5lbmllIiBuYW1lPSJEb3BsbmVuaWVQb2RhbmlhT2Rvdm9kbmVuaWUiIHRpdGxlPSIiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRBcmVhIERvcGxuZW5pZVBvZGFuaWFPZG92b2RuZW5pZV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgY29scz0iMTAwIiByb3dzPSIzIj48L3RleHRhcmVhPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPZMO0dm9kbmVuaWUgcG9kYW5pYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCQkJCTxkaXYgaWQ9ImxheW91dFJvdzE1Nzc5IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiIHRpdGxlPSIiPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92Ij4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9Ik9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3YiPk9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3YJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1Nzc5IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzOTIiIGNsYXNzPSJjb2x1bW4gZmlyc3QiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDExNCIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxpbnB1dCBpZD0iT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzIiBuYW1lPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIHRpdGxlPSIiIHR5cGU9ImNoZWNrYm94IiBjbGFzcz0ieHNkX2Jvb2xlYW4gY2hlY2tCb3ggIiB2YWx1ZT0ixb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhLCB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqc1IHDDrXNtLiBhKSBhIMKnIDE0IHrDoWtvbmEgxI0uIDE4LzIwMTggWi4gei4g4oCTIOKAnlrDoWtvbiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbuKAnCksIHBvIHByZWRjaMOhZHphasO6Y29tIG9ib3puw6FtZW7DrSBzYSBzIGluZm9ybcOhY2lhbWkgcG9kxL5hIHVzdC4gMTkgWsOhay4gxI0uIDE4LzIwMTggWi4gei4gbmEgc3Ryw6Fua2UgZWxla3Ryb25pY2tlaiBzbHXFvmJ5IHoga3RvcmVqIGJvbCB0ZW50byBmb3JtdWzDoXIgb3R2b3JlbsO9LCBvZG9zbGFuw61tIHRvaHRvIGVsZWt0cm9uaWNrw6lobyBmb3JtdWzDoXJhIGEgc2Ftb3N0YXRuw71tIHBvdHZyZGVuw61tIHYgdGVqdG8ga29sw7Nua2UsIHBvc2t5dHVqZSBNZXN0dSBQZXppbm9rLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCBuYSB0b210byBlbGVrdHJvbmlja29tIGZvcm11bMOhcmkgYSB2IGplaG8gcHLDrWxvaMOhY2guIMW9aWFkYXRlxL4gcG9za3l0dWplIHRpZXRvIMO6ZGFqZSB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSB2IHByZWRtZXRuZWogxb5pYWRvc3RpIChwb2RhbsOtKSBhIGplaiBuw6FzbGVkbsOpIHNwcmFjb3ZhbmllIHogem15c2xlIHrDoWtvbmEgYSBwcsOtc2x1xaFuw71jaCBuYXJpYWRlbsOtIHRhaywgYWtvIGplIHRvIHV2ZWRlbsOpIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSDDusSNZWx1IHNwcmFjw7p2YW5pYSB0b2h0byBwb2RhbmlhIGEgc8O6dmlzaWFjaWNoIMO6a29ub3YgdiB6bXlzbGUgcHJlZG1ldG5laiBsZWdpc2xhdMOtdnkuIMW9aWFkYXRlxL4gamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBrZWR5a2/EvnZlayBvZHZvbGHFpSBmb3Jtb3UgZWxla3Ryb25pY2vDqWhvIHBvZGFuaWEgVsWhZW9iZWNuZWogYWdlbmR5IG1lc3RhIGFsZWJvIGluw71tIHJlbGV2YW50bsO9bSBzcMO0c29ib20gcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw71tIG1lc3R1LiIgYWx0PSIiPjxsYWJlbCBmb3I9Ik9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyIgY2xhc3M9ImNoZWNrQm94TGFiZWwiPsW9aWFkYXRlxL4gYWtvIGRvdGtudXTDoSBvc29iYSwgdiBzw7psYWRlIHMgdXN0YW5vdmVuw61tIMKnNSBww61zbS4gYSkgYSDCpyAxNCB6w6Frb25hIMSNLiAxOC8yMDE4IFouIHouIOKAkyDigJ5aw6Frb24gbyBvY2hyYW5lIG9zb2Juw71jaCDDumRham92IGEgbyB6bWVuZSBhIGRvcGxuZW7DrSBuaWVrdG9yw71jaCB6w6Frb25vdiAoxI9hbGVqIGxlbiDigJ56w6Frb27igJwpLCBwbyBwcmVkY2jDoWR6YWrDumNvbSBvYm96bsOhbWVuw60gc2EgcyBpbmZvcm3DoWNpYW1pIHBvZMS+YSB1c3QuIDE5IFrDoWsuIMSNLiAxOC8yMDE4IFouIHouIG5hIHN0csOhbmtlIGVsZWt0cm9uaWNrZWogc2x1xb5ieSB6IGt0b3JlaiBib2wgdGVudG8gZm9ybXVsw6FyIG90dm9yZW7DvSwgb2Rvc2xhbsOtbSB0b2h0byBlbGVrdHJvbmlja8OpaG8gZm9ybXVsw6FyYSBhIHNhbW9zdGF0bsO9bSBwb3R2cmRlbsOtbSB2IHRlanRvIGtvbMOzbmtlLCBwb3NreXR1amUgTWVzdHUgUGV6aW5vaywgYWtvIHByZXbDoWR6a292YXRlxL5vdmksIHPDumhsYXMgc28gc3ByYWNvdmFuw61tIG9zb2Juw71jaCDDumRham92IHV2ZWRlbsO9Y2ggbmEgdG9tdG8gZWxla3Ryb25pY2tvbSBmb3JtdWzDoXJpIGEgdiBqZWhvIHByw61sb2jDoWNoLiDFvWlhZGF0ZcS+IHBvc2t5dHVqZSB0aWV0byDDumRhamUgemEgw7rEjWVsb20gYmV6cGXEjW5laiBhIHrDoW1lbnUgdnlsdcSNdWrDumNlaiBpZGVudGlmaWvDoWNpZSBkb3RrbnV0ZWogb3NvYnkgdiBwcmVkbWV0bmVqIMW+aWFkb3N0aSAocG9kYW7DrSkgYSBqZWogbsOhc2xlZG7DqSBzcHJhY292YW5pZSB6IHpteXNsZSB6w6Frb25hIGEgcHLDrXNsdcWhbsO9Y2ggbmFyaWFkZW7DrSB0YWssIGFrbyBqZSB0byB1dmVkZW7DqSBuYSBzdHLDoW5rZSBlbGVrdHJvbmlja2VqIHNsdcW+YnkgeiBrdG9yZWogYm9sIHRlbnRvIGZvcm11bMOhciBvdHZvcmVuw70uIERvYmEgcGxhdG5vc3RpIHPDumhsYXN1IHNhIHZpYcW+ZSBuYSBkb2J1IHRydmFuaWEgw7rEjWVsdSBzcHJhY8O6dmFuaWEgdG9odG8gcG9kYW5pYSBhIHPDunZpc2lhY2ljaCDDumtvbm92IHYgem15c2xlIHByZWRtZXRuZWogbGVnaXNsYXTDrXZ5LiDFvWlhZGF0ZcS+IGplIG9wcsOhdm5lbsO9IHRlbnRvIHPDumhsYXMga2VkeWtvxL52ZWsgb2R2b2xhxaUgZm9ybW91IGVsZWt0cm9uaWNrw6lobyBwb2RhbmlhIFbFoWVvYmVjbmVqIGFnZW5keSBtZXN0YSBhbGVibyBpbsO9bSByZWxldmFudG7DvW0gc3DDtHNvYm9tIHByZXVrw6F6YXRlxL5uZSBkb3J1xI1lbsO9bSBtZXN0dS48L2xhYmVsPjxicj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJCQkJPGRpdiBpZD0ibGF5b3V0Um93MTU3ODAiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgdGl0bGU9IiI+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFOb3RpZmlrYWNpZSI+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJOb3RpZmlrw6FjaWUiPk5vdGlmaWvDoWNpZQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3ODAiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM5MyIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgc3R5bGU9IndpZHRoOjMyMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTE2IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIHN0eWxlPSJ3aWR0aDoyMTBweDsiPsW9ZWzDoXRlIHNpIHphc2llbGFuaWUgdXBvem9ybmVuw60gPyAgPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlZ5YmVydGUgamVkbnUgeiBtb8W+bm9zdMOtLjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pjwvc3Bhbj48ZmllbGRzZXQ+PGxlZ2VuZD48L2xlZ2VuZD48ZGl2IGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBOb3RpZmlrYWNpZVphc2llbGFuaWVfaW50ZXJuYWwiPjxzcGFuPjxpbnB1dCBpZD0iTm90aWZpa2FjaWVaYXNpZWxhbmllIiBuYW1lPSJOb3RpZmlrYWNpZVphc2llbGFuaWUiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBOb3RpZmlrYWNpZVphc2llbGFuaWVfaW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9Im5pZSIgdmFsdWU9Im5pZSIgY2hlY2tlZD0iY2hlY2tlZCI+PGxhYmVsIGZvcj0iTm90aWZpa2FjaWVaYXNpZWxhbmllIiBjbGFzcz0ib3B0aW9uTGFiZWwiPm5pZTwvbGFiZWw+PC9zcGFuPjxzcGFuPjxpbnB1dCBpZD0iTm90aWZpa2FjaWVaYXNpZWxhbmllUG9zdGZpeExpc3QxIiBuYW1lPSJOb3RpZmlrYWNpZVphc2llbGFuaWUiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBOb3RpZmlrYWNpZVphc2llbGFuaWVfaW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9ImVEZXNrIiB2YWx1ZT0iZURlc2siPjxsYWJlbCBmb3I9Ik5vdGlmaWthY2llWmFzaWVsYW5pZVBvc3RmaXhMaXN0MSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5lRGVzazwvbGFiZWw+PC9zcGFuPjwvZGl2PjwvZmllbGRzZXQ+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQkJCQk8ZGl2IGlkPSJsYXlvdXRSb3cxNTc4MSIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiB0aXRsZT0iIj4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVZ5c3R1cCI+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJTcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHUiPlNww7Rzb2IgZG9ydcSNZW5pYSB2w71zdHVwdQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MTU3ODEiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW4yOTM5NCIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgc3R5bGU9IndpZHRoOjMyMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTE4IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIHN0eWxlPSJ3aWR0aDoyMTBweDsiPlNww7Rzb2IgZG9ydcSNZW5pYSB2w71zdHVwdSAgPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlZ5YmVydGUgamVkbnUgeiBtb8W+bm9zdMOtLjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pjwvc3Bhbj48ZmllbGRzZXQ+PGxlZ2VuZD48L2xlZ2VuZD48ZGl2IGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVfaW50ZXJuYWwiPjxzcGFuPjxpbnB1dCBpZD0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1IiBuYW1lPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVfaW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9ImVEZXNrIiB2YWx1ZT0iZURlc2siIGNoZWNrZWQ9ImNoZWNrZWQiPjxsYWJlbCBmb3I9IlJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5lRGVzazwvbGFiZWw+PC9zcGFuPjxzcGFuPjxpbnB1dCBpZD0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1UG9zdGZpeExpc3QxIiBuYW1lPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVfaW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9Im9zb2JuZSIgdmFsdWU9Im9zb2JuZSI+PGxhYmVsIGZvcj0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1UG9zdGZpeExpc3QxIiBjbGFzcz0ib3B0aW9uTGFiZWwiPm9zb2JuZTwvbGFiZWw+PC9zcGFuPjxzcGFuPjxpbnB1dCBpZD0iUmFkaW9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1UG9zdGZpeExpc3QyIiBuYW1lPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCBSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVfaW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9InBvxaF0b3UiIHZhbHVlPSJwb8WhdG91Ij48bGFiZWwgZm9yPSJSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVQb3N0Zml4TGlzdDIiIGNsYXNzPSJvcHRpb25MYWJlbCI+cG/FoXRvdTwvbGFiZWw+PC9zcGFuPjwvZGl2PjwvZmllbGRzZXQ+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjI5Mzk1IiBjbGFzcz0iY29sdW1uICIgc3R5bGU9IndpZHRoOjU2MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTE5IiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlZ5c3R1cEtvbnRha3QiIHN0eWxlPSJ3aWR0aDoyNTVweDsiPktvbnRha3QgdiBwcsOtcGFkZSBkb3J1xI1lbmlhIG9zb2JuZSAvIHBvxaF0b3UgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlZ5c3R1cEtvbnRha3QiIG5hbWU9IlZ5c3R1cEtvbnRha3QiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggVnlzdHVwS29udGFrdF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjIzNSIgYWx0PSIiIHZhbHVlPSIiPjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvcyIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCQkJCTxkaXYgaWQ9ImxheW91dFJvdzE1NzgyIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiB0aXRsZT0iIj4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYUZvb3RlciI+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzE1NzgyIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uMjkzOTYiIGNsYXNzPSJjb2x1bW4gZmlyc3QiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGw3MDEyMSIgY2xhc3M9ImNlbGwgIj4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxhIGhyZWY9Imh0dHA6Ly93d3cucGV6aW5vay5zayIgY2xhc3M9InhzZF9zdHJpbmcgaHlwZXJMaW5rICIgdGFyZ2V0PSJfYmxhbmsiPkNvcHlyaWdodCDCqSAyMDE4LCBNZXN0byBQZXppbm9rIC0gVsWhZXRreSBwcsOhdmEgdnlocmFkZW7DqTwvYT4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDcwMTIyIiBjbGFzcz0iY2VsbCAiPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIHN0eWxlPSJ3aWR0aDo0MDBweDsiPlBlemlub2sgLSBtZXN0byB2w61uYSwgaGlzdMOzcmllIGEgdW1lbmlhICA8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQkJCQ0KCQkJPGRpdiBpZD0iYnV0dG9uc1BsYWNlaG9sZGVyIj4NCgkJCQkJCQkJCTxpbnB1dCBpZD0idmFsaWRhdGVGb3JtIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSIgdmFsdWU9IlNrb250cm9sb3ZhxaUiIGFsdD0iU2tvbnRyb2xvdmHFpSIgYWNjZXNza2V5PSJTIj4NCgkJCQkJCQkJCQk8aW5wdXQgaWQ9ImNsZWFyRm9ybSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiIHZhbHVlPSJWecSNaXN0aSIgYWx0PSJWecSNaXN0aSIgYWNjZXNza2V5PSJWIj4NCgkJCQkJPGlucHV0IGlkPSJsb2FkRm9ybVhtbCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiIHZhbHVlPSJOYcSNw610YcWlIiBhbHQ9Ik5hxI3DrXRhxaUiIGFjY2Vzc2tleT0iTiI+DQoJCQkJCTxpbnB1dCBpZD0ic2F2ZVRvWG1sIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSIgdmFsdWU9IlVsb8W+acWlIiBhbHQ9IlVsb8W+acWlIiBhY2Nlc3NrZXk9IlUiPg0KCQkJCQkJCQkJPGlucHV0IGlkPSJjYW5jZWxGb3JtIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSIgdmFsdWU9IlpydcWhacWlIiBhbHQ9IlpydcWhacWlIiBhY2Nlc3NrZXk9IloiPgkJCQ0KCQkJPC9kaXY+CQkNCgkJPC9kaXY+DQoJCTxkaXYgaWQ9InN0YXR1c0RpYWxvZyIgdGl0bGU9IlN0YXR1cyI+DQoJCQk8aW1nIGlkPSJzdGF0dXNMb2FkZXIiIHNyYz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FNQUFBQmczQW0xQUFBQUNHRmpWRXdBQUFBSkFBQUFBSVJkb21FQUFBRGJVRXhVUlFBQUFQLy8vN1BDcnE2K3FMdkl0aE5CQWRYZDB1VHA0cy9Zek1MT3ZzalN4UEh6OE56ajJ2cjcrdTN3N0tlNG9QYjQ5cUd6bXVudDZCTkJBWktuaWpCWUlGNStVamxnS2lGTUVFRm1NdlQyOU16VnlFcHRQTC9MdXNUUHdKYXFqdVhxNUoyd2xtdUlZS3E3cElPYmVyZkZza05uTk5QYjBMTEFySHlWY3RqZzFuaVNicU8xbkRaZEpoeElDbWlGWE9EbTNpVlBGRTV3UUlXZGZGZDRTbk9PYUkyamhJQ1lkajFqTGlsU0dHK0xaR0tBVm5XUGFoaEZCaXhWSEZOMVJtU0NXRkZ6UkRKYUlsdDdUcENtaUltZ2dCOUxEcHF0a2tacU9BWW1ObllBQUFBQmRGSk9Vd0JBNXRobUFBQUFHbVpqVkV3QUFBQUFBQUFBTUFBQUFEQUFBQUFBQUFBQUFBQUtBR1FBQVBpZVVKUUFBQUxKU1VSQlZFakh0WlpyVHhReEZJYnBaWHB2cVpQWkJTR3lhSkRMSnhXTlJKU0V4QkQvL3oveVBlM09ab1l0Q3lSYVFtSGE4NXpMMnpPWFBmYktzZmVQZ05NVGMvRkNRRjJ1WVBwdUdBWmNYSnpvWjRGZjkvZG5qSW5sY29tTDFUQmM3Z0pTWXV6cndjRkJZc05pc1dEc0dOakhIWUJjclk3WVJkZDFEL0VCTTJPM3dJNnc3dG9BK2J0aTdFdlhIYkt6QXR4MTNUVmpUZ2dibXhGK3d1RWZkZ3RiZFVYQUphYUJhU0c0YmFkMGVnaUw0OCtZZmhQRnpqRWRaZGhMdncwb2kwVUJpN3VJcWZ0RVFFZkpTY0U1YWF2eUROQ2NTeXhmdytiNkF5WnkvaDYvTndvQkRQVGp3czRBUjRGTnpPU2RGUHIrWS9GMmliK2xnTWlBQ2E3bktXR0ZXOCtKR0U3V3NwMS80MWoxV2U1ajE4VjUwVDN0eVlCY3pFUUhJM2dJNUo2SGFkR0pWTWlXMXQxTm5CMXNyeXk1dDM2bWtwUk81NXFXZXR4Ym50elFxblpDclFHU2lKalljN25kejRIMDY2R0tLRUpWZ0x5QU1icDFCd1J0aEtnV2NTeGF1N3BpV2tDaUlyQnBRNTZxcEZHemFFWmcxZHB2OTVKMnNRa29xL3lySGdKYThqcGtLSUEzNDFCdFFMMFpoeTJBNXVPUWJTQnNERlNOb0V6OWVTcUNEK05JMHhxU3NyWU5XTmR2M1VBK1dCd2NiOHFheGY2KzJEQUV4T0RJR3VldDJpWGdoTUJVYlFsUTFWb3FyOUsyZmV4VjJRWWpwNzBFUHRuU0xZOEdOYW12ak5tMGQ4a3dVS0N0cENDNm9LZEdBcE9tSjUwZDJidmc4cndBcU1IWDk3T2Z0b2EyWks4OXFwL1VFWjNnOElRZzdwR3NwVzZiR1czMnVKVnEwSUF1Z2lubEt1UzhXMjFOSDNtS0VDUjZSRW1IQzJYZ1hETlAyM3grY09WeHFPSEtBWVpYV0FLUTBVS2N6S0tSNDJOanJLRXZ6dzN5N1JHbEp3QXFDOTlUTmxTamF0d1BWRUNpdEJBZEFPV3BTcGFxL1g0SXRRNzROUldnbkhDTnBGSVRnQ1JvMXdTUHFRS29GZjk2T1JGMW5wSzNtYTB6S2dEbGFDaXkydlVXaFZjMUFxSENlZGRyTjl1U1VRVW9KLy9zbDBBVnNBQk1LZi9TYncydisvLzdjZkwwK0FzMVJDWjJwaEx6ZXdBQUFCcG1ZMVJNQUFBQUFRQUFBQ0VBQUFBUUFBQUFDZ0FBQUFNQUNnQmtBQUdMeUUwREFBQUEzR1prUVZRQUFBQUNTTWQ5a1UwUGdqQU1oa3ZMQmd4eFNJQ29lUEFqMFdnaW1uZ3dYcFNiL3Y5ZlpEYytsQVAwc3ExOTJyZHJBYXg1dmp1RlVTTkNPUndOWXdDbHlYV0dBSW1CQTZFbTlIcEl0TkhMcGdOQ1Yxb1p2NWVZNXZsbFhWOERSaEtRWENUNmJ5ekxzbjNqaUpFd2lLM01EL0FFVzlHOXVJaHltRk0vNHNuQWtaczUxTDBvUmlaR3BtcUJpb0U1d0NtOXBWYko1THVKSnRVV0lhTnhoWFRGcHExblNvZ3lpVHNOQTd6WEMzT2NtMEZLVXY4ZktZVjR6RXhjNUoyN1B5MjRpNVVGZHNPYktFeTg5TVpXK1JKaU83N3M2SVBON1F1bzBBbzFtUlM5THdBQUFCcG1ZMVJNQUFBQUF3QUFBQmdBQUFBWUFBQUFGZ0FBQUFJQUNnQmtBQUZBeWQ4V0FBQUFuMlprUVZRQUFBQUVTTWRqNE9Oa1kyZkFCdGdFbVRoQUZCY2ZkZ2xtWmlZMmJCTHMvTXhNZk5na3VQaVpXUml4U1dDYUJKRUFtY1NOVFFLTFNSQUpMQ2FCSmNBbTZhTkpDTEh4Q0xIeE0zTXlZZlUrTncvMllLRVU4SEtLYUROakNxdnFPMGxJU0tpaGlibzRzMEtCQW9xNExFellTQTdOZExDb2hBNHZoZ1ZBWVZNcGJBNHlrSk9GQXJTZ014YUhBVEZVQ1d1WTdhd1NxQklxY0FrakFGTWJDZDlORFI4U0FBQUFHbVpqVkV3QUFBQUZBQUFBRHdBQUFDQUFBQUFlQUFBQUJnQUtBR1FBQWJuZHRTMEFBQURPWm1SQlZBQUFBQVpJeDhXUjZ3cUNRQkNGMTluMXNycXJhMGdYRlNzaXlLUkFnZ3FpZnZUK0Q5WE1Hcm85UWVmWGZuUG1jbUFaUTNraTlwaWptSE9wSnd3NUJ6azFHRVNSVExiZ0FDRXVDWXpGQU8ySXNSUzRuVWxwV0ZPVlV4Y0Q3RTZNeUJCanVoRnhVSXBNVU1PSldTREpsT09GaE16QUNhaEFoRzVjVHdIN3I1cm1KOUNtNjdwMlhZMThYVnE5MjZGa3Fybi8xWXQ0ZThuMDdtNTVnWGlvNi9weFpMbzQrLzRXT1NmaldlQ3J6TzJ2U051NktzZjk1Y2xXOWxPQ215MDRvU3JFM3Myb2U1OFdmQUFLaUFwak9XcnBKQUFBQUJwbVkxUk1BQUFBQndBQUFCUUFBQUFkQUFBQUdnQUFBQkFBQ2dCa0FBRnBnTTlKQUFBQXYyWmtRVlFBQUFBSVNNZk5rZDBLd2pBTVJyT3U3ZHpXL1NoZEozb3hjQ3VLREJFdnhJSDQvbzlsNnBoTDV3dDRMZ0k1aEs4cEFmQUlvaVNVdnRva0lSSVRFNjJjWVl6ejdPdnl3aG5HWTFXU3ROR2tnUmNvWTdrd0xwT3pFYTdJNUhxQ1BLL1lCRmswVlJNNS9BR3krRkZsb1p1RjJoMnRNYWJ6WEsrMXZWVlY1UVYweGp6UEFya1MyZUxVL281eW9KSFlIK0QxcVRNUDdDRjNBWGFXRGJZbjZMRmV5SmJZMWdDMUdNZ1pZWXNXVDIyOVRUWEtkdm5MVElndTg4d2JWQW9LUkNUREVSTUFBQUFhWm1OVVRBQUFBQWtBQUFBZUFBQUFGQUFBQUE4QUFBQWFBQW9BWkFBQjlFWEZ5UUFBQU5GbVpFRlVBQUFBQ2tqSGRaSExEb0l3RUVYN0Jsb29oTkFtTG9TQXhFY2lNVzVjcUlueC8zL0s0YUZpSEdiUk5IUHUzSnRwQ1VFcTBqbFpyb3luS1Y5V3hJenpYcUVNUnBOY0NUWXFCSUkxVjlTTWl2Q2ZCdEFYaGxBTENvc2tSNEp4RnNDTkdvcVlXOTBiNnc4S1NwWE5PWTJGR0FMR1lrVlJXYTNMcjhCQUFHUFQvTW43ZGwwVTlXRzJYQ2hZUEQyaGMyNS85UDcrRXhDbzk3Q1VNbW1kZStCdkNIUkZybEoyS04wQXJvbVg4b3ppcnZjbVR6alJENUREM0hZQjc2QmZqUjZvdVczQWV4bFB5emUzQzlKK0FXY0dDaWt2eHFkeEFBQUFHbVpqVkV3QUFBQUxBQUFBSVFBQUFCQUFBQUFGQUFBQUhRQUtBR1FBQWNMK3pwa0FBQURhWm1SQlZBQUFBQXhJeDMyUjJ3NkNNQXlHdDY2TWpRRWhCb2lnaWFlb2lmRkM0L0ZTRTkvL21leVlRN2lBM3F4Yi8vWDcxekhtSWxVbk5ocUgvUEpKUitySllrN3hHR213Q3lncU9DNTd4M0diNWJZZTNQWmwrWnAxK2tZQ01wYzlHNEd1cTZJb3RyNmV4U0dDaUZ4dTYrZWFYV2xaZTRGQ2tBcEFoTTF1UXdTSG1pWmVJUkV3MFNDRTQ5d1ZIZGxPc2pXUmFoUm1RaHhzYlRWZS96YTVKb3p0SlB5dHQxVjBYMm94cENQT2I0N1dabStraGpBcE0rMTdHRnNGbTk2MGVJUkE5bUtVZkdqT01RSlFNUnYrQ1lzeG81L05wVFFPOEFVTUx3b3JwQmExWUFBQUFCcG1ZMVJNQUFBQURRQUFBQmtBQUFBWUFBQUFBZ0FBQUJZQUNnQmtBQUgzNW1HR0FBQUFwR1prUVZRQUFBQU9TTWUxajgwS3dqQVFCamZiSkcyanFWSWlqWW9pSG0wUkw0SUhSZng1LzJjeWtVUXdXWS9POFJ1WVRVREx5QUcrV1hlUlcySW00a05pZHZQSUF5ajAwdlQ5SXQvcjg5M09yRFhKdk5sZXdwMXJZcnF3bjRZMDlmVHozbWppdUJCSERYOWlwY29mN1RGSHppUlhNdjgxTHhTckVEUFJjQ3hhMGtpT3lFampZaFZReHNjYTByeGpsR0V1NXA1TG1HbnRZMlNObFpMUkp2aFIyY0lMdkFnSlN2eHZnOXdBQUFBYVptTlVUQUFBQUE4QUFBQVFBQUFBSUFBQUFBTUFBQUFLQUFvQVpBQUJwdTFybmdBQUFNMW1aRUZVQUFBQUVFakh6VkRMRHNJZ0VBVGNRb0MyWWhOamZjVldQYlJxTkZGT2V2Zi9QOGxkV20zNUErZkFaaWE3czhNeWhtaDJKemJHMW50Zmo0WGJHN0ZSMlUvSTlnbmhNdXBwZ25JM2dhZ2NuK29hcE5EZm50dXBaT3oxRlVTSm1DK1BFc2NxRXVxa1I5bXFmc2RzMFV2REV2Y2dUeCtsWFQyVE5mc0xIR1FSOFZ3REREZGpQQVVRUWc2Zk1jUk5hbHpIbFNhdUxBRFErYmdrcWgwM1dNaVlheHJuVElLWXBHSENDckE0aDMyR2R4NEZWb2Q5d08yd2x3enlVYTQwaWtHYlFXZ2VSYmU2Qy9VQnN1OEsxSmtFTnJZQUFBQVlkRVZZZEZOdlpuUjNZWEpsQUdkcFpqSmhjRzVuTG5ObUxtNWxkSmIvRThnQUFBQUFTVVZPUks1Q1lJST0iIGFsdD0ixIxha2FqdGUgcHJvc8OtbSI+DQoJCQk8cCBpZD0ic3RhdHVzTWVzc2FnZSIgY2xhc3M9InN0YXR1c01lc3NhZ2UiPg0KCQk8L2Rpdj4NCgkJPGRpdiBpZD0ic2F2ZWRGb3Jtc0NvbnRhaW5lciIgY2xhc3M9ImxheW91dE1haW4gdWktd2lkZ2V0LWNvbnRlbnQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPg0KCQkgIDxkaXYgaWQ9InNhdmVkRm9ybXNDb250YWluZXJSb3ciIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgdGl0bGU9IiI+DQoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJCYXNpYyI+DQoJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KCQkJICA8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iVWxvxb5lbsOpIGZvcm11bMOhcmUiPlVsb8W+ZW7DqSBmb3JtdWzDoXJlPC9kaXY+DQoJCQkgIDxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+DQoJCQk8L2Rpdj4NCgkJCTxkaXYgaWQ9ImxheW91dFJvd1NhdmVkRm9ybXMiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCSAgPGRpdiBpZD0ibGNvbHVtblNhdmVkRm9ybXMiIGNsYXNzPSJjb2x1bW4gZmlyc3QiPg0KCQkJCTxkaXYgaWQ9ImxjZWxsU2F2ZWRGb3JtcyIgY2xhc3M9ImNlbGwiPiAgICAgICAgICAJCQkJICANCgkJCQk8L2Rpdj4JCQkJDQoJCQkgIDwvZGl2Pg0KCQkJICA8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQkJPC9kaXY+DQoJCSAgPC9kaXY+DQoJCTwvZGl2Pg0KCQk8ZGl2IGlkPSJtdGRfZm9ybU1ldGFEYXRhIiBzdHlsZT0iZGlzcGxheTpub25lIj48c3BhbiBpZD0ibXRkX3ZlcnNpb24iPjEuMzwvc3Bhbj48c3BhbiBpZD0ibXRkX2lkcCI+MTM3Mjwvc3Bhbj48c3BhbiBpZD0ibXRkX25hbWVzcGFjZSI+aHR0cDovL3NjaGVtYXMuZ292LnNrL2Zvcm0vMDAzMDUwMjIuQTk5OTk5OTkuMDAwMDAwMDgxLkRvcGxuZW5pZVBvZGFuaWFfUE8vMS4zPC9zcGFuPjwvZGl2Pg0KCTwvZm9ybT4NCjwvYm9keT4NCjwvaHRtbD4NCg==
PFByZWZpbGxEYXRhTWFwcGluZyB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4NCiAgPERlZmluaXRpb24gaWQ9IlVQVlMgSUFNIERlZmF1bHQgRGF0YSI+DQogICAgPEl0ZW0ga2V5PSJzdWJqZWN0OkNvcnBvcmF0ZS5OYW1lIiB4cGF0aD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keS9lZ29ucDpaaWFkYXRlbFBPRGV0YWlsTmF6b3ZfQ29ycG9yYXRlQm9keUZ1bGxOYW1lIiAvPg0KICAgIDxJdGVtIGtleT0ic3ViamVjdDpDb3Jwb3JhdGUuSUNPIiB4cGF0aD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9EZXRhaWxfQ29ycG9yYXRlQm9keS9lZ29ucDpaaWFkYXRlbFBPRGV0YWlsUE9JQ08iIC8+DQogICAgPEl0ZW0ga2V5PSJzdWJqZWN0OkNvcnBvcmF0ZS5ESUMiIHhwYXRoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0RldGFpbF9Db3Jwb3JhdGVCb2R5L2Vnb25wOlppYWRhdGVsUE9EZXRhaWxESUMiIC8+DQogICAgPEl0ZW0ga2V5PSJzdWJqZWN0OkNvcnBvcmF0ZS5BZGRyZXNzLlN0cmVldCIgeHBhdGg9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgLz4NCiAgICA8SXRlbSBrZXk9InN1YmplY3Q6Q29ycG9yYXRlLkFkZHJlc3MuTXVuaWNpcGFsaXR5IiB4cGF0aD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FPYmVjX011bmljaXBhbGl0eSIgLz4NCiAgICA8SXRlbSBrZXk9InN1YmplY3Q6Q29ycG9yYXRlLkFkZHJlc3MuQ291bnRyeSIgeHBhdGg9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5IiAvPg0KICAgIDxJdGVtIGtleT0ic3ViamVjdDpDb3Jwb3JhdGUuQWRkcmVzcy5Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgeHBhdGg9Ii9lZ29ucDplRm9ybV9lR292XzAwX1BPL2Vnb25wOnNla2NpYVppYWRhdGVsUE9fQ29ycG9yYXRlQm9keS9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPQWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbFBPQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgLz4NCiAgICA8SXRlbSBrZXk9InN1YmplY3Q6Q29ycG9yYXRlLkFkZHJlc3MuQnVpbGRpbmdOdW1iZXIiIHhwYXRoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMF9QTy9lZ29ucDpzZWtjaWFaaWFkYXRlbFBPX0NvcnBvcmF0ZUJvZHkvZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT0FkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxQT0FkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgLz4NCiAgICA8SXRlbSBrZXk9InN1YmplY3Q6Q29ycG9yYXRlLkFkZHJlc3MuQ291bnR5IiB4cGF0aD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDBfUE8vZWdvbnA6c2VrY2lhWmlhZGF0ZWxQT19Db3Jwb3JhdGVCb2R5L2Vnb25wOnNla2NpYVppYWRhdGVsUE9BZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsUE9BZHJlc2FPa3Jlc19Db3VudHkiIC8+DQogIDwvRGVmaW5pdGlvbj4NCjwvUHJlZmlsbERhdGFNYXBwaW5nPg==
77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48UHVibGlzaGVkRm9ybVZlcnNpb25NZXRhZGF0YSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBEZXNpZ25lclZlcnNpb249IjEuMTguMC4wIiBQdWJsaXNoaW5nRGF0ZT0iMTguIDEyLiAyMDE4Ij48Rm9ybSBHZXN0b3I9Ik1lc3RvIFBlemlub2siIFB1cnBvc2U9Ik5BIiBOYW1lPSIwMDAuRG9wbG5lbmllIHBvZGFuaWEgLSBQTyIgSWRlbnRpZmllcj0iTkEiPjxGb3JtVmVyc2lvbiBWYWxpZEZyb209IjE4LiAxMi4gMjAxOCIgVmFsaWRUbz0iTkEiIExhbmd1YWdlPSJzayIgVmVyc2lvbj0iMS4zIiBJZGVudGlmaWVyPSIwMDMwNTAyMi5BOTk5OTk5OS4wMDAwMDAwODEuRG9wbG5lbmllUG9kYW5pYV9QTyIgSUQ9IjUzNCIgR3VpZD0iYzYyYWZmODAtZjVjMy00ZjNkLWFjODMtNDAwY2FiMmJkOTFhIj48TWFwcGluZyBUcmFuc2xhdG9yVHlwZT0iQmFzaWMiIElzRmllbGRNYXBwaW5nVXNlZD0iZmFsc2UiIC8+PFJlbW90ZUxvb2t1cHM+PFJlbW90ZUxvb2t1cCBDb250cm9sSWQ9IlppYWRhdGVsUE9TdGF0dXRhclRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDA2MiIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IiIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbFBPU3RhdHV0YXJUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDA2MyIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IiIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbFBPQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDAyNSIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IiIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbFBPQWRyZXNhU3RhdF9Db3VudHJ5IiBSZW1vdGVMb29rdXBDb2RlPSJTVVNSXzA4NTkiIFJlbW90ZVNvdXJjZUlkZW50aWZpZXI9IiIgUmVtb3RlRGVmYXVsdFZhbHVlPSIiIFJlbW90ZVNvcnRDcml0ZXJpdW09IiIgUmVtb3RlQ29udHJvbFR5cGU9IlJlbW90ZUxvb2t1cCIgLz48UmVtb3RlTG9va3VwIENvbnRyb2xJZD0iWmlhZGF0ZWxQT0FkcmVzYUtyYWpfUmVnaW9uIiBSZW1vdGVMb29rdXBDb2RlPSJTVVNSXzAwMjMiIFJlbW90ZVNvdXJjZUlkZW50aWZpZXI9IiIgUmVtb3RlRGVmYXVsdFZhbHVlPSIiIFJlbW90ZVNvcnRDcml0ZXJpdW09IiIgUmVtb3RlQ29udHJvbFR5cGU9IlJlbW90ZUxvb2t1cCIgLz48UmVtb3RlTG9va3VwIENvbnRyb2xJZD0iWmlhZGF0ZWxQT0FkcmVzYU9rcmVzX0NvdW50eSIgUmVtb3RlTG9va3VwQ29kZT0iU1VTUl8wMDI0IiBSZW1vdGVTb3VyY2VJZGVudGlmaWVyPSIiIFJlbW90ZURlZmF1bHRWYWx1ZT0iIiBSZW1vdGVTb3J0Q3JpdGVyaXVtPSIiIFJlbW90ZUNvbnRyb2xUeXBlPSJSZW1vdGVMb29rdXAiIC8+PFJlbW90ZUxvb2t1cCBDb250cm9sSWQ9IlppYWRhdGVsUE9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDg1OSIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IiIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDAyNSIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IiIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24iIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDAyMyIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IiIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbFBPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5IiBSZW1vdGVMb29rdXBDb2RlPSJTVVNSXzAwMjQiIFJlbW90ZVNvdXJjZUlkZW50aWZpZXI9IiIgUmVtb3RlRGVmYXVsdFZhbHVlPSIiIFJlbW90ZVNvcnRDcml0ZXJpdW09IiIgUmVtb3RlQ29udHJvbFR5cGU9IlJlbW90ZUxvb2t1cCIgLz48L1JlbW90ZUxvb2t1cHM+PEZpZHMgLz48L0Zvcm1WZXJzaW9uPjwvRm9ybT48L1B1Ymxpc2hlZEZvcm1WZXJzaW9uTWV0YWRhdGE+
77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48cG9zcD48ZmllbGRzPjxmaWVsZD48aWQ+Q2hlY2taRVA8L2lkPjx2YWx1ZT5mYWxzZTwvdmFsdWU+PC9maWVsZD48ZmllbGQ+PGlkPlBheW1lbnRPcmRlcjwvaWQ+PHZhbHVlPmZhbHNlPC92YWx1ZT48L2ZpZWxkPjxmaWVsZD48aWQ+RGVsaXZlcnk8L2lkPjx2YWx1ZT5mYWxzZTwvdmFsdWU+PC9maWVsZD48ZmllbGQ+PGlkPlNpZ248L2lkPjx2YWx1ZT5mYWxzZTwvdmFsdWU+PC9maWVsZD48L2ZpZWxkcz48b3JjaGVzdHJhdGlvbj48aWQ+MTwvaWQ+PC9vcmNoZXN0cmF0aW9uPjwvcG9zcD4=