[
  {
    "path": ".gitignore",
    "content": "# Created by https://www.gitignore.io/api/xcode,osx\n\n### Xcode ###\n# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n## Build generated\nbuild/\nDerivedData\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n\n## Other\n*.xccheckout\n*.moved-aside\n*.xcuserstate\n\n\n### OSX ###\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n"
  },
  {
    "path": "LayerX/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  LayerX\n//\n//  Created by Michael Chen on 2015/10/26.\n//  Copyright © 2015年 Michael Chen. All rights reserved.\n//\n\nimport Cocoa\n\n@NSApplicationMain\nclass AppDelegate: NSObject, NSApplicationDelegate {\n\n\tprivate let defaultSize = NSMakeSize(480, 320)\n\tprivate let resizeStep: CGFloat = 0.1\n\n\tvar allSpaces = false\n\tvar locked = false\n\tvar onTop = false\n\n\tweak var window: MCWIndow!\n\tweak var viewController: ViewController!\n\tvar isLockIconHiddenWhileLocked = false {\n\t\tdidSet { viewController.lockIconImageView.isHidden = window.isMovable || isLockIconHiddenWhileLocked }\n\t}\n\tvar isSizeHidden = false {\n\t\tdidSet { viewController.sizeTextField.isHidden = isSizeHidden }\n\t}\n\n\tfunc applicationDidFinishLaunching(_ aNotification: Notification) {\n\t\tif let window = NSApp.windows.first as? MCWIndow {\n\t\t\twindow.fitsWithSize(defaultSize)\n\t\t\twindow.collectionBehavior = [.managed, .moveToActiveSpace]\n\t\t\tself.window = window\n\t\t}\n\t}\n}\n\nfileprivate enum ArrowTag: Int {\n\tcase up = 20\n\tcase left = 21\n\tcase right = 22\n\tcase down = 23\n}\n\n// MARK: - Hotkeys\n\nextension AppDelegate {\n\n\tprivate var originalSize: NSSize {\n\t\tviewController.imageView.image?.size ?? defaultSize\n\t}\n\n\tprivate func resizeAspectFit(calculator: (_ original: CGFloat, _ current: CGFloat) -> CGFloat) {\n\t\tlet originalSize = self.originalSize\n\t\tlet width = calculator(originalSize.width, window.frame.size.width)\n\t\tlet height = width / originalSize.width * originalSize.height\n\n\t\tif width > 0 {\n\t\t\twindow.resizeTo(NSSize(width: width, height: height), animated: true)\n\t\t}\n\t}\n\n\t@IBAction func actualSize(_ sender: AnyObject?) {\n\t\twindow.resizeTo(originalSize, animated: true)\n\t}\n\n\t@IBAction func makeLarger(_ sender: AnyObject) {\n\t\tresizeAspectFit { $0 * ($1 / $0 + resizeStep) }\n\t}\n\n\t@IBAction func makeSmaller(_ sender: AnyObject) {\n\t\tresizeAspectFit { $0 * ($1 / $0 - resizeStep) }\n\t}\n\n\t@IBAction func makeLargerOnePixel(_ sender: AnyObject) {\n\t\tresizeAspectFit { $1 + 1 }\n\t}\n\n\t@IBAction func makeSmallerOnePixel(_ sender: AnyObject) {\n\t\tresizeAspectFit { $1 - 1 }\n\t}\n\n\t@IBAction func increaseTransparency(_ sender: AnyObject) {\n\t\tvar alpha = viewController.imageView.alphaValue\n\t\talpha -= 0.1\n\t\tviewController.imageView.alphaValue = max(alpha, 0.05)\n\t}\n\n\t@IBAction func reduceTransparency(_ sender: AnyObject) {\n\t\tvar alpha = viewController.imageView.alphaValue\n\t\talpha += 0.1\n\t\tviewController.imageView.alphaValue = min(alpha, 1.0)\n\t}\n\t\n\tfunc getPasteboardImage() -> NSImage? {\n\t\tlet pasteboard = NSPasteboard.general;\n\t\tif let file = pasteboard.data(forType: NSPasteboard.PasteboardType.fileURL),\n\t\t   let str = String(data: file, encoding: .utf8),\n\t\t   let url = URL(string: str)\n\t\t{\n\t\t\treturn NSImage(contentsOf: url)\n\t\t}\n\n\t\tif let tiff = pasteboard.data(forType: NSPasteboard.PasteboardType.tiff) {\n\t\t\treturn NSImage(data: tiff)\n\t\t}\n\n\t\tif let png = pasteboard.data(forType: NSPasteboard.PasteboardType.png) {\n\t\t\treturn NSImage(data: png)\n\t\t}\n\n\t\treturn nil\n\t}\n\t\n\t@IBAction func paste(_ sender: AnyObject) {\n\t\tguard let image = getPasteboardImage() else { return }\n\t\tlet rep = image.representations[0]\n\t\tviewController.imageView.image = image\n\t\tlet size = NSMakeSize(CGFloat(rep.pixelsWide), CGFloat(rep.pixelsHigh))\n\t\twindow.resizeTo(size, animated: true)\n\t\tviewController.sizeTextField.isHidden = false\n\t\tviewController.placeholderTextField.isHidden = true\n\n\t}\n\t\n\t@IBAction func toggleLockWindow(_ sender: AnyObject) {\n\t\tlet menuItem = sender as! NSMenuItem\n\t\tlocked = !locked\n\t\tonTop = locked\n\t\tif locked {\n\t\t\tmenuItem.title  = \"Unlock\"\n\t\t\twindow.isMovable = false\n\t\t\twindow.ignoresMouseEvents = true\n\t\t\twindow.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.maximumWindow)))\n\t\t} else {\n\t\t\tmenuItem.title  = \"Lock\"\n\t\t\twindow.isMovable = true\n\t\t\twindow.ignoresMouseEvents = false\n\t\t\twindow.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.normalWindow)))\n\t\t}\n\n\t\tviewController.lockIconImageView.isHidden = window.isMovable || isLockIconHiddenWhileLocked\n\t}\n\t\n\t@IBAction func toggleOnTop(_ sender: AnyObject) {\n\t\tlet menuItem = sender as! NSMenuItem\n\t\tonTop = !onTop\n\t\tif onTop {\n\t\t\tmenuItem.title = \"Don't keep on top\"\n\t\t\twindow.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.maximumWindow)))\n\t\t} else if !locked {\n\t\t\tmenuItem.title = \"Keep on top\"\n\t\t\twindow.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.normalWindow)))\n\t\t}\n\t}\n\t\n\t@IBAction func toggleLockIconVisibility(_ sender: AnyObject) {\n\t\tlet menuItem = sender as! NSMenuItem\n\t\tmenuItem.state = menuItem.state == .on ? .off : .on\n\t\tisLockIconHiddenWhileLocked = menuItem.state == .on\n\t}\n\n\t@IBAction func toggleSizeVisibility(_ sender: AnyObject) {\n\t\tlet menuItem = sender as! NSMenuItem\n\t\tmenuItem.state = menuItem.state == .on ? .off : .on\n\t\tisSizeHidden = menuItem.state == .on\n\t}\n\n\t@IBAction func moveAround(_ sender: AnyObject) {\n\t\tlet menuItem = sender as! NSMenuItem\n\n\t\tguard let arrow = ArrowTag(rawValue: menuItem.tag) else {\n\t\t\treturn\n\t\t}\n\n\t\tswitch arrow {\n\t\tcase .up:\n\t\t\twindow.moveBy(CGPoint(x: 0, y: 1))\n\t\tcase .left:\n\t\t\twindow.moveBy(CGPoint(x: -1, y: 0))\n\t\tcase .right:\n\t\t\twindow.moveBy(CGPoint(x: 1, y: 0))\n\t\tcase .down:\n\t\t\twindow.moveBy(CGPoint(x: 0, y: -1))\n\t\t}\n\t}\n\n\t@IBAction func toggleAllSpaces(_ sender: AnyObject) {\n\t\tlet menuItem = sender as! NSMenuItem\n\t\tallSpaces = !allSpaces\n\t\tif allSpaces {\n\t\t\tmenuItem.title = \"Keep on this space\"\n\t\t\twindow.collectionBehavior = [.canJoinAllSpaces]\n\t\t} else {\n\t\t\tmenuItem.title = \"Keep on all spaces\"\n\t\t\twindow.collectionBehavior = [.managed, .moveToActiveSpace]\n\t\t}\n\t}\n\n\tfunc validateMenuItem(_ menuItem: NSMenuItem) -> Bool {\n\t\treturn viewController.imageView.image != nil\n\t}\n}\n\n// MARK: - Helper\n\nfunc appDelegate() -> AppDelegate {\n\treturn NSApp.delegate as! AppDelegate\n}\n"
  },
  {
    "path": "LayerX/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"16x16\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon-16.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"16x16\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon-32.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"32x32\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon-34.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"32x32\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon-64.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"128x128\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon-128.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"128x128\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon-257.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"256x256\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon-256.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"256x256\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"512x512\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon-1.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"512x512\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"appIcon-2.png\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "LayerX/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "LayerX/Assets.xcassets/lock.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Lock-16.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"lock-32.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"lock.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "LayerX/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11201\" systemVersion=\"15F34\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\" initialViewController=\"B8D-0N-5wS\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"11201\"/>\n        <capability name=\"Aspect ratio constraints\" minToolsVersion=\"5.1\"/>\n    </dependencies>\n    <scenes>\n        <!--Application-->\n        <scene sceneID=\"JPo-4y-FX3\">\n            <objects>\n                <application id=\"hnw-xV-0zn\" sceneMemberID=\"viewController\">\n                    <menu key=\"mainMenu\" title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n                        <items>\n                            <menuItem title=\"LayerX\" id=\"1Xt-HY-uBw\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"LayerX\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                                    <items>\n                                        <menuItem title=\"About LayerX\" id=\"5kV-Vb-QxS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontStandardAboutPanel:\" target=\"Ady-hI-5gd\" id=\"Exp-CZ-Vem\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                                        <menuItem title=\"Preferences…\" keyEquivalent=\",\" id=\"BOF-NM-1cW\"/>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                                        <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                                        <menuItem title=\"Hide LayerX\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                            <connections>\n                                                <action selector=\"hide:\" target=\"Ady-hI-5gd\" id=\"PnN-Uc-m68\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"hideOtherApplications:\" target=\"Ady-hI-5gd\" id=\"VT4-aY-XCT\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"unhideAllApplications:\" target=\"Ady-hI-5gd\" id=\"Dhg-Le-xox\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                                        <menuItem title=\"Quit LayerX\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                            <connections>\n                                                <action selector=\"terminate:\" target=\"Ady-hI-5gd\" id=\"Te7-pn-YzF\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"File\" id=\"dMs-cI-mzQ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"File\" id=\"bib-Uj-vzu\">\n                                    <items>\n                                        <menuItem title=\"New\" keyEquivalent=\"n\" id=\"Was-JA-tGl\">\n                                            <connections>\n                                                <action selector=\"newDocument:\" target=\"Ady-hI-5gd\" id=\"4Si-XN-c54\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open…\" keyEquivalent=\"o\" id=\"IAo-SY-fd9\">\n                                            <connections>\n                                                <action selector=\"openDocument:\" target=\"Ady-hI-5gd\" id=\"bVn-NM-KNZ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open Recent\" id=\"tXI-mr-wws\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Open Recent\" systemMenu=\"recentDocuments\" id=\"oas-Oc-fiZ\">\n                                                <items>\n                                                    <menuItem title=\"Clear Menu\" id=\"vNY-rz-j42\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"clearRecentDocuments:\" target=\"Ady-hI-5gd\" id=\"Daa-9d-B3U\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"m54-Is-iLE\"/>\n                                        <menuItem title=\"Close\" keyEquivalent=\"w\" id=\"DVo-aG-piG\">\n                                            <connections>\n                                                <action selector=\"performClose:\" target=\"Ady-hI-5gd\" id=\"HmO-Ls-i7Q\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save…\" keyEquivalent=\"s\" id=\"pxx-59-PXV\">\n                                            <connections>\n                                                <action selector=\"saveDocument:\" target=\"Ady-hI-5gd\" id=\"teZ-XB-qJY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save As…\" keyEquivalent=\"S\" id=\"Bw7-FT-i3A\">\n                                            <connections>\n                                                <action selector=\"saveDocumentAs:\" target=\"Ady-hI-5gd\" id=\"mDf-zr-I0C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Revert to Saved\" id=\"KaW-ft-85H\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"revertDocumentToSaved:\" target=\"Ady-hI-5gd\" id=\"iJ3-Pv-kwq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"aJh-i4-bef\"/>\n                                        <menuItem title=\"Page Setup…\" keyEquivalent=\"P\" id=\"qIS-W8-SiK\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"runPageLayout:\" target=\"Ady-hI-5gd\" id=\"Din-rz-gC5\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Print…\" keyEquivalent=\"p\" id=\"aTl-1u-JFS\">\n                                            <connections>\n                                                <action selector=\"print:\" target=\"Ady-hI-5gd\" id=\"qaZ-4w-aoO\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Edit\" id=\"dAm-Da-fWl\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Edit\" id=\"aeY-sH-oUd\">\n                                    <items>\n                                        <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"Wup-uR-bUt\">\n                                            <connections>\n                                                <action selector=\"paste:\" target=\"Voe-Tx-rLC\" id=\"mh3-X2-sMC\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                                    <items>\n                                        <menuItem title=\"Actual Size\" keyEquivalent=\"0\" id=\"snW-S8-Cw5\">\n                                            <connections>\n                                                <action selector=\"actualSize:\" target=\"Voe-Tx-rLC\" id=\"Rr0-Sv-VSe\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Scale Up 10%\" keyEquivalent=\"+\" id=\"Ed8-Vk-OS6\">\n                                            <connections>\n                                                <action selector=\"makeLarger:\" target=\"Voe-Tx-rLC\" id=\"ldh-JS-1g5\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Scale Down 10%\" keyEquivalent=\"-\" id=\"trE-Hj-Y6i\">\n                                            <connections>\n                                                <action selector=\"makeSmaller:\" target=\"Voe-Tx-rLC\" id=\"gWX-vc-gSr\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Scale Up 1px\" keyEquivalent=\"=\" id=\"QFF-N1-xBx\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"makeLargerOnePixel:\" target=\"Voe-Tx-rLC\" id=\"a6e-El-RWw\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Scale Down 1px\" keyEquivalent=\"-\" id=\"mKa-lu-KYo\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"makeSmallerOnePixel:\" target=\"Voe-Tx-rLC\" id=\"lBc-iQ-i2i\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"S7H-4j-wWG\"/>\n                                        <menuItem title=\"Move up 1px\" tag=\"20\" keyEquivalent=\"\" id=\"xt1-zP-8lE\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"moveAround:\" target=\"Voe-Tx-rLC\" id=\"qks-64-WYp\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Move left 1px\" tag=\"21\" keyEquivalent=\"\" id=\"Ud7-FA-vtA\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"moveAround:\" target=\"Voe-Tx-rLC\" id=\"RxY-3b-ZPJ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Move right 1px\" tag=\"22\" keyEquivalent=\"\" id=\"SC9-Za-3te\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"moveAround:\" target=\"Voe-Tx-rLC\" id=\"7UQ-dw-xVi\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Move down 1px\" tag=\"23\" keyEquivalent=\"\" id=\"T88-KV-33B\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"moveAround:\" target=\"Voe-Tx-rLC\" id=\"gZw-Fh-AIF\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"Uol-cd-eOj\"/>\n                                        <menuItem title=\"Increase Transparency\" keyEquivalent=\"j\" id=\"PLz-nj-Geg\">\n                                            <connections>\n                                                <action selector=\"increaseTransparency:\" target=\"Voe-Tx-rLC\" id=\"O9E-CS-NRG\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Reduce Transparency\" keyEquivalent=\"k\" id=\"P7g-e7-fyw\">\n                                            <connections>\n                                                <action selector=\"reduceTransparency:\" target=\"Voe-Tx-rLC\" id=\"6jy-Px-MpF\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4H8-5J-P5x\"/>\n                                        <menuItem title=\"Hide Lock Icon\" id=\"MeZ-fZ-1OL\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleLockIconVisibility:\" target=\"Voe-Tx-rLC\" id=\"RCB-nJ-o0E\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Hide Size\" id=\"JXi-GL-qzz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleSizeVisibility:\" target=\"Voe-Tx-rLC\" id=\"e8c-Wd-zRh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                                    <items>\n                                        <menuItem title=\"Lock\" keyEquivalent=\"l\" id=\"OY7-WF-poV\">\n                                            <connections>\n                                                <action selector=\"toggleLockWindow:\" target=\"Voe-Tx-rLC\" id=\"Mfc-bV-lDx\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Keep on top\" keyEquivalent=\"t\" id=\"WZF-Ql-Ptb\">\n                                            <connections>\n                                                <action selector=\"toggleOnTop:\" target=\"Voe-Tx-rLC\" id=\"1mS-lL-oZG\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Keep on all spaces\" keyEquivalent=\"a\" id=\"pZ0-jf-Hps\">\n                                            <connections>\n                                                <action selector=\"toggleAllSpaces:\" target=\"Voe-Tx-rLC\" id=\"N0L-4A-TpV\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                                        <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"arrangeInFront:\" target=\"Ady-hI-5gd\" id=\"DRN-fu-gQh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                                    <items>\n                                        <menuItem title=\"LayerX Help\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                            <connections>\n                                                <action selector=\"showHelp:\" target=\"Ady-hI-5gd\" id=\"y7X-2Q-9no\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                    <connections>\n                        <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"PrD-fu-P6m\"/>\n                    </connections>\n                </application>\n                <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\" customModule=\"LayerX\" customModuleProvider=\"target\"/>\n                <customObject id=\"Ady-hI-5gd\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"0.0\"/>\n        </scene>\n        <!--Window Controller-->\n        <scene sceneID=\"R2V-B0-nI4\">\n            <objects>\n                <windowController id=\"B8D-0N-5wS\" sceneMemberID=\"viewController\">\n                    <window key=\"window\" title=\"Window\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" oneShot=\"NO\" releasedWhenClosed=\"NO\" showsToolbarButton=\"NO\" visibleAtLaunch=\"NO\" animationBehavior=\"default\" id=\"IQv-IB-iLA\" customClass=\"MCWIndow\" customModule=\"LayerX\" customModuleProvider=\"target\">\n                        <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\"/>\n                        <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n                        <rect key=\"contentRect\" x=\"515\" y=\"487\" width=\"480\" height=\"270\"/>\n                        <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"1680\" height=\"1027\"/>\n                        <connections>\n                            <outlet property=\"delegate\" destination=\"B8D-0N-5wS\" id=\"Ikp-UW-Prj\"/>\n                        </connections>\n                    </window>\n                    <connections>\n                        <segue destination=\"XfG-lQ-9wD\" kind=\"relationship\" relationship=\"window.shadowedContentViewController\" id=\"cq2-FE-JQM\"/>\n                    </connections>\n                </windowController>\n                <customObject id=\"Oky-zY-oP4\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"250\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"hIz-AP-VOD\">\n            <objects>\n                <viewController id=\"XfG-lQ-9wD\" customClass=\"ViewController\" customModule=\"LayerX\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"m2S-Jp-Qdl\" customClass=\"MCMovableView\" customModule=\"LayerX\" customModuleProvider=\"target\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"270\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"249\" verticalCompressionResistancePriority=\"249\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pOu-B0-2Yd\" customClass=\"MCDragAndDropImageView\" customModule=\"LayerX\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"270\"/>\n                                <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"axesIndependently\" id=\"55W-zB-lko\"/>\n                            </imageView>\n                            <textField hidden=\"YES\" wantsLayer=\"YES\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" misplaced=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JAT-ZL-8HB\">\n                                <rect key=\"frame\" x=\"454\" y=\"243\" width=\"16\" height=\"17\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" refusesFirstResponder=\"YES\" sendsActionOnEndEditing=\"YES\" alignment=\"center\" title=\"0\" drawsBackground=\"YES\" id=\"Mmp-Eh-bBs\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.59999999999999998\" colorSpace=\"calibratedRGB\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField wantsLayer=\"YES\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8Vs-Az-CYd\">\n                                <rect key=\"frame\" x=\"148\" y=\"123\" width=\"184\" height=\"25\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" alignment=\"center\" title=\"Drop Images here.\" id=\"vTq-g5-aKV\">\n                                    <font key=\"font\" size=\"20\" name=\"HelveticaNeue-Bold\"/>\n                                    <color key=\"textColor\" name=\"scrollBarColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedRGB\"/>\n                                </textFieldCell>\n                            </textField>\n                            <imageView hidden=\"YES\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3I3-1H-JKb\">\n                                <rect key=\"frame\" x=\"446\" y=\"10\" width=\"24\" height=\"24\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" secondItem=\"3I3-1H-JKb\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"BQz-pm-nY9\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"24\" id=\"x71-Sn-2Dl\"/>\n                                </constraints>\n                                <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"lock\" id=\"4Zf-oV-Kj0\"/>\n                            </imageView>\n                        </subviews>\n                        <constraints>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"3I3-1H-JKb\" secondAttribute=\"bottom\" constant=\"10\" id=\"64H-0g-nnO\"/>\n                            <constraint firstItem=\"8Vs-Az-CYd\" firstAttribute=\"centerY\" secondItem=\"m2S-Jp-Qdl\" secondAttribute=\"centerY\" id=\"6fI-na-pdX\"/>\n                            <constraint firstItem=\"8Vs-Az-CYd\" firstAttribute=\"centerX\" secondItem=\"m2S-Jp-Qdl\" secondAttribute=\"centerX\" id=\"RwW-eB-OYh\"/>\n                            <constraint firstItem=\"JAT-ZL-8HB\" firstAttribute=\"top\" secondItem=\"m2S-Jp-Qdl\" secondAttribute=\"top\" constant=\"10\" id=\"WnK-c6-NWw\"/>\n                            <constraint firstItem=\"pOu-B0-2Yd\" firstAttribute=\"top\" secondItem=\"m2S-Jp-Qdl\" secondAttribute=\"top\" id=\"aC7-xh-2BR\"/>\n                            <constraint firstItem=\"pOu-B0-2Yd\" firstAttribute=\"leading\" secondItem=\"m2S-Jp-Qdl\" secondAttribute=\"leading\" id=\"lhy-17-EcM\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"pOu-B0-2Yd\" secondAttribute=\"trailing\" id=\"qbm-Dq-jeg\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"pOu-B0-2Yd\" secondAttribute=\"bottom\" id=\"r2U-99-hj5\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"3I3-1H-JKb\" secondAttribute=\"trailing\" constant=\"10\" id=\"und-pJ-9Mz\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"JAT-ZL-8HB\" secondAttribute=\"trailing\" constant=\"10\" id=\"xlU-hc-l09\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"imageView\" destination=\"pOu-B0-2Yd\" id=\"OT9-S1-m4L\"/>\n                        <outlet property=\"lockIconImageView\" destination=\"3I3-1H-JKb\" id=\"Nka-rj-tDO\"/>\n                        <outlet property=\"placeholderTextField\" destination=\"8Vs-Az-CYd\" id=\"env-Po-Bb7\"/>\n                        <outlet property=\"sizeTextField\" destination=\"JAT-ZL-8HB\" id=\"vIP-80-PVG\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"rPt-NT-nkU\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"655\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"lock\" width=\"32\" height=\"32\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "LayerX/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.2.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2015年 Michael Chen. All rights reserved.</string>\n\t<key>NSMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "LayerX/MCDragAndDropImageView.swift",
    "content": "//\n//  MCDragAndDropImageView.swift\n//  LayerX\n//\n//  Created by Michael Chen on 2015/10/26.\n//  Copyright © 2015年 Michael Chen. All rights reserved.\n//\n\nimport Cocoa\n\nprotocol MCDragAndDropImageViewDelegate: class {\n\tfunc dragAndDropImageViewDidDrop(_ imageView: MCDragAndDropImageView)\n}\n\nclass MCDragAndDropImageView: NSImageView {\n\n\tweak var delegate: MCDragAndDropImageViewDelegate?\n\n\trequired init?(coder: NSCoder) {\n\t\tsuper.init(coder: coder)\n\n\t\tregisterForDraggedTypes(NSImage.imageTypes.map(NSPasteboard.PasteboardType.init(rawValue:)))\n\n\t\twantsLayer = true\n\t}\n\n\toverride func setNeedsDisplay() {\n\t\talphaValue = image == nil ? 1.0 : 0.6\n\t\tsuper.setNeedsDisplay()\n\t}\n\n\toverride func draw(_ dirtyRect: NSRect) {\n\t\tsuper.draw(dirtyRect)\n\n\t\tif let _ = image {\n\t\t\tlayer?.backgroundColor = NSColor.clear.cgColor\n\t\t\treturn\n\t\t}\n\n\t\tlayer?.backgroundColor = NSColor(white: isHighlighted ? 0.5 : 0.8, alpha: 1.0).cgColor\n\t}\n\n\toverride var mouseDownCanMoveWindow:Bool {\n\t\treturn true\n\t}\n}\n\n// MARK: - NSDraggingSource\n\nextension MCDragAndDropImageView: NSDraggingSource {\n\n\toverride func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {\n\n\t\tif (NSImage.canInit(with: sender.draggingPasteboard)) {\n\t\t\tisHighlighted = true\n\n\t\t\tsetNeedsDisplay()\n\n\t\t\tlet sourceDragMask = sender.draggingSourceOperationMask\n\t\t\tlet pboard = sender.draggingPasteboard\n\n\t\t\tif pboard.availableType(from: [.fileURL]) == .fileURL {\n\t\t\t\tif sourceDragMask.rawValue & NSDragOperation.copy.rawValue != 0 {\n\t\t\t\t\treturn NSDragOperation.copy\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn NSDragOperation()\n\t}\n\n\toverride func draggingExited(_ sender: NSDraggingInfo?) {\n\t\tisHighlighted = false\n\t\tsetNeedsDisplay()\n\t}\n\n\toverride func prepareForDragOperation(_ sender: NSDraggingInfo) -> Bool {\n\t\tisHighlighted = false\n\t\tsetNeedsDisplay()\n\n\t\treturn NSImage.canInit(with: sender.draggingPasteboard)\n\t}\n\n\toverride func performDragOperation(_ sender: NSDraggingInfo) -> Bool {\n\t\tif (NSImage.canInit(with: sender.draggingPasteboard)) {\n\t\t\timage = NSImage(pasteboard: sender.draggingPasteboard)\n\t\t\tdelegate?.dragAndDropImageViewDidDrop(self)\n\t\t\tsetNeedsDisplay()\n\t\t}\n\n\t\treturn true\n\t}\n\n\tfunc draggingSession(_ session: NSDraggingSession, sourceOperationMaskFor context: NSDraggingContext) -> NSDragOperation {\n\t\tswitch context {\n\t\tcase .outsideApplication: return NSDragOperation()\n\t\tcase .withinApplication: return .copy\n\t\t@unknown default: return NSDragOperation()\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "LayerX/MCWindow.swift",
    "content": "//\n//  MCWindow.swift\n//  LayerX\n//\n//  Created by Michael Chen on 2015/10/27.\n//  Copyright © 2015年 Michael Chen. All rights reserved.\n//\n\nimport Cocoa\n\nclass MCWIndow: NSWindow {\n\toverride func awakeFromNib() {\n\t\tstyleMask = [.borderless, .resizable]\n\t\tisOpaque = false\n\t\tbackgroundColor = NSColor.clear\n\t\tisMovableByWindowBackground = true\n\t\thasShadow = false\n\t}\n\n    func moveBy(_ offset: CGPoint) {\n        var frame = self.frame\n        frame.origin.x += offset.x\n        frame.origin.y += offset.y\n\n        setFrame(frame, display: true)\n    }\n\n\tfunc fitsWithSize(_ size: NSSize) {\n\t\tvar frame = self.frame\n\t\tif frame.size.width < size.width || frame.size.height < size.height {\n\t\t\tframe.size = size\n\t\t\tsetFrame(frame, display: true)\n\t\t}\n\t}\n\n\tfunc resizeTo(_ size: NSSize, animated: Bool) {\n\t\tvar frame = self.frame\n\t\tframe.size = size\n\n\t\tif !animated {\n\t\t\tsetFrame(frame, display: true)\n\t\t\treturn\n\t\t}\n\n\t\tlet resizeAnimation = [NSViewAnimation.Key.target: self, NSViewAnimation.Key.endFrame: NSValue(rect: frame)]\n\t\tlet animations = NSViewAnimation(viewAnimations: [resizeAnimation])\n\t\tanimations.animationBlockingMode = .blocking\n\t\tanimations.animationCurve = .easeInOut\n\t\tanimations.duration = 0.15\n\t\tanimations.start()\n\t}\n\n    override func constrainFrameRect(_ frameRect: NSRect, to screen: NSScreen?) -> NSRect {\n        return frameRect\n    }\n}\n"
  },
  {
    "path": "LayerX/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  LayerX\n//\n//  Created by Michael Chen on 2015/10/26.\n//  Copyright © 2015年 Michael Chen. All rights reserved.\n//\n\nimport Cocoa\n\nclass ViewController: NSViewController {\n\n\t@IBOutlet weak var imageView: MCDragAndDropImageView!\n\t@IBOutlet weak var sizeTextField: NSTextField!\n\t@IBOutlet weak var placeholderTextField: NSTextField!\n\t@IBOutlet weak var lockIconImageView: NSImageView!\n\n\toverride var acceptsFirstResponder: Bool {\n\t\treturn true\n\t}\n\n\tlazy var trackingArea: NSTrackingArea = {\n\t\tlet options: NSTrackingArea.Options = [.activeAlways, .mouseEnteredAndExited]\n\t\treturn NSTrackingArea(rect: self.view.bounds, options: options, owner: self, userInfo: nil)\n\t}()\n\n\tdeinit {\n\t\tNotificationCenter.default.removeObserver(self)\n\t}\n\n\trequired init?(coder: NSCoder) {\n\t\tsuper.init(coder: coder)\n\t\tappDelegate().viewController = self\n\t}\n\n\toverride func viewDidLoad() {\n\t\tsuper.viewDidLoad()\n\n\t\timageView.delegate = self\n\n\t\tsizeTextField.layer?.cornerRadius = 3\n\t\tsizeTextField.layer?.masksToBounds = true\n\n\t\tlockIconImageView.wantsLayer = true\n\t\tlockIconImageView.layer?.backgroundColor = NSColor(white: 0.0, alpha: 0.5).cgColor\n\t\tlockIconImageView.layer?.cornerRadius = 5\n\t\tlockIconImageView.layer?.masksToBounds = true\n\n\t\tNotificationCenter.default.addObserver(self, selector: #selector(windowDidResize(_:)), name: NSWindow.didResizeNotification, object: appDelegate().window)\n\n\t\tview.addTrackingArea(trackingArea)\n\t}\n\n\t@objc func fadeOutSizeTextField() {\n\t\tlet transition = CATransition()\n\t\tsizeTextField.layer?.add(transition, forKey: \"fadeOut\")\n\t\tsizeTextField.layer?.opacity = 0\n\t}\n\n\t@objc func windowDidResize(_ notification: Notification) {\n\t\tlet window = notification.object as! NSWindow\n\t\tlet size = window.frame.size\n\t\tsizeTextField.stringValue = \"\\(Int(size.width))x\\(Int(size.height))\"\n\t\tsizeTextField.layer?.opacity = 1\n\n\t\tNSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(ViewController.fadeOutSizeTextField), object: nil)\n\t\tperform(#selector(ViewController.fadeOutSizeTextField), with: nil, afterDelay: 2)\n\t}\n\n\t// MARK: Mouse events\n\n\toverride func scrollWheel(with theEvent: NSEvent) {\n\t\tguard let _ = imageView.image else { return }\n\n\t\tlet delta = theEvent.deltaY * 0.005;\n\t\tvar alpha = imageView.alphaValue - delta\n\t\talpha = min(alpha, 1)\n\t\talpha = max(alpha, 0.05)\n\t\timageView.alphaValue = alpha\n\t}\n\n\toverride func mouseEntered(with theEvent: NSEvent) {\n\t\tsizeTextField.layer?.opacity = 1\n\t}\n\n\toverride func mouseExited(with theEvent: NSEvent) {\n\t\tfadeOutSizeTextField()\n\t}\n}\n\n// MARK: - MCDragAndDropImageViewDelegate\n\nextension ViewController: MCDragAndDropImageViewDelegate {\n\tfunc dragAndDropImageViewDidDrop(_ imageView: MCDragAndDropImageView) {\n\n\t\tsizeTextField.isHidden = false\n\t\tplaceholderTextField.isHidden = true\n\n\t\tappDelegate().actualSize(nil)\n\t}\n}\n\n// MARK: - Movable NSView\n\nclass MCMovableView: NSView{\n\toverride var mouseDownCanMoveWindow:Bool {\n\t\treturn true\n\t}\n}\n"
  },
  {
    "path": "LayerX.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t8C09F9F51BDE2E5C00DD457E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C09F9F41BDE2E5C00DD457E /* AppDelegate.swift */; };\n\t\t8C09F9F71BDE2E5C00DD457E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C09F9F61BDE2E5C00DD457E /* ViewController.swift */; };\n\t\t8C09F9F91BDE2E5C00DD457E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8C09F9F81BDE2E5C00DD457E /* Assets.xcassets */; };\n\t\t8C09F9FC1BDE2E5C00DD457E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8C09F9FA1BDE2E5C00DD457E /* Main.storyboard */; };\n\t\t8C09FA041BDE324500DD457E /* MCDragAndDropImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C09FA031BDE324500DD457E /* MCDragAndDropImageView.swift */; };\n\t\t8C09FA0C1BDF5F7300DD457E /* MCWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C09FA0B1BDF5F7300DD457E /* MCWindow.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t8C09F9F11BDE2E5C00DD457E /* LayerX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LayerX.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8C09F9F41BDE2E5C00DD457E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t8C09F9F61BDE2E5C00DD457E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\t8C09F9F81BDE2E5C00DD457E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t8C09F9FB1BDE2E5C00DD457E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t8C09F9FD1BDE2E5C00DD457E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t8C09FA031BDE324500DD457E /* MCDragAndDropImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MCDragAndDropImageView.swift; sourceTree = \"<group>\"; };\n\t\t8C09FA0B1BDF5F7300DD457E /* MCWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MCWindow.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8C09F9EE1BDE2E5C00DD457E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t8C09F9E81BDE2E5C00DD457E = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8C09F9F31BDE2E5C00DD457E /* LayerX */,\n\t\t\t\t8C09F9F21BDE2E5C00DD457E /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8C09F9F21BDE2E5C00DD457E /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8C09F9F11BDE2E5C00DD457E /* LayerX.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8C09F9F31BDE2E5C00DD457E /* LayerX */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8C09F9F41BDE2E5C00DD457E /* AppDelegate.swift */,\n\t\t\t\t8C09FA0B1BDF5F7300DD457E /* MCWindow.swift */,\n\t\t\t\t8C09F9F61BDE2E5C00DD457E /* ViewController.swift */,\n\t\t\t\t8C09FA031BDE324500DD457E /* MCDragAndDropImageView.swift */,\n\t\t\t\t8C09F9F81BDE2E5C00DD457E /* Assets.xcassets */,\n\t\t\t\t8C09F9FA1BDE2E5C00DD457E /* Main.storyboard */,\n\t\t\t\t8C09F9FD1BDE2E5C00DD457E /* Info.plist */,\n\t\t\t);\n\t\t\tpath = LayerX;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t8C09F9F01BDE2E5C00DD457E /* LayerX */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 8C09FA001BDE2E5C00DD457E /* Build configuration list for PBXNativeTarget \"LayerX\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8C09F9ED1BDE2E5C00DD457E /* Sources */,\n\t\t\t\t8C09F9EE1BDE2E5C00DD457E /* Frameworks */,\n\t\t\t\t8C09F9EF1BDE2E5C00DD457E /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = LayerX;\n\t\t\tproductName = LayerX;\n\t\t\tproductReference = 8C09F9F11BDE2E5C00DD457E /* LayerX.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t8C09F9E91BDE2E5C00DD457E /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tORGANIZATIONNAME = \"Michael Chen\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t8C09F9F01BDE2E5C00DD457E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.0;\n\t\t\t\t\t\tLastSwiftMigration = 0800;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 8C09F9EC1BDE2E5C00DD457E /* Build configuration list for PBXProject \"LayerX\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 8C09F9E81BDE2E5C00DD457E;\n\t\t\tproductRefGroup = 8C09F9F21BDE2E5C00DD457E /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8C09F9F01BDE2E5C00DD457E /* LayerX */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t8C09F9EF1BDE2E5C00DD457E /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8C09F9F91BDE2E5C00DD457E /* Assets.xcassets in Resources */,\n\t\t\t\t8C09F9FC1BDE2E5C00DD457E /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8C09F9ED1BDE2E5C00DD457E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8C09F9F71BDE2E5C00DD457E /* ViewController.swift in Sources */,\n\t\t\t\t8C09FA0C1BDF5F7300DD457E /* MCWindow.swift in Sources */,\n\t\t\t\t8C09F9F51BDE2E5C00DD457E /* AppDelegate.swift in Sources */,\n\t\t\t\t8C09FA041BDE324500DD457E /* MCDragAndDropImageView.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t8C09F9FA1BDE2E5C00DD457E /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t8C09F9FB1BDE2E5C00DD457E /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t8C09F9FE1BDE2E5C00DD457E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.13;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t8C09F9FF1BDE2E5C00DD457E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.13;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t8C09FA011BDE2E5C00DD457E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = LayerX/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = io.michaelchen.LayerX;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t8C09FA021BDE2E5C00DD457E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = LayerX/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = io.michaelchen.LayerX;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t8C09F9EC1BDE2E5C00DD457E /* Build configuration list for PBXProject \"LayerX\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t8C09F9FE1BDE2E5C00DD457E /* Debug */,\n\t\t\t\t8C09F9FF1BDE2E5C00DD457E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t8C09FA001BDE2E5C00DD457E /* Build configuration list for PBXNativeTarget \"LayerX\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t8C09FA011BDE2E5C00DD457E /* Debug */,\n\t\t\t\t8C09FA021BDE2E5C00DD457E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 8C09F9E91BDE2E5C00DD457E /* Project object */;\n}\n"
  },
  {
    "path": "LayerX.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:LayerX.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "README.md",
    "content": "# LayerX\n\nAn intuitive app to display transparent images on screen.\n\n[![Demo](http://img.youtube.com/vi/35KixjZBDjY/0.jpg)](http://www.youtube.com/watch?v=35KixjZBDjY)\n\n# System requirements\n\nSupport Mac OS X 10.10 or later.\n\n# Features\n\n- [x] Drag and drop images\n- [x] Keyboard Shortcuts\n- [x] Adjust transparency  \n- [x] Lock images\n- [X] Aspect ratio scaling\n\n# Keyboard Shortcuts\n\n### Set image\n\n| Key | Action |\n|:--- |:---    |\n|`⌘ V`| Paste image or file from clipboard. |\n\n### Scale\n\n| Key | Action |\n|:---|:---|\n|`⌘ 0`| Actual image size.|\n|`⌘ +`| Scale up 10%.|\n|`⌘ -`| Scale down 10%.|\n|`^ ⌘ +`| Scale up 1px.|\n|`^ ⌘ -`| Scale down 1px.|\n\n### Move (Arrow keys)\n\n| Key | Action |\n|:---|:---|\n|`↑`| Move up 1px.|\n|`←`| Move left 1px.|\n|`→`| Move right 1px.|\n|`↓`| Move down 1px.|\n\n### Alpha\n\n|Key|Action|\n|:---|:---|\n|`⌘ J`| Increase transparency.|\n|`⌘ K`| Reduce transparency.|\n\n### Window\n\n|Key|Action|\n|:---|:---|\n|`⌘ L`| Lock images and make window always on top.|\n|`⌘ T`| Make window always on top.|\n|`⌘ A`| Keep window on all spaces.|\n\n# Mouse events\n\n| Event | Action |\n|:---|:---|\n| Scroll up on image | Reduce transparency. |\n| Scroll down on image | Increase transparency. |\n\n# Contact\n\nAny suggestions are welcome. Find me at [@yuhua_twit](https://twitter.com/yuhua_twit)\n\n# License\n\nCopyright (c) 2017 Michael Chen (a.k.a. Yuhua Chen)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  }
]