mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	Fix for advanced_ota_redirect_url example failure in CI
This commit is contained in:
		@@ -11,55 +11,8 @@ import subprocess
 | 
				
			|||||||
import ttfw_idf
 | 
					import ttfw_idf
 | 
				
			||||||
from tiny_test_fw import DUT
 | 
					from tiny_test_fw import DUT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
server_cert = '-----BEGIN CERTIFICATE-----\n' \
 | 
					server_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test_certs/server_cert.pem')
 | 
				
			||||||
              'MIIDWDCCAkACCQCbF4+gVh/MLjANBgkqhkiG9w0BAQsFADBuMQswCQYDVQQGEwJJ\n'\
 | 
					key_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test_certs/server_key.pem')
 | 
				
			||||||
              'TjELMAkGA1UECAwCTUgxDDAKBgNVBAcMA1BVTjEMMAoGA1UECgwDRVNQMQwwCgYD\n'\
 | 
					 | 
				
			||||||
              'VQQLDANFU1AxDDAKBgNVBAMMA0VTUDEaMBgGCSqGSIb3DQEJARYLZXNwQGVzcC5j\n'\
 | 
					 | 
				
			||||||
              'b20wHhcNMjEwNzEyMTIzNjI3WhcNNDEwNzA3MTIzNjI3WjBuMQswCQYDVQQGEwJJ\n'\
 | 
					 | 
				
			||||||
              'TjELMAkGA1UECAwCTUgxDDAKBgNVBAcMA1BVTjEMMAoGA1UECgwDRVNQMQwwCgYD\n'\
 | 
					 | 
				
			||||||
              'VQQLDANFU1AxDDAKBgNVBAMMA0VTUDEaMBgGCSqGSIb3DQEJARYLZXNwQGVzcC5j\n'\
 | 
					 | 
				
			||||||
              'b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhxF/y7bygndxPwiWL\n'\
 | 
					 | 
				
			||||||
              'SwS9LY3uBMaJgup0ufNKVhx+FhGQOu44SghuJAaH3KkPUnt6SOM8jC97/yQuc32W\n'\
 | 
					 | 
				
			||||||
              'ukI7eBZoA12kargSnzdv5m5rZZpd+NznSSpoDArOAONKVlzr25A1+aZbix2mKRbQ\n'\
 | 
					 | 
				
			||||||
              'S5w9o1N2BriQuSzd8gL0Y0zEk3VkOWXEL+0yFUT144HnErnD+xnJtHe11yPO2fEz\n'\
 | 
					 | 
				
			||||||
              'YaGiilh0ddL26PXTugXMZN/8fRVHP50P2OG0SvFpC7vghlLp4VFM1/r3UJnvL6Oz\n'\
 | 
					 | 
				
			||||||
              '3ALc6dhxZEKQucqlpj8l1UegszQToopemtIj0qXTHw2+uUnkUyWIPjPC+wdOAoap\n'\
 | 
					 | 
				
			||||||
              'rFTRAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAItw24y565k3C/zENZlxyzto44ud\n'\
 | 
					 | 
				
			||||||
              'IYPQXN8Fa2pBlLe1zlSIyuaA/rWQ+i1daS8nPotkCbWZyf5N8DYaTE4B0OfvoUPk\n'\
 | 
					 | 
				
			||||||
              'B5uGDmbuk6akvlB5BGiYLfQjWHRsK9/4xjtIqN1H58yf3QNROuKsPAeywWS3Fn32\n'\
 | 
					 | 
				
			||||||
              '3//OpbWaClQePx6udRYMqAitKR+QxL7/BKZQsX+UyShuq8hjphvXvk0BW8ONzuw9\n'\
 | 
					 | 
				
			||||||
              'RcoORxM0FzySYjeQvm4LhzC/P3ZBhEq0xs55aL2a76SJhq5hJy7T/Xz6NFByvlrN\n'\
 | 
					 | 
				
			||||||
              'lFJJey33KFrAf5vnV9qcyWFIo7PYy2VsaaEjFeefr7q3sTFSMlJeadexW2Y=\n'\
 | 
					 | 
				
			||||||
              '-----END CERTIFICATE-----\n'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
server_key = '-----BEGIN PRIVATE KEY-----\n'\
 | 
					 | 
				
			||||||
             'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDhxF/y7bygndxP\n'\
 | 
					 | 
				
			||||||
             'wiWLSwS9LY3uBMaJgup0ufNKVhx+FhGQOu44SghuJAaH3KkPUnt6SOM8jC97/yQu\n'\
 | 
					 | 
				
			||||||
             'c32WukI7eBZoA12kargSnzdv5m5rZZpd+NznSSpoDArOAONKVlzr25A1+aZbix2m\n'\
 | 
					 | 
				
			||||||
             'KRbQS5w9o1N2BriQuSzd8gL0Y0zEk3VkOWXEL+0yFUT144HnErnD+xnJtHe11yPO\n'\
 | 
					 | 
				
			||||||
             '2fEzYaGiilh0ddL26PXTugXMZN/8fRVHP50P2OG0SvFpC7vghlLp4VFM1/r3UJnv\n'\
 | 
					 | 
				
			||||||
             'L6Oz3ALc6dhxZEKQucqlpj8l1UegszQToopemtIj0qXTHw2+uUnkUyWIPjPC+wdO\n'\
 | 
					 | 
				
			||||||
             'AoaprFTRAgMBAAECggEAE0HCxV/N1Q1h+1OeDDGL5+74yjKSFKyb/vTVcaPCrmaH\n'\
 | 
					 | 
				
			||||||
             'fPvp0ddOvMZJ4FDMAsiQS6/n4gQ7EKKEnYmwTqj4eUYW8yxGUn3f0YbPHbZT+Mkj\n'\
 | 
					 | 
				
			||||||
             'z5woi3nMKi/MxCGDQZX4Ow3xUQlITUqibsfWcFHis8c4mTqdh4qj7xJzehD2PVYF\n'\
 | 
					 | 
				
			||||||
             'gNHZsvVj6MltjBDAVwV1IlGoHjuElm6vuzkfX7phxcA1B4ZqdYY17yCXUnvui46z\n'\
 | 
					 | 
				
			||||||
             'Xn2kUTOOUCEgfgvGa9E+l4OtdXi5IxjaSraU+dlg2KsE4TpCuN2MEVkeR5Ms3Y7Q\n'\
 | 
					 | 
				
			||||||
             'jgJl8vlNFJDQpbFukLcYwG7rO5N5dQ6WWfVia/5XgQKBgQD74at/bXAPrh9NxPmz\n'\
 | 
					 | 
				
			||||||
             'i1oqCHMDoM9sz8xIMZLF9YVu3Jf8ux4xVpRSnNy5RU1gl7ZXbpdgeIQ4v04zy5aw\n'\
 | 
					 | 
				
			||||||
             '8T4tu9K3XnR3UXOy25AK0q+cnnxZg3kFQm+PhtOCKEFjPHrgo2MUfnj+EDddod7N\n'\
 | 
					 | 
				
			||||||
             'JQr9q5rEFbqHupFPpWlqCa3QmQKBgQDldWUGokNaEpmgHDMnHxiibXV5LQhzf8Rq\n'\
 | 
					 | 
				
			||||||
             'gJIQXb7R9EsTSXEvsDyqTBb7PHp2Ko7rZ5YQfyf8OogGGjGElnPoU/a+Jij1gVFv\n'\
 | 
					 | 
				
			||||||
             'kZ064uXAAISBkwHdcuobqc5EbG3ceyH46F+FBFhqM8KcbxJxx08objmh58+83InN\n'\
 | 
					 | 
				
			||||||
             'P9Qr25Xw+QKBgEGXMHuMWgQbSZeM1aFFhoMvlBO7yogBTKb4Ecpu9wI5e3Kan3Al\n'\
 | 
					 | 
				
			||||||
             'pZYltuyf+VhP6XG3IMBEYdoNJyYhu+nzyEdMg8CwXg+8LC7FMis/Ve+o7aS5scgG\n'\
 | 
					 | 
				
			||||||
             '1to/N9DK/swCsdTRdzmc/ZDbVC+TuVsebFBGYZTyO5KgqLpezqaIQrTxAoGALFCU\n'\
 | 
					 | 
				
			||||||
             '10glO9MVyl9H3clap5v+MQ3qcOv/EhaMnw6L2N6WVT481tnxjW4ujgzrFcE4YuxZ\n'\
 | 
					 | 
				
			||||||
             'hgwYu9TOCmeqopGwBvGYWLbj+C4mfSahOAs0FfXDoYazuIIGBpuv03UhbpB1Si4O\n'\
 | 
					 | 
				
			||||||
             'rJDfRnuCnVWyOTkl54gKJ2OusinhjztBjcrV1XkCgYEA3qNi4uBsPdyz9BZGb/3G\n'\
 | 
					 | 
				
			||||||
             'rOMSw0CaT4pEMTLZqURmDP/0hxvTk1polP7O/FYwxVuJnBb6mzDa0xpLFPTpIAnJ\n'\
 | 
					 | 
				
			||||||
             'YXB8xpXU69QVh+EBbemdJWOd+zp5UCfXvb2shAeG3Tn/Dz4cBBMEUutbzP+or0nG\n'\
 | 
					 | 
				
			||||||
             'vSXnRLaxQhooWm+IuX9SuBQ=\n'\
 | 
					 | 
				
			||||||
             '-----END PRIVATE KEY-----\n'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_my_ip():
 | 
					def get_my_ip():
 | 
				
			||||||
@@ -79,21 +32,6 @@ def get_server_status(host_ip, port):
 | 
				
			|||||||
    return False
 | 
					    return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def create_file(server_file, file_data):
 | 
					 | 
				
			||||||
    with open(server_file, 'w+') as file:
 | 
					 | 
				
			||||||
        file.write(file_data)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def get_ca_cert(ota_image_dir):
 | 
					 | 
				
			||||||
    os.chdir(ota_image_dir)
 | 
					 | 
				
			||||||
    server_file = os.path.join(ota_image_dir, 'server_cert.pem')
 | 
					 | 
				
			||||||
    create_file(server_file, server_cert)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    key_file = os.path.join(ota_image_dir, 'server_key.pem')
 | 
					 | 
				
			||||||
    create_file(key_file, server_key)
 | 
					 | 
				
			||||||
    return server_file, key_file
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def https_request_handler():
 | 
					def https_request_handler():
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    Returns a request handler class that handles broken pipe exception
 | 
					    Returns a request handler class that handles broken pipe exception
 | 
				
			||||||
@@ -118,7 +56,7 @@ def https_request_handler():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def start_https_server(ota_image_dir, server_ip, server_port):
 | 
					def start_https_server(ota_image_dir, server_ip, server_port):
 | 
				
			||||||
    server_file, key_file = get_ca_cert(ota_image_dir)
 | 
					    os.chdir(ota_image_dir)
 | 
				
			||||||
    requestHandler = https_request_handler()
 | 
					    requestHandler = https_request_handler()
 | 
				
			||||||
    httpd = http.server.HTTPServer((server_ip, server_port), requestHandler)
 | 
					    httpd = http.server.HTTPServer((server_ip, server_port), requestHandler)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -129,7 +67,7 @@ def start_https_server(ota_image_dir, server_ip, server_port):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def start_chunked_server(ota_image_dir, server_port):
 | 
					def start_chunked_server(ota_image_dir, server_port):
 | 
				
			||||||
    server_file, key_file = get_ca_cert(ota_image_dir)
 | 
					    os.chdir(ota_image_dir)
 | 
				
			||||||
    chunked_server = subprocess.Popen(['openssl', 's_server', '-WWW', '-key', key_file, '-cert', server_file, '-port', str(server_port)])
 | 
					    chunked_server = subprocess.Popen(['openssl', 's_server', '-WWW', '-key', key_file, '-cert', server_file, '-port', str(server_port)])
 | 
				
			||||||
    return chunked_server
 | 
					    return chunked_server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -156,7 +94,6 @@ def redirect_handler_factory(url):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def start_redirect_server(ota_image_dir, server_ip, server_port, redirection_port):
 | 
					def start_redirect_server(ota_image_dir, server_ip, server_port, redirection_port):
 | 
				
			||||||
    os.chdir(ota_image_dir)
 | 
					    os.chdir(ota_image_dir)
 | 
				
			||||||
    server_file, key_file = get_ca_cert(ota_image_dir)
 | 
					 | 
				
			||||||
    redirectHandler = redirect_handler_factory('https://' + server_ip + ':' + str(redirection_port) + '/advanced_https_ota.bin')
 | 
					    redirectHandler = redirect_handler_factory('https://' + server_ip + ':' + str(redirection_port) + '/advanced_https_ota.bin')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    httpd = http.server.HTTPServer((server_ip, server_port), redirectHandler)
 | 
					    httpd = http.server.HTTPServer((server_ip, server_port), redirectHandler)
 | 
				
			||||||
@@ -402,8 +339,6 @@ def test_examples_protocol_advanced_https_ota_example_chunked(env, extra_data):
 | 
				
			|||||||
    dut1.expect('Loaded app from partition at offset', timeout=60)
 | 
					    dut1.expect('Loaded app from partition at offset', timeout=60)
 | 
				
			||||||
    dut1.expect('Starting Advanced OTA example', timeout=30)
 | 
					    dut1.expect('Starting Advanced OTA example', timeout=30)
 | 
				
			||||||
    chunked_server.kill()
 | 
					    chunked_server.kill()
 | 
				
			||||||
    os.remove(os.path.join(dut1.app.binary_path, 'server_cert.pem'))
 | 
					 | 
				
			||||||
    os.remove(os.path.join(dut1.app.binary_path, 'server_key.pem'))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ttfw_idf.idf_example_test(env_tag='Example_WIFI')
 | 
					@ttfw_idf.idf_example_test(env_tag='Example_WIFI')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					-----BEGIN CERTIFICATE-----
 | 
				
			||||||
 | 
					MIIDWDCCAkACCQCbF4+gVh/MLjANBgkqhkiG9w0BAQsFADBuMQswCQYDVQQGEwJJ
 | 
				
			||||||
 | 
					TjELMAkGA1UECAwCTUgxDDAKBgNVBAcMA1BVTjEMMAoGA1UECgwDRVNQMQwwCgYD
 | 
				
			||||||
 | 
					VQQLDANFU1AxDDAKBgNVBAMMA0VTUDEaMBgGCSqGSIb3DQEJARYLZXNwQGVzcC5j
 | 
				
			||||||
 | 
					b20wHhcNMjEwNzEyMTIzNjI3WhcNNDEwNzA3MTIzNjI3WjBuMQswCQYDVQQGEwJJ
 | 
				
			||||||
 | 
					TjELMAkGA1UECAwCTUgxDDAKBgNVBAcMA1BVTjEMMAoGA1UECgwDRVNQMQwwCgYD
 | 
				
			||||||
 | 
					VQQLDANFU1AxDDAKBgNVBAMMA0VTUDEaMBgGCSqGSIb3DQEJARYLZXNwQGVzcC5j
 | 
				
			||||||
 | 
					b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhxF/y7bygndxPwiWL
 | 
				
			||||||
 | 
					SwS9LY3uBMaJgup0ufNKVhx+FhGQOu44SghuJAaH3KkPUnt6SOM8jC97/yQuc32W
 | 
				
			||||||
 | 
					ukI7eBZoA12kargSnzdv5m5rZZpd+NznSSpoDArOAONKVlzr25A1+aZbix2mKRbQ
 | 
				
			||||||
 | 
					S5w9o1N2BriQuSzd8gL0Y0zEk3VkOWXEL+0yFUT144HnErnD+xnJtHe11yPO2fEz
 | 
				
			||||||
 | 
					YaGiilh0ddL26PXTugXMZN/8fRVHP50P2OG0SvFpC7vghlLp4VFM1/r3UJnvL6Oz
 | 
				
			||||||
 | 
					3ALc6dhxZEKQucqlpj8l1UegszQToopemtIj0qXTHw2+uUnkUyWIPjPC+wdOAoap
 | 
				
			||||||
 | 
					rFTRAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAItw24y565k3C/zENZlxyzto44ud
 | 
				
			||||||
 | 
					IYPQXN8Fa2pBlLe1zlSIyuaA/rWQ+i1daS8nPotkCbWZyf5N8DYaTE4B0OfvoUPk
 | 
				
			||||||
 | 
					B5uGDmbuk6akvlB5BGiYLfQjWHRsK9/4xjtIqN1H58yf3QNROuKsPAeywWS3Fn32
 | 
				
			||||||
 | 
					3//OpbWaClQePx6udRYMqAitKR+QxL7/BKZQsX+UyShuq8hjphvXvk0BW8ONzuw9
 | 
				
			||||||
 | 
					RcoORxM0FzySYjeQvm4LhzC/P3ZBhEq0xs55aL2a76SJhq5hJy7T/Xz6NFByvlrN
 | 
				
			||||||
 | 
					lFJJey33KFrAf5vnV9qcyWFIo7PYy2VsaaEjFeefr7q3sTFSMlJeadexW2Y=
 | 
				
			||||||
 | 
					-----END CERTIFICATE-----
 | 
				
			||||||
@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					-----BEGIN PRIVATE KEY-----
 | 
				
			||||||
 | 
					MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDhxF/y7bygndxP
 | 
				
			||||||
 | 
					wiWLSwS9LY3uBMaJgup0ufNKVhx+FhGQOu44SghuJAaH3KkPUnt6SOM8jC97/yQu
 | 
				
			||||||
 | 
					c32WukI7eBZoA12kargSnzdv5m5rZZpd+NznSSpoDArOAONKVlzr25A1+aZbix2m
 | 
				
			||||||
 | 
					KRbQS5w9o1N2BriQuSzd8gL0Y0zEk3VkOWXEL+0yFUT144HnErnD+xnJtHe11yPO
 | 
				
			||||||
 | 
					2fEzYaGiilh0ddL26PXTugXMZN/8fRVHP50P2OG0SvFpC7vghlLp4VFM1/r3UJnv
 | 
				
			||||||
 | 
					L6Oz3ALc6dhxZEKQucqlpj8l1UegszQToopemtIj0qXTHw2+uUnkUyWIPjPC+wdO
 | 
				
			||||||
 | 
					AoaprFTRAgMBAAECggEAE0HCxV/N1Q1h+1OeDDGL5+74yjKSFKyb/vTVcaPCrmaH
 | 
				
			||||||
 | 
					fPvp0ddOvMZJ4FDMAsiQS6/n4gQ7EKKEnYmwTqj4eUYW8yxGUn3f0YbPHbZT+Mkj
 | 
				
			||||||
 | 
					z5woi3nMKi/MxCGDQZX4Ow3xUQlITUqibsfWcFHis8c4mTqdh4qj7xJzehD2PVYF
 | 
				
			||||||
 | 
					gNHZsvVj6MltjBDAVwV1IlGoHjuElm6vuzkfX7phxcA1B4ZqdYY17yCXUnvui46z
 | 
				
			||||||
 | 
					Xn2kUTOOUCEgfgvGa9E+l4OtdXi5IxjaSraU+dlg2KsE4TpCuN2MEVkeR5Ms3Y7Q
 | 
				
			||||||
 | 
					jgJl8vlNFJDQpbFukLcYwG7rO5N5dQ6WWfVia/5XgQKBgQD74at/bXAPrh9NxPmz
 | 
				
			||||||
 | 
					i1oqCHMDoM9sz8xIMZLF9YVu3Jf8ux4xVpRSnNy5RU1gl7ZXbpdgeIQ4v04zy5aw
 | 
				
			||||||
 | 
					8T4tu9K3XnR3UXOy25AK0q+cnnxZg3kFQm+PhtOCKEFjPHrgo2MUfnj+EDddod7N
 | 
				
			||||||
 | 
					JQr9q5rEFbqHupFPpWlqCa3QmQKBgQDldWUGokNaEpmgHDMnHxiibXV5LQhzf8Rq
 | 
				
			||||||
 | 
					gJIQXb7R9EsTSXEvsDyqTBb7PHp2Ko7rZ5YQfyf8OogGGjGElnPoU/a+Jij1gVFv
 | 
				
			||||||
 | 
					kZ064uXAAISBkwHdcuobqc5EbG3ceyH46F+FBFhqM8KcbxJxx08objmh58+83InN
 | 
				
			||||||
 | 
					P9Qr25Xw+QKBgEGXMHuMWgQbSZeM1aFFhoMvlBO7yogBTKb4Ecpu9wI5e3Kan3Al
 | 
				
			||||||
 | 
					pZYltuyf+VhP6XG3IMBEYdoNJyYhu+nzyEdMg8CwXg+8LC7FMis/Ve+o7aS5scgG
 | 
				
			||||||
 | 
					1to/N9DK/swCsdTRdzmc/ZDbVC+TuVsebFBGYZTyO5KgqLpezqaIQrTxAoGALFCU
 | 
				
			||||||
 | 
					10glO9MVyl9H3clap5v+MQ3qcOv/EhaMnw6L2N6WVT481tnxjW4ujgzrFcE4YuxZ
 | 
				
			||||||
 | 
					hgwYu9TOCmeqopGwBvGYWLbj+C4mfSahOAs0FfXDoYazuIIGBpuv03UhbpB1Si4O
 | 
				
			||||||
 | 
					rJDfRnuCnVWyOTkl54gKJ2OusinhjztBjcrV1XkCgYEA3qNi4uBsPdyz9BZGb/3G
 | 
				
			||||||
 | 
					rOMSw0CaT4pEMTLZqURmDP/0hxvTk1polP7O/FYwxVuJnBb6mzDa0xpLFPTpIAnJ
 | 
				
			||||||
 | 
					YXB8xpXU69QVh+EBbemdJWOd+zp5UCfXvb2shAeG3Tn/Dz4cBBMEUutbzP+or0nG
 | 
				
			||||||
 | 
					vSXnRLaxQhooWm+IuX9SuBQ=
 | 
				
			||||||
 | 
					-----END PRIVATE KEY-----
 | 
				
			||||||
@@ -4,7 +4,6 @@ import os
 | 
				
			|||||||
import re
 | 
					import re
 | 
				
			||||||
import socket
 | 
					import socket
 | 
				
			||||||
import ssl
 | 
					import ssl
 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ttfw_idf
 | 
					import ttfw_idf
 | 
				
			||||||
from tiny_test_fw import DUT, Utility
 | 
					from tiny_test_fw import DUT, Utility
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user