LyoKICogbGludXgvZHJpdmVycy9hY29ybi9jaGFyL2RlZmtleW1hcC1sNzIwMC5jCiAqCiAqIERlZmF1bHQga2V5Ym9hcmQgbWFwcyBmb3IgTGlua1VwIFN5c3RlbXMgTDcyMDAgYm9hcmQKICoKICogQ29weXJpZ2h0IChDKSAyMDAwIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKICoKICogQ2hhbmdlbG9nOgogKiAgIDA4LTA0LTIwMDAgU0pIICAgICBDcmVhdGVkIGZpbGUKICovCgojaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KI2luY2x1ZGUgPGxpbnV4L2tleWJvYXJkLmg+CiNpbmNsdWRlIDxsaW51eC9rZC5oPgoKLyogTm9ybWFsIChtYXBzIDE6MSB3aXRoIG5vIHByb2Nlc3NpbmcpICovCiNkZWZpbmUgS1RuCTB4RjAKLyogRnVuY3Rpb24ga2V5cyAqLwojZGVmaW5lIEtUZgkweEYxCi8qIFNwZWNpYWwgKFBlcmZvcm1zIHNwZWNpYWwgaG91c2Uta2VlcGluZyBmdW5jcykgKi8KI2RlZmluZSBLVHMJMHhGMgojZGVmaW5lIEtJR05PUkUJCUsoS1RzLCAwKQkvKiBJZ25vcmUgKi8KI2RlZmluZSBLRU5URVIJCUsoS1RzLCAxKQkvKiBFbnRlciAqLwojZGVmaW5lIEtSRUdTCQlLKEtUcywgMikJLyogUmVncyAqLwojZGVmaW5lIEtNRU0JCUsoS1RzLCAzKQkvKiBNZW0gKi8KI2RlZmluZSBLU1RBVAkJSyhLVHMsIDQpCS8qIFN0YXRlICovCiNkZWZpbmUgS0lOVFIJCUsoS1RzLCA1KQkvKiBJbnRyICovCiNkZWZpbmUgS3NsCTYJLyogTGFzdCBjb25zb2xlICovCiNkZWZpbmUgS0NBUFNMSwkJSyhLVHMsIDcpCS8qIENhcHMgbG9jayAqLwojZGVmaW5lIEtOVU1MSwkJSyhLVHMsIDgpCS8qIE51bS1sb2NrICovCiNkZWZpbmUgS1NDUkxMSwkJSyhLVHMsIDkpCS8qIFNjcm9sbC1sb2NrICovCiNkZWZpbmUgS1NDUkxGT1IJSyhLVHMsMTApCS8qIFNjcm9sbCBmb3J3YXJkICovCiNkZWZpbmUgS1NDUkxCQUsJSyhLVHMsMTEpCS8qIFNjcm9sbCBiYWNrICovCiNkZWZpbmUgS1JFQk9PVAkJSyhLVHMsMTIpCS8qIFJlYm9vdCAqLwojZGVmaW5lIEtDQVBTT04JCUsoS1RzLDEzKQkvKiBDYXBzIG9uICovCiNkZWZpbmUgS0NPTVBPU0UJSyhLVHMsMTQpCS8qIENvbXBvc2UgKi8KI2RlZmluZSBLU0FLCQlLKEtUcywxNSkJLyogU0FLICovCiNkZWZpbmUgQ09OU19ERUMJSyhLVHMsMTYpCS8qIERlYyBjb25zb2xlICovCiNkZWZpbmUgQ09OU19JTkMJSyhLVHMsMTcpCS8qIEluY3IgY29uc29sZSAqLwojZGVmaW5lIEtGTE9QUFkJCUsoS1RzLDE4KQkvKiBGbG9wcHkgKi8KLyogS2V5IHBhZCAoMC05ID0gZGlnaXRzLCAxMD0rLCAxMT0tLCAxMj0qLCAxMz0vLCAxND1lbnRlciwgMTY9LiwgMTc9IyAqLwojZGVmaW5lIEtUcAkweEYzCiNkZWZpbmUgS1BBRF8wCQlLKEtUcCwgMCApCiNkZWZpbmUgS1BBRF8xICAJSyhLVHAsIDEgKQojZGVmaW5lIEtQQURfMgkJSyhLVHAsIDIgKQojZGVmaW5lIEtQQURfMwkJSyhLVHAsIDMgKQojZGVmaW5lIEtQQURfNAkJSyhLVHAsIDQgKQojZGVmaW5lIEtQQURfNQkJSyhLVHAsIDUgKQojZGVmaW5lIEtQQURfNgkJSyhLVHAsIDYgKQojZGVmaW5lIEtQQURfNwkJSyhLVHAsIDcgKQojZGVmaW5lIEtQQURfOAkJSyhLVHAsIDggKQojZGVmaW5lIEtQQURfOQkJSyhLVHAsIDkgKQojZGVmaW5lIEtQQURfUEwJCUsoS1RwLDEwICkKI2RlZmluZSBLUEFEX01JCQlLKEtUcCwxMSApCiNkZWZpbmUgS1BBRF9NTAkJSyhLVHAsMTIgKQojZGVmaW5lIEtQQURfRFYJCUsoS1RwLDEzICkKI2RlZmluZSBLUEFEX0VOCQlLKEtUcCwxNCApCiNkZWZpbmUgS1BBRF9EVAkJSyhLVHAsMTYgKQojZGVmaW5lIEtQQURfSFMJCUsoS1RwLDIwICkKLyogQ29uc29sZSBzd2l0Y2hpbmcgKi8KI2RlZmluZSBLQ24JMHhGNQovKiBDdXJzb3IgKi8KI2RlZmluZSBLVGMJMHhGNgojZGVmaW5lIEtjZAkwCS8qIEN1cnNvciBkb3duICovCiNkZWZpbmUgS2NsCTEJLyogQ3Vyc29yIGxlZnQgKi8KI2RlZmluZSBLY3IJMgkvKiBDdXJzb3IgcmlnaHQgKi8KI2RlZmluZSBLY3UJMwkvKiBDdXJzb3IgdXAgKi8KLyogU2hpZnQvYWx0IG1vZGlmaWVycyBldGMgKi8KI2RlZmluZSBLTWQJMHhGNwojZGVmaW5lIEtTSElGVAkJSyhLTWQsIDAgKQojZGVmaW5lIEtBTFRHUgkJSyhLTWQsIDEgKQojZGVmaW5lIEtDVFJMCQlLKEtNZCwgMiApCiNkZWZpbmUgS0FMVAkJSyhLTWQsIDMgKQovKiBNZXRhICovCiNkZWZpbmUgS010CTB4RjgKI2RlZmluZSBLQXMJMHhGOQojZGVmaW5lIEtQQURBXzAJCUsoS0FzLCAwICkKI2RlZmluZSBLUEFEQV8xCQlLKEtBcywgMSApCiNkZWZpbmUgS1BBREFfMgkJSyhLQXMsIDIgKQojZGVmaW5lIEtQQURBXzMJCUsoS0FzLCAzICkKI2RlZmluZSBLUEFEQV80CQlLKEtBcywgNCApCiNkZWZpbmUgS1BBREFfNQkJSyhLQXMsIDUgKQojZGVmaW5lIEtQQURBXzYJCUsoS0FzLCA2ICkKI2RlZmluZSBLUEFEQV83CQlLKEtBcywgNyApCiNkZWZpbmUgS1BBREFfOAkJSyhLQXMsIDggKQojZGVmaW5lIEtQQURBXzkJCUsoS0FzLCA5ICkKI2RlZmluZSBLUEFEQl8wCQlLKEtBcywxMCApCiNkZWZpbmUgS1BBREJfMQkJSyhLQXMsMTEgKQojZGVmaW5lIEtQQURCXzIJCUsoS0FzLDEyICkKI2RlZmluZSBLUEFEQl8zCQlLKEtBcywxMyApCiNkZWZpbmUgS1BBREJfNAkJSyhLQXMsMTQgKQojZGVmaW5lIEtQQURCXzUJCUsoS0FzLDE1ICkKI2RlZmluZSBLUEFEQl82CQlLKEtBcywxNiApCiNkZWZpbmUgS1BBREJfNwkJSyhLQXMsMTcgKQojZGVmaW5lIEtQQURCXzgJCUsoS0FzLDE4ICkKI2RlZmluZSBLUEFEQl85CQlLKEtBcywxOSApCi8qIExvY2tpbmcga2V5cyAqLwojZGVmaW5lIEtMawkweEZBCi8qIExldHRlcnMgKi8KI2RlZmluZSBLVGwJMHhGQgoKLyoKICogSGVyZSBpcyB0aGUgbGF5b3V0IG9mIHRoZSBrZXlzIGZvciB0aGUgRnVqaXRzdSBRV0VSVFkKICogc3R5bGUga2V5Ym9hcmQ6CiAqCiAqCXN0YXRpYyBjaGFyIEZ1aml0c3VfS2V5X1RhYmxlW10gPQogKgl7CiAqICAgICAgICBLQUxULCAnYCcgLCBLTlVMLCBLQ1RMLCBLRlVOLCBLRVNDLCAnMScgLCAnMicgLAogKgkgICc5JyAsICcwJyAsICctJyAsICc9JyAsIEtOVUwsIEtCU1AsIEtOVUwsIEtOVUwsCiAqCSAgS05VTCwgS0JTTCwgS1NIRiwgS05VTCwgS05VTCwgS0RFTCwgS05VTCwgJ3QnICwKICoJICAneScgLCAndScgLCAnaScgLCBLUkVULCBLU0hGLCBLUEdELCBLTlVMLCBLTlVMLAogKgkgIEtOVUwsIEtUQUIsIEtOVUwsIEtOVUwsIEtOVUwsICdxJyAsICd3JyAsICdlJyAsCiAqCSAgJ3InICwgJ28nICwgJ3AnICwgJ1snICwgS05VTCwgJ10nICwgS05VTCwgS05VTCwKICoJICBLTlVMLCAneicgLCBLTlVMLCBLTlVMLCBLTlVMLCBLU0hMLCBLTlVMLCBLTlVMLAogKgkgICdrJyAsICdsJyAsICc7JyAsIEtTUVQsIEtOVUwsIEtQR1UsIEtOVUwsIEtOVUwsCiAqCSAgS05VTCwgJ2EnICwgS05VTCwgS05VTCwgS05VTCwgJ3MnICwgJ2QnICwgJ2YnICwKICoJICAnZycgLCAnaCcgLCAnaicgLCAnLycgLCBLTlVMLCBLSE1FLCBLTlVMLCBLTlVMLAogKgkgIEtOVUwsICd4JyAsIEtOVUwsIEtOVUwsIEtOVUwsICdjJyAsICd2JyAsICdiJyAsCiAqCSAgJ24nICwgJ20nICwgJywnICwgJy4nICwgS05VTCwgJyAnICwgS05VTCwgS05VTCwKICoJICBLTlVMLCBLTlVMLCBLTlVMLCBLTlVMLCBLTlVMLCAnMycgLCAnNCcgLCAnNScgLAogKgkgICc2JyAsICc3JyAsICc4JyAsIEtOVUwsIEtQUkcsIEtOVUwsIEtFTkQsIEtOVUwsCiAqCX07CiAqLwoKdV9zaG9ydCBwbGFpbl9tYXBbTlJfS0VZU109CnsKCTB4ZjcwMywgMHhmMDYwLCAweGYyMDAsIDB4ZjcwMiwgMHhmMjAwLCAweGYwMWIsIDB4ZjAzMSwgMHhmMDMyLAoJMHhmMDM5LCAweGYwMzAsIDB4ZjAyZCwgMHhmMDNkLCAweGYyMDAsIDB4ZjA3ZiwgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZjA1YywgMHhmNzAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMTE2LCAweGYwMDAsIDB4ZmI3NCwKCTB4ZmI3OSwgMHhmYjc1LCAweGZiNjksIDB4ZjIwMSwgMHhmNzAwLCAweGY2MDAsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYwMDksIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZmI3MSwgMHhmYjc3LCAweGZiNjUsCgkweGZiNzIsIDB4ZmI2ZiwgMHhmYjcwLCAweGYwNWIsIDB4ZjIwMCwgMHhmMDVkLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmYjdhLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDcsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmYjZiLCAweGZiNmMsIDB4ZjAzYiwgMHhmMDI3LCAweGYyMDAsIDB4ZjYwMywgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZmI2MSwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmYjczLCAweGZiNjQsIDB4ZmI2NiwKCTB4ZmI2NywgMHhmYjY4LCAweGZiNmEsIDB4ZjAyZiwgMHhmMjAwLCAweGY2MDEsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGZiNzgsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZmI2MywgMHhmYjc2LCAweGZiNjIsCgkweGZiNmUsIDB4ZmI2ZCwgMHhmMDJjLCAweGYwMmUsIDB4ZjIwMCwgMHhmMDIwLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYwMzMsIDB4ZjAzNCwgMHhmMDM1LCAKCTB4ZjAzNiwgMHhmMDM3LCAweGYwMzgsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjYwMiwgMHhmMjAwLCAKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAKfTsKCnVfc2hvcnQgc2hpZnRfbWFwW05SX0tFWVNdPQp7CgkweGY3MDMsIDB4ZjA3ZSwgMHhmMjAwLCAweGY3MDIsIDB4ZjIwMCwgMHhmMDFiLCAweGYwMjEsIDB4ZjA0MCwKCTB4ZjAyOCwgMHhmMDI5LCAweGYwNWYsIDB4ZjAyYiwgMHhmMjAwLCAweGYwN2YsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYwN2MsIDB4ZjcwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjExNiwgMHhmMDAwLCAweGZiNTQsCgkweGZiNTksIDB4ZmI1NSwgMHhmYjQ5LCAweGYyMDEsIDB4ZjcwMCwgMHhmNjAwLCAweGYyMDAsIDB4ZjIwMCwKIAkweGYyMDAsIDB4ZjAwOSwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmYjUxLCAweGZiNTcsIDB4ZmI0NSwKCTB4ZmI1MiwgMHhmYjRmLCAweGZiNTAsIDB4ZjA3YiwgMHhmMjAwLCAweGYwN2QsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGZiNWEsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwNywgMHhmMjAwLCAweGYyMDAsCgkweGZiNGIsIDB4ZmI0YywgMHhmMDNhLCAweGYwMjIsIDB4ZjIwMCwgMHhmNjAzLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmYjQxLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGZiNTMsIDB4ZmI0NCwgMHhmYjQ2LAoJMHhmYjQ3LCAweGZiNDgsIDB4ZmI0YSwgMHhmMDNmLCAweGYyMDAsIDB4ZjYwMSwgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZmI1OCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmYjQzLCAweGZiNTYsIDB4ZmI0MiwKCTB4ZmI0ZSwgMHhmYjRkLCAweGYwM2MsIDB4ZjAzZSwgMHhmMjAwLCAweGYwMjAsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjAyMywgMHhmMDI0LCAweGYwMjUsIAoJMHhmMDVlLCAweGYwMjYsIDB4ZjAyYSwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmNjAyLCAweGYyMDAsIAoJMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIAoJMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIAp9OwoKdV9zaG9ydCBhbHRncl9tYXBbTlJfS0VZU109CnsKICBLSUdOT1JFICAgLEsoS0NuLDEyICksSyhLQ24sMTMgKSxLKEtDbiwxNCAgKSxLKEtDbiwxNSApLEsoS0NuLDE2ICksSyhLQ24sMTcgICksSyhLQ24sIDE4KSwKICBLKEtDbiwgMTkpLEsoS0NuLDIwICksSyhLQ24sMjEgKSxLKEtDbiwyMiAgKSxLKEtDbiwyMyApLEtJR05PUkUgICAsS1JFR1MgICAgICAsS0lOVFIgICAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsSyhLVG4sJ0AnKSxLSUdOT1JFICAgICxLKEtUbiwnJCcpLEtJR05PUkUgICAsS0lHTk9SRSAgICAsSyhLVG4sJ3snKSwKICBLKEtUbiwnWycpLEsoS1RuLCddJyksSyhLVG4sJ30nKSxLKEtUbiwnXFwnKSxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsSyhLVGYsMjEgKSwKICBLKEtUZiwyMCApLEsoS1RmLDI0ICksS05VTUxLICAgICxLUEFEX0RWICAgICxLUEFEX01MICAgLEtQQURfSFMgICAsS0lHTk9SRSAgICAsSyhLVGwsJ3EnKSwKICBLKEtUbCwndycpLEsoS1RsLCdlJyksSyhLVGwsJ3InKSxLKEtUbCwndCcgKSxLKEtUbCwneScpLEsoS1RsLCd1JyksSyhLVGwsJ2knICksSyhLVGwsJ28nKSwKICBLKEtUbCwncCcpLEtJR05PUkUgICAsSyhLVG4sJ34nKSxLSUdOT1JFICAgICxLKEtUZiwyMiApLEsoS1RmLDIzICksSyhLVGYsMjUgICksS1BBREJfNyAgICwKICBLUEFEQl84ICAgLEtQQURCXzkgICAsS1BBRF9NSSAgICxLQ1RSTCAgICAgICxLKEtBcywyMCApLEsoS1RsLCdzJyksSyhLQXMsMjMgICksSyhLQXMsMjUgKSwKICBLKEtUbCwnZycpLEsoS1RsLCdoJyksSyhLVGwsJ2onKSxLKEtUbCwnaycgKSxLKEtUbCwnbCcpLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0VOVEVSICAgICwKICBLUEFEQl80ICAgLEtQQURCXzUgICAsS1BBREJfNiAgICxLUEFEX1BMICAgICxLU0hJRlQgICAgLEtJR05PUkUgICAsSyhLVGwsJ3onICksSyhLVGwsJ3gnKSwKICBLKEtBcywyMiApLEsoS1RsLCd2JyksSyhLVGwsMjEgKSxLKEtUbCwnbicgKSxLKEtUbCwnbScpLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLU0hJRlQgICAgLEsoS1RjLEtjdSksS1BBREJfMSAgICxLUEFEQl8yICAgICxLUEFEQl8zICAgLEtDQVBTTEsgICAsS0FMVCAgICAgICAsS0lHTk9SRSAgICwKICBLQUxUR1IgICAgLEtDVFJMICAgICAsSyhLVGMsS2NsKSxLKEtUYyxLY2QgKSxLKEtUYyxLY3IpLEtQQURCXzAgICAsS1BBRF9EVCAgICAsS1BBRF9FTiAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKfTsKCnVfc2hvcnQgY3RybF9tYXBbTlJfS0VZU109CnsKCTB4ZjcwMywgMHhmMjAwLCAweGYyMDAsIDB4ZjcwMiwgMHhmMjAwLCAweGYyMDAsIDB4ZjAwMSwgMHhmMDAyLAoJMHhmMDA5LCAweGYwMDAsIDB4ZjAzMSwgMHhmMjAwLCAweGYyMDAsIDB4ZjA3ZiwgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZjAxYywgMHhmNzAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMTE2LCAweGYwMDAsIDB4ZjAyMCwKCTB4ZjAxOSwgMHhmMDE1LCAweGYwMDksIDB4ZjIwMSwgMHhmNzAwLCAweGY2MDAsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYwMDksIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjAxMSwgMHhmMDE3LCAweGYwMDUsCgkweGYwMTIsIDB4ZjAwZiwgMHhmMDEwLCAweGYwMWIsIDB4ZjIwMCwgMHhmMDFkLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmMDFhLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDcsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMDBiLCAweGYwMGMsIDB4ZjIwMCwgMHhmMDA3LCAweGYyMDAsIDB4ZjYwMywgMHhmMjAwLCAweGYyMDAsCgkweGYyMDAsIDB4ZjAwMSwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMDAxLCAweGYwMTMsIDB4ZjAwNiwKCTB4ZjAwNywgMHhmMDA4LCAweGYwMGEsIDB4ZjA3ZiwgMHhmMjAwLCAweGY2MDEsIDB4ZjIwMCwgMHhmMjAwLAoJMHhmMjAwLCAweGYwMTgsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjAwMywgMHhmMDE2LCAweGYwMDIsCgkweGYwMGUsIDB4ZjAwZCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMDAwLCAweGYyMDAsIDB4ZjIwMCwKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYwMWIsIDB4ZjAxYywgMHhmMDFkLCAKCTB4ZjAzNiwgMHhmMDM3LCAweGYwMzgsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjYwMiwgMHhmMjAwLCAKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAKCTB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjIwMCwgMHhmMjAwLCAweGYyMDAsIDB4ZjYwMiwgMHhmMjAwLCAKfTsKCnVfc2hvcnQgc2hpZnRfY3RybF9tYXBbTlJfS0VZU109CnsKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0ZMT1BQWSAgICAsS0lOVFIgICAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsSyhLVG4sIDAgKSxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLKEtUbiwzMSAgKSxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsSyhLVGYsMjEgKSwKICBLKEtUZiwyMCApLEsoS1RmLDI0ICksS05VTUxLICAgICxLUEFEX0RWICAgICxLUEFEX01MICAgLEtQQURfSFMgICAsS0lHTk9SRSAgICAsSyhLVG4sMTcgKSwKICBLKEtUbiwyMyApLEsoS1RuLCA1ICksSyhLVG4sMTggKSxLKEtUbiwyMCAgKSxLKEtUbiwyNSApLEsoS1RuLDIxICksSyhLVG4sIDkgICksSyhLVG4sMTUgKSwKICBLKEtUbiwxNiApLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLKEtUZiwyMiApLEsoS1RmLDIzICksSyhLVGYsMjUgICksS1BBRF83ICAgICwKICBLUEFEXzggICAgLEtQQURfOSAgICAsS1BBRF9NSSAgICxLQ1RSTCAgICAgICxLKEtUbiwgMSApLEsoS1RuLDE5ICksSyhLVG4sIDQgICksSyhLVG4sIDYgKSwKICBLKEtUbiwgNyApLEsoS1RuLCA4ICksSyhLVG4sMTAgKSxLKEtUbiwxMSAgKSxLKEtUbiwxMiApLEtJR05PUkUgICAsSyhLVG4sIDcgICksS0VOVEVSICAgICwKICBLUEFEXzQgICAgLEtQQURfNSAgICAsS1BBRF82ICAgICxLUEFEX1BMICAgICxLU0hJRlQgICAgLEtJR05PUkUgICAsSyhLVG4sMjYgICksSyhLVG4sMjQgKSwKICBLKEtUbiwgMyApLEsoS1RuLDIyICksSyhLVG4sIDIgKSxLKEtUbiwxNCAgKSxLKEtUbiwxMyApLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLU0hJRlQgICAgLEsoS1RjLEtjdSksS1BBRF8xICAgICxLUEFEXzIgICAgICxLUEFEXzMgICAgLEtDQVBTTEsgICAsS0FMVCAgICAgICAsSyhLVG4sIDAgKSwKICBLQUxUR1IgICAgLEtDVFJMICAgICAsSyhLVGMsS2NsKSxLKEtUYyxLY2QgKSxLKEtUYyxLY3IpLEtQQURfMCAgICAsS1BBRF9EVCAgICAsS1BBRF9FTiAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKfTsKCnVfc2hvcnQgYWx0X21hcFtOUl9LRVlTXT0KewogIEsoS010LDI3ICksSyhLQ24sIDAgKSxLKEtDbiwgMSApLEsoS0NuLCAyICApLEsoS0NuLCAzICksSyhLQ24sIDQgKSxLKEtDbiwgNSAgKSxLKEtDbiwgNiApLAogIEsoS0NuLCA3ICksSyhLQ24sIDggKSxLKEtDbiwgOSApLEsoS0NuLDEwICApLEsoS0NuLDExICksS0lHTk9SRSAgICxLU0NSTExLICAgICxLSU5UUiAgICAgLAogIEsoS010LCdgJyksSyhLTXQsJzEnKSxLKEtNdCwnMicpLEsoS010LCczJyApLEsoS010LCc0JyksSyhLTXQsJzUnKSxLKEtNdCwnNicgKSxLKEtNdCwnNycpLAogIEsoS010LCc4JyksSyhLTXQsJzknKSxLKEtNdCwnMCcpLEsoS010LCctJyApLEsoS010LCc9JyksSyhLTXQsJ6MnKSxLKEtNdCwxMjcgKSxLKEtUZiwyMSApLAogIEsoS1RmLDIwICksSyhLVGYsMjQgKSxLTlVNTEsgICAgLEtQQURfRFYgICAgLEtQQURfTUwgICAsS1BBRF9IUyAgICxLKEtNdCwgOSAgKSxLKEtNdCwncScpLAogIEsoS010LCd3JyksSyhLTXQsJ2UnKSxLKEtNdCwncicpLEsoS010LCd0JyApLEsoS010LCd5JyksSyhLTXQsJ3UnKSxLKEtNdCwnaScgKSxLKEtNdCwnbycpLAogIEsoS010LCdwJyksSyhLTXQsJ1snKSxLKEtNdCwnXScpLEsoS010LCdcXCcpLEsoS1RmLDIyICksSyhLVGYsMjMgKSxLKEtUZiwyNSAgKSxLUEFEQV83ICAgLAogIEtQQURBXzggICAsS1BBREFfOSAgICxLUEFEX01JICAgLEtDVFJMICAgICAgLEsoS010LCdhJyksSyhLTXQsJ3MnKSxLKEtNdCwnZCcgKSxLKEtNdCwnZicpLAogIEsoS010LCdnJyksSyhLTXQsJ2gnKSxLKEtNdCwnaicpLEsoS010LCdrJyApLEsoS010LCdsJyksSyhLTXQsJzsnKSxLKEtNdCwnXCcnKSxLKEtNdCwxMyApLAogIEtQQURBXzQgICAsS1BBREFfNSAgICxLUEFEQV82ICAgLEtQQURfUEwgICAgLEtTSElGVCAgICAsS0lHTk9SRSAgICxLKEtNdCwneicgKSxLKEtNdCwneCcpLAogIEsoS010LCdjJyksSyhLTXQsJ3YnKSxLKEtNdCwnYicpLEsoS010LCduJyApLEsoS010LCdtJyksSyhLTXQsJywnKSxLKEtNdCwnLicgKSxLSUdOT1JFICAgLAogIEtTSElGVCAgICAsSyhLVGMsS2N1KSxLUEFEQV8xICAgLEtQQURBXzIgICAgLEtQQURBXzMgICAsS0NBUFNMSyAgICxLQUxUICAgICAgICxLKEtNdCwnICcpLAogIEtBTFRHUiAgICAsS0NUUkwgICAgICxDT05TX0RFQyAgLEsoS1RjLEtjZCApLENPTlNfSU5DICAsS1BBREFfMCAgICxLUEFEX0RUICAgICxLUEFEX0VOICAgLAogIEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgLEtJR05PUkUgICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLAogIEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgLEtJR05PUkUgICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLAogIEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgLEtJR05PUkUgICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLAp9OwoKdV9zaG9ydCBjdHJsX2FsdF9tYXBbTlJfS0VZU109CnsKICBLSUdOT1JFICAgLEsoS0NuLCAwICksSyhLQ24sIDEgKSxLKEtDbiwgMiAgKSxLKEtDbiwgMyApLEsoS0NuLCA0ICksSyhLQ24sIDUgICksSyhLQ24sIDYgKSwKICBLKEtDbiwgNyApLEsoS0NuLCA4ICksSyhLQ24sIDkgKSxLKEtDbiwxMCAgKSxLKEtDbiwxMSApLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lOVFIgICAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsSyhLVGYsMjEgKSwKICBLKEtUZiwyMCApLEsoS1RmLDI0ICksS05VTUxLICAgICxLUEFEX0RWICAgICxLUEFEX01MICAgLEtQQURfSFMgICAsS0lHTk9SRSAgICAsSyhLTXQsMTcgKSwKICBLKEtNdCwyMyApLEsoS010LCA1ICksSyhLTXQsMTggKSxLKEtNdCwyMCAgKSxLKEtNdCwyNSApLEsoS010LDIxICksSyhLTXQsIDkgICksSyhLTXQsMTUgKSwKICBLKEtNdCwxNiApLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLUkVCT09UICAgLEsoS1RmLDIzICksSyhLVGYsMjUgICksS1BBRF83ICAgICwKICBLUEFEXzggICAgLEtQQURfOSAgICAsS1BBRF9NSSAgICxLQ1RSTCAgICAgICxLKEtNdCwgMSApLEsoS010LDE5ICksSyhLTXQsIDQgICksSyhLTXQsIDYgKSwKICBLKEtNdCwgNyApLEsoS010LCA4ICksSyhLTXQsMTAgKSxLKEtNdCwxMSAgKSxLKEtNdCwxMiApLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0VOVEVSICAgICwKICBLUEFEXzQgICAgLEtQQURfNSAgICAsS1BBRF82ICAgICxLUEFEX1BMICAgICxLU0hJRlQgICAgLEtJR05PUkUgICAsSyhLTXQsMjYgICksSyhLTXQsMjQgKSwKICBLKEtNdCwgMyApLEsoS010LDIyICksSyhLTXQsIDIgKSxLKEtNdCwxNCAgKSxLKEtNdCwxMyApLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLU0hJRlQgICAgLEsoS1RjLEtjdSksS1BBRF8xICAgICxLUEFEXzIgICAgICxLUEFEXzMgICAgLEtDQVBTTEsgICAsS0FMVCAgICAgICAsS0lHTk9SRSAgICwKICBLQUxUR1IgICAgLEtDVFJMICAgICAsSyhLVGMsS2NsKSxLKEtUYyxLY2QgKSxLKEtUYyxLY3IpLEtQQURfMCAgICAsS1JFQk9PVCAgICAsS1BBRF9FTiAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKICBLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICxLSUdOT1JFICAgICxLSUdOT1JFICAgLEtJR05PUkUgICAsS0lHTk9SRSAgICAsS0lHTk9SRSAgICwKfTsKCnVzaG9ydCAqa2V5X21hcHNbTUFYX05SX0tFWU1BUFNdID0gewoJcGxhaW5fbWFwLCBzaGlmdF9tYXAsIGFsdGdyX21hcCwgMCwKCWN0cmxfbWFwLCBzaGlmdF9jdHJsX21hcCwgMCwgMCwKCWFsdF9tYXAsIDAsIDAsIDAsCgljdHJsX2FsdF9tYXAsCTAKfTsKCnVuc2lnbmVkIGludCBrZXltYXBfY291bnQgPSA3OwoKLyoKICogUGhpbG9zb3BoeTogbW9zdCBwZW9wbGUgZG8gbm90IGRlZmluZSBtb3JlIHN0cmluZ3MsIGJ1dCB0aGV5IHdobyBkbwogKiBvZnRlbiB3YW50IHF1aXRlIGEgbG90IG9mIHN0cmluZyBzcGFjZS4gU28sIHdlIHN0YXRpY2FsbHkgYWxsb2NhdGUKICogdGhlIGRlZmF1bHQgYW5kIGFsbG9jYXRlIGR5bmFtaWNhbGx5IGluIGNodW5rcyBvZiA1MTIgYnl0ZXMuCiAqLwoKY2hhciBmdW5jX2J1ZltdID0gewoJJ1wwMzMnLCAnWycsICdbJywgJ0EnLCAwLAoJJ1wwMzMnLCAnWycsICdbJywgJ0InLCAwLAoJJ1wwMzMnLCAnWycsICdbJywgJ0MnLCAwLAoJJ1wwMzMnLCAnWycsICdbJywgJ0QnLCAwLAoJJ1wwMzMnLCAnWycsICdbJywgJ0UnLCAwLAoJJ1wwMzMnLCAnWycsICcxJywgJzcnLCAnficsIDAsCgknXDAzMycsICdbJywgJzEnLCAnOCcsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMScsICc5JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcyJywgJzAnLCAnficsIDAsCgknXDAzMycsICdbJywgJzInLCAnMScsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMicsICczJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcyJywgJzQnLCAnficsIDAsCgknXDAzMycsICdbJywgJzInLCAnNScsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMicsICc2JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcyJywgJzgnLCAnficsIDAsCgknXDAzMycsICdbJywgJzInLCAnOScsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMycsICcxJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICczJywgJzInLCAnficsIDAsCgknXDAzMycsICdbJywgJzMnLCAnMycsICd+JywgMCwKCSdcMDMzJywgJ1snLCAnMycsICc0JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcxJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICcyJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICczJywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICc0JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICc1JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICc2JywgJ34nLCAwLAoJJ1wwMzMnLCAnWycsICdNJywgMCwKCSdcMDMzJywgJ1snLCAnUCcsIDAsCn07CgpjaGFyICpmdW5jYnVmcHRyID0gZnVuY19idWY7CmludCBmdW5jYnVmc2l6ZSA9IHNpemVvZihmdW5jX2J1Zik7CmludCBmdW5jYnVmbGVmdCA9IDA7ICAgICAgICAgIC8qIHNwYWNlIGxlZnQgKi8KCmNoYXIgKmZ1bmNfdGFibGVbTUFYX05SX0ZVTkNdID0gewoJZnVuY19idWYgKyAwLAoJZnVuY19idWYgKyA1LAoJZnVuY19idWYgKyAxMCwKCWZ1bmNfYnVmICsgMTUsCglmdW5jX2J1ZiArIDIwLAoJZnVuY19idWYgKyAyNSwKCWZ1bmNfYnVmICsgMzEsCglmdW5jX2J1ZiArIDM3LAoJZnVuY19idWYgKyA0MywKCWZ1bmNfYnVmICsgNDksCglmdW5jX2J1ZiArIDU1LAoJZnVuY19idWYgKyA2MSwKCWZ1bmNfYnVmICsgNjcsCglmdW5jX2J1ZiArIDczLAoJZnVuY19idWYgKyA3OSwKCWZ1bmNfYnVmICsgODUsCglmdW5jX2J1ZiArIDkxLAoJZnVuY19idWYgKyA5NywKCWZ1bmNfYnVmICsgMTAzLAoJZnVuY19idWYgKyAxMDksCglmdW5jX2J1ZiArIDExNSwKCWZ1bmNfYnVmICsgMTIwLAoJZnVuY19idWYgKyAxMjUsCglmdW5jX2J1ZiArIDEzMCwKCWZ1bmNfYnVmICsgMTM1LAoJZnVuY19idWYgKyAxNDAsCglmdW5jX2J1ZiArIDE0NSwKCTAsCgkwLAoJZnVuY19idWYgKyAxNDksCgkwLAp9OwoKc3RydWN0IGtiZGlhY3J1YyBhY2NlbnRfdGFibGVbTUFYX0RJQUNSXSA9IHsKCXsnYCcsICdBJywgMDMwMH0sCXsnYCcsICdhJywgMDM0MH0sCgl7J1wnJywgJ0EnLCAwMzAxfSwJeydcJycsICdhJywgMDM0MX0sCgl7J14nLCAnQScsIDAzMDJ9LAl7J14nLCAnYScsIDAzNDJ9LAoJeyd+JywgJ0EnLCAwMzAzfSwJeyd+JywgJ2EnLCAwMzQzfSwKCXsnIicsICdBJywgMDMwNH0sCXsnIicsICdhJywgMDM0NH0sCgl7J08nLCAnQScsIDAzMDV9LAl7J28nLCAnYScsIDAzNDV9LAoJeycwJywgJ0EnLCAwMzA1fSwJeycwJywgJ2EnLCAwMzQ1fSwKCXsnQScsICdBJywgMDMwNX0sCXsnYScsICdhJywgMDM0NX0sCgl7J0EnLCAnRScsIDAzMDZ9LAl7J2EnLCAnZScsIDAzNDZ9LAoJeycsJywgJ0MnLCAwMzA3fSwJeycsJywgJ2MnLCAwMzQ3fSwKCXsnYCcsICdFJywgMDMxMH0sCXsnYCcsICdlJywgMDM1MH0sCgl7J1wnJywgJ0UnLCAwMzExfSwJeydcJycsICdlJywgMDM1MX0sCgl7J14nLCAnRScsIDAzMTJ9LAl7J14nLCAnZScsIDAzNTJ9LAoJeyciJywgJ0UnLCAwMzEzfSwJeyciJywgJ2UnLCAwMzUzfSwKCXsnYCcsICdJJywgMDMxNH0sCXsnYCcsICdpJywgMDM1NH0sCgl7J1wnJywgJ0knLCAwMzE1fSwJeydcJycsICdpJywgMDM1NX0sCgl7J14nLCAnSScsIDAzMTZ9LAl7J14nLCAnaScsIDAzNTZ9LAoJeyciJywgJ0knLCAwMzE3fSwJeyciJywgJ2knLCAwMzU3fSwKCXsnLScsICdEJywgMDMyMH0sCXsnLScsICdkJywgMDM2MH0sCgl7J34nLCAnTicsIDAzMjF9LAl7J34nLCAnbicsIDAzNjF9LAoJeydgJywgJ08nLCAwMzIyfSwJeydgJywgJ28nLCAwMzYyfSwKCXsnXCcnLCAnTycsIDAzMjN9LAl7J1wnJywgJ28nLCAwMzYzfSwKCXsnXicsICdPJywgMDMyNH0sCXsnXicsICdvJywgMDM2NH0sCgl7J34nLCAnTycsIDAzMjV9LAl7J34nLCAnbycsIDAzNjV9LAoJeyciJywgJ08nLCAwMzI2fSwJeyciJywgJ28nLCAwMzY2fSwKCXsnLycsICdPJywgMDMzMH0sCXsnLycsICdvJywgMDM3MH0sCgl7J2AnLCAnVScsIDAzMzF9LAl7J2AnLCAndScsIDAzNzF9LAoJeydcJycsICdVJywgMDMzMn0sCXsnXCcnLCAndScsIDAzNzJ9LAoJeydeJywgJ1UnLCAwMzMzfSwJeydeJywgJ3UnLCAwMzczfSwKCXsnIicsICdVJywgMDMzNH0sCXsnIicsICd1JywgMDM3NH0sCgl7J1wnJywgJ1knLCAwMzM1fSwJeydcJycsICd5JywgMDM3NX0sCgl7J1QnLCAnSCcsIDAzMzZ9LAl7J3QnLCAnaCcsIDAzNzZ9LAoJeydzJywgJ3MnLCAwMzM3fSwJeyciJywgJ3knLCAwMzc3fSwKCXsncycsICd6JywgMDMzN30sCXsnaScsICdqJywgMDM3N30sCn07Cgp1bnNpZ25lZCBpbnQgYWNjZW50X3RhYmxlX3NpemUgPSA2ODsK