Compare commits
	
		
			2 Commits
		
	
	
		
			3aad46748a
			...
			a8-alt-sol
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9752ef451f | |||
| 42cb09f3bd | 
| @@ -75,30 +75,36 @@ void destroyDiskQueue(DiskQueue *queue) { | |||||||
| 	free(queue); | 	free(queue); | ||||||
| } | } | ||||||
|  |  | ||||||
| int calcDistance(int position, int destination) { |  | ||||||
| 	if (position > destination) { |  | ||||||
| 		return destination + (9999 + 1 - position); |  | ||||||
| 	} else { |  | ||||||
| 		return destination - position; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DiskRequest* findClosest(DiskQueue *queue, int position, double time) { | DiskRequest* findClosest(DiskQueue *queue, int position, double time) { | ||||||
| 	DiskRequest *current = queue->head; | 	DiskRequest *current = queue->head; | ||||||
| 	DiskRequest *closest = NULL; | 	DiskRequest *next = NULL; | ||||||
|  | 	DiskRequest *first = NULL; | ||||||
| 	while (current != NULL) { | 	while (current != NULL) { | ||||||
| 		if (current->time <= time) { // Filter out requests that haven't come in yet | 		if (current->time <= time) { // Filter out requests that haven't come in yet | ||||||
| 			if (closest == NULL) { // If there is no closest yet, set it to the current | 			if (first == NULL) { | ||||||
| 				closest = current; | 				first = current; | ||||||
| 			} else { | 			} else { | ||||||
| 				int closestDistance = calcDistance(position, closest->position); // Distance from the closest to the current position, negative means down (bad) | 				if (current->position < first->position) { | ||||||
| 				int currentDistance = calcDistance(position, current->position); // Distance from the current to the current position, negative means down (bad | 					first = current; | ||||||
| 				if (currentDistance < closestDistance) { // If the current is closer than the closest | 				} | ||||||
| 					closest = current; | 			} | ||||||
|  | 			int currentDistance = current->position - position; // Distance from the current to the current position, negative means down (bad) | ||||||
|  | 			if (currentDistance > 0) { // If the current is up | ||||||
|  | 				if (next == NULL) { // If there is no next yet, set it to the current | ||||||
|  | 					next = current; | ||||||
|  | 				} else { | ||||||
|  | 					int nextDistance = next->position - position; // Distance from the next to the current position, negative means down (bad) | ||||||
|  | 					if (currentDistance < nextDistance) { // If the current is closer than the next | ||||||
|  | 						next = current; | ||||||
|  | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		current = current->next; | 		current = current->next; | ||||||
| 	} | 	} | ||||||
| 	return closest; | 	// If we didn't find a request that is above the current position, return the first as a fallback | ||||||
|  | 	if (next == NULL) { | ||||||
|  | 		return first; | ||||||
|  | 	} | ||||||
|  | 	return next; | ||||||
| } | } | ||||||
| @@ -26,5 +26,3 @@ DiskRequest *dequeue(DiskQueue *queue); | |||||||
| DiskRequest *findClosest(DiskQueue *queue, int position, double time); | DiskRequest *findClosest(DiskQueue *queue, int position, double time); | ||||||
|  |  | ||||||
| void destroyDiskQueue(DiskQueue *queue); | void destroyDiskQueue(DiskQueue *queue); | ||||||
|  |  | ||||||
| int calcDistance(int position, int destination); |  | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								Assignment9/.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								Assignment9/.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,8 +0,0 @@ | |||||||
| # Default ignored files |  | ||||||
| /shelf/ |  | ||||||
| /workspace.xml |  | ||||||
| # Editor-based HTTP Client requests |  | ||||||
| /httpRequests/ |  | ||||||
| # Datasource local storage ignored files |  | ||||||
| /dataSources/ |  | ||||||
| /dataSources.local.xml |  | ||||||
							
								
								
									
										2
									
								
								Assignment9/.idea/Assignment9.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								Assignment9/.idea/Assignment9.iml
									
									
									
										generated
									
									
									
								
							| @@ -1,2 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <module classpath="CMake" type="CPP_MODULE" version="4" /> |  | ||||||
							
								
								
									
										8
									
								
								Assignment9/.idea/cmake.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								Assignment9/.idea/cmake.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,8 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <project version="4"> |  | ||||||
|   <component name="CMakeSharedSettings"> |  | ||||||
|     <configurations> |  | ||||||
|       <configuration PROFILE_NAME="Debug" ENABLED="true" GENERATION_DIR="build" CONFIG_NAME="Debug" /> |  | ||||||
|     </configurations> |  | ||||||
|   </component> |  | ||||||
| </project> |  | ||||||
							
								
								
									
										4
									
								
								Assignment9/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								Assignment9/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,4 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <project version="4"> |  | ||||||
|   <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" /> |  | ||||||
| </project> |  | ||||||
							
								
								
									
										8
									
								
								Assignment9/.idea/modules.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								Assignment9/.idea/modules.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,8 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <project version="4"> |  | ||||||
|   <component name="ProjectModuleManager"> |  | ||||||
|     <modules> |  | ||||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/Assignment9.iml" filepath="$PROJECT_DIR$/.idea/Assignment9.iml" /> |  | ||||||
|     </modules> |  | ||||||
|   </component> |  | ||||||
| </project> |  | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| <component name="ProjectRunConfigurationManager"> |  | ||||||
|   <configuration default="false" name="Assignment9" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> |  | ||||||
|     <method v="2"> |  | ||||||
|       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> |  | ||||||
|     </method> |  | ||||||
|   </configuration> |  | ||||||
| </component> |  | ||||||
							
								
								
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test1.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test1.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,7 +0,0 @@ | |||||||
| <component name="ProjectRunConfigurationManager"> |  | ||||||
|   <configuration default="false" name="Test1" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test1.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> |  | ||||||
|     <method v="2"> |  | ||||||
|       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> |  | ||||||
|     </method> |  | ||||||
|   </configuration> |  | ||||||
| </component> |  | ||||||
							
								
								
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test2.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test2.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,7 +0,0 @@ | |||||||
| <component name="ProjectRunConfigurationManager"> |  | ||||||
|   <configuration default="false" name="Test2" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test2.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> |  | ||||||
|     <method v="2"> |  | ||||||
|       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> |  | ||||||
|     </method> |  | ||||||
|   </configuration> |  | ||||||
| </component> |  | ||||||
							
								
								
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test3.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test3.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,7 +0,0 @@ | |||||||
| <component name="ProjectRunConfigurationManager"> |  | ||||||
|   <configuration default="false" name="Test3" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test3.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> |  | ||||||
|     <method v="2"> |  | ||||||
|       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> |  | ||||||
|     </method> |  | ||||||
|   </configuration> |  | ||||||
| </component> |  | ||||||
							
								
								
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test4.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test4.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,7 +0,0 @@ | |||||||
| <component name="ProjectRunConfigurationManager"> |  | ||||||
|   <configuration default="false" name="Test4" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test4.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> |  | ||||||
|     <method v="2"> |  | ||||||
|       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> |  | ||||||
|     </method> |  | ||||||
|   </configuration> |  | ||||||
| </component> |  | ||||||
							
								
								
									
										6
									
								
								Assignment9/.idea/vcs.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								Assignment9/.idea/vcs.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <project version="4"> |  | ||||||
|   <component name="VcsDirectoryMappings"> |  | ||||||
|     <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> |  | ||||||
|   </component> |  | ||||||
| </project> |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| cmake_minimum_required(VERSION 3.20) |  | ||||||
| project(Assignment9 C) |  | ||||||
| set(CMAKE_C_STANDARD 99) |  | ||||||
| add_executable(Assignment9 src/main.c |  | ||||||
|         src/png.c |  | ||||||
|         src/png.h) |  | ||||||
										
											Binary file not shown.
										
									
								
							| @@ -1,68 +0,0 @@ | |||||||
| #include <stdio.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <arpa/inet.h> |  | ||||||
| // FILE format is: 'header', then 2023 skipped bytes, then the number of interest |  | ||||||
| #define OURINT 1426915328 |  | ||||||
| #define OFFSETTODATA 2023 |  | ||||||
|  |  | ||||||
| int writeToFile(){ |  | ||||||
|  |  | ||||||
|     FILE* fp = fopen("toReadLater.txt","w+"); |  | ||||||
| 	char c = 'h'; |  | ||||||
|     fwrite(&c, sizeof(char), 1, fp); |  | ||||||
|     c = 'e'; |  | ||||||
|     fwrite(&c, sizeof(char), 1, fp); |  | ||||||
|     c = 'a'; |  | ||||||
|     fwrite(&c, sizeof(char), 1, fp); |  | ||||||
|     c = 'd'; |  | ||||||
|     fwrite(&c, sizeof(char), 1, fp); |  | ||||||
|     c = 'e'; |  | ||||||
|     fwrite(&c, sizeof(char), 1, fp); |  | ||||||
|     c = 'r'; |  | ||||||
|     fwrite(&c, sizeof(char), 1, fp); |  | ||||||
|     unsigned int buf = OFFSETTODATA; |  | ||||||
|     fwrite(&buf, sizeof(int), 1, fp); |  | ||||||
|     fseek(fp, OFFSETTODATA, SEEK_CUR); |  | ||||||
|  |  | ||||||
|     buf = OURINT; |  | ||||||
|     fwrite(&buf, sizeof(int), 1, fp); |  | ||||||
|     fclose(fp); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int readFromFile(){ |  | ||||||
| 	FILE *fp = fopen("toReadLater.txt", "r+"); |  | ||||||
| 	fseek(fp, 6 , SEEK_SET); |  | ||||||
| 	int skip = 0; |  | ||||||
| 	fread(&skip, sizeof(int), 1, fp); |  | ||||||
|     // NOTE, in HW, the size of the section is a value in  |  | ||||||
|     // Big-Endian format, it will actually need conversion |  | ||||||
| 	fseek(fp, skip, SEEK_CUR); |  | ||||||
| 	unsigned int qBe = 0; |  | ||||||
| 	unsigned int qLe = 0; |  | ||||||
| 	int i; |  | ||||||
| 	unsigned char *c = (char *)(&qBe); |  | ||||||
| 	unsigned char *d = (char *)(&qLe); |  | ||||||
| 	for (i = 0; i < 4; i++) |  | ||||||
| 	{ |  | ||||||
| 		c[i] = getc(fp); |  | ||||||
| 		printf("Byte %i: %i %x\n",i, c[i], c[i]); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
|     for (i = 0; i < 4; i++) |  | ||||||
| 	{ |  | ||||||
| 		d[4-i-1] = c[i]; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
|     printf("Translated using swapping the bytes order: %i\n", qLe); |  | ||||||
| 	qLe = ntohl(qBe); |  | ||||||
|     printf("Translated using ntohl: %i\n", qLe); |  | ||||||
|     fclose(fp); |  | ||||||
| } |  | ||||||
| int main (int argc, char** argv){ |  | ||||||
|     unsigned int wantToRead; |  | ||||||
| 	writeToFile(); |  | ||||||
| 	printf("Sizeof (int) is:%li\n", sizeof(unsigned int)); |  | ||||||
| 	readFromFile(); |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
										
											Binary file not shown.
										
									
								
							| @@ -1,39 +0,0 @@ | |||||||
| #include <stdio.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <limits.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include <stdbool.h> |  | ||||||
| #include "png.h" |  | ||||||
|  |  | ||||||
| int main(int argc, char *argv[]) { |  | ||||||
| 	if (argc != 2) { |  | ||||||
| 		printf("Usage: %s <png file>\n", argv[0]); |  | ||||||
| 		exit(1); |  | ||||||
| 	} |  | ||||||
| 	if (strlen(argv[1]) > PATH_MAX) { |  | ||||||
| 		printf("Path too long\n"); |  | ||||||
| 		exit(1); |  | ||||||
| 	} |  | ||||||
| 	char *path = argv[1]; |  | ||||||
|  |  | ||||||
| 	char* png_buffer = load_file(get_fd(path)); |  | ||||||
| 	if (!is_png(png_buffer)) { |  | ||||||
| 		printf("It's not a PNG file\n"); |  | ||||||
| 		exit(1); |  | ||||||
| 	} else { |  | ||||||
| 		printf("It's a PNG file\n"); |  | ||||||
| 	} |  | ||||||
| 	png_chunk **chunks = get_png_chunks(png_buffer); |  | ||||||
| 	int size = get_number_of_chunks(chunks); |  | ||||||
| 	for (int i = 0; i < size; i++) { |  | ||||||
| 		// Check if header is IDAT or IEND |  | ||||||
| 		bool is_idat = memcmp(chunks[i]->type, "IDAT", 4) == 0; |  | ||||||
| 		bool is_iend = memcmp(chunks[i]->type, "IEND", 4) == 0; |  | ||||||
| 		if (is_idat || is_iend) { |  | ||||||
| 			printf("Found %s chunk\n", chunks[i]->type); |  | ||||||
| 		} else { |  | ||||||
| 			printf("Found unknown: %s\n", chunks[i]->type); |  | ||||||
| 		} |  | ||||||
| 		printf("Chunk size is:%d\n", chunks[i]->length); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @@ -1,146 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright Notice |  | ||||||
|  * ---------------- |  | ||||||
|  * Copyright © 1998, 1999 by: Glenn Randers-Pehrson |  | ||||||
|  * This specification is a modification of the PNG 1.0 specification. It is being |  | ||||||
|  * provided by the copyright holder under the provisions of the 1996 MIT copyright and license: |  | ||||||
|  * Copyright © 1996 by: Massachusetts Institute of Technology (MIT) |  | ||||||
|  * This W3C specification is being provided by the copyright holders under |  | ||||||
|  * the following license. By obtaining, using and/or copying this specification, you |  | ||||||
|  * agree that you have read, understood, and will comply with the following terms |  | ||||||
|  * and conditions: |  | ||||||
|  * Permission to use, copy, and distribute this specification for any purpose |  | ||||||
|  * and without fee or royalty is hereby granted, provided that the full text of |  | ||||||
|  * this NOTICE appears on ALL copies of the specification or portions thereof, |  | ||||||
|  * including modifications, that you make. |  | ||||||
|  * THIS SPECIFICATION IS PROVIDED ”AS IS,” AND COPYRIGHT HOLD-ERS |  | ||||||
|  * MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR |  | ||||||
|  * IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, COPYRIGHT |  | ||||||
|  * HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES OF MER-CHANTABILITY |  | ||||||
|  * OR FITNESS FOR ANY PARTICULAR PURPOSE OR |  | ||||||
|  * THAT THE USE OF THE SPECIFICATION WILL NOT INFRINGE ANY |  | ||||||
|  * THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER |  | ||||||
|  * RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY |  | ||||||
|  * USE OF THIS SPECIFICATION. |  | ||||||
|  * The name and trademarks of copyright holders may NOT be used in |  | ||||||
|  * ad-vertising or publicity pertaining to the specification without specific, written |  | ||||||
|  * prior permission. Title to copyright in this specification and any associated |  | ||||||
|  * documentation will at all times remain with copyright holders. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <arpa/inet.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <zlib.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include "png.h" |  | ||||||
|  |  | ||||||
| int get_fd(char *path) { |  | ||||||
| 	FILE *fp = fopen(path, "rb"); |  | ||||||
| 	if (fp == NULL) { |  | ||||||
| 		perror("fopen"); |  | ||||||
| 		exit(1); |  | ||||||
| 	} |  | ||||||
| 	int fd = fileno(fp); |  | ||||||
| 	if (fd == -1) { |  | ||||||
| 		perror("fileno"); |  | ||||||
| 		exit(1); |  | ||||||
| 	} |  | ||||||
| 	return fd; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| FILE *get_fp(int fd) { |  | ||||||
| 	FILE *fp = fdopen(fd, "rb"); |  | ||||||
| 	if (fp == NULL) { |  | ||||||
| 		perror("fdopen"); |  | ||||||
| 		exit(1); |  | ||||||
| 	} |  | ||||||
| 	return fp; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| char *load_file(int fd) { |  | ||||||
| 	FILE *fp = get_fp(fd); |  | ||||||
| 	fseek(fp, 0, SEEK_END); |  | ||||||
| 	long size = ftell(fp); |  | ||||||
| 	rewind(fp); |  | ||||||
| 	char *buffer = malloc(size); |  | ||||||
| 	if (buffer == NULL) { |  | ||||||
| 		perror("malloc"); |  | ||||||
| 		exit(1); |  | ||||||
| 	} |  | ||||||
| 	fread(buffer, 1, size, fp); |  | ||||||
| 	// Iterate over buffer and convert from network byte order to host byte order |  | ||||||
| 	//for (int i = 0; i < size; i += 4) { |  | ||||||
| 	//	uint32_t *ptr = (uint32_t *)(buffer + i); |  | ||||||
| 	//	*ptr = ntohl(*ptr); |  | ||||||
| 	//} |  | ||||||
| 	fclose(fp); |  | ||||||
| 	return buffer; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int is_png(char *buffer) { |  | ||||||
| 	return memcmp(buffer, PNG_SIGNATURE, PNG_SIGNATURE_SIZE) == 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| png_chunk *get_png_chunk(char *buffer, int offset) { |  | ||||||
| 	png_chunk *chunk = malloc(sizeof(png_chunk)); |  | ||||||
| 	if (chunk == NULL) { |  | ||||||
| 		perror("malloc"); |  | ||||||
| 		exit(1); |  | ||||||
| 	} |  | ||||||
| 	memcpy(&chunk->length, buffer + offset + 0, 4); |  | ||||||
| 	chunk->length = ntohl(chunk->length); |  | ||||||
| 	memcpy(&chunk->type, buffer + offset + 4, 4); |  | ||||||
| 	chunk->data = malloc(chunk->length); |  | ||||||
| 	if (chunk->data == NULL) { |  | ||||||
| 		perror("malloc"); |  | ||||||
| 		exit(1); |  | ||||||
| 	} |  | ||||||
| 	memcpy(chunk->data, buffer + offset + 8, chunk->length); |  | ||||||
| 	memcpy(&chunk->crc, buffer + offset + 8 + chunk->length, 4); |  | ||||||
| 	return chunk; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| png_chunk **get_png_chunks(char *buffer) { |  | ||||||
| 	png_chunk **chunks = malloc(sizeof(png_chunk *)); |  | ||||||
| 	if (chunks == NULL) { |  | ||||||
| 		perror("malloc"); |  | ||||||
| 		exit(1); |  | ||||||
| 	} |  | ||||||
| 	int offset = PNG_SIGNATURE_SIZE; |  | ||||||
| 	int i = 0; |  | ||||||
| 	while (1) { |  | ||||||
| 		chunks[i] = get_png_chunk(buffer, offset); |  | ||||||
| 		offset += chunks[i]->length; |  | ||||||
| 		if (memcmp(chunks[i]->type, "IEND", 4) == 0) { |  | ||||||
| 			break; |  | ||||||
| 		} |  | ||||||
| 		i++; |  | ||||||
| 		chunks = realloc(chunks, sizeof(png_chunk *) * (i + 1)); |  | ||||||
| 		if (chunks == NULL) { |  | ||||||
| 			perror("realloc"); |  | ||||||
| 			exit(1); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return chunks; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int is_chunk_valid(png_chunk *chunk) { |  | ||||||
| 	uint32_t crc = htonl(chunk->crc); |  | ||||||
| 	//uint32_t calculated_crc = crc32(0, chunk->type, 4); |  | ||||||
| 	//calculated_crc = crc32(calculated_crc, chunk->data, chunk->length); |  | ||||||
| 	//return crc == calculated_crc; |  | ||||||
| 	return 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int is_chunk_critical(png_chunk *chunk) { |  | ||||||
| 	return chunk->type[0] >= 'A' && chunk->type[0] <= 'Z'; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int get_number_of_chunks(png_chunk **chunks) { |  | ||||||
| 	int i = 0; |  | ||||||
| 	while (chunks[i] != NULL) { |  | ||||||
| 		i++; |  | ||||||
| 	} |  | ||||||
| 	return i; |  | ||||||
| } |  | ||||||
| @@ -1,74 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright Notice |  | ||||||
|  * ---------------- |  | ||||||
|  * Copyright © 1998, 1999 by: Glenn Randers-Pehrson |  | ||||||
|  * This specification is a modification of the PNG 1.0 specification. It is being |  | ||||||
|  * provided by the copyright holder under the provisions of the 1996 MIT copyright and license: |  | ||||||
|  * Copyright © 1996 by: Massachusetts Institute of Technology (MIT) |  | ||||||
|  * This W3C specification is being provided by the copyright holders under |  | ||||||
|  * the following license. By obtaining, using and/or copying this specification, you |  | ||||||
|  * agree that you have read, understood, and will comply with the following terms |  | ||||||
|  * and conditions: |  | ||||||
|  * Permission to use, copy, and distribute this specification for any purpose |  | ||||||
|  * and without fee or royalty is hereby granted, provided that the full text of |  | ||||||
|  * this NOTICE appears on ALL copies of the specification or portions thereof, |  | ||||||
|  * including modifications, that you make. |  | ||||||
|  * THIS SPECIFICATION IS PROVIDED ”AS IS,” AND COPYRIGHT HOLD-ERS |  | ||||||
|  * MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR |  | ||||||
|  * IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, COPYRIGHT |  | ||||||
|  * HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES OF MER-CHANTABILITY |  | ||||||
|  * OR FITNESS FOR ANY PARTICULAR PURPOSE OR |  | ||||||
|  * THAT THE USE OF THE SPECIFICATION WILL NOT INFRINGE ANY |  | ||||||
|  * THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER |  | ||||||
|  * RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY |  | ||||||
|  * USE OF THIS SPECIFICATION. |  | ||||||
|  * The name and trademarks of copyright holders may NOT be used in |  | ||||||
|  * ad-vertising or publicity pertaining to the specification without specific, written |  | ||||||
|  * prior permission. Title to copyright in this specification and any associated |  | ||||||
|  * documentation will at all times remain with copyright holders. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #pragma once |  | ||||||
|  |  | ||||||
| #include <arpa/inet.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <zlib.h> |  | ||||||
| #include <string.h> |  | ||||||
|  |  | ||||||
| // http://www.libpng.org/pub/png/spec/1.2/PNG-Rationale.html#R.PNG-file-signature |  | ||||||
| #define PNG_SIGNATURE "\211PNG\r\n\032\n" |  | ||||||
| #define PNG_SIGNATURE_SIZE 8 |  | ||||||
| typedef struct png_chunk { |  | ||||||
| 	uint32_t length; |  | ||||||
| 	char type[4]; |  | ||||||
| 	char *data; |  | ||||||
| 	uint32_t crc; |  | ||||||
| } png_chunk; |  | ||||||
|  |  | ||||||
| // Get file descriptor from path |  | ||||||
| int get_fd(char *path); |  | ||||||
|  |  | ||||||
| // Get FILE* from file descriptor |  | ||||||
| FILE *get_fp(int fd); |  | ||||||
|  |  | ||||||
| // Store file in heap memory |  | ||||||
| char *load_file(int fd); |  | ||||||
|  |  | ||||||
| // Check if file is a PNG |  | ||||||
| int is_png(char *buffer); |  | ||||||
|  |  | ||||||
| // Get PNG chunk |  | ||||||
| png_chunk *get_png_chunk(char *buffer, int offset); |  | ||||||
|  |  | ||||||
| // Get all PNG chunks |  | ||||||
| png_chunk **get_png_chunks(char *buffer); |  | ||||||
|  |  | ||||||
| // Get number of chunks |  | ||||||
| int get_number_of_chunks(png_chunk **chunks); |  | ||||||
|  |  | ||||||
| // Check if chunk is critical |  | ||||||
| int is_chunk_critical(png_chunk *chunk); |  | ||||||
|  |  | ||||||
| // Is chunk valid? |  | ||||||
| int is_chunk_valid(png_chunk *chunk); |  | ||||||
| @@ -1,13 +0,0 @@ | |||||||
| It's a PNG file |  | ||||||
| Found unknown: IHDR |  | ||||||
| Chunk size is:13 |  | ||||||
| Found unknown: sRGB |  | ||||||
| Chunk size is:1 |  | ||||||
| Found unknown: gAMA |  | ||||||
| Chunk size is:4 |  | ||||||
| Found unknown: pHYs |  | ||||||
| Chunk size is:9 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:18944 |  | ||||||
| Found IEND |  | ||||||
| Chunk size is:0 |  | ||||||
| @@ -1 +0,0 @@ | |||||||
| It's not a PNG file |  | ||||||
| @@ -1,249 +0,0 @@ | |||||||
| It's a PNG file |  | ||||||
| Found unknown: IHDR |  | ||||||
| Chunk size is:13 |  | ||||||
| Found unknown: sRGB |  | ||||||
| Chunk size is:1 |  | ||||||
| Found unknown: gAMA |  | ||||||
| Chunk size is:4 |  | ||||||
| Found unknown: pHYs |  | ||||||
| Chunk size is:9 |  | ||||||
| Found unknown: tEXt |  | ||||||
| Chunk size is:15 |  | ||||||
| Found unknown: tIME |  | ||||||
| Chunk size is:7 |  | ||||||
| Found unknown: tEXt |  | ||||||
| Chunk size is:32 |  | ||||||
| Found unknown: tEXt |  | ||||||
| Chunk size is:33 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65310 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:17176 |  | ||||||
| Found IEND |  | ||||||
| Chunk size is:0 |  | ||||||
| @@ -1,317 +0,0 @@ | |||||||
| It's a PNG file |  | ||||||
| Found unknown: IHDR |  | ||||||
| Chunk size is:13 |  | ||||||
| Found unknown: sRGB |  | ||||||
| Chunk size is:1 |  | ||||||
| Found unknown: gAMA |  | ||||||
| Chunk size is:4 |  | ||||||
| Found unknown: pHYs |  | ||||||
| Chunk size is:9 |  | ||||||
| Found unknown: tEXt |  | ||||||
| Chunk size is:15 |  | ||||||
| Found unknown: tIME |  | ||||||
| Chunk size is:7 |  | ||||||
| Found unknown: tEXt |  | ||||||
| Chunk size is:32 |  | ||||||
| Found unknown: tEXt |  | ||||||
| Chunk size is:33 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65310 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:65524 |  | ||||||
| Found IDAT |  | ||||||
| Chunk size is:53390 |  | ||||||
| Found IEND |  | ||||||
| Chunk size is:0 |  | ||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 19 KiB | 
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 7.1 MiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 9.3 MiB | 
		Reference in New Issue
	
	Block a user