LyoKICogbGludXgvZHJpdmVycy9hY29ybi9jaGFyL2RlZmtleW1hcC1sNzIwMC5jCiAqCiAqIERlZmF1bHQga2V5Ym9hcmQgbWFwcyBmb3IgTGlua1VwIFN5c3RlbXMgTDcyMDAgYm9hcmQKICoKICogQ29weXJpZ2h0IChDKSAyMDAwIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKICoKICogQ2hhbmdlbG9nOgogKiAgIDA4LTA0LTIwMDAgU0pIICAgICBDcmVhdGVkIGZpbGUKICovCgojaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KI2luY2x1ZGUgPGxpbnV4L2tleWJvYXJkLmg+CiNpbmNsdWRlIDxsaW51eC9rZC5oPgoKLyogTm9ybWFsIChtYXBzIDE6MSB3aXRoIG5vIHByb2Nlc3NpbmcpICovCiNkZWZpbmUgS1RuCTB4RjAKLyogRnVuY3Rpb24ga2V5cyAqLwojZGVmaW5lIEtUZgkweEYxCi8qIFNwZWNpYWwgKFBlcmZvcm1zIHNwZWNpYWwgaG91c2Uta2VlcGluZyBmdW5jcykgKi8KI2RlZmluZSBLVHMJMHhGMgojZGVmaW5lIEtJR05PUkUJCUsoS1RzLCAwKQkvKiBJZ25vcmUgKi8KI2RlZmluZSBLRU5URVIJCUsoS1RzLCAxKQkvKiBFbnRlciAqLwojZGVmaW5lIEtSRUdTCQlLKEtUcywgMikJLyogUmVncyAqLwojZGVmaW5lIEtNRU0JCUsoS1RzLCAzKQkvKiBNZW0gKi8KI2RlZmluZSBLU1RBVAkJSyhLVHMsIDQpCS8qIFN0YXRlICovCiNkZWZpbmUgS0lOVFIJCUsoS1RzLCA1KQkvKiBJbnRyICovCiNkZWZpbmUgS3NsCTYJLyogTGFzdCBjb25zb2xlICovCiNkZWZpbmUgS0NBUFNMSwkJSyhLVHMsIDcpCS8qIENhcHMgbG9jayAqLwojZGVmaW5lIEtOVU1MSwkJSyhLVHMsIDgpCS8qIE51bS1sb2NrICovCiNkZWZpbmUgS1NDUkxMSwkJSyhLVHMsIDkpCS8qIFNjcm9sbC1sb2NrICovCiNkZWZpbmUgS1NDUkxGT1IJSyhLVHMsMTApCS8qIFNjcm9sbCBmb3J3YXJkICovCiNkZWZpbmUgS1NDUkxCQUsJSyhLVHMsMTEpCS8qIFNjcm9sbCBiYWNrICovCiNkZWZpbmUgS1JFQk9PVAkJSyhLVHMsMTIpCS8qIFJlYm9vdCAqLwojZGVmaW5lIEtDQVBTT04JCUsoS1RzLDEzKQkvKiBDYXBzIG9uICovCiNkZWZpbmUgS0NPTVBPU0UJSyhLVHMsMTQpCS8qIENvbXBvc2UgKi8KI2RlZmluZSBLU0FLCQlLKEtUcywxNSkJLyogU0FLICovCiNkZWZpbmUgQ09OU19ERUMJSyhLVHMsMTYpCS8qIERlYyBjb25zb2xlICovCiNkZWZpbmUgQ09OU19JTkMJSyhLVHMsMTcpCS8qIEluY3IgY29uc29sZSAqLwojZGVmaW5lIEtGTE9QUFkJCUsoS1RzLDE4KQkvKiBGbG9wcHkgKi8KLyogS2V5IHBhZCAoMC05ID0gZGlnaXRzLCAxMD0rLCAxMT0tLCAxMj0qLCAxMz0vLCAxND1lbnRlciwgMTY9LiwgMTc9IyAqLwojZGVmaW5lIEtUcAkweEYzCiNkZWZpbmUgS1BBRF8wCQlLKEtUcCwgMCApCiNkZWZpbmUgS1BBRF8xICAJSyhLVHAsIDEgKQojZGVmaW5lIEtQQURfMgkJSyhLVHAsIDIgKQojZGVmaW5lIEtQQURfMwkJSyhLVHAsIDMgKQojZGVmaW5lIEtQQURfNAkJSyhLVHAsIDQgKQojZGVmaW5lIEtQQURfNQkJSyhLVHAsIDUgKQojZGVmaW5lIEtQQURfNgkJSyhLVHAsIDYgKQojZGVmaW5lIEtQQURfNwkJSyhLVHAsIDcgKQojZGVmaW5lIEtQQURfOAkJSyhLVHAsIDggKQojZGVmaW5lIEtQQURfOQkJSyhLVHAsIDkgKQojZGVmaW5lIEtQQURfUEwJCUsoS1RwLDEwICkKI2RlZmluZSBLUEFEX01JCQlLKEtUcCwxMSApCiNkZWZpbmUgS1BBRF9NTAkJSyhLVHAsMTIgKQojZGVmaW5lIEtQQURfRFYJCUsoS1RwLDEzICkKI2RlZmluZSBLUEFEX0VOCQlLKEtUcCwxNCApCiNkZWZpbmUgS1BBRF9EVAkJSyhLVHAsMTYgKQojZGVmaW5lIEtQQURfSFMJCUsoS1RwLDIwICkKLyogQ29uc29sZSBzd2l0Y2hpbmcgKi8KI2RlZmluZSBLQ24JMHhGNQovKiBDdXJzb3IgKi8KI2RlZmluZSBLVGMJMHhGNgojZGVmaW5lIEtjZAkwCS8qIEN1cnNvciBkb3duICovCiNkZWZpbmUgS2NsCTEJLyogQ3Vyc29yIGxlZnQgKi8KI2RlZmluZSBLY3IJMgkvKiBDdXJzb3IgcmlnaHQgKi8KI2RlZmluZSBLY3UJMwkvKiBDdXJzb3IgdXAgKi8KLyogU2hpZnQvYWx0IG1vZGlmaWVycyBldGMgKi8KI2RlZmluZSBLTWQJMHhGNwojZGVmaW5lIEtTSElGVAkJSyhLTWQsIDAgKQojZGVmaW5lIEtBTFRHUgkJSyhLTWQsIDEgKQojZGVmaW5lIEtDVFJMCQlLKEtNZCwgMiApCiNkZWZpbmUgS0FMVAkJSyhLTWQsIDMgKQovKiBNZXRhICovCiNkZWZpbmUgS010CTB4RjgKI2RlZmluZSBLQXMJMHhGOQojZGVmaW5lIEtQQURBXzAJCUsoS0FzLCAwICkKI2RlZmluZSBLUEFEQV8xCQlLKEtBcywgMSApCiNkZWZpbmUgS1BBREFfMgkJSyhLQXMsIDIgKQojZGVmaW5lIEtQQURBXzMJCUsoS0FzLCAzICkKI2RlZmluZSBLUEFEQV80CQlLKEtBcywgNCApCiNkZWZpbmUgS1BBREFfNQkJSyhLQXMsIDUgKQojZGVmaW5lIEtQQURBXzYJCUsoS0FzLCA2ICkKI2RlZmluZSBLUEFEQV83CQlLKEtBcywgNyApCiNkZWZpbmUgS1BBREFfOAkJSyhLQXMsIDggKQojZGVmaW5lIEtQQURBXzkJCUsoS0FzLCA5ICkKI2RlZmluZSBLUEFEQl8wCQlLKEtBcywxMCApCiNkZWZpbmUgS1BBREJfMQkJSyhLQXMsMTEgKQojZGVmaW5lIEtQQURCXzIJCUsoS0FzLDEyICkKI2RlZmluZSBLUEFEQl8zCQlLKEtBcywxMyApCiNkZWZpbmUgS1BBREJfNAkJSyhLQXMsMTQgKQojZGVmaW5lIEtQQURCXzUJCUsoS0FzLDE1ICkKI2RlZmluZSBLUEFEQl82CQlLKEtBcywxNiApCiNkZWZpbmUgS1BBREJfNwkJSyhLQXMsMTcgKQojZGVmaW5lIEtQQURCXzgJCUsoS0FzLDE4ICkKI2RlZmluZSBLUEFEQl85CQlLKEtBcywxOSApCi8qIExvY2tpbmcga2V5cyAqLwojZGVmaW5lIEtMawkweEZBCi8qIExldHRlcnMgKi8KI2RlZmluZSBLVGwJMHhGQgoKLyoKICogSGVyZSBpcyB0aGUgbGF5b3V0IG9mIHRoZSBrZXlzIGZvciB0aGUgRnVqaXRzdSBRV0VSVFkKICogc3R5bGUga2V5Ym9hcmQ6CiAqCiAqCXN0YXRpYyBjaGFyIEZ1aml0c3VfS2V5X1RhYmxlW10gPQogKgl7CiAqICAgICAgICBLQUxULCAnYCcgLCBLTlVMLCBLQ1RMLCBLRlVOLCBLRVNDLCAnMScgLCAnMicgLAogKgkgICc5JyAsICcwJyAsICctJyAsICc9JyAsIEtOVUwsIEtCU1AsIEtOVUwsIEtOVUwsCiAqCSAgS05VTCwgS0JTTCwgS1NIRiwgS05VTCwgS05VTCwgS0RFTCwgS05VTCwgJ3QnICwKICoJICAneScgLCAndScgLCAnaScgLCBLUkVULCBLU0hGLCBLUEdELCBLTlVMLCBLTlVMLAogKgkgIEtOVUwsIEtUQUIsIEtOVUwsIEtOVUwsIEtOVUwsICdxJyAsICd3JyAsICdlJyAsCiAqCSAgJ3InICwgJ28nICwgJ3AnICwgJ1snICwgS05VTCwgJ10nICwgS05VTCwgS05VTCwKICoJICBLTlVMLCAneicgLCBLTlVMLCBLTlVMLCBLTlVMLCBLU0hMLCBLTlVMLCBLTlVMLAogKgkgICdrJyAsICdsJyAsICc7JyAsIEtTUVQsIEtOVUwsIEtQR1UsIEtOVUwsIEtOVUwsCiAqCSAgS05VTCwgJ2EnICwgS05VTCwgS05VTCwgS05VTCwgJ3MnICwgJ2QnICwgJ2YnICwKICoJICAnZycgLCAnaCcgLCAnaicgLCAnLycgLCBLTlVMLCBLSE1FLCBLTlVMLCBLTlVMLAogKgkgIEtOVUwsICd4JyAsIEtOVUwsIEtOVUwsIEtOVUwsICdjJyAsICd2JyAsICdiJyAsCiAqCSAgJ24nICwgJ20nICwgJywnICwgJy4nICwgS05VTCwgJyAnICwgS05VTCwgS05VTCwKICoJICBLTlVMLCBLTlVMLCBLTlVMLCBLTlVMLCBLTlVMLCAnMycgLCAnNCcgLCAnNScgLAogKgkgICc2JyAsICc3JyAsICc4JyAsIEtOVUwsIEtQUkcsIEtOVUwsIEtFTkQsIEtOVUwsCiAqCX07CiAqLwoKdV9zaG9ydCBwbGFpbl9tYXBbTlJfS0VZU109CnsKCTB4ZjcwMywgMHhmMDYwLCAweGYyMDAsIDB4ZjcwMiwgMHhmMjAwLCAweGYwMWIsIDB4ZjAzMSwgMHhmMDMyLAoJMHhmMDM5LCAweGYwMzAsIDB4ZjAyZCwgMHhmMDNkLCAweGYyMDAsIDB4ZjA3ZiwgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZjA1YywgMHhmNzAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMTE2LCAweGYwMDAsIDB4ZmI3NCwKCTB4ZmI3OSwgMHhmYjc1LCAweGZiNjksIDB4ZjIwMSwgMHhmNzAwLCAweGY2MDAsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYwMDksIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZmI3MSwgMHhmYjc3LCAweGZiNjUsCgkweGZiNzIsIDB4ZmI2ZiwgMHhmYjcwLCAweGYwNWIsIDB4ZjIwMCwgMHhmMDVkLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmYjdhLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDcsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmYjZiLCAweGZiNmMsIDB4ZjAzYiwgMHhmMDI3LCAweGYyMDAsIDB4ZjYwMywgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZmI2MSwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmYjczLCAweGZiNjQsIDB4ZmI2NiwKCTB4ZmI2NywgMHhmYjY4LCAweGZiNmEsIDB4ZjAyZiwgMHhmMjAwLCAweGY2MDEsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGZiNzgsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZmI2MywgMHhmYjc2LCAweGZiNjIsCgkweGZiNmUsIDB4ZmI2ZCwgMHhmMDJjLCAweGYwMmUsIDB4ZjIwMCwgMHhmMDIwLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYwMzMsIDB4ZjAzNCwgMHhmMDM1LCAKCTB4ZjAzNiwgMHhmMDM3LCAweGYwMzgsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjYwMiwgMHhmMjAwLCAKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAKfTsKCnVfc2hvcnQgc2hpZnRfbWFwW05SX0tFWVNdPQp7CgkweGY3MDMsIDB4ZjA3ZSwgMHhmMjAwLCAweGY3MDIsIDB4ZjIwMCwgMHhmMDFiLCAweGYwMjEsIDB4ZjA0MCwKCTB4ZjAyOCwgMHhmMDI5LCAweGYwNWYsIDB4ZjAyYiwgMHhmMjAwLCAweGYwN2YsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYwN2MsIDB4ZjcwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjExNiwgMHhmMDAwLCAweGZiNTQsCgkweGZiNTksIDB4ZmI1NSwgMHhmYjQ5LCAweGYyMDEsIDB4ZjcwMCwgMHhmNjAwLCAweGYyMDAsIDB4ZjIwMCwKIAkweGYyMDAsIDB4ZjAwOSwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmYjUxLCAweGZiNTcsIDB4ZmI0NSwKCTB4ZmI1MiwgMHhmYjRmLCAweGZiNTAsIDB4ZjA3YiwgMHhmMjAwLCAweGYwN2QsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGZiNWEsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwNywgMHhmMjAwLCAweGYyMDAsCgkweGZiNGIsIDB4ZmI0YywgMHhmMDNhLCAweGYwMjIsIDB4ZjIwMCwgMHhmNjAzLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmYjQxLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGZiNTMsIDB4ZmI0NCwgMHhmYjQ2LAoJMHhmYjQ3LCAweGZiNDgsIDB4ZmI0YSwgMHhmMDNmLCAweGYyMDAsIDB4ZjYwMSwgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZmI1OCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmYjQzLCAweGZiNTYsIDB4ZmI0MiwKCTB4ZmI0ZSwgMHhmYjRkLCAweGYwM2MsIDB4ZjAzZSwgMHhmMjAwLCAweGYwMjAsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjAyMywgMHhmMDI0LCAweGYwMjUsIAoJMHhmMDVlLCAweGYwMjYsIDB4ZjAyYSwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmNjAyLCAweGYyMDAsIAoJMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIAoJMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIAp9OwoKdV9zaG9ydCBhbHRncl9tYXBbTlJfS0VZU109CnsKICBLSUdOT1JFICAgLEsoS0NuLDEyICksSyhLQ24sMTMgKSxLKEtDbiwxNCAgKSxLKEtDbiwxNSApLEsoS0NuLDE2ICksSyhLQ24sMTcgICksSyhLQ24sIDE4KSwKICBLKEtDbiwgMTkpLEsoS0NuLDIwICksSyhLQ24sMjEgKSxLKEtDbiwyMiAgKSxLKEtDbiwyMyApLEtJR05PUkUgICAsS1JFR1MgICAgICAsS0lOVFIgICAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsSyhLVG4sJ0AnKSxLSUdOT1JFICAgICxLKEtUbiwnJCcpLEtJR05PUkUgICAsS0lHTk9SRSAgICAsSyhLVG4sJ3snKSwKICBLKEtUbiwnWycpLEsoS1RuLCddJyksSyhLVG4sJ30nKSxLKEtUbiwnXFwnKSxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsSyhLVGYsMjEgKSwKICBLKEtUZiwyMCApLEsoS1RmLDI0ICksS05VTUxLICAgICxLUEFEX0RWICAgICxLUEFEX01MICAgLEtQQURfSFMgICAsS0lHTk9SRSAgICAsSyhLVGwsJ3EnKSwKICBLKEtUbCwndycpLEsoS1RsLCdlJyksSyhLVGwsJ3InKSxLKEtUbCwndCcgKSxLKEtUbCwneScpLEsoS1RsLCd1JyksSyhLVGwsJ2knICksSyhLVGwsJ28nKSwKICBLKEtUbCwncCcpLEtJR05PUkUgICAsSyhLVG4sJ34nKSxLSUdOT1JFICAgICxLKEtUZiwyMiApLEsoS1RmLDIzICksSyhLVGYsMjUgICksS1BBREJfNyAgICwKICBLUEFEQl84ICAgLEtQQURCXzkgICAsS1BBRF9NSSAgICxLQ1RSTCAgICAgICxLKEtBcywyMCApLEsoS1RsLCdzJyksSyhLQXMsMjMgICksSyhLQXMsMjUgKSwKICBLKEtUbCwnZycpLEsoS1RsLCdoJyksSyhLVGwsJ2onKSxLKEtUbCwnaycgKSxLKEtUbCwnbCcpLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0VOVEVSICAgICwKICBLUEFEQl80ICAgLEtQQURCXzUgICAsS1BBREJfNiAgICxLUEFEX1BMICAgICxLU0hJRlQgICAgLEtJR05PUkUgICAsSyhLVGwsJ3onICksSyhLVGwsJ3gnKSwKICBLKEtBcywyMiApLEsoS1RsLCd2JyksSyhLVGwsMjEgKSxLKEtUbCwnbicgKSxLKEtUbCwnbScpLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLU0hJRlQgICAgLEsoS1RjLEtjdSksS1BBREJfMSAgICxLUEFEQl8yICAgICxLUEFEQl8zICAgLEtDQVBTTEsgICAsS0FMVCAgICAgICAsS0lHTk9SRSAgICwKICBLQUxUR1IgICAgLEtDVFJMICAgICAsSyhLVGMsS2NsKSxLKEtUYyxLY2QgKSxLKEtUYyxLY3IpLEtQQURCXzAgICAsS1BBRF9EVCAgICAsS1BBRF9FTiAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKfTsKCnVfc2hvcnQgY3RybF9tYXBbTlJfS0VZU109CnsKCTB4ZjcwMywgMHhmMjAwLCAweGYyMDAsIDB4ZjcwMiwgMHhmMjAwLCAweGYyMDAsIDB4ZjAwMSwgMHhmMDAyLAoJMHhmMDA5LCAweGYwMDAsIDB4ZjAzMSwgMHhmMjAwLCAweGYyMDAsIDB4ZjA3ZiwgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZjAxYywgMHhmNzAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMTE2LCAweGYwMDAsIDB4ZjAyMCwKCTB4ZjAxOSwgMHhmMDE1LCAweGYwMDksIDB4ZjIwMSwgMHhmNzAwLCAweGY2MDAsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYwMDksIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjAxMSwgMHhmMDE3LCAweGYwMDUsCgkweGYwMTIsIDB4ZjAwZiwgMHhmMDEwLCAweGYwMWIsIDB4ZjIwMCwgMHhmMDFkLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmMDFhLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDcsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMDBiLCAweGYwMGMsIDB4ZjIwMCwgMHhmMDA3LCAweGYyMDAsIDB4ZjYwMywgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZjAwMSwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMDAxLCAweGYwMTMsIDB4ZjAwNiwKCTB4ZjAwNywgMHhmMDA4LCAweGYwMGEsIDB4ZjA3ZiwgMHhmMjAwLCAweGY2MDEsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYwMTgsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjAwMywgMHhmMDE2LCAweGYwMDIsCgkweGYwMGUsIDB4ZjAwZCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMDAwLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYwMWIsIDB4ZjAxYywgMHhmMDFkLCAKCTB4ZjAzNiwgMHhmMDM3LCAweGYwMzgsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjYwMiwgMHhmMjAwLCAKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjYwMiwgMHhmMjAwLCAKfTsKCnVfc2hvcnQgc2hpZnRfY3RybF9tYXBbTlJfS0VZU109CnsKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0ZMT1BQWSAgICAsS0lOVFIgICAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsSyhLVG4sIDAgKSxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLKEtUbiwzMSAgKSxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsSyhLVGYsMjEgKSwKICBLKEtUZiwyMCApLEsoS1RmLDI0ICksS05VTUxLICAgICxLUEFEX0RWICAgICxLUEFEX01MICAgLEtQQURfSFMgICAsS0lHTk9SRSAgICAsSyhLVG4sMTcgKSwKICBLKEtUbiwyMyApLEsoS1RuLCA1ICksSyhLVG4sMTggKSxLKEtUbiwyMCAgKSxLKEtUbiwyNSApLEsoS1RuLDIxICksSyhLVG4sIDkgICksSyhLVG4sMTUgKSwKICBLKEtUbiwxNiApLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLKEtUZiwyMiApLEsoS1RmLDIzICksSyhLVGYsMjUgICksS1BBRF83ICAgICwKICBLUEFEXzggICAgLEtQQURfOSAgICAsS1BBRF9NSSAgICxLQ1RSTCAgICAgICxLKEtUbiwgMSApLEsoS1RuLDE5ICksSyhLVG4sIDQgICksSyhLVG4sIDYgKSwKICBLKEtUbiwgNyApLEsoS1RuLCA4ICksSyhLVG4sMTAgKSxLKEtUbiwxMSAgKSxLKEtUbiwxMiApLEtJR05PUkUgICAsSyhLVG4sIDcgICksS0VOVEVSICAgICwKICBLUEFEXzQgICAgLEtQQURfNSAgICAsS1BBRF82ICAgICxLUEFEX1BMICAgICxLU0hJRlQgICAgLEtJR05PUkUgICAsSyhLVG4sMjYgICksSyhLVG4sMjQgKSwKICBLKEtUbiwgMyApLEsoS1RuLDIyICksSyhLVG4sIDIgKSxLKEtUbiwxNCAgKSxLKEtUbiwxMyApLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLU0hJRlQgICAgLEsoS1RjLEtjdSksS1BBRF8xICAgICxLUEFEXzIgICAgICxLUEFEXzMgICAgLEtDQVBTTEsgICAsS0FMVCAgICAgICAsSyhLVG4sIDAgKSwKICBLQUxUR1IgICAgLEtDVFJMICAgICAsSyhLVGMsS2NsKSxLKEtUYyxLY2QgKSxLKEtUYyxLY3IpLEtQQURfMCAgICAsS1BBRF9EVCAgICAsS1BBRF9FTiAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKfTsKCnVfc2hvcnQgYWx0X21hcFtOUl9LRVlTXT0KewogIEsoS010LDI3ICksSyhLQ24sIDAgKSxLKEtDbiwgMSApLEsoS0NuLCAyICApLEsoS0NuLCAzICksSyhLQ24sIDQgKSxLKEtDbiwgNSAgKSxLKEtDbiwgNiApLAogIEsoS0NuLCA3ICksSyhLQ24sIDggKSxLKEtDbiwgOSApLEsoS0NuLDEwICApLEsoS0NuLDExICksS0lHTk9SRSAgICxLU0NSTExLICAgICxLSU5UUiAgICAgLAogIEsoS010LCdgJyksSyhLTXQsJzEnKSxLKEtNdCwnMicpLEsoS010LCczJyApLEsoS010LCc0JyksSyhLTXQsJzUnKSxLKEtNdCwnNicgKSxLKEtNdCwnNycpLAogIEsoS010LCc4JyksSyhLTXQsJzknKSxLKEtNdCwnMCcpLEsoS010LCctJyApLEsoS010LCc9JyksSyhLTXQsJ6MnKSxLKEtNdCwxMjcgKSxLKEtUZiwyMSApLAogIEsoS1RmLDIwICksSyhLVGYsMjQgKSxLTlVNTEsgICAgLEtQQURfRFYgICAgLEtQQURfTUwgICAsS1BBRF9IUyAgICxLKEtNdCwgOSAgKSxLKEtNdCwncScpLAogIEsoS010LCd3JyksSyhLTXQsJ2UnKSxLKEtNdCwncicpLEsoS010LCd0JyApLEsoS010LCd5JyksSyhLTXQsJ3UnKSxLKEtNdCwnaScgKSxLKEtNdCwnbycpLAogIEsoS010LCdwJyksSyhLTXQsJ1snKSxLKEtNdCwnXScpLEsoS010LCdcXCcpLEsoS1RmLDIyICksSyhLVGYsMjMgKSxLKEtUZiwyNSAgKSxLUEFEQV83ICAgLAogIEtQQURBXzggICAsS1BBREFfOSAgICxLUEFEX01JICAgLEtDVFJMICAgICAgLEsoS010LCdhJyksSyhLTXQsJ3MnKSxLKEtNdCwnZCcgKSxLKEtNdCwnZicpLAogIEsoS010LCdnJyksSyhLTXQsJ2gnKSxLKEtNdCwnaicpLEsoS010LCdrJyApLEsoS010LCdsJyksSyhLTXQsJzsnKSxLKEtNdCwnXCcnKSxLKEtNdCwxMyApLAogIEtQQURBXzQgICAsS1BBREFfNSAgICxLUEFEQV82ICAgLEtQQURfUEwgICAgLEtTSElGVCAgICAsS0lHTk9SRSAgICxLKEtNdCwneicgKSxLKEtNdCwneCcpLAogIEsoS010LCdjJyksSyhLTXQsJ3YnKSxLKEtNdCwnYicpLEsoS010LCduJyApLEsoS010LCdtJyksSyhLTXQsJywnKSxLKEtNdCwnLicgKSxLSUdOT1JFICAgLAogIEtTSElGVCAgICAsSyhLVGMsS2N1KSxLUEFEQV8xICAgLEtQQURBXzIgICAgLEtQQURBXzMgICAsS0NBUFNMSyAgICxLQUxUICAgICAgICxLKEtNdCwnICcpLAogIEtBTFRHUiAgICAsS0NUUkwgICAgICxDT05TX0RFQyAgLEsoS1RjLEtjZCApLENPTlNfSU5DICAsS1BBREFfMCAgICxLUEFEX0RUICAgICxLUEFEX0VOICAgLAogIEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgLEtJR05PUkUgICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLAogIEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgLEtJR05PUkUgICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLAogIEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgLEtJR05PUkUgICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLAp9OwoKdV9zaG9ydCBjdHJsX2FsdF9tYXBbTlJfS0VZU109CnsKICBLSUdOT1JFICAgLEsoS0NuLCAwICksSyhLQ24sIDEgKSxLKEtDbiwgMiAgKSxLKEtDbiwgMyApLEsoS0NuLCA0ICksSyhLQ24sIDUgICksSyhLQ24sIDYgKSwKICBLKEtDbiwgNyApLEsoS0NuLCA4ICksSyhLQ24sIDkgKSxLKEtDbiwxMCAgKSxLKEtDbiwxMSApLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lOVFIgICAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsSyhLVGYsMjEgKSwKICBLKEtUZiwyMCApLEsoS1RmLDI0ICksS05VTUxLICAgICxLUEFEX0RWICAgICxLUEFEX01MICAgLEtQQURfSFMgICAsS0lHTk9SRSAgICAsSyhLTXQsMTcgKSwKICBLKEtNdCwyMyApLEsoS010LCA1ICksSyhLTXQsMTggKSxLKEtNdCwyMCAgKSxLKEtNdCwyNSApLEsoS010LDIxICksSyhLTXQsIDkgICksSyhLTXQsMTUgKSwKICBLKEtNdCwxNiApLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLUkVCT09UICAgLEsoS1RmLDIzICksSyhLVGYsMjUgICksS1BBRF83ICAgICwKICBLUEFEXzggICAgLEtQQURfOSAgICAsS1BBRF9NSSAgICxLQ1RSTCAgICAgICxLKEtNdCwgMSApLEsoS010LDE5ICksSyhLTXQsIDQgICksSyhLTXQsIDYgKSwKICBLKEtNdCwgNyApLEsoS010LCA4ICksSyhLTXQsMTAgKSxLKEtNdCwxMSAgKSxLKEtNdCwxMiApLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0VOVEVSICAgICwKICBLUEFEXzQgICAgLEtQQURfNSAgICAsS1BBRF82ICAgICxLUEFEX1BMICAgICxLU0hJRlQgICAgLEtJR05PUkUgICAsSyhLTXQsMjYgICksSyhLTXQsMjQgKSwKICBLKEtNdCwgMyApLEsoS010LDIyICksSyhLTXQsIDIgKSxLKEtNdCwxNCAgKSxLKEtNdCwxMyApLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLU0hJRlQgICAgLEsoS1RjLEtjdSksS1BBRF8xICAgICxLUEFEXzIgICAgICxLUEFEXzMgICAgLEtDQVBTTEsgICAsS0FMVCAgICAgICAsS0lHTk9SRSAgICwKICBLQUxUR1IgICAgLEtDVFJMICAgICAsSyhLVGMsS2NsKSxLKEtUYyxLY2QgKSxLKEtUYyxLY3IpLEtQQURfMCAgICAsS1JFQk9PVCAgICAsS1BBRF9FTiAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKfTsKCnVzaG9ydCAqa2V5X21hcHNbTUFYX05SX0tFWU1BUFNdID0gewoJcGxhaW5fbWFwLCBzaGlmdF9tYXAsIGFsdGdyX21hcCwgMCwKCWN0cmxfbWFwLCBzaGlmdF9jdHJsX21hcCwgMCwgMCwKCWFsdF9tYXAsIDAsIDAsIDAsCgljdHJsX2FsdF9tYXAsCTAKfTsKCnVuc2lnbmVkIGludCBrZXltYXBfY291bnQgPSA3OwoKLyoKICogUGhpbG9zb3BoeTogbW9zdCBwZW9wbGUgZG8gbm90IGRlZmluZSBtb3JlIHN0cmluZ3MsIGJ1dCB0aGV5IHdobyBkbwogKiBvZnRlbiB3YW50IHF1aXRlIGEgbG90IG9mIHN0cmluZyBzcGFjZS4gU28sIHdlIHN0YXRpY2FsbHkgYWxsb2NhdGUKICogdGhlIGRlZmF1bHQgYW5kIGFsbG9jYXRlIGR5bmFtaWNhbGx5IGluIGNodW5rcyBvZiA1MTIgYnl0ZXMuCiAqLwoKY2hhciBmdW5jX2J1ZltdID0gewoJJ1wwMzMnLCAnWycsICdbJywgJ0EnLCAwLAoJJ1wwMzMnLCAnWycsICdbJywgJ0InLCAwLAoJJ1wwMzMnLCAnWycsICdbJywgJ0MnLCAwLAoJJ1wwMzMnLCAnWycsICdbJywgJ0QnLCAwLAoJJ1wwMzMnLCAnWycsICdbJywgJ0UnLCAwLAoJJ1wwMzMnLCAnWycsICcxJywgJzcnLCAnficsIDAsCgknXDAzMycsICdbJywgJzEnLCAnOCcsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMScsICc5JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcyJywgJzAnLCAnficsIDAsCgknXDAzMycsICdbJywgJzInLCAnMScsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMicsICczJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcyJywgJzQnLCAnficsIDAsCgknXDAzMycsICdbJywgJzInLCAnNScsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMicsICc2JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcyJywgJzgnLCAnficsIDAsCgknXDAzMycsICdbJywgJzInLCAnOScsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMycsICcxJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICczJywgJzInLCAnficsIDAsCgknXDAzMycsICdbJywgJzMnLCAnMycsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMycsICc0JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcxJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcyJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICczJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICc0JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICc1JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICc2JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICdNJywgMCwKCSdcMDMzJywgJ1snLCAnUCcsIDAsCn07CgpjaGFyICpmdW5jYnVmcHRyID0gZnVuY19idWY7CmludCBmdW5jYnVmc2l6ZSA9IHNpemVvZihmdW5jX2J1Zik7CmludCBmdW5jYnVmbGVmdCA9IDA7ICAgICAgICAgIC8qIHNwYWNlIGxlZnQgKi8KCmNoYXIgKmZ1bmNfdGFibGVbTUFYX05SX0ZVTkNdID0gewoJZnVuY19idWYgKyAwLAoJZnVuY19idWYgKyA1LAoJZnVuY19idWYgKyAxMCwKCWZ1bmNfYnVmICsgMTUsCglmdW5jX2J1ZiArIDIwLAoJZnVuY19idWYgKyAyNSwKCWZ1bmNfYnVmICsgMzEsCglmdW5jX2J1ZiArIDM3LAoJZnVuY19idWYgKyA0MywKCWZ1bmNfYnVmICsgNDksCglmdW5jX2J1ZiArIDU1LAoJZnVuY19idWYgKyA2MSwKCWZ1bmNfYnVmICsgNjcsCglmdW5jX2J1ZiArIDczLAoJZnVuY19idWYgKyA3OSwKCWZ1bmNfYnVmICsgODUsCglmdW5jX2J1ZiArIDkxLAoJZnVuY19idWYgKyA5NywKCWZ1bmNfYnVmICsgMTAzLAoJZnVuY19idWYgKyAxMDksCglmdW5jX2J1ZiArIDExNSwKCWZ1bmNfYnVmICsgMTIwLAoJZnVuY19idWYgKyAxMjUsCglmdW5jX2J1ZiArIDEzMCwKCWZ1bmNfYnVmICsgMTM1LAoJZnVuY19idWYgKyAxNDAsCglmdW5jX2J1ZiArIDE0NSwKCTAsCgkwLAoJZnVuY19idWYgKyAxNDksCgkwLAp9OwoKc3RydWN0IGtiZGlhY3IgYWNjZW50X3RhYmxlW01BWF9ESUFDUl0gPSB7Cgl7J2AnLCAnQScsICdcMzAwJ30sCXsnYCcsICdhJywgJ1wzNDAnfSwKCXsnXCcnLCAnQScsICdcMzAxJ30sCXsnXCcnLCAnYScsICdcMzQxJ30sCgl7J14nLCAnQScsICdcMzAyJ30sCXsnXicsICdhJywgJ1wzNDInfSwKCXsnficsICdBJywgJ1wzMDMnfSwJeyd+JywgJ2EnLCAnXDM0Myd9LAoJeyciJywgJ0EnLCAnXDMwNCd9LAl7JyInLCAnYScsICdcMzQ0J30sCgl7J08nLCAnQScsICdcMzA1J30sCXsnbycsICdhJywgJ1wzNDUnfSwKCXsnMCcsICdBJywgJ1wzMDUnfSwJeycwJywgJ2EnLCAnXDM0NSd9LAoJeydBJywgJ0EnLCAnXDMwNSd9LAl7J2EnLCAnYScsICdcMzQ1J30sCgl7J0EnLCAnRScsICdcMzA2J30sCXsnYScsICdlJywgJ1wzNDYnfSwKCXsnLCcsICdDJywgJ1wzMDcnfSwJeycsJywgJ2MnLCAnXDM0Nyd9LAoJeydgJywgJ0UnLCAnXDMxMCd9LAl7J2AnLCAnZScsICdcMzUwJ30sCgl7J1wnJywgJ0UnLCAnXDMxMSd9LAl7J1wnJywgJ2UnLCAnXDM1MSd9LAoJeydeJywgJ0UnLCAnXDMxMid9LAl7J14nLCAnZScsICdcMzUyJ30sCgl7JyInLCAnRScsICdcMzEzJ30sCXsnIicsICdlJywgJ1wzNTMnfSwKCXsnYCcsICdJJywgJ1wzMTQnfSwJeydgJywgJ2knLCAnXDM1NCd9LAoJeydcJycsICdJJywgJ1wzMTUnfSwJeydcJycsICdpJywgJ1wzNTUnfSwKCXsnXicsICdJJywgJ1wzMTYnfSwJeydeJywgJ2knLCAnXDM1Nid9LAoJeyciJywgJ0knLCAnXDMxNyd9LAl7JyInLCAnaScsICdcMzU3J30sCgl7Jy0nLCAnRCcsICdcMzIwJ30sCXsnLScsICdkJywgJ1wzNjAnfSwKCXsnficsICdOJywgJ1wzMjEnfSwJeyd+JywgJ24nLCAnXDM2MSd9LAoJeydgJywgJ08nLCAnXDMyMid9LAl7J2AnLCAnbycsICdcMzYyJ30sCgl7J1wnJywgJ08nLCAnXDMyMyd9LAl7J1wnJywgJ28nLCAnXDM2Myd9LAoJeydeJywgJ08nLCAnXDMyNCd9LAl7J14nLCAnbycsICdcMzY0J30sCgl7J34nLCAnTycsICdcMzI1J30sCXsnficsICdvJywgJ1wzNjUnfSwKCXsnIicsICdPJywgJ1wzMjYnfSwJeyciJywgJ28nLCAnXDM2Nid9LAoJeycvJywgJ08nLCAnXDMzMCd9LAl7Jy8nLCAnbycsICdcMzcwJ30sCgl7J2AnLCAnVScsICdcMzMxJ30sCXsnYCcsICd1JywgJ1wzNzEnfSwKCXsnXCcnLCAnVScsICdcMzMyJ30sCXsnXCcnLCAndScsICdcMzcyJ30sCgl7J14nLCAnVScsICdcMzMzJ30sCXsnXicsICd1JywgJ1wzNzMnfSwKCXsnIicsICdVJywgJ1wzMzQnfSwJeyciJywgJ3UnLCAnXDM3NCd9LAoJeydcJycsICdZJywgJ1wzMzUnfSwJeydcJycsICd5JywgJ1wzNzUnfSwKCXsnVCcsICdIJywgJ1wzMzYnfSwJeyd0JywgJ2gnLCAnXDM3Nid9LAoJeydzJywgJ3MnLCAnXDMzNyd9LAl7JyInLCAneScsICdcMzc3J30sCgl7J3MnLCAneicsICdcMzM3J30sCXsnaScsICdqJywgJ1wzNzcnfSwKfTsKCnVuc2lnbmVkIGludCBhY2NlbnRfdGFibGVfc2l6ZSA9IDY4Owo=