private void createMirrorList() throws ParserConfigurationException, SAXException, IOException {
		URL mirrorsUrl = new URL(String.format(Constants.MIRRORS_URL, this.apiKey));
		
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
		Document document = documentBuilder.parse(mirrorsUrl.openStream());
		
		Element rootElement = document.getDocumentElement();
		
		NodeList nodes = rootElement.getChildNodes();
		for (int i = 0; i < nodes.getLength(); ++i) {
			Node node = nodes.item(i);
			if (node.getNodeName().equals("Mirror")) {
				NodeList mirrorNodes = node.getChildNodes();
				String mirrorPath = null;
				int typeMask = 0;
				for (int j = 0; j < mirrorNodes.getLength(); ++j) {
					Node mirrorNode = mirrorNodes.item(j);
					if (mirrorNode.getNodeName().equals("mirrorpath")) {
						mirrorPath = mirrorNode.getTextContent();
					} else if (mirrorNode.getNodeName().equals("typemask")) {
						typeMask = Integer.parseInt(mirrorNode.getTextContent());
					}
				}
				
				List<MirrorType> mirrorTypesForMask = this.getMirrorTypesFromTypeMask(typeMask);
				for (MirrorType mt : mirrorTypesForMask) {
					if (mt.equals(MirrorType.ZIP)) {
						this.zipMirrors.add(mirrorPath);
					} else if (mt.equals(MirrorType.BANNER)) {
						this.bannerMirrors.add(mirrorPath);
					} else if (mt.equals(MirrorType.XML)) {
						this.xmlMirrors.add(mirrorPath);
					}
				}
			}
		}
	}