java版迷宫

时间:2021-02-04 18:19:36

当年学数据结构,正好java也刚刚学会gui编程,就想着结合起来做个小东西,然后这个自动走路的小球就出来了。

一个方向的枚举Dir.java

public enum Dir {
L,U,R,D
}

结束标志EndFlag.java

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random; public class EndFlag implements MyDraw{
private int row,col;
private Random random = new Random();
private MyMaze mm;
private int h = MyMaze.BORDER_SIZE;
private int w = MyMaze.BORDER_SIZE;
Color c;
public EndFlag(MyMaze m,Color c){
this.row = 27;
this.col = 27;
this.mm = m;
this.c = c;
} public void draw(Graphics g){
Color color = g.getColor();
g.setColor(this.c);
g.fillOval(col*MyMaze.BORDER_SIZE, row*MyMaze.BORDER_SIZE, w, h);
g.setColor(color);
}
}

所有能绘图的对象的抽象接口

import java.awt.Graphics;

public interface MyDraw {
public void draw(Graphics g);
}

主窗体

import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class MyMaze extends Frame { public static final int BORDER_SIZE = 20;
public static final int ROW = 30;
public static final int COL = 30;
public static final int x = 300;
public static final int y = 100;
private static Color wallColor = Color.BLACK;
private static Color endFlagColor = Color.RED;
private static int success = 2;
private static int fail = 1; private Image offScreenImage = null;
private Font font = new Font("宋体", Font.BOLD,40 );
public Wall w = new Wall(this,wallColor); public EndFlag ef = new EndFlag(this,endFlagColor);
public MyMethod mmd = new MyMethod(this, Color.BLUE,1,"小蓝");
public MyMethod mmd2 = new MyMethod(this, Color.YELLOW,2,"大黄");
public MyMethod mymmd = new MyMethod(this, Color.ORANGE,0,"手动");
private boolean pause = false;//是否暂停重画线程 private Graphics g; public void launch(){
this.setLocation(x, y);
this.setBackground(Color.WHITE);
this.setSize(COL*BORDER_SIZE, ROW*BORDER_SIZE);
this.setTitle("迷宫");
//this.setAlwaysOnTop(false);
this.setUndecorated(true);
this.addKeyListener(new KeyMonitor()); this.addWindowListener(new WindowAdapter() { @Override
public void windowClosing(WindowEvent e) {
System.exit(0);
} });
this.setResizable(false);
this.setVisible(true); new Thread(new PaintThread()).start();
} public static void main(String[] args) {
new MyMaze().launch();
} public void draw(MyDraw d){
d.draw(g);
} public boolean isSuccess(MyMethod m){
if(m.isSuccess() == success){
return true;
}
return false;
} public boolean isFail(MyMethod m){
if(m.isSuccess() == fail){
return true;
}
return false;
} @Override
public void paint(Graphics g) {
this.g = g;
if(isSuccess(mmd) && isSuccess(mmd2)){
g.setColor(Color.RED);
g.setFont(font);
g.drawString("游戏成功!", 225, 325);
return;
} if(isFail(mmd) && isFail(mmd2)){
g.setColor(Color.RED);
g.setFont(font);
g.drawString("游戏失败!", 225, 325);
return;
} Color color = g.getColor();
g.setColor(Color.WHITE);
g.fillRect(0, 0, COL*BORDER_SIZE, ROW*BORDER_SIZE);
g.setColor(color);
draw(w);
draw(ef);
draw(mmd);
draw(mmd2);
draw(mymmd);
} @Override
public void update(Graphics g) {
if(offScreenImage == null){
offScreenImage = this.createImage(COL*BORDER_SIZE, ROW*BORDER_SIZE);
}
Graphics gra = offScreenImage.getGraphics();
paint(gra);
g.drawImage(offScreenImage, 0, 0, null);
} private class PaintThread implements Runnable {
public void run() {
while(true){
if(pause){
continue;
}
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} } private class KeyMonitor extends KeyAdapter { @Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_SPACE){
pause = !pause;
}else if(key == KeyEvent.VK_ESCAPE){
System.exit(0);
}
mymmd.keyPressed(e);
} } }

自动寻路小球的走法

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent; import org.w3c.dom.Node; public class MyMethod implements MyDraw{
private int step = 0;
private int choose; int success = 0;
public int isSuccess() {
return success;
} private int row = 3;
private int col = 3;
private Dir dir = Dir.R;
private int w = MyMaze.BORDER_SIZE;
private int h = MyMaze.BORDER_SIZE;
private String name;
Color c;
MyMaze mm;
Stack moveStack = new Stack();
Stack recordStack = new Stack(); public MyMethod(MyMaze mm,Color c,int choose,String name){
this.c = c;
this.mm = mm;
this.choose = choose;
this.name = name;
keepMoveRecord();
} public void draw(Graphics g){
move();
Color color = g.getColor();
g.setColor(c);
g.fillOval(col*MyMaze.BORDER_SIZE, row*MyMaze.BORDER_SIZE, w, h);
g.setColor(color);
} void move(){
if(this.row == 27 && this.col == 27){
success = 2;//成功
return;
}
if(moveStack.isEmpty()){
success = 1;//无路可走
return;
}
step ++;
switch (choose) {
case 0:
return;
case 1:
if(RisOpen()){
goRight();
return;
}
if(DisOpen()){
goDown();
return;
}
if(UisOpen()){
goUp();
return;
}
if(LisOpen()){
goLeft();
return;
}
break;
case 2:
if(DisOpen()){
goDown();
return;
}
if(RisOpen()){
goRight();
return;
}
if(UisOpen()){
goUp();
return;
}
if(LisOpen()){
goLeft();
return;
}
break;
}
goBack();
} boolean LisOpen(){
if(checkWall(this.row, this.col-1) || checkRecordRepeat(this.row, this.col-1)){
return false;
}
return true;
} boolean UisOpen(){
if(checkWall(this.row-1, this.col) || checkRecordRepeat(this.row-1, this.col)){
return false;
}
return true;
} boolean RisOpen(){
if(checkWall(this.row, this.col+1) || checkRecordRepeat(this.row, this.col+1)){
return false;
}
return true;
} boolean DisOpen(){
if(checkWall(this.row+1, this.col) || checkRecordRepeat(this.row+1, this.col)){
return false;
}
return true;
} void keepMoveRecord(){
keepMove();
keepRecord();
} void keepMove(){
moveStack.push(row, col, dir);
} void keepRecord(){
recordStack.push(row, col, dir);
} boolean checkRecordRepeat(int r,int c){
return recordStack.isInStack(r, c);
} boolean checkWall(int row,int col){
if(mm.w.wallIsSet(row, col)){
return true;
}
return false;
} void goRight(){
System.out.println(this.name + ": 向右走一步 + step:"+step);
this.row = row;
this.col = col+1;
keepMoveRecord();
} void goDown(){
System.out.println(this.name + ": 向下走一步 + step:"+step);
this.row = row+1;
this.col = col;
keepMoveRecord();
} void goLeft(){
System.out.println(this.name + ": 向左走一步 + step:"+step);
this.row = row;
this.col = col-1;
keepMoveRecord();
} void goUp(){
System.out.println(this.name + ": 向上走一步 + step:"+step);
this.row = row-1;
this.col = col;
keepMoveRecord();
} void goBack(){
moveStack.pop();
System.out.println(this.name + ": 向后退一步。。。");
this.row = moveStack.getTopRow();
this.col = moveStack.getTopCol();
} void keyPressed(KeyEvent e){
int key = e.getKeyCode();
switch(key){
case KeyEvent.VK_LEFT:
if(LisOpen()){
goLeft();
}
break;
case KeyEvent.VK_RIGHT:
if(RisOpen()){
goRight();
}
break;
case KeyEvent.VK_UP:
if(UisOpen()){
goUp();
}
break;
case KeyEvent.VK_DOWN:
if(DisOpen()){
goDown();
}
break;
case KeyEvent.VK_B:
goBack();
}
} }

自己实现的一个栈,也可以用sun提供的替换

class Stack{

    private static final int STACK_LENGTH = 1000;
private int[] posRow = new int[STACK_LENGTH];
private int[] posCol = new int[STACK_LENGTH];
Dir[] dirsDir = new Dir[STACK_LENGTH]; int base;
int top;
public Stack(){
base = 0;
top = 0;
}
void push(int row,int col,Dir dir){
if(!isFull()){
posRow[top] = row;
posCol[top] = col;
dirsDir[top] = dir;
top++;
}
}
void pop(){
if(isEmpty()) return;
top--;
} boolean isEmpty(){
if(top == base){
return true;
}
return false;
} boolean isFull(){
if(top == STACK_LENGTH){
return true;
}
return false;
} int getTopRow(){
if(isEmpty()) return 0;
return posRow[top-1];
} int getTopCol(){
if(isEmpty()) return 0;
return posCol[top-1];
} Dir getTopDir(){
return dirsDir[top];
} boolean isInStack(int row,int col){
for(int i = 0 ; i<top ; i++){
if(posRow[i] == row && posCol[i] == col){
return true;
}
}
return false;
} }

墙的类

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.List;
import java.util.Random; public class Wall implements MyDraw{ private MyMaze mm; Color c ;
public List<Node> nodes = new ArrayList<Node>(); Random rd = new Random(); public Wall(MyMaze mm,Color c){
this.mm = mm;
this.c = c;
makeWall();
} public void draw(Graphics g){
for(int i = 0; i<nodes.size();i++){
nodes.get(i).draw(g);
}
} void makeWall(){
boolean b = true;
for(int i = 0 ; i<MyMaze.COL*MyMaze.ROW/3;i++){
Node node = new Node(rd.nextInt(MyMaze.ROW-2)+1, rd.nextInt(MyMaze.COL-2)+1);
boolean b1 = node.getCol()==3 && node.getRow()==3 ;
boolean b2 = node.getCol()==27 && node.getRow()==27 ;
if(b1) b=false;
else if(b2) b=false;
else b=true;
if(b){
nodes.add(node);
}
} for(int i = 0 ; i< MyMaze.ROW; i++){
for(int j = 0; j<MyMaze.COL ; j++){
if(i == 0 || j == 0 || i == MyMaze.COL-1 ||j == MyMaze.ROW-1){
Node n = new Node(i,j);
nodes.add(n);
}
}
} } public boolean wallIsSet(int row,int col){
for(int i=0; i<nodes.size();i++){
Node node = nodes.get(i);
if(row == node.getRow() && col == node.getCol()){
return true;
}
}
return false;
} private class Node{
private Toolkit tk = Toolkit.getDefaultToolkit();
private Image image = null;
private int row,col; public int getRow() {
return row;
} public int getCol() {
return col;
} private int w = MyMaze.BORDER_SIZE;
private int h = MyMaze.BORDER_SIZE; public Node(int row, int col) {
this.row = row;
this.col = col;
image = tk.getImage(Wall.class.getClassLoader().getResource("images/2.jpg"));
} public void draw(Graphics g){
g.drawImage(image, col*MyMaze.BORDER_SIZE, row*MyMaze.BORDER_SIZE, null);
}
} }

墙的小图片aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/4QPqRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAbAAAAcgEyAAIAAAAUAAAAjYdpAAQAAAABAAAApAAAANAAAABIAAAAAQAAAEgAAAABQWRvYmUgUGhvdG9zaG9wIENTIFdpbmRvd3MAMjAxMToxMDoyOSAyMTowNDoxMgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAFKADAAQAAAABAAAAFAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAK0AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAQBIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAFAAUAwEiAAIRAQMRAf/dAAQAAv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8AyL7cpuRs2VH1HuAO53aXfuKBdl1se4tqIEu+k74/uJ7hiC5wOMZLnR+jHYoTGY7BYbMZ0bnOE1g+1Vfo6OvdNvy9m/bVEbvpO8J/cSUNuLE/ZjHP82OEkPonXu//0Kl/7P8AtLZ9ed7/ANxRt/Z/pPn142mfoLzdJVO2zpd930n/ACf6f+Hjb/I8El5skl9iftf/2f/tDmpQaG90b3Nob3AgMy4wADhCSU0EBAAAAAAABxwCAAACAAIAOEJJTQQlAAAAAAAQRgzyiSa4VtqwnAGhsKeQdzhCSU0D7QAAAAAAEABIAAAAAQACAEgAAAABAAI4QklNBCYAAAAAAA4AAAAAAAAAAAAAP4AAADhCSU0EDQAAAAAABAAAAHg4QklNBBkAAAAAAAQAAAAeOEJJTQPzAAAAAAAJAAAAAAAAAAABADhCSU0ECgAAAAAAAQAAOEJJTScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAA4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAAAAADQwAAAAYAAAAAAAAAAAAAABQAAAAUAAAAB2cqaAeYmAAtADFSb2csAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAAFAAAAABSZ2h0bG9uZwAAABQAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxv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qEcBVn/oAU6oRwFWf+gAAgGUngkBVT/pAZSeCQFVP+kBlJ4JAVU/6QACAZSK6QFRgBIBlIrpAVGAEgGUiukBUYASAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgEGrcIBSo8oAQatwgFKjygBBq3CAUqPKAACAQK4nwFKsNIBArifAUqw0gECuJ8BSrDSAAIBBVx2AZHw0wEFXHYBkfDTAQVcdgGR8NMAAgEJUZkBkc8oAQlRmQGRzygBCVGZAZHPKDhCSU0EBgAAAAAABwAIAAAAAQEA/+EZMmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLycgeDp4bXB0az0nWE1QIHRvb2xraXQgMy4wLTI4LCBmcmFtZXdvcmsgMS42Jz4KPHJkZjpSREYgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJyB4bWxuczppWD0naHR0cDovL25zLmFkb2JlLmNvbS9pWC8xLjAvJz4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxODlkZmY4My0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQnCiAgeG1sbnM6ZXhpZj0naHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8nPgogIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogIDxleGlmOlBpeGVsWERpbWVuc2lvbj4yMDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjIwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOjE4OWRmZjgzLTAyMmUtMTFlMS1iMjgwLWZmNWViMDQ1Nzk1ZCcKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1aWQ6MTg5ZGZmODMtMDIyZS0xMWUxLWIyODAtZmY1ZWIwNDU3OTVkJwogIHhtbG5zOnBob3Rvc2hvcD0naHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyc+CiAgPHBob3Rvc2hvcDpIaXN0b3J5PjwvcGhvdG9zaG9wOkhpc3Rvcnk+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxODlkZmY4My0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQnCiAgeG1sbnM6dGlmZj0naHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8nPgogIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgPHRpZmY6WFJlc29sdXRpb24+NzIvMTwvdGlmZjpYUmVzb2x1dGlvbj4KICA8dGlmZjpZUmVzb2x1dGlvbj43Mi8xPC90aWZmOllSZXNvbHV0aW9uPgogIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxODlkZmY4My0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQnCiAgeG1sbnM6eGFwPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvJz4KICA8eGFwOkNyZWF0ZURhdGU+MjAxMS0xMC0yOVQyMTowNDoxMiswODowMDwveGFwOkNyZWF0ZURhdGU+CiAgPHhhcDpNb2RpZnlEYXRlPjIwMTEtMTAtMjlUMjE6MDQ6MTIrMDg6MDA8L3hhcDpNb2RpZnlEYXRlPgogIDx4YXA6TWV0YWRhdGFEYXRlPjIwMTEtMTAtMjlUMjE6MDQ6MTIrMDg6MDA8L3hhcDpNZXRhZGF0YURhdGU+CiAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MgV2luZG93czwveGFwOkNyZWF0b3JUb29sPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1aWQ6MTg5ZGZmODMtMDIyZS0xMWUxLWIyODAtZmY1ZWIwNDU3OTVkJwogIHhtbG5zOnN0UmVmPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjJwogIHhtbG5zOnhhcE1NPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vJz4KICA8eGFwTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICA8c3RSZWY6aW5zdGFuY2VJRD51dWlkOjQ4YmZjYzk0LWZiYmItMTFlMC04MzliLWZjYjIzZmQ2NGJkMjwvc3RSZWY6aW5zdGFuY2VJRD4KICAgPHN0UmVmOmRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjQ4YmZjYzkzLWZiYmItMTFlMC04MzliLWZjYjIzZmQ2NGJkMjwvc3RSZWY6ZG9jdW1lbnRJRD4KICA8L3hhcE1NOkRlcml2ZWRGcm9tPgogIDx4YXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDoxODlkZmY4Mi0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQ8L3hhcE1NOkRvY3VtZW50SUQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxODlkZmY4My0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6Zm9ybWF0PmltYWdlL2pwZWc8L2RjOmZvcm1hdD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9J3cnPz7/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAAB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" alt="" />