Return to previous page

This file contains statistics and figures from the paper, “Molecular, Cellular, and Developmental Organization of the Mouse Vomeronasal organ at Single Cell Resolution” by Max Hills Jr., Limei Ma, Ai Fang, Thelma Chiremba, Seth Malloy, Allison Scott, Anoja Perera, and C. Ron Yu.

The paper can be found here:

Molecular, Cellular, and Developmental Organization of the Mouse Vomeronasal organ at Single Cell Resolution

Neuronal Lineage UMAP – Cell Types

Early Neuronal Lineage – INP through iVSN/mOSN

VNO Differential Gene Expression Analysis

Early INP

V1R vs V2R

V1R vs OSN

V2R vs OSN

Late INP

V1R vs V2R

V1R vs V2R GO Terms

V1R vs OSN

V2R vs OSN

iVSN

V1R vs V2R

V1R vs V2R GO Terms

mVSN

V1R vs V2R

V1R vs V2R GO Terms

V1R vs OSN

V1R vs OSN GO Terms

V2R vs OSN

V2R vs OSN GO Terms

LS0tCnRpdGxlOiAiVk5PIEF0bGFzIERpZmZlcmVudGlhbCBHZW5lIEV4cHJlc3Npb24gVGFibGVzIgphdXRob3I6ICJNYXggSGlsbHMiCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBjc3M6IHN0eWxlLmNzcwotLS0KCmBgYHtyLCBlY2hvPUZBTFNFfQoKcmVhY3RhYmxlIDwtIGZ1bmN0aW9uKC4uLikgewogIGh0bWx0b29sczo6dGFnTGlzdChyZWFjdGFibGU6OnJlYWN0YWJsZSguLi4pKQp9CgpgYGAKCioqUmV0dXJuIHRvIHByZXZpb3VzIHBhZ2UqKiAgCmBgYHtyLCByZXN1bHRzPSdhc2lzJ30KCmNhdCgiPGJ1dHRvbiBvbmNsaWNrPSdoaXN0b3J5LmJhY2soKSc+QmFjazwvYnV0dG9uPiIpCgpgYGAKICAKICAKICAKPlRoaXMgZmlsZSBjb250YWlucyBzdGF0aXN0aWNzIGFuZCBmaWd1cmVzIGZyb20gdGhlIHBhcGVyLCAiTW9sZWN1bGFyLCBDZWxsdWxhciwgYW5kIERldmVsb3BtZW50YWwgT3JnYW5pemF0aW9uIG9mIHRoZSBNb3VzZSBWb21lcm9uYXNhbCBvcmdhbiBhdCBTaW5nbGUgQ2VsbCBSZXNvbHV0aW9uIiBieSBNYXggSGlsbHMgSnIuLCBMaW1laSBNYSwgQWkgRmFuZywgVGhlbG1hIENoaXJlbWJhLCBTZXRoIE1hbGxveSwgQWxsaXNvbiBTY290dCwgQW5vamEgUGVyZXJhLCBhbmQgQy4gUm9uIFl1LiAgICAKClRoZSBwYXBlciBjYW4gYmUgZm91bmQgaGVyZTogIAoKW01vbGVjdWxhciwgQ2VsbHVsYXIsIGFuZCBEZXZlbG9wbWVudGFsIE9yZ2FuaXphdGlvbiBvZiB0aGUgTW91c2UgVm9tZXJvbmFzYWwgb3JnYW4gYXQgU2luZ2xlIENlbGwgUmVzb2x1dGlvbl0oaHR0cHM6Ly9lbGlmZXNjaWVuY2VzLm9yZy9yZXZpZXdlZC1wcmVwcmludHMvOTczNTYjdGFiLWNvbnRlbnQpCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KCiMgUi1NYXJrZG93biBHbG9iYWwgU2V0dGluZ3MgIAoKIyBTZXQtdXAgYSBkZWZhdWx0IGltYWdlIHNpemUgb2YgMTAgWCAxMCBpbmNoZXMuIFN1cHByZXNzIHdhcm5pbmcKIyBhbmQgZXJyb3IgbWVzc2FnZXMuIEhpZGUgY29kZS4Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGNvbW1lbnQ9IiIsCiAgICAgICAgICAgICAgICAgICAgICBlcnJvcj1GQUxTRSwgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTEyLCBjYWNoZT1GQUxTRSkKCmBgYAoKYGBge3IgbGlicmFyaWVzLCBpbmNsdWRlPUZBTFNFfQoKIyBMaWJyYXJ5IExvYWRpbmcgIAoKc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKHsKICBsaWJyYXJ5KHRpZHl2ZXJzZSk7IGxpYnJhcnkoc3RyaW5ncik7IGxpYnJhcnkoZ2dwbG90MikKICBsaWJyYXJ5KGRhdGEudGFibGUpOyBsaWJyYXJ5KG9yZy5NbS5lZy5kYik7IGxpYnJhcnkoZHBseXIpCiAgbGlicmFyeShTZXVyYXQpOyBsaWJyYXJ5KERCSSk7IGxpYnJhcnkoY293cGxvdCk7IGxpYnJhcnkoTWF0cml4KSAKICBsaWJyYXJ5KGdsbUdhbVBvaSk7IGxpYnJhcnkodGliYmxlKTsgbGlicmFyeShnZ3B1YnIpOyBsaWJyYXJ5KHN2Z2xpdGUpCiAgbGlicmFyeShnZ3NpZ25pZik7IGxpYnJhcnkoc3RhdHMpOyBsaWJyYXJ5KHZlZ2FuKTsgbGlicmFyeShzY2FsZXMpCiAgbGlicmFyeShjYXJldCk7IGxpYnJhcnkocGF0Y2h3b3JrKTsgbGlicmFyeShwbG90bHkpOyBsaWJyYXJ5KHJlYWN0YWJsZSkKICBsaWJyYXJ5KG9wZW54bHN4KTsgbGlicmFyeShncmlkRXh0cmEpOyBsaWJyYXJ5KGdncmVwZWwpOyBsaWJyYXJ5KGh0bWx0b29scykKICBsaWJyYXJ5KGJpb21hUnQpOyBsaWJyYXJ5KHBoZWF0bWFwKTsgbGlicmFyeShtc2lnZGJyKQogIGxpYnJhcnkoUm1pc2MpOyBsaWJyYXJ5KGdncGxvdGlmeSk7IGxpYnJhcnkoZ2dwbWlzYykKICBsaWJyYXJ5KHNjYWxlcyk7IGxpYnJhcnkoaGVhdG1hcGx5KTsgbGlicmFyeShkZW5kZXh0ZW5kKQp9KQoKYGBgCgpgYGB7cn0KCiMgR2xvYmFsIFZhcmlhYmxlcwpvcHRpb25zKHNjaXBlbiA9IDk5OSkKIyBUaGUgaG9tZSBkaXJlY3RvcnkKaG9tZV9kaXIgPC0gIi9sL1l1L1l1TGFiL0Jpb2luZm9ybWF0aWNzL3Byb2plY3RzL21oaC9zY19WTk8vIgojIERpcmVjdG9yeSBmb3Igc3RvcmluZyBkYXRhIG9iamVjdHMgYXQgY3J1Y2lhbCBzdGFnZXMKb2JqZWN0X2RpciA8LSBwYXN0ZTAoaG9tZV9kaXIsImZpbmFsLnNldS5vYmpzLyIpCiMgRGlyZWN0b3J5IGZvciBpbWFnZXMgZnJvbSB0aGUgZmluYWwgYW5hbHlzaXMKaW1hZ2VfZGlyIDwtIHBhc3RlMChob21lX2RpciwiZmluYWxfaW1hZ2VzLyIpCm5ld19vYmpfZGlyIDwtICIvbC9ZdS9ZdUxhYi9CaW9pbmZvcm1hdGljcy9wcm9qZWN0cy9taGgvc2NfVk5PL3JldmlzaW9uL29iamVjdHMvIgoKIyBMb2FkIGBgYGlucC5pbnRlZ3JhdGVkYGBgCmxvYWQocGFzdGUwKG9iamVjdF9kaXIsImlucC5pbnRlZ3JhdGVkLnByZUNlbGxJRCIpKQojTG9hZCBOZXVyb25hbCBMaW5lYWdlIFNldXJhdCBPYmplY3QgIApsb2FkKGZpbGUgPSBwYXN0ZTAob2JqZWN0X2RpciwibmV1cm9uLmludGVncmF0ZWQucG9zdENlbGxJRCIpKQojIFJlbmFtZSB1bmtub3duX21WU04gdG8gc1ZTTgpsZXZlbHMobmV1cm9uLmludGVncmF0ZWRAYWN0aXZlLmlkZW50KVtsZXZlbHMobmV1cm9uLmludGVncmF0ZWRAYWN0aXZlLmlkZW50KT09InVua25vd25fbVZTTiJdIDwtICJzVlNOIgpsZXZlbHMobmV1cm9uLmludGVncmF0ZWQkY2VsbF90eXBlKVtsZXZlbHMobmV1cm9uLmludGVncmF0ZWQkY2VsbF90eXBlKT09InVua25vd25fbVZTTiJdIDwtICJzVlNOIgoKZ2xvYmFsLnZhcnMgPC0gYyhscygpLCJnbG9iYWwudmFycyIpCmludmlzaWJsZShnYygpKQoKYGBgCgojIE5ldXJvbmFsIExpbmVhZ2UgVU1BUCAtLSBDZWxsIFR5cGVzICAKCmBgYHtyfQoKRGltUGxvdChuZXVyb24uaW50ZWdyYXRlZCwgbGFiZWw9VFJVRSwgcmVwZWw9VFJVRSkKCmBgYAoKIyBFYXJseSBOZXVyb25hbCBMaW5lYWdlIC0tIElOUCB0aHJvdWdoIGlWU04vbU9TTiAgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KCnAxIDwtIERpbVBsb3QoaW5wLmludGVncmF0ZWQsIGxhYmVsPVRSVUUsIHJlcGVsPVRSVUUpICsgCiAgdGhlbWUoYXNwZWN0LnJhdGlvPTEsIHBsb3QudGl0bGU9ZWxlbWVudF90ZXh0KGhqdXN0PTApKSArIAogIGxhYnModGl0bGU9IkNsdXN0ZXJzIikKcDIgPC0gRGltUGxvdChpbnAuaW50ZWdyYXRlZCwgbGFiZWw9VFJVRSwgcmVwZWw9VFJVRSwgZ3JvdXAuYnk9ImNlbGxfdHlwZSIpICsgCiAgdGhlbWUoYXNwZWN0LnJhdGlvPTEsIHBsb3QudGl0bGU9ZWxlbWVudF90ZXh0KGhqdXN0PTApKSArCiAgbGFicyh0aXRsZT0iQ2VsbCBUeXBlcyIpCgpwMyA8LSBnZ2FycmFuZ2UocDEscDIsbmNvbD0yKQoKYGBgCgpgYGB7cixmaWcud2lkdGg9MTYsZmlnLmhlaWdodD04fQoKcHJpbnQocDMpCgpgYGAKCiMgVk5PIERpZmZlcmVudGlhbCBHZW5lIEV4cHJlc3Npb24gQW5hbHlzaXMgey50YWJzZXQgLnRhYnNldC1waWxsc30gIAoKIyMgRWFybHkgSU5QIHsudGFic2V0IC50YWJzZXQtcGlsbHN9ICAKCiMjIyBWMVIgdnMgVjJSICAKCmBgYHtyfQoKc2lnLmVhcmx5X0lOUF9WMVJfdnNfVjJSIDwtIHJlYWQuY3N2KGZpbGU9cGFzdGUwKG5ld19vYmpfZGlyLCJzaWcuZWFybHlfSU5QX1YxUl92c19WMlIuY3N2IikpCgpzaWcuZWFybHlfSU5QX1YxUl92c19WMlJbICxjKCJwX3ZhbCIsImF2Z19sb2cyRkMiLCJwX3ZhbF9hZGoiKV0gPC0gcm91bmQoc2lnLmVhcmx5X0lOUF9WMVJfdnNfVjJSWyAsYygicF92YWwiLCJhdmdfbG9nMkZDIiwicF92YWxfYWRqIildLCA1KSAKCnJlYWN0YWJsZShzaWcuZWFybHlfSU5QX1YxUl92c19WMlIsCiAgICAgICAgICBzb3J0YWJsZSA9IFRSVUUsCiAgICAgICAgICBzaG93U29ydGFibGUgPSBUUlVFLAogICAgICAgICAgcmVzaXphYmxlID0gVFJVRSwKICAgICAgICAgIGZpbHRlcmFibGUgPSBUUlVFLAogICAgICAgICAgc2VhcmNoYWJsZSA9IFRSVUUsCiAgICAgICAgICBkZWZhdWx0UGFnZVNpemUgPSAxMCwKICAgICAgICAgIHN0cmlwZWQgPSBUUlVFLAogICAgICAgICAgYm9yZGVyZWQgPSBUUlVFLAogICAgICAgICAgY29sdW1ucyA9IGxpc3QoCiAgICAgICAgICAgIGF2Z19sb2cyRkMgPSBjb2xEZWYoCiAgICAgICAgICAgICAgc3R5bGUgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gMCkgewogICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzAwODAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiNlMDAwMDAiCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiM3NzciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsaXN0KGNvbG9yID0gY29sb3IsIGZvbnRXZWlnaHQgPSAiYm9sZCIpCiAgICAgICAgICAgICAgfSkKKSkKCmBgYAoKIyMjIFYxUiB2cyBPU04gIAoKYGBge3J9CgpzaWcuZWFybHlfSU5QX1YxUl92c19PU04gPC0gcmVhZC5jc3YoZmlsZT1wYXN0ZTAobmV3X29ial9kaXIsInNpZy5lYXJseV9JTlBfVjFSX3ZzX09TTi5jc3YiKSkKCnNpZy5lYXJseV9JTlBfVjFSX3ZzX09TTlsgLGMoInBfdmFsIiwiYXZnX2xvZzJGQyIsInBfdmFsX2FkaiIpXSA8LSByb3VuZChzaWcuZWFybHlfSU5QX1YxUl92c19PU05bICxjKCJwX3ZhbCIsImF2Z19sb2cyRkMiLCJwX3ZhbF9hZGoiKV0sIDUpIAoKcmVhY3RhYmxlKHNpZy5lYXJseV9JTlBfVjFSX3ZzX09TTiwKICAgICAgICAgIHNvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHNob3dTb3J0YWJsZSA9IFRSVUUsCiAgICAgICAgICByZXNpemFibGUgPSBUUlVFLAogICAgICAgICAgZmlsdGVyYWJsZSA9IFRSVUUsCiAgICAgICAgICBzZWFyY2hhYmxlID0gVFJVRSwKICAgICAgICAgIGRlZmF1bHRQYWdlU2l6ZSA9IDEwLAogICAgICAgICAgc3RyaXBlZCA9IFRSVUUsCiAgICAgICAgICBib3JkZXJlZCA9IFRSVUUsCiAgICAgICAgICBjb2x1bW5zID0gbGlzdCgKICAgICAgICAgICAgYXZnX2xvZzJGQyA9IGNvbERlZigKICAgICAgICAgICAgICBzdHlsZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7CiAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjMDA4MDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiI2UwMDAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzc3NyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3QoY29sb3IgPSBjb2xvciwgZm9udFdlaWdodCA9ICJib2xkIikKICAgICAgICAgICAgICB9KQopKQoKYGBgCgojIyMgVjJSIHZzIE9TTiAgCgpgYGB7cn0KCnNpZy5lYXJseV9JTlBfVjJSX3ZzX09TTiA8LSByZWFkLmNzdihmaWxlPXBhc3RlMChuZXdfb2JqX2Rpciwic2lnLmVhcmx5X0lOUF9WMlJfdnNfT1NOLmNzdiIpKQoKc2lnLmVhcmx5X0lOUF9WMlJfdnNfT1NOWyAsYygicF92YWwiLCJhdmdfbG9nMkZDIiwicF92YWxfYWRqIildIDwtIHJvdW5kKHNpZy5lYXJseV9JTlBfVjJSX3ZzX09TTlsgLGMoInBfdmFsIiwiYXZnX2xvZzJGQyIsInBfdmFsX2FkaiIpXSwgNSkgCgpyZWFjdGFibGUoc2lnLmVhcmx5X0lOUF9WMlJfdnNfT1NOLAogICAgICAgICAgc29ydGFibGUgPSBUUlVFLAogICAgICAgICAgc2hvd1NvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHJlc2l6YWJsZSA9IFRSVUUsCiAgICAgICAgICBmaWx0ZXJhYmxlID0gVFJVRSwKICAgICAgICAgIHNlYXJjaGFibGUgPSBUUlVFLAogICAgICAgICAgZGVmYXVsdFBhZ2VTaXplID0gMTAsCiAgICAgICAgICBzdHJpcGVkID0gVFJVRSwKICAgICAgICAgIGJvcmRlcmVkID0gVFJVRSwKICAgICAgICAgIGNvbHVtbnMgPSBsaXN0KAogICAgICAgICAgICBhdmdfbG9nMkZDID0gY29sRGVmKAogICAgICAgICAgICAgIHN0eWxlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IDApIHsKICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiMwMDgwMDAiCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjZTAwMDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjNzc3IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGlzdChjb2xvciA9IGNvbG9yLCBmb250V2VpZ2h0ID0gImJvbGQiKQogICAgICAgICAgICAgIH0pCikpCgpgYGAKCiMjIExhdGUgSU5QIHsudGFic2V0IC50YWJzZXQtcGlsbHN9ICAKCiMjIyBWMVIgdnMgVjJSICAKCmBgYHtyfQoKc2lnLmxhdGVfSU5QX1YxUl92c19WMlIgPC0gcmVhZC5jc3YoZmlsZT1wYXN0ZTAobmV3X29ial9kaXIsInNpZy5sYXRlX0lOUF9WMVJfdnNfVjJSLmNzdiIpKQoKc2lnLmxhdGVfSU5QX1YxUl92c19WMlJbICxjKCJwX3ZhbCIsImF2Z19sb2cyRkMiLCJwX3ZhbF9hZGoiKV0gPC0gcm91bmQoc2lnLmxhdGVfSU5QX1YxUl92c19WMlJbICxjKCJwX3ZhbCIsImF2Z19sb2cyRkMiLCJwX3ZhbF9hZGoiKV0sIDUpIAoKcmVhY3RhYmxlKHNpZy5sYXRlX0lOUF9WMVJfdnNfVjJSLAogICAgICAgICAgc29ydGFibGUgPSBUUlVFLAogICAgICAgICAgc2hvd1NvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHJlc2l6YWJsZSA9IFRSVUUsCiAgICAgICAgICBmaWx0ZXJhYmxlID0gVFJVRSwKICAgICAgICAgIHNlYXJjaGFibGUgPSBUUlVFLAogICAgICAgICAgZGVmYXVsdFBhZ2VTaXplID0gMTAsCiAgICAgICAgICBzdHJpcGVkID0gVFJVRSwKICAgICAgICAgIGJvcmRlcmVkID0gVFJVRSwKICAgICAgICAgIGNvbHVtbnMgPSBsaXN0KAogICAgICAgICAgICBhdmdfbG9nMkZDID0gY29sRGVmKAogICAgICAgICAgICAgIHN0eWxlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IDApIHsKICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiMwMDgwMDAiCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjZTAwMDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjNzc3IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGlzdChjb2xvciA9IGNvbG9yLCBmb250V2VpZ2h0ID0gImJvbGQiKQogICAgICAgICAgICAgIH0pCikpCgpgYGAKCiMjIyBWMVIgdnMgVjJSIEdPIFRlcm1zICAKCmBgYHtyfQoKc2lnLkdPLmVhcmx5X0lOUC5WMVJfdnNfVjJSIDwtIHJlYWQuY3N2KGZpbGU9cGFzdGUwKG5ld19vYmpfZGlyLCJzaWcuR08uZWFybHlfSU5QLlYxUl92c19WMlIuY3N2IikpCgp2ZWNzXzJfcm91bmQgPC0gc2FwcGx5KHNpZy5HTy5lYXJseV9JTlAuVjFSX3ZzX1YyUiwgaXMuZG91YmxlKQoKc2lnLkdPLmVhcmx5X0lOUC5WMVJfdnNfVjJSWyAsdmVjc18yX3JvdW5kXSA8LSByb3VuZChzaWcuR08uZWFybHlfSU5QLlYxUl92c19WMlJbICx2ZWNzXzJfcm91bmRdLCA1KSAKCnJlYWN0YWJsZShzaWcuR08uZWFybHlfSU5QLlYxUl92c19WMlIsCiAgICAgICAgICBzb3J0YWJsZSA9IFRSVUUsCiAgICAgICAgICBzaG93U29ydGFibGUgPSBUUlVFLAogICAgICAgICAgcmVzaXphYmxlID0gVFJVRSwKICAgICAgICAgIGZpbHRlcmFibGUgPSBUUlVFLAogICAgICAgICAgc2VhcmNoYWJsZSA9IFRSVUUsCiAgICAgICAgICBkZWZhdWx0UGFnZVNpemUgPSAxMCwKICAgICAgICAgIHN0cmlwZWQgPSBUUlVFLAogICAgICAgICAgYm9yZGVyZWQgPSBUUlVFLAogICAgICAgICAgY29sdW1ucyA9IGxpc3QoCiAgICAgICAgICAgIE5FUyA9IGNvbERlZigKICAgICAgICAgICAgICBzdHlsZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7CiAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjMDA4MDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiI2UwMDAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzc3NyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3QoY29sb3IgPSBjb2xvciwgZm9udFdlaWdodCA9ICJib2xkIikKICAgICAgICAgICAgICB9KQopKQoKYGBgCgojIyMgVjFSIHZzIE9TTiAgCgpgYGB7cn0KCnNpZy5sYXRlX0lOUF9WMVJfdnNfT1NOIDwtIHJlYWQuY3N2KGZpbGU9cGFzdGUwKG5ld19vYmpfZGlyLCJzaWcubGF0ZV9JTlBfVjFSX3ZzX09TTi5jc3YiKSkKCnNpZy5sYXRlX0lOUF9WMVJfdnNfT1NOWyAsYygicF92YWwiLCJhdmdfbG9nMkZDIiwicF92YWxfYWRqIildIDwtIHJvdW5kKHNpZy5sYXRlX0lOUF9WMVJfdnNfT1NOWyAsYygicF92YWwiLCJhdmdfbG9nMkZDIiwicF92YWxfYWRqIildLCA1KSAKCnJlYWN0YWJsZShzaWcubGF0ZV9JTlBfVjFSX3ZzX09TTiwKICAgICAgICAgIHNvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHNob3dTb3J0YWJsZSA9IFRSVUUsCiAgICAgICAgICByZXNpemFibGUgPSBUUlVFLAogICAgICAgICAgZmlsdGVyYWJsZSA9IFRSVUUsCiAgICAgICAgICBzZWFyY2hhYmxlID0gVFJVRSwKICAgICAgICAgIGRlZmF1bHRQYWdlU2l6ZSA9IDEwLAogICAgICAgICAgc3RyaXBlZCA9IFRSVUUsCiAgICAgICAgICBib3JkZXJlZCA9IFRSVUUsCiAgICAgICAgICBjb2x1bW5zID0gbGlzdCgKICAgICAgICAgICAgYXZnX2xvZzJGQyA9IGNvbERlZigKICAgICAgICAgICAgICBzdHlsZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7CiAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjMDA4MDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiI2UwMDAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzc3NyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3QoY29sb3IgPSBjb2xvciwgZm9udFdlaWdodCA9ICJib2xkIikKICAgICAgICAgICAgICB9KQopKQoKYGBgCgojIyMgVjJSIHZzIE9TTiAgCgpgYGB7cn0KCnNpZy5sYXRlX0lOUF9WMlJfdnNfT1NOIDwtIHJlYWQuY3N2KGZpbGU9cGFzdGUwKG5ld19vYmpfZGlyLCJzaWcubGF0ZV9JTlBfVjJSX3ZzX09TTi5jc3YiKSkKCnNpZy5sYXRlX0lOUF9WMlJfdnNfT1NOWyAsYygicF92YWwiLCJhdmdfbG9nMkZDIiwicF92YWxfYWRqIildIDwtIHJvdW5kKHNpZy5sYXRlX0lOUF9WMlJfdnNfT1NOWyAsYygicF92YWwiLCJhdmdfbG9nMkZDIiwicF92YWxfYWRqIildLCA1KSAKCnJlYWN0YWJsZShzaWcubGF0ZV9JTlBfVjJSX3ZzX09TTiwKICAgICAgICAgIHNvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHNob3dTb3J0YWJsZSA9IFRSVUUsCiAgICAgICAgICByZXNpemFibGUgPSBUUlVFLAogICAgICAgICAgZmlsdGVyYWJsZSA9IFRSVUUsCiAgICAgICAgICBzZWFyY2hhYmxlID0gVFJVRSwKICAgICAgICAgIGRlZmF1bHRQYWdlU2l6ZSA9IDEwLAogICAgICAgICAgc3RyaXBlZCA9IFRSVUUsCiAgICAgICAgICBib3JkZXJlZCA9IFRSVUUsCiAgICAgICAgICBjb2x1bW5zID0gbGlzdCgKICAgICAgICAgICAgYXZnX2xvZzJGQyA9IGNvbERlZigKICAgICAgICAgICAgICBzdHlsZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7CiAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjMDA4MDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiI2UwMDAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzc3NyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3QoY29sb3IgPSBjb2xvciwgZm9udFdlaWdodCA9ICJib2xkIikKICAgICAgICAgICAgICB9KQopKQoKYGBgCgojIyBpVlNOIHsudGFic2V0IC50YWJzZXQtcGlsbHN9ICAKCiMjIyBWMVIgdnMgVjJSICAKCmBgYHtyfQoKc2lnLmlWU05fVjFSX3ZzX1YyUiA8LSByZWFkLmNzdihmaWxlPXBhc3RlMChuZXdfb2JqX2Rpciwic2lnLmlWU05fVjFSX3ZzX1YyUi5jc3YiKSkKCnNpZy5pVlNOX1YxUl92c19WMlJbICxjKCJwX3ZhbCIsImF2Z19sb2cyRkMiLCJwX3ZhbF9hZGoiKV0gPC0gcm91bmQoc2lnLmlWU05fVjFSX3ZzX1YyUlsgLGMoInBfdmFsIiwiYXZnX2xvZzJGQyIsInBfdmFsX2FkaiIpXSwgNSkgCgpyZWFjdGFibGUoc2lnLmlWU05fVjFSX3ZzX1YyUiwKICAgICAgICAgIHNvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHNob3dTb3J0YWJsZSA9IFRSVUUsCiAgICAgICAgICByZXNpemFibGUgPSBUUlVFLAogICAgICAgICAgZmlsdGVyYWJsZSA9IFRSVUUsCiAgICAgICAgICBzZWFyY2hhYmxlID0gVFJVRSwKICAgICAgICAgIGRlZmF1bHRQYWdlU2l6ZSA9IDEwLAogICAgICAgICAgc3RyaXBlZCA9IFRSVUUsCiAgICAgICAgICBib3JkZXJlZCA9IFRSVUUsCiAgICAgICAgICBjb2x1bW5zID0gbGlzdCgKICAgICAgICAgICAgYXZnX2xvZzJGQyA9IGNvbERlZigKICAgICAgICAgICAgICBzdHlsZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7CiAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjMDA4MDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiI2UwMDAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzc3NyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3QoY29sb3IgPSBjb2xvciwgZm9udFdlaWdodCA9ICJib2xkIikKICAgICAgICAgICAgICB9KQopKQoKYGBgCgojIyMgVjFSIHZzIFYyUiBHTyBUZXJtcyAgCgpgYGB7cn0KCnNpZy5HTy5pVlNOX1YxUl92c19WMlIgPC0gcmVhZC5jc3YoZmlsZT1wYXN0ZTAobmV3X29ial9kaXIsInNpZy5HTy5pVlNOX1YxUl92c19WMlIuY3N2IikpCgp2ZWNzXzJfcm91bmQgPC0gc2FwcGx5KHNpZy5HTy5pVlNOX1YxUl92c19WMlIsIGlzLmRvdWJsZSkKCnNpZy5HTy5pVlNOX1YxUl92c19WMlJbICx2ZWNzXzJfcm91bmRdIDwtIHJvdW5kKHNpZy5HTy5pVlNOX1YxUl92c19WMlJbICx2ZWNzXzJfcm91bmRdLCA1KSAKCnJlYWN0YWJsZShzaWcuR08uaVZTTl9WMVJfdnNfVjJSLAogICAgICAgICAgc29ydGFibGUgPSBUUlVFLAogICAgICAgICAgc2hvd1NvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHJlc2l6YWJsZSA9IFRSVUUsCiAgICAgICAgICBmaWx0ZXJhYmxlID0gVFJVRSwKICAgICAgICAgIHNlYXJjaGFibGUgPSBUUlVFLAogICAgICAgICAgZGVmYXVsdFBhZ2VTaXplID0gMTAsCiAgICAgICAgICBzdHJpcGVkID0gVFJVRSwKICAgICAgICAgIGJvcmRlcmVkID0gVFJVRSwKICAgICAgICAgIGNvbHVtbnMgPSBsaXN0KAogICAgICAgICAgICBORVMgPSBjb2xEZWYoCiAgICAgICAgICAgICAgc3R5bGUgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gMCkgewogICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzAwODAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiNlMDAwMDAiCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiM3NzciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsaXN0KGNvbG9yID0gY29sb3IsIGZvbnRXZWlnaHQgPSAiYm9sZCIpCiAgICAgICAgICAgICAgfSkKKSkKCmBgYAoKIyMgbVZTTiB7LnRhYnNldCAudGFic2V0LXBpbGxzfSAgCgojIyMgVjFSIHZzIFYyUiAgCgpgYGB7cn0KCnNpZy5tVlNOX1YxUl92c19WMlIgPC0gcmVhZC5jc3YoZmlsZT1wYXN0ZTAobmV3X29ial9kaXIsInNpZy5tVlNOX1YxUl92c19WMlIuY3N2IikpCgp2ZWNzXzJfcm91bmQgPC0gc2FwcGx5KHNpZy5tVlNOX1YxUl92c19WMlIsIGlzLmRvdWJsZSkKCnNpZy5tVlNOX1YxUl92c19WMlJbICx2ZWNzXzJfcm91bmRdIDwtIHJvdW5kKHNpZy5tVlNOX1YxUl92c19WMlJbICx2ZWNzXzJfcm91bmRdLCA1KSAKCnJlYWN0YWJsZShzaWcubVZTTl9WMVJfdnNfVjJSLAogICAgICAgICAgc29ydGFibGUgPSBUUlVFLAogICAgICAgICAgc2hvd1NvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHJlc2l6YWJsZSA9IFRSVUUsCiAgICAgICAgICBmaWx0ZXJhYmxlID0gVFJVRSwKICAgICAgICAgIHNlYXJjaGFibGUgPSBUUlVFLAogICAgICAgICAgZGVmYXVsdFBhZ2VTaXplID0gMTAsCiAgICAgICAgICBzdHJpcGVkID0gVFJVRSwKICAgICAgICAgIGJvcmRlcmVkID0gVFJVRSwKICAgICAgICAgIGNvbHVtbnMgPSBsaXN0KAogICAgICAgICAgICBhdmdfbG9nMkZDID0gY29sRGVmKAogICAgICAgICAgICAgIHN0eWxlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IDApIHsKICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiMwMDgwMDAiCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjZTAwMDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjNzc3IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGlzdChjb2xvciA9IGNvbG9yLCBmb250V2VpZ2h0ID0gImJvbGQiKQogICAgICAgICAgICAgIH0pCikpCgpgYGAKCiMjIyBWMVIgdnMgVjJSIEdPIFRlcm1zICAKCmBgYHtyfQoKc2lnLkdPLm1WU05fVjFSX3ZzX1YyUiA8LSByZWFkLmNzdihmaWxlPXBhc3RlMChuZXdfb2JqX2Rpciwic2lnLkdPLm1WU05fVjFSX3ZzX1YyUi5jc3YiKSkKCnZlY3NfMl9yb3VuZCA8LSBzYXBwbHkoc2lnLkdPLm1WU05fVjFSX3ZzX1YyUiwgaXMuZG91YmxlKQoKc2lnLkdPLm1WU05fVjFSX3ZzX1YyUlsgLHZlY3NfMl9yb3VuZF0gPC0gcm91bmQoc2lnLkdPLm1WU05fVjFSX3ZzX1YyUlsgLHZlY3NfMl9yb3VuZF0sIDUpIAoKcmVhY3RhYmxlKHNpZy5HTy5tVlNOX1YxUl92c19WMlIsCiAgICAgICAgICBzb3J0YWJsZSA9IFRSVUUsCiAgICAgICAgICBzaG93U29ydGFibGUgPSBUUlVFLAogICAgICAgICAgcmVzaXphYmxlID0gVFJVRSwKICAgICAgICAgIGZpbHRlcmFibGUgPSBUUlVFLAogICAgICAgICAgc2VhcmNoYWJsZSA9IFRSVUUsCiAgICAgICAgICBkZWZhdWx0UGFnZVNpemUgPSAxMCwKICAgICAgICAgIHN0cmlwZWQgPSBUUlVFLAogICAgICAgICAgYm9yZGVyZWQgPSBUUlVFLAogICAgICAgICAgY29sdW1ucyA9IGxpc3QoCiAgICAgICAgICAgIE5FUyA9IGNvbERlZigKICAgICAgICAgICAgICBzdHlsZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7CiAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjMDA4MDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiI2UwMDAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzc3NyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3QoY29sb3IgPSBjb2xvciwgZm9udFdlaWdodCA9ICJib2xkIikKICAgICAgICAgICAgICB9KQopKQoKYGBgCgojIyMgVjFSIHZzIE9TTiAgCgpgYGB7cn0KCnNpZy5tVlNOX1YxUl92c19tT1NOIDwtIHJlYWQuY3N2KGZpbGU9cGFzdGUwKG5ld19vYmpfZGlyLCJzaWcubVZTTl9WMVJfdnNfbU9TTi5jc3YiKSkKCnZlY3NfMl9yb3VuZCA8LSBzYXBwbHkoc2lnLm1WU05fVjFSX3ZzX21PU04sIGlzLmRvdWJsZSkKCnNpZy5tVlNOX1YxUl92c19tT1NOWyAsdmVjc18yX3JvdW5kXSA8LSByb3VuZChzaWcubVZTTl9WMVJfdnNfbU9TTlsgLHZlY3NfMl9yb3VuZF0sIDUpIAoKcmVhY3RhYmxlKHNpZy5tVlNOX1YxUl92c19tT1NOLAogICAgICAgICAgc29ydGFibGUgPSBUUlVFLAogICAgICAgICAgc2hvd1NvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHJlc2l6YWJsZSA9IFRSVUUsCiAgICAgICAgICBmaWx0ZXJhYmxlID0gVFJVRSwKICAgICAgICAgIHNlYXJjaGFibGUgPSBUUlVFLAogICAgICAgICAgZGVmYXVsdFBhZ2VTaXplID0gMTAsCiAgICAgICAgICBzdHJpcGVkID0gVFJVRSwKICAgICAgICAgIGJvcmRlcmVkID0gVFJVRSwKICAgICAgICAgIGNvbHVtbnMgPSBsaXN0KAogICAgICAgICAgICBhdmdfbG9nMkZDID0gY29sRGVmKAogICAgICAgICAgICAgIHN0eWxlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IDApIHsKICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiMwMDgwMDAiCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjZTAwMDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjNzc3IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGlzdChjb2xvciA9IGNvbG9yLCBmb250V2VpZ2h0ID0gImJvbGQiKQogICAgICAgICAgICAgIH0pCikpCgpgYGAKCiMjIyBWMVIgdnMgT1NOIEdPIFRlcm1zICAKCmBgYHtyfQoKc2lnLkdPLm1WU05fVjFSX3ZzX21PU04gPC0gcmVhZC5jc3YoZmlsZT1wYXN0ZTAobmV3X29ial9kaXIsInNpZy5HTy5tVlNOX1YxUl92c19tT1NOLmNzdiIpKQoKdmVjc18yX3JvdW5kIDwtIHNhcHBseShzaWcuR08ubVZTTl9WMVJfdnNfbU9TTiwgaXMuZG91YmxlKQoKc2lnLkdPLm1WU05fVjFSX3ZzX21PU05bICx2ZWNzXzJfcm91bmRdIDwtIHJvdW5kKHNpZy5HTy5tVlNOX1YxUl92c19tT1NOWyAsdmVjc18yX3JvdW5kXSwgNSkgCgpyZWFjdGFibGUoc2lnLkdPLm1WU05fVjFSX3ZzX21PU04sCiAgICAgICAgICBzb3J0YWJsZSA9IFRSVUUsCiAgICAgICAgICBzaG93U29ydGFibGUgPSBUUlVFLAogICAgICAgICAgcmVzaXphYmxlID0gVFJVRSwKICAgICAgICAgIGZpbHRlcmFibGUgPSBUUlVFLAogICAgICAgICAgc2VhcmNoYWJsZSA9IFRSVUUsCiAgICAgICAgICBkZWZhdWx0UGFnZVNpemUgPSAxMCwKICAgICAgICAgIHN0cmlwZWQgPSBUUlVFLAogICAgICAgICAgYm9yZGVyZWQgPSBUUlVFLAogICAgICAgICAgY29sdW1ucyA9IGxpc3QoCiAgICAgICAgICAgIE5FUyA9IGNvbERlZigKICAgICAgICAgICAgICBzdHlsZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7CiAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjMDA4MDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiI2UwMDAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzc3NyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3QoY29sb3IgPSBjb2xvciwgZm9udFdlaWdodCA9ICJib2xkIikKICAgICAgICAgICAgICB9KQopKQoKYGBgCgojIyMgVjJSIHZzIE9TTiAgCgpgYGB7cn0KCnNpZy5sYXRlX0lOUF9WMlJfdnNfT1NOIDwtIHJlYWQuY3N2KGZpbGU9cGFzdGUwKG5ld19vYmpfZGlyLCJzaWcubGF0ZV9JTlBfVjJSX3ZzX09TTi5jc3YiKSkKCnNpZy5sYXRlX0lOUF9WMlJfdnNfT1NOWyAsYygicF92YWwiLCJhdmdfbG9nMkZDIiwicF92YWxfYWRqIildIDwtIHJvdW5kKHNpZy5sYXRlX0lOUF9WMlJfdnNfT1NOWyAsYygicF92YWwiLCJhdmdfbG9nMkZDIiwicF92YWxfYWRqIildLCA1KSAKCnJlYWN0YWJsZShzaWcubGF0ZV9JTlBfVjJSX3ZzX09TTiwKICAgICAgICAgIHNvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHNob3dTb3J0YWJsZSA9IFRSVUUsCiAgICAgICAgICByZXNpemFibGUgPSBUUlVFLAogICAgICAgICAgZmlsdGVyYWJsZSA9IFRSVUUsCiAgICAgICAgICBzZWFyY2hhYmxlID0gVFJVRSwKICAgICAgICAgIGRlZmF1bHRQYWdlU2l6ZSA9IDEwLAogICAgICAgICAgc3RyaXBlZCA9IFRSVUUsCiAgICAgICAgICBib3JkZXJlZCA9IFRSVUUsCiAgICAgICAgICBjb2x1bW5zID0gbGlzdCgKICAgICAgICAgICAgYXZnX2xvZzJGQyA9IGNvbERlZigKICAgICAgICAgICAgICBzdHlsZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7CiAgICAgICAgICAgICAgICAgIGNvbG9yIDwtICIjMDA4MDAwIgogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiI2UwMDAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzc3NyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3QoY29sb3IgPSBjb2xvciwgZm9udFdlaWdodCA9ICJib2xkIikKICAgICAgICAgICAgICB9KQopKQoKYGBgCgojIyMgVjJSIHZzIE9TTiBHTyBUZXJtcyAgCgpgYGB7cn0KCnNpZy5HTy5tVlNOX1YyUl92c19tT1NOIDwtIHJlYWQuY3N2KGZpbGU9cGFzdGUwKG5ld19vYmpfZGlyLCJzaWcuR08ubVZTTl9WMlJfdnNfbU9TTi5jc3YiKSkKCnZlY3NfMl9yb3VuZCA8LSBzYXBwbHkoc2lnLkdPLm1WU05fVjJSX3ZzX21PU04sIGlzLmRvdWJsZSkKCnNpZy5HTy5tVlNOX1YyUl92c19tT1NOWyAsdmVjc18yX3JvdW5kXSA8LSByb3VuZChzaWcuR08ubVZTTl9WMlJfdnNfbU9TTlsgLHZlY3NfMl9yb3VuZF0sIDUpIAoKcmVhY3RhYmxlKHNpZy5HTy5tVlNOX1YyUl92c19tT1NOLAogICAgICAgICAgc29ydGFibGUgPSBUUlVFLAogICAgICAgICAgc2hvd1NvcnRhYmxlID0gVFJVRSwKICAgICAgICAgIHJlc2l6YWJsZSA9IFRSVUUsCiAgICAgICAgICBmaWx0ZXJhYmxlID0gVFJVRSwKICAgICAgICAgIHNlYXJjaGFibGUgPSBUUlVFLAogICAgICAgICAgZGVmYXVsdFBhZ2VTaXplID0gMTAsCiAgICAgICAgICBzdHJpcGVkID0gVFJVRSwKICAgICAgICAgIGJvcmRlcmVkID0gVFJVRSwKICAgICAgICAgIGNvbHVtbnMgPSBsaXN0KAogICAgICAgICAgICBORVMgPSBjb2xEZWYoCiAgICAgICAgICAgICAgc3R5bGUgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gMCkgewogICAgICAgICAgICAgICAgICBjb2xvciA8LSAiIzAwODAwMCIKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiNlMDAwMDAiCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgY29sb3IgPC0gIiM3NzciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsaXN0KGNvbG9yID0gY29sb3IsIGZvbnRXZWlnaHQgPSAiYm9sZCIpCiAgICAgICAgICAgICAgfSkKKSkKCmBgYAogIAogIAogIAogIAogIAogIAogIAogIAogIA==