protected void randomizeFolders(String romId, ByteStream rom,
			ChipLibrary library) {
		// Randomize Folder
		ItemProducer chipProducer
				= new BN456RewardProducer(library);
		FolderProducer producer
				= new FolderProducer(chipProducer);
		FolderProvider provider
				= new FolderProvider(this, producer);
		RepeatStrategy folderListStrat
				= new RepeatStrategy(provider, 7);

		rom.setRealPosition(getVersionAddress(0x043058, romId));
		rom.setPosition(rom.readInt32());
		folderListStrat.execute(rom);

		runProvider(provider, rom);

		// Fix tutorial folders.
		FolderProvider tutorialProvider
				= new FolderProvider(this, producer);
		PointerListStrategy tutorialPtrStrat
				= new PointerListStrategy(tutorialProvider, 1);
		FilterStrategy filterEmptyStrat
				= new FilterStrategy(tutorialPtrStrat, new byte[]{
					0, 0, 0, 0
				}, new byte[]{
					-1, -1, -1, -1
				}, true);
		RepeatStrategy tutorialPtrArrayStrat
				= new RepeatStrategy(filterEmptyStrat, 68);
		rom.setRealPosition(getVersionAddress(0x007B34, romId));
		rom.setPosition(rom.readInt32());
		tutorialPtrArrayStrat.execute(rom);
		byte[] codesWideSwrd = library.getElement(49).getCodes();
		byte[] codesAreaGrab = library.getElement(117).getCodes();
		List<Byte> possibleCodes = new ArrayList<>(4);
		for (byte a : codesWideSwrd) {
			for (byte b : codesAreaGrab) {
				if (a == b) {
					possibleCodes.add(a);
				}
			}
		}
		byte comboCode = possibleCodes.get(next(possibleCodes.size()));
		for (Folder folder : tutorialProvider.allData()) {
			for (Item chip : folder.getChips()) {
				if (chip.getChip().index() == 49
						|| chip.getChip().index() == 117) {
					chip.setChipCode(chip.getChip(), comboCode);
				} else {
					byte[] codes = chip.getChip().getCodes();
					byte code = codes[next(codes.length)];
					chip.setChipCode(chip.getChip(), code);
				}
			}
			tutorialProvider.produce(rom);
		}
	}