Skip to content
KernelIndex
Search⌘K

submission 29949

KernelBot user 44 · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

No package. Vendor the mirrored source: 1 lines, June 9 Researcher Reciprocity License v1.0.

submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-29949?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp32, fp8_e4m3fnuz

Benchmark evidence

18 measurements across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 256]
AMD Instinct MI300X
33.9µs
#3 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 512]
AMD Instinct MI300X
36.5µs
#14 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
50.7µs
#5 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 1536]
AMD Instinct MI300X
53.5µs
#19 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
56.1µs
#8 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 512]
AMD Instinct MI300X
78.8µs
#8 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2048]
AMD Instinct MI300X
79.1µs
#7 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 256]
AMD Instinct MI300X
80.7µs
#8 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
81.1µs
#7 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2304]
AMD Instinct MI300X
81.2µs
#7 of 98
2025-06-01
Show all 18 measurements ›
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 1536]
AMD Instinct MI300X
114.3µs
#7 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
140.2µs
#8 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
145.5µs
#6 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
145.8µs
#9 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
217.2µs
#7 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2048]
AMD Instinct MI300X
308.0µs
#7 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2304]
AMD Instinct MI300X
316.8µs
#8 of 98
2025-06-01
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
577.7µs
#7 of 98
2025-06-01

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:d2d68599be35172aa809efaa335c373888add89535910bcd7a756737f689baab
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

submission.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkICBhbWQtZnA4LW1tCiMgVGhpcyBzY3JpcHQgcHJvdmlkZXMgYSB0ZW1wbGF0ZSBmb3IgdXNpbmcgbG9hZF9pbmxpbmUgdG8gcnVuIGEgSElQIGtlcm5lbCBmb3IKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmltcG9ydCBiYXNlNjQKaW1wb3J0IGJ6MgppbXBvcnQgb3MKb3MuZW52aXJvblsnUFlUT1JDSF9ST0NNX0FSQ0gnXSA9ICdnZng5NDInCkNQUF9XUkFQUEVSID0gIiIiCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOwoiIiIKIyBDb21wcmVzc2VkIENVREEgc291cmNlIGNvZGUKQ1VEQV9TUkNfQ09NUFJFU1NFRCA9ICIiIgpRbHBvT1RGQldTWlRXWWQyRmU4QUliWC8vWC9mL09INy8vLy92Ly8vL3IvLy8vOS8vLy8vLy9mUGY1QUFCK0RnVER4ZzFZdHZiNjY5VnVQV1Bla2lxcWJ1NHIyOUhRUFl1NXdjeWF6YUdHMnQwY0FTYzJlMmVHOGtkcklBSXR2YTU3MDJZc0JlelVtYzV5N2JYdTU2N251OXVuZGlqMVhxOVpWZHVDcXk4dGROS0tiUFBlNDRWcEpZbFM5QnoxeFc3ME5JbzZhUzN1MHg0NGNrYmNjVHh1dGM4ejI0QlhEYTI3ZXU5YnR1bGIyM2F1bXZQTTllblcyNnJqbWE2N3NVb20xYnNBZXVxMW8zajA0M3NQWGxiWWxEMDlGdEl6ZHlkdDd2QUFFa1FRRXhBQk1FQWpRTko2QVJvVEVvL1ZHOVUvSko2ajFBM3FnYURUUUJpR1RJYWFBQXlCaUI2UUF5YWZxR1U4b0pFSUlFUXltUW1VMmhVOXFuNVR4TUpObFQySm9rOU5wVDFQVTBNaG9BQUI2alFCbzBOQm9BQUFBQUdnQUFFQWFhTkF5YVpHbWd5QUdRMFlFQU5NaG9NbWdhQm9NZzB3aG9NbUNOQnBoR0lCa1ltbUNhRFFaTkFKTkpTYXA2YVJBamFaR1VZbnFiUUdwdEV5TkRJYWFESmtOR1FhQTBOR0lCb05BR1FBQUFBQUFBQUFSSlFKbzBKcFBKcWFxZjZwNW9tTlZQZXA2cFAwajFNTklla3lURDBVeUEycDZtYW1hZ3dDRFFZRVpNVFRJME1FYUdFQURKcG9Cb0JVU1JCQW1JMEppWko1RXlZaEUzcE1WUDFOcHRLbjZDbTFOcWFmcW1FMmtiUUFFWUJCaERRTVJrQTBBR0VHbUlHSmppZ2RLSUlrQUlHK2hJRWd6amQ1NFIxM2VubUN5dUtqYWNrZkFIUkZJc1dDK0NXbWx2VkNldWNWakUzaENwRVFSWDNsTlREMkI3cnJ0MnVPMzJnOXhtMTNyM21iZXkwMlAzbldMTzlocHR0TjlkajU3YS90Nnh1OG8vQzdvQnR0RWtPR25UM2JyNzF2dlA5ZzYrT0NENXZzWlZWcklwMWltQkUzUHRNcjhhRHJKNTNqelorMTZlK2NGZzQxSmxXZHVLUWlmOEwvMVRBZjFtbitYK0RPZ0labjEzODhkeFF2eXhnUS93bVhheDQ0RGR0dnhkQ1VRNTh6bWNKb2o5c1Rha2NMUThwRGZ0MXBKemNSTTNxY3RINzBaK3BzZTRNbWRKc1BwUEdmU1ZHZ3RIeWQ3a2dqT3k1R0pmcnYrYi9zY0NiS2hxb2RzTzBoTC9iVlYvVW14UXp2Y3R5R1cyamYvZjJTdnFOYXN0dTRDWkJuWjkvSVViZGpQR01KZm8wb2RtNjNLamxHZWpsY003V2Ryckt4UXg5TFM0N0hWekVwRDA3d1VEQktuTWpNeW5EN0RNVWpzT3ZNMWVrNWs5WHp1bTAxS0J3WG54WWlLaHoxdGIyVmhVUVJVRVlHRmtnMHV6MVhWYjNVUTZsWGFiKzFXYnpPTnhXL0lxVVNZd0JKUGFEREc5bmtaWGR2NXY0ZW1QcGJJMzB0NTIrbjA0b0t3UHJ4K3NlWGg0ZXp6cnJLMVc3RWRHdTFubThFZU51ZXJSZCtNaU9HemdOZVFTV0F3TFpzU29oYnFKaEZURG5zNE8zTTNyaGNVK2pwb2JQRkk4bVZCSU5CSkRHSVZIS1BYNWNodmlJbGsxZG1veGh3dmlEQlJpeDNDaERpQm8xb2k5UmwxallwczZYUEdsVG9VbVd6dEx2ckxaWXVMaHNZR3ZObGtUYUUwMlpZOUlSU0dVL2c1eXAwZ29zbkRPSGRVMDNxVVp2cGQxMFpOd2FHNFRCcFNpRkVFS2xCRFpMbVdsK1AzMFUxMkhicEo2N3NQUTV5b3dmWS84M1ZIeVp2eUlCK0hyZmp5bXFHcmsyei90TnlUenRpdGh5TW9tWnJyNGhHazhFL3liandNRTZXV3dzdEVWTUZFbHIxcDgraGF2UGRLNE50VTM5djMrRFVDaFJLQWp6TW5CcWRENVlrc0RldzBuQ3NZZURaOUZCRHMxeWVWTU81aEcwSTRzUEJxK3hwV1p2TUphTVBJd0paTjlUZHd0SnMwT3N1OUZ3T2JnckVGVU9LNllVclZsbTlDQ1JudUpsTHdYRmhCSTMzeEVra2l5TzJpYjdzU0Nra3FRVmJVZ2o2M1YyNmhFOTNRNEpNVFdCRnA4bFpKTnFKTVFxUURuZ3FoUmpFYmJFWkZVVFhBUnZoWkFYUGNVbmZZdS9vbXlxMU96RHhiU3RUVWM0RDQ3SktKQUdNZ0dUZFNnZ3p3d2tpU2JrVlpxVktJTUFtcUk3RUtpS3hFZ1NzRklTaWpVbEVtajJxakZJTEpKTEZHTEltK0tTdytVVytuNWJYU053eUY1eGtsbkVGajVQckh4amx4MmVxVW95SDl3K1EvTy9qaDZ3TXdmUkRRZ2tMbGcxc1gvaDRNay9rWE9NWGZWRVNqTVhZM3I4UGlnZ3B5cDBFbThHWXJESU1NT0NsbE9ia0dZWWhoajBROUlmaWx3T0hUdk8wWDRpWDR2SCsycENvRkhhV0RKbHlMUWx4ZUVLV0FSNFF0L3Zlb0hJMkxkbkFxRDgzZ2xsR1RMc2FudG1DSzdDQmpZTllaUEFNQzJDMW16MERXQTc3aVFGeEJGRjR4ME1RTVc4cXQ0NUQ2Q0dXa25pQU1jdExCNzV6d2hpMXpYWDIrWS9zR0JrUFlIU0lPdXNiWXczV2VvWGc4SEJad2FnT3c2MEdoTDFCM3pBTGhkaFVZVEo0RUdSRWR3aUVBc3RHUkVVd1lNN0EzTW9OeHE2eDR2RVcrU3NYWWVBWk56WTNiOXNoT3pNNXZTOEh5RkZ6bTB6R2VmRGhHRE16eW9Ec0N3Y21RSUVCUVFRUVhNc3NRNElaQkQrSWtuQkZMMVNRK1FucForbzArQWlaTUp5d3VaSlpSWmNzSHptZ1p1SENOUnNHSkVFbkdIbVl5aVNZUE4yTmk2QmcxR2JGU09iNHJQMUFRZWtWTVI1T2N2djJqRGtyeXN0dHd2eS9EZTJVai9vMWgxQm0yY0lIbURaVGZTNXRJUkIwNVYwNU91N3RDMFpMSGxMZFIwaTJrR2tZQWd3WnV3OUpFRXFDaWlqZklGMlBXTit6dUVocG52RFkxS21CdnNHc0JGRlZSa0pvSjVTZEhEREFIZnZZTVhydXY0akxENkZrT0ttcWFaaUtsbFZvZlFwa3dGb2RBMFhFQVQyYmpEN0NySmxCRHl4SXF4Q1V2UEFMZHBhTWpmNFJuVVY4Tmpra1FqUklDVXg2N0hzNHVsY1kwczc2R0M5aEphMnZxbHVQc0haOHNHc1pENFNiRW02dUNVckFpUlNvZ1VLMElSQWtpa2FERHNKNE1CZVJ0U1ZERnJKbGF1T1RJR3BTb0dHS0dLWEJoQSszb2xJSkRaK0hSZ1paSTRFSmlTbTZ2Q3FodFVLSUcxSEloZHhmY0ZoR0lYTENvd2FXQzBLVmhOdUJxd01Gd0lNRENHRWlhN01sTnBKQlJ5cWRDSkJFcEpxUHIzMTQyTXBEaThrT1JPbWdmR2dXVVh4UnpuNDlPSnhwb0Y2UWVrT0lhVHhSM0VjSVFsNkVjR3VsUVROR0I1Y2l6bGpuZzhIZnlFSVEvSzFvUVpMRE9CcENwck5JWjh6bFBsVE1YZ21LRWRRK2FYSTBuaWVpb0o2a0k1RWs0RkN2V3dWMUhJVmhuMDRueWtHMGtCOURZbzR5VHpKUUJoUXVWS2hra0tDQ29HaHVKZmhOU2V3SHVuNUJRelE4cDRGaFQ2L2RwV0trNU9UK3J6ZTZVR3lqT0hvdTBZRDdlZ2lEdnk5ZzhtaEdHZFo4cFNPT1JKR0swc0hucnZwZzd3bXR2RTVTOHpCZ09NWWlCUFRtWWpCTEhFNVlCbmN0SUptV1pIRFBDOFY0bWFkNk5CaFNLdmxpVlpKYkFHL0hHM0c0L05vWFJzeGNwN2JRNG1yY0RraWdKQ2c3MFh2dkhEMmRJd3hFam9rVVJNWGV4RzhtS1FKZ28xdkFxT2tIT2hHazVubGl5dVRNZG13YXhaQmg3ekhlbGI0RHVTTCs0SkhjSWNsVk85UitzTUhGUGlyN0t0VlpaSlRkd2N4bGlqMXoyQ1RwZ01FbVRIUmNFa2pLR2tFSUxoQjc4VVV0aVN5eXdDQ2tETEY0Z29xNUFWZUVsU0NWSUh2OEJBdnhHanM2YzlGUVlIZ05EWXRsZmZraHVGakVPeGpxYWptbEdvL1I1VFQ3YXpQWHUwN2V0cDEyM3duVENoWkV5Rk1rd3NpR0ZIV1RxeXplS1dvMHNqaGNTSWtTSkNRTDJuei9QKzU5LzUyZVB4eGd6Y0l2QnkyemdkMmxZdDNlbk5zRElaRXhBOVp4SUVUUHVjZXc5Nms0RWdvVEZEQ293Q1JyS29ZRjJnaFNwM1VWVEhwNklKZXV6SEp1cXdFd3ZSNnRVMm1GUWk0OUlRY0VjRytDNmFaeXlsWTNNbUMrZWtDTUNORG1YUTgyb3RVa1JFekxpTmpOdW5NZm42Y2pueHNnMm5RVy9CZ3dVZ01OV0VOU2huQXI4UWtJK3Q2ZTloaG1qY2c2SHpha2hwUkF5b0tRemNvc21NSnB3Zmt0U2FsVnVkYXNtTk1acGt4cGpNTXBXMFdaRXFxeUt6RU1ZWjBZOXQ1UEt5YnZFeVp4WnlZTU1STlV5YWxMbklHR0JYQXdpeEVZc3hJTjI3djh6Yy9RUmFYamwwUm4wdFpwQmpBd3VUWkRLT2FHRGozMDZVSU9CVVU3cW94WnFUbTJjdWhvM0xwc2xVeE9EeXEzYTJNT2NhMWFTbTBtelRUVXlNc1hScDdYdFRad2VobkdSZUp4S0dTVWtNS1FVVVNTTXBDWkNOS1JKQkVFYXZ3WkpKT0RwVnN4aXQ0bGxOTU5NNGE5cjRENTIzQUhIWmQ5TUcvcXdrY0N0RWFRcnNJcURCUkErdVJEVGMyWkZ4U3BKa3g0U1pVUnVGYWJOeXhxZ2lIZU5OT1VJbG45WXRsbHVITHlRRDZhN0JLWFpzZUFVR2dXeGxTYTJOU3BudFlVRFU1MGppVjhpcTR6NW5qYnVwd1YxT0NlL1Y2L25sSHFEeWpiMm9scVpaQUVUSE9Jank3N0RPa1hOMEx1UGlDcFJRYVk2S0ZleDBaS1YyMnJyYjJmZDJOdklkNngxMjJrZXhBbU14UWZiME16N3VSY2hucWpFR1FpRTJTTVdFWDlRU1hxbGcyQ2E3cFYzMjVYYnpvN3ZDeUZnS0RRWHdEWGlvcXcyQStaU2dadllMdU9tVGRydFdPVkRDem5mTTVLSnJPRTFyak9rTXdmSUFhSXVrdDBqU012ektuOGJNM2MyN1RyZ3plbms5T3ZuV0UrY2JMV24xRE8xbWZKRUczbXNyOE5JVEdFTVVEZ0RnYXJENGx5S2NEdDIwNURBdjdzaFVmSU1aelFNTU9VbW9lcHMrVEdZdEVYSUVlWVk5OForYXYxWEJWWXF4cEs4T2IyT2xUcThTdUhLbVlicm53WlFla3lpVDJ2Q2RNeXBzU1VleDlKWUpYMTJNYlkyUGNld21YYjRpTVM3VUJrR0Zha3IyQm1RUVNJQVM3aUFycWhqTEdwOHgyb0RnNWxmWmtvMlgxRHltZ29ZNkNnYThQUTNOM2VvMnc0U0xZV2l5eTFKVmlxRVZJb2l5SnVTd1NDS0lNUmlNWVdXSlNvcmlyRldWVEhBV2pSbFpOV2JWTVpqS1hSdmo0ZG5WOFRxZXg4enBjRStKM3lUQlBJTUhUUEJwOFN4MjhQTzRSUE1uSlZSdEUxU3lmVmR6dFBjaFd4dGJYaGt5UWlXV2pqRERHM3dtb00rUHRLRVkySkdJeWpqVmFNbFlkcERQY0RYcXdBdERXdzRaejVka0RFSmpuS0llZWtMN2FJWWlFSUtEdnFCdkdaVWJBYmhpMTV5eXVyeFM5bnNQVjVYZjJ1OFBiQ1R3Znk2ZzlSM2RyZFdOenNHakVkTU9RSUhvQnpuRG56ak56clFCQWJjNXBJQ1pKaGpuTmx4MEhlYVp4ekRGcVhVVUdNalVyNWpXdXBzeWl1QW5ySEcwQllFQndxYXljL2NEZlplTkpNTjBzV25Vd2N0UkZWM0Z3UXVVV1JMeVJFVWtKOVk4TTBzOUYwL0xWMk1Vbkk1azhRdG9xUlp1VzhJaWhlRjJ0bW9adHRWRUdkbmJRRlpqSGJsazZ1c08vaXRncjRmTm5sMnNVMXBzOVUySWhZbmd4QU1wR1pOVzhXbW93eGtaM3pKdVRrOFJ4OE5kWjYrajFKMS9OaGJ3TnVweUxKWXNPdGludEZKcFRmcGRtK05pZ0xmSTg2TUFyS2ZKQXFGV2U3S29weURFRHVMRWVTYXFnM2tpR09tSUtRcms3czBlY3JLdGpuUWFoZEJUSUlCZk1ZMmxXb2dXbzlBMk5NNWN3aVJIak55ZGphL2JpcjE3M3k0RnkxYzloQU5HT25RSUR3RGZZMUh4ek5DMkRzTWVjZzFCZkplNm9vTGpwc3FxcVZ3a1J1ZXRzOEZkSGplNXBYZ2RmbCtUdVczMnVPVTNocDVUaEljWVk0RGpPbk0vd1pDclhhWmNSZnVneHVNTmFqNklJSzE2TVZEaGVwSElBeUxTaTNTYTRjR0p4UEJDUHZ2S3E4c3d2TTdwMnoyUEdqWkJQU1IzeGRqRlRnaU5TUU1ZbmgyWklpcWxzdEZzcXA1Nk1WR2xtMHZpbEdZQmM0eHczWkV5UGg4L2k5SjNoL1V6UmszU05MMlVXMWlYbWJ4c2d0QStVNXBhb0l0MGtaNmZNUjFCYVFnNThCMVFKTW95OVo2ajJFd2t6RmRaeURtYkNUZ25nc0p6UUNSaklvb3NZeFdDd1lvemw4dkNCMjVBUEFaQlpCU1NlakdMRm5kcXFpb3NoMzRteGZER0VJY3JkNldjazB4aDB5T1VqQllNT3BTY3VFWkJKRUpOVHArQXVGcWdZcXJNeGFtTDRlT1B1ZlphODIyMC9GSlQzNGl6aSsyUVkrVDZlNi9BUlhuVXhrWnZvbHlnWkJtQ0NTQ0Q1SGdZTWFGcmM5YkhQU3JmYit5V3F4K1phT0lHeG5KR3YxdUJ6OFF6aFpKTWVNOFJpekxpcnRLcFprNk5OTzdNK3FodlB6V01JL0pvMDB5VkRDbUl5Wk5vY0s3OThzVjVPcWdLSHRjdVQ0OXZBa0NqaDREeGhOTGt6VUJtLzRBYUJPNDdHc0VMYm56NFZzTGFEQ1JraUdPZ2lTQmpHRExDNTN0WmpTOWI0ZHlDVE8vZ0lrc01VSVpNSlZKQ0ZRTVkxcU44aExSN05SWEdQSkNwVGRtcloyYjJoQXhDQ2swTlFKS2owdlN4MFhqNlB1OVRvUnVuUmpKWlpUMkhHMjF3MkdvVjllR0ZRZHBtWmtnWUZjVlp5UTRrQnNZUkZtWVhLcmR0eXBWS0E2blpZVW9zUUIzQjNBd296aUZveExBc2tGQXZEbEpHcWM1NkJaWkZlRFRzNmJYdUdVeExCMlYzVE5ocURBMWorNHJIOG1oMkJFY1JER0dGY3BweGtnZzhQU1V4bHkwNGN5NWNoVWZIVnVGYUs4UWZQZXdIMEl4WThKMVkyYWsyakRHV0JqMGwyUDJkcGI3cE5ZSHBQUDlETXpNMmtuWlpQRWNEU1RNZ0dOZ0tkWlNhVFFIQWNKYVNlNDA4azV2V1c4SmQxL2pkL0RtaHJmY1Bya1VaWkZwVjZJZEVLMkd6NDYvaFRpQnVZVU5ad3lHWXlVbDFWUmI4clNtVEhKR3ZrcEZPWEFPTjJJY0psVHVEYUthU0lZTS9rYU1ISThYSFlZeTd0R2pMMzJvb3Jhc0puYVBxVlZNbHk2cjJiNERBMkhOU0MxNU1ndHF1eW04NXp4bThQbkltNXBuVVhnWUE0WGxOaE5YWkhPUXJOblB5M2JUT0hQUkhLNmhCdWZiYTBKUmozMzdvQ2lwV05SYkRXL2dvbFUxZXBzc2NlZ21aN2lCNDBybzRpNm1BUmFsREZlYjNqVnR2MDBja3ZvOFBSU2pMcVliSGp3eFJjK3Y1MXJ6V3puaEpOdGRUWWhRU2hCc05VaVN0aHY1OE05VXFSbmx3WjJKU3V3Tm1ZcXZOVDhEeTljNnJUbXc5dlNPNGNOMjQ5bnBhMUhkVlhIMDJJd3V5dkQxWTRxTFgyZ2hIb0doYlBhMisrSWtobnd2bDFnWjNDbDBhUWFIczhKaU1DTWsrQnBycnB6ckpqWTBOTGZ5V28zYUhqSHd6WXRselZta01wMW1RNnlyT1h4SHliN2ZMdjNkRitTcnUyNmoxTVZPVlF3c25VcnZ0TXRwbHlPbDVuUHpPU211UFU5VDJnYkZiRHB5S2lTQXR2N3cxN3pBbzBZMnZRT0FwbzdpZ3A2MkNoNUp2cE95RVhjQ1RHU0VsNTR3NUd1TjkrOTlpMTAwRzVaSk9jV1NwUmFqb0FJb2o0Z0xyZVk2NFZzYU52amxnYnJncmIyTTZqNjZJV0RDUXlFSFFsemRoekcrT1lyNmVyTFRTZk51N0tvOHhLMHJBZ01Nd0ViZS81amQ4eGJTNzU4bE4va3hSamEwbWpjMXg0bVZyRXFNSm5lNzdNZE8xbDZaUmxxcGdxUlVpM0ZVMURuU2VKckNtclJFWGFSQWhOSVRhR01NQmdNRlY5SnNHN3NyVThZR1NHMGREWmhBYUVLcmt3TEF4S3JXUnRJRE1RYmdZV3Jscmxsa3JZcXhtaFNFaUJyY3VURENISXZCZ3FaNjNldnlRSHFML2NYUmo1MnIzSEwxYTZqR2RoZXg5S1RBYllwblhxanEwazJIU1J5UTRjU2hUMnpSVGJnTzBaWk1ic2tNYVRhVm5SUVVraDJFU29JaWhOZzRWeTBxWXpJOUJwRFJ3MHRoTmhrMEZCZFRTYkpNZ0NDaHBaU3htTWpLMnhvSE84eHJtaEhacTRPVXpESEJ4TWFSYVhqbk5DMktybVVHaVJROVdHeEVKdE5RRUVMRUx2d05oQXhUWkJTbWtTR0sxbzNFNUpuWDExODZwTGtRS01aY09halVWbDE1a01rVUY1WFhqR2lhMkpaVG1hU0dnYmI5SmJYSUtpb3FOOGJkamFzRmpzTkZDdEFIc01jZDVKRm1jem1BUkdDWW1UTW1GZzl2SVhtK1VOcjZxRzljU0VWVUpncVdTeEpPanpJbWtaT0ZJeXd3WnFVSmlSMFg5eGxQNDVyS2xub1hGWWpFVExSeXpVSGF5dml6STQ0OUZCMTM1ZXB4K05UbThnWG1laUtEcmJsaG1nUVdkV0tyTW1UcjJIb0F3R1pOTTFQN2w5cmJER2NBdk1XSnk3RVJLVTZzUjJEZDJjTnZrNDgxakNNOUNlRllPRjVSbllIa1M5UWNqVkZrMFBxL2RjVzdldHpmRStYMXNlaHVqNDZhSzZKeVdkRHBib0VRa0tCYVFnRjNIVFlhRHlMaHAwc3ptVVZTS0dZYk5NemxCdVRocDErV0hHc0tCakJvZFcrMHYzRmdYS3RZaHliM2cyZ2N4MzR4YzlzK2dhRUREUFluakdEZnlJNUo1R21iZC9UN2dlOEpneE1Bd2lRcWljT3pFMFJ6SlE1ejlSV2Q0Z09iQWRlZXdvOWU2MDZZRnlQcmU5OWR2ekkzR0h1SnY1dmV4NzVwYS9yVGFadkgzUjNyWFI1ZGlNNXJheU0xR2NTMW1pTHNjM2RWbHczVnRjMnFTMDlUZ1hRSy9mazB0RTRjZXZRY0Frbmd4dmJKaFBaTDhDdmRaR2QzdU13TTJJR2VWQjBTbCtDb1AwSkljWUc3K2g0Qk1zR01qUUVSazQ3SkRkejc4SjhLWmlZVlNxaXBLS0pWSkZVa2xMQ3lGUlZTbGlLcWtVaUlSSUtqSVJQSUhtVHNaY0lDUkNlMnNwMytuZ21lRW5nNis3RHV0SjNQYmJ4clNhSHZXWmxsR3BOeVlZQWl5NzF1RlFjQ3NrSWhxaUZjWktLdEtWbXFDaUNBYUdGT3IvalVYQzZMS1Foc3VOVWFVT2JLeW1aWUt3MGlUU1lScTlnZTBPdUhXL1JCTnRPUEg0RUk0bmhERjlueDB3K052d1c4aHpaSlI4VmRRZDNtcWd1NzBmZ0twSW90ZGhnRTBIZE1EanVoa21iQkVHMHNuZUlRYk5CbC9VbUVhdmpXRlFidkRDNkxmYjdOU0p3WkRoelJyVWxjeHRCek5XVGhhc0F2T2lKSDVocWhnUkJJbmtiTEYxQTdoTVpjY3BZR0wxUjlFSkltd3lHZ1JvMno5MElZL2JTSStWb1N3Mk5IZngyVDFyc2tYZFNkS0ZUdmN5TjkyN09jUWR2THczNXZjUHJaQ0lUa2FCTmlHMHZpeXRNTzNpNUNGMXJJV1lndE5DNEk5WVlYQ1BnaUVCN0ZobTR3RnRBOHhmTmg3YURlNEtPV1dWTVpxbVNaQngwT2tiVEhrS3Nqa0dBNDJGQlFLSW90SjZYaGhxMnFvM2JtSEtWVHgyU2JTK3BFcWxKcWJZVTRTNzZ1MHpHcFNNWlVxVERBVkxSbmpuRXpmcHE2TWQrd09NTjV1d09QbWNjaE5XN0U5VmxWYUxWbEVXeXhaVlROMTNXb0RTUXF3ck8wRXBpVStLVWphYTNuU3dhUHUxdHpkbE5PTEhxb2tMR3dhTHhqNUVUZ0YrT3hCQkp6K2c0dHpCN3pKaVk2U0pkQm9nQkJrQmpud2dseTFBdjJ3ckxMZDRnZDl0dVFmVGMvYzF3Ry9rRXFSNGErUHhYZkl5RW1SUWhZRFJBWlVOT1NKNnptM0tzTGJyTG1aVGJkYzFKRmxObXRsMElORVJHeTFSc2FxaXEyM1FOME0yYjI3WlBPMi9Nc0FVU3hpRXlSdVFJNGd1Z2tOc1BheVBNS0hTbGVXWU5UVFBnenZ5U0s4SkcySmcxdzh4Yk15RW5VQm1Za1VRS0VtbFZoQXl0dDVHQWtXVjJwTDhOYjdzZ09JZ2d5NmxWSEVwSkxpU2xaUkVSTEJEVWc0YkNHR0lpc21KVE1sMXE0eTVxTlIwdUd6ZzU5V3dPK1JJQ2FHdTdBT2dEaE1qZFdMSWlSWW9SR0hUUXZSbVljSVFvWWJqSHVRa2c1ZE9mUG5jMTU1NFJlWTNZdVRCTVl4ZzJJV3FVaTNTNjhwenBCMTI1dmxndng2WEJ3YjU0OUwwall3QzB5OERZbTM0aDJjZ2hpSWJZRklDVkxKZEpsd0xFVVFLcUZVSU1VRXRrVEtsa3V6MHp6a3BLT0dPWWpwUmhXdVNHeUVFQWlZVUxuTzNUdWc3WEpQWjV0NDU3bWFmTnBka0RUS09zOXJUSlRoTVpEQ2tmVzVZYjd6MnNlVStiejFIMklweDcwK29WNzhsOUk5ajdJOHBBeWl0a1cvT2ZKTERNZXRkRjUrSUJpWGV2TlowQjE0SG5JK3JERnVRd2crZUNBVW82TjNzYUZYR1hRcVp3V1B1c2t1elM0d0lGRkZlZXJsazBvcDZGaTdKNU5OQjFZaEVWSVA4K1ZJb09SQXZLOVMxemc2eHd6ajFza2xvU3czQkJ5TWtSam1ncm05akJxc2xBSnpjY0wzeGI3SUhreU9NMzBYdXZWVzh2OUFVTWpyMi9tTythUnIyUnhGcE5rU1FRSm9YQnpnOEozbVdYTWpvWUYydGdZamJCS2JKRkRDeE5xKzBrOG16dHpzT3dzQ0RKT0NsVlZ0TGV2bHZwTGJVVDF1N3Q4VzAydmEyWmRqY2dRZFZzcTIrelk4SGQwenJLTzR6Q1l5bU0xa1NkWmNkSmNNQk5UNjVSNDNxYVFZeDVJSXQxWmNiOUt4cXE1Mk85bGU5dDVzN1gxMWtaM3M2c0QwanJCemVSOGFPRWVYT3o5RlRKc2FZdGFMQzYvaVZPeFcxWThZdlJUT0VNekIzck9adDdhZVROQjJ6VGNmZHhJUWJrUDAxbUI5UEhhaEhJSzJxRlUzS3UyMlRZMmZpZ2l5c3I0RUZNSXlyVHlUTnB5bWdKbDhra3VKVU9GWmRocUtaUlJaY2NFb1F6NEdEN0RncEpiaFF5aVFLTVFDeUp0dG1SdHZzOEh5Z2dTU0FzSXFFZ3NJbXVLVzdtMElDSHUxbklhNitrcld0TUZJT1ZEQUIzeFdPZS9XUVVBa0ZPTXkwWXRiTURDU3dlMVpiYWkxYWsra2xmemN5V1FXSkRXUmtGc3F3ZW1aVEVIS1dScFVyR01WdXFORlRkWUZGV28zVk50R1FaTElhV1NicWhVaWtqVlExVDN2UjczN0NQa2x2THc4ZklTUHg5LzZIejViTGF2cFdEQnlOdTVmc3dneW5rc1FtUXdNTVFOdDEyU1UyYlp2NXl6bXNIYWZqZXAwUGlhNk4rM1o4bnB3NFZhMTRZYXE5Tk1jcGhIS0tmOENBS0ZXaW9nY1E1VHAzbWNGRmdHdENPbGVza3Z3bU1nN2kvUzBsaks2Zy9RUlAzQlBCNG4zQkhlQ2J2dGtjRnNSZVlSY0Z5UGxxSzJyWWl2czFRWUthZ2VpNFFwWFhBVk1FZlRyMWFXM1lFaWJFVHpWTzhXYm91TUpXSmkxTEZTbFNXcktsaUd6dHVwdHdRWVV5Rm5tUVlURWdkanNEVW1BYURGQVFZak5SS0NaQkNJSjZKa0t5S1RWZldrbTdFY0ZUODhzU2Iza2JzaHVzY3locEFicmcrU3VPbWhMa09zRUR2UTdCd0NVbVJTT1lGMUg0SG9Uc2ttdTJFa2V0SjdBb2lhVDljaWNsRmNTQU53Q2tLMnJOdHg2anRieGxJVjJBMkI5SXJndlNScm9aTGNwbHRUelAwNUpHckl2YkVYM1I0NUhrY213ZWhqQmpyVHBFY1cwanRlRi9FZmw0cWZSOUQ3ejVqbEI3WURrU0lRUWlqeFFXUThLQ0JZcEdFVTk5RVpGc1Q1SkswazJLeFR3cUdTeVJTeFZSU3lUNEc2bUltaXBEK0FoL1FEbno1SmdPSmdrWG5WWHFaMTdxRkFIVkx4VzBEU2h5YWxQT25Ta1pKMklkVFR5OXpqYlZmWHhIenZRemVabG5zWm85SDRxajdUeHZ5SUtpY0xPdGp5K1BObFVSWFk2bVA5YXg3VklxVnMyWkpwVUtsYWFZLzJMTjkyelE5N01JVTl6WlMrZlZMWlRSQ0srZ1FOQk4wRGhTQVYyL0dUU1IyaEtwTDdwTytUbFBGZGovczVmSUNhOTdwamd0YTU5Qjc0ZERiOVg4djFhNzRPSVk4YWZQL3J2TTJPc1pLMUFrancrRU9WQVRKQmxjU1BXZGtPOGhJbWxNY2thdEZxOUFjNlJWTHhCT2d6QXY0QjR1Y3RCeUVFQ0w1QjNRNzZucGdnUmhHQkVqQ0VVOGQxQjBUZ3FESUdERDhvTzRrVWxOUU9ISGdPaVVOVzZNcXFLWmVpajAyRm9rYlZpQm1DeW9rRzRQcWhJU3lqQlltU01Ea3NiRENieFRVUmdiSmNNc2FVeVVwTlNycjRLMmF5dHF5TEQ1azBZeE5oeUhvSktBcm9Eb1hNYURyMTgydkNPUThKWW8zR1VKM0R1NndZQXhiY3pBN1JpbHB1QmZJN0FMZXJ4R3dvS2dCdUZGMGNyTE02K0MxMExtb0RNRU5SUVU0bFBUSmpiSFVVbGh5SkErcVhMRnJsa0RDY2R4RU9TaVNiU3BhbERpTW1Ga3FzV0pJdmpXNHZoZ3VyRWdDaUI0c2FFbVpnc3crQ1R6MUdHWFdxd2tva0paNUNCbnR5N28xTWdsa3lEUVFGeEZnc1NKV1ZvTEVRV0drNWwvUWRPN1ZEdVVOR1FGQTByUUttNWVZaTg1eElEMmdRWUxyMU5vNFpNd1J0VUNvbEVJSkRkQzJFcVNVQjNvN1YyUEphdjJQaTNSb3Y0RDR0SFc1ZFN1eHNkUXhrYTFKbG0zTWtqbVhNallRaDFZWlZTUVc5MDNzRUVGR0FiTHhndVJRUDQ0TERKcUlEeUhtSmwxQ1JhUWxqWXlWMFRVakd6RmNtN2VOTE5wdkl1cE1UQmpkdTAyazJ5WTAwcGlxdDgremZXVGZCbFd2cmdhWGNqMmtEQW9Ya0VpR0lTb08vTFQxMGtwanFDaVpjdHdSVWhURkE0T1JnQ3lTZ1dmazdJM1BvaVNRZkt2RVZrT3dMQjBKSHFrbjJFNVNRL1drcHdCcFlEMmdVZzJDZUdJSmIrS29oRXlGYmZOM3lWT0RBRnNXeUhaN1JTN2h0S1dRQW9iaFQwcjJkNWtXUGhoR1Nhd3NVU0lxWmc4azQ0ZFd4TmNrZnlEMUN1WXNnN0I0bUV4TVlURXNpUGdyNXZ2WWs1OXFJODRKN1pQV2tmVWs4b25vVGxIMTZuQndKNXc4b2FrRmFFSXNGZXMzZHMwMTA0Vk10UXBwdzBpQ0J0RVI1dVBodGpIUEpxclpIcCtCSTNUUjVtSmhqdDdSMXE5Z0FNUXYwbkNmZ2hacDV5bm82S1haenlVWW5BWUxERUtPOUxEbEhqcmI1R0lXUlRhZ3FkSWRxMktPOG91czRxcEROaVRIdVJQS2tjaWJNa1EyNkpIeTdlZ2Fra01ra1Q1a2FpZ0Q1MHhxMWdaQXl6SkkwcEhoRUpiUll5NDdlSEZiWk9LaDJJWHFKMmI5eVNWdEkrU2lIa1dTTzlaQmlsdjVXMlFtbGtrM3J0djRlU1F4NXZLelJnNnlVczlrbWtQc25qSmlQaFd5SWNjTDRuS0VnKzByOUVrZDN0dEtXVndqU2ZVVStjN3JyOWhzWXhqRllyMzJ0YStFOTFZUHprM2N1QzdHelRGVjBWaDBGZ0cweFhneURCbUZlazdXVGJZTm1CNEFvSkxseTRYSm1EREN3ZklRU2hWWnhEYloxMnMzQXNXM1dTVFdheGVRSEFWbUdDNGFHNDBxdUZXbEtLbHNZNktsdHkyOW02UHRlbi9KODN1WWZ4L0RwK0l4L1A4djA2ZEhtL084SEwrWnk0R1krMGw0VDI4ZU90Ym1ZWm00dTQxZE1JUmNZcElTampBS2ZrMmNJRDVpNDFId0VDSEVpSDRubjd2aVpNMFY5aGlvb0w2Y2RuemV0TDdCaGIyVzROVEVMeGh2dGRjRjhrenhmdTNYOHMwRlZFU2tkUVhwcmpFTGF2N01ic1hjeE9rZUpYN1d2dHZ1TC9ITy9KemkxckQvRFk0OUxYUmVUUmRzTCtSaHNUaFJqazFHM1FZNDZzbUI4QmxjeWpBNDVjRGh4UkQwd2dxa200aUdhcnFIV0RRWGFPbTAwbUN4VnVsTUc3Tm5xZTA2M2hFdGt0aGpPbnV2ZE5WdzdwTU9MVytwQVRKVGQ0NUNFa2tra1N2TFZDMUF5SHR5TmV5UEN4WVBCdThGa2xXTUdIRFlNSk00a2o5Y1NUOHh1M0RiMnZjdnVZcFMyNWpGRnBaWFc0U2FZVHBrNE9EZ2NEaERERFdaR1dTWkUwWW1GU3d5VFJMRVhEVE5TYWFxakVvZ0syeUZFWkJEQ2xrWVdpQW5Ma3BrUjBqazZsVXExVmlwVlRxVHBkVkc4MGFha3k2WktyT3BMVXV0UTJwc29iU1ZUTU1EYUtrektNMlFFaURSS0pCR0JVa295akxRd01LRGthRnRDN0RRd01LV1N4a29oWUcvT1lOVFFrT1FIZFJGQVlpZHZUcERNMXJOYUx5a21HVXFsVjlLU2FkQ3FVNUtORktjd0dVVXhFVlFwS0NVYVVRVHFqcGZMSEdwVU9LV0JnakdkVTg0SGE5b1BITzFTNVpBN3RpMWtRd0NrS013RmlrVlJoM3pKTmdIVnhaZG9zUjloM2ZuTVJCUmFNRTBCd1ozY0dFUkQxZG54b1NYVE0ybTIyOEEybVRSMHlPRkJ0b0pETzVFUkR1T21TTHJtMEhnWlNwV1VyRmpvQkdIRDNNRVFFWUowMGp3bVB1UHRMYmJIUGMyTEZjSlRER0pWRXBRb0xTMFNoWlN5eTBvaFd6TndCd2ppQ0txSUlNRkJpaHFrazZQb1JSb2NxU2wrZ2p4anBjUjB4YXRwK283dTIxZkhWcmNUb0wzL3FyTzFJNkIrc0hlUE1kdlVzdFd3VlZXS1EzSERFUlJSRVJJbTNLS0R1MGdIV1EwR3BDZ00rZWFTNmxXRjhCYXdMd29BaXRXdUE2Z0poeUF6WWt3a0UzdWp3RHVPaHlESnFtUHVEcnFDTmpmTEd5c3RNeXkxYmN0WWRYUW5aSjVPd2xIZTZrT0Y0WERCaXBGMW5lTWZKS3hTeVRTbXc3YkhTeGhSREtCYmRqWWN0Vm5qalJIbDZzeXJZeXBNWlZZa1lwbUxpNHhsaUpqSG44TEIyZDJ1bWQ1NHlsTThYMGV6dGVpcGZSWHI2WktoRWpSc0VvaVNFaEcxR1N2Uk13b0lNd29HRTE4SktwTk15RUtDSjIwa2FRalJsN3VKTUVpc3JDaHRneS8xWWx0bXJES05NclVaUVVWUnBtQzlGWGZsY0hIMkh2bG1FTkhuazlaWVcxVXNrcEd3WVBPUjhtREEwSzczeE1pd2RoMCtrQmU5bGlSZ2pBWU1BSTNHV2NzUnpDZ0c2SW9jTHpiZldHa08weERNTVRBN3kzbEhYMHB5S0FkRHRCaE9BL2tHU0Ywb1YveTNrUmR3RVJRR0x5dExZWGdrZk1zM1NrQjZtUXNpQzF6S1FMRUlZdk00SnpLd0lNd3N3cXBwVFpZalNncUlJQ1VsaEtWaG9SOHFHQlFNVmdqcUlHVkhTTzFoMFBBeEZJYVpoMXR4WG1pU2NYalBWemdQdlQwcDdIQ2tWZk5Vd29SZW00TzVFSHZIaWVWVVY0a1RwS2RhMnpjOGlBRHkvbUVXSmtJQVJTVzhnSk9BWTdlR0JqQWtrTlZob29TSEJtMG5VL2N5aXdOY1hCY3pDUVdHd3g4L1pWMEZZUmc1bS9qYnYyeDRzMWpDNHh2a3hYclVaeFZXUzY1KzNWOUtjT0EybUpsdEszK2JOVzErSk9lSFBpdzVJYTZIS3RTVGZlcFVWRSttajIwTytXYkpWUGxma2JkUzRUbUhBWFpmR2lVa3RCOENJT1VTUldSTExVY3JkMS9HT1RjUktFWXliUnIrc1RCRVpEMUlrS0NRYU9jTmd5a3pxajc0UjZZYWpNMHRPRlFHdUt5RlFLY2tJL0R4T05iTm1NSlNQTmFvc0JBbm96eHJmSWdEMVVoVUJjQmFlamRjQnNXUk1oSnJJNDVERHpnS3lnVzVoQUJZNm0zYkluZ25ld3BUclN0K3pER3JjVExOMkdtTVJIMkRqRDFuZXlkZHVqRkw2bkRsNDA2ejRPcmFZTWI0ZGNWTm9PVHRzYysyWk83ZmdzamM2RThLcHNRQ2lJaGcyZzkwYUFVaWtVTWVWOGZvN1pOZHpDMlF2VXExeTRRdmZIQjBHY2oxQzZWZ0doZ3FScWdjSXg1a2xPYndYQWVzZUd6UVlkQnNKVEVVZkZzcHpsS2FCdHpYU1Z4c0VWNzcwbHhWTnQ2THhLRjBLZFJtR1RjRTNxRURmZEpMQ3BLUkZvSUZCUlJSa1JpbFZ1eCtBN1puYXQ4bDFwb3ZDOGwxWmZySTlVTnB2U09WRlJEYWs2TytWZWUxK3BMbkVuSnJtQXFBN0lWdGFub3hra2FsR1RkcVlON09Pekc3ZE16VEduQjhPK2d6ZGRNa3NNMURVd0IwZzVVd2xoZ1poZ3lKYTB4amhscHgvSE9VbThtMk1ZVlpJY0h1a20rakloTk1FN2dydE9FdXYwUFloRVJxcHJBdkZOM2U0WHRjRkJhOTdxUnFabXlMOVEzTUJwMkQ3MGVDV2dXSVNVRUVvb1FwVTVCZ05nd0h1eE5Cenh4MEk1OFhXbVErbkU2ZnVWSFNVdUJUdVpwZ2NNSVo2UXNBT0duT0JwQmxkZk5OZDNyd1BFOTUxY29IMVc1TzkwblJwTEhIUjZMNHpnYXNYV1dXWGg0aVBNWStJNzJteWNpUzY4d2x5Q1FtQlcybkhlRHQzSEVZT0pLTFNIWVp3NVRHSEpjNFdoUVJTMExnOFR4U3NPUE5rcFNFSXJqaWhIUzBDaGpDNGswUU5TVXpXUzJ1NUtGcTVEQ1lXRkdubDNMQlM0aFNCdVdZaXlMMjBOdmxDTnZjM0ZHNXhzYUFiSFBscVdvVDU4amtFNXVrRzRPamNXMFRxRE5JUmxHQWdwYWJtb0daRTVOZ01wbDZrdzlqVXpJTXNVcDRJQWxZU1c0WVlOYTV6ZmVTTEpNMlNoWmhWMVJna3RlSDJFQ0NtR3pJWUZBMFp0YzB4WUFNVEFvWnV4SDNSZDRXbWZPbHNhV1k5ZEl3clNQWU9Bb3dVSVUzb0x5a3p3VmdDYjJXQVhNQ1RyaFNyZzBnRnpOQWgvS1I2UXU1em9lVzM1RzVPNDM0dzBORmc3OTVuTUx5R25BT3l3VUZrVzFqUW01M0Z1MWtobmM0SlNRV05pdzB1ZTBPdUZoMHlkNTl1ZEliUmJVZm8yQ3lyaElkUXNjdTRNTytYUnlCa1NUbVJObGttQlV2bER3SFJKOVZHSWUyeVRwVGdzKzdTK0JwaVBVMkVzU05rMHRkY1NZWmU2YUQ4L2Z6SU9UOUl5VjY1aWlZSkEwUVhrVENCbktQUk5Wd0ljaUlsZ1VsdU8wenlTdUhlbUVoc0ZHdGVwQWVWbjEwTUk5dklZQVlERzF0TDBMK3Q2UXlZR1llVjh5TVlJa1ZnOEthaVNmQ25zZVNNT1V3WmJYMFpqMWtYN3VEakoxbSs0OVlTUzZKbjBWM25mamtWUjVDQXE1UjRFVGdkMlpjU25EQ1pFc0JWaVozQ1hJYkV4b0pKSHpXdThtRU9rSlZ3NjVPaEgxSlZwdkU5VTU4WllvVkZEM1NlQTVPVjFQRE9ha0NUbGE5ZnpwRGFteGhKVG9pbkxsSk9TZWVjWUtHYlFOYnZ5OU5KVm5FaFlpZlhWSmsxaUc3WFNCaDl3Yk5aSjBBWkxSd0pxTEVORFJZNmhSY01EcmtaR3pPSmhVS0ZEbG42TU5yZUhoQmdJRkIyZjNDRXVZQXk3RDRXQzhURHdPWGo5MllvbEV4UTBqVlVRWXJJcllOWW5xU2EyclUyVk05ano2ekt5ZHNkYnJuSTRJSW9zQVljRmdXcWQ3ZUZ0dWRuVFdhc2ltemdpa2w0Qm9QV1RDc0VLUUdFaElvSlY4T3FUYmFiVitISmpONGFMRXBWYzFpYks2V1pOanlERWRzTzdFdDFud2VNNEhCRWdLUUpiUVVrQW5lQ01qSlJQdlJFd2xsc3BaYktxT2x6ZllNWXcxQ1RaSHdGUStIdzJuSjFuSThWa2QvaE9wcGRwTWFaY1RQaTNXYVllcW10YndDUWFkeHhHSTZrVUwyTjA2YmJPYW5BOUV3MzV1S25COHRlbjU3Yllrd1prbkdkbnRNS0ttcTdTWUlLRHpGVXJ1R1JTT1hJb3lFRWZsTXRTbXZnSFNWb2hRK1VaQ3RtUmdlUTk3T1NjSkJLSHcyaE04L1lubXpCYkZwd1hOSmlOUmJxc2YwTW5jT1N3WmxqRzlUZDdEVmp4SWhDVkppYW9GeUpEbDV6VUFEdnFSVHJFQzR0VnFLTWZHT3B5dHdlbHMzaTlzc3NKc1pqRURIQ1FuRDdYNVRnTit1T0tmQ2xNaXBTRkt0cXRITGxueUtFMmdGOTdISkhsT1E1SkhuZzFkWE1jbXB1eG0xWXN5dmt0YUkvTVJ1Zytnc3hEVmQvTXN4QXhYNXE2RHZkWUFUQ0JVRDdobEFZSkZQcER4UmU5d091TjUrU2R4Mm80enBwazBxcXFqV2x0U29qMG54ZGgybmlkT2ZCNm1NNVk0cVNxOTBsVDZ1emNFZ0hTM28zY0tyeERHQStZY1ZwWWVwd0E3YkRXUkh2OStUcjE0Ry9wT1RoNUhUNjFRK29Lbm9XSTluNmx5UldMT3R0SWNSZ29hTWhXQmpCWUdYTVJrREdqSVM1UVdHTURES1JaSldCeFFRRWVqRUNSaHhFUklUcTNaSUdTTDFaTGpTVkZKV2tCc29HeThUWnVycDBxZ0NkQ1ptbE1nT0FNRjJpemJrdkhkZUVjR3BlZWFkQXRpYm1lMkpKOFdoR2syZC9iNUpiU1VwWjVhakl0czlYbUJNSEQ5WDFMWUtpU1pOc1IxQ1hBeGNsZ3RodXJyNVRCZE02cEJhTUVWOHpCR2J2UndRNkZuamdlTndXRmsrTFNUQThhZGpHN01yZ1FNVmpQVExUYzNCc1ZDeEVUTFVLblFzSWZMSWxpckI5SGZEeFBybitkMHNleHhVOGpEbXJTc0ZrMHBhTFo3YjhUak9QZjA0YjFiRVdkY0gwdVJRTkdnNUpCdzB5RjNNR3lDMkUyV0owUDNjVHdrRloxQm9ZbzRSWndhU3BiSkRITFhUcHNiUVhyR2NXUlV3SU9hdXNNSmpDWFdKRzZORTYwaEpJb1VIMW1TMGk3SEMrS1VRa2pxVmRTZ0tUQnoyVFNhRGdEQnVjemdwVzZjSHA4bTl0TGN2c3Vzb29kb2hYakpsVFU0bHVBTWRPbG1aY3hCekRPTWloOStlTjlORzB0a2VKSml6c0s4Rkd0bGlyT1oydVdBWTBMQUJRUk1UcFlEaVVxYXlNYmdDc3pwTVNJYzV1NlozeUkxVFNZWXNZazdSWENPKzN2TWEwSWkrWDJsa0hJRHhvR3REMkVZTU5VYUNKQW9wUkttSnZtUnBGU2gwQWRNUWdZaWJWdmlJUy9nWStBRVNnaW1UNVFSRzVla3d6SFZLdk10NmsxRE54TWdQTTQ5eTVMMXBMNHRFVktuSkZNMEl1STlBNHdGNTdLUFhCMGVzb2pPa3dTNVVEUzJaNVdGdGVnMjI0RUg0NDBpdjIrM1R6NExyaTdoZzNoR3h2REo2WkNWSW5BMmVuckdqMys5OWhveFdqWVp2TFBwcTM2YS8zWjRtMmhLbGRVcE9CNmVvVFlHNGpJcXlSa2xwcUM5WFp2RWVsNDNKUXFVVkRVamV6a1RMRHY4ejczaUpGakY3S0Y5eG41clVrR0pZTUlSNDBrS3d5RklXYWlhVGFKTEVsaFRVaFd5VHo2VG1kT0lPSnZ4blFNc200UVdYazVrZW5lWnE0YktVeE1EQjZabktTMlpoaHVxZ2tDd0NMVStNZ2tUSzB1a3JFeWM5Qnl0Wk5sbDQyV3Fvd3hqdTVwdGRWMHpNM3gyU1pxVWtVdnQ0WUtnN3VCOXUycWUxL2xJOFNMelRseTdWcmNqRzQyaVZOYlNUNWxGWTg4dGI4SU4zR0c5SVdpajFKTkM2MEVJdDRlemJoYUlqZXhCb2tqSHo2Y3JOMjQzMjJRdWpnY2p3WlB2WDBxems1RGxCT1VOSk16TlkxMUltMGhwSUd4VUkraUYydHQyd3NDQXFPQkJTRUFrUlZoRlZtRllrWkJTM0trazRVUnBtbkZOTmtzNEthS05tWVdrYk9ZODA4T29hNzJ4bmU5c1NiWEtreWt5bWZabkx5SDVzY0RnUHZvZlBFREQ2QWhTcFpFdENJaVFEdGVEdTdPcFhoUkV3RDFhSWVvdkJLeFFIbFlqNjYxVUpzdGlZc0VJSkI0VjhqNkJQQXo4VnBYRm9oY0FDMkJVSTJLQVNTYnBIcU96dzhHbGpsSXRYZ2MvWmRweVJNOCtlZUVQUHNZZEM2Y0RJaGFDcVpTKy9ZZ21naXRwWkJmQVVFeXhqUnJVbXJMSjB5bzcvUDE2K3FkRW5FbktnK2FPNUc1U2RzZ2hhUUgycVdHUUcxMElYSG9jYWFlREppYjRGMnJ2R3N6SGJuSUI4WGtOaDhUTkpLTUJkRFRCZ1lMblE0YWtQVzh4a3FrdEh2bmx0bHhYdEdENDdwMzdHQmtlc1JXT0VZa1RkVVBXSlJtejQvTEpPdnVvL01XT1hJZVpFNDJJV3JiWUVzL0M1bWtIQ0hjTkpyaWZUTEVuSk9tSnEydUxyUmtoM05FOUI5U1BHanJRay9GSVR2aVNjSSt0ZlFaWHFaWmdWVFhsbmlaM3h4S0o1UDNVa1BCSjcwb3RVcCtSM0tWYWxMZVQ0WW5qS1U4ME4wZFBwZWtyRTg1TVhzV3BCUTdHTm5OWXNieHBMdXlMSmNWTUxDc0tnWnZacVZTeWxrTUVNTUNzNys3SmhkR2lKcVVkQWJDMk1vSWRhbXFaTnNOa29xWWxMRk5KTVRLSzcrWTUwUjJxb1dtS2cwSVdCQXZOQ0hLYVRJeUlkRmc3Q25VNVNkejFKUGRtRDNlbjlMUTQ5NDVNbmlXRmtBNVRFZ2pIMnN4M1d5SVdSNFIxQXB6T2JPZ1hueFBMSE9OYlZEOFZTbjNtU2ZVOXYzRTBlaGUyNHVYRnkwYXd4QlE2MU1KRVRpRTJBbEdyTW9TZ25UNTEwMnpndUpWZUQwekh3OE0zZlBtRm5zWGJKRW5acUdvalZPSW13T3B2QU93cnBwdTNsQm4vSmtJQ21idnkrRzRWd3JUSkZ4NjRsa1E2Rk9YSzM5TDdIWmIyVjhjRStLUGZIMUNjNG5PdTZRT3A1SFB3Szg2NDlTcDdIeG5sZUFlU0pKWXNSWGhMOXVhVkNranpBa1ZGVlJTU0p4b1RTa3lDQkpZRmdXRHVnOUxjMm9DMXk4U1E0ZzgwS0IrQjNFektraHdmZy95Z1hNYUJnRmxqdjhXZ1RtSzB2QmFZdFlLSUtrdWZtdll6L0xzWEJtOUhVTHJuMEpaVnhzYStVNUVGY2d4QzFsc3NZTGpKb3VkeE82VW1WQUYvWWN5RU1zOWlBWnB6dkRvWW5UY0RWcnZCYTJMYThoM2R6S1dDalZiM2dldHNOMklNWnFYV2xzSGFUQ2V1UUxhWkdiTzVnZXdvRW1oZ3pTU1dSMW5mL1MrVDRiOGZwUHJTdmdWWERmVW0wclpWZGhINS9jUEpxcTZlRWMrZUpYUldPb2V4M0UwdGlxVjVkTUpwYkZVcjdENGRTTkZTMDhuNU1qNy9zcjNWcURKZG5jbEFBaXpJRGVxQmg0a2dmYTIyNUpKU0piSHB0RXdkUTY4eG9GeGJpOUExRVhPV284SkFNaEwxOENLYUhSWGRSU0xJVlNxa25aSFU4L2V6b2pxT0d4T2lZNW9xdDVEbWZYVWJIdm1qRHBPVWxpU2Z0V2ROTk5NOFVhT1pwWWp0Sktpc21CR0dzaWVsSTdxM2JFR2pRNERHazBOMDU5WFZjT0lLOW9XOUNXc2dZTWtvZzBRTU5PUG5LWmxIczh5YTVuakhlbUlTZGs3blh4bktQZUs3Rk9kUytmREJCMEs0Q1pBNWxzZy9BSHdtREphek81bEloaXlQb2ZSOC9ialEyMEU4VVpoQllhUk5oV0FvSjc2RnJKdVdpU2NEcHVRbVVSbEppeUp6V1FuTnRCYm14SVVKZ2t4RmV3WG1pSUVRRFZkQ1ExcTFFQm9aTFJYWmx4U1NjTFNtQnZGb1pFa2xKSWFDTVJON0U1NWtuT3h3TFZnMUs0dFpWSnFxOXdndkt4aXBZcmpHMGhvQ0VuQ1EyakE3QXRyMFVWeWcxMmdWald5SmFOQkRMdElHMEphRytDYmhpRVlvWm9DTmhrRlF5QjNzWWRKRXhDYVl5eEJFYnVQM0xkTWVKeEY0VHRzTlZtRXd6T1RYSnd4eExWWGFhVklZVVRjYk9lTFZsMU1Nc3N3VXBnRXBDVWhTU05xRXB4dXRUSWhBWjRCWVJQdXJJRzdod0k0WnRJYWhPZ3NtcXlxVnRKbXhxY29jOFBIQ2NwZmlEcGRKeUowbktwMG5pYWlTWVhiTDFIekxUcDBoSnZDTWNTeUpTeTJQSWxQa1daWXhaMnBUdWJ1RGpPanRRT1hHU2N6dmpWRGhsbXljNnJqbzEwY3JUS0JyTnI5S1NER0Zkb21UTEVOaXlkK3c3MnFPbEtoWGU0Sm5QSk15VEZWYlZpeVV3c1k2aCtVbU41T0tPZExNZGV4NVdnVzhGb0dLQnFWNmNGaVJkbHVTc2lUcWtIa010QVRxV1NMSTVwNWtkczBlSU41T1RqZDA3cWVPb3krTllXaHhEM0pWdGRBYnpzY2l5UmFpcXF3Y1pZRStDYU95dmZyVjErbm1ocXpNMW0vU3ppSFYyNGE3dUptYTVFK2FlN0lIR1lwYnQzRHpCeEplR3BHRUhDcE9qdkl5QmlMd1pNbUZneGQ1NjBjQkxBeWdWQlFWRllWaFdDcGlWNzNkTFg3UGxKV1RpcTNSVU9nK01ad3lMNUxSS0dVdUE5UllDSHZQZ2JKN1A0T05BS3J4UE1DTVhNZG9qMEdFWUxuUXZleG5rQ1ZtTmczNElIWE10WXlWeUQ4NSttNHgrRlZkREltWXRpcXBXUlpJK0RCOENmZVo0cHM3QWNKT0pVOTkySHh3S21IeEhiVnIxV0d3MjNqaFJ0OHE3NmsrL0RlR2o1WkNiU05Zd2R1NmlnZ2FZRlJKRndRd1dEenhBdUxWOTVFdDBVSHdkaHlOaW5jaTlTTEk3bm5DRkZvUUNIcTVaYUdPU2tNZXNNOHlCMG1iSkM5TnFNZk1XdWtTR0VlZjJEcWdsTUlvbVFtK2xnb0t1V3ZIZWp5QTRrWlE3SzRrTDllZnBFL1UzbkJXNXltRGowSm9uUXBWSlJ1UFNNR21LVkVrN3ZySGNWejZGTzNvWjRsZFh1bm8zYTI0OTgwRHAxY05CaVlleU9EekVldy9ZUGJvOU03YlAxMGR4c2I4TTFqZ3gyR2tLakRlQ2NSb2g4eGRiWjVjQXZwcE1WamNTQVljNXdoNDVyQjZhQXBwRDEvWjg2MjBRUjl3ZXFQT05KdStJWHhVcFlvb2ZQNzRmdGZqZGI1ZHQrRlpiVVd4TXdHMGl3Sk5xd0VsbDk4dnhaTDV6R1VSQ1ZOQkZHYlVhQ1NiUkprMHlaTlIxVFdSNHVBSTRaL3ovWCt6OVUrUjlqNVB3VDcveTVpL3cvMUgrRVAvWFQvMzlaRC9peEQ2SDNKL1EvNTVtNzdpYktRM1FqQS8xZkoreitzWG42MUJRRC85ZnVNNi9SaDlSTS9VLzhGNXIza1RiOXovZTJUVmhtSE9OLzdVazMzZnR3TVpvc0ZzTG9sWXlQdTBuMjlvZnFVaE1UL1VNaTRVQWl0OEJ2L2hhSC9wc0FuelpMdjJGR1JZRUl3SUVwakRoZmlkVks0ZFJWbmZSSlQrNnlCc1ZDc3dZUjF2KzBibXI1NW5LdVU1Vm93OFExU3VNUmNWaUdQMWYxOHFVYjBCRHJYNVhEcUpGU1l5d3dsK3hXalVPZTV1ZjZyUHRrR0t6LzhoRVg2dUVpazZCd245NUI1V1Z4OVdzZ2Jnc2MxaWFjZysrUFR5VGdUSUhqMXdHMWFVT1FYdFFqd2Z0L3E0WXZGK3p6Yi9xbnp2OTYvVjl5a3lFVlg2YzNwODdPdzFmMzg2enNYV20yN3o5UGY4dndranB1bGRxOVdLK2t2SDlENVVYRnY0VFNOeGdCNHFUMnJpZUx5ZTZWL25mZGN6Nk5jenR2K0gweS9WK0xqOTdzT1E5aGJ6SE41ZzZ4ZThvYnZ2YmxSNzloREVjM3g0ZUx4ZVduMjkyRzdUaXM1WExkU1hVZWpuS2VmMmQ1MnY2M1hmODJ6dXZYa0cxTWMyVHkxZE93KytVOFByVjVrMEsvOHhpRDBMcDRiYWNNWi8vRjNKRk9GQ1FoM1lWN3dBPT0KIiIiCiMgRGVjb21wcmVzcyB0aGUgQ1VEQSBzb3VyY2UKQ1VEQV9TUkMgPSBiejIuZGVjb21wcmVzcyhiYXNlNjQuYjY0ZGVjb2RlKENVREFfU1JDX0NPTVBSRVNTRUQpKS5kZWNvZGUoJ3V0Zi04JykKaW1wb3J0IG9zCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiCm1vZHVsZSA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0nZnA4X21tJywKICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sCiAgICBjdWRhX3NvdXJjZXM9W0NVREFfU1JDXSwKICAgIGZ1bmN0aW9ucz1bJ2ZwOF9tbSddLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysyMCIsICItVV9fSElQX05PX0hBTEZfT1BFUkFUT1JTX18iLCAiLVVfX0hJUF9OT19IQUxGX0NPTlZFUlNJT05TX18iXSwKICAgIGV4dHJhX2NmbGFncz1bIi1PZmFzdCIsICItZmZhc3QtbWF0aCIsICItbWFyY2g9bmF0aXZlIiwgIi1mdW5yb2xsLWxvb3BzIiwgIi1mb21pdC1mcmFtZS1wb2ludGVyIl0sCikKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQogICAgbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQogICAgcmV0dXJuIGM=

Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0

Changes from previous submission

Against this author's previous submission submission 29932.

- IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcgpmcm9tIHRvcmNoLnV0aWxzLmNwcF9leHRlbnNpb24gaW1wb3J0IGxvYWRfaW5saW5lCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKQ1BQX1dSQVBQRVIgPSAiIiIKdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYyk7CiIiIgpDVURBX1NSQyA9ICIiIgojcHJhZ21hIG9uY2UKI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgCiNpbmNsdWRlIDxoaXAvaGlwX3J1bnRpbWUuaD4KI2luY2x1ZGUgPGhpcC9oaXBfZnA4Lmg+CiNpbmNsdWRlIDxoaXAvaGlwX2ZwMTYuaD4KI2RlZmluZSBQQVJBTUVURVJJWkVfTElCUkFSWQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9jb29wZXJhdGl2ZV9ncm91cHMuaD4KI2luY2x1ZGUgPHJvY3dtbWEvcm9jd21tYS5ocHA+Cm5hbWVzcGFjZSB3bW1hID0gcm9jd21tYTsKI2lmZGVmIFRFU1RfT05fQ1VEQQpuYW1lc3BhY2Ugd21tYSA9IG52Y3VkYTo6d21tYTsKI2RlZmluZSBMSUJfQ0FMTChjYWxsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWRhRXJyb3JfdCBlcnIgPSBjYWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApCiNkZWZpbmUgSE9TVF9UWVBFKHgpIGN1ZGEjI3gKI2Vsc2UKI2lmbmRlZiBISVBfSEVBREVSU19fCiNkZWZpbmUgSElQX0hFQURFUlNfXwojZW5kaWYKbmFtZXNwYWNlIHdtbWEgPSByb2N3bW1hOwojZGVmaW5lIExJQl9DQUxMKGNhbGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpcEVycm9yX3QgZXJyID0gY2FsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IGhpcFN1Y2Nlc3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKI2RlZmluZSBIT1NUX1RZUEUoeCkgaGlwIyN4CiNlbmRpZgojcHJhZ21hIG9uY2UKI2lmZGVmIFRFU1RfT05fQ1VEQQojZGVmaW5lIF9fRlA4X1RZUEUgX19udl9mcDhfZTRtMwojZGVmaW5lIF9fRlA4eDRfVFlQRSBfX252X2ZwOHg0X2U0bTMKI2RlZmluZSBfX0JGMTZfVFlQRSBfX252X2JmbG9hdDE2CiNkZWZpbmUgX19CRjE2eDJfVFlQRSBfX252X2JmbG9hdDE2MgojZWxzZQojaWZkZWYgVEVTVF9PTl9SRE5BNAojZGVmaW5lIF9fRlA4X1RZUEUgX19oaXBfZnA4X2U0bTMKI2RlZmluZSBfX0ZQOHg0X1RZUEUgX19oaXBfZnA4eDRfZTRtMwpjb25zdGV4cHIgY29uc3QgaW5saW5lIGludCBXQVZFX1NJWkUgPSAzMjsKI2Vsc2UKI2RlZmluZSBfX0ZQOF9UWVBFIF9faGlwX2ZwOF9lNG0zX2ZudXoKI2RlZmluZSBfX0ZQOHg0X1RZUEUgX19oaXBfZnA4eDRfZTRtM19mbnV6CmNvbnN0ZXhwciBjb25zdCBpbmxpbmUgaW50IFdBVkVfU0laRSA9IDY0OwojZW5kaWYKI2RlZmluZSBfX0JGMTZfVFlQRSBfX2hpcF9iZmxvYXQxNgojZGVmaW5lIF9fQkYxNngyX1RZUEUgX19oaXBfYmZsb2F0MTYyCiNkZWZpbmUgX19GUDE2X1RZUEUgX19oYWxmCiNkZWZpbmUgX19JTlQxNl9UWVBFIGludDE2X3QKI2VuZGlmCiNkZWZpbmUgX19GUDMyX1RZUEUgZmxvYXQKI2lmbmRlZiBHRU1NX0tFUk5FTAojZGVmaW5lIEdFTU1fS0VSTkVMCiN1bmRlZiBfX0hJUF9OT19IQUxGX09QRVJBVE9SU19fCiN1bmRlZiBfX0hJUF9OT19IQUxGX0NPTlZFUlNJT05TX18KI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKdGVtcGxhdGUgPGludCB4LCBpbnQgeT4gCmNvbnN0ZXhwciBfX2RldmljZV9fIF9faG9zdF9fIGlubGluZSBpbnQgZXhhY3RfZGl2KCkgewogICAgc3RhdGljX2Fzc2VydCh4ICUgeSA9PSAwKTsKICAgIHN0YXRpY19hc3NlcnQoeCA+PSB5KTsKICAgIHJldHVybiB4IC8geTsKICB9CiAgCmNvbnN0ZXhwciBfX2RldmljZV9fIF9faG9zdF9fIGlubGluZSBpbnQgY2VpbF9kaXYoaW50IHgsIGludCB5KSB7IAogICAgcmV0dXJuICh4ICsgeSAtIDEpIC8geTsKfQogIApuYW1lc3BhY2UgZ2VtbV9rZXJuZWwgewpfX2RldmljZV9fIGF1dG8gZ2V0Y2xvY2soKSB7CiAgICB1aW50NjRfdCBjbGs7CiAgICByZXR1cm4gY2xrOwp9CnRlbXBsYXRlPHR5cGVuYW1lIEVsZW0sIGludCBNLCBpbnQgTiwgaW50IFRJTEVfRElNLCBpbnQgQkxPQ0tfU0laRSwgaW50IFZFQ19TSVpFPgpfX2dsb2JhbF9fIHZvaWQgdHJhbnNwb3NlX2tlcm5lbChFbGVtKiBvZGF0YSwgY29uc3QgRWxlbSogaWRhdGEpIHsKICAgIGNvbnN0ZXhwciBhdXRvIFRCTE9DS19YID0gVElMRV9ESU0gLyBWRUNfU0laRTsKICAgIGNvbnN0ZXhwciBhdXRvIFRCTE9DS19ZID0gQkxPQ0tfU0laRSAvIFRCTE9DS19YOwogICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgICAKICAgIGNvbnN0ZXhwciBhdXRvIFBBRERJTkcgPSBUQkxPQ0tfWSAvIChCTE9DS19TSVpFIC8gd2FycFNpemUpOwogICAgX19zaGFyZWRfXyBFbGVtIHRpbGVbVElMRV9ESU1dW1RJTEVfRElNICsgUEFERElOR107CiAgICBpbnQgeCA9IGJsb2NrSWR4LnggKiBUSUxFX0RJTSArIHRocmVhZElkeC54ICogVkVDX1NJWkU7CiAgICBpbnQgeSA9IGJsb2NrSWR4LnkgKiBUSUxFX0RJTSArIHRocmVhZElkeC55OwogICAgCiAgICAjcHJhZ21hIHVucm9sbAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUSUxFX0RJTTsgaSArPSBUQkxPQ0tfWSkgewogICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgZm9yIChpbnQgdiA9IDA7IHYgPCBWRUNfU0laRTsgdisrKSB7CiAgICAgICAgICAgIHRpbGVbdGhyZWFkSWR4LnkgKyBpXVt0aHJlYWRJZHgueCAqIFZFQ19TSVpFICsgdl0gPSBpZGF0YVsoeSArIGkpICogTiArIHggKyB2XTsKICAgICAgICB9CiAgICB9CiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgICAKICAgIHggPSBibG9ja0lkeC55ICogVElMRV9ESU0gKyB0aHJlYWRJZHgueCAqIFZFQ19TSVpFOwogICAgeSA9IGJsb2NrSWR4LnggKiBUSUxFX0RJTSArIHRocmVhZElkeC55OwogICAgCiAgICAjcHJhZ21hIHVucm9sbAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUSUxFX0RJTTsgaSArPSBUQkxPQ0tfWSkgewogICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgZm9yIChpbnQgdiA9IDA7IHYgPCBWRUNfU0laRTsgdisrKSB7CiAgICAgICAgICAgIG9kYXRhWyh5ICsgaSkgKiBNICsgeCArIHZdID0gdGlsZVt0aHJlYWRJZHgueCAqIFZFQ19TSVpFICsgdl1bdGhyZWFkSWR4LnkgKyBpXTsKICAgICAgICB9CiAgICB9Cn0KdGVtcGxhdGU8dHlwZW5hbWUgRWxlbSwgaW50IE0sIGludCBOLCBpbnQgVElMRV9ESU0sIGludCBCTE9DS19TSVpFLCBpbnQgVkVDX1NJWkU+CnZvaWQgbGF1bmNoX3RyYW5zcG9zZShFbGVtICpvdXQsIGNvbnN0IEVsZW0gKmluKSB7CiAgICBzdGF0aWNfYXNzZXJ0KFRJTEVfRElNICUgVkVDX1NJWkUgPT0gMCk7CiAgICBjb25zdGV4cHIgYXV0byBUQkxPQ0tfWCA9IFRJTEVfRElNIC8gVkVDX1NJWkU7CiAgICBzdGF0aWNfYXNzZXJ0KEJMT0NLX1NJWkUgJSBUQkxPQ0tfWCA9PSAwKTsKICAgIGNvbnN0ZXhwciBhdXRvIFRCTE9DS19ZID0gQkxPQ0tfU0laRSAvIFRCTE9DS19YOwogICAgc3RhdGljX2Fzc2VydChNICUgVElMRV9ESU0gPT0gMCAmJiBOICUgVElMRV9ESU0gPT0gMCk7CiAgICB0cmFuc3Bvc2Vfa2VybmVsPEVsZW0sIE0sIE4sIFRJTEVfRElNLCBCTE9DS19TSVpFLCBWRUNfU0laRT48PDxkaW0zKE4gLyBUSUxFX0RJTSwgTSAvIFRJTEVfRElNKSwgZGltMyhUQkxPQ0tfWCwgVEJMT0NLX1kpPj4+KG91dCwgaW4pOwp9CnRlbXBsYXRlPHR5cGVuYW1lIEVsZW0+Cl9fZ2xvYmFsX18gdm9pZCBjaGVja190cmFucyhjb25zdCBFbGVtICpvcmlnaW4sIGNvbnN0IEVsZW0gKnRyYW5wb3NlZCwgaW50IG0sIGludCBuKSB7CiAgICBhdXRvIHggPSB0aHJlYWRJZHgueCArIGJsb2NrSWR4LnggKiBibG9ja0RpbS54OwogICAgYXV0byB5ID0gdGhyZWFkSWR4LnkgKyBibG9ja0lkeC55ICogYmxvY2tEaW0ueTsKICAgIGlmICh4IDwgbSAmJiB5IDwgbikgewogICAgICAgIGlmKG9yaWdpblt4ICogbiArIHldICE9IHRyYW5wb3NlZFt5ICogbSArIHhdKSB7CiAgICAgICAgfQogICAgfQp9CnRlbXBsYXRlIDx0eXBlbmFtZSBpbl9kYXRhX3R5cGUsIHR5cGVuYW1lIGFjY19kYXRhX3R5cGUsCiAgICB0eXBlbmFtZSBGcmFnQywgdHlwZW5hbWUgRnJhZ0EsIHR5cGVuYW1lIEZyYWdCLCAKICAgIGludCBQTSwgaW50IFBOLAogICAgaW50IEJNLCBpbnQgQk4sIGludCBCSywgCiAgICBpbnQgRlJBR19NLCBpbnQgRlJBR19OLCBpbnQgRlJBR19LLCAKICAgIGludCBXTU1BX00sIGludCBXTU1BX04sIGludCBXTU1BX0ssCiAgICBpbnQgV0FSUF9NLCBpbnQgV0FSUF9OLAogICAgaW50IEJMT0NLX1NJWkUsIGludCBCQVRDSF9TSVpFLCBpbnQgUVVBTlRfU0laRT4KX19kZXZpY2VfXyB2b2lkIHdtbWFfY29tcHV0ZSgKICAgIGNvbnN0IGluX2RhdGFfdHlwZSBzX2FbQk1dW0JLICsgOF0sCiAgICBjb25zdCBpbl9kYXRhX3R5cGUgc19iW0JOXVtCSyArIDhdLAogICAgY29uc3QgZmxvYXQgc19zW1BOXVtQTV0sCiAgICBGcmFnQyBmcmFnX3JbRlJBR19NXVtGUkFHX05dLAogICAgY29uc3QgaW50IGNvbXBfY19mcmFnX20sCiAgICBjb25zdCBpbnQgY29tcF9jX2ZyYWdfbgopIHsKICAgIEZyYWdDIGZyYWdfY1tGUkFHX01dW0ZSQUdfTl07CiAgICAjcHJhZ21hIHVucm9sbAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGUkFHX007IGkrKykgewogICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBGUkFHX047IGorKykgewogICAgICAgICAgICB3bW1hOjpmaWxsX2ZyYWdtZW50KGZyYWdfY1tpXVtqXSwgMC4wRik7CiAgICAgICAgfQogICAgfQogICAgI3ByYWdtYSB1bnJvbGwKICAgIGZvciAoaW50IGsgPSAwOyBrIDwgRlJBR19LOyArK2spIHsKICAgICAgICAjcHJhZ21hIHVucm9sbAogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRlJBR19NOyBpKyspIHsKICAgICAgICAgICAgRnJhZ0EgZnJhZ19hOwogICAgICAgICAgICBpbnQgc19hX3JvdyA9IGsgKiBXTU1BX0s7CiAgICAgICAgICAgIGludCBzX2FfY29sID0gKGNvbXBfY19mcmFnX20gKiBGUkFHX00gKyBpKSAqIFdNTUFfTTsKICAgICAgICAgICAgd21tYTo6bG9hZF9tYXRyaXhfc3luYyhmcmFnX2EsICZzX2Fbc19hX2NvbF1bc19hX3Jvd10sIEJLICsgOCk7CiAgICAgICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgRlJBR19OOyBqKyspIHsKICAgICAgICAgICAgICAgIEZyYWdCIGZyYWdfYjsKICAgICAgICAgICAgICAgIGludCBzX2Jfcm93ID0gayAqIFdNTUFfSzsKICAgICAgICAgICAgICAgIGludCBzX2JfY29sID0gKGNvbXBfY19mcmFnX24gKiBGUkFHX04gKyBqKSAqIFdNTUFfTjsKICAgICAgICAgICAgICAgIHdtbWE6OmxvYWRfbWF0cml4X3N5bmMoZnJhZ19iLCAmc19iW3NfYl9jb2xdW3NfYl9yb3ddLCBCSyArIDgpOwogICAgICAgICAgICAgICAgd21tYTo6bW1hX3N5bmMoZnJhZ19jW2ldW2pdLCBmcmFnX2EsIGZyYWdfYiwgZnJhZ19jW2ldW2pdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICNwcmFnbWEgdW5yb2xsCiAgICBmb3IgKGludCBpID0gMDsgaSA8IEZSQUdfTTsgaSsrKSB7CiAgICAgICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEZSQUdfTjsgaisrKSB7CiAgICAgICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgRnJhZ0M6Om51bV9lbGVtZW50czsgKytrKSB7CiAgICAgICAgICAgICAgICAjaWZkZWYgVEVTVF9PTl9SRE5BNCAKICAgICAgICAgICAgICAgIGludCBtID0gKCh0aHJlYWRJZHgueCAmIDE2KSA+PiAxKSB8IChrICYgNykgfCAoY29tcF9jX2ZyYWdfbSAqIEZSQUdfTSArIGkpICogV01NQV9NOwogICAgICAgICAgICAgICAgI2Vsc2UgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICNlbmRpZgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBhdXRvIGxhbmUgPSB0aHJlYWRJZHgueCAlIDY0OwogICAgICAgICAgICAgICAgaW50IG0sIG47CiAgICAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKFdNTUFfTSA9PSAzMikgewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIG0gPSAoOCAqIChrIC8gNCkgJSAzMikgKyA0ICogKGxhbmUgLyAzMikgKyAoayAlIDQpOwogICAgICAgICAgICAgICAgICAgIG4gPSBsYW5lICUgMzI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIG0gPSA0ICogKGxhbmUgLyAxNikgKyAoayAlIDQpOwogICAgICAgICAgICAgICAgICAgIG4gPSBsYW5lICUgMTY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBtICs9IChjb21wX2NfZnJhZ19tICogRlJBR19NICsgaSkgKiBXTU1BX007CiAgICAgICAgICAgICAgICBuICs9IChjb21wX2NfZnJhZ19uICogRlJBR19OICsgaikgKiBXTU1BX047CiAgICAgICAgICAgICAgICBuID0gbiAvIFFVQU5UX1NJWkU7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBzX3Nbbl1bbV07CiAgICAgICAgICAgICAgICBmcmFnX3JbaV1bal0ueFtrXSArPSAoYWNjX2RhdGFfdHlwZSlzY2FsZSAqIChhY2NfZGF0YV90eXBlKWZyYWdfY1tpXVtqXS54W2tdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cl9fZGV2aWNlX18gcm9jd21tYTo6YmZsb2F0MTZfdCBmYXN0X2YzMnRvYjE2KGZsb2F0IGYpIHsKICAgIHVuaW9uIHsKICAgIGZsb2F0IGZwMzI7CiAgICB1bnNpZ25lZCBpbnQgdTMyOwogICAgfSB1ID0ge2Z9OwogICAgdS51MzIgKz0gMHg3ZmZmICsgKCh1LnUzMiA+PiAxNikgJiAxKTsKICAgIGF1dG8gcmV0ID0gdS51MzIgPj4gMTY7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxyb2N3bW1hOjpiZmxvYXQxNl90Jj4ocmV0KTsKfQp0ZW1wbGF0ZSA8dHlwZW5hbWUgYWNjX2RhdGFfdHlwZSwgdHlwZW5hbWUgb3V0X2RhdGFfdHlwZSwgCnR5cGVuYW1lIEZyYWdDLCB0eXBlbmFtZSBGcmFnT3V0LCBpbnQgV01NQV9NLCBpbnQgV01NQV9OLCAKaW50IEJNLCBpbnQgQk4sIGludCBNLCBpbnQgTiwgaW50IEZSQUdfTSwgaW50IEZSQUdfTj4KX19kZXZpY2VfXyBpbmxpbmUgdm9pZCBzdG9yZV9yZXN1bHQoCiAgICBvdXRfZGF0YV90eXBlIGNbTV1bTl0sIAogICAgRnJhZ0MgZnJhZ19yW0ZSQUdfTV1bRlJBR19OXSwgCiAgICBjb25zdCBpbnQgbSwKICAgIGNvbnN0IGludCBuLAogICAgY29uc3QgaW50IGNvbXBfY19mcmFnX20sIAogICAgY29uc3QgaW50IGNvbXBfY19mcmFnX24KKSB7CiAgICAjcHJhZ21hIHVucm9sbAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGUkFHX007IGkrKykgewogICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBGUkFHX047IGorKykgewogICAgICAgICAgICBpbnQgZnJhZ19tID0gY29tcF9jX2ZyYWdfbSAqIEZSQUdfTSArIGk7CiAgICAgICAgICAgIGludCBmcmFnX24gPSBjb21wX2NfZnJhZ19uICogRlJBR19OICsgajsKICAgICAgICAgICAgaW50IHJvdyA9IG0gKyBmcmFnX20gKiBXTU1BX007CiAgICAgICAgICAgIGludCBjb2wgPSBuICsgZnJhZ19uICogV01NQV9OOwogICAgICAgICAgICBpZiAoKChNICUgQk0gPT0gMCkgfHwgKHJvdyA8IE0pKSAmJiAoKE4gJSBCTiA9PSAwKSB8fCAoY29sIDwgTikpKSB7CiAgICAgICAgICAgICAgICBvdXRfZGF0YV90eXBlICpjX3B0ciA9ICZjW3Jvd11bY29sXTsKICAgICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKGFjY19kYXRhX3R5cGUpID09IHNpemVvZihvdXRfZGF0YV90eXBlKSkgewogICAgICAgICAgICAgICAgICAgIHdtbWE6OnN0b3JlX21hdHJpeF9zeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8b3V0X2RhdGFfdHlwZSo+KGNfcHRyKSwgZnJhZ19yW2ldW2pdLCBOLCB3bW1hOjptZW1fcm93X21ham9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihvdXRfZGF0YV90eXBlKSA9PSBzaXplb2YoaGFsZikpIHsKICAgICAgICAgICAgICAgICAgICBGcmFnT3V0IGZyYWdfb3V0OwogICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGhhbGYpID09IHNpemVvZihvdXRfZGF0YV90eXBlKSk7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChGcmFnT3V0OjpudW1fZWxlbWVudHMgPT0gRnJhZ0M6Om51bV9lbGVtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaz0wO2s8RnJhZ091dDo6bnVtX2VsZW1lbnRzOysraykgewogICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHJlZyA9IGZhc3RfZjMydG9iMTYoZnJhZ19yW2ldW2pdLnhba10pOwogICAgICAgICAgICAgICAgICAgICAgICBmcmFnX291dC54W2tdID0gKnJlaW50ZXJwcmV0X2Nhc3Q8aGFsZio+KCZyZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB3bW1hOjpzdG9yZV9tYXRyaXhfc3luYyhyZWludGVycHJldF9jYXN0PGhhbGYqPihjX3B0ciksIGZyYWdfb3V0LCBOLCB3bW1hOjptZW1fcm93X21ham9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KdGVtcGxhdGU8aW50IFNwbGl0az4KX19nbG9iYWxfXyB2b2lkIHJlZHVjZSh1aW50MzJfdCBtLCB1aW50MzJfdCBuLCBjb25zdCBmbG9hdCAqY19zcGxpdGssIF9faGlwX2JmbG9hdDE2ICpjKSB7CiAgICBhdXRvIHRpZCA9IGJsb2NrSWR4LnggKiBibG9ja0RpbS54ICsgdGhyZWFkSWR4Lng7CiAgICBpZiAodGlkID49IG0gKiBuKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZmxvYXQ0IHN1bXt9OwogICAgI3ByYWdtYSB1bnJvbGwKICAgIGZvciAoYXV0byBpID0gMDsgaSA8IFNwbGl0azsgKytpKSB7CiAgICAgICAgc3VtICs9ICooZmxvYXQ0KikmY19zcGxpdGtbaSAqIChtICogbikgKyB0aWQgKiA0XTsKICAgIH0KICAgIGF1dG8gcmVzID0gcm9jd21tYTo6bWFrZV92ZWN0b3IoZmFzdF9mMzJ0b2IxNihzdW0ueCksIGZhc3RfZjMydG9iMTYoc3VtLnkpLCBmYXN0X2YzMnRvYjE2KHN1bS56KSwgZmFzdF9mMzJ0b2IxNihzdW0udykpOwogICAgKihkZWNsdHlwZShyZXMpKikmY1t0aWQgKiA0XSA9IHJlczsKfQogICAgCiNpZmRlZiBQQVJBTUVURVJJWkVfTElCUkFSWQp0ZW1wbGF0ZSA8CiAgICB0eXBlbmFtZSBpbl9kYXRhX3R5cGUsCiAgICB0eXBlbmFtZSBhY2NfZGF0YV90eXBlLCAKICAgIHR5cGVuYW1lIG91dF9kYXRhX3R5cGUsIAogICAgaW50IE0sIGludCBOLCBpbnQgSywgICAgCiAgICBpbnQgQk0sIGludCBCTiwgaW50IEJLLCAKICAgIGludCBRVUFOVF9TSVpFLCAgICAgICAgIAogICAgaW50IEJMT0NLX1NJWkUsICAgICAgICAgCiAgICBpbnQgV0FSUF9NLCBpbnQgV0FSUF9OLCAKICAgIGludCBMREEsIGludCBMREIKPgojZWxzZQp1c2luZyBpbl9kYXRhX3R5cGUgPSBfX0ZQOF9UWVBFOwp1c2luZyBvdXRfZGF0YV90eXBlID0gX19CRjE2X1RZUEU7CnVzaW5nIGFjY19kYXRhX3R5cGUgPSBmbG9hdDsKY29uc3RleHByIGludCBNID0gNjE0NCwgTiA9IDQ2MDgsIEsgPSA3MTY4Owpjb25zdGV4cHIgaW50IExEQSA9IEssIExEQiA9IEs7CmNvbnN0ZXhwciBpbnQgQk0gPSAyNTYsIEJOID0gMTI4LCBCSyA9IDEyODsKY29uc3RleHByIGludCBRVUFOVF9TSVpFID0gMTI4LCBCTE9DS19TSVpFID0gNTEyOwojaWZkZWYgVEVTVF9PTl9SRE5BNCAKY29uc3RleHByIGludCBXQVJQX00gPSA0LCBXQVJQX04gPSAyOwojZWxzZSAKY29uc3RleHByIGludCBXQVJQX00gPSA0LCBXQVJQX04gPSAyOwojZW5kaWYKI2VuZGlmIApfX2dsb2JhbF9fIF9fbGF1bmNoX2JvdW5kc19fKEJMT0NLX1NJWkUpIHZvaWQgZ2VtbV9rZXJuZWwoCiAgICBjb25zdCBpbl9kYXRhX3R5cGUgYVtNXVtMREFdLAogICAgY29uc3QgaW5fZGF0YV90eXBlIGJbTl1bTERCXSwKICAgIG91dF9kYXRhX3R5cGUgY1tNXVtOXSwKICAgIGNvbnN0IGZsb2F0IHNhW2NlaWxfZGl2KEssIFFVQU5UX1NJWkUpXVtNIC8gMSAgICAgICAgXSwgCiAgICBjb25zdCBmbG9hdCBzYltjZWlsX2RpdihLLCBRVUFOVF9TSVpFKV1bY2VpbF9kaXYoTiwgUVVBTlRfU0laRSldCikgewogICAgCiAgICBjb25zdGV4cHIgaW50IFdNTUFfTSA9IDE2OyAKICAgIGNvbnN0ZXhwciBpbnQgV01NQV9OID0gMTY7IAogICAgY29uc3RleHByIGludCBXTU1BX0sgPSAzMjsgCiAgICAKICAgIAogICAgCiAgICAKICAgIGNvbnN0ZXhwciBpbnQgV0FSUF9OVU0gPSBXQVJQX00gKiBXQVJQX047IAogICAgCiAgICAKICAgIGNvbnN0ZXhwciBpbnQgRlJBR19NX1BFUl9XQVJQID0gQk0gLyBXTU1BX00gLyBXQVJQX007CiAgICBjb25zdGV4cHIgaW50IEZSQUdfTl9QRVJfV0FSUCA9IEJOIC8gV01NQV9OIC8gV0FSUF9OOwogICAgY29uc3RleHByIGludCBGUkFHX0sgPSBCSyAvIFdNTUFfSzsgCiAgICAKICAgIGNvbnN0ZXhwciBpbnQgUU0gPSBNOyAKICAgIGNvbnN0ZXhwciBpbnQgUU4gPSBjZWlsX2RpdihOLCBRVUFOVF9TSVpFKTsgCiAgICBjb25zdGV4cHIgaW50IFFLID0gY2VpbF9kaXYoSywgUVVBTlRfU0laRSk7IAogICAgY29uc3RleHByIGludCBQTSA9IEJNOyAKICAgIGNvbnN0ZXhwciBpbnQgUE4gPSBjZWlsX2RpdihCTiwgUVVBTlRfU0laRSk7IAogICAgCiAgICB1c2luZyBGcmFnQSA9IHdtbWE6OmZyYWdtZW50PHdtbWE6Om1hdHJpeF9hLCBXTU1BX00sIFdNTUFfTiwgV01NQV9LLCBpbl9kYXRhX3R5cGUsIHdtbWE6OnJvd19tYWpvcj47CiAgICB1c2luZyBGcmFnQiA9IHdtbWE6OmZyYWdtZW50PHdtbWE6Om1hdHJpeF9iLCBXTU1BX00sIFdNTUFfTiwgV01NQV9LLCBpbl9kYXRhX3R5cGUsIHdtbWE6OmNvbF9tYWpvcj47CiAgICB1c2luZyBGcmFnQyA9IHdtbWE6OmZyYWdtZW50PHdtbWE6OmFjY3VtdWxhdG9yLCBXTU1BX00sIFdNTUFfTiwgV01NQV9LLCBhY2NfZGF0YV90eXBlPjsKICAgIHVzaW5nIEZyYWdPdXQgPSB3bW1hOjpmcmFnbWVudDx3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgaGFsZj47IAogICAgX19zaGFyZWRfXyBpbl9kYXRhX3R5cGUgIHNfYVtCTV1bQksgKyA4XTsKICAgIF9fc2hhcmVkX18gaW5fZGF0YV90eXBlICBzX2JbQk5dW0JLICsgOF07CiAgICBfX3NoYXJlZF9fIGFjY19kYXRhX3R5cGUgc19zW1BOXVtQTV07IAogICAgRnJhZ0MgZnJhZ19yW0ZSQUdfTV9QRVJfV0FSUF1bRlJBR19OX1BFUl9XQVJQXTsgCiAgICAKICAgIGEgPSAoZGVjbHR5cGUoYSkpKChpbl9kYXRhX3R5cGUqKWEgKyBibG9ja0lkeC56ICogSyk7CiAgICBiID0gKGRlY2x0eXBlKGIpKSgoaW5fZGF0YV90eXBlKiliICsgYmxvY2tJZHgueiAqIEspOwogICAgYyArPSBibG9ja0lkeC56ICogTTsKICAgIHNhICs9IGJsb2NrSWR4LnogKiBRSzsKICAgIHNiICs9IGJsb2NrSWR4LnogKiBRSzsKICAgIGludCB0aWQgPSB0aHJlYWRJZHgueDsgCiAgICBpbnQgd2lkID0gdGlkIC8gV0FWRV9TSVpFOyAKICAgIAogICAgY29uc3RleHByIGludCBpdGVyYXRpb25fb3Zlcl9rID0gY2VpbF9kaXYoSywgQkspOyAKICAgIGNvbnN0ZXhwciBpbnQgTE9BRF9CQVRDSF9TSVpFID0gMTY7IAogICAgY29uc3RleHByIGF1dG8gUElQRUxJTkUgPSB0cnVlOwogICAgCiAgICB1c2luZyBMb2FkVmVjID0gX19hdHRyaWJ1dGVfXyggKF9fdmVjdG9yX3NpemVfXyhMT0FEX0JBVENIX1NJWkUpICkpIGZsb2F0OwogICAgTG9hZFZlYyByZWdfYVtCSyAqIEJNIC8gQkxPQ0tfU0laRSAvIExPQURfQkFUQ0hfU0laRV07CiAgICBMb2FkVmVjIHJlZ19iW0JLICogQk4gLyBCTE9DS19TSVpFIC8gTE9BRF9CQVRDSF9TSVpFXTsKICAgIGNvbnN0ZXhwciBhdXRvIFBLID0gY2VpbF9kaXYoQkssIFFVQU5UX1NJWkUpOwogICAgZmxvYXQgcmVnX3NhW2NlaWxfZGl2KFBNLCBCTE9DS19TSVpFKV07CiAgICBmbG9hdCByZWdfc2JbY2VpbF9kaXYoUE4sIEJMT0NLX1NJWkUpXTsKICAgIAogICAgYXV0byBsb2dfdGlsZSA9IDE7CiAgICBhdXRvIGJsb2NrX2lkeF94ID0gYmxvY2tJZHgueCA+PiBsb2dfdGlsZTsKICAgIGF1dG8gYmxvY2tfaWR4X3kgPSAoYmxvY2tJZHgueSA8PCBsb2dfdGlsZSkgKyAoKGJsb2NrSWR4LngpICYgKCgxIDw8IChsb2dfdGlsZSkpIC0gMSkpOwogICAgaWYgKGJsb2NrX2lkeF94ID49IGNlaWxfZGl2KE4sIEJOKSB8fCBibG9ja19pZHhfeSA+PSBjZWlsX2RpdihNLCBCTSkpIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBpbnQgbSA9IGJsb2NrX2lkeF95ICogQk07CiAgICBjb25zdCBpbnQgbiA9IGJsb2NrX2lkeF94ICogQk47CiAgICBpbnQgayA9IDA7CiAgICBhdXRvIGdsb2JhbDJyZWcgPSBbJl0oKSB7CiAgICAgICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICBmb3IgKGludCByZWcgPSAwOyByZWcgPCBzaXplb2YocmVnX3NhKSAvIHNpemVvZihmbG9hdCk7IHJlZysrKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgaW50IHQgPSB0aWQgKyByZWcgKiBCTE9DS19TSVpFOwogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgaW50IGkgPSB0IC8gUE07CiAgICAgICAgICAgIGludCBqID0gdCAlIFBNOwogICAgICAgICAgICByZWdfc2FbcmVnXSA9IHNhW2sgLyBRVUFOVF9TSVpFXVsobSArIGopXTsKICAgICAgICB9CiAgICAgICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICBmb3IgKGludCByZWcgPSAwOyByZWcgPCBzaXplb2YocmVnX3NiKSAvIHNpemVvZihmbG9hdCk7IHJlZysrKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgaW50IHQgPSB0aWQgKyByZWcgKiBCTE9DS19TSVpFOwogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgaW50IGkgPSB0IC8gUE47CiAgICAgICAgICAgIGludCBqID0gdCAlIFBOOwogICAgICAgICAgICByZWdfc2JbcmVnXSA9IHNiW2sgLyBRVUFOVF9TSVpFXVsobikgLyBRVUFOVF9TSVpFICsgal07CiAgICAgICAgfQogICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgZm9yIChpbnQgcmVnID0gMDsgcmVnIDwgc2l6ZW9mKHJlZ19hKSAvIHNpemVvZihMb2FkVmVjKTsgcmVnKyspIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICBpbnQgdCA9IHRpZCAqIExPQURfQkFUQ0hfU0laRSArIHJlZyAqIEJMT0NLX1NJWkUgKiBMT0FEX0JBVENIX1NJWkU7CiAgICAgICAgICAgIGludCBpID0gdCAvIEJLOwogICAgICAgICAgICBpbnQgaiA9IHQgJSBCSzsKICAgICAgICAgICAgcmVnX2FbcmVnXSA9ICooTG9hZFZlYyopJmFbbSArIGldW2sgKyBqXTsKICAgICAgICB9CiAgICAgICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICBmb3IgKGludCByZWcgPSAwOyByZWcgPCBzaXplb2YocmVnX2IpIC8gc2l6ZW9mKExvYWRWZWMpOyByZWcrKykgewogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGludCB0ID0gdGlkICogTE9BRF9CQVRDSF9TSVpFICsgcmVnICogQkxPQ0tfU0laRSAqIExPQURfQkFUQ0hfU0laRTsKICAgICAgICAgICAgaW50IGkgPSB0IC8gQks7CiAgICAgICAgICAgIGludCBqID0gdCAlIEJLOwogICAgICAgICAgICByZWdfYltyZWddID0gKihMb2FkVmVjKikmYltuICsgaV1bayArIGpdOwogICAgICAgIH0KICAgIH07CiAgICBhdXRvIHJlZzJsZHMgPSBbJl0oKSB7CiAgICAgICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICBmb3IgKGludCByZWdhID0gMDsgcmVnYSA8IHNpemVvZihyZWdfc2EpIC8gc2l6ZW9mKGZsb2F0KTsgcmVnYSsrKSB7CiAgICAgICAgICAgIGludCB0YSA9IHRpZCArIHJlZ2EgKiBCTE9DS19TSVpFOwogICAgICAgICAgICBpbnQgaiA9IHRhICUgUE07CiAgICAgICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IHJlZ2IgPSAwOyByZWdiIDwgc2l6ZW9mKHJlZ19zYikgLyBzaXplb2YoZmxvYXQpOyByZWdiKyspIHsKICAgICAgICAgICAgICAgIGludCB0YiA9IHRpZCArIHJlZ2IgKiBCTE9DS19TSVpFOwogICAgICAgICAgICAgICAgaW50IGkgPSB0YiAlIFBOOwogICAgICAgICAgICAgICAgc19zW2ldW2pdID0gcmVnX3NhW3JlZ2FdICogcmVnX3NiW3JlZ2JdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgZm9yIChpbnQgcmVnID0gMDsgcmVnIDwgc2l6ZW9mKHJlZ19hKSAvIHNpemVvZihMb2FkVmVjKTsgcmVnKyspIHsKICAgICAgICAgICAgaW50IHQgPSB0aWQgKiBMT0FEX0JBVENIX1NJWkUgKyByZWcgKiBCTE9DS19TSVpFICogTE9BRF9CQVRDSF9TSVpFOwogICAgICAgICAgICBpbnQgaSA9IHQgLyBCSzsKICAgICAgICAgICAgaW50IGogPSB0ICUgQks7CiAgICAgICAgICAgICooTG9hZFZlYyopJnNfYVtpXVtqXSA9IHJlZ19hW3JlZ107CiAgICAgICAgfQogICAgICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgZm9yIChpbnQgcmVnID0gMDsgcmVnIDwgc2l6ZW9mKHJlZ19iKSAvIHNpemVvZihMb2FkVmVjKTsgcmVnKyspIHsKICAgICAgICAgICAgaW50IHQgPSB0aWQgKiBMT0FEX0JBVENIX1NJWkUgKyByZWcgKiBCTE9DS19TSVpFICogTE9BRF9CQVRDSF9TSVpFOwogICAgICAgICAgICBpbnQgaSA9IHQgLyBCSzsKICAgICAgICAgICAgaW50IGogPSB0ICUgQks7CiAgICAgICAgICAgICooTG9hZFZlYyopJnNfYltpXVtqXSA9IHJlZ19iW3JlZ107CiAgICAgICAgfQogICAgfTsKICAgIGlmIGNvbnN0ZXhwciAoUElQRUxJTkUpIHsKICAgICAgICBnbG9iYWwycmVnKCk7CiAgICB9CiAgICAKICAgICNwcmFnbWEgdW5yb2xsCiAgICBmb3IgKGludCBpID0gMDsgaSA8IEZSQUdfTV9QRVJfV0FSUDsgaSsrKSB7CiAgICAgICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEZSQUdfTl9QRVJfV0FSUDsgaisrKSB7CiAgICAgICAgICAgIHdtbWE6OmZpbGxfZnJhZ21lbnQoZnJhZ19yW2ldW2pdLCAwLjBmKTsgCiAgICAgICAgfQogICAgfQogICAgaWYgY29uc3RleHByICghUElQRUxJTkUpIHsKICAgICAgICBnbG9iYWwycmVnKCk7CiAgICB9CiAgICByZWcybGRzKCk7CiAgICBmb3IgKGludCBiayA9IDE7IGJrIDwgaXRlcmF0aW9uX292ZXJfazsgYmsrKykgewogICAgICAgIGsgPSBiayAqIEJLOwogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIGlmIGNvbnN0ZXhwciAoUElQRUxJTkUpIHsKICAgICAgICAgICAgZ2xvYmFsMnJlZygpOwogICAgICAgIH0KICAgICAgICBfX3N5bmN0aHJlYWRzKCk7CiAgICAgICAgCiAgICAgICAgd21tYV9jb21wdXRlPGluX2RhdGFfdHlwZSwgYWNjX2RhdGFfdHlwZSwgRnJhZ0MsIEZyYWdBLCBGcmFnQiwKICAgICAgICAgICAgUE0sIFBOLCBCTSwgQk4sIEJLLCBGUkFHX01fUEVSX1dBUlAsIEZSQUdfTl9QRVJfV0FSUCwgRlJBR19LLAogICAgICAgICAgICBXTU1BX00sIFdNTUFfTiwgV01NQV9LLAogICAgICAgICAgICBXQVJQX00sIFdBUlBfTiwKICAgICAgICAgICAgQkxPQ0tfU0laRSwgTE9BRF9CQVRDSF9TSVpFLCBRVUFOVF9TSVpFPiggCiAgICAgICAgICAgICAgICBzX2EsIHNfYiwgc19zLCBmcmFnX3IsIHdpZCAvIFdBUlBfTiwgd2lkICUgV0FSUF9OKTsKICAgICAgICBfX3N5bmN0aHJlYWRzKCk7CiAgICAgICAgaWYgY29uc3RleHByICghUElQRUxJTkUpIHsKICAgICAgICAgICAgZ2xvYmFsMnJlZygpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZWcybGRzKCk7CiAgICB9CiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgICB3bW1hX2NvbXB1dGU8aW5fZGF0YV90eXBlLCBhY2NfZGF0YV90eXBlLCBGcmFnQywgRnJhZ0EsIEZyYWdCLAogICAgICAgIFBNLCBQTiwgQk0sIEJOLCBCSywgRlJBR19NX1BFUl9XQVJQLCBGUkFHX05fUEVSX1dBUlAsIEZSQUdfSywKICAgICAgICBXTU1BX00sIFdNTUFfTiwgV01NQV9LLAogICAgICAgIFdBUlBfTSwgV0FSUF9OLAogICAgICAgIEJMT0NLX1NJWkUsIExPQURfQkFUQ0hfU0laRSwgUVVBTlRfU0laRT4oIAogICAgICAgICAgICBzX2EsIHNfYiwgc19zLCBmcmFnX3IsIHdpZCAvIFdBUlBfTiwgd2lkICUgV0FSUF9OKTsKICAgIAogICAgc3RvcmVfcmVzdWx0PGFjY19kYXRhX3R5cGUsIG91dF9kYXRhX3R5cGUsIEZyYWdDLCBGcmFnT3V0LAogICAgICAgIFdNTUFfTSwgV01NQV9OLCBCTSwgQk4sIE0sIE4sIEZSQUdfTV9QRVJfV0FSUCwgRlJBR19OX1BFUl9XQVJQPigKICAgICAgICAgICAgYywgZnJhZ19yLCBibG9ja19pZHhfeSAqIEJNLCBibG9ja19pZHhfeCAqIEJOLAogICAgICAgICAgICB3aWQgLyBXQVJQX04sIHdpZCAlIFdBUlBfTik7Cn07Cn07IAojaWZuZGVmICBQQVJBTUVURVJJWkVfTElCUkFSWQoKI2VuZGlmCiNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKI2VuZGlmCiNkZWZpbmUgUEFSQU1FVEVSSVpFX0xJQlJBUlkKI3VuZGVmIFBBUkFNRVRFUklaRV9MSUJSQVJZCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmZsb2F0ICpjX3NwbGl0a3tudWxscHRyfTsKc2l6ZV90IGNfc3BsaXRrX3NpemV7MH07Cl9fRlA4X1RZUEUgKmFfdHJhbnN7bnVsbHB0cn07CnNpemVfdCBhX3RyYW5zX3NpemV7MH07Cl9fRlA4X1RZUEUgKmJfdHJhbnN7bnVsbHB0cn07CnNpemVfdCBiX3RyYW5zX3NpemV7MH07CnRlbXBsYXRlIDxpbnQgTSwgaW50IE4sIGludCBLLCBpbnQgQk0sIGludCBCTiwgaW50IEJLLCBpbnQgV0FSUF9NLCBpbnQgV0FSUF9OLCBpbnQgQkxPQ0tfU0laRSwgaW50IFFVQU5UX0JMT0NLX1NJWkUsIGludCBTUExJVEtfRkFDVE9SPgp2b2lkIGxhdW5jaF9nZW1tKGNvbnN0IF9fRlA4X1RZUEUgKmEsIGNvbnN0IF9fRlA4X1RZUEUgKmIsIF9fQkYxNl9UWVBFICpjLCBjb25zdCBmbG9hdCAqYXMsIGNvbnN0IGZsb2F0ICpicykgewogICAgaWYoYV90cmFuc19zaXplIDwgTSAqIEsgKiBzaXplb2YoX19GUDhfVFlQRSkpIHsKICAgICAgICBhX3RyYW5zX3NpemUgPSBzdGQ6Om1heCg2MTQ0KjcxNjgsIE0gKiBLKSAqIHNpemVvZihfX0ZQOF9UWVBFKTsKICAgICAgICAKICAgICAgICBpZiAoYV90cmFucykgewogICAgICAgICAgICBMSUJfQ0FMTChIT1NUX1RZUEUoRnJlZUFzeW5jKShhX3RyYW5zLCAwKSk7CiAgICAgICAgfQogICAgICAgIExJQl9DQUxMKEhPU1RfVFlQRShNYWxsb2NBc3luYykoJmFfdHJhbnMsIGFfdHJhbnNfc2l6ZSwgMCkpOwogICAgfQogICAgaWYoYl90cmFuc19zaXplIDwgTiAqIEsgKiBzaXplb2YoX19GUDhfVFlQRSkpIHsKICAgICAgICBiX3RyYW5zX3NpemUgPSBzdGQ6Om1heCg3MTY4KjQ2MDgsIE4gKiBLKSAqIHNpemVvZihfX0ZQOF9UWVBFKTsKICAgICAgICAKICAgICAgICBpZiAoYl90cmFucykgewogICAgICAgICAgICBMSUJfQ0FMTChIT1NUX1RZUEUoRnJlZUFzeW5jKShiX3RyYW5zLCAwKSk7CiAgICAgICAgfQogICAgICAgIExJQl9DQUxMKEhPU1RfVFlQRShNYWxsb2NBc3luYykoJmJfdHJhbnMsIGJfdHJhbnNfc2l6ZSwgMCkpOwogICAgfQogICAgZ2VtbV9rZXJuZWw6OmxhdW5jaF90cmFuc3Bvc2U8X19GUDhfVFlQRSwgSywgTSwgNjQsIDUxMiwgND4oYV90cmFucywgYSk7CiAgICBnZW1tX2tlcm5lbDo6bGF1bmNoX3RyYW5zcG9zZTxfX0ZQOF9UWVBFLCBLLCBOLCA2NCwgNTEyLCA0PihiX3RyYW5zLCBiKTsKICAgIAogICAgCiAgICBkaW0zIGdyaWQoY2VpbF9kaXYoTiwgQk4pIDw8IDEsIGNlaWxfZGl2KE0sIEJNKSA+PiAxLCBTUExJVEtfRkFDVE9SKTsKICAgIGRpbTMgYmxvY2soQkxPQ0tfU0laRSk7CiAgICBpZiBjb25zdGV4cHIgKFNQTElUS19GQUNUT1IgPT0gMSkgewogICAgICAgIGdlbW1fa2VybmVsOjpnZW1tX2tlcm5lbDxfX0ZQOF9UWVBFLCBmbG9hdCwgX19CRjE2X1RZUEUsIE0sIE4sIEssIEJNLCBCTiwgQkssIFFVQU5UX0JMT0NLX1NJWkUsIEJMT0NLX1NJWkUsIFdBUlBfTSwgV0FSUF9OLCBLLCBLPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8PGdyaWQsIGJsb2NrPj4+KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX0ZQOF9UWVBFICgqKVtLXT4oYV90cmFucyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IF9fRlA4X1RZUEUgKCopW0tdPihiX3RyYW5zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8X19CRjE2X1RZUEUgKCopW05dPihjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQgKCopW01dPihhcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0ICgqKVtjZWlsX2RpdihOLCBRVUFOVF9CTE9DS19TSVpFKV0+KGJzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB9IGVsc2UgewogICAgICAgIGlmKGNfc3BsaXRrX3NpemUgPCBTUExJVEtfRkFDVE9SICogTSAqIE4gKiBzaXplb2YoZmxvYXQpKSB7CiAgICAgICAgICAgIGNfc3BsaXRrX3NpemUgPSBzdGQ6Om1heCgxMDI0KjQ2MDgqMiwgU1BMSVRLX0ZBQ1RPUiAqIE0gKiBOKSAqIHNpemVvZihmbG9hdCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoY19zcGxpdGspIHsKICAgICAgICAgICAgICAgIExJQl9DQUxMKEhPU1RfVFlQRShGcmVlQXN5bmMpKGNfc3BsaXRrLCAwKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgTElCX0NBTEwoSE9TVF9UWVBFKE1hbGxvY0FzeW5jKSgmY19zcGxpdGssIGNfc3BsaXRrX3NpemUsIDApKTsKICAgICAgICB9CiAgICAgICAgZ2VtbV9rZXJuZWw6OmdlbW1fa2VybmVsPF9fRlA4X1RZUEUsIGZsb2F0LCBmbG9hdCwgTSwgTiwgSyAvIFNQTElUS19GQUNUT1IsIEJNLCBCTiwgQkssIFFVQU5UX0JMT0NLX1NJWkUsIEJMT0NLX1NJWkUsIFdBUlBfTSwgV0FSUF9OLCBLLCBLPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8PGdyaWQsIGJsb2NrPj4+KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX0ZQOF9UWVBFICgqKVtLXT4oYV90cmFucyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IF9fRlA4X1RZUEUgKCopW0tdPihiX3RyYW5zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQgKCopW05dPihjX3NwbGl0ayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0ICgqKVtNXT4oYXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCAoKilbY2VpbF9kaXYoTiwgUVVBTlRfQkxPQ0tfU0laRSldPihicykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIGNvbnN0ZXhwciB1aW50MzJfdCBSRURVQ0VfQkxPQ0sgPSAyNTY7CiAgICAgICAgZ2VtbV9rZXJuZWw6OnJlZHVjZTxTUExJVEtfRkFDVE9SPjw8PGNlaWxfZGl2KE0gKiBOIC8gNCwgUkVEVUNFX0JMT0NLKSwgUkVEVUNFX0JMT0NLPj4+KE0sIE4sIGNfc3BsaXRrLCAoX19CRjE2X1RZUEUgKiljKTsKICAgIH0KfQpjb25zdGV4cHIgaW5saW5lIHVpbnQzMl90IHBhY2tfc2hhcGUoaW50IG0sIGludCBuLCBpbnQgaykgewogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIHJldHVybiAoKG0gLyAzMikgPDwgMTYpIHwgKChuIC8gMzIpIDw8IDgpIHwgKGsgLyAzMik7Cn0KI2RlZmluZSBESVNQQVRDSF9HRU1NKE0sIE4sIEssIEJNLCBCTiwgQkssIFdBUlBfTSwgV0FSUF9OLCBCTE9DS19TSVpFLCBTUExJVEtfRkFDVE9SKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHBhY2tfc2hhcGVfY2hlY2tlZDxNLCBOLCBLPigpOiB7ICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaF9nZW1tPE0sIE4sIEssIEJNLCBCTiwgQkssIFdBUlBfTSwgV0FSUF9OLCBCTE9DS19TSVpFLCAxMjgsIFNQTElUS19GQUNUT1I+KGFfcHRyLCBiX3B0ciwgY19wdHIsIGFzX3B0ciwgYnNfcHRyKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KdGVtcGxhdGUgPGludCBNLCBpbnQgTiwgaW50IEs+CmNvbnN0ZXhwciBpbmxpbmUgdWludDMyX3QgcGFja19zaGFwZV9jaGVja2VkKCkgewogICAgcmV0dXJuIHBhY2tfc2hhcGUoTSwgTiwgSyk7Cn0KY2xhc3MgS2VybmVsVGltZXIgewpwcml2YXRlOgogICAgaW50IG0sIG4sIGs7CiAgICBIT1NUX1RZUEUoRXZlbnRfdCkgc3RhcnQsIHN0b3A7CiAgICBmbG9hdCAqdGltZV9wdHI7CiAgICBmbG9hdCAqZ2Zsb3BzX3B0cjsKcHVibGljOgogICAgS2VybmVsVGltZXIoaW50IG0sIGludCBuLCBpbnQgaywgZmxvYXQgKnRpbWUsIGZsb2F0ICpnZmxvcHMpIDogbShtKSwgbihuKSwgayhrKSwgdGltZV9wdHIodGltZSksIGdmbG9wc19wdHIoZ2Zsb3BzKSB7CiAgICAgICAgTElCX0NBTEwoSE9TVF9UWVBFKEV2ZW50Q3JlYXRlKSgmc3RhcnQpKTsKICAgICAgICBMSUJfQ0FMTChIT1NUX1RZUEUoRXZlbnRDcmVhdGUpKCZzdG9wKSk7CiAgICAgICAgTElCX0NBTEwoSE9TVF9UWVBFKEV2ZW50UmVjb3JkKShzdGFydCkpOwogICAgfQogICAgdm9pZCBzdGFydF90aW1lcigpIHsgTElCX0NBTEwoSE9TVF9UWVBFKEV2ZW50UmVjb3JkKShzdGFydCkpOyB9CiAgICB2b2lkIHN0b3BfdGltZXIoKSB7CiAgICAgICAgTElCX0NBTEwoSE9TVF9UWVBFKEV2ZW50UmVjb3JkKShzdG9wKSk7CiAgICAgICAgTElCX0NBTEwoSE9TVF9UWVBFKEV2ZW50U3luY2hyb25pemUpKHN0b3ApKTsKICAgICAgICBmbG9hdCBlbGFwc2VkX3RpbWU7CiAgICAgICAgTElCX0NBTEwoSE9TVF9UWVBFKEV2ZW50RWxhcHNlZFRpbWUpKCZlbGFwc2VkX3RpbWUsIHN0YXJ0LCBzdG9wKSk7CiAgICAgICAgZG91YmxlIGZsb3BzID0gMi4wICogc3RhdGljX2Nhc3Q8ZG91YmxlPihtKSAqIHN0YXRpY19jYXN0PGRvdWJsZT4obikgKiBzdGF0aWNfY2FzdDxkb3VibGU+KGspOwogICAgICAgIGRvdWJsZSBnZmxvcHNfdmFsID0gKGZsb3BzIC8gKGVsYXBzZWRfdGltZSAqIDFlLTMpKSAvIDFlOTsKICAgICAgICAKICAgICAgICBpZiAodGltZV9wdHIgIT0gbnVsbHB0cikgewogICAgICAgICAgICAqdGltZV9wdHIgPSBlbGFwc2VkX3RpbWU7CiAgICAgICAgfQogICAgICAgIGlmIChnZmxvcHNfcHRyICE9IG51bGxwdHIpIHsKICAgICAgICAgICAgKmdmbG9wc19wdHIgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZ2Zsb3BzX3ZhbCk7CiAgICAgICAgfQogICAgfQogICAgfktlcm5lbFRpbWVyKCkgewogICAgICAgIExJQl9DQUxMKEhPU1RfVFlQRShFdmVudERlc3Ryb3kpKHN0YXJ0KSk7CiAgICAgICAgTElCX0NBTEwoSE9TVF9UWVBFKEV2ZW50RGVzdHJveSkoc3RvcCkpOwogICAgfQp9Owp2b2lkIHJ1bih2b2lkICphLCB2b2lkICpiLCB2b2lkICphcywgdm9pZCAqYnMsIHZvaWQgKmMsIGludCBtLCBpbnQgbiwgaW50IGssIGZsb2F0ICp0aW1lLCBmbG9hdCAqZ2Zsb3BzKSB7CiAgICAKICAgIAogICAgY29uc3QgX19GUDhfVFlQRSAqYV9wdHIgPSBzdGF0aWNfY2FzdDxjb25zdCBfX0ZQOF9UWVBFICo+KGEpOwogICAgY29uc3QgX19GUDhfVFlQRSAqYl9wdHIgPSBzdGF0aWNfY2FzdDxjb25zdCBfX0ZQOF9UWVBFICo+KGIpOwogICAgX19CRjE2X1RZUEUgKmNfcHRyID0gc3RhdGljX2Nhc3Q8X19CRjE2X1RZUEUgKj4oYyk7CiAgICBjb25zdCBmbG9hdCAqYXNfcHRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgZmxvYXQgKj4oYXMpOwogICAgY29uc3QgZmxvYXQgKmJzX3B0ciA9IHN0YXRpY19jYXN0PGNvbnN0IGZsb2F0ICo+KGJzKTsKICAgIHN3aXRjaChwYWNrX3NoYXBlKG0sIG4sIGspKSB7CiNpZmRlZiBURVNUX09OX1JETkE0IAogICAgICAgIAogICAgICAgIERJU1BBVENIX0dFTU0oNjQsICAgICA2NCwgICAgIDEyOCwgICAgNjQsICAgIDY0LCAgICAzMiwgICAxLCAgICAgIDQsICAgICAgMTI4LCAgICAgICAgICAxKTsKICAgICAgICBESVNQQVRDSF9HRU1NKDY0LCAgICAgMTUzNiwgICA3MTY4LCAgIDY0LCAgICAxMjgsICAgNjQsICAgNCwgICAgICAyLCAgICAgIDI1NiwgICAgICAgICAgMSk7CiAgICAgICAgRElTUEFUQ0hfR0VNTSg2NCwgICAgIDMwNzIsICAgMTUzNiwgICA2NCwgICAgMTI4LCAgIDY0LCAgIDQsICAgICAgMiwgICAgICAyNTYsICAgICAgICAgIDEpOwogICAgICAgIERJU1BBVENIX0dFTU0oNjQsICAgICA1NzYsICAgIDcxNjgsICAgNjQsICAgIDEyOCwgICA2NCwgICA0LCAgICAgIDIsICAgICAgMjU2LCAgICAgICAgICAxKTsKICAgICAgICBESVNQQVRDSF9HRU1NKDk2LCAgICAgNzE2OCwgICAyNTYsICAgIDk2LCAgICAyNTYsICAgNjQsICAgMiwgICAgICA0LCAgICAgIDI1NiwgICAgICAgICAgMSk7CiAgICAgICAgRElTUEFUQ0hfR0VNTSg5NiwgICAgIDcxNjgsICAgMjA0OCwgICA5NiwgICAgMjU2LCAgIDY0LCAgIDIsICAgICAgNCwgICAgICAyNTYsICAgICAgICAgIDEpOwogICAgICAgIERJU1BBVENIX0dFTU0oOTYsICAgICA0NjA4LCAgIDcxNjgsICAgOTYsICAgIDI1NiwgICA2NCwgICAyLCAgICAgIDQsICAgICAgMjU2LCAgICAgICAgICAxKTsKICAgICAgICBESVNQQVRDSF9HRU1NKDEyOCwgICAgNzE2OCwgICAyMzA0LCAgIDEyOCwgICAxMjgsICAgNjQsICAgNCwgICAgICAyLCAgICAgIDI1NiwgICAgICAgICAgMSk7CiAgICAgICAgRElTUEFUQ0hfR0VNTSgxMjgsICAgIDUxMiwgICAgNzE2OCwgICAxMjgsICAgMTI4LCAgIDY0LCAgIDQsICAgICAgMiwgICAgICAyNTYsICAgICAgICAgIDEpOwogICAgICAgIERJU1BBVENIX0dFTU0oNTEyLCAgICA0MDk2LCAgIDUxMiwgICAgMjU2LCAgIDEyOCwgICA2NCwgICA0LCAgICAgIDIsICAgICAgMjU2LCAgICAgICAgICAxKTsKICAgICAgICBESVNQQVRDSF9HRU1NKDUxMiwgICAgMTUzNiwgICA3MTY4LCAgIDI1NiwgICAxMjgsICAgNjQsICAgNCwgICAgICAyLCAgICAgIDI1NiwgICAgICAgICAgMSk7CiAgICAgICAgCiAgICAgICAgRElTUEFUQ0hfR0VNTSgxMDI0LCAgIDE1MzYsICAgNzE2OCwgICAgMTI4LCAgICAxMjgsICAgICA2NCwgICAgICAxLCAgICAgIDQsICAgIDEyOCwgICAgIDQpOyAKICAgICAgICBESVNQQVRDSF9HRU1NKDEwMjQsICAgMzA3MiwgICAxNTM2LCAgICAyNTYsICAgIDEyOCwgICAgIDMyLCAgICAgIDQsICAgICAgMiwgICAgMjU2LCAgICAgMSk7IAogICAgICAgIERJU1BBVENIX0dFTU0oMTAyNCwgICAgNTc2LCAgIDcxNjgsICAgIDEyOCwgICAgIDY0LCAgICAgMzIsICAgICAgNCwgICAgICAxLCAgICAxMjgsICAgICA0KTsgCiAgICAgICAgRElTUEFUQ0hfR0VNTSgxMDI0LCAgIDcxNjgsICAgIDI1NiwgICAgMjU2LCAgICAxMjgsICAgICAzMiwgICAgICA0LCAgICAgIDIsICAgIDI1NiwgICAgIDEpOyAKICAgICAgICBESVNQQVRDSF9HRU1NKDEwMjQsICAgNzE2OCwgICAyMDQ4LCAgICAyNTYsICAgIDEyOCwgICAgIDMyLCAgICAgIDQsICAgICAgMiwgICAgMjU2LCAgICAgMSk7IAogICAgICAgIERJU1BBVENIX0dFTU0oMTAyNCwgICA0NjA4LCAgIDcxNjgsICAgIDEyOCwgICAgMTI4LCAgICAgMzIsICAgICAgMiwgICAgICAyLCAgICAxMjgsICAgICAxKTsgCiAgICAgICAgRElTUEFUQ0hfR0VNTSgxMDI0LCAgIDcxNjgsICAgMjMwNCwgICAgMjU2LCAgICAxMjgsICAgICAzMiwgICAgICA0LCAgICAgIDIsICAgIDI1NiwgICAgIDEpOyAKICAgICAgICBESVNQQVRDSF9HRU1NKDEwMjQsICAgIDUxMiwgICA3MTY4LCAgICAgNjQsICAgIDEyOCwgICAgIDMyLCAgICAgIDIsICAgICAgMiwgICAgMTI4LCAgICAgNCk7IAogICAgICAgIERJU1BBVENIX0dFTU0oMTAyNCwgICA0MDk2LCAgICA1MTIsICAgIDEyOCwgICAgMjU2LCAgICAgMzIsICAgICAgMiwgICAgICA0LCAgICAyNTYsICAgICAxKTsgCiAgICAgICAgRElTUEFUQ0hfR0VNTSg2MTQ0LCAgIDE1MzYsICAgNzE2OCwgICAgMjU2LCAgICAxMjgsICAgICAzMiwgICAgICA0LCAgICAgIDIsICAgIDI1NiwgICAgIDEpOyAKICAgICAgICBESVNQQVRDSF9HRU1NKDYxNDQsICAgMzA3MiwgICAxNTM2LCAgICAyNTYsICAgIDEyOCwgICAgIDMyLCAgICAgIDQsICAgICAgMiwgICAgMjU2LCAgICAgMSk7IAogICAgICAgIERJU1BBVENIX0dFTU0oNjE0NCwgICAgNTc2LCAgIDcxNjgsICAgIDI1NiwgICAgMTI4LCAgICAgMzIsICAgICAgNCwgICAgICAyLCAgICAyNTYsICAgICAxKTsgCiAgICAgICAgRElTUEFUQ0hfR0VNTSg2MTQ0LCAgIDcxNjgsICAgIDI1NiwgICAgMjU2LCAgICAxMjgsICAgICAzMiwgICAgICA0LCAgICAgIDIsICAgIDI1NiwgICAgIDEpOyAKICAgICAgICBESVNQQVRDSF9HRU1NKDYxNDQsICAgNzE2OCwgICAyMDQ4LCAgICAyNTYsICAgIDEyOCwgICAgIDMyLCAgICAgIDQsICAgICAgMiwgICAgMjU2LCAgICAgMSk7IAogICAgICAgIERJU1BBVENIX0dFTU0oNjE0NCwgICA0NjA4LCAgIDcxNjgsICAgIDI1NiwgICAgMTI4LCAgICAgMzIsICAgICAgNCwgICAgICAyLCAgICAyNTYsICAgICAxKTsgCiAgICAgICAgRElTUEFUQ0hfR0VNTSg2MTQ0LCAgIDcxNjgsICAgMjMwNCwgICAgMjU2LCAgICAxMjgsICAgICAzMiwgICAgICA0LCAgICAgIDIsICAgIDI1NiwgICAgIDEpOyAKICAgICAgICBESVNQQVRDSF9HRU1NKDYxNDQsICAgIDUxMiwgICA3MTY4LCAgICAyNTYsICAgIDEyOCwgICAgIDMyLCAgICAgIDQsICAgICAgMiwgICAgMjU2LCAgICAgMSk7IAogICAgICAgIERJU1BBVENIX0dFTU0oNjE0NCwgICA0MDk2LCAgICA1MTIsICAgIDI1NiwgICAgMTI4LCAgICAgMzIsICAgICAgNCwgICAgICAyLCAgICAyNTYsICAgICAxKTsgCiNlbHNlIAogICAgICAgIAogICAgICAgIERJU1BBVENIX0dFTU0oMTAyNCwgICAxNTM2LCAgIDcxNjgsICAgMjU2LCAgIDEyOCwgICAxMjgsICAgNCwgICAgICAyLCAgICAgIDUxMiwgICAgICAgICAgNCk7CiAgICAgICAgRElTUEFUQ0hfR0VNTSgxMDI0LCAgIDMwNzIsICAgMTUzNiwgICAyNTYsICAgMTI4LCAgIDEyOCwgICA0LCAgICAgIDIsICAgICAgNTEyLCAgICAgICAgICAyKTsKICAgICAgICBESVNQQVRDSF9HRU1NKDEwMjQsICAgNTc2LCAgICA3MTY4LCAgIDI1NiwgICAxMjgsICAgMTI4LCAgIDQsICAgICAgMiwgICAgICA1MTIsICAgICAgICAgIDgpOwogICAgICAgIERJU1BBVENIX0dFTU0oMTAyNCwgICA3MTY4LCAgIDI1NiwgICAgMjU2LCAgIDEyOCwgICAxMjgsICAgNCwgICAgICAyLCAgICAgIDUxMiwgICAgICAgICAgMSk7CiAgICAgICAgRElTUEFUQ0hfR0VNTSgxMDI0LCAgIDcxNjgsICAgMjA0OCwgICAyNTYsICAgMTI4LCAgIDEyOCwgICA0LCAgICAgIDIsICAgICAgNTEyLCAgICAgICAgICAxKTsKICAgICAgICBESVNQQVRDSF9HRU1NKDEwMjQsICAgNDYwOCwgICA3MTY4LCAgIDI1NiwgICAxMjgsICAgMTI4LCAgIDQsICAgICAgMiwgICAgICA1MTIsICAgICAgICAgIDIpOwogICAgICAgIERJU1BBVENIX0dFTU0oMTAyNCwgICA3MTY4LCAgIDIzMDQsICAgMjU2LCAgIDEyOCwgICAxMjgsICAgNCwgICAgICAyLCAgICAgIDUxMiwgICAgICAgICAgMSk7CiAgICAgICAgRElTUEFUQ0hfR0VNTSgxMDI0LCAgIDUxMiwgICAgNzE2OCwgICAyNTYsICAgMTI4LCAgIDEyOCwgICA0LCAgICAgIDIsICAgICAgNTEyLCAgICAgICAgICA4KTsKICAgICAgICBESVNQQVRDSF9HRU1NKDEwMjQsICAgNDA5NiwgICA1MTIsICAgIDI1NiwgICAxMjgsICAgMTI4LCAgIDQsICAgICAgMiwgICAgICA1MTIsICAgICAgICAgIDEpOwogICAgICAgIERJU1BBVENIX0dFTU0oNjE0NCwgICAxNTM2LCAgIDcxNjgsICAgMjU2LCAgIDEyOCwgICAxMjgsICAgNCwgICAgICAyLCAgICAgIDUxMiwgICAgICAgICAgMSk7CiAgICAgICAgRElTUEFUQ0hfR0VNTSg2MTQ0LCAgIDMwNzIsICAgMTUzNiwgICAyNTYsICAgMTI4LCAgIDEyOCwgICA0LCAgICAgIDIsICAgICAgNTEyLCAgICAgICAgICAxKTsKICAgICAgICBESVNQQVRDSF9HRU1NKDYxNDQsICAgNTc2LCAgICA3MTY4LCAgIDI1NiwgICAxMjgsICAgMTI4LCAgIDQsICAgICAgMiwgICAgICA1MTIsICAgICAgICAgIDIpOwogICAgICAgIERJU1BBVENIX0dFTU0oNjE0NCwgICA3MTY4LCAgIDI1NiwgICAgMjU2LCAgIDEyOCwgICAxMjgsICAgNCwgICAgICAyLCAgICAgIDUxMiwgICAgICAgICAgMSk7CiAgICAgICAgRElTUEFUQ0hfR0VNTSg2MTQ0LCAgIDcxNjgsICAgMjA0OCwgICAyNTYsICAgMTI4LCAgIDEyOCwgICA0LCAgICAgIDIsICAgICAgNTEyLCAgICAgICAgICAxKTsKICAgICAgICBESVNQQVRDSF9HRU1NKDYxNDQsICAgNDYwOCwgICA3MTY4LCAgIDI1NiwgICAxMjgsICAgMTI4LCAgIDQsICAgICAgMiwgICAgICA1MTIsICAgICAgICAgIDEpOwogICAgICAgIERJU1BBVENIX0dFTU0oNjE0NCwgICA3MTY4LCAgIDIzMDQsICAgMjU2LCAgIDEyOCwgICAxMjgsICAgNCwgICAgICAyLCAgICAgIDUxMiwgICAgICAgICAgMSk7CiAgICAgICAgRElTUEFUQ0hfR0VNTSg2MTQ0LCAgIDUxMiwgICAgNzE2OCwgICAyNTYsICAgMTI4LCAgIDEyOCwgICA0LCAgICAgIDIsICAgICAgNTEyLCAgICAgICAgICAyKTsKICAgICAgICBESVNQQVRDSF9HRU1NKDYxNDQsICAgNDA5NiwgICA1MTIsICAgIDI1NiwgICAxMjgsICAgMTI4LCAgIDQsICAgICAgMiwgICAgICA1MTIsICAgICAgICAgIDEpOwojZW5kaWYKICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgIGFib3J0KCk7CiAgICAgICAgfQogICAgfQp9CnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpIHsKICAgIGludCBtID0gYS5zaXplKDApOwogICAgaW50IG4gPSBiLnNpemUoMCk7CiAgICBpbnQgayA9IGEuc2l6ZSgxKTsKICAgIHJ1bigoX19GUDhfVFlQRSopYS5kYXRhX3B0cigpLCAoX19GUDhfVFlQRSopYi5kYXRhX3B0cigpLCAKICAgIGFzLmRhdGFfcHRyPGZsb2F0PigpLCBicy5kYXRhX3B0cjxmbG9hdD4oKSwgKF9fQkYxNl9UWVBFKiljLmRhdGFfcHRyKCksIG0sIG4sIGssIG51bGxwdHIsIG51bGxwdHIpOwogICAgCn0KIiIiCmltcG9ydCBvcwpvcy5lbnZpcm9uWyJQWVRPUkNIX1JPQ01fQVJDSCJdID0gImdmeDk0MiIKb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyIKbW9kdWxlID0gbG9hZF9pbmxpbmUoCiAgICBuYW1lPSdmcDhfbW0nLAogICAgY3BwX3NvdXJjZXM9W0NQUF9XUkFQUEVSXSwKICAgIGN1ZGFfc291cmNlcz1bQ1VEQV9TUkNdLAogICAgZnVuY3Rpb25zPVsnZnA4X21tJ10sCiAgICB2ZXJib3NlPVRydWUsCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIl0sCiAgICBleHRyYV9jZmxhZ3M9WyItT2Zhc3QiXSwKKQoKaW1wb3J0IHRvcmNoCmRlZiByZWZfa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKICAgIGEgPSBhLmNvbnRpZ3VvdXMoKQogICAgYV9zY2FsZSA9IGFfc2NhbGUuY29udGlndW91cygpCiAgICBiX3NjYWxlID0gYl9zY2FsZS5jb250aWd1b3VzKCkKCiAgICBtID0gYS5zaGFwZVswXQogICAgbiA9IGIuc2hhcGVbMF0KICAgIGsgPSBhLnNoYXBlWzFdCiAgICBibG9ja19zaGFwZV9uID0gMTI4CiAgICBibG9ja19zaGFwZV9rID0gMTI4CiAgICBzY2FsZV9uID0gYl9zY2FsZS5zaGFwZVswXQogICAgc2NhbGVfayA9IGJfc2NhbGUuc2hhcGVbMV0KCiAgICBhX3NjYWxlID0gYV9zY2FsZS51bnNxdWVlemUoLTEpLnJlcGVhdCgxLCAxLCBibG9ja19zaGFwZV9rKQogICAgYV9zY2FsZSA9IGFfc2NhbGUucmVzaGFwZShtLCBzY2FsZV9rICogYmxvY2tfc2hhcGVfaykgCiAgICBhX3NjYWxlID0gYV9zY2FsZVs6LCA6a10KCiAgICBhID0gYS50byhhX3NjYWxlLmR0eXBlKSAqIGFfc2NhbGUKICAgIGJfc2NhbGUgPSAoCiAgICAgICAgYl9zY2FsZS52aWV3KC0xLCAxKQogICAgICAgIC5yZXBlYXQoMSwgYmxvY2tfc2hhcGVfbiAqIGJsb2NrX3NoYXBlX2spCiAgICAgICAgLnZpZXcoc2NhbGVfbiwgc2NhbGVfaywgYmxvY2tfc2hhcGVfbiwgYmxvY2tfc2hhcGVfaykKICAgICAgICAucGVybXV0ZSgwLCAyLCAxLCAzKQogICAgICAgIC5yZXNoYXBlKHNjYWxlX24gKiBibG9ja19zaGFwZV9uLCBzY2FsZV9rICogYmxvY2tfc2hhcGVfaykKICAgICkKICAgIGJfc2NhbGUgPSBiX3NjYWxlWzpuLCA6a10KCiAgICBiID0gYi50byhiX3NjYWxlLmR0eXBlKSAqIGJfc2NhbGUgCgogICAgY1suLi5dID0gKGEgQCBiLlQpLnRvKHRvcmNoLmJmbG9hdDE2KQogICAgcmV0dXJuIGMKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgIGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMgPSBkYXRhCiAgICBpZiBhLnNoYXBlWzBdIDwgMTAyNDoKICAgICAgICByZXR1cm4gcmVmX2tlcm5lbChkYXRhKQogICAgbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQogICAgcmV0dXJuIGMK
No newline at end of file
+ IyFQT1BDT1JOIGxlYWRlcmJvYXJkICBhbWQtZnA4LW1tCiMgVGhpcyBzY3JpcHQgcHJvdmlkZXMgYSB0ZW1wbGF0ZSBmb3IgdXNpbmcgbG9hZF9pbmxpbmUgdG8gcnVuIGEgSElQIGtlcm5lbCBmb3IKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmltcG9ydCBiYXNlNjQKaW1wb3J0IGJ6MgppbXBvcnQgb3MKb3MuZW52aXJvblsnUFlUT1JDSF9ST0NNX0FSQ0gnXSA9ICdnZng5NDInCkNQUF9XUkFQUEVSID0gIiIiCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOwoiIiIKIyBDb21wcmVzc2VkIENVREEgc291cmNlIGNvZGUKQ1VEQV9TUkNfQ09NUFJFU1NFRCA9ICIiIgpRbHBvT1RGQldTWlRXWWQyRmU4QUliWC8vWC9mL09INy8vLy92Ly8vL3IvLy8vOS8vLy8vLy9mUGY1QUFCK0RnVER4ZzFZdHZiNjY5VnVQV1Bla2lxcWJ1NHIyOUhRUFl1NXdjeWF6YUdHMnQwY0FTYzJlMmVHOGtkcklBSXR2YTU3MDJZc0JlelVtYzV5N2JYdTU2N251OXVuZGlqMVhxOVpWZHVDcXk4dGROS0tiUFBlNDRWcEpZbFM5QnoxeFc3ME5JbzZhUzN1MHg0NGNrYmNjVHh1dGM4ejI0QlhEYTI3ZXU5YnR1bGIyM2F1bXZQTTllblcyNnJqbWE2N3NVb20xYnNBZXVxMW8zajA0M3NQWGxiWWxEMDlGdEl6ZHlkdDd2QUFFa1FRRXhBQk1FQWpRTko2QVJvVEVvL1ZHOVUvSko2ajFBM3FnYURUUUJpR1RJYWFBQXlCaUI2UUF5YWZxR1U4b0pFSUlFUXltUW1VMmhVOXFuNVR4TUpObFQySm9rOU5wVDFQVTBNaG9BQUI2alFCbzBOQm9BQUFBQUdnQUFFQWFhTkF5YVpHbWd5QUdRMFlFQU5NaG9NbWdhQm9NZzB3aG9NbUNOQnBoR0lCa1ltbUNhRFFaTkFKTkpTYXA2YVJBamFaR1VZbnFiUUdwdEV5TkRJYWFESmtOR1FhQTBOR0lCb05BR1FBQUFBQUFBQUFSSlFKbzBKcFBKcWFxZjZwNW9tTlZQZXA2cFAwajFNTklla3lURDBVeUEycDZtYW1hZ3dDRFFZRVpNVFRJME1FYUdFQURKcG9Cb0JVU1JCQW1JMEppWko1RXlZaEUzcE1WUDFOcHRLbjZDbTFOcWFmcW1FMmtiUUFFWUJCaERRTVJrQTBBR0VHbUlHSmppZ2RLSUlrQUlHK2hJRWd6amQ1NFIxM2VubUN5dUtqYWNrZkFIUkZJc1dDK0NXbWx2VkNldWNWakUzaENwRVFSWDNsTlREMkI3cnJ0MnVPMzJnOXhtMTNyM21iZXkwMlAzbldMTzlocHR0TjlkajU3YS90Nnh1OG8vQzdvQnR0RWtPR25UM2JyNzF2dlA5ZzYrT0NENXZzWlZWcklwMWltQkUzUHRNcjhhRHJKNTNqelorMTZlK2NGZzQxSmxXZHVLUWlmOEwvMVRBZjFtbitYK0RPZ0labjEzODhkeFF2eXhnUS93bVhheDQ0RGR0dnhkQ1VRNTh6bWNKb2o5c1Rha2NMUThwRGZ0MXBKemNSTTNxY3RINzBaK3BzZTRNbWRKc1BwUEdmU1ZHZ3RIeWQ3a2dqT3k1R0pmcnYrYi9zY0NiS2hxb2RzTzBoTC9iVlYvVW14UXp2Y3R5R1cyamYvZjJTdnFOYXN0dTRDWkJuWjkvSVViZGpQR01KZm8wb2RtNjNLamxHZWpsY003V2Ryckt4UXg5TFM0N0hWekVwRDA3d1VEQktuTWpNeW5EN0RNVWpzT3ZNMWVrNWs5WHp1bTAxS0J3WG54WWlLaHoxdGIyVmhVUVJVRVlHRmtnMHV6MVhWYjNVUTZsWGFiKzFXYnpPTnhXL0lxVVNZd0JKUGFEREc5bmtaWGR2NXY0ZW1QcGJJMzB0NTIrbjA0b0t3UHJ4K3NlWGg0ZXp6cnJLMVc3RWRHdTFubThFZU51ZXJSZCtNaU9HemdOZVFTV0F3TFpzU29oYnFKaEZURG5zNE8zTTNyaGNVK2pwb2JQRkk4bVZCSU5CSkRHSVZIS1BYNWNodmlJbGsxZG1veGh3dmlEQlJpeDNDaERpQm8xb2k5UmwxallwczZYUEdsVG9VbVd6dEx2ckxaWXVMaHNZR3ZObGtUYUUwMlpZOUlSU0dVL2c1eXAwZ29zbkRPSGRVMDNxVVp2cGQxMFpOd2FHNFRCcFNpRkVFS2xCRFpMbVdsK1AzMFUxMkhicEo2N3NQUTV5b3dmWS84M1ZIeVp2eUlCK0hyZmp5bXFHcmsyei90TnlUenRpdGh5TW9tWnJyNGhHazhFL3liandNRTZXV3dzdEVWTUZFbHIxcDgraGF2UGRLNE50VTM5djMrRFVDaFJLQWp6TW5CcWRENVlrc0RldzBuQ3NZZURaOUZCRHMxeWVWTU81aEcwSTRzUEJxK3hwV1p2TUphTVBJd0paTjlUZHd0SnMwT3N1OUZ3T2JnckVGVU9LNllVclZsbTlDQ1JudUpsTHdYRmhCSTMzeEVra2l5TzJpYjdzU0Nra3FRVmJVZ2o2M1YyNmhFOTNRNEpNVFdCRnA4bFpKTnFKTVFxUURuZ3FoUmpFYmJFWkZVVFhBUnZoWkFYUGNVbmZZdS9vbXlxMU96RHhiU3RUVWM0RDQ3SktKQUdNZ0dUZFNnZ3p3d2tpU2JrVlpxVktJTUFtcUk3RUtpS3hFZ1NzRklTaWpVbEVtajJxakZJTEpKTEZHTEltK0tTdytVVytuNWJYU053eUY1eGtsbkVGajVQckh4amx4MmVxVW95SDl3K1EvTy9qaDZ3TXdmUkRRZ2tMbGcxc1gvaDRNay9rWE9NWGZWRVNqTVhZM3I4UGlnZ3B5cDBFbThHWXJESU1NT0NsbE9ia0dZWWhoajBROUlmaWx3T0hUdk8wWDRpWDR2SCsycENvRkhhV0RKbHlMUWx4ZUVLV0FSNFF0L3Zlb0hJMkxkbkFxRDgzZ2xsR1RMc2FudG1DSzdDQmpZTllaUEFNQzJDMW16MERXQTc3aVFGeEJGRjR4ME1RTVc4cXQ0NUQ2Q0dXa25pQU1jdExCNzV6d2hpMXpYWDIrWS9zR0JrUFlIU0lPdXNiWXczV2VvWGc4SEJad2FnT3c2MEdoTDFCM3pBTGhkaFVZVEo0RUdSRWR3aUVBc3RHUkVVd1lNN0EzTW9OeHE2eDR2RVcrU3NYWWVBWk56WTNiOXNoT3pNNXZTOEh5RkZ6bTB6R2VmRGhHRE16eW9Ec0N3Y21RSUVCUVFRUVhNc3NRNElaQkQrSWtuQkZMMVNRK1FucForbzArQWlaTUp5d3VaSlpSWmNzSHptZ1p1SENOUnNHSkVFbkdIbVl5aVNZUE4yTmk2QmcxR2JGU09iNHJQMUFRZWtWTVI1T2N2djJqRGtyeXN0dHd2eS9EZTJVai9vMWgxQm0yY0lIbURaVGZTNXRJUkIwNVYwNU91N3RDMFpMSGxMZFIwaTJrR2tZQWd3WnV3OUpFRXFDaWlqZklGMlBXTit6dUVocG52RFkxS21CdnNHc0JGRlZSa0pvSjVTZEhEREFIZnZZTVhydXY0akxENkZrT0ttcWFaaUtsbFZvZlFwa3dGb2RBMFhFQVQyYmpEN0NySmxCRHl4SXF4Q1V2UEFMZHBhTWpmNFJuVVY4Tmpra1FqUklDVXg2N0hzNHVsY1kwczc2R0M5aEphMnZxbHVQc0haOHNHc1pENFNiRW02dUNVckFpUlNvZ1VLMElSQWtpa2FERHNKNE1CZVJ0U1ZERnJKbGF1T1RJR3BTb0dHS0dLWEJoQSszb2xJSkRaK0hSZ1paSTRFSmlTbTZ2Q3FodFVLSUcxSEloZHhmY0ZoR0lYTENvd2FXQzBLVmhOdUJxd01Gd0lNRENHRWlhN01sTnBKQlJ5cWRDSkJFcEpxUHIzMTQyTXBEaThrT1JPbWdmR2dXVVh4UnpuNDlPSnhwb0Y2UWVrT0lhVHhSM0VjSVFsNkVjR3VsUVROR0I1Y2l6bGpuZzhIZnlFSVEvSzFvUVpMRE9CcENwck5JWjh6bFBsVE1YZ21LRWRRK2FYSTBuaWVpb0o2a0k1RWs0RkN2V3dWMUhJVmhuMDRueWtHMGtCOURZbzR5VHpKUUJoUXVWS2hra0tDQ29HaHVKZmhOU2V3SHVuNUJRelE4cDRGaFQ2L2RwV0trNU9UK3J6ZTZVR3lqT0hvdTBZRDdlZ2lEdnk5ZzhtaEdHZFo4cFNPT1JKR0swc0hucnZwZzd3bXR2RTVTOHpCZ09NWWlCUFRtWWpCTEhFNVlCbmN0SUptV1pIRFBDOFY0bWFkNk5CaFNLdmxpVlpKYkFHL0hHM0c0L05vWFJzeGNwN2JRNG1yY0RraWdKQ2c3MFh2dkhEMmRJd3hFam9rVVJNWGV4RzhtS1FKZ28xdkFxT2tIT2hHazVubGl5dVRNZG13YXhaQmg3ekhlbGI0RHVTTCs0SkhjSWNsVk85UitzTUhGUGlyN0t0VlpaSlRkd2N4bGlqMXoyQ1RwZ01FbVRIUmNFa2pLR2tFSUxoQjc4VVV0aVN5eXdDQ2tETEY0Z29xNUFWZUVsU0NWSUh2OEJBdnhHanM2YzlGUVlIZ05EWXRsZmZraHVGakVPeGpxYWptbEdvL1I1VFQ3YXpQWHUwN2V0cDEyM3duVENoWkV5Rk1rd3NpR0ZIV1RxeXplS1dvMHNqaGNTSWtTSkNRTDJuei9QKzU5LzUyZVB4eGd6Y0l2QnkyemdkMmxZdDNlbk5zRElaRXhBOVp4SUVUUHVjZXc5Nms0RWdvVEZEQ293Q1JyS29ZRjJnaFNwM1VWVEhwNklKZXV6SEp1cXdFd3ZSNnRVMm1GUWk0OUlRY0VjRytDNmFaeXlsWTNNbUMrZWtDTUNORG1YUTgyb3RVa1JFekxpTmpOdW5NZm42Y2pueHNnMm5RVy9CZ3dVZ01OV0VOU2huQXI4UWtJK3Q2ZTloaG1qY2c2SHpha2hwUkF5b0tRemNvc21NSnB3Zmt0U2FsVnVkYXNtTk1acGt4cGpNTXBXMFdaRXFxeUt6RU1ZWjBZOXQ1UEt5YnZFeVp4WnlZTU1STlV5YWxMbklHR0JYQXdpeEVZc3hJTjI3djh6Yy9RUmFYamwwUm4wdFpwQmpBd3VUWkRLT2FHRGozMDZVSU9CVVU3cW94WnFUbTJjdWhvM0xwc2xVeE9EeXEzYTJNT2NhMWFTbTBtelRUVXlNc1hScDdYdFRad2VobkdSZUp4S0dTVWtNS1FVVVNTTXBDWkNOS1JKQkVFYXZ3WkpKT0RwVnN4aXQ0bGxOTU5NNGE5cjRENTIzQUhIWmQ5TUcvcXdrY0N0RWFRcnNJcURCUkErdVJEVGMyWkZ4U3BKa3g0U1pVUnVGYWJOeXhxZ2lIZU5OT1VJbG45WXRsbHVITHlRRDZhN0JLWFpzZUFVR2dXeGxTYTJOU3BudFlVRFU1MGppVjhpcTR6NW5qYnVwd1YxT0NlL1Y2L25sSHFEeWpiMm9scVpaQUVUSE9Jank3N0RPa1hOMEx1UGlDcFJRYVk2S0ZleDBaS1YyMnJyYjJmZDJOdklkNngxMjJrZXhBbU14UWZiME16N3VSY2hucWpFR1FpRTJTTVdFWDlRU1hxbGcyQ2E3cFYzMjVYYnpvN3ZDeUZnS0RRWHdEWGlvcXcyQStaU2dadllMdU9tVGRydFdPVkRDem5mTTVLSnJPRTFyak9rTXdmSUFhSXVrdDBqU012ektuOGJNM2MyN1RyZ3plbms5T3ZuV0UrY2JMV24xRE8xbWZKRUczbXNyOE5JVEdFTVVEZ0RnYXJENGx5S2NEdDIwNURBdjdzaFVmSU1aelFNTU9VbW9lcHMrVEdZdEVYSUVlWVk5OForYXYxWEJWWXF4cEs4T2IyT2xUcThTdUhLbVlicm53WlFla3lpVDJ2Q2RNeXBzU1VleDlKWUpYMTJNYlkyUGNld21YYjRpTVM3VUJrR0Zha3IyQm1RUVNJQVM3aUFycWhqTEdwOHgyb0RnNWxmWmtvMlgxRHltZ29ZNkNnYThQUTNOM2VvMnc0U0xZV2l5eTFKVmlxRVZJb2l5SnVTd1NDS0lNUmlNWVdXSlNvcmlyRldWVEhBV2pSbFpOV2JWTVpqS1hSdmo0ZG5WOFRxZXg4enBjRStKM3lUQlBJTUhUUEJwOFN4MjhQTzRSUE1uSlZSdEUxU3lmVmR6dFBjaFd4dGJYaGt5UWlXV2pqRERHM3dtb00rUHRLRVkySkdJeWpqVmFNbFlkcERQY0RYcXdBdERXdzRaejVka0RFSmpuS0llZWtMN2FJWWlFSUtEdnFCdkdaVWJBYmhpMTV5eXVyeFM5bnNQVjVYZjJ1OFBiQ1R3Znk2ZzlSM2RyZFdOenNHakVkTU9RSUhvQnpuRG56ak56clFCQWJjNXBJQ1pKaGpuTmx4MEhlYVp4ekRGcVhVVUdNalVyNWpXdXBzeWl1QW5ySEcwQllFQndxYXljL2NEZlplTkpNTjBzV25Vd2N0UkZWM0Z3UXVVV1JMeVJFVWtKOVk4TTBzOUYwL0xWMk1Vbkk1azhRdG9xUlp1VzhJaWhlRjJ0bW9adHRWRUdkbmJRRlpqSGJsazZ1c08vaXRncjRmTm5sMnNVMXBzOVUySWhZbmd4QU1wR1pOVzhXbW93eGtaM3pKdVRrOFJ4OE5kWjYrajFKMS9OaGJ3TnVweUxKWXNPdGludEZKcFRmcGRtK05pZ0xmSTg2TUFyS2ZKQXFGV2U3S29weURFRHVMRWVTYXFnM2tpR09tSUtRcms3czBlY3JLdGpuUWFoZEJUSUlCZk1ZMmxXb2dXbzlBMk5NNWN3aVJIak55ZGphL2JpcjE3M3k0RnkxYzloQU5HT25RSUR3RGZZMUh4ek5DMkRzTWVjZzFCZkplNm9vTGpwc3FxcVZ3a1J1ZXRzOEZkSGplNXBYZ2RmbCtUdVczMnVPVTNocDVUaEljWVk0RGpPbk0vd1pDclhhWmNSZnVneHVNTmFqNklJSzE2TVZEaGVwSElBeUxTaTNTYTRjR0p4UEJDUHZ2S3E4c3d2TTdwMnoyUEdqWkJQU1IzeGRqRlRnaU5TUU1ZbmgyWklpcWxzdEZzcXA1Nk1WR2xtMHZpbEdZQmM0eHczWkV5UGg4L2k5SjNoL1V6UmszU05MMlVXMWlYbWJ4c2d0QStVNXBhb0l0MGtaNmZNUjFCYVFnNThCMVFKTW95OVo2ajJFd2t6RmRaeURtYkNUZ25nc0p6UUNSaklvb3NZeFdDd1lvemw4dkNCMjVBUEFaQlpCU1NlakdMRm5kcXFpb3NoMzRteGZER0VJY3JkNldjazB4aDB5T1VqQllNT3BTY3VFWkJKRUpOVHArQXVGcWdZcXJNeGFtTDRlT1B1ZlphODIyMC9GSlQzNGl6aSsyUVkrVDZlNi9BUlhuVXhrWnZvbHlnWkJtQ0NTQ0Q1SGdZTWFGcmM5YkhQU3JmYit5V3F4K1phT0lHeG5KR3YxdUJ6OFF6aFpKTWVNOFJpekxpcnRLcFprNk5OTzdNK3FodlB6V01JL0pvMDB5VkRDbUl5Wk5vY0s3OThzVjVPcWdLSHRjdVQ0OXZBa0NqaDREeGhOTGt6VUJtLzRBYUJPNDdHc0VMYm56NFZzTGFEQ1JraUdPZ2lTQmpHRExDNTN0WmpTOWI0ZHlDVE8vZ0lrc01VSVpNSlZKQ0ZRTVkxcU44aExSN05SWEdQSkNwVGRtcloyYjJoQXhDQ2swTlFKS2owdlN4MFhqNlB1OVRvUnVuUmpKWlpUMkhHMjF3MkdvVjllR0ZRZHBtWmtnWUZjVlp5UTRrQnNZUkZtWVhLcmR0eXBWS0E2blpZVW9zUUIzQjNBd296aUZveExBc2tGQXZEbEpHcWM1NkJaWkZlRFRzNmJYdUdVeExCMlYzVE5ocURBMWorNHJIOG1oMkJFY1JER0dGY3BweGtnZzhQU1V4bHkwNGN5NWNoVWZIVnVGYUs4UWZQZXdIMEl4WThKMVkyYWsyakRHV0JqMGwyUDJkcGI3cE5ZSHBQUDlETXpNMmtuWlpQRWNEU1RNZ0dOZ0tkWlNhVFFIQWNKYVNlNDA4azV2V1c4SmQxL2pkL0RtaHJmY1Bya1VaWkZwVjZJZEVLMkd6NDYvaFRpQnVZVU5ad3lHWXlVbDFWUmI4clNtVEhKR3ZrcEZPWEFPTjJJY0psVHVEYUthU0lZTS9rYU1ISThYSFlZeTd0R2pMMzJvb3Jhc0puYVBxVlZNbHk2cjJiNERBMkhOU0MxNU1ndHF1eW04NXp4bThQbkltNXBuVVhnWUE0WGxOaE5YWkhPUXJOblB5M2JUT0hQUkhLNmhCdWZiYTBKUmozMzdvQ2lwV05SYkRXL2dvbFUxZXBzc2NlZ21aN2lCNDBybzRpNm1BUmFsREZlYjNqVnR2MDBja3ZvOFBSU2pMcVliSGp3eFJjK3Y1MXJ6V3puaEpOdGRUWWhRU2hCc05VaVN0aHY1OE05VXFSbmx3WjJKU3V3Tm1ZcXZOVDhEeTljNnJUbXc5dlNPNGNOMjQ5bnBhMUhkVlhIMDJJd3V5dkQxWTRxTFgyZ2hIb0doYlBhMisrSWtobnd2bDFnWjNDbDBhUWFIczhKaU1DTWsrQnBycnB6ckpqWTBOTGZ5V28zYUhqSHd6WXRselZta01wMW1RNnlyT1h4SHliN2ZMdjNkRitTcnUyNmoxTVZPVlF3c25VcnZ0TXRwbHlPbDVuUHpPU211UFU5VDJnYkZiRHB5S2lTQXR2N3cxN3pBbzBZMnZRT0FwbzdpZ3A2MkNoNUp2cE95RVhjQ1RHU0VsNTR3NUd1TjkrOTlpMTAwRzVaSk9jV1NwUmFqb0FJb2o0Z0xyZVk2NFZzYU52amxnYnJncmIyTTZqNjZJV0RDUXlFSFFsemRoekcrT1lyNmVyTFRTZk51N0tvOHhLMHJBZ01Nd0ViZS81amQ4eGJTNzU4bE4va3hSamEwbWpjMXg0bVZyRXFNSm5lNzdNZE8xbDZaUmxxcGdxUlVpM0ZVMURuU2VKckNtclJFWGFSQWhOSVRhR01NQmdNRlY5SnNHN3NyVThZR1NHMGREWmhBYUVLcmt3TEF4S3JXUnRJRE1RYmdZV3Jscmxsa3JZcXhtaFNFaUJyY3VURENISXZCZ3FaNjNldnlRSHFML2NYUmo1MnIzSEwxYTZqR2RoZXg5S1RBYllwblhxanEwazJIU1J5UTRjU2hUMnpSVGJnTzBaWk1ic2tNYVRhVm5SUVVraDJFU29JaWhOZzRWeTBxWXpJOUJwRFJ3MHRoTmhrMEZCZFRTYkpNZ0NDaHBaU3htTWpLMnhvSE84eHJtaEhacTRPVXpESEJ4TWFSYVhqbk5DMktybVVHaVJROVdHeEVKdE5RRUVMRUx2d05oQXhUWkJTbWtTR0sxbzNFNUpuWDExODZwTGtRS01aY09halVWbDE1a01rVUY1WFhqR2lhMkpaVG1hU0dnYmI5SmJYSUtpb3FOOGJkamFzRmpzTkZDdEFIc01jZDVKRm1jem1BUkdDWW1UTW1GZzl2SVhtK1VOcjZxRzljU0VWVUpncVdTeEpPanpJbWtaT0ZJeXd3WnFVSmlSMFg5eGxQNDVyS2xub1hGWWpFVExSeXpVSGF5dml6STQ0OUZCMTM1ZXB4K05UbThnWG1laUtEcmJsaG1nUVdkV0tyTW1UcjJIb0F3R1pOTTFQN2w5cmJER2NBdk1XSnk3RVJLVTZzUjJEZDJjTnZrNDgxakNNOUNlRllPRjVSbllIa1M5UWNqVkZrMFBxL2RjVzdldHpmRStYMXNlaHVqNDZhSzZKeVdkRHBib0VRa0tCYVFnRjNIVFlhRHlMaHAwc3ptVVZTS0dZYk5NemxCdVRocDErV0hHc0tCakJvZFcrMHYzRmdYS3RZaHliM2cyZ2N4MzR4YzlzK2dhRUREUFluakdEZnlJNUo1R21iZC9UN2dlOEpneE1Bd2lRcWljT3pFMFJ6SlE1ejlSV2Q0Z09iQWRlZXdvOWU2MDZZRnlQcmU5OWR2ekkzR0h1SnY1dmV4NzVwYS9yVGFadkgzUjNyWFI1ZGlNNXJheU0xR2NTMW1pTHNjM2RWbHczVnRjMnFTMDlUZ1hRSy9mazB0RTRjZXZRY0Frbmd4dmJKaFBaTDhDdmRaR2QzdU13TTJJR2VWQjBTbCtDb1AwSkljWUc3K2g0Qk1zR01qUUVSazQ3SkRkejc4SjhLWmlZVlNxaXBLS0pWSkZVa2xMQ3lGUlZTbGlLcWtVaUlSSUtqSVJQSUhtVHNaY0lDUkNlMnNwMytuZ21lRW5nNis3RHV0SjNQYmJ4clNhSHZXWmxsR3BOeVlZQWl5NzF1RlFjQ3NrSWhxaUZjWktLdEtWbXFDaUNBYUdGT3IvalVYQzZMS1Foc3VOVWFVT2JLeW1aWUt3MGlUU1lScTlnZTBPdUhXL1JCTnRPUEg0RUk0bmhERjlueDB3K052d1c4aHpaSlI4VmRRZDNtcWd1NzBmZ0twSW90ZGhnRTBIZE1EanVoa21iQkVHMHNuZUlRYk5CbC9VbUVhdmpXRlFidkRDNkxmYjdOU0p3WkRoelJyVWxjeHRCek5XVGhhc0F2T2lKSDVocWhnUkJJbmtiTEYxQTdoTVpjY3BZR0wxUjlFSkltd3lHZ1JvMno5MElZL2JTSStWb1N3Mk5IZngyVDFyc2tYZFNkS0ZUdmN5TjkyN09jUWR2THczNXZjUHJaQ0lUa2FCTmlHMHZpeXRNTzNpNUNGMXJJV1lndE5DNEk5WVlYQ1BnaUVCN0ZobTR3RnRBOHhmTmg3YURlNEtPV1dWTVpxbVNaQngwT2tiVEhrS3Nqa0dBNDJGQlFLSW90SjZYaGhxMnFvM2JtSEtWVHgyU2JTK3BFcWxKcWJZVTRTNzZ1MHpHcFNNWlVxVERBVkxSbmpuRXpmcHE2TWQrd09NTjV1d09QbWNjaE5XN0U5VmxWYUxWbEVXeXhaVlROMTNXb0RTUXF3ck8wRXBpVStLVWphYTNuU3dhUHUxdHpkbE5PTEhxb2tMR3dhTHhqNUVUZ0YrT3hCQkp6K2c0dHpCN3pKaVk2U0pkQm9nQkJrQmpud2dseTFBdjJ3ckxMZDRnZDl0dVFmVGMvYzF3Ry9rRXFSNGErUHhYZkl5RW1SUWhZRFJBWlVOT1NKNnptM0tzTGJyTG1aVGJkYzFKRmxObXRsMElORVJHeTFSc2FxaXEyM1FOME0yYjI3WlBPMi9Nc0FVU3hpRXlSdVFJNGd1Z2tOc1BheVBNS0hTbGVXWU5UVFBnenZ5U0s4SkcySmcxdzh4Yk15RW5VQm1Za1VRS0VtbFZoQXl0dDVHQWtXVjJwTDhOYjdzZ09JZ2d5NmxWSEVwSkxpU2xaUkVSTEJEVWc0YkNHR0lpc21KVE1sMXE0eTVxTlIwdUd6ZzU5V3dPK1JJQ2FHdTdBT2dEaE1qZFdMSWlSWW9SR0hUUXZSbVljSVFvWWJqSHVRa2c1ZE9mUG5jMTU1NFJlWTNZdVRCTVl4ZzJJV3FVaTNTNjhwenBCMTI1dmxndng2WEJ3YjU0OUwwall3QzB5OERZbTM0aDJjZ2hpSWJZRklDVkxKZEpsd0xFVVFLcUZVSU1VRXRrVEtsa3V6MHp6a3BLT0dPWWpwUmhXdVNHeUVFQWlZVUxuTzNUdWc3WEpQWjV0NDU3bWFmTnBka0RUS09zOXJUSlRoTVpEQ2tmVzVZYjd6MnNlVStiejFIMklweDcwK29WNzhsOUk5ajdJOHBBeWl0a1cvT2ZKTERNZXRkRjUrSUJpWGV2TlowQjE0SG5JK3JERnVRd2crZUNBVW82TjNzYUZYR1hRcVp3V1B1c2t1elM0d0lGRkZlZXJsazBvcDZGaTdKNU5OQjFZaEVWSVA4K1ZJb09SQXZLOVMxemc2eHd6ajFza2xvU3czQkJ5TWtSam1ncm05akJxc2xBSnpjY0wzeGI3SUhreU9NMzBYdXZWVzh2OUFVTWpyMi9tTythUnIyUnhGcE5rU1FRSm9YQnpnOEozbVdYTWpvWUYydGdZamJCS2JKRkRDeE5xKzBrOG16dHpzT3dzQ0RKT0NsVlZ0TGV2bHZwTGJVVDF1N3Q4VzAydmEyWmRqY2dRZFZzcTIrelk4SGQwenJLTzR6Q1l5bU0xa1NkWmNkSmNNQk5UNjVSNDNxYVFZeDVJSXQxWmNiOUt4cXE1Mk85bGU5dDVzN1gxMWtaM3M2c0QwanJCemVSOGFPRWVYT3o5RlRKc2FZdGFMQzYvaVZPeFcxWThZdlJUT0VNekIzck9adDdhZVROQjJ6VGNmZHhJUWJrUDAxbUI5UEhhaEhJSzJxRlUzS3UyMlRZMmZpZ2l5c3I0RUZNSXlyVHlUTnB5bWdKbDhra3VKVU9GWmRocUtaUlJaY2NFb1F6NEdEN0RncEpiaFF5aVFLTVFDeUp0dG1SdHZzOEh5Z2dTU0FzSXFFZ3NJbXVLVzdtMElDSHUxbklhNitrcld0TUZJT1ZEQUIzeFdPZS9XUVVBa0ZPTXkwWXRiTURDU3dlMVpiYWkxYWsra2xmemN5V1FXSkRXUmtGc3F3ZW1aVEVIS1dScFVyR01WdXFORlRkWUZGV28zVk50R1FaTElhV1NicWhVaWtqVlExVDN2UjczN0NQa2x2THc4ZklTUHg5LzZIejViTGF2cFdEQnlOdTVmc3dneW5rc1FtUXdNTVFOdDEyU1UyYlp2NXl6bXNIYWZqZXAwUGlhNk4rM1o4bnB3NFZhMTRZYXE5Tk1jcGhIS0tmOENBS0ZXaW9nY1E1VHAzbWNGRmdHdENPbGVza3Z3bU1nN2kvUzBsaks2Zy9RUlAzQlBCNG4zQkhlQ2J2dGtjRnNSZVlSY0Z5UGxxSzJyWWl2czFRWUthZ2VpNFFwWFhBVk1FZlRyMWFXM1lFaWJFVHpWTzhXYm91TUpXSmkxTEZTbFNXcktsaUd6dHVwdHdRWVV5Rm5tUVlURWdkanNEVW1BYURGQVFZak5SS0NaQkNJSjZKa0t5S1RWZldrbTdFY0ZUODhzU2Iza2JzaHVzY3locEFicmcrU3VPbWhMa09zRUR2UTdCd0NVbVJTT1lGMUg0SG9Uc2ttdTJFa2V0SjdBb2lhVDljaWNsRmNTQU53Q2tLMnJOdHg2anRieGxJVjJBMkI5SXJndlNScm9aTGNwbHRUelAwNUpHckl2YkVYM1I0NUhrY213ZWhqQmpyVHBFY1cwanRlRi9FZmw0cWZSOUQ3ejVqbEI3WURrU0lRUWlqeFFXUThLQ0JZcEdFVTk5RVpGc1Q1SkswazJLeFR3cUdTeVJTeFZSU3lUNEc2bUltaXBEK0FoL1FEbno1SmdPSmdrWG5WWHFaMTdxRkFIVkx4VzBEU2h5YWxQT25Ta1pKMklkVFR5OXpqYlZmWHhIenZRemVabG5zWm85SDRxajdUeHZ5SUtpY0xPdGp5K1BObFVSWFk2bVA5YXg3VklxVnMyWkpwVUtsYWFZLzJMTjkyelE5N01JVTl6WlMrZlZMWlRSQ0srZ1FOQk4wRGhTQVYyL0dUU1IyaEtwTDdwTytUbFBGZGovczVmSUNhOTdwamd0YTU5Qjc0ZERiOVg4djFhNzRPSVk4YWZQL3J2TTJPc1pLMUFrancrRU9WQVRKQmxjU1BXZGtPOGhJbWxNY2thdEZxOUFjNlJWTHhCT2d6QXY0QjR1Y3RCeUVFQ0w1QjNRNzZucGdnUmhHQkVqQ0VVOGQxQjBUZ3FESUdERDhvTzRrVWxOUU9ISGdPaVVOVzZNcXFLWmVpajAyRm9rYlZpQm1DeW9rRzRQcWhJU3lqQlltU01Ea3NiRENieFRVUmdiSmNNc2FVeVVwTlNycjRLMmF5dHF5TEQ1azBZeE5oeUhvSktBcm9Eb1hNYURyMTgydkNPUThKWW8zR1VKM0R1NndZQXhiY3pBN1JpbHB1QmZJN0FMZXJ4R3dvS2dCdUZGMGNyTE02K0MxMExtb0RNRU5SUVU0bFBUSmpiSFVVbGh5SkErcVhMRnJsa0RDY2R4RU9TaVNiU3BhbERpTW1Ga3FzV0pJdmpXNHZoZ3VyRWdDaUI0c2FFbVpnc3crQ1R6MUdHWFdxd2tva0paNUNCbnR5N28xTWdsa3lEUVFGeEZnc1NKV1ZvTEVRV0drNWwvUWRPN1ZEdVVOR1FGQTByUUttNWVZaTg1eElEMmdRWUxyMU5vNFpNd1J0VUNvbEVJSkRkQzJFcVNVQjNvN1YyUEphdjJQaTNSb3Y0RDR0SFc1ZFN1eHNkUXhrYTFKbG0zTWtqbVhNallRaDFZWlZTUVc5MDNzRUVGR0FiTHhndVJRUDQ0TERKcUlEeUhtSmwxQ1JhUWxqWXlWMFRVakd6RmNtN2VOTE5wdkl1cE1UQmpkdTAyazJ5WTAwcGlxdDgremZXVGZCbFd2cmdhWGNqMmtEQW9Ya0VpR0lTb08vTFQxMGtwanFDaVpjdHdSVWhURkE0T1JnQ3lTZ1dmazdJM1BvaVNRZkt2RVZrT3dMQjBKSHFrbjJFNVNRL1drcHdCcFlEMmdVZzJDZUdJSmIrS29oRXlGYmZOM3lWT0RBRnNXeUhaN1JTN2h0S1dRQW9iaFQwcjJkNWtXUGhoR1Nhd3NVU0lxWmc4azQ0ZFd4TmNrZnlEMUN1WXNnN0I0bUV4TVlURXNpUGdyNXZ2WWs1OXFJODRKN1pQV2tmVWs4b25vVGxIMTZuQndKNXc4b2FrRmFFSXNGZXMzZHMwMTA0Vk10UXBwdzBpQ0J0RVI1dVBodGpIUEpxclpIcCtCSTNUUjVtSmhqdDdSMXE5Z0FNUXYwbkNmZ2hacDV5bm82S1haenlVWW5BWUxERUtPOUxEbEhqcmI1R0lXUlRhZ3FkSWRxMktPOG91czRxcEROaVRIdVJQS2tjaWJNa1EyNkpIeTdlZ2Fra01ra1Q1a2FpZ0Q1MHhxMWdaQXl6SkkwcEhoRUpiUll5NDdlSEZiWk9LaDJJWHFKMmI5eVNWdEkrU2lIa1dTTzlaQmlsdjVXMlFtbGtrM3J0djRlU1F4NXZLelJnNnlVczlrbWtQc25qSmlQaFd5SWNjTDRuS0VnKzByOUVrZDN0dEtXVndqU2ZVVStjN3JyOWhzWXhqRllyMzJ0YStFOTFZUHprM2N1QzdHelRGVjBWaDBGZ0cweFhneURCbUZlazdXVGJZTm1CNEFvSkxseTRYSm1EREN3ZklRU2hWWnhEYloxMnMzQXNXM1dTVFdheGVRSEFWbUdDNGFHNDBxdUZXbEtLbHNZNktsdHkyOW02UHRlbi9KODN1WWZ4L0RwK0l4L1A4djA2ZEhtL084SEwrWnk0R1krMGw0VDI4ZU90Ym1ZWm00dTQxZE1JUmNZcElTampBS2ZrMmNJRDVpNDFId0VDSEVpSDRubjd2aVpNMFY5aGlvb0w2Y2RuemV0TDdCaGIyVzROVEVMeGh2dGRjRjhrenhmdTNYOHMwRlZFU2tkUVhwcmpFTGF2N01ic1hjeE9rZUpYN1d2dHZ1TC9ITy9KemkxckQvRFk0OUxYUmVUUmRzTCtSaHNUaFJqazFHM1FZNDZzbUI4QmxjeWpBNDVjRGh4UkQwd2dxa200aUdhcnFIV0RRWGFPbTAwbUN4VnVsTUc3Tm5xZTA2M2hFdGt0aGpPbnV2ZE5WdzdwTU9MVytwQVRKVGQ0NUNFa2tra1N2TFZDMUF5SHR5TmV5UEN4WVBCdThGa2xXTUdIRFlNSk00a2o5Y1NUOHh1M0RiMnZjdnVZcFMyNWpGRnBaWFc0U2FZVHBrNE9EZ2NEaERERFdaR1dTWkUwWW1GU3d5VFJMRVhEVE5TYWFxakVvZ0syeUZFWkJEQ2xrWVdpQW5Ma3BrUjBqazZsVXExVmlwVlRxVHBkVkc4MGFha3k2WktyT3BMVXV0UTJwc29iU1ZUTU1EYUtrektNMlFFaURSS0pCR0JVa295akxRd01LRGthRnRDN0RRd01LV1N4a29oWUcvT1lOVFFrT1FIZFJGQVlpZHZUcERNMXJOYUx5a21HVXFsVjlLU2FkQ3FVNUtORktjd0dVVXhFVlFwS0NVYVVRVHFqcGZMSEdwVU9LV0JnakdkVTg0SGE5b1BITzFTNVpBN3RpMWtRd0NrS013RmlrVlJoM3pKTmdIVnhaZG9zUjloM2ZuTVJCUmFNRTBCd1ozY0dFUkQxZG54b1NYVE0ybTIyOEEybVRSMHlPRkJ0b0pETzVFUkR1T21TTHJtMEhnWlNwV1VyRmpvQkdIRDNNRVFFWUowMGp3bVB1UHRMYmJIUGMyTEZjSlRER0pWRXBRb0xTMFNoWlN5eTBvaFd6TndCd2ppQ0txSUlNRkJpaHFrazZQb1JSb2NxU2wrZ2p4anBjUjB4YXRwK283dTIxZkhWcmNUb0wzL3FyTzFJNkIrc0hlUE1kdlVzdFd3VlZXS1EzSERFUlJSRVJJbTNLS0R1MGdIV1EwR3BDZ00rZWFTNmxXRjhCYXdMd29BaXRXdUE2Z0poeUF6WWt3a0UzdWp3RHVPaHlESnFtUHVEcnFDTmpmTEd5c3RNeXkxYmN0WWRYUW5aSjVPd2xIZTZrT0Y0WERCaXBGMW5lTWZKS3hTeVRTbXc3YkhTeGhSREtCYmRqWWN0Vm5qalJIbDZzeXJZeXBNWlZZa1lwbUxpNHhsaUpqSG44TEIyZDJ1bWQ1NHlsTThYMGV6dGVpcGZSWHI2WktoRWpSc0VvaVNFaEcxR1N2Uk13b0lNd29HRTE4SktwTk15RUtDSjIwa2FRalJsN3VKTUVpc3JDaHRneS8xWWx0bXJES05NclVaUVVWUnBtQzlGWGZsY0hIMkh2bG1FTkhuazlaWVcxVXNrcEd3WVBPUjhtREEwSzczeE1pd2RoMCtrQmU5bGlSZ2pBWU1BSTNHV2NzUnpDZ0c2SW9jTHpiZldHa08weERNTVRBN3kzbEhYMHB5S0FkRHRCaE9BL2tHU0Ywb1YveTNrUmR3RVJRR0x5dExZWGdrZk1zM1NrQjZtUXNpQzF6S1FMRUlZdk00SnpLd0lNd3N3cXBwVFpZalNncUlJQ1VsaEtWaG9SOHFHQlFNVmdqcUlHVkhTTzFoMFBBeEZJYVpoMXR4WG1pU2NYalBWemdQdlQwcDdIQ2tWZk5Vd29SZW00TzVFSHZIaWVWVVY0a1RwS2RhMnpjOGlBRHkvbUVXSmtJQVJTVzhnSk9BWTdlR0JqQWtrTlZob29TSEJtMG5VL2N5aXdOY1hCY3pDUVdHd3g4L1pWMEZZUmc1bS9qYnYyeDRzMWpDNHh2a3hYclVaeFZXUzY1KzNWOUtjT0EybUpsdEszK2JOVzErSk9lSFBpdzVJYTZIS3RTVGZlcFVWRSttajIwTytXYkpWUGxma2JkUzRUbUhBWFpmR2lVa3RCOENJT1VTUldSTExVY3JkMS9HT1RjUktFWXliUnIrc1RCRVpEMUlrS0NRYU9jTmd5a3pxajc0UjZZYWpNMHRPRlFHdUt5RlFLY2tJL0R4T05iTm1NSlNQTmFvc0JBbm96eHJmSWdEMVVoVUJjQmFlamRjQnNXUk1oSnJJNDVERHpnS3lnVzVoQUJZNm0zYkluZ25ld3BUclN0K3pER3JjVExOMkdtTVJIMkRqRDFuZXlkZHVqRkw2bkRsNDA2ejRPcmFZTWI0ZGNWTm9PVHRzYysyWk83ZmdzamM2RThLcHNRQ2lJaGcyZzkwYUFVaWtVTWVWOGZvN1pOZHpDMlF2VXExeTRRdmZIQjBHY2oxQzZWZ0doZ3FScWdjSXg1a2xPYndYQWVzZUd6UVlkQnNKVEVVZkZzcHpsS2FCdHpYU1Z4c0VWNzcwbHhWTnQ2THhLRjBLZFJtR1RjRTNxRURmZEpMQ3BLUkZvSUZCUlJSa1JpbFZ1eCtBN1puYXQ4bDFwb3ZDOGwxWmZySTlVTnB2U09WRlJEYWs2TytWZWUxK3BMbkVuSnJtQXFBN0lWdGFub3hra2FsR1RkcVlON09Pekc3ZE16VEduQjhPK2d6ZGRNa3NNMURVd0IwZzVVd2xoZ1poZ3lKYTB4amhscHgvSE9VbThtMk1ZVlpJY0h1a20rakloTk1FN2dydE9FdXYwUFloRVJxcHJBdkZOM2U0WHRjRkJhOTdxUnFabXlMOVEzTUJwMkQ3MGVDV2dXSVNVRUVvb1FwVTVCZ05nd0h1eE5Cenh4MEk1OFhXbVErbkU2ZnVWSFNVdUJUdVpwZ2NNSVo2UXNBT0duT0JwQmxkZk5OZDNyd1BFOTUxY29IMVc1TzkwblJwTEhIUjZMNHpnYXNYV1dXWGg0aVBNWStJNzJteWNpUzY4d2x5Q1FtQlcybkhlRHQzSEVZT0pLTFNIWVp3NVRHSEpjNFdoUVJTMExnOFR4U3NPUE5rcFNFSXJqaWhIUzBDaGpDNGswUU5TVXpXUzJ1NUtGcTVEQ1lXRkdubDNMQlM0aFNCdVdZaXlMMjBOdmxDTnZjM0ZHNXhzYUFiSFBscVdvVDU4amtFNXVrRzRPamNXMFRxRE5JUmxHQWdwYWJtb0daRTVOZ01wbDZrdzlqVXpJTXNVcDRJQWxZU1c0WVlOYTV6ZmVTTEpNMlNoWmhWMVJna3RlSDJFQ0NtR3pJWUZBMFp0YzB4WUFNVEFvWnV4SDNSZDRXbWZPbHNhV1k5ZEl3clNQWU9Bb3dVSVUzb0x5a3p3VmdDYjJXQVhNQ1RyaFNyZzBnRnpOQWgvS1I2UXU1em9lVzM1RzVPNDM0dzBORmc3OTVuTUx5R25BT3l3VUZrVzFqUW01M0Z1MWtobmM0SlNRV05pdzB1ZTBPdUZoMHlkNTl1ZEliUmJVZm8yQ3lyaElkUXNjdTRNTytYUnlCa1NUbVJObGttQlV2bER3SFJKOVZHSWUyeVRwVGdzKzdTK0JwaVBVMkVzU05rMHRkY1NZWmU2YUQ4L2Z6SU9UOUl5VjY1aWlZSkEwUVhrVENCbktQUk5Wd0ljaUlsZ1VsdU8wenlTdUhlbUVoc0ZHdGVwQWVWbjEwTUk5dklZQVlERzF0TDBMK3Q2UXlZR1llVjh5TVlJa1ZnOEthaVNmQ25zZVNNT1V3WmJYMFpqMWtYN3VEakoxbSs0OVlTUzZKbjBWM25mamtWUjVDQXE1UjRFVGdkMlpjU25EQ1pFc0JWaVozQ1hJYkV4b0pKSHpXdThtRU9rSlZ3NjVPaEgxSlZwdkU5VTU4WllvVkZEM1NlQTVPVjFQRE9ha0NUbGE5ZnpwRGFteGhKVG9pbkxsSk9TZWVjWUtHYlFOYnZ5OU5KVm5FaFlpZlhWSmsxaUc3WFNCaDl3Yk5aSjBBWkxSd0pxTEVORFJZNmhSY01EcmtaR3pPSmhVS0ZEbG42TU5yZUhoQmdJRkIyZjNDRXVZQXk3RDRXQzhURHdPWGo5MllvbEV4UTBqVlVRWXJJcllOWW5xU2EyclUyVk05ano2ekt5ZHNkYnJuSTRJSW9zQVljRmdXcWQ3ZUZ0dWRuVFdhc2ltemdpa2w0Qm9QV1RDc0VLUUdFaElvSlY4T3FUYmFiVitISmpONGFMRXBWYzFpYks2V1pOanlERWRzTzdFdDFud2VNNEhCRWdLUUpiUVVrQW5lQ01qSlJQdlJFd2xsc3BaYktxT2x6ZllNWXcxQ1RaSHdGUStIdzJuSjFuSThWa2QvaE9wcGRwTWFaY1RQaTNXYVllcW10YndDUWFkeHhHSTZrVUwyTjA2YmJPYW5BOUV3MzV1S25COHRlbjU3Yllrd1prbkdkbnRNS0ttcTdTWUlLRHpGVXJ1R1JTT1hJb3lFRWZsTXRTbXZnSFNWb2hRK1VaQ3RtUmdlUTk3T1NjSkJLSHcyaE04L1lubXpCYkZwd1hOSmlOUmJxc2YwTW5jT1N3WmxqRzlUZDdEVmp4SWhDVkppYW9GeUpEbDV6VUFEdnFSVHJFQzR0VnFLTWZHT3B5dHdlbHMzaTlzc3NKc1pqRURIQ1FuRDdYNVRnTit1T0tmQ2xNaXBTRkt0cXRITGxueUtFMmdGOTdISkhsT1E1SkhuZzFkWE1jbXB1eG0xWXN5dmt0YUkvTVJ1Zytnc3hEVmQvTXN4QXhYNXE2RHZkWUFUQ0JVRDdobEFZSkZQcER4UmU5d091TjUrU2R4Mm80enBwazBxcXFqV2x0U29qMG54ZGgybmlkT2ZCNm1NNVk0cVNxOTBsVDZ1emNFZ0hTM28zY0tyeERHQStZY1ZwWWVwd0E3YkRXUkh2OStUcjE0Ry9wT1RoNUhUNjFRK29Lbm9XSTluNmx5UldMT3R0SWNSZ29hTWhXQmpCWUdYTVJrREdqSVM1UVdHTURES1JaSldCeFFRRWVqRUNSaHhFUklUcTNaSUdTTDFaTGpTVkZKV2tCc29HeThUWnVycDBxZ0NkQ1ptbE1nT0FNRjJpemJrdkhkZUVjR3BlZWFkQXRpYm1lMkpKOFdoR2syZC9iNUpiU1VwWjVhakl0czlYbUJNSEQ5WDFMWUtpU1pOc1IxQ1hBeGNsZ3RodXJyNVRCZE02cEJhTUVWOHpCR2J2UndRNkZuamdlTndXRmsrTFNUQThhZGpHN01yZ1FNVmpQVExUYzNCc1ZDeEVUTFVLblFzSWZMSWxpckI5SGZEeFBybitkMHNleHhVOGpEbXJTc0ZrMHBhTFo3YjhUak9QZjA0YjFiRVdkY0gwdVJRTkdnNUpCdzB5RjNNR3lDMkUyV0owUDNjVHdrRloxQm9ZbzRSWndhU3BiSkRITFhUcHNiUVhyR2NXUlV3SU9hdXNNSmpDWFdKRzZORTYwaEpJb1VIMW1TMGk3SEMrS1VRa2pxVmRTZ0tUQnoyVFNhRGdEQnVjemdwVzZjSHA4bTl0TGN2c3Vzb29kb2hYakpsVFU0bHVBTWRPbG1aY3hCekRPTWloOStlTjlORzB0a2VKSml6c0s4Rkd0bGlyT1oydVdBWTBMQUJRUk1UcFlEaVVxYXlNYmdDc3pwTVNJYzV1NlozeUkxVFNZWXNZazdSWENPKzN2TWEwSWkrWDJsa0hJRHhvR3REMkVZTU5VYUNKQW9wUkttSnZtUnBGU2gwQWRNUWdZaWJWdmlJUy9nWStBRVNnaW1UNVFSRzVla3d6SFZLdk10NmsxRE54TWdQTTQ5eTVMMXBMNHRFVktuSkZNMEl1STlBNHdGNTdLUFhCMGVzb2pPa3dTNVVEUzJaNVdGdGVnMjI0RUg0NDBpdjIrM1R6NExyaTdoZzNoR3h2REo2WkNWSW5BMmVuckdqMys5OWhveFdqWVp2TFBwcTM2YS8zWjRtMmhLbGRVcE9CNmVvVFlHNGpJcXlSa2xwcUM5WFp2RWVsNDNKUXFVVkRVamV6a1RMRHY4ejczaUpGakY3S0Y5eG41clVrR0pZTUlSNDBrS3d5RklXYWlhVGFKTEVsaFRVaFd5VHo2VG1kT0lPSnZ4blFNc200UVdYazVrZW5lWnE0YktVeE1EQjZabktTMlpoaHVxZ2tDd0NMVStNZ2tUSzB1a3JFeWM5Qnl0Wk5sbDQyV3Fvd3hqdTVwdGRWMHpNM3gyU1pxVWtVdnQ0WUtnN3VCOXUycWUxL2xJOFNMelRseTdWcmNqRzQyaVZOYlNUNWxGWTg4dGI4SU4zR0c5SVdpajFKTkM2MEVJdDRlemJoYUlqZXhCb2tqSHo2Y3JOMjQzMjJRdWpnY2p3WlB2WDBxems1RGxCT1VOSk16TlkxMUltMGhwSUd4VUkraUYydHQyd3NDQXFPQkJTRUFrUlZoRlZtRllrWkJTM0trazRVUnBtbkZOTmtzNEthS05tWVdrYk9ZODA4T29hNzJ4bmU5c1NiWEtreWt5bWZabkx5SDVzY0RnUHZvZlBFREQ2QWhTcFpFdENJaVFEdGVEdTdPcFhoUkV3RDFhSWVvdkJLeFFIbFlqNjYxVUpzdGlZc0VJSkI0VjhqNkJQQXo4VnBYRm9oY0FDMkJVSTJLQVNTYnBIcU96dzhHbGpsSXRYZ2MvWmRweVJNOCtlZUVQUHNZZEM2Y0RJaGFDcVpTKy9ZZ21naXRwWkJmQVVFeXhqUnJVbXJMSjB5bzcvUDE2K3FkRW5FbktnK2FPNUc1U2RzZ2hhUUgycVdHUUcxMElYSG9jYWFlREppYjRGMnJ2R3N6SGJuSUI4WGtOaDhUTkpLTUJkRFRCZ1lMblE0YWtQVzh4a3FrdEh2bmx0bHhYdEdENDdwMzdHQmtlc1JXT0VZa1RkVVBXSlJtejQvTEpPdnVvL01XT1hJZVpFNDJJV3JiWUVzL0M1bWtIQ0hjTkpyaWZUTEVuSk9tSnEydUxyUmtoM05FOUI5U1BHanJRay9GSVR2aVNjSSt0ZlFaWHFaWmdWVFhsbmlaM3h4S0o1UDNVa1BCSjcwb3RVcCtSM0tWYWxMZVQ0WW5qS1U4ME4wZFBwZWtyRTg1TVhzV3BCUTdHTm5OWXNieHBMdXlMSmNWTUxDc0tnWnZacVZTeWxrTUVNTUNzNys3SmhkR2lKcVVkQWJDMk1vSWRhbXFaTnNOa29xWWxMRk5KTVRLSzcrWTUwUjJxb1dtS2cwSVdCQXZOQ0hLYVRJeUlkRmc3Q25VNVNkejFKUGRtRDNlbjlMUTQ5NDVNbmlXRmtBNVRFZ2pIMnN4M1d5SVdSNFIxQXB6T2JPZ1hueFBMSE9OYlZEOFZTbjNtU2ZVOXYzRTBlaGUyNHVYRnkwYXd4QlE2MU1KRVRpRTJBbEdyTW9TZ25UNTEwMnpndUpWZUQwekh3OE0zZlBtRm5zWGJKRW5acUdvalZPSW13T3B2QU93cnBwdTNsQm4vSmtJQ21idnkrRzRWd3JUSkZ4NjRsa1E2Rk9YSzM5TDdIWmIyVjhjRStLUGZIMUNjNG5PdTZRT3A1SFB3Szg2NDlTcDdIeG5sZUFlU0pKWXNSWGhMOXVhVkNranpBa1ZGVlJTU0p4b1RTa3lDQkpZRmdXRHVnOUxjMm9DMXk4U1E0ZzgwS0IrQjNFektraHdmZy95Z1hNYUJnRmxqdjhXZ1RtSzB2QmFZdFlLSUtrdWZtdll6L0xzWEJtOUhVTHJuMEpaVnhzYStVNUVGY2d4QzFsc3NZTGpKb3VkeE82VW1WQUYvWWN5RU1zOWlBWnB6dkRvWW5UY0RWcnZCYTJMYThoM2R6S1dDalZiM2dldHNOMklNWnFYV2xzSGFUQ2V1UUxhWkdiTzVnZXdvRW1oZ3pTU1dSMW5mL1MrVDRiOGZwUHJTdmdWWERmVW0wclpWZGhINS9jUEpxcTZlRWMrZUpYUldPb2V4M0UwdGlxVjVkTUpwYkZVcjdENGRTTkZTMDhuNU1qNy9zcjNWcURKZG5jbEFBaXpJRGVxQmg0a2dmYTIyNUpKU0piSHB0RXdkUTY4eG9GeGJpOUExRVhPV284SkFNaEwxOENLYUhSWGRSU0xJVlNxa25aSFU4L2V6b2pxT0d4T2lZNW9xdDVEbWZYVWJIdm1qRHBPVWxpU2Z0V2ROTk5NOFVhT1pwWWp0Sktpc21CR0dzaWVsSTdxM2JFR2pRNERHazBOMDU5WFZjT0lLOW9XOUNXc2dZTWtvZzBRTU5PUG5LWmxIczh5YTVuakhlbUlTZGs3blh4bktQZUs3Rk9kUytmREJCMEs0Q1pBNWxzZy9BSHdtREphek81bEloaXlQb2ZSOC9ialEyMEU4VVpoQllhUk5oV0FvSjc2RnJKdVdpU2NEcHVRbVVSbEppeUp6V1FuTnRCYm14SVVKZ2t4RmV3WG1pSUVRRFZkQ1ExcTFFQm9aTFJYWmx4U1NjTFNtQnZGb1pFa2xKSWFDTVJON0U1NWtuT3h3TFZnMUs0dFpWSnFxOXdndkt4aXBZcmpHMGhvQ0VuQ1EyakE3QXRyMFVWeWcxMmdWald5SmFOQkRMdElHMEphRytDYmhpRVlvWm9DTmhrRlF5QjNzWWRKRXhDYVl5eEJFYnVQM0xkTWVKeEY0VHRzTlZtRXd6T1RYSnd4eExWWGFhVklZVVRjYk9lTFZsMU1Nc3N3VXBnRXBDVWhTU05xRXB4dXRUSWhBWjRCWVJQdXJJRzdod0k0WnRJYWhPZ3NtcXlxVnRKbXhxY29jOFBIQ2NwZmlEcGRKeUowbktwMG5pYWlTWVhiTDFIekxUcDBoSnZDTWNTeUpTeTJQSWxQa1daWXhaMnBUdWJ1RGpPanRRT1hHU2N6dmpWRGhsbXljNnJqbzEwY3JUS0JyTnI5S1NER0Zkb21UTEVOaXlkK3c3MnFPbEtoWGU0Sm5QSk15VEZWYlZpeVV3c1k2aCtVbU41T0tPZExNZGV4NVdnVzhGb0dLQnFWNmNGaVJkbHVTc2lUcWtIa010QVRxV1NMSTVwNWtkczBlSU41T1RqZDA3cWVPb3krTllXaHhEM0pWdGRBYnpzY2l5UmFpcXF3Y1pZRStDYU95dmZyVjErbm1ocXpNMW0vU3ppSFYyNGE3dUptYTVFK2FlN0lIR1lwYnQzRHpCeEplR3BHRUhDcE9qdkl5QmlMd1pNbUZneGQ1NjBjQkxBeWdWQlFWRllWaFdDcGlWNzNkTFg3UGxKV1RpcTNSVU9nK01ad3lMNUxSS0dVdUE5UllDSHZQZ2JKN1A0T05BS3J4UE1DTVhNZG9qMEdFWUxuUXZleG5rQ1ZtTmczNElIWE10WXlWeUQ4NSttNHgrRlZkREltWXRpcXBXUlpJK0RCOENmZVo0cHM3QWNKT0pVOTkySHh3S21IeEhiVnIxV0d3MjNqaFJ0OHE3NmsrL0RlR2o1WkNiU05Zd2R1NmlnZ2FZRlJKRndRd1dEenhBdUxWOTVFdDBVSHdkaHlOaW5jaTlTTEk3bm5DRkZvUUNIcTVaYUdPU2tNZXNNOHlCMG1iSkM5TnFNZk1XdWtTR0VlZjJEcWdsTUlvbVFtK2xnb0t1V3ZIZWp5QTRrWlE3SzRrTDllZnBFL1UzbkJXNXltRGowSm9uUXBWSlJ1UFNNR21LVkVrN3ZySGNWejZGTzNvWjRsZFh1bm8zYTI0OTgwRHAxY05CaVlleU9EekVldy9ZUGJvOU03YlAxMGR4c2I4TTFqZ3gyR2tLakRlQ2NSb2g4eGRiWjVjQXZwcE1WamNTQVljNXdoNDVyQjZhQXBwRDEvWjg2MjBRUjl3ZXFQT05KdStJWHhVcFlvb2ZQNzRmdGZqZGI1ZHQrRlpiVVd4TXdHMGl3Sk5xd0VsbDk4dnhaTDV6R1VSQ1ZOQkZHYlVhQ1NiUkprMHlaTlIxVFdSNHVBSTRaL3ovWCt6OVUrUjlqNVB3VDcveTVpL3cvMUgrRVAvWFQvMzlaRC9peEQ2SDNKL1EvNTVtNzdpYktRM1FqQS8xZkoreitzWG42MUJRRC85ZnVNNi9SaDlSTS9VLzhGNXIza1RiOXovZTJUVmhtSE9OLzdVazMzZnR3TVpvc0ZzTG9sWXlQdTBuMjlvZnFVaE1UL1VNaTRVQWl0OEJ2L2hhSC9wc0FuelpMdjJGR1JZRUl3SUVwakRoZmlkVks0ZFJWbmZSSlQrNnlCc1ZDc3dZUjF2KzBibXI1NW5LdVU1Vm93OFExU3VNUmNWaUdQMWYxOHFVYjBCRHJYNVhEcUpGU1l5d3dsK3hXalVPZTV1ZjZyUHRrR0t6LzhoRVg2dUVpazZCd245NUI1V1Z4OVdzZ2Jnc2MxaWFjZysrUFR5VGdUSUhqMXdHMWFVT1FYdFFqd2Z0L3E0WXZGK3p6Yi9xbnp2OTYvVjl5a3lFVlg2YzNwODdPdzFmMzg2enNYV20yN3o5UGY4dndranB1bGRxOVdLK2t2SDlENVVYRnY0VFNOeGdCNHFUMnJpZUx5ZTZWL25mZGN6Nk5jenR2K0gweS9WK0xqOTdzT1E5aGJ6SE41ZzZ4ZThvYnZ2YmxSNzloREVjM3g0ZUx4ZVduMjkyRzdUaXM1WExkU1hVZWpuS2VmMmQ1MnY2M1hmODJ6dXZYa0cxTWMyVHkxZE93KytVOFByVjVrMEsvOHhpRDBMcDRiYWNNWi8vRjNKRk9GQ1FoM1lWN3dBPT0KIiIiCiMgRGVjb21wcmVzcyB0aGUgQ1VEQSBzb3VyY2UKQ1VEQV9TUkMgPSBiejIuZGVjb21wcmVzcyhiYXNlNjQuYjY0ZGVjb2RlKENVREFfU1JDX0NPTVBSRVNTRUQpKS5kZWNvZGUoJ3V0Zi04JykKaW1wb3J0IG9zCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiCm1vZHVsZSA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0nZnA4X21tJywKICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sCiAgICBjdWRhX3NvdXJjZXM9W0NVREFfU1JDXSwKICAgIGZ1bmN0aW9ucz1bJ2ZwOF9tbSddLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysyMCIsICItVV9fSElQX05PX0hBTEZfT1BFUkFUT1JTX18iLCAiLVVfX0hJUF9OT19IQUxGX0NPTlZFUlNJT05TX18iXSwKICAgIGV4dHJhX2NmbGFncz1bIi1PZmFzdCIsICItZmZhc3QtbWF0aCIsICItbWFyY2g9bmF0aXZlIiwgIi1mdW5yb2xsLWxvb3BzIiwgIi1mb21pdC1mcmFtZS1wb2ludGVyIl0sCikKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQogICAgbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQogICAgcmV0dXJuIGM=
No newline at end of file

Best evidence level for this revision: reported

JSON