3v4l.org

run code in 300+ PHP versions simultaneously
<?php /* public function validateWebhook($signature, $payload) { $this->load->library('3PLib', '', '3PLib'); $sets = $this->3PLib->getWebKeySet($apiKey); if (empty($sets->keys) || !isset($sets->keys[0]->n, $sets->keys[0]->e, $sets->keys[0]->kty, $sets->keys[0]->kid, $sets->keys[0]->alg)) { throw new Exception('Missing/Invalid Request Credentials -- Request Denied'); } $wks = $sets->keys[0]; $components = [ 'kty' => $wks->kty, // RSA 'e' => $wks->e, // AQAB 'n' => $wks->n, // ANV-aocctqt5xDRnqomCgsO9dm4hM0Qd75TqG7z2G5Z89JQ7SRy2ok-fIJRiSU5-JfjP... 'kid' => $wks->kid, // 2021-10-14 'alg' => $wks->alg, // RS256 ]; */ /* //exit(var_dump($components)); $components = [ 'kty' => 'RSA', 'e' => 'AQAB', 'n' => 'ANV-aocctqt5xDRnqomCgsO9dm4hM0Qd75TqG7z2G5Z89JQ7SRy2ok-fIJRiSU5-JfjPc3uph3gSOXyqlNoEh4YGL2R4AP7jhxy9xv0gDVtj1tExB_mmk8EUbmj8hTIrfAgEJrDeB4qMk7MkkKxhHkhLNEJEPZfgYHcHcuKjp2l_vtpiuR9Ouz0febB9K4gLozrp9KHW2K-m0z02-tSurxmmij5nnJ-CEgp0wXcCS4w4G0jve4hcLlL9FU8HKxrb0d4rMQgM3VAal6yG5pwMdtrsch7xA-occwWFC_tHgpDJGNvOJNFtuk7Cit_aom-6U6ssGF13sUtdrog2ePWjVxc=', 'kid' => '2020-03-18', 'alg' => 'RSA256', ]; $rsa = JOSE_JWK::decode($components); // => phpseclib\Crypt\RSA instance $publicKey = $rsa->createKey()['publickey']; /* $publicKey : -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbScb43YAZ+alz2xbLmYoudXfL JaiYnZGnE7h8M2FA++W22+ZQQV+KJcNpolIG0PtAp9W9DRxnndOXqqsYpyX1aA1L LVJ5NEdcTewyfiyCohZBXc3DgcwsWEnL5TjUpobplEzN1AduPB97/zCA2qFaRDMP 7rAmMRhMlp0evVGkzwIDAQAB -----END PUBLIC KEY----- */ /* //$rsa->setSignatureMode(2); //$rsa->setHash('sha256'); $rsa->loadKey($publicKey); //exit(var_dump($rsa)); // this is a fully populated object //$rsa = new Crypt_RSA(); //$rsa->setSignatureMode(2); //exit(var_dump($rsa->sign($signature))); //exit(var_dump($rsa->sign($signature))); // exit($rsa->verify($payload, (new JOSE_JWT($payload))->sign($signature)->toString())); // invalid signature /*exit( var_dump( [ 'signature' => $signature, 'decoded sig' => base64_decode($signature), 'encoded sig' => base64_encode($signature), 'rsa->sign()' => $rsa->sign($signature), 'JOSE_JWT(payload)->sign()' => (new JOSE_JWT($payload))->sign($signature)->toString(), ] ) );*/ /* exit(var_dump($rsa->verify($payload, $rsa->sign($signature)))); // this actually satisfies (strlen($s) == $this->k) check (both = 128); there are no user errors, but returns false //$rsa->loadKey($publicKey); //exit(var_dump($rsa)); // this is a fully populated object //exit(var_dump($rsa->sign($signature))); // output: ��|�w��b_�u�/ґ���p��s�jt�����_U��}8�/��EY�'�r73d� �V˿ø֪���G���ҫ���lU8���ci�[.�n��gT��C��.&`v��G?dR�"��p'z5��Y�� //exit((new JOSE_JWT($payload))->sign($signature)->toString()); // has 2 dots: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzY2FsYXIiOiJ7XCJldmVudElkXCI6XCJmMjk0YzVhZi02MTdhLTQ0ZjktYjg4Ni02ZWFiNTNhZGZlMjNcIixcIm9mZmljZUlkXCI6XCI5XCIsXCJldmVudFR5cGVcIjpcIlBST1BFUlRZX0NPTVBMSUFOQ0VfUkVRVUVTVEVEXCIsXCJldmVudFwiOntcInJlY2lwaWVudFBhcnRuZXJDb2RlXCI6XCJTTU9LRV9BTEFSTVNfMTMwMFwiLFwibGFzdFVwZGF0ZWREYXRlVGltZVwiOlwiMjAyMS0xMC0xMlQwNTowMjowMC4yNDFaXCIsXCJwcm9wZXJ0eUNvbXBsaWFuY2VQcm9jZXNzXCI6e1wicHJvcGVydHlDb21wbGlhbmNlUHJvY2Vzc0lkXCI6XCI0MjljMDE1OC0wMjNhLTQ4OTUtOGEzNC00ZjM5ZjliOThkZTJcIixcInByb3BlcnR5Q29tcGxpYW5jZUlkXCI6XCIwNzUxZjE0NS01OGYzLTRhNWYtOWFjZi05Yzg1NmUyMmJhMWNcIixcInByb3BlcnR5SWRcIjpcIjMxOVwiLFwic3RhdHVzXCI6XCJBQ1RJVkVcIixcInJlbmV3QnlEYXRlXCI6XCIyMDIxLTEwLTMxXCIsXCJjcmVhdGVkRGF0ZVRpbWVcIjpcIjIwMjEtMTAtMTJUMDU6MDI6MDAuMjQxWlwiLFwibGFzdFVwZGF0ZWREYXRlVGltZVwiOlwiMjAyMS0xMC0xMlQwNTowMjowMC4yNDFaXCIsXCJyZWxhdGVkRmlsZXNcIjpbXX0sXCJyZWxhdGVkUmVzb3VyY2VzXCI6e1wicHJvcGVydHlDb21wbGlhbmNlXCI6e1wicHJvcGVydHlDb21wbGlhbmNlSWRcIjpcIjA3NTFmMTQ1LTU4ZjMtNGE1Zi05YWNmLTljODU2ZTIyYmExY1wiLFwicHJvcGVydHlJZFwiOlwiMzE5XCIsXCJ0eXBlXCI6XCJTTU9LRV9BTEFSTVNcIixcImV4cGlyeURhdGVcIjpcIjIwMjEtMTAtMzFcIixcImxhc3RJbnNwZWN0aW9uRGF0ZVwiOlwiMjAyMS0xMC0wMVwiLFwibm90ZXNcIjpcInRlc3Qgd2l0aCB1bml0IG51bWJlclwiLFwiaGFzMjAyMkxlZ2lzbGF0aW9uQ29tcGxpYW5jZVwiOnRydWUsXCJhc3NpZ25lZFRvXCI6e1widHlwZVwiOlwiSU5URUdSQVRJT05fUEFSVE5FUlwiLFwicGFydG5lckNvZGVcIjpcIlNNT0tFX0FMQVJNU18xMzAwXCJ9LFwibGFzdFVwZGF0ZWREYXRlVGltZVwiOlwiMjAyMS0xMC0xMlQwNTowMjowMC4xNTNaXCJ9LFwibWFuYWdlbWVudEFncmVlbWVudFwiOntcIm1hbmFnZW1lbnRBZ3JlZW1lbnRJZFwiOlwiMjM5XCIsXCJvd25lcnNoaXBOYW1lXCI6XCJTYW1wbGUgVGVzdCBUcnVzdFwiLFwibGFuZGxvcmRzXCI6W3tcInByaW1hcnlcIjp0cnVlLFwiY29udGFjdElkXCI6XCI4MDNcIn1dfSxcInRlbmFudEFncmVlbWVudHNcIjpbe1widGVuYW50QWdyZWVtZW50SWRcIjpcIjE1OVwiLFwiY29udGFjdHNcIjpbe1wicHJpbWFyeVwiOnRydWUsXCJjb250YWN0SWRcIjpcIjgwNFwifSx7XCJwcmltYXJ5XCI6ZmFsc2UsXCJjb250YWN0SWRcIjpcIjgwNVwifV0sXCJsZWFzZVwiOntcImVuZERhdGVcIjpcIjIwMjItMDUtMDRcIixcInN0YXJ0RGF0ZVwiOlwiMjAyMS0wNS0xM1wiLFwiaW5hdWd1cmFsRGF0ZVwiOlwiMjAyMS0wNS0xM1wiLFwidHlwZVwiOlwiRklYRURcIixcInRlcm1cIjpcInRlcm0gdGlsbCBhdCBsZWFzdCBNYXkgNCwgMjAyMlwifSxcImxlYXNlTmFtZVwiOlwiU2FtcGxlIFRlc3QgTGVhc2VcIixcImN1cnJlbnRcIjp0cnVlfV0sXCJwcm9wZXJ0eVwiOntcInByb3BlcnR5SWRcIjpcIjMxOVwiLFwiZGlzcGxheU5hbWVcIjpcIjE2XFwvNDkgSmF6eiBGb3JtLCBCcmlzYmFuZSBDaXR5IFFMRCA0MDAwXCIsXCJhZGRyZXNzXCI6e1widW5pdE51bWJlclwiOlwiMTZcIixcInN0cmVldE51bWJlclwiOlwiNDlcIixcInN0cmVldE5hbWVcIjpcIkphenpcIixcInN0cmVldFR5cGVcIjpcIkZvcm1cIixcInN1YnVyYlwiOlwiQnJpc2JhbmUgQ2l0eVwiLFwicG9zdENvZGVcIjpcIjQwMDBcIixcInN0YXRlQ29kZVwiOlwiUUxEXCIsXCJjb3VudHJ5Q29kZVwiOlwiQVVcIn0sXCJrZXlOdW1iZXJcIjpcIkxKSEstSDFcIixcImFjY2Vzc0RldGFpbHNcIjpcIkFjY2VzcyB0aHJvdWdoIGxlZnQgZ2F0ZVwiLFwicHJvcGVydHlUeXBlXCI6XCJBUEFSVE1FTlRcIixcInByb3BlcnR5VXNlXCI6XCJSRVNJREVOVElBTFwifSxcInBvcnRmb2xpb1wiOntcInBvcnRmb2xpb0lkXCI6XCI0ZDg4Yjk5OC0zMTUyLTQxNTQtYTdiMi05Zjc3MTk3OGI5Y2NcIixcIm5hbWVcIjpcIkJpZyBQb3J0Zm9saW9cIixcInByb3BlcnR5TWFuYWdlcklkXCI6XCIxN1wifSxcImNvbnRhY3RzXCI6W3tcImNvbnRhY3RJZFwiOlwiODAzXCIsXCJ0eXBlXCI6XCJJTkRJVklEVUFMXCIsXCJkaXNwbGF5TmFtZVwiOlwiTXVycGh5IFdlbGNoXCIsXCJwZXJzb25EZXRhaWxcIjp7XCJAdHlwZVwiOlwiRGVmYXVsdENvbnRhY3RQZXJzb25EZXRhaWxcIixcInRpdGxlXCI6XCJNUlwiLFwiZmlyc3ROYW1lXCI6XCJNdXJwaHlcIixcImxhc3ROYW1lXCI6XCJXZWxjaFwiLFwicHJlZmVycmVkTmFtZVwiOlwiam9obm55XCIsXCJzYWx1dGF0aW9uXCI6XCJoaVwifSxcInBob25lc1wiOlt7XCJ0eXBlXCI6XCJNT0JJTEVcIixcInBob25lTnVtYmVyXCI6XCIwNDYzOTAzOTcyXCIsXCJwcmltYXJ5XCI6dHJ1ZX1dLFwiZW1haWxzXCI6W3tcInR5cGVcIjpcIlBFUlNPTkFMXCIsXCJlbWFpbEFkZHJlc3NcIjpcImFsbHkubydjb25uZXJAeWFob28uY29tXCIsXCJwcmltYXJ5XCI6dHJ1ZX1dfSx7XCJjb250YWN0SWRcIjpcIjgwNFwiLFwidHlwZVwiOlwiSU5ESVZJRFVBTFwiLFwiZGlzcGxheU5hbWVcIjpcIkFkcmlhbm5hIE1jQ2x1cmVcIixcInBlcnNvbkRldGFpbFwiOntcIkB0eXBlXCI6XCJEZWZhdWx0Q29udGFjdFBlcnNvbkRldGFpbFwiLFwidGl0bGVcIjpcIk1SXCIsXCJmaXJzdE5hbWVcIjpcIkFkcmlhbm5hXCIsXCJsYXN0TmFtZVwiOlwiTWNDbHVyZVwiLFwicHJlZmVycmVkTmFtZVwiOlwiam9obm55XCIsXCJzYWx1dGF0aW9uXCI6XCJoaVwifSxcInBob25lc1wiOlt7XCJ0eXBlXCI6XCJNT0JJTEVcIixcInBob25lTnVtYmVyXCI6XCIwNDMzMjEyMzY5XCIsXCJlMTY0UGhvbmVOdW1iZXJcIjpcIis2MTQzMzIxMjM2OVwiLFwicHJpbWFyeVwiOnRydWV9XSxcImVtYWlsc1wiOlt7XCJ0eXBlXCI6XCJQRVJTT05BTFwiLFwiZW1haWxBZGRyZXNzXCI6XCJtaWtlLm11bGxlckBvdXRsb29rLmNvbVwiLFwicHJpbWFyeVwiOnRydWV9XX0se1wiY29udGFjdElkXCI6XCI4MDVcIixcInR5cGVcIjpcIklORElWSURVQUxcIixcImRpc3BsYXlOYW1lXCI6XCJGYWUgTGVncm9zXCIsXCJwZXJzb25EZXRhaWxcIjp7XCJAdHlwZVwiOlwiRGVmYXVsdENvbnRhY3RQZXJzb25EZXRhaWxcIixcInRpdGxlXCI6XCJNUlwiLFwiZmlyc3ROYW1lXCI6XCJGYWVcIixcImxhc3ROYW1lXCI6XCJMZWdyb3NcIixcInByZWZlcnJlZE5hbWVcIjpcImpvaG5ueVwiLFwic2FsdXRhdGlvblwiOlwiaGlcIn0sXCJwaG9uZXNcIjpbe1widHlwZVwiOlwiTU9CSUxFXCIsXCJwaG9uZU51bWJlclwiOlwiMDQ2MTg1NTAwMVwiLFwicHJpbWFyeVwiOnRydWV9XSxcImVtYWlsc1wiOlt7XCJ0eXBlXCI6XCJQRVJTT05BTFwiLFwiZW1haWxBZGRyZXNzXCI6XCJkYW1pZW4uZ29sZG5lckBvdXRsb29rLmNvbVwiLFwicHJpbWFyeVwiOnRydWV9XX1dLFwidXNlcnNcIjpbe1widXNlcklkXCI6XCIxN1wiLFwiZmlyc3ROYW1lXCI6XCJLYXJsaWVcIixcImxhc3ROYW1lXCI6XCJSb2xmc29uXCIsXCJlbWFpbFwiOlwidGVzdF8xMzAwQGNvbnNvbGUuY29tLmF1XCJ9XX19LFwiY3JlYXRlZERhdGVUaW1lXCI6XCIyMDIxLTEwLTEyVDA1OjAyOjAwLjI4WlwifSJ9.eARwx7GfB3P5MzSbrrecY0IbjSuLNfyTrytuFoJLnuw //$jwt = JOSE_JWT::decode((new JOSE_JWT($payload))->sign($signature)->toString()); // necessary to populate $jwt->raw property // exit(var_dump($jwt)); /* $twoDotSignature = (new JOSE_JWT($payload))->sign($signature)->toString(); // $twoDotSignature = (new JOSE_JWT(unpack('C*', $payload)))->sign($signature)->toString(); $jwt = JOSE_JWT::decode($twoDotSignature); exit(var_dump($jwt->verify($publicKey, $wks->alg))); //exit(var_dump($rsa->verify(JOSE_JWT::decode(JOSE_URLSafeBase64::decode($signature), $payload)))); // JWT should have exact 3 or 5 segments */ //$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1); //$rsa->setHash('sha512'); //exit(var_dump()); /*$pubkeyid = openssl_get_publickey($publicKey); $verify = openssl_verify($payload, $signature, $pubkeyid, "sha1WithRSAEncryption"); openssl_free_key($pubkeyid); $errors = []; while ($msg = openssl_error_string() !== false) { $errors[] = $msg; } if (!empty($errors)) { var_export($errors); // 1 } exit(var_export($verify, true)); exit( var_dump( openssl_verify( $payload, base64_decode($signature), $publicKey, OPENSSL_ALGO_SHA1 // 'OPENSSL_ALGO_SHA256' // 'SHA1' // CRYPT_RSA_ENCRYPTION_PKCS1 // OPENSSL_ALGO_SHA256 // RSA_SHA256 // OPENSSL_ALGO_SHA1 //'RSA-SHA256' ) ) );*/ /*$decodedHeader = JOSE_URLSafeBase64::decode(json_encode(['alg' => 'RS256', 'typ' => 'JWT'])); $decodedPayload = JOSE_URLSafeBase64::decode($payload); exit(var_dump( [ 'header' => $decodedHeader, 'payload' => $decodedPayload, 'signature' => hash_hmac('RSA256', $decodedHeader . '.' . $decodedPayload) ] ));*/ /* //exit(var_dump(base64_encode(hash_hmac('sha1', $base_string, $key, true)))); $jwt = JOSE_JWT::decode((new JOSE_JWT($payload))->sign($signature)->toString()); exit(var_dump($jwt->verify($publicKey, $wks->alg))); // user error because strlen($s) != $this->k at RSA->_rsassa_pkcs1_v1_5_verify() /*$jwt = new JOSE_JWT( //[ //'header' => ['typ' => 'JWT', 'alg' => 'RS256'], //'claims' => unpack('C*', $payload) // convert body to byte array //'signature' => base64_decode($signature), // base64 decoded signature //] ); $jwt = $jwt->sign($signature); //exit(var_dump($jwt->toString())); exit(var_dump($jwt->verify($publicKey, $wks->alg))); // $jwt->raw is not populated! */ /* //exit(var_dump($jwt->sign($signature)->toString())); // output: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.e30.NIALsF_RlzYoUyfdc1eHso0X4cMg60IFCnjnk2qxSMU //exit(var_dump($jwt)); //JOSE_JWT::decode($signature); //exit(var_dump($jwt->verify($publicKey, $wks->alg))); //exit(var_dump(JOSE_URLSafeBase64::decode($signature))); //$jsonWebSignature = JOSE_JWT::decode($signature); // can't use $signature like this; it has no dots in it. 2 or 4 dots are required! //exit(var_dump($jsonWebSignature->verify($publicKey, $wks->alg))); } */

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.4.120.0090.01122.21
8.4.110.0080.01018.79
8.4.100.0080.01217.50
8.4.90.0110.00820.52
8.4.80.0130.00420.48
8.4.70.0100.00618.90
8.4.60.0120.00820.65
8.4.50.0110.00918.46
8.4.40.0070.01017.60
8.4.30.0100.01020.42
8.4.20.0030.01619.41
8.4.10.0050.00517.69
8.3.250.0110.00818.82
8.3.240.0110.00816.60
8.3.230.0110.00816.80
8.3.220.0120.00618.90
8.3.210.0090.00916.45
8.3.200.0050.00416.26
8.3.190.0060.00817.21
8.3.180.0110.00718.88
8.3.170.0120.00617.11
8.3.160.0090.00918.23
8.3.150.0070.00716.96
8.3.140.0090.00917.06
8.3.130.0060.00318.33
8.3.120.0000.00920.64
8.3.110.0090.00320.94
8.3.100.0090.00324.06
8.3.90.0040.00426.77
8.3.80.0060.00316.50
8.3.70.0040.01118.05
8.3.60.0120.00316.38
8.3.50.0140.00719.64
8.3.40.0140.00018.98
8.3.30.0090.00618.43
8.3.20.0040.00424.18
8.3.10.0040.00424.66
8.3.00.0040.00426.16
8.2.290.0050.00617.03
8.2.280.0120.00818.20
8.2.270.0100.00716.65
8.2.260.0180.00016.91
8.2.250.0080.00016.94
8.2.240.0070.00716.92
8.2.230.0090.00022.58
8.2.220.0030.00637.54
8.2.210.0040.00426.77
8.2.200.0030.00616.38
8.2.190.0100.01016.58
8.2.180.0130.00325.92
8.2.170.0110.00818.66
8.2.160.0070.00722.96
8.2.150.0070.00025.66
8.2.140.0040.00424.66
8.2.130.0030.00626.16
8.2.120.0080.00021.18
8.2.110.0000.01019.33
8.2.100.0150.00017.66
8.2.90.0080.00017.63
8.2.80.0030.00518.65
8.2.70.0030.00617.50
8.2.60.0030.00517.38
8.2.50.0040.00417.80
8.2.40.0040.00419.54
8.2.30.0050.00217.43
8.2.20.0000.00719.30
8.2.10.0000.00717.42
8.2.00.0000.00719.16
8.1.330.0120.00715.95
8.1.320.0100.01016.10
8.1.310.0090.00916.75
8.1.300.0040.01119.91
8.1.290.0040.00418.88
8.1.280.0100.01025.92
8.1.270.0060.00320.50
8.1.260.0040.00426.35
8.1.250.0040.00428.09
8.1.240.0070.00320.85
8.1.230.0090.00320.95
8.1.220.0090.00018.43
8.1.210.0000.00818.77
8.1.200.0030.00517.13
8.1.190.0000.00816.98
8.1.180.0080.00018.10
8.1.170.0040.00417.62
8.1.160.0070.00018.71
8.1.150.0000.00718.51
8.1.140.0040.00417.37
8.1.130.0050.00217.25
8.1.120.0050.00217.36
8.1.110.0040.00417.35
8.1.100.0040.00417.34
8.1.90.0040.00417.37
8.1.80.0020.00517.21
8.1.70.0000.00717.14
8.1.60.0030.01017.34
8.1.50.0040.00417.31
8.1.40.0030.00517.41
8.1.30.0000.00817.34
8.1.20.0040.00417.50
8.1.10.0030.00517.34
8.1.00.0000.00717.25
8.0.300.0070.00018.77
8.0.290.0040.00416.58
8.0.280.0070.00018.23
8.0.270.0070.00016.64
8.0.260.0030.00316.65
8.0.250.0030.00316.83
8.0.240.0070.00016.85
8.0.230.0030.00316.84
8.0.220.0040.00416.80
8.0.210.0030.00316.81
8.0.200.0060.00016.78
8.0.190.0030.00616.79
8.0.180.0040.00416.76
8.0.170.0000.00816.81
8.0.160.0030.00516.67
8.0.150.0000.00716.77
8.0.140.0000.00716.73
8.0.130.0060.00013.22
8.0.120.0000.00816.73
8.0.110.0000.00816.61
8.0.100.0000.00816.73
8.0.90.0040.00416.63
8.0.80.0080.00016.61
8.0.70.0060.00316.71
8.0.60.0040.00416.54
8.0.50.0070.00016.68
8.0.30.0030.00616.71
8.0.20.0000.00916.66
8.0.10.0050.00316.81
8.0.00.0040.00416.84
7.4.330.0050.00015.55
7.4.320.0070.00016.39
7.4.300.0030.00516.37
7.4.290.0050.00316.33
7.4.280.0060.00316.46
7.4.270.0030.00416.46
7.4.260.0000.00513.10
7.4.250.0070.00016.35
7.4.240.0040.00416.30
7.4.230.0070.00016.32
7.4.220.0040.00416.33
7.4.210.0040.00416.24
7.4.200.0040.00416.34
7.4.190.0050.00316.36
7.4.180.0070.00016.49
7.4.160.0070.00016.50
7.4.150.0040.00416.21
7.4.140.0020.00516.14
7.4.130.0000.00716.30
7.4.120.0000.00716.10
7.4.110.0070.00016.21
7.4.100.0000.00716.36
7.4.90.0070.00016.23
7.4.80.0000.00716.14
7.4.70.0000.00716.23
7.4.60.0000.00816.10
7.4.50.0030.00316.28
7.4.40.0020.00516.20
7.4.30.0030.00316.07
7.4.20.0070.00016.20
7.4.10.0030.00316.30
7.4.00.0030.00316.24
7.3.330.0030.00316.11
7.3.320.0050.00012.90
7.3.310.0060.00016.07
7.3.300.0040.00415.93
7.3.290.0000.00715.89
7.3.280.0070.00016.15
7.3.270.0050.00315.99
7.3.260.0030.00316.11
7.3.250.0070.00016.10
7.3.240.0000.00815.99
7.3.230.0030.00316.21
7.3.220.0000.00716.06
7.3.210.0070.00015.84
7.3.200.0000.00816.05
7.3.190.0040.00415.91
7.3.180.0030.00316.14
7.3.170.0070.00016.06
7.3.160.0000.00716.02
7.3.150.0040.00415.93
7.3.140.0040.00416.09
7.3.130.0030.00315.97
7.3.120.0000.00716.16
7.3.110.0030.00315.87
7.3.100.0030.00315.88
7.3.90.0070.00016.36
7.3.80.0030.00315.87
7.3.70.0000.00715.98
7.3.60.0000.00816.27
7.3.50.0030.00316.23
7.3.40.0030.00316.32
7.3.30.0040.00416.10
7.3.20.0050.00316.15
7.3.10.0000.00816.26
7.3.00.0000.00716.04

preferences:
32.48 ms | 403 KiB | 5 Q