Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgX19fXyAgICAgICAgICAgICAgICAgICAgICAgIF8gICAgICBfCi8vICAgICAvIF9fX3xfX19fIF8gICBfIF9fX18gICBfX19ffCB8X18gIHwgfAovLyAgICB8IHwgICAvIF9fX3wgfCB8IHwgIF8gIFwvIF9fX3wgIF8gIFx8IHwKLy8gICAgfCB8X19ffCB8ICB8IHxffCB8IHwgfCB8IHxfX198IHwgfCB8fF98Ci8vICAgICBcX19fX3xffCAgXF9fX19ffF98IHxffFxfX19ffF98IHxffChfKSBNZWRpYSBiZW5jaG1hcmtzCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgCi8vCSCpIDIwMDYsIEludGVsIENvcnBvcmF0aW9uLCBsaWNlbnNlZCB1bmRlciBBcGFjaGUgMi4wIAovLwovLyAgZmlsZSA6CSBEbWF0cml4LmgKLy8gIGF1dGhvciA6IFNjb3R0IEV0dGluZ2VyIC0gc2NvdHQubS5ldHRpbmdlckBpbnRlbC5jb20KLy8gIGRlc2NyaXB0aW9uIDogRGlzcGxhY2VtZW50IG1hdHJpeCBhbmQgdmVjdG9yIG1hdGggCi8vCQkJCSAgb3BlcmF0aW9ucy4KLy8gIG1vZGlmaWVkIDogCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgojaWZuZGVmIERNQVRSSVhfSAojZGVmaW5lIERNQVRSSVhfSAoKI2lmIGRlZmluZWQoSEFWRV9DT05GSUdfSCkKIyBpbmNsdWRlICJjb25maWcuaCIKI2VuZGlmCgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSAiU21hbGxWZWN0b3JzLmgiCgp0eXBlZGVmIGVudW0ge1gsIFksIFp9IERNQXhpczsKdHlwZWRlZiBlbnVtIHtYWVosIFpZWCwgWVhaLCBaWFl9IERNT3JkZXI7CgovL3NpbXBsZSAzRCBEaXNwbGFjZW1lbnQgTWF0cml4IGNsYXNzCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIERNYXRyaXh7CnByb3RlY3RlZDoKCVQgZGF0YVszXVs0XTsKcHVibGljOgoKCURNYXRyaXgoKSB7fTsKCQoJLy9jb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIGRpYWdvbmFsIGVsZW1lbnRzIAoJRE1hdHJpeChUIGQxLCBUIGQyLCBUIGQzKTsKCgkvL2NvbnN0cnVjdG9yIHRvIGluaXRpYWxpemUgZGlhZ29uYWwgYW5kIHRyYW5zbGF0aW9uIGVsZW1lbnRzCglETWF0cml4KFQgZDEsIFQgZDIsIFQgZDMsIFQgdDEsIFQgdDIsIFQgdDMpOwoKCS8vY29uc3RydWN0b3IgZ2l2ZW4gYSBwb2ludGVyIHRvIGRhdGEgKGNvcGllcyB0aGUgZGF0YSkKCURNYXRyaXgoY29uc3QgVCAqcCkgeyBtZW1jcHkoZGF0YSwgcCwgMTIgKiBzaXplb2YoVCkpOyB9OwoKCS8vY29uc3RydWN0b3IgZ2l2ZW4gYW4gb3J0aG9nb25hbCBheGlzIGFuZCBhbiBhbmdsZSBpbiByYWRpYW5zCglETWF0cml4KERNQXhpcyBheGlzLCBUIGFuZ2xlKTsKCgkvL2NvbnN0cnVjdG9yIGdpdmVuIGEgc2V0IG9mIEV1bGVyIGFuZ2xlcyBpbiByYWRpYW5zCglETWF0cml4KGZsb2F0IHRoZXRhLCBmbG9hdCBwaGksIGZsb2F0IHRhdSwgRE1PcmRlciBvcmRlcik7CgoJLy9kZXN0cnVjdG9yCgl+RE1hdHJpeCgpIHt9OwoKCS8vL3NldCB0byB6ZXJvCgl2b2lkIENsZWFyKCkge21lbXNldChkYXRhLCAwLCBzaXplb2YoVCkgKiAxMik7IH07CgkKCS8vL3NldCB0byBpZGVudGl0eQoJdm9pZCBTZXRJZGVudGl0eSgpIHtDbGVhcigpOyBkYXRhWzBdWzBdID0gKFQpMTsgZGF0YVsxXVsxXSA9IChUKTE7IGRhdGFbMl1bMl0gPSAoVCkxOyB9OwoJCgkvLy9lbGVtZW50IGFjY2VzcwoJaW5saW5lIFQgJm9wZXJhdG9yKCkoaW50IHIsIGludCBjKSB7cmV0dXJuIGRhdGFbcl1bY107IH07CgkKCS8vL3NldCB0byBnaXZlbiBkYXRhCgl2b2lkIFNldChjb25zdCBUICpwKSB7IG1lbWNweShkYXRhLCBwLCAxMiAqIHNpemVvZihUKSk7IH07CgkKCS8vL3NldCB0cmFuc2xhdGlvbiB2ZWN0b3Igb2YgRGlzcGxhY2VtZW50IG1hdHJpeAoJdm9pZCBTZXRUcmFuc2xhdGlvbihjb25zdCBUIHQxLCBjb25zdCBUIHQyLCBjb25zdCBUIHQzKSB7IGRhdGFbMF1bM10gPSB0MTsgZGF0YVsxXVszXSA9IHQyOyBkYXRhWzJdWzNdID0gdDM7IH07CgkKCS8vL2Rpc3BsYXkgbWF0cml4Cgl2b2lkIFByaW50KHN0ZDo6b3N0cmVhbSAmcykge3MgPDwgZGF0YVswXVswXSA8PCAiICIgPDwgZGF0YVswXVsxXSA8PCAiICIgPDwgZGF0YVswXVsyXSA8PCAiICIgPDwgZGF0YVswXVszXSA8PCBzdGQ6OmVuZGw7CgkJCQkgIHMgPDwgZGF0YVsxXVswXSA8PCAiICIgPDwgZGF0YVsxXVsxXSA8PCAiICIgPDwgZGF0YVsxXVsyXSA8PCAiICIgPDwgZGF0YVsxXVszXSA8PCBzdGQ6OmVuZGw7CgkJCQkgIHMgPDwgZGF0YVsyXVswXSA8PCAiICIgPDwgZGF0YVsyXVsxXSA8PCAiICIgPDwgZGF0YVsyXVsyXSA8PCAiICIgPDwgZGF0YVsyXVszXSA8PCBzdGQ6OmVuZGw7IH07Cn07CgovLy0tLS0tLS0tLS0tLS0gT3BlcmF0b3JzIFN1cHBvcnRlZCAtLS0tLS0tLS0tLS0tLS0KCi8vYmV0d2VlbiBEbWF0cmljZXMJCQkJOgkrICAgLSAgICogICArPSAKLy9iZXR3ZWVuIERtYXRyaXggYW5kIHNjYWxhcgk6CSogICAqPQovL2JldHdlZW4gRG1hdHJpeCBhbmQgVmVjdG9yMwk6CSoKCgoKLy8tLS0tLS0tLS0tLS0tLSBSZWxhdGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovL0Rpc3BsYWNlbWVudCBtYXRyaXggaW52ZXJzZQp0ZW1wbGF0ZTxjbGFzcyBUPgpETWF0cml4PFQ+IEludmVyc2UoY29uc3QgRE1hdHJpeDxUPiAmbSk7CgovL0Zyb2Jlbml1cyBub3JtIHNxdWFyZWQgb2YgbWF0cml4CnRlbXBsYXRlPGNsYXNzIFQ+ClQgRnJvYk5vcm0yKGNvbnN0IERNYXRyaXg8VD4gJm0pOwoKLy9DcmVhdGUgYSByb3RhdGlvbiBtYXRyaXggYXJvdW5kIGEgZ2l2ZW4gYXhpcwp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIEF4aXNSb3RhdGlvbihETWF0cml4PFQ+ICZtLCBETUF4aXMgYXhpcywgVCBhbmdsZSk7CgovL0NyZWF0ZSBhIHJvdGF0aW9uIG1hdHJpeCBnaXZlbiBFdWxlciBhbmdsZXMgYW5kIGF4aXMgb3JkZXIKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBFdWxlclJvdGF0aW9uKERNYXRyaXg8VD4gJm0sIGZsb2F0IHRoZXRhLCBmbG9hdCBwaGksIGZsb2F0IHRhdSwgaW50IG9yZGVyKTsKCgoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vQ29uc3RydWN0b3IgaW5pdGlhbGl6aW5nIGRpYWdvbmFsIGVsZW1lbnRzCnRlbXBsYXRlPGNsYXNzIFQ+CkRNYXRyaXg8VD46OkRNYXRyaXgoVCBkMSwgVCBkMiwgVCBkMykKewlDbGVhcigpOwoJZGF0YVswXVswXSA9IGQxOyBkYXRhWzFdWzFdID0gZDI7IGRhdGFbMl1bMl0gPSBkMzsKfQoKLy9Db25zdHJ1Y3RvciBpbml0aWFsaXppbmcgZGlhZ29uYWwgZWxlbWVudHMgYW5kIHRyYW5zbGF0aW9uCnRlbXBsYXRlPGNsYXNzIFQ+CkRNYXRyaXg8VD46OkRNYXRyaXgoVCBkMSwgVCBkMiwgVCBkMywgVCB0MSwgVCB0MiwgVCB0MykKewlDbGVhcigpOwoJZGF0YVswXVswXSA9IGQxOyBkYXRhWzFdWzFdID0gZDI7IGRhdGFbMl1bMl0gPSBkMzsKCWRhdGFbMF1bM10gPSB0MTsgZGF0YVsxXVszXSA9IHQyOyBkYXRhWzJdWzNdID0gdDM7Cn0KCi8vQ29uc3RydWN0b3IgZ2l2ZW4gYW4gYXhpcyBhbmQgYW4gYW5nbGUKdGVtcGxhdGU8Y2xhc3MgVD4KRE1hdHJpeDxUPjo6RE1hdHJpeChETUF4aXMgYXhpcywgVCBhbmdsZSkKewlBeGlzUm90YXRpb24oKnRoaXMsIGF4aXMsIGFuZ2xlKTsKfQoKLy9Db25zdHJ1Y3RvciBnaXZlbiBhIHNldCBvZiBFdWxlciBhbmdsZXMgYW5kIHJvdGF0aW9uIG9yZGVyCnRlbXBsYXRlPGNsYXNzIFQ+CkRNYXRyaXg8VD46OkRNYXRyaXgoZmxvYXQgdGhldGEsIGZsb2F0IHBoaSwgZmxvYXQgdGF1LCBETU9yZGVyIG9yZGVyKQp7CUV1bGVyUm90YXRpb24oKnRoaXMsIHRoZXRhLCBwaGksIHRhdSwgb3JkZXIpOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBcml0aG1ldGljIE9wZXJhdG9ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9NYXRyaXgtdmVjdG9yIHByb2R1Y3Qgd2l0aCBub3JtYWxpemVkIGNvb3JkaW5hdGVzICgzeDQgTWF0cml4ICogM3gxIHZlY3RvcikKdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyPgppbmxpbmUgVmVjdG9yMzxUMT4gb3BlcmF0b3IqKGNvbnN0IERNYXRyaXg8VDI+ICZkbSwgY29uc3QgVmVjdG9yMzxUMT4gJnYpCnsKCVZlY3RvcjM8VDE+IHI7CglETWF0cml4PFQyPiAmbSA9ICooKERNYXRyaXg8VDI+ICopJmRtKTsKCXIueCA9IG0oMCwwKSAqIHYueCArIG0oMCwxKSAqIHYueSArIG0oMCwyKSAqIHYueiArIG0oMCwzKTsKCXIueSA9IG0oMSwwKSAqIHYueCArIG0oMSwxKSAqIHYueSArIG0oMSwyKSAqIHYueiArIG0oMSwzKTsKCXIueiA9IG0oMiwwKSAqIHYueCArIG0oMiwxKSAqIHYueSArIG0oMiwyKSAqIHYueiArIG0oMiwzKTsKCXJldHVybiByOwp9CgovL01hdHJpeCBTdWJ0cmFjdGlvbgp0ZW1wbGF0ZTxjbGFzcyBUPiAKaW5saW5lIERNYXRyaXg8VD4gb3BlcmF0b3ItKGNvbnN0IERNYXRyaXg8VD4gJm0xLCBjb25zdCBETWF0cml4PFQ+ICZtMikKewoJRE1hdHJpeDxUPiByOwoJVCAqcHIgPSAoVCAqKXIuZGF0YSwgKnAxID0gKFQgKiltMS5kYXRhLCAqcDIgPSAoVCAqKW0yLmRhdGE7Cglmb3IoaW50IGkgPSAwOyBpIDwgMTI7IGkrKykKCQkqKHByKyspID0gKihwMSsrKSAtICoocDIrKyk7CglyZXR1cm4ocik7IAp9CgovL01hdHJpeCBBZGRpdGlvbgp0ZW1wbGF0ZTxjbGFzcyBUPiAKaW5saW5lIERNYXRyaXg8VD4gb3BlcmF0b3IrKGNvbnN0IERNYXRyaXg8VD4gJm0xLCBjb25zdCBETWF0cml4PFQ+ICZtMikKewoJRE1hdHJpeDxUPiByOwoJVCAqcHIgPSAoVCAqKXIuZGF0YSwgKnAxID0gKFQgKiltMS5kYXRhLCAqcDIgPSAoVCAqKW0yLmRhdGE7Cglmb3IoaW50IGkgPSAwOyBpIDwgMTI7IGkrKykKCQkqKHByKyspID0gKihwMSsrKSArICoocDIrKyk7CglyZXR1cm4ocik7Cn0KCi8vTWF0cml4IEFkZGl0aW9uIGluIHBsYWNlICs9CnRlbXBsYXRlPGNsYXNzIFQ+IAppbmxpbmUgdm9pZCBvcGVyYXRvcis9KERNYXRyaXg8VD4gJm0xLCBjb25zdCBETWF0cml4PFQ+ICZtMikKewoJVCAqcDEgPSAoVCAqKW0xLmRhdGEsICpwMiA9IChUICopbTIuZGF0YTsKCWZvcihpbnQgaSA9IDA7IGkgPCAxMjsgaSsrKQoJCSoocDErKykgKz0gKihwMisrKTsKfQoKLy9NYXRyaXggU3VidHJhY3Rpb24gaW4gcGxhY2UgLT0KdGVtcGxhdGU8Y2xhc3MgVD4gCmlubGluZSB2b2lkIG9wZXJhdG9yLT0oRE1hdHJpeDxUPiAmbTEsIGNvbnN0IERNYXRyaXg8VD4gJm0yKQp7CglUICpwMSA9IChUICopbTEuZGF0YSwgKnAyID0gKFQgKiltMi5kYXRhOwoJZm9yKGludCBpID0gMDsgaSA8IDEyOyBpKyspCgkJKihwMSsrKSAtPSAqKHAyKyspOwp9CgovL1NjYWxhciBtdWx0aXBsaWNhdGlvbiBpbiBwbGFjZSAKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIHZvaWQgb3BlcmF0b3IqPShETWF0cml4PFQ+ICZtLCBUIHMpCnsJZm9yKGludCBpID0gMDsgaSA8IDEyOyBpKyspIAoJCSgoVCAqKW0uZGF0YSlbaV0gKj0gczsKfQoKLy9TY2FsYXIgbXVsdGlwbGljYXRpb24KdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIERNYXRyaXg8VD4gb3BlcmF0b3IqKERNYXRyaXg8VD4gbSwgVCBzKQp7CW0gKj0gczsKCXJldHVybiBtOwp9CgovL01hdHJpeC1NYXRyaXggcHJvZHVjdCAKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIERNYXRyaXg8VD4gb3BlcmF0b3IqKGNvbnN0IERNYXRyaXg8VD4gJmRtMSwgY29uc3QgRE1hdHJpeDxUPiAmZG0yKQp7CglETWF0cml4PFQ+IG0zLCAmbTEgPSAqKChETWF0cml4PFQ+ICopJmRtMSksICZtMiA9ICooKERNYXRyaXg8VD4gKikmZG0yKTsJLy9nZXQgbm9uLWNvbnN0IHJlZmVyZW5jZXMgdG8gZG0xIGFuZCBkbTIgdG8gYWxsb3cgKCkgb3BlcmF0b3IKCWZvcihpbnQgciA9IDA7IHIgPCAzOyByKyspCgkJZm9yKGludCBjID0gMDsgYyA8IDQ7IGMrKykKCQkJbTMocixjKSA9IG0xKHIsMCkgKiBtMigwLGMpICsgbTEociwxKSAqIG0yKDEsYykgKyBtMShyLDIpICogbTIoMixjKTsKCW0zKDAsMykgKz0gbTEoMCwzKTsgbTMoMSwzKSArPSBtMSgxLDMpOyBtMygyLDMpICs9IG0xKDIsMyk7CglyZXR1cm4gbTM7Cn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYXRoZW1hdGljYWwgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9Gcm9iZW5pdXMgbm9ybSBzcXVhcmVkIG9mIG1hdHJpeAp0ZW1wbGF0ZTxjbGFzcyBUPgpUIEZyb2JOb3JtMihETWF0cml4PFQ+ICZtKQp7CVQgKnAgPSAoVCAqKW0uZGF0YSwgciA9IDA7Cglmb3IoaW50IGkgPSAwOyBpIDwgMTI7IGkrKykKCXsJciArPSAqcCAqICpwOwoJCXArKzsKCX0KCXJldHVybiByOwp9CgovL0Rpc3BsYWNlbWVudCBtYXRyaXggaW52ZXJzZQp0ZW1wbGF0ZTxjbGFzcyBUPgpETWF0cml4PFQ+IEludmVyc2UoY29uc3QgRE1hdHJpeDxUPiAmZG0pCnsKCURNYXRyaXg8VD4gciwgJm0gPSAqKChETWF0cml4PFQ+ICopJmRtKTsKCXIuQ2xlYXIoKTsKCVQgazEgPSBtKDEsMSkgKiBtKDIsMikgLSBtKDEsMikgKiBtKDIsMSk7CQkJCQkJLy9jYWxjdWxhdGUgcm90YXRpb24gbWF0cml4IGRldGVybWluYW50CglUIGsyID0gbSgxLDApICogbSgyLDIpIC0gbSgxLDIpICogbSgyLDApOwoJVCBrMyA9IG0oMSwwKSAqIG0oMiwxKSAtIG0oMSwxKSAqIG0oMiwwKTsKCVQgYyA9IChUKTEuMCAvIChtKDAsMCkgKiBrMSAtIG0oMCwxKSAqIGsyICsJbSgwLDIpICogazMpOwoJcigwLDApID0gYyAqIGsxOwkJCQkJCQkJCQkJCS8vY2FsY3VsYXRlIGludmVyc2Ugb2Ygcm90YXRpb24gbWF0cml4CglyKDAsMSkgPSBjICogKG0oMCwyKSAqIG0oMiwxKSAtIG0oMCwxKSAqIG0oMiwyKSk7CglyKDAsMikgPSBjICogKG0oMCwxKSAqIG0oMSwyKSAtIG0oMCwyKSAqIG0oMSwxKSk7CglyKDEsMCkgPSBjICogLWsyOwoJcigxLDEpID0gYyAqIChtKDAsMCkgKiBtKDIsMikgLSBtKDAsMikgKiBtKDIsMCkpOwoJcigxLDIpID0gYyAqIChtKDAsMikgKiBtKDEsMCkgLSBtKDAsMCkgKiBtKDEsMikpOwoJcigyLDApID0gYyAqIGszOwoJcigyLDEpID0gYyAqIChtKDAsMSkgKiBtKDIsMCkgLSBtKDAsMCkgKiBtKDIsMSkpOwoJcigyLDIpID0gYyAqIChtKDAsMCkgKiBtKDEsMSkgLSBtKDAsMSkgKiBtKDEsMCkpOwoJVmVjdG9yMzxUPiB2KC1tKDAsMyksIC1tKDEsMyksIC1tKDIsMykpOwkJCQkJCS8vY2FsY3VsYXRlIG5ldyB0cmFuc2xhdGlvbiB2ZWN0b3IKCVZlY3RvcjM8VD4gdCA9IHIgKiB2OwoJcigwLDMpID0gdC54OyAgcigxLDMpID0gdC55OyByKDIsMykgPSB0Lno7CglyZXR1cm4gcjsKfQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm90YXRpb24gTWF0cml4IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9nZW5lcmF0ZSBhIHJvdGF0aW9uIG1hdHJpeCBhYm91dCBhIGdpdmVuIGF4aXMKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIHZvaWQgQXhpc1JvdGF0aW9uKERNYXRyaXg8VD4gJm0sIERNQXhpcyBheGlzLCBUIGFuZ2xlKQp7CW0uQ2xlYXIoKTsKCWZsb2F0IGMgPSBjb3MoYW5nbGUpLCBzID0gc2luKGFuZ2xlKTsKCXN3aXRjaChheGlzKQoJewljYXNlIFggOiBtKDAsMCkgPSAxOyBtKDEsMSkgPSBjOyBtKDEsMikgPSAtczsgbSgyLDEpID0gczsgbSgyLDIpID0gYzsKCQkJCSBicmVhazsKCQljYXNlIFkgOiBtKDAsMCkgPSBjOyBtKDAsMikgPSBzOyBtKDEsMSkgPSAxOyBtKDIsMCkgPSAtczsgbSgyLDIpID0gYzsKCQkJCSBicmVhazsKCQljYXNlIFogOiBtKDAsMCkgPSBjOyBtKDAsMSkgPSAtczsgbSgxLDApID0gczsgbSgxLDEpID0gYzsgbSgyLDIpID0gMTsKCQkJCSBicmVhazsKCX0KfQoKLy9Db25zdHJ1Y3RvciBnaXZlbiBhIHNldCBvZiBFdWxlciBhbmdsZXMKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBFdWxlclJvdGF0aW9uKERNYXRyaXg8VD4gJm0sIGZsb2F0IHRoZXRhLCBmbG9hdCBwaGksIGZsb2F0IHRhdSwgRE1PcmRlciBvcmRlcikKewlETWF0cml4PFQ+IFJ4KFgsIHRoZXRhKSwgUnkoWSwgcGhpKSwgUnooWiwgdGF1KTsKCXN3aXRjaCAob3JkZXIpCgl7CWNhc2UgWFlaOgoJCQltID0gKFJ4ICogUnkpICogUno7CWJyZWFrOwoJCWNhc2UgWllYOgoJCQltID0gKFJ6ICogUnkpICogUng7CWJyZWFrOwoJCWNhc2UgWVhaOgoJCQltID0gKFJ5ICogUngpICogUno7CWJyZWFrOwoJCWNhc2UgWlhZOgoJCQltID0gKFJ6ICogUngpICogUnk7CWJyZWFrOwoJCWRlZmF1bHQ6CgkJCW0gPSAoUnggKiBSeSkgKiBSejsJYnJlYWs7Cgl9Cn0KCgoKI2VuZGlmCg==