// Path: src/main/java/com/kasirgalabs/etumulator/lang/Linker.java
// public static class ExecutableCode {
//     private final String[] code;
//     private final List<Data> data;
// 
//     private ExecutableCode(String[] code, List<Data> data) {
//         this.code = new String[code.length];
//         for(int i = 0; i < code.length; i++) {
//             this.code[i] = code[i];
//         }
//         this.data = new ArrayList<>(data.size());
//         for(int i = 0; i < data.size(); i++) {
//             this.data.add(new Data(data.get(i)));
//         }
//     }
// 
//     public String[] getCode() {
//         String[] temp = new String[code.length];
//         for(int i = 0; i < code.length; i++) {
//             temp[i] = code[i];
//         }
//         return temp;
//     }
// 
//     public List<Data> getData() {
//         List<Data> temp = new ArrayList<>(data.size());
//         for(int i = 0; i < data.size(); i++) {
//             temp.add(new Data(data.get(i)));
//         }
//         return temp;
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/processor/Memory.java
// @Singleton
// public class Memory implements Observable {
//     private final Map<Integer, Byte> memory = new HashMap<>(16);
//     private final Dispatcher dispatcher;
// 
//     public Memory() {
//         this.dispatcher = new BaseDispatcher();
//     }
// 
//     @Inject
//     public Memory(Dispatcher dispatcher) {
//         this.dispatcher = dispatcher;
//     }
// 
//     @Override
//     public void addObserver(Observer observer) {
//         dispatcher.addObserver(observer);
//     }
// 
//     public int get(int address, Size size) {
//         if(isAddressEmpty(address, size)) {
//             return (int) (Math.random() * Integer.MAX_VALUE);
//         }
//         int value;
//         int temp;
//         switch(size) {
//             case BYTE:
//                 return 0x0000_00ff & memory.get(address);
//             case HALFWORD:
//                 value = memory.get(address);
//                 temp = memory.get(address + 1);
//                 temp <<= 8;
//                 value |= temp;
//                 return 0x0000_ffff & value;
//             case WORD:
//                 value = memory.get(address);
//                 temp = memory.get(address + 1);
//                 temp <<= 8;
//                 value |= temp;
//                 temp = memory.get(address + 2);
//                 temp <<= 16;
//                 value |= temp;
//                 temp = memory.get(address + 3);
//                 temp <<= 16;
//                 value |= temp;
//                 return value;
//             default:
//                 return memory.get(address);
//         }
//     }
// 
//     public void set(int address, int value, Size size) {
//         switch(size) {
//             case BYTE:
//                 memory.put(address, (byte) value);
//                 dispatcher.notifyObservers(Memory.class, address);
//                 break;
//             case HALFWORD:
//                 memory.put(address, (byte) value);
//                 dispatcher.notifyObservers(Memory.class, address);
//                 memory.put(address + 1, (byte) (value >>> 8));
//                 dispatcher.notifyObservers(Memory.class, address);
//                 break;
//             case WORD:
//                 memory.put(address, (byte) value);
//                 dispatcher.notifyObservers(Memory.class, address);
//                 memory.put(address + 1, (byte) (value >>> 8));
//                 dispatcher.notifyObservers(Memory.class, address);
//                 memory.put(address + 2, (byte) (value >>> 16));
//                 dispatcher.notifyObservers(Memory.class, address);
//                 memory.put(address + 3, (byte) (value >>> 24));
//                 dispatcher.notifyObservers(Memory.class, address);
//         }
//     }
// 
//     public boolean isAddressEmpty(int address, Size size) {
//         boolean empty = false;
//         for(int i = 0; i <= size.ordinal(); i++) {
//             if(!memory.containsKey(address + i)) {
//                 empty = true;
//             }
//         }
//         if(size == Size.WORD) {
//             return empty || !memory.containsKey(address + 3);
//         }
//         return empty;
//     }
// 
//     public void reset() {
//         memory.clear();
//         dispatcher.notifyObservers(Memory.class);
//     }
// 
//     public enum Size {
//         BYTE, HALFWORD, WORD
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/processor/Memory.java
// public enum Size {
//     BYTE, HALFWORD, WORD
// }


import com.kasirgalabs.etumulator.lang.Linker.ExecutableCode;
import com.kasirgalabs.etumulator.processor.Memory;
import com.kasirgalabs.etumulator.processor.Memory.Size;
import java.util.List;
package com.kasirgalabs.etumulator.lang;


public class Loader {
    private final Memory memory;

    public Loader(Memory memory) {
        this.memory = memory;
    }

    public void load(ExecutableCode executablecode) {
        List<Data> data = executablecode.getData();
        data.forEach(item -> {
            String value = item.getValue();
            int address = item.getAddress();
            for(int i = 0; i < value.length(); i++) {
// Path: src/main/java/com/kasirgalabs/etumulator/lang/Linker.java
// public static class ExecutableCode {
//     private final String[] code;
//     private final List<Data> data;
// 
//     private ExecutableCode(String[] code, List<Data> data) {
//         this.code = new String[code.length];
//         for(int i = 0; i < code.length; i++) {
//             this.code[i] = code[i];
//         }
//         this.data = new ArrayList<>(data.size());
//         for(int i = 0; i < data.size(); i++) {
//             this.data.add(new Data(data.get(i)));
//         }
//     }
// 
//     public String[] getCode() {
//         String[] temp = new String[code.length];
//         for(int i = 0; i < code.length; i++) {
//             temp[i] = code[i];
//         }
//         return temp;
//     }
// 
//     public List<Data> getData() {
//         List<Data> temp = new ArrayList<>(data.size());
//         for(int i = 0; i < data.size(); i++) {
//             temp.add(new Data(data.get(i)));
//         }
//         return temp;
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/processor/Memory.java
// @Singleton
// public class Memory implements Observable {
//     private final Map<Integer, Byte> memory = new HashMap<>(16);
//     private final Dispatcher dispatcher;
// 
//     public Memory() {
//         this.dispatcher = new BaseDispatcher();
//     }
// 
//     @Inject
//     public Memory(Dispatcher dispatcher) {
//         this.dispatcher = dispatcher;
//     }
// 
//     @Override
//     public void addObserver(Observer observer) {
//         dispatcher.addObserver(observer);
//     }
// 
//     public int get(int address, Size size) {
//         if(isAddressEmpty(address, size)) {
//             return (int) (Math.random() * Integer.MAX_VALUE);
//         }
//         int value;
//         int temp;
//         switch(size) {
//             case BYTE:
//                 return 0x0000_00ff & memory.get(address);
//             case HALFWORD:
//                 value = memory.get(address);
//                 temp = memory.get(address + 1);
//                 temp <<= 8;
//                 value |= temp;
//                 return 0x0000_ffff & value;
//             case WORD:
//                 value = memory.get(address);
//                 temp = memory.get(address + 1);
//                 temp <<= 8;
//                 value |= temp;
//                 temp = memory.get(address + 2);
//                 temp <<= 16;
//                 value |= temp;
//                 temp = memory.get(address + 3);
//                 temp <<= 16;
//                 value |= temp;
//                 return value;
//             default:
//                 return memory.get(address);
//         }
//     }
// 
//     public void set(int address, int value, Size size) {
//         switch(size) {
//             case BYTE:
//                 memory.put(address, (byte) value);
//                 dispatcher.notifyObservers(Memory.class, address);
//                 break;
//             case HALFWORD:
//                 memory.put(address, (byte) value);
//                 dispatcher.notifyObservers(Memory.class, address);
//                 memory.put(address + 1, (byte) (value >>> 8));
//                 dispatcher.notifyObservers(Memory.class, address);
//                 break;
//             case WORD:
//                 memory.put(address, (byte) value);
//                 dispatcher.notifyObservers(Memory.class, address);
//                 memory.put(address + 1, (byte) (value >>> 8));
//                 dispatcher.notifyObservers(Memory.class, address);
//                 memory.put(address + 2, (byte) (value >>> 16));
//                 dispatcher.notifyObservers(Memory.class, address);
//                 memory.put(address + 3, (byte) (value >>> 24));
//                 dispatcher.notifyObservers(Memory.class, address);
//         }
//     }
// 
//     public boolean isAddressEmpty(int address, Size size) {
//         boolean empty = false;
//         for(int i = 0; i <= size.ordinal(); i++) {
//             if(!memory.containsKey(address + i)) {
//                 empty = true;
//             }
//         }
//         if(size == Size.WORD) {
//             return empty || !memory.containsKey(address + 3);
//         }
//         return empty;
//     }
// 
//     public void reset() {
//         memory.clear();
//         dispatcher.notifyObservers(Memory.class);
//     }
// 
//     public enum Size {
//         BYTE, HALFWORD, WORD
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/processor/Memory.java
// public enum Size {
//     BYTE, HALFWORD, WORD
// }


// Path: src/main/java/com/kasirgalabs/etumulator/lang/Loader.java
import com.kasirgalabs.etumulator.lang.Linker.ExecutableCode;
import com.kasirgalabs.etumulator.processor.Memory;
import com.kasirgalabs.etumulator.processor.Memory.Size;
import java.util.List;

package com.kasirgalabs.etumulator.lang;


public class Loader {
    private final Memory memory;

    public Loader(Memory memory) {
        this.memory = memory;
    }

    public void load(ExecutableCode executablecode) {
        List<Data> data = executablecode.getData();
        data.forEach(item -> {
            String value = item.getValue();
            int address = item.getAddress();
            for(int i = 0; i < value.length(); i++) {
                memory.set(address + i, value.charAt(i), Size.BYTE);