IyBSdXNzaWFuIHRyYW5zbGF0aW9ucyBmb3IgUgojIPLV09PLycog0MXSxdfPxCDEzNEgUgojCiMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBSIEZvdW5kYXRpb24KIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUiBwYWNrYWdlLgojIEFsZXhleSBHYXJrb3ZlbmtvIDxnYXJrb3ZlbmtvQGdtYWlsLmNvbT4KIwptc2dpZCAiIgptc2dzdHIgIiIKIlByb2plY3QtSWQtVmVyc2lvbjogUiAyLjkuMFxuIgoiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgoiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDMtMjQgMTA6NTMtMDcwMFxuIgoiUE8tUmV2aXNpb24tRGF0ZTogMjAxOC0wNC0wNyAwMToxNy0wNTAwXG4iCiJMYXN0LVRyYW5zbGF0b3I6IEFsZXhleSBTaGlwdW5vdiA8ZGFjdHlsb3JoaXphQGdtYWlsLmNvbT5cbiIKIkxhbmd1YWdlLVRlYW06IFJ1c3NpYW4gPGRhY3R5bG9yaGl6YSBhdCBnbWFpbD5cbiIKIkxhbmd1YWdlOiBydVxuIgoiTUlNRS1WZXJzaW9uOiAxLjBcbiIKIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1LT0k4LVJcbiIKIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuJTEwPj0yICYmIG4iCiIlMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCiJYLUdlbmVyYXRvcjogUG9lZGl0IDEuOC43LjFcbiIKCiM6IGNsYXNzX3N1cHBvcnQuYzoyOQptc2dpZCAiY2FsbGluZyB0aGUgQyByb3V0aW5lIHVzZWQgYXMgYW4gaW5pdGlhbGl6ZXIgZm9yICdleHRlcm5hbHB0cicgb2JqZWN0cyIKbXNnc3RyICIiCiLX2drZ18HAIEMg0NLPw8XE1dLVLCDJ09DPzNja1cXN1cAgy8HLIMnOycPJwdTP0iDEzNEgJ2V4dGVybmFscHRyJyDPwt/Fy9TP1yIKCiM6IGRvX3N1YnN0aXR1dGVfZGlyZWN0LmM6NDEKbXNnaWQgImludmFsaWQgbGlzdCBmb3Igc3Vic3RpdHV0aW9uIgptc2dzdHIgIs7F18XSztnKINPQydPPyyDEzNEg0M/E09TBzs/Xy8kiCgojOiBtZXRob2RzX2xpc3RfZGlzcGF0Y2guYzoxNTEKbXNnaWQgIiIKImNvdWxkIG5vdCBmaW5kIHRoZSBza2VsZXRvbiBjYWxscyBmb3IgJ21ldGhvZHMnIChwYWNrYWdlIGRldGFjaGVkPyk6IGV4cGVjdCAiCiJ2ZXJ5IGJhZCB0aGluZ3MgdG8gaGFwcGVuIgptc2dzdHIgIiIKIs7FIM3Px9UgzsHK1Mkgz9POz9fO2cUg19naz9fZIMTM0SAnbWV0aG9kcycgKNDBy8XUIM/Uy8zA3sXOPyk6IM/exdfJxM7PICIKItPM1d7JzM/T2CDe1M8t1M8gz97Fztgg0MzPyM/FIgoKIzogbWV0aG9kc19saXN0X2Rpc3BhdGNoLmM6MjE3CiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiJubyBcImFsbE1ldGhvZHNcIiBzbG90IGZvdW5kIGluIG9iamVjdCBvZiBjbGFzcyBcIiVzXCIgdXNlZCBhcyBtZXRob2RzIGxpc3QgIgoiZm9yIGZ1bmN0aW9uICclcyciCm1zZ3N0ciAiIgoizsUgzsHKxMXOIFwiYWxsTWV0aG9kc1wiINPMz9Qg1yDPwt/Fy9TFIMvMwdPTwSBcIiVzXCIsIMnT0M/M2NrP18HX28nK09Egy8HLICIKItPQydPPyyDNxdTPxM/XIMTM0SDG1c7Lw8nJICclcyciCgojOiBtZXRob2RzX2xpc3RfZGlzcGF0Y2guYzo0MzAKIywgYy1mb3JtYXQKbXNnaWQgIm5vIGdlbmVyaWMgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3VuZCBmb3IgJyVzJyIKbXNnc3RyICLOxSDOwcrExc7PIM/Q0sXExczFzsnRIM/C3cXKIMbVzsvDyckgxMzRICclcyciCgojOiBtZXRob2RzX2xpc3RfZGlzcGF0Y2guYzo0MzMKIywgYy1mb3JtYXQKbXNnaWQgIiIKIm5vIGdlbmVyaWMgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3VuZCBmb3IgJyVzJyBpbiB0aGUgc3VwcGxpZWQgZW52aXJvbm1lbnQiCm1zZ3N0ciAiIgoizsUgzsHKxMXOzyDP0NLFxMXMxc7J0SDPwt3FyiDG1c7Lw8nJIMTM0SAnJXMnINcg0NLFxM/T1MHXzMXOzs/NIM/L0tXWxc7JySIKCiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjQ2OAojLCBjLWZvcm1hdAptc2dpZCAiIgoiaW52YWxpZCBnZW5lcmljIGZ1bmN0aW9uIG9iamVjdCBmb3IgbWV0aG9kIHNlbGVjdGlvbiBmb3IgZnVuY3Rpb24gJyVzJzogIgoiZXhwZWN0ZWQgYSBmdW5jdGlvbiBvciBhIHByaW1pdGl2ZSwgZ290IGFuIG9iamVjdCBvZiBjbGFzcyBcIiVzXCIiCm1zZ3N0ciAiIgoizsUg18XSztnKIM/C38XL1CDPwt3FyiDG1c7Lw8nJIMTM0SDX2cLP0sEgzcXUz8TBIMTM0SDG1c7Lw8nJICclcyc6IM/WycTBzMHT2CAiCiLG1c7Lw8nRIMnMySDQ0snNydTJ1ywg0M/M1d7FziDPwt/Fy9Qgy8zB09PBIFwiJXNcIiIKCiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjQ4MwojLCBjLWZvcm1hdAptc2dpZCAibm8gZGlyZWN0IG9yIGluaGVyaXRlZCBtZXRob2QgZm9yIGZ1bmN0aW9uICclcycgZm9yIHRoaXMgY2FsbCIKbXNnc3RyICIiCiLOxdQg0NLRzc/HzyDJzMkgzsHTzMXEz9fBzs7Px88gzcXUz8TBIMTM0SDG1c7Lw8nJICclcycgxMzRIMTBzs7Px88g19naz9fBIgoKIzogbWV0aG9kc19saXN0X2Rpc3BhdGNoLmM6NTEzIG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjEwNjIKbXNnaWQgImludmFsaWQgb2JqZWN0IChub24tZnVuY3Rpb24pIHVzZWQgYXMgbWV0aG9kIgptc2dzdHIgIs7FINfF0s7ZyiDPwt/Fy9QgKM7FIMbVzsvDydEpIMnT0M/M2NrP18HOIMvByyDNxdTPxCIKCiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjUzNAojLCBjLWZvcm1hdAptc2dpZCAiY291bGQgbm90IGZpbmQgc3ltYm9sICclcycgaW4gZnJhbWUgb2YgY2FsbCIKbXNnc3RyICLOxSDOwcrExc4g08nN18/MICclcycg1yDT1NLVy9TV0sUg19naz9fBIgoKIzogbWV0aG9kc19saXN0X2Rpc3BhdGNoLmM6NTQyCiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiJpbnZhbGlkIHN5bWJvbCBpbiBjaGVja2luZyBmb3IgbWlzc2luZyBhcmd1bWVudCBpbiBtZXRob2QgZGlzcGF0Y2g6IGV4cGVjdGVkICIKImEgbmFtZSwgZ290IGFuIG9iamVjdCBvZiBjbGFzcyBcIiVzXCIiCm1zZ3N0ciAiIgoi0NLJINDSz9fF0svJIM/U09XU09TX1cDdxcfPIMHSx9XNxc7UwSDXIM/U0NLB18vFIM3F1M/EwSDOwcrExc4gzsXEz9DV09TJzdnKICIKItPJzdfPzDogz9bJxMHMz9PYIMnN0Swg0M/M1d7FziDPwt/Fy9Qgy8zB09PBIFwiJXNcIiIKCiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjU0NQptc2dpZCAidXNlIG9mIE5VTEwgZW52aXJvbm1lbnQgaXMgZGVmdW5jdCIKbXNnc3RyICLJ09DPzNjaz9fBzsnFIE5VTEwgz8vS1dbFzsnRIMLPzMXFIM7FINDPxMTF0tbJ18HF1NPRIgoKIzogbWV0aG9kc19saXN0X2Rpc3BhdGNoLmM6NTQ5CiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiJpbnZhbGlkIGVudmlyb25tZW50IGluIGNoZWNraW5nIGZvciBtaXNzaW5nIGFyZ3VtZW50LCAnJXMnLCBpbiBtZXRob2RzICIKImRpc3BhdGNoOiBnb3QgYW4gb2JqZWN0IG9mIGNsYXNzIFwiJXNcIiIKbXNnc3RyICIiCiLQ0skg0NLP18XSy8Ugz9TT1dTT1NfVwN3Fx88gwdLH1c3FztTBIM/CzsHS1dbFzs8gzsXXxdLOz8Ugz8vS1dbFzsnFLCAnJXMnLCDXICIKIs3F1M/Ewcggz9TQ0sHXy8k6INDPzNXexc4gz8LfxcvUIMvMwdPTwSBcIiVzXCIiCgojOiBtZXRob2RzX2xpc3RfZGlzcGF0Y2guYzo1NzUKIywgYy1mb3JtYXQKbXNnaWQgIiIKIm9iamVjdCBvZiBjbGFzcyBcIiVzXCIgdXNlZCBhcyBtZXRob2RzIGxpc3QgZm9yIGZ1bmN0aW9uICclcycgKCBubyAiCiInYXJndW1lbnQnIHNsb3QpIgptc2dzdHIgIiIKIs/C38XL1CDLzMHT08EgXCIlc1wiIMnT0M/M2NrP18HOIMvByyDT0MnTz8sgzcXUz8TP1yDEzNEgxtXOy8PJySAnJXMnICggzsXUICIKItPMz9TBICdhcmd1bWVudCcgKSIKCiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjU4NgojLCBjLWZvcm1hdAptc2dpZCAiIgoiKGluIHNlbGVjdGluZyBhIG1ldGhvZCBmb3IgZnVuY3Rpb24gJyVzJykgJy4uLicgYW5kIHJlbGF0ZWQgdmFyaWFibGVzIGNhbm5vdCAiCiJiZSB1c2VkIGZvciBtZXRob2RzIGRpc3BhdGNoIgptc2dzdHIgIiIKIijQ0skg19nCz9LFIM3F1M/EwSDEzNEgxtXOy8PJySAnJXMnKSAnLi4uJyDJINLPxNPU18XOztnFINDF0sXNxc7O2cUgzsUgzc/H1dQgIgoiwtnU2CDJ09DPzNjaz9fBztkgxMzRIM/U0NLB18vJIM3F1M/Ez9ciCgojOiBtZXRob2RzX2xpc3RfZGlzcGF0Y2guYzo1ODkKIywgYy1mb3JtYXQKbXNnaWQgIiIKIihpbiBzZWxlY3RpbmcgYSBtZXRob2QgZm9yIGZ1bmN0aW9uICclcycpIHRoZSAnZW52aXJvbm1lbnQnIGFyZ3VtZW50IGZvciAiCiJkaXNwYXRjaCBtdXN0IGJlIGFuIFIgZW52aXJvbm1lbnQ7IGdvdCBhbiBvYmplY3Qgb2YgY2xhc3MgXCIlc1wiIgptc2dzdHIgIiIKIijQ0skg19nCz9LFIM3F1M/EwSDEzNEgxtXOy8PJySAnJXMnKSDB0sfVzcXO1CAnZW52aXJvbm1lbnQnIMTM0SDP1NDSwdfLySAiCiLEz8zWxc4gwtnU2CBSIM/L0tXWxc7Jxc07INDPzNXexc4gz8LfxcvUIMvMwdPTwSBcIiVzXCIiCgojOiBtZXRob2RzX2xpc3RfZGlzcGF0Y2guYzo2MDMgbWV0aG9kc19saXN0X2Rpc3BhdGNoLmM6NjE1CiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjEwMDgKIywgYy1mb3JtYXQKbXNnaWQgIiIKImVycm9yIGluIGV2YWx1YXRpbmcgdGhlIGFyZ3VtZW50ICclcycgaW4gc2VsZWN0aW5nIGEgbWV0aG9kIGZvciBmdW5jdGlvbiAiCiInJXMnOiAlcyIKbXNnc3RyICIiCiLP28nCy8Eg0NLJIM/Dxc7LxSDB0sfVzcXO1MEgJyVzJyDQ0skg19nCz9LFIM3F1M/EwSDEzNEgxtXOy8PJySAnJXMnOiAlcyIKCiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjYyMwojLCBjLWZvcm1hdAptc2dpZCAibm8gbWF0Y2hpbmcgbWV0aG9kIGZvciBmdW5jdGlvbiAnJXMnIChhcmd1bWVudCAnJXMnLCB3aXRoIGNsYXNzIFwiJXNcIikiCm1zZ3N0ciAiIgoizsXUINPPz9TXxdTT1NfVwN3Fx88gzcXUz8TBIMTM0SDG1c7Lw8nJICclcycgKMHSx9XNxc7UICclcycsINMgy8zB09PPzSBcIiVzIgoiXCIpIgoKIzogbWV0aG9kc19saXN0X2Rpc3BhdGNoLmM6NjMwCiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiJyZWN1cnNpdmUgdXNlIG9mIGZ1bmN0aW9uICclcycgaW4gbWV0aG9kIHNlbGVjdGlvbiwgd2l0aCBubyBkZWZhdWx0IG1ldGhvZCIKbXNnc3RyICIiCiLSxcvV0tPJ187PxSDJ09DPzNjaz9fBzsnFIMbVzsvDyckgJyVzJyDXINfZws/SxSDNxdTPxMEsINMgz9TT1dTT1NfJxc0gzcXUz8TBICIKItDPLdXNz8zewc7JwCIKCiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjcwMQojLCBjLWZvcm1hdAptc2dpZCAiZXJyb3IgaW4gZXZhbHVhdGluZyBhICdwcmltaXRpdmUnIG5leHQgbWV0aG9kOiAlcyIKbXNnc3RyICLP28nCy8Eg0NLJIM/Dxc7LxSAncHJpbWl0aXZlJyDTzMXE1cDdxcfPIM3F1M/EwTogJXMiCgojOiBtZXRob2RzX2xpc3RfZGlzcGF0Y2guYzo4MDEKIywgYy1mb3JtYXQKbXNnaWQgIiclcycgbXVzdCBiZSBhIHNpbmdsZSBzdHJpbmcgKGdvdCBhIGNoYXJhY3RlciB2ZWN0b3Igb2YgbGVuZ3RoICVkKSIKbXNnc3RyICIiCiInJXMnIMTPzNbOwSDC2dTYIM/Eyc7P3s7PyiDT1NLPy8/KICjQz8zV3sXOINPJzdfPzNjO2cog18XL1M/SIMTMyc7ZICVkKSIKCiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjgwNQojLCBjLWZvcm1hdAptc2dpZCAiJyVzJyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZzsgZ290IGFuIGVtcHR5IHN0cmluZyIKbXNnc3RyICInJXMnIMTPzNbOwSDC2dTYIM7FINDV09TPyiDT1NLPy8/KOyDQz8zV3sXOwSDQ1dPUwdEg09TSz8vBIgoKIzogbWV0aG9kc19saXN0X2Rpc3BhdGNoLmM6ODA5CiMsIGMtZm9ybWF0Cm1zZ2lkICInJXMnIG11c3QgYmUgYSBzaW5nbGUgc3RyaW5nIChnb3QgYW4gb2JqZWN0IG9mIGNsYXNzIFwiJXNcIikiCm1zZ3N0ciAiJyVzJyDEz8zWzsEgwtnU2CDPxMnOz97Oz8og09TSz8vPyiAo0M/M1d7FziDPwt/Fy9Qgy8zB09PBIFwiJXNcIikiCgojOiBtZXRob2RzX2xpc3RfZGlzcGF0Y2guYzo4ODYKbXNnaWQgImNsYXNzIHNob3VsZCBiZSBlaXRoZXIgYSBjaGFyYWN0ZXItc3RyaW5nIG5hbWUgb3IgYSBjbGFzcyBkZWZpbml0aW9uIgptc2dzdHIgIiIKIsvMwdPTIMTPzNbFziDC2dTYIMzJws8gyc3FzsXNLdTFy9PUz9fPyiDT1NLPy8/KIMzJws8gz9DSxcTFzMXOycXNIMvMwdPTwSIKCiM6IG1ldGhvZHNfbGlzdF9kaXNwYXRjaC5jOjk2NgojLCBjLWZvcm1hdAptc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZ2VuZXJpYyBmb3IgdGhlIHByaW1pdGl2ZSBcIiVzXCIiCm1zZ3N0ciAizsUgzc/H1SDOwcrUySDPwt3VwCDG1c7Lw8nAIMTM0SDQ0snNydTJ18EgXCIlc1wiIgoKIzogbWV0aG9kc19saXN0X2Rpc3BhdGNoLmM6OTczCiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiJleHBlY3RlZCBhIGdlbmVyaWMgZnVuY3Rpb24gb3IgYSBwcmltaXRpdmUgZm9yIGRpc3BhdGNoLCBnb3QgYW4gb2JqZWN0IG9mICIKImNsYXNzIFwiJXNcIiIKbXNnc3RyICIiCiLP1snEwczB09ggz8LdwdEgxtXOy8PJ0SDMycLPINDSyc3J1MnXIMTM0SDP1NDSwdfLySwg0M/M1d7FziDPwt/Fy9Qgy8zB09PBICIKIlwiJXNcIiIKCiN+IG1zZ2lkICIiCiN+ICJpbiBwcm9jZXNzaW5nICdjYWxsTmV4dE1ldGhvZCcsIGZvdW5kIGEgJy4uLicgaW4gdGhlIG1hdGNoZWQgY2FsbCwgYnV0IG5vICIKI34gImNvcnJlc3BvbmRpbmcgJy4uLicgYXJndW1lbnQiCiN+IG1zZ3N0ciAiIgojfiAi0NLJINLB2sLP0sUgJ2NhbGxOZXh0TWV0aG9kJywgzsHKxMXOICcuLi4nINcg08/X0MHEwcDdxc0g19naz9fFLCDOzyDOxdQgIgojfiAi08/P1NfF1NPU19XA3cXHzyDB0sfVzcXO1MEgJy4uLiciCgojfiBtc2dpZCAiIgojfiAiUyBsYW5ndWFnZSBtZXRob2Qgc2VsZWN0aW9uIGdvdCBhbiBlcnJvciB3aGVuIGNhbGxlZCBmcm9tIGludGVybmFsICIKI34gImRpc3BhdGNoIGZvciBmdW5jdGlvbiAnJXMnIgojfiBtc2dzdHIgIiIKI34gItfZws/SIM3F1M/EwSDR2tnLwSBTINfZ2tfBzCDP28nCy9UsIMvPx8TBIMLZzCDX2drXwc4gydog187V1NLFzs7FyiAiCiN+ICLP1NDSwdfLySDEzNEgxtXOy8PJySAnJXMnIgoKI34gbXNnaWQgIiIKI34gImludGVybmFsIGVycm9yIGluICdjYWxsTmV4dE1ldGhvZCc6ICcubmV4dE1ldGhvZCcgd2FzIG5vdCBhc3NpZ25lZCBpbiB0aGUgIgojfiAiZnJhbWUgb2YgdGhlIG1ldGhvZCBjYWxsIgojfiBtc2dzdHIgIiIKI34gItfO1dTSxc7O0dEgz9vJwsvBINcgJ2NhbGxOZXh0TWV0aG9kJzogJy5uZXh0TWV0aG9kJyDOxSDC2cwgzsHazsHexc4g1yAgIgojfiAi09TS1cvU1dLFINfZ2s/XwSDNxdTPxMEiCgojfiBtc2dpZCAiIgojfiAiR2VuZXJpYyBcIiVzXCIgc2VlbXMgbm90IHRvIGhhdmUgYmVlbiBpbml0aWFsaXplZCBmb3IgdGFibGUgZGlzcGF0Y2gtLS0iCiN+ICJuZWVkIHRvIGhhdmUgLlNpZ0FyZ3MgYW5kIC5BbGxNdGFibGUgYXNzaWduZWQgaW4gaXRzIGVudmlyb25tZW50IgojfiBtc2dzdHIgIiIKI34gIu/C3cHRIFwiJXNcIiwgy8HWxdTT0SwgzsUgwtnMwSDJzsnDycHMydrJ0s/Xwc7BIMTM0SDUwcLMycPZIM/U0NLB18vJLS0tIgojfiAizsXPwsjPxMnNzyDJzcXU2CAuU2lnQXJncyDJIC5BbGxNdGFibGUg1dPUwc7P18zFzs7Zzckg1yDc1M/NIM/L0tXWxc7JySIK