Full Code of lorentey/GlueKit for AI

master a5766bb11eb2 cached
192 files
995.4 KB
272.5k tokens
1 requests
Download .txt
Showing preview only (1,057K chars total). Download the full file or copy to clipboard to get everything.
Repository: lorentey/GlueKit
Branch: master
Commit: a5766bb11eb2
Files: 192
Total size: 995.4 KB

Directory structure:
gitextract_rs09iz2z/

├── .codecov.yml
├── .gitignore
├── .gitmodules
├── .swift-version
├── .travis.yml
├── Cartfile
├── Cartfile.resolved
├── Demo.playground/
│   ├── Pages/
│   │   └── Untitled Page.xcplaygroundpage/
│   │       ├── Contents.swift
│   │       └── timeline.xctimeline
│   └── contents.xcplayground
├── Documentation/
│   ├── Language Enhancements.md
│   └── Overview.md
├── GlueKit.podspec
├── GlueKit.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── GlueKit.xcscmblueprint
│   └── xcshareddata/
│       ├── xcbaselines/
│       │   ├── BB351AFB1DB81E67005F083F.xcbaseline/
│       │   │   ├── EBF79DD4-EE66-4D33-B51C-EE37857B70A1.plist
│       │   │   └── Info.plist
│       │   └── BBB55BE11C8FD1C60050DDA9.xcbaseline/
│       │       ├── DD663408-0BA9-46F9-868F-F1570927CA52.plist
│       │       └── Info.plist
│       └── xcschemes/
│           ├── GlueKit-PerformanceTests.xcscheme
│           ├── GlueKit-iOS.xcscheme
│           ├── GlueKit-macOS.xcscheme
│           ├── GlueKit-tvOS.xcscheme
│           └── GlueKit-watchOS.xcscheme
├── GlueKit.xcworkspace/
│   ├── contents.xcworkspacedata
│   └── xcshareddata/
│       └── GlueKit.xcscmblueprint
├── LICENSE.md
├── Package.swift
├── README.md
├── Sources/
│   ├── Abstract.swift
│   ├── AccumulatedSource.swift
│   ├── ArrayBasedTableViewDataSource.swift
│   ├── ArrayChange.swift
│   ├── ArrayChangeSeparation.swift
│   ├── ArrayConcatenation.swift
│   ├── ArrayFilteringIndexmap.swift
│   ├── ArrayFilteringOnObservableBool.swift
│   ├── ArrayFilteringOnPredicate.swift
│   ├── ArrayFolding.swift
│   ├── ArrayGatheringSource.swift
│   ├── ArrayMappingForArrayField.swift
│   ├── ArrayMappingForValue.swift
│   ├── ArrayMappingForValueField.swift
│   ├── ArrayReference.swift
│   ├── ArrayVariable.swift
│   ├── BracketingSource.swift
│   ├── BufferedArray.swift
│   ├── BufferedSet.swift
│   ├── BufferedSource.swift
│   ├── BufferedValue.swift
│   ├── CADisplayLink Extensions.swift
│   ├── Change.swift
│   ├── ChangesSource.swift
│   ├── CompositeObservable.swift
│   ├── CompositeUpdatable.swift
│   ├── ComputedUpdatable.swift
│   ├── Connect.swift
│   ├── Connector.swift
│   ├── DependentValue.swift
│   ├── DispatchSource.swift
│   ├── DistinctUnion.swift
│   ├── DistinctValue.swift
│   ├── Info.plist
│   ├── Locks.swift
│   ├── MergedSource.swift
│   ├── NSButton Glue.swift
│   ├── NSControl Glue.swift
│   ├── NSNotificationCenter Support.swift
│   ├── NSObject Glue.swift
│   ├── NSPopUpButton Glue.swift
│   ├── NSTextField Glue.swift
│   ├── ObservableArray.swift
│   ├── ObservableContains.swift
│   ├── ObservableSet.swift
│   ├── ObservableType.swift
│   ├── ObservableValue.swift
│   ├── OwnedSink.swift
│   ├── RefList.swift
│   ├── Reference.swift
│   ├── SetChange.swift
│   ├── SetFilteringOnObservableBool.swift
│   ├── SetFilteringOnPredicate.swift
│   ├── SetFolding.swift
│   ├── SetGatheringSource.swift
│   ├── SetMappingBase.swift
│   ├── SetMappingForArrayField.swift
│   ├── SetMappingForSequence.swift
│   ├── SetMappingForSetField.swift
│   ├── SetMappingForValue.swift
│   ├── SetMappingForValueField.swift
│   ├── SetReference.swift
│   ├── SetSortingByComparableField.swift
│   ├── SetSortingByComparator.swift
│   ├── SetSortingByMappingToComparable.swift
│   ├── SetSortingByMappingToObservableComparable.swift
│   ├── SetVariable.swift
│   ├── Signal.swift
│   ├── SimpleSources.swift
│   ├── Sink.swift
│   ├── Source.swift
│   ├── TimerSource.swift
│   ├── TransactionalThing.swift
│   ├── TransformedSink.swift
│   ├── TransformedSource.swift
│   ├── TwoWayBinding.swift
│   ├── Type Helpers.swift
│   ├── UIBarButtonItem Extensions.swift
│   ├── UIControl Glue.swift
│   ├── UIDevice Glue.swift
│   ├── UIGestureRecognizer Glue.swift
│   ├── UILabel Glue.swift
│   ├── UISearchBar Glue.swift
│   ├── UISwitch Glue.swift
│   ├── UpdatableArray.swift
│   ├── UpdatableSet.swift
│   ├── UpdatableValue.swift
│   ├── Update.swift
│   ├── ValueChange.swift
│   ├── ValueMappingForArrayField.swift
│   ├── ValueMappingForSetField.swift
│   ├── ValueMappingForSourceField.swift
│   ├── ValueMappingForValue.swift
│   ├── ValueMappingForValueField.swift
│   ├── ValueReference.swift
│   └── Variable.swift
├── Tests/
│   ├── GlueKitTests/
│   │   ├── AnySinkTests.swift
│   │   ├── AnySourceTests.swift
│   │   ├── ArrayBufferingTests.swift
│   │   ├── ArrayChangeSeparationTests.swift
│   │   ├── ArrayChangeTests.swift
│   │   ├── ArrayConcatenationTests.swift
│   │   ├── ArrayFilteringTests.swift
│   │   ├── ArrayFoldingTests.swift
│   │   ├── ArrayMappingTests.swift
│   │   ├── ArrayModificationTests.swift
│   │   ├── ArrayReferenceTests.swift
│   │   ├── ArrayVariableTests.swift
│   │   ├── Bookshelf.swift
│   │   ├── BracketingSourceTests.swift
│   │   ├── BufferedSourceTests.swift
│   │   ├── ChangeTests.swift
│   │   ├── ChangesSourceTests.swift
│   │   ├── CombinedObservableTests.swift
│   │   ├── CombinedUpdatableTests.swift
│   │   ├── ConnectorTests.swift
│   │   ├── DispatchSourceTests.swift
│   │   ├── DistinctTests.swift
│   │   ├── DistinctUnionTests.swift
│   │   ├── Info.plist
│   │   ├── KVOSupportTests.swift
│   │   ├── MergedSourceTests.swift
│   │   ├── MockArrayObserver.swift
│   │   ├── MockSetObserver.swift
│   │   ├── MockSink.swift
│   │   ├── MockUpdateSink.swift
│   │   ├── NSUserDefaultsSupportTests.swift
│   │   ├── NotificationCenterSupportTests.swift
│   │   ├── ObservableArrayTests.swift
│   │   ├── ObservableSetTests.swift
│   │   ├── ObservableTypeTests.swift
│   │   ├── ObservableValueTests.swift
│   │   ├── RefListTests.swift
│   │   ├── SetBufferingTests.swift
│   │   ├── SetFilteringTests.swift
│   │   ├── SetFoldingTests.swift
│   │   ├── SetMappingTests.swift
│   │   ├── SetReferenceTests.swift
│   │   ├── SetSortingTests.swift
│   │   ├── SetVariableTests.swift
│   │   ├── SignalTests.swift
│   │   ├── SimpleSourcesTests.swift
│   │   ├── SourceOperatorTests.swift
│   │   ├── TestChange.swift
│   │   ├── TestObservable.swift
│   │   ├── TestUpdatable.swift
│   │   ├── TestUtilities.swift
│   │   ├── TimerSourceTests.swift
│   │   ├── TransactionStateTests.swift
│   │   ├── TwoWayBindingTests.swift
│   │   ├── TypeHelperTests.swift
│   │   ├── UpdatableValueTests.swift
│   │   ├── UpdateTests.swift
│   │   ├── ValueBufferingTests.swift
│   │   ├── ValueChangeTests.swift
│   │   ├── ValueMappingTests.swift
│   │   ├── ValueReferenceTests.swift
│   │   └── VariableTests.swift
│   └── PerformanceTests/
│       ├── GlueKitPerformanceTests.swift
│       └── Info.plist
├── jazzy.sh
└── version.xcconfig

================================================
FILE CONTENTS
================================================

================================================
FILE: .codecov.yml
================================================
ignore:
- "/Tests/*"
comment:
  layout: "header, diff"
  behavior: default
  require_changes: no
coverage:
  status:
    project:
      default:
        target: auto
        threshold: null
        base: auto
        paths: "Sources/*"


================================================
FILE: .gitignore
================================================
.build
/Carthage/Build
/Packages
xcuserdata
/Package.resolved


================================================
FILE: .gitmodules
================================================
[submodule "Carthage/Checkouts/BTree"]
	path = Carthage/Checkouts/BTree
	url = https://github.com/attaswift/BTree.git
[submodule "Carthage/Checkouts/SipHash"]
	path = Carthage/Checkouts/SipHash
	url = https://github.com/attaswift/SipHash.git


================================================
FILE: .swift-version
================================================
3.0.1


================================================
FILE: .travis.yml
================================================
language: objective-c
osx_image: xcode9
script:
- xcrun xcodebuild -workspace GlueKit.xcworkspace -scheme GlueKit-macOS test
- xcrun xcodebuild -quiet -workspace GlueKit.xcworkspace -scheme GlueKit-iOS
- xcrun xcodebuild -quiet -workspace GlueKit.xcworkspace -scheme GlueKit-watchOS
- xcrun xcodebuild -quiet -workspace GlueKit.xcworkspace -scheme GlueKit-tvOS
- swift test
after_success: bash <(curl -s https://codecov.io/bash)


================================================
FILE: Cartfile
================================================
github "attaswift/BTree" ~> 4.1
github "attaswift/SipHash" ~> 1.2


================================================
FILE: Cartfile.resolved
================================================
github "attaswift/BTree" "v4.1.0"
github "attaswift/SipHash" "v1.2.0"


================================================
FILE: Demo.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift
================================================
import GlueKit
import XCPlayground

// Let's suppose we're writing an app for maintaining a catalogue for your books.
// Here is what the model could look like.

class Author: Hashable, CustomStringConvertible {
    let name: Variable<String>
    let yearOfBirth: Variable<Int>

    init(name: String, yearOfBirth: Int) {
        self.name = .init(name)
        self.yearOfBirth = .init(yearOfBirth)
    }

    var hashValue: Int { return name.value.hashValue }
    static func == (a: Author, b: Author) -> Bool {
        return a.name.value == b.name.value && a.yearOfBirth.value == b.yearOfBirth.value
    }
    var description: String { return "Author(\(name.value))" }
}

class Book: Hashable, CustomStringConvertible {
    let title: Variable<String>
    let authors: SetVariable<Author>
    let publicationYear: Variable<Int>
    let pages: Variable<Int>

    init(title: String, authors: Set<Author>, publicationYear: Int, pages: Int) {
        self.title = .init(title)
        self.authors = .init(authors)
        self.publicationYear = .init(pages)
        self.pages = .init(pages)
    }

    var hashValue: Int { return title.value.hashValue }
    static func == (a: Book, b: Book) -> Bool {
        return (a.title.value == b.title.value
            && a.authors.value == b.authors.value
            && a.publicationYear.value == b.publicationYear.value
            && a.pages.value == b.pages.value)
    }
    var description: String { return "Book(\(title.value))" }
}

class Bookshelf {
    let location: Variable<String>
    let books: ArrayVariable<Book>

    init(location: String, books: [Book] = []) {
        self.location = .init(location)
        self.books = .init(books)
    }
}

// Let's create a couple of example books and arrange them on some bookshelves.

let stephenson = Author(name: "Neal Stephenson", yearOfBirth: 1959)
let pratchett = Author(name: "Terry Pratchett", yearOfBirth: 1948)
let gaiman = Author(name: "Neil Gaiman", yearOfBirth: 1960)
let knuth = Author(name: "Donald E. Knuth", yearOfBirth: 1938)

let colourOfMagic = Book(title: "The Colour of Magic", authors: [pratchett], publicationYear: 1983, pages: 206)
let smallGods = Book(title: "Small Gods", authors: [pratchett], publicationYear: 1992, pages: 284)
let seveneves = Book(title: "Seveneves", authors: [stephenson], publicationYear: 2015, pages: 880)
let goodOmens = Book(title: "Good Omens", authors: [pratchett, gaiman], publicationYear: 1990, pages: 288)
let americanGods = Book(title: "American Gods", authors: [gaiman], publicationYear: 2001, pages: 465)
let cryptonomicon = Book(title: "Cryptonomicon", authors: [stephenson], publicationYear: 1999, pages: 918)
let anathem = Book(title: "Anathem", authors: [stephenson], publicationYear: 2008, pages: 928)
let texBook = Book(title: "The TeXBook", authors: [knuth], publicationYear: 1984, pages: 483)
let taocp1 = Book(title: "The Art of Computer Programming vol. 1: Fundamental Algorithms. 3rd ed.", authors: [knuth], publicationYear: 1997, pages: 650)

let topShelf = Bookshelf(location: "Top", books: [colourOfMagic, smallGods, seveneves, goodOmens, americanGods])
let bottomShelf = Bookshelf(location: "Bottom", books: [cryptonomicon, anathem, texBook, taocp1])

let shelves = ArrayVariable<Bookshelf>([topShelf, bottomShelf])


// Now let's create some interesting queries on this small library of books!


// Let's get an array of the title of each book in the library.
let allTitles = shelves.flatMap{$0.books}.map{$0.title}
allTitles.value

let allAuthors = shelves.flatMap{$0.books}.distinctUnion().flatMap{$0.authors}
allAuthors.value

// Here are all books that have Neal Stephenson as one of their authors.
let booksByStephenson = shelves.flatMap{$0.books}.filter { book in book.authors.observableContains(stephenson) }
booksByStephenson.value

// Let's imagine Stephenson was a co-author of The TeXBook, and add him to its author list.
texBook.authors.insert(stephenson)

// `booksByStephenson` automatically updates to reflect the change.
booksByStephenson.value


// How many books do I have?
let bookCount = shelves.flatMap{$0.books}.observableCount
bookCount.value

// What if I buy a new book?
let mort = Book(title: "Mort", authors: [pratchett], publicationYear: 1987, pages: 315)
topShelf.books.append(mort)

bookCount
allTitles



================================================
FILE: Demo.playground/Pages/Untitled Page.xcplaygroundpage/timeline.xctimeline
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Timeline
   version = "3.0">
   <TimelineItems>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=4445&amp;EndingColumnNumber=24&amp;EndingLineNumber=89&amp;StartingColumnNumber=1&amp;StartingLineNumber=89&amp;Timestamp=497543455.651167"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=4445&amp;EndingColumnNumber=8&amp;EndingLineNumber=89&amp;StartingColumnNumber=5&amp;StartingLineNumber=89&amp;Timestamp=497543455.651368"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=4445&amp;EndingColumnNumber=8&amp;EndingLineNumber=89&amp;StartingColumnNumber=5&amp;StartingLineNumber=89&amp;Timestamp=497543455.651513"
         lockedSize = "{500, 128}"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=4445&amp;EndingColumnNumber=2&amp;EndingLineNumber=89&amp;StartingColumnNumber=1&amp;StartingLineNumber=89&amp;Timestamp=497543455.651658"
         lockedSize = "{524, 87}"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=4445&amp;EndingColumnNumber=21&amp;EndingLineNumber=89&amp;StartingColumnNumber=1&amp;StartingLineNumber=89&amp;Timestamp=497543455.651804"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=4445&amp;EndingColumnNumber=45&amp;EndingLineNumber=89&amp;StartingColumnNumber=1&amp;StartingLineNumber=89&amp;Timestamp=497543455.651939"
         lockedSize = "{568, 170}"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=15&amp;CharacterRangeLoc=3500&amp;EndingColumnNumber=16&amp;EndingLineNumber=83&amp;StartingColumnNumber=1&amp;StartingLineNumber=83&amp;Timestamp=497496046.579232"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=23&amp;CharacterRangeLoc=3800&amp;EndingColumnNumber=24&amp;EndingLineNumber=90&amp;StartingColumnNumber=1&amp;StartingLineNumber=90&amp;Timestamp=497496046.579372"
         lockedSize = "{425, 93}"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=23&amp;CharacterRangeLoc=4020&amp;EndingColumnNumber=24&amp;EndingLineNumber=96&amp;StartingColumnNumber=1&amp;StartingLineNumber=96&amp;Timestamp=497496046.579512"
         lockedSize = "{422, 110}"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=15&amp;CharacterRangeLoc=4133&amp;EndingColumnNumber=16&amp;EndingLineNumber=101&amp;StartingColumnNumber=1&amp;StartingLineNumber=101&amp;Timestamp=497496046.579648"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=9&amp;CharacterRangeLoc=4306&amp;EndingColumnNumber=10&amp;EndingLineNumber=108&amp;StartingColumnNumber=1&amp;StartingLineNumber=108&amp;Timestamp=497496046.579778"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=9&amp;CharacterRangeLoc=4296&amp;EndingColumnNumber=10&amp;EndingLineNumber=107&amp;StartingColumnNumber=1&amp;StartingLineNumber=107&amp;Timestamp=497496046.579911"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=16&amp;CharacterRangeLoc=3596&amp;EndingColumnNumber=17&amp;EndingLineNumber=86&amp;StartingColumnNumber=1&amp;StartingLineNumber=86&amp;Timestamp=497496046.580041"
         lockedSize = "{346, 109}"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=3&amp;CharacterRangeLoc=4372&amp;EndingColumnNumber=8&amp;EndingLineNumber=112&amp;StartingColumnNumber=5&amp;StartingLineNumber=112&amp;Timestamp=497543455.653085"
         lockedSize = "{417, 98}"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
      <LoggerValueHistoryTimelineItem
         documentLocation = "#CharacterRangeLen=3&amp;CharacterRangeLoc=4321&amp;EndingColumnNumber=8&amp;EndingLineNumber=110&amp;StartingColumnNumber=5&amp;StartingLineNumber=110&amp;Timestamp=497543455.663465"
         selectedRepresentationIndex = "0"
         shouldTrackSuperviewWidth = "NO">
      </LoggerValueHistoryTimelineItem>
   </TimelineItems>
</Timeline>


================================================
FILE: Demo.playground/contents.xcplayground
================================================
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<playground version='6.0' target-platform='macos'/>

================================================
FILE: Documentation/Language Enhancements.md
================================================
# Potential Swift Improvements That Would Help GlueKit

This document lists a couple of potential improvements to the Swift language and compiler that would simplify the design/implementation of GlueKit.

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents**

- [Property Behaviors ([SE-0030])](#property-behaviors-se-0030)
- [More Complete Support for Generics](#more-complete-support-for-generics)
  - [Generalized Protocol Existentials](#generalized-protocol-existentials)
  - [Permitting `where` clauses to constrain associated types ([SE-0142])](#permitting-where-clauses-to-constrain-associated-types-se-0142)
  - [Conditional Conformances ([SE-0143])](#conditional-conformances-se-0143)
  - [Nested generics](#nested-generics)
  - [Allowing subclasses to override requirements satisfied by defaults](#allowing-subclasses-to-override-requirements-satisfied-by-defaults)
- [Abstract Methods](#abstract-methods)
- [Relaxed Superclass Visibility Requirements](#relaxed-superclass-visibility-requirements)
- [Closure Contexts With Inline Storage (Related issue: [SR-3106])](#closure-contexts-with-inline-storage-related-issue-sr-3106)
- [Assorted Bugfixes](#assorted-bugfixes)
  - [Generic subclass cannot override methos in non-generic superclass, and vice versa ([SR-2427])](#generic-subclass-cannot-override-methos-in-non-generic-superclass-and-vice-versa-sr-2427)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->


## Property Behaviors ([SE-0030])

> There are property implementation patterns that come up repeatedly. Rather than hardcode a fixed set of patterns into the compiler, we should provide a general "property behavior" mechanism to allow these patterns to be defined as libraries. -- [SE-0030]


To declare observable properties in GlueKit, you currently need to declare them with a  `Variable` type, and you have to access their values through an inconvenient `value` property:

```swift
class Book {
    let title: Variable<String>
    let pageCount: Variable<Int>
}

let book: Book = ...
book.title.value = "The Colour of Magic"
let c = book.pageCount.futureValues.subscribe { print("Page count is now \($0)" }
```

It is possible to make this a little less painful by judicious use of computed properties:

```swift
class Book {
	let observableTitle: Variable<String>
    var title: String {
        get { return observableTitle.value }
        set { observableTitle.value = newValue }
    }
    
    let observablePageCount: Variable<Int>
    var pageCount: Int {
        get { return observablePageCount.value }
        set { observablePageCount.value = newValue }
    }
}

let book: Book = ...
book.title = "The Colour of Magic"
let c = book.observablePageCount.futureValues.subscribe { print("Page count is now \($0)" }
```

This makes usage of these properties nicer, but it adds extra boilerplate to the definition of your model classes.

If the [proposal for Property Behaviors][SE-0030] would be implemented, we could
eliminate this boilerplate and have observable properties that approach (or arguably even exceed) the readability of Cocoa:

```swift
class Book {
	var [observable] title: String
    var [observable] pageCount: Int
}

let book: Book = ...
book.title = "The Colour of Magic"
let c = book.pageCount.[observable].subscribe { print("Page count is now \($0)" }
```

Property Behaviors also allow storage for the Signals associated with these 
variables to be embedded directly in the `Book` class, instead of being allocated separately. (Each such observable variable needs to count open transactions and keep track of subscribed observers somehow.)


[SE-0030]: https://github.com/apple/swift-evolution/blob/master/proposals/0030-property-behavior-decls.md


## More Complete Support for Generics

GlueKit heavily relies on Swift's generic types and protocols with associated values. Any and all 
language improvements relating to these concepts would find immediate use in GlueKit.
For example, the implementation of pretty much any item in the [Generics Manifesto][gm] 
would have immediate impact on GlueKit. (Some of these are explicitly mentioned below.)

[gm]: https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md

GlueKit was designed with the assumption that most items in the Generic Manifesto will be implemented at some point. I sometimes chose a less convenient way 
to express things so that when/if a particular item on this list gets implemented, GlueKit will find itself immediately
at home in the new language, with minimal design changes.


### Generalized Protocol Existentials

> The restrictions on existential types came from an implementation limitation, but it is reasonable to allow a value of protocol type even when the protocol has Self constraints or associated types. -- [GenericsManifesto.md][gm-generalized-existentials]

[gm-generalized-existentials]: https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#generalized-existentials
 
GlueKit is largely about the exploration of possible interactions between a handful of concepts, all which are 
captured by protocols with associated types: `SourceType`, `SinkType`, `ObservableType`, `UpdatableType`,
`ObservableValueType`, `ObservableArrayType`, `UpdatableSetType`, etc.

The language does not provide existentials for these protocols -- so type erasure needs to be implemented manually.
This leads to the proliferation of the various `Any*` types -- see `AnySource`, `AnySink`, `AnyObservableValue`,
`AnyUpdatableValue`, `AnyObservableArray`, `AnyUpdatableSetType`, etc. These are all implemented manually, 
using subclass polymorphism.

Sometimes the need for type erasure can be eliminated by expanding the public API surface. For example, wherever 
an `Any*` type is used as a return value, we could substitute the (currently private/internal) concrete type instead.
There are good reasons to do this whether or not we get generalized existentials: having transformation methods
return concrete types enables static method dispatch. It might be worthwhile to do this for at least some of the 
transformations.
(The class names and their exposed API surface need to be carefully reviewed and updated, though.)
Concrete return types do make life a little more difficult for users, though: they will have to explicitly 
specify the type in, say, a property declaration.

However, the need for `Any*` cannot be entirely eliminated. For example, `Signal` needs to be able to store its
subscribers in a collection, which is only possible with some form of type erasure. (The current `Source` API
also needs `Signal` to be able to reify type-erased values, getting the original type back. This is similar to [opening a generalized existential][gm-open].)

Doing type erasure by subclass polymorphism implies that GlueKit's `Any*` types always need to heap-allocate a box. On the other hand, Swift's protocol existentials include some space to store small value types inline, which makes them work without allocation in a lot of cases. This optimization is hard (even impossible?) to emulate in Swift code, but it would be very much desirable to have it for e.g. `AnySink`.

[gm-open]: https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#opening-existentials

### Permitting `where` clauses to constrain associated types ([SE-0142])

> This proposal seeks to introduce a where clause to associated type declarations and improvements to protocol constraints to bring associated types the same expressive power as generic type parameters. -- [SE-0142]

[SE-0142]: https://github.com/apple/swift-evolution/blob/master/proposals/0142-associated-types-constraints.md

This is a biggie! Not having the ability to specify that e.g. an `ObservableArrayType` must have
`Change == ArrayChange<Element>` means that this constraint has to be explicitly specified by almost every consumer
of an observable array. I currently have ~300 such explicit constraints in the source code, making working on GlueKit an exercise in patience.

The proposal to implement this improvement has been accepted, so presumably it'll get implemented relatively soon.

Meanwhile, we can mostly work around the issue by having the child protocol include
property requirements that specialize on the requirements of the parent:

```swift
 protocol ObservableType { // Not the real definition
     associatedtype Change: ChangeType 
 
     var value: Change.Value { get }
     var changes: AnySource<Change> { get }
 }

 protocol ObservableArrayType {
     associatedtype Element: Hashable  

     var value: [Element] { get }
     var changes: AnySource<ArrayChange<Element>> { get }
 }
```

In most (maybe all) contexts, the type inference engine sees that `changes` in
`ObservableArrayType` refines the similar requirement in `ObservableType` 
and concludes that `Change` can only be an `ArrayChange` there. In the current
codebase, `ObservableType` doesn't have a property requirement in like `changes` 
above -- the update source is implemented by two methods. However, it would be 
easy enough to define a dummy property that is never actually used.


### Conditional Conformances ([SE-0143])

> Conditional conformances express the notion that a generic type will conform to a particular protocol only when its type arguments meet certain requirements." -- [SE-0143]

This is a popular Swift feature request that seems to be on track for implementation.

[SE-0143]: https://github.com/apple/swift-evolution/blob/master/proposals/0143-conditional-conformances.md

At first glance, it looks like conditional conformances might allow us to express deep relationships between our 
concepts: for example, we might want to say that an `ObservableType` whose `Change` is an `ArrayChange` is
automatically an `ObservableArrayType`. But that's not the case:

1. The proposal allows conditional conformances for generic types only, not protocols. It enables us to specify that
   `Array` should implement `Equatable` when its elements do, but we won't be able to do the same for `Collection`.

2. Even if we could do that, an `ObservableArrayType` is more than just an observable whose delta type matches 
   a specific structure; it also defines a more efficient API for array access. Without this, we lose what makes 
   observable arrays (reasonably) efficient.

Conditional conformances will, however, help a great deal with small annoying details -- for example, we could say that a `Variable` with an integer value automatically implements `ExpressibleByIntegerLiteral`, eliminating the need 
for `IntVariable`. We could have `ValueChange`, `SetChange` and `ArrayChange` explicitly implement `Equatable`, 
which would help unit tests.

### Nested generics

> There isn't much to say about this: the compiler simply needs to be improved to handle nested generics throughout. -- [GenericsManifesto.md][gm-nested-generics]

[gm-nested-generics]: https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#nested-generics

Currently Swift does not support declaring nested types in generics, which means some helper types (like method forwarding structs that implement `SinkType`) need to be declared outside the generic struct/class. This means the type parameters of the parent generic and (most annoyingly) the constraints of these parameters need to be repeated on every such helper type. Assuming types nested in generics would implicitly inherit the type parameters of their parents, nested generics would eliminate such boring repetitions.

### Allowing subclasses to override requirements satisfied by defaults

> When a superclass conforms to a protocol and has one of the protocol's requirements satisfied by a member of a protocol extension, that member currently cannot be overridden by a subclass. -- [GenericsManifesto.md][gm-overriding-extensions]

[gm-overriding-extensions]: https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#allowing-subclasses-to-override-requirements-satisfied-by-defaults-

For each protocol requirement that has a default implementation in a protocol extension, we currently need to duplicate that implementation in the (abstract) base class that is used to implement boxing for type erasure. This is error-prone and ugly.

## Abstract Methods

There is currently no way to mark an overridable member as abstract in Swift. I've not seen proposals to add support for this, but it seems obvious Swift needs this -- abstract classes and members are an important part of OOP. Without the help of the compiler, it is all too easy to forget a required method override.

Protocols supply an alternative, often better, way to express the things we used to model with abstract methods. But in some contexts (particularly when implementing type-erasure for protocols with associated types), abstract methods are still useful.
(Obviously, generalized existentials would remove this usecase.)

## Relaxed Superclass Visibility Requirements

Swift currently requires the superclasses of public classes to be also exposed as public, even if they're just an implementation detail. This is why GlueKit exposes some underscored classes like `_BaseObservableArray` in its public interface.

This restriction is not consistently enforced by the compiler, but breaking it can lead to misleading errors and/or strange behavior at runtime. (I can't remember which.)

## Closure Contexts With Inline Storage (Related issue: [SR-3106])

[SR-3106]: https://bugs.swift.org/browse/SR-3106

In the current version of Swift, a variable of a function type has storage for just two machine words, which is enough to hold function pointer and a single-word context containing the values captured by the closure.

This means that the context of most escaping closures needs to be heap-allocated, even if they capture only a couple of constants. The compiler may be able to optimize away the allocation if the closure is non-escaping, but if we need to store the closure for later execution, the context needs to be on the heap.

Closures that capture only a single-word constant may at some point store that value directly in the context word. This isn't currently implemented, though. (Note that the captured value may or may not need to be reference counted. `self` is refcounted, but a captured `Float` wouldn't be. Some bits need to be reserved somewhere to keep track of this.)

Swift's partially applied methods are closures that capture `self`. It would be possible to special-case them such that the `self` reference is stored directly in context word; but this is not currently implemented. So partially applied methods always incur the cost of a heap allocation when used in escaping contexts. This makes them slower than representing the method call with a forwarding struct like this:

```swift
class Foo {
	func greet(_ name: String) {
		print("Hello, \(name)!")
	}
}

struct FooForwarder {
	let foo: Foo
	func apply(_ name: String) {
		foo.greet(name)
	}
}

let foo = Foo()
let greeter1 = FooForwarder(foo)
let greeter2 = foo.greet
```

Creating `greeter1` is measurably faster than creating `greeter2`, because the latter needs to do an allocation.
This is the primary reason why GlueKit defines the `SinkType` protocol instead of just defining a typealias for a function type.
(The other reason is that it is useful to be able to add extra requirements (i.e., `Hashable`) and extensions to sinks. But we could live without those!)

If the size of function types would be widened to include space for more bits of context, lots of simple closures would fit inline, without the need for context allocation. There is precedent for this with `Any`, which currently includes space for inline storage of data up to three words in size.

Aggregate observation in GlueKit (e.g., `ArrayMappingForValueField`) needs to register observer sinks that capture two refcounted pointers -- one for the `self` pointer of the aggregate observable itself, the other for keeping track of the particular element that is the source of the change. If these would be represented by closures, then they would be heap-allocated, making them much more expensive -- unless Swift's function types would be widened & the inline storage optimization was implemented. 

(We could leave some of the captures uncaptured and store them alongside the closure, but it seems easier to just define a forwarding struct -- which achieves exactly the same thing.)


## Assorted Bugfixes

This section lists compiler bugs that have a direct effect on GlueKit.

### Generic subclass cannot override methos in non-generic superclass, and vice versa ([SR-2427])

This compiler bug affects the design of `TimerSource`. To work around it, I had to add a dummy unusued type parameter to it, 
and define a typealias to paper over the ugliness.

[SR-2427]: https://bugs.swift.org/browse/SR-2427

This bug [has been fixed][PR-5424] on Swift's master branch.

[PR-5424]: https://github.com/apple/swift/pull/5424


================================================
FILE: Documentation/Overview.md
================================================

# Overview of GlueKit

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents**

- [Sources, Sinks and Connections](#sources-sinks-and-connections)
- [Signals](#signals)
- [Observables, Updatables and Variable](#observables-updatables-and-variable)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

## Sources, Sinks and Connections

In GlueKit, the `SourceType` protocol models a thing that you can subscribe to receive a stream of values. 

```Swift
protocol SourceType {
    typealias Value
    func subscribe(sink: Value->Void) -> Connection
}
```

It is not easy to work with associated types, so GlueKit generally uses the struct `Source<Value>` to represent sources. `Source<Value>` is a type-erased wrapper around some `SourceType` for the same type of value.

For example, you can create a source for the `NSCalendarDayChangedNotification` notification
and run some code whenever midnight passes:

```Swift
let center = NSNotificationCenter.defaultCenter()
let midnightSource = center.source(forName: NSCalendarDayChangedNotification)

let connection = midnightSource.subscribe { notification in 
    print("Ding dong!") 
}
```

The subscription (and the source) is kept alive until the connection object is deinitalized
or until its `disconnect` method is called. Thus, active connections hold strong
references to their source and sink---this is a general rule in GlueKit.

There is a `Connector` class that is a convenient place to store connections that you need to keep
alive without creating a property for each individual connection:

```Swift
class ClockViewController: UIViewController {
    private connectionsWhileVisible = Connector()
    
    // TimerSource is a source that periodically broadcasts a Void value as long as it is connected.
    private let tickSource = TimerSource(start: NSDate(), interval: 1.0)

    private var midnightSource: Source<NSNotification> {
        let center = NSNotificationCenter.defaultCenter()
		return center.source(forName: NSCalendarDayChangedNotification)
    }
    
    override func viewWillAppear() {
        super.viewWillAppear()
        tickSource.subscribe(self.onTick).putInto(connectionsWhileVisible)
        midnightSource.subscribe { _ in self.onMidnight() }.putInto(connectionsWhileVisible)
    }
    
    override func viewDidDisappear() {
        super.viewDidDisappear()
        connectionsWhileVisible.disconnect()
    }
    
    func onTick() {
        print("Tick!")
    }
    
    func onMidnight() {
        print("Ding dong!")
    }
}
```

## Signals

The `Signal` class lets you easily create your own sources. 
It implements `SourceType`, keeps track of its connections, and provides a `send` method for you to send values to all its connected sinks:

```Swift
let signal = Signal<Int>()

signal.send(42) // Does nothing, no subscribers

let connection = signal.subscribe { i in print("Got \(i\)!") }

signal.send(23) // Prints "Got 23!"
signal.send(7)  // Prints "Got 7!"

connection.disconnect()
```

For example, a button's implementation might have a Void-valued signal that triggers whenever the user
taps on it. In such cases, it's best to not let outside code send values to the signal, so the 
`Signal` instance is frequently stored in a private property and the class exposes only a 
"read-only" source view of it:

```Swift
class Button: UIButton {
    private let activationSignal: Signal<Void>()
    public var activationSource: Source<Void> { return activationSignal.source }
    
	init() {
	    super.init(...)
	    addTarget(self, action: "didTouchUpInside", forControlEvents: UIControlEventTouchUpInside)
	}
    
    @objc func didTouchUpInside() {
        activationSignal.send()
    }
}
```

This is the way most sources are implemented in GlueKit.

## Observables, Updatables and Variable

A concrete implementation of this protocol is the generic class `Variable`, which directly holds such a value. 

Let's create a class with an observable property.

```Swift
class Person {
    let name: Variable<String>
    init(name: String) { self.name.value = name }
}

let fred = Person(name: "Fred")

// The variable's value property let's you get Fred's name or update it:
print(fred.name.value)         
fred.name.value = "Freddie"
```

`let foo: Variable<Type>` is the GlueKit equivalent to Cocoa's `dynamic var foo: Type`.

Once you have an observable value, you can start observing it:

```Swift

let connection = fred.name.subscribe { name in print("Fred's name is \(name)") }
```

This will immediately print `Fred's name is Fred` to the console, because by default variables 
send their current values to each new observer. If you don't want this, you can subscribe to the
variable's `futureValues` property instead.



================================================
FILE: GlueKit.podspec
================================================
Pod::Spec.new do |spec|
  spec.name         = 'GlueKit'
  spec.version      = '0.2.0'
  spec.ios.deployment_target = "9.3"
  spec.osx.deployment_target = "10.11"
  spec.tvos.deployment_target = "10.0"
  spec.watchos.deployment_target = "3.0"
  spec.summary      = 'Type-safe observable values and collections in Swift'
  spec.author       = 'Károly Lőrentey'
  spec.homepage     = 'https://github.com/attaswift/GlueKit'
  spec.license      = { :type => 'MIT', :file => 'LICENSE.md' }
  spec.source       = { :git => 'https://github.com/attaswift/GlueKit.git', :tag => 'v' + String(spec.version) }
  spec.source_files = 'Sources/*.swift'
  spec.social_media_url = 'https://twitter.com/lorentey'
  #spec.documentation_url = 'http://lorentey.github.io/GlueKit/'
  spec.dependency 'BTree', '~> 4.1'
  spec.dependency 'SipHash', '~> 1.2'
end


================================================
FILE: GlueKit.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		BB015F2E1DC4F5BA00C8C05A /* ObservableSetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E411DABD4BE00E85FB9 /* ObservableSetTests.swift */; };
		BB015F2F1DC4F5C200C8C05A /* UpdatableArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B341C8FCC820050DDA9 /* UpdatableArray.swift */; };
		BB015F301DC4F64200C8C05A /* UpdatableSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89901A1D5F6AAE0097F350 /* UpdatableSet.swift */; };
		BB015F311DC4F90200C8C05A /* MockSetObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB568AF21DA6942700BC4B58 /* MockSetObserver.swift */; };
		BB015F321DC4FC3100C8C05A /* SetVariable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89901F1D5F6F980097F350 /* SetVariable.swift */; };
		BB015F331DC4FC3700C8C05A /* ArrayVariable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B201C8FCC810050DDA9 /* ArrayVariable.swift */; };
		BB015F341DC4FDCE00C8C05A /* SetMappingBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF5B1DA55DA3005EC162 /* SetMappingBase.swift */; };
		BB015F351DC4FDD300C8C05A /* ObservableContains.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF400631DA108E900DA0B2C /* ObservableContains.swift */; };
		BB015F361DC5004F00C8C05A /* ValueMappingForSetField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E1D1DAAC7E600E85FB9 /* ValueMappingForSetField.swift */; };
		BB015F371DC506B400C8C05A /* ValueMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E131DAAC4DC00E85FB9 /* ValueMappingForArrayField.swift */; };
		BB015F381DC508AC00C8C05A /* BufferedArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A7FF1D6B2377001D2821 /* BufferedArray.swift */; };
		BB015F391DC509D000C8C05A /* SetMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF561DA55384005EC162 /* SetMappingForValue.swift */; };
		BB015F3A1DC50B1200C8C05A /* ArrayMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A83F1D6B9A7E001D2821 /* ArrayMappingForValue.swift */; };
		BB015F3B1DC50C6700C8C05A /* MockArrayObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB568AF61DA6A9EE00BC4B58 /* MockArrayObserver.swift */; };
		BB015F3C1DC5106B00C8C05A /* ArrayMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2D1C8FCC810050DDA9 /* ArrayMappingForValueField.swift */; };
		BB015F3D1DC512D600C8C05A /* ArrayMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04C71DA7233B00BE3051 /* ArrayMappingForArrayField.swift */; };
		BB015F3E1DC5147700C8C05A /* ArrayMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9F1C8FCE2C0050DDA9 /* ArrayMappingTests.swift */; };
		BB015F3F1DC51D8300C8C05A /* ArrayVariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B981C8FCE2C0050DDA9 /* ArrayVariableTests.swift */; };
		BB015F401DC5261900C8C05A /* ArrayFilteringIndexmap.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04E01DA7255D00BE3051 /* ArrayFilteringIndexmap.swift */; };
		BB015F411DC5262400C8C05A /* ArrayFilteringOnPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB82E3E01D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift */; };
		BB015F421DC526BF00C8C05A /* ArrayFilteringOnObservableBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04E51DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift */; };
		BB015F431DC5281F00C8C05A /* ArrayReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D929A1D64862D003BEDBF /* ArrayReference.swift */; };
		BB015F441DC529CF00C8C05A /* ArrayFilteringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC4AE4D1D9A829500FF7DE0 /* ArrayFilteringTests.swift */; };
		BB015F451DC52ADD00C8C05A /* ArrayFolding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DF81DAA885E00E85FB9 /* ArrayFolding.swift */; };
		BB015F461DC52B4500C8C05A /* ArrayFoldingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DFD1DAA8F7800E85FB9 /* ArrayFoldingTests.swift */; };
		BB015F471DC52B6200C8C05A /* ArrayConcatenation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A83A1D6B90F5001D2821 /* ArrayConcatenation.swift */; };
		BB015F481DC52CE200C8C05A /* ArrayConcatenationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E491DABFA2900E85FB9 /* ArrayConcatenationTests.swift */; };
		BB015F491DC52D3500C8C05A /* DistinctUnion.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF491DA409EE005EC162 /* DistinctUnion.swift */; };
		BB015F4A1DC52DC500C8C05A /* DistinctUnionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF4E1DA412A0005EC162 /* DistinctUnionTests.swift */; };
		BB015F4B1DC52FA000C8C05A /* ObservableArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E451DABEA5500E85FB9 /* ObservableArrayTests.swift */; };
		BB015F4C1DC6233E00C8C05A /* SetMappingForSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04D11DA7240C00BE3051 /* SetMappingForSequence.swift */; };
		BB015F4F1DC677A900C8C05A /* SetMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04CC1DA723F300BE3051 /* SetMappingForValueField.swift */; };
		BB015F501DC678C200C8C05A /* SetMappingForSetField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04D61DA7242F00BE3051 /* SetMappingForSetField.swift */; };
		BB015F511DC679F000C8C05A /* SetMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04DB1DA7244A00BE3051 /* SetMappingForArrayField.swift */; };
		BB015F531DC67A6400C8C05A /* SetVariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E4D1DABFE8800E85FB9 /* SetVariableTests.swift */; };
		BB015F541DC67ACA00C8C05A /* SetMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF611DA5654F005EC162 /* SetMappingTests.swift */; };
		BB015F551DC67C1000C8C05A /* SetFilteringOnPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B231C8FCC810050DDA9 /* SetFilteringOnPredicate.swift */; };
		BB015F561DC67C3F00C8C05A /* SetReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D92951D647E83003BEDBF /* SetReference.swift */; };
		BB015F571DC67DA900C8C05A /* SetFilteringOnObservableBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033561DA726AA00E83AC1 /* SetFilteringOnObservableBool.swift */; };
		BB015F581DC67F0500C8C05A /* SetFilteringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB568AEE1DA693F700BC4B58 /* SetFilteringTests.swift */; };
		BB015F591DC684DC00C8C05A /* SetFoldingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E061DAA918400E85FB9 /* SetFoldingTests.swift */; };
		BB015F5A1DC684E200C8C05A /* SetFolding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E011DAA910500E85FB9 /* SetFolding.swift */; };
		BB015F5C1DC6868F00C8C05A /* SetSortingByMappingToComparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1E4D691D61EA5200F1831F /* SetSortingByMappingToComparable.swift */; };
		BB015F5D1DC686CD00C8C05A /* SetSortingByMappingToObservableComparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033601DA7278C00E83AC1 /* SetSortingByMappingToObservableComparable.swift */; };
		BB015F5E1DC687B100C8C05A /* SetSortingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB471D991DA57FF8002550B0 /* SetSortingTests.swift */; };
		BB015F5F1DC687EE00C8C05A /* SetSortingByComparator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA0335B1DA7276200E83AC1 /* SetSortingByComparator.swift */; };
		BB015F601DC689F600C8C05A /* Bookshelf.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8D366D1DA116CB000D44C5 /* Bookshelf.swift */; };
		BB1657E71D71D65900094BAC /* ArrayChangeSeparation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1657E61D71D65900094BAC /* ArrayChangeSeparation.swift */; };
		BB1657E91D71D65900094BAC /* ArrayChangeSeparation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1657E61D71D65900094BAC /* ArrayChangeSeparation.swift */; };
		BB1657EA1D71D65900094BAC /* ArrayChangeSeparation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1657E61D71D65900094BAC /* ArrayChangeSeparation.swift */; };
		BB170F241DC1066D0000443E /* UpdateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F231DC1066D0000443E /* UpdateTests.swift */; };
		BB170F251DC1066D0000443E /* UpdateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F231DC1066D0000443E /* UpdateTests.swift */; };
		BB170F261DC1066D0000443E /* UpdateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F231DC1066D0000443E /* UpdateTests.swift */; };
		BB170F281DC106DE0000443E /* TestChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F271DC106DE0000443E /* TestChange.swift */; };
		BB170F291DC106DE0000443E /* TestChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F271DC106DE0000443E /* TestChange.swift */; };
		BB170F2A1DC106DE0000443E /* TestChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F271DC106DE0000443E /* TestChange.swift */; };
		BB170F2C1DC10D350000443E /* TestObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F2B1DC10D350000443E /* TestObservable.swift */; };
		BB170F2D1DC10D350000443E /* TestObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F2B1DC10D350000443E /* TestObservable.swift */; };
		BB170F2E1DC10D350000443E /* TestObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F2B1DC10D350000443E /* TestObservable.swift */; };
		BB170F301DC10DDB0000443E /* ChangesSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F2F1DC10DDB0000443E /* ChangesSourceTests.swift */; };
		BB170F311DC10DDB0000443E /* ChangesSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F2F1DC10DDB0000443E /* ChangesSourceTests.swift */; };
		BB170F321DC10DDB0000443E /* ChangesSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F2F1DC10DDB0000443E /* ChangesSourceTests.swift */; };
		BB170F341DC110BD0000443E /* TestUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F331DC110BD0000443E /* TestUpdatable.swift */; };
		BB170F351DC110BD0000443E /* TestUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F331DC110BD0000443E /* TestUpdatable.swift */; };
		BB170F361DC110BD0000443E /* TestUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F331DC110BD0000443E /* TestUpdatable.swift */; };
		BB170F381DC1545E0000443E /* TransactionStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F371DC1545E0000443E /* TransactionStateTests.swift */; };
		BB170F391DC1545E0000443E /* TransactionStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F371DC1545E0000443E /* TransactionStateTests.swift */; };
		BB170F3A1DC1545E0000443E /* TransactionStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F371DC1545E0000443E /* TransactionStateTests.swift */; };
		BB170F3B1DC220A80000443E /* MockUpdateSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E0A1DAAB6E700E85FB9 /* MockUpdateSink.swift */; };
		BB170F3C1DC220B20000443E /* ObservableValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9D1C8FCE2C0050DDA9 /* ObservableValueTests.swift */; };
		BB170F3E1DC221180000443E /* ValueChangeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F3D1DC221180000443E /* ValueChangeTests.swift */; };
		BB170F3F1DC221180000443E /* ValueChangeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F3D1DC221180000443E /* ValueChangeTests.swift */; };
		BB170F401DC221180000443E /* ValueChangeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F3D1DC221180000443E /* ValueChangeTests.swift */; };
		BB170F421DC22A300000443E /* UpdatableValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F411DC22A300000443E /* UpdatableValueTests.swift */; };
		BB170F431DC22A300000443E /* UpdatableValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F411DC22A300000443E /* UpdatableValueTests.swift */; };
		BB170F441DC22A300000443E /* UpdatableValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB170F411DC22A300000443E /* UpdatableValueTests.swift */; };
		BB170F451DC239BC0000443E /* DistinctTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9E1C8FCE2C0050DDA9 /* DistinctTests.swift */; };
		BB170F461DC255200000443E /* TwoWayBindingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA61C8FCE2C0050DDA9 /* TwoWayBindingTests.swift */; };
		BB23E63D1C90DEB6005EFD0A /* GlueKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBB55AB21C8F80020050DDA9 /* GlueKit.framework */; };
		BB318F6B1CB992300086EE83 /* UIBarButtonItem Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB318F6A1CB9922F0086EE83 /* UIBarButtonItem Extensions.swift */; };
		BB351B011DB81E67005F083F /* GlueKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBB55AD41C8F88F20050DDA9 /* GlueKit.framework */; };
		BB351B071DB81EE1005F083F /* GlueKitPerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BEA1C8FD25F0050DDA9 /* GlueKitPerformanceTests.swift */; };
		BB3982ED1EC109C4000CDCB5 /* UISearchBar Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3982EC1EC109C4000CDCB5 /* UISearchBar Glue.swift */; };
		BB3982EE1EC109C7000CDCB5 /* UISearchBar Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3982EC1EC109C4000CDCB5 /* UISearchBar Glue.swift */; };
		BB3982EF1EC109C8000CDCB5 /* UISearchBar Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3982EC1EC109C4000CDCB5 /* UISearchBar Glue.swift */; };
		BB3982F01EC109C8000CDCB5 /* UISearchBar Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3982EC1EC109C4000CDCB5 /* UISearchBar Glue.swift */; };
		BB3D12B21E49FC5A00097510 /* BTree.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB3D12B11E49FC5A00097510 /* BTree.framework */; };
		BB3D12B41E49FC5E00097510 /* SipHash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB3D12B31E49FC5E00097510 /* SipHash.framework */; };
		BB3D12B71E49FC7600097510 /* BTree.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB3D12B51E49FC7600097510 /* BTree.framework */; };
		BB3D12B81E49FC7600097510 /* SipHash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB3D12B61E49FC7600097510 /* SipHash.framework */; };
		BB3D12BB1E49FC8000097510 /* BTree.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB3D12B91E49FC8000097510 /* BTree.framework */; };
		BB3D12BC1E49FC8000097510 /* SipHash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB3D12BA1E49FC8000097510 /* SipHash.framework */; };
		BB3D12BF1E49FC8700097510 /* BTree.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB3D12BD1E49FC8700097510 /* BTree.framework */; };
		BB3D12C01E49FC8700097510 /* SipHash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB3D12BE1E49FC8700097510 /* SipHash.framework */; };
		BB3D12C11E49FD1700097510 /* GlueKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBB55AD41C8F88F20050DDA9 /* GlueKit.framework */; };
		BB4052021C958712003D8F5B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4052011C958712003D8F5B /* UIKit.framework */; };
		BB471D9A1DA57FF8002550B0 /* SetSortingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB471D991DA57FF8002550B0 /* SetSortingTests.swift */; };
		BB471D9C1DA57FF8002550B0 /* SetSortingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB471D991DA57FF8002550B0 /* SetSortingTests.swift */; };
		BB568AEF1DA693F700BC4B58 /* SetFilteringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB568AEE1DA693F700BC4B58 /* SetFilteringTests.swift */; };
		BB568AF11DA693F700BC4B58 /* SetFilteringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB568AEE1DA693F700BC4B58 /* SetFilteringTests.swift */; };
		BB568AF31DA6942700BC4B58 /* MockSetObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB568AF21DA6942700BC4B58 /* MockSetObserver.swift */; };
		BB568AF51DA6942700BC4B58 /* MockSetObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB568AF21DA6942700BC4B58 /* MockSetObserver.swift */; };
		BB568AF91DA6A9EE00BC4B58 /* MockArrayObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB568AF61DA6A9EE00BC4B58 /* MockArrayObserver.swift */; };
		BB5B02DB1F5E3FC50084D86B /* ArrayGatheringSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5B02DA1F5E3FC50084D86B /* ArrayGatheringSource.swift */; };
		BB5B02DC1F5E3FC50084D86B /* ArrayGatheringSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5B02DA1F5E3FC50084D86B /* ArrayGatheringSource.swift */; };
		BB5B02DD1F5E3FC50084D86B /* ArrayGatheringSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5B02DA1F5E3FC50084D86B /* ArrayGatheringSource.swift */; };
		BB5B02DE1F5E3FC50084D86B /* ArrayGatheringSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5B02DA1F5E3FC50084D86B /* ArrayGatheringSource.swift */; };
		BB5B02E01F5E3FDE0084D86B /* SetGatheringSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5B02DF1F5E3FDE0084D86B /* SetGatheringSource.swift */; };
		BB5B02E11F5E3FDE0084D86B /* SetGatheringSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5B02DF1F5E3FDE0084D86B /* SetGatheringSource.swift */; };
		BB5B02E21F5E3FDE0084D86B /* SetGatheringSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5B02DF1F5E3FDE0084D86B /* SetGatheringSource.swift */; };
		BB5B02E31F5E3FDE0084D86B /* SetGatheringSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5B02DF1F5E3FDE0084D86B /* SetGatheringSource.swift */; };
		BB6139831F5E1B3F005455D5 /* NSTextField Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6139821F5E1B3F005455D5 /* NSTextField Glue.swift */; };
		BB67E5521C9B6A63002B0AB5 /* CADisplayLink Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB67E5511C9B6A63002B0AB5 /* CADisplayLink Extensions.swift */; };
		BB67E5531C9B6A63002B0AB5 /* CADisplayLink Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB67E5511C9B6A63002B0AB5 /* CADisplayLink Extensions.swift */; };
		BB69A7EF1D6AFF1A001D2821 /* Abstract.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A7EE1D6AFF1A001D2821 /* Abstract.swift */; };
		BB69A7F01D6AFF1A001D2821 /* Abstract.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A7EE1D6AFF1A001D2821 /* Abstract.swift */; };
		BB69A7F11D6AFF1A001D2821 /* Abstract.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A7EE1D6AFF1A001D2821 /* Abstract.swift */; };
		BB69A7F21D6AFF1A001D2821 /* Abstract.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A7EE1D6AFF1A001D2821 /* Abstract.swift */; };
		BB69A7F31D6B1D7B001D2821 /* Change.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990041D5DF8630097F350 /* Change.swift */; };
		BB69A7F51D6B1D7C001D2821 /* Change.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990041D5DF8630097F350 /* Change.swift */; };
		BB69A7F61D6B1D7C001D2821 /* Change.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990041D5DF8630097F350 /* Change.swift */; };
		BB69A7F71D6B1D82001D2821 /* ArrayChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B1F1C8FCC810050DDA9 /* ArrayChange.swift */; };
		BB69A7F91D6B1D83001D2821 /* ArrayChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B1F1C8FCC810050DDA9 /* ArrayChange.swift */; };
		BB69A7FA1D6B1D83001D2821 /* ArrayChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B1F1C8FCC810050DDA9 /* ArrayChange.swift */; };
		BB69A7FB1D6B1D94001D2821 /* ObservableArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2A1C8FCC810050DDA9 /* ObservableArray.swift */; };
		BB69A7FD1D6B1D95001D2821 /* ObservableArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2A1C8FCC810050DDA9 /* ObservableArray.swift */; };
		BB69A7FE1D6B1D95001D2821 /* ObservableArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2A1C8FCC810050DDA9 /* ObservableArray.swift */; };
		BB69A8001D6B2377001D2821 /* BufferedArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A7FF1D6B2377001D2821 /* BufferedArray.swift */; };
		BB69A8021D6B2377001D2821 /* BufferedArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A7FF1D6B2377001D2821 /* BufferedArray.swift */; };
		BB69A8031D6B2377001D2821 /* BufferedArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A7FF1D6B2377001D2821 /* BufferedArray.swift */; };
		BB69A8041D6B344C001D2821 /* UpdatableArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B341C8FCC820050DDA9 /* UpdatableArray.swift */; };
		BB69A8061D6B344D001D2821 /* UpdatableArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B341C8FCC820050DDA9 /* UpdatableArray.swift */; };
		BB69A8071D6B344E001D2821 /* UpdatableArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B341C8FCC820050DDA9 /* UpdatableArray.swift */; };
		BB69A8081D6B442B001D2821 /* ArrayVariable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B201C8FCC810050DDA9 /* ArrayVariable.swift */; };
		BB69A80A1D6B442C001D2821 /* ArrayVariable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B201C8FCC810050DDA9 /* ArrayVariable.swift */; };
		BB69A80B1D6B442D001D2821 /* ArrayVariable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B201C8FCC810050DDA9 /* ArrayVariable.swift */; };
		BB69A80C1D6B472D001D2821 /* ArrayMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2D1C8FCC810050DDA9 /* ArrayMappingForValueField.swift */; };
		BB69A80E1D6B472F001D2821 /* ArrayMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2D1C8FCC810050DDA9 /* ArrayMappingForValueField.swift */; };
		BB69A80F1D6B472F001D2821 /* ArrayMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2D1C8FCC810050DDA9 /* ArrayMappingForValueField.swift */; };
		BB69A8101D6B5397001D2821 /* ValueMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2C1C8FCC810050DDA9 /* ValueMappingForValueField.swift */; };
		BB69A8131D6B539A001D2821 /* ValueMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2C1C8FCC810050DDA9 /* ValueMappingForValueField.swift */; };
		BB69A8141D6B539A001D2821 /* ValueMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2C1C8FCC810050DDA9 /* ValueMappingForValueField.swift */; };
		BB69A8191D6B6A99001D2821 /* ArrayReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D929A1D64862D003BEDBF /* ArrayReference.swift */; };
		BB69A81B1D6B6A9A001D2821 /* ArrayReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D929A1D64862D003BEDBF /* ArrayReference.swift */; };
		BB69A81C1D6B6A9B001D2821 /* ArrayReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D929A1D64862D003BEDBF /* ArrayReference.swift */; };
		BB69A81D1D6B71F9001D2821 /* SetChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990021D5DF2D20097F350 /* SetChange.swift */; };
		BB69A81F1D6B71FA001D2821 /* SetChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990021D5DF2D20097F350 /* SetChange.swift */; };
		BB69A8201D6B71FB001D2821 /* SetChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990021D5DF2D20097F350 /* SetChange.swift */; };
		BB69A8231D6B7203001D2821 /* ObservableSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990091D5DF88C0097F350 /* ObservableSet.swift */; };
		BB69A8241D6B7203001D2821 /* ObservableSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990091D5DF88C0097F350 /* ObservableSet.swift */; };
		BB69A8281D6B779A001D2821 /* UpdatableSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89901A1D5F6AAE0097F350 /* UpdatableSet.swift */; };
		BB69A8291D6B779B001D2821 /* UpdatableSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89901A1D5F6AAE0097F350 /* UpdatableSet.swift */; };
		BB69A82C1D6B7CAE001D2821 /* SetVariable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89901F1D5F6F980097F350 /* SetVariable.swift */; };
		BB69A82D1D6B7CAF001D2821 /* SetVariable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89901F1D5F6F980097F350 /* SetVariable.swift */; };
		BB69A8301D6B7E36001D2821 /* SetSortingByMappingToComparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1E4D691D61EA5200F1831F /* SetSortingByMappingToComparable.swift */; };
		BB69A8311D6B7E37001D2821 /* SetSortingByMappingToComparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1E4D691D61EA5200F1831F /* SetSortingByMappingToComparable.swift */; };
		BB69A8341D6B7F12001D2821 /* SetReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D92951D647E83003BEDBF /* SetReference.swift */; };
		BB69A8351D6B7F12001D2821 /* SetReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D92951D647E83003BEDBF /* SetReference.swift */; };
		BB69A8381D6B7F9D001D2821 /* SetFilteringOnPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B231C8FCC810050DDA9 /* SetFilteringOnPredicate.swift */; };
		BB69A8391D6B7F9E001D2821 /* SetFilteringOnPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B231C8FCC810050DDA9 /* SetFilteringOnPredicate.swift */; };
		BB69A83B1D6B90F5001D2821 /* ArrayConcatenation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A83A1D6B90F5001D2821 /* ArrayConcatenation.swift */; };
		BB69A83D1D6B90F5001D2821 /* ArrayConcatenation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A83A1D6B90F5001D2821 /* ArrayConcatenation.swift */; };
		BB69A83E1D6B90F5001D2821 /* ArrayConcatenation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A83A1D6B90F5001D2821 /* ArrayConcatenation.swift */; };
		BB69A8401D6B9A7E001D2821 /* ArrayMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A83F1D6B9A7E001D2821 /* ArrayMappingForValue.swift */; };
		BB69A8421D6B9A7E001D2821 /* ArrayMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A83F1D6B9A7E001D2821 /* ArrayMappingForValue.swift */; };
		BB69A8431D6B9A7E001D2821 /* ArrayMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB69A83F1D6B9A7E001D2821 /* ArrayMappingForValue.swift */; };
		BB6CE3B41DC4C21C00295C55 /* TransformedSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6CE3B31DC4C21C00295C55 /* TransformedSink.swift */; };
		BB6CE3B51DC4C21C00295C55 /* TransformedSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6CE3B31DC4C21C00295C55 /* TransformedSink.swift */; };
		BB6CE3B61DC4C21C00295C55 /* TransformedSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6CE3B31DC4C21C00295C55 /* TransformedSink.swift */; };
		BB6CE3B71DC4C21C00295C55 /* TransformedSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6CE3B31DC4C21C00295C55 /* TransformedSink.swift */; };
		BB6CE3B81DC4CD3900295C55 /* Change.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990041D5DF8630097F350 /* Change.swift */; };
		BB6CE3B91DC4CD3B00295C55 /* Update.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAC91DC0F0A5000B3DD0 /* Update.swift */; };
		BB6CE3BA1DC4CD3F00295C55 /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF3F1DA3A88C005EC162 /* ObservableType.swift */; };
		BB6CE3BB1DC4CD4800295C55 /* ChangesSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73E51DBB727300E20D67 /* ChangesSource.swift */; };
		BB6CE3BC1DC4CD6500295C55 /* TransactionalThing.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73DF1DBB61C100E20D67 /* TransactionalThing.swift */; };
		BB6CE3BD1DC4CD6900295C55 /* ValueChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF441DA3A908005EC162 /* ValueChange.swift */; };
		BB6CE3BE1DC4CD6B00295C55 /* ObservableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B291C8FCC810050DDA9 /* ObservableValue.swift */; };
		BB6CE3BF1DC4CD6F00295C55 /* UpdatableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B331C8FCC820050DDA9 /* UpdatableValue.swift */; };
		BB6CE3C01DC4CD7200295C55 /* TwoWayBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73EE1DBDFEE400E20D67 /* TwoWayBinding.swift */; };
		BB6CE3C11DC4CD7600295C55 /* Variable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B351C8FCC820050DDA9 /* Variable.swift */; };
		BB6CE3C21DC4CD7A00295C55 /* BufferedValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B281C8FCC810050DDA9 /* BufferedValue.swift */; };
		BB6CE3C31DC4CD7E00295C55 /* DistinctValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E271DAAD2B900E85FB9 /* DistinctValue.swift */; };
		BB6CE3C41DC4CD8300295C55 /* CompositeObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E221DAAD26200E85FB9 /* CompositeObservable.swift */; };
		BB6CE3C51DC4CD8700295C55 /* CompositeUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E2C1DAAD4BC00E85FB9 /* CompositeUpdatable.swift */; };
		BB6CE3C61DC4CD8D00295C55 /* ValueMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E0E1DAAC33700E85FB9 /* ValueMappingForValue.swift */; };
		BB6CE3C71DC4D09500295C55 /* ValueMappingForSourceField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E181DAAC50900E85FB9 /* ValueMappingForSourceField.swift */; };
		BB6CE3C81DC4D2D400295C55 /* ValueMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2C1C8FCC810050DDA9 /* ValueMappingForValueField.swift */; };
		BB6CE3CA1DC4DF4400295C55 /* CombinedObservableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E311DAAD66500E85FB9 /* CombinedObservableTests.swift */; };
		BB6CE3CB1DC4DF4800295C55 /* CombinedUpdatableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E351DAAD74600E85FB9 /* CombinedUpdatableTests.swift */; };
		BB6CE3CC1DC4E48200295C55 /* TypeHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E391DABC45000E85FB9 /* TypeHelperTests.swift */; };
		BB6CE3CE1DC4E4B100295C55 /* Type Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBAA827C1C91D43700586903 /* Type Helpers.swift */; };
		BB6CE3D01DC4E67700295C55 /* TimerSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA51C8FCE2C0050DDA9 /* TimerSourceTests.swift */; };
		BB6CE3D11DC4E72100295C55 /* KVOSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9A1C8FCE2C0050DDA9 /* KVOSupportTests.swift */; };
		BB6CE3D21DC4E73600295C55 /* NotificationCenterSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9C1C8FCE2C0050DDA9 /* NotificationCenterSupportTests.swift */; };
		BB6CE3D31DC4E79400295C55 /* ValueMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA01C8FCE2C0050DDA9 /* ValueMappingTests.swift */; };
		BB6CE3D41DC4F17700295C55 /* ArrayChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B1F1C8FCC810050DDA9 /* ArrayChange.swift */; };
		BB6CE3D51DC4F17A00295C55 /* ArrayChangeSeparation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1657E61D71D65900094BAC /* ArrayChangeSeparation.swift */; };
		BB6CE3D61DC4F18B00295C55 /* ArrayModificationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033651DA7CFFE00E83AC1 /* ArrayModificationTests.swift */; };
		BB6CE3D71DC4F18B00295C55 /* ArrayChangeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033691DA7D03300E83AC1 /* ArrayChangeTests.swift */; };
		BB6CE3D81DC4F18B00295C55 /* ArrayChangeSeparationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC36AE61DA83E0E00AB3E9D /* ArrayChangeSeparationTests.swift */; };
		BB6CE3D91DC4F19D00295C55 /* ObservableArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2A1C8FCC810050DDA9 /* ObservableArray.swift */; };
		BB6CE3DA1DC4F2FB00295C55 /* SetChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990021D5DF2D20097F350 /* SetChange.swift */; };
		BB6CE3DB1DC4F2FB00295C55 /* ObservableSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990091D5DF88C0097F350 /* ObservableSet.swift */; };
		BB7E04C81DA7233B00BE3051 /* ArrayMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04C71DA7233B00BE3051 /* ArrayMappingForArrayField.swift */; };
		BB7E04CA1DA7233B00BE3051 /* ArrayMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04C71DA7233B00BE3051 /* ArrayMappingForArrayField.swift */; };
		BB7E04CB1DA7233B00BE3051 /* ArrayMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04C71DA7233B00BE3051 /* ArrayMappingForArrayField.swift */; };
		BB7E04CF1DA723F300BE3051 /* SetMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04CC1DA723F300BE3051 /* SetMappingForValueField.swift */; };
		BB7E04D01DA723F300BE3051 /* SetMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04CC1DA723F300BE3051 /* SetMappingForValueField.swift */; };
		BB7E04D41DA7240C00BE3051 /* SetMappingForSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04D11DA7240C00BE3051 /* SetMappingForSequence.swift */; };
		BB7E04D51DA7240C00BE3051 /* SetMappingForSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04D11DA7240C00BE3051 /* SetMappingForSequence.swift */; };
		BB7E04D91DA7242F00BE3051 /* SetMappingForSetField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04D61DA7242F00BE3051 /* SetMappingForSetField.swift */; };
		BB7E04DA1DA7242F00BE3051 /* SetMappingForSetField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04D61DA7242F00BE3051 /* SetMappingForSetField.swift */; };
		BB7E04DE1DA7244A00BE3051 /* SetMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04DB1DA7244A00BE3051 /* SetMappingForArrayField.swift */; };
		BB7E04DF1DA7244A00BE3051 /* SetMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04DB1DA7244A00BE3051 /* SetMappingForArrayField.swift */; };
		BB7E04E11DA7255D00BE3051 /* ArrayFilteringIndexmap.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04E01DA7255D00BE3051 /* ArrayFilteringIndexmap.swift */; };
		BB7E04E31DA7255D00BE3051 /* ArrayFilteringIndexmap.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04E01DA7255D00BE3051 /* ArrayFilteringIndexmap.swift */; };
		BB7E04E41DA7255D00BE3051 /* ArrayFilteringIndexmap.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04E01DA7255D00BE3051 /* ArrayFilteringIndexmap.swift */; };
		BB7E04E61DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04E51DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift */; };
		BB7E04E81DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04E51DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift */; };
		BB7E04E91DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04E51DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift */; };
		BB8195B21DD256B700644668 /* UIControl Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC3C84D1C93164200E10D59 /* UIControl Glue.swift */; };
		BB8195B31DD256B700644668 /* UIBarButtonItem Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB318F6A1CB9922F0086EE83 /* UIBarButtonItem Extensions.swift */; };
		BB8195B41DD256B700644668 /* UIDevice Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB4F2511C9594A9002532CC /* UIDevice Glue.swift */; };
		BB8195B51DD256B700644668 /* UIGestureRecognizer Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB4F26E1C99E6CB002532CC /* UIGestureRecognizer Glue.swift */; };
		BB8195B61DD256B700644668 /* CADisplayLink Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB67E5511C9B6A63002B0AB5 /* CADisplayLink Extensions.swift */; };
		BB8195B71DD256B800644668 /* UIControl Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC3C84D1C93164200E10D59 /* UIControl Glue.swift */; };
		BB8195B81DD256B800644668 /* UIBarButtonItem Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB318F6A1CB9922F0086EE83 /* UIBarButtonItem Extensions.swift */; };
		BB8195B91DD256B800644668 /* UIDevice Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB4F2511C9594A9002532CC /* UIDevice Glue.swift */; };
		BB8195BA1DD256B800644668 /* UIGestureRecognizer Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB4F26E1C99E6CB002532CC /* UIGestureRecognizer Glue.swift */; };
		BB8195BB1DD256B800644668 /* CADisplayLink Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB67E5511C9B6A63002B0AB5 /* CADisplayLink Extensions.swift */; };
		BB8195BC1DD256B900644668 /* UIControl Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC3C84D1C93164200E10D59 /* UIControl Glue.swift */; };
		BB8195BD1DD256B900644668 /* UIBarButtonItem Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB318F6A1CB9922F0086EE83 /* UIBarButtonItem Extensions.swift */; };
		BB8195BE1DD256B900644668 /* UIDevice Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB4F2511C9594A9002532CC /* UIDevice Glue.swift */; };
		BB8195BF1DD256B900644668 /* UIGestureRecognizer Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB4F26E1C99E6CB002532CC /* UIGestureRecognizer Glue.swift */; };
		BB8195C01DD257A300644668 /* ConnectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E511DAC1B1300E85FB9 /* ConnectorTests.swift */; };
		BB82E3E11D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB82E3E01D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift */; };
		BB82E3E31D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB82E3E01D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift */; };
		BB82E3E41D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB82E3E01D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift */; };
		BB88C40E1DC3A08B00C7EC3C /* ObservableTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB88C40D1DC3A08B00C7EC3C /* ObservableTypeTests.swift */; };
		BB88C40F1DC3A08B00C7EC3C /* ObservableTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB88C40D1DC3A08B00C7EC3C /* ObservableTypeTests.swift */; };
		BB88C4101DC3A08B00C7EC3C /* ObservableTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB88C40D1DC3A08B00C7EC3C /* ObservableTypeTests.swift */; };
		BB88C4111DC3A84C00C7EC3C /* VariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA71C8FCE2C0050DDA9 /* VariableTests.swift */; };
		BB88C4131DC3B65F00C7EC3C /* ValueBufferingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB88C4121DC3B65F00C7EC3C /* ValueBufferingTests.swift */; };
		BB88C4141DC3B65F00C7EC3C /* ValueBufferingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB88C4121DC3B65F00C7EC3C /* ValueBufferingTests.swift */; };
		BB88C4151DC3B65F00C7EC3C /* ValueBufferingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB88C4121DC3B65F00C7EC3C /* ValueBufferingTests.swift */; };
		BB8990271D5F84150097F350 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB8990251D5F84050097F350 /* Foundation.framework */; };
		BB8990291D5F84210097F350 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB8990281D5F84210097F350 /* Foundation.framework */; };
		BB89902B1D5F842C0097F350 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB89902A1D5F842C0097F350 /* Foundation.framework */; };
		BB89902D1D5F84340097F350 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB89902C1D5F84340097F350 /* Foundation.framework */; };
		BB8D366E1DA116CB000D44C5 /* Bookshelf.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8D366D1DA116CB000D44C5 /* Bookshelf.swift */; };
		BB8D36701DA116CB000D44C5 /* Bookshelf.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8D366D1DA116CB000D44C5 /* Bookshelf.swift */; };
		BB948BBC1DD5EFC900B0734C /* ComputedUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB948BBB1DD5EFC900B0734C /* ComputedUpdatable.swift */; };
		BB948BBD1DD5EFC900B0734C /* ComputedUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB948BBB1DD5EFC900B0734C /* ComputedUpdatable.swift */; };
		BB948BBE1DD5EFC900B0734C /* ComputedUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB948BBB1DD5EFC900B0734C /* ComputedUpdatable.swift */; };
		BB948BBF1DD5EFC900B0734C /* ComputedUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB948BBB1DD5EFC900B0734C /* ComputedUpdatable.swift */; };
		BB948BC11DD720FE00B0734C /* UISwitch Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB948BC01DD720FE00B0734C /* UISwitch Glue.swift */; };
		BB948BC21DD7213200B0734C /* UISwitch Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB948BC01DD720FE00B0734C /* UISwitch Glue.swift */; };
		BB948BC31DD7213200B0734C /* UISwitch Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB948BC01DD720FE00B0734C /* UISwitch Glue.swift */; };
		BB948BC41DD7213300B0734C /* UISwitch Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB948BC01DD720FE00B0734C /* UISwitch Glue.swift */; };
		BB9D73C91DBB2EB400E20D67 /* Connect.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73C81DBB2EB400E20D67 /* Connect.swift */; };
		BB9D73CA1DBB2EB400E20D67 /* Connect.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73C81DBB2EB400E20D67 /* Connect.swift */; };
		BB9D73CB1DBB2EB400E20D67 /* Connect.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73C81DBB2EB400E20D67 /* Connect.swift */; };
		BB9D73CC1DBB2EB400E20D67 /* Connect.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73C81DBB2EB400E20D67 /* Connect.swift */; };
		BB9D73CF1DBB38F900E20D67 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73CE1DBB38F900E20D67 /* Sink.swift */; };
		BB9D73D01DBB38F900E20D67 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73CE1DBB38F900E20D67 /* Sink.swift */; };
		BB9D73D11DBB38F900E20D67 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73CE1DBB38F900E20D67 /* Sink.swift */; };
		BB9D73D21DBB38F900E20D67 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73CE1DBB38F900E20D67 /* Sink.swift */; };
		BB9D73D31DBB3DEA00E20D67 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2E1C8FCC810050DDA9 /* Signal.swift */; };
		BB9D73D41DBB4A3700E20D67 /* SimpleSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2F1C8FCC810050DDA9 /* SimpleSources.swift */; };
		BB9D73D51DBB4BB300E20D67 /* MergedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B261C8FCC810050DDA9 /* MergedSource.swift */; };
		BB9D73D61DBB519500E20D67 /* TransformedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B311C8FCC810050DDA9 /* TransformedSource.swift */; };
		BB9D73DC1DBB612600E20D67 /* Connector.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B221C8FCC810050DDA9 /* Connector.swift */; };
		BB9D73E01DBB61C100E20D67 /* TransactionalThing.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73DF1DBB61C100E20D67 /* TransactionalThing.swift */; };
		BB9D73E21DBB61C100E20D67 /* TransactionalThing.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73DF1DBB61C100E20D67 /* TransactionalThing.swift */; };
		BB9D73E31DBB61C100E20D67 /* TransactionalThing.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73DF1DBB61C100E20D67 /* TransactionalThing.swift */; };
		BB9D73E61DBB727300E20D67 /* ChangesSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73E51DBB727300E20D67 /* ChangesSource.swift */; };
		BB9D73E81DBB727300E20D67 /* ChangesSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73E51DBB727300E20D67 /* ChangesSource.swift */; };
		BB9D73E91DBB727300E20D67 /* ChangesSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73E51DBB727300E20D67 /* ChangesSource.swift */; };
		BB9D73EF1DBDFEE400E20D67 /* TwoWayBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73EE1DBDFEE400E20D67 /* TwoWayBinding.swift */; };
		BB9D73F11DBDFEE400E20D67 /* TwoWayBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73EE1DBDFEE400E20D67 /* TwoWayBinding.swift */; };
		BB9D73F21DBDFEE400E20D67 /* TwoWayBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73EE1DBDFEE400E20D67 /* TwoWayBinding.swift */; };
		BB9D73F41DBE03EB00E20D67 /* DispatchSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73F31DBE03EB00E20D67 /* DispatchSource.swift */; };
		BB9D73F51DBE03EB00E20D67 /* DispatchSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73F31DBE03EB00E20D67 /* DispatchSource.swift */; };
		BB9D73F61DBE03EB00E20D67 /* DispatchSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73F31DBE03EB00E20D67 /* DispatchSource.swift */; };
		BB9D73F71DBE03EB00E20D67 /* DispatchSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73F31DBE03EB00E20D67 /* DispatchSource.swift */; };
		BB9D73F81DBE041A00E20D67 /* TimerSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B321C8FCC820050DDA9 /* TimerSource.swift */; };
		BB9D73FE1DBE061D00E20D67 /* OwnedSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73FD1DBE061D00E20D67 /* OwnedSink.swift */; };
		BB9D73FF1DBE061D00E20D67 /* OwnedSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73FD1DBE061D00E20D67 /* OwnedSink.swift */; };
		BB9D74001DBE061D00E20D67 /* OwnedSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73FD1DBE061D00E20D67 /* OwnedSink.swift */; };
		BB9D74011DBE061D00E20D67 /* OwnedSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9D73FD1DBE061D00E20D67 /* OwnedSink.swift */; };
		BB9D741E1DBE644200E20D67 /* NSNotificationCenter Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B271C8FCC810050DDA9 /* NSNotificationCenter Support.swift */; };
		BB9D74201DBE654600E20D67 /* NSObject Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC2A8281CBC14C600394D24 /* NSObject Glue.swift */; };
		BB9D74241DBE7B3700E20D67 /* ObservableSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8990091D5DF88C0097F350 /* ObservableSet.swift */; };
		BB9D74261DBE7B3B00E20D67 /* UpdatableSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89901A1D5F6AAE0097F350 /* UpdatableSet.swift */; };
		BB9D74271DBE7B3B00E20D67 /* SetVariable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB89901F1D5F6F980097F350 /* SetVariable.swift */; };
		BB9D74281DBE7B3B00E20D67 /* ObservableContains.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF400631DA108E900DA0B2C /* ObservableContains.swift */; };
		BB9D74291DBE7B3B00E20D67 /* SetMappingBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF5B1DA55DA3005EC162 /* SetMappingBase.swift */; };
		BB9D742A1DBE7B3B00E20D67 /* SetMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF561DA55384005EC162 /* SetMappingForValue.swift */; };
		BB9D742B1DBE7B3B00E20D67 /* SetMappingForSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04D11DA7240C00BE3051 /* SetMappingForSequence.swift */; };
		BB9D742C1DBE7B3B00E20D67 /* SetMappingForValueField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04CC1DA723F300BE3051 /* SetMappingForValueField.swift */; };
		BB9D742D1DBE7B3B00E20D67 /* SetMappingForSetField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04D61DA7242F00BE3051 /* SetMappingForSetField.swift */; };
		BB9D742E1DBE7B3B00E20D67 /* SetMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7E04DB1DA7244A00BE3051 /* SetMappingForArrayField.swift */; };
		BB9D742F1DBE7B3B00E20D67 /* SetFilteringOnPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B231C8FCC810050DDA9 /* SetFilteringOnPredicate.swift */; };
		BB9D74301DBE7B3B00E20D67 /* SetFilteringOnObservableBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033561DA726AA00E83AC1 /* SetFilteringOnObservableBool.swift */; };
		BB9D74311DBE7B3B00E20D67 /* SetSortingByComparator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA0335B1DA7276200E83AC1 /* SetSortingByComparator.swift */; };
		BB9D74321DBE7B3B00E20D67 /* SetSortingByMappingToComparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1E4D691D61EA5200F1831F /* SetSortingByMappingToComparable.swift */; };
		BB9D74331DBE7B3B00E20D67 /* SetSortingByMappingToObservableComparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033601DA7278C00E83AC1 /* SetSortingByMappingToObservableComparable.swift */; };
		BB9D74341DBE7B3B00E20D67 /* SetFolding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E011DAA910500E85FB9 /* SetFolding.swift */; };
		BB9D74351DBE7B3B00E20D67 /* SetReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D92951D647E83003BEDBF /* SetReference.swift */; };
		BB9D74451DBEB5F300E20D67 /* DistinctUnion.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF491DA409EE005EC162 /* DistinctUnion.swift */; };
		BB9D744A1DBEC82C00E20D67 /* ValueMappingForSetField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E1D1DAAC7E600E85FB9 /* ValueMappingForSetField.swift */; };
		BB9FCDCC1F5E54BF001B8781 /* NSButton Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9FCDCB1F5E54BF001B8781 /* NSButton Glue.swift */; };
		BB9FCDCE1F5EB646001B8781 /* NSControl Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9FCDCD1F5EB646001B8781 /* NSControl Glue.swift */; };
		BB9FCDD01F5ECFF3001B8781 /* NSPopUpButton Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9FCDCF1F5ECFF3001B8781 /* NSPopUpButton Glue.swift */; };
		BBA033591DA726AA00E83AC1 /* SetFilteringOnObservableBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033561DA726AA00E83AC1 /* SetFilteringOnObservableBool.swift */; };
		BBA0335A1DA726AA00E83AC1 /* SetFilteringOnObservableBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033561DA726AA00E83AC1 /* SetFilteringOnObservableBool.swift */; };
		BBA0335E1DA7276200E83AC1 /* SetSortingByComparator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA0335B1DA7276200E83AC1 /* SetSortingByComparator.swift */; };
		BBA0335F1DA7276200E83AC1 /* SetSortingByComparator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA0335B1DA7276200E83AC1 /* SetSortingByComparator.swift */; };
		BBA033631DA7278C00E83AC1 /* SetSortingByMappingToObservableComparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033601DA7278C00E83AC1 /* SetSortingByMappingToObservableComparable.swift */; };
		BBA033641DA7278C00E83AC1 /* SetSortingByMappingToObservableComparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033601DA7278C00E83AC1 /* SetSortingByMappingToObservableComparable.swift */; };
		BBA033681DA7CFFE00E83AC1 /* ArrayModificationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033651DA7CFFE00E83AC1 /* ArrayModificationTests.swift */; };
		BBA0336C1DA7D03300E83AC1 /* ArrayChangeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033691DA7D03300E83AC1 /* ArrayChangeTests.swift */; };
		BBAA827D1C91D43700586903 /* Type Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBAA827C1C91D43700586903 /* Type Helpers.swift */; };
		BBAA827F1C91D43700586903 /* Type Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBAA827C1C91D43700586903 /* Type Helpers.swift */; };
		BBAA82801C91D43700586903 /* Type Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBAA827C1C91D43700586903 /* Type Helpers.swift */; };
		BBB4F2521C9594A9002532CC /* UIDevice Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB4F2511C9594A9002532CC /* UIDevice Glue.swift */; };
		BBB4F26F1C99E6CC002532CC /* UIGestureRecognizer Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB4F26E1C99E6CB002532CC /* UIGestureRecognizer Glue.swift */; };
		BBB55B081C8F8CBC0050DDA9 /* GlueKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBB55AFE1C8F8CBB0050DDA9 /* GlueKit.framework */; };
		BBB55B421C8FCC820050DDA9 /* Connector.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B221C8FCC810050DDA9 /* Connector.swift */; };
		BBB55B441C8FCC820050DDA9 /* Connector.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B221C8FCC810050DDA9 /* Connector.swift */; };
		BBB55B451C8FCC820050DDA9 /* Connector.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B221C8FCC810050DDA9 /* Connector.swift */; };
		BBB55B4E1C8FCC820050DDA9 /* Locks.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B251C8FCC810050DDA9 /* Locks.swift */; };
		BBB55B4F1C8FCC820050DDA9 /* Locks.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B251C8FCC810050DDA9 /* Locks.swift */; };
		BBB55B501C8FCC820050DDA9 /* Locks.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B251C8FCC810050DDA9 /* Locks.swift */; };
		BBB55B511C8FCC820050DDA9 /* Locks.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B251C8FCC810050DDA9 /* Locks.swift */; };
		BBB55B521C8FCC820050DDA9 /* MergedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B261C8FCC810050DDA9 /* MergedSource.swift */; };
		BBB55B541C8FCC820050DDA9 /* MergedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B261C8FCC810050DDA9 /* MergedSource.swift */; };
		BBB55B551C8FCC820050DDA9 /* MergedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B261C8FCC810050DDA9 /* MergedSource.swift */; };
		BBB55B561C8FCC820050DDA9 /* NSNotificationCenter Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B271C8FCC810050DDA9 /* NSNotificationCenter Support.swift */; };
		BBB55B581C8FCC820050DDA9 /* NSNotificationCenter Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B271C8FCC810050DDA9 /* NSNotificationCenter Support.swift */; };
		BBB55B591C8FCC820050DDA9 /* NSNotificationCenter Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B271C8FCC810050DDA9 /* NSNotificationCenter Support.swift */; };
		BBB55B5A1C8FCC820050DDA9 /* BufferedValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B281C8FCC810050DDA9 /* BufferedValue.swift */; };
		BBB55B5C1C8FCC820050DDA9 /* BufferedValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B281C8FCC810050DDA9 /* BufferedValue.swift */; };
		BBB55B5D1C8FCC820050DDA9 /* BufferedValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B281C8FCC810050DDA9 /* BufferedValue.swift */; };
		BBB55B5E1C8FCC820050DDA9 /* ObservableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B291C8FCC810050DDA9 /* ObservableValue.swift */; };
		BBB55B601C8FCC820050DDA9 /* ObservableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B291C8FCC810050DDA9 /* ObservableValue.swift */; };
		BBB55B611C8FCC820050DDA9 /* ObservableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B291C8FCC810050DDA9 /* ObservableValue.swift */; };
		BBB55B661C8FCC820050DDA9 /* Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2B1C8FCC810050DDA9 /* Reference.swift */; };
		BBB55B671C8FCC820050DDA9 /* Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2B1C8FCC810050DDA9 /* Reference.swift */; };
		BBB55B681C8FCC820050DDA9 /* Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2B1C8FCC810050DDA9 /* Reference.swift */; };
		BBB55B691C8FCC820050DDA9 /* Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2B1C8FCC810050DDA9 /* Reference.swift */; };
		BBB55B721C8FCC820050DDA9 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2E1C8FCC810050DDA9 /* Signal.swift */; };
		BBB55B741C8FCC820050DDA9 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2E1C8FCC810050DDA9 /* Signal.swift */; };
		BBB55B751C8FCC820050DDA9 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2E1C8FCC810050DDA9 /* Signal.swift */; };
		BBB55B761C8FCC820050DDA9 /* SimpleSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2F1C8FCC810050DDA9 /* SimpleSources.swift */; };
		BBB55B781C8FCC820050DDA9 /* SimpleSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2F1C8FCC810050DDA9 /* SimpleSources.swift */; };
		BBB55B791C8FCC820050DDA9 /* SimpleSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B2F1C8FCC810050DDA9 /* SimpleSources.swift */; };
		BBB55B7A1C8FCC820050DDA9 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B301C8FCC810050DDA9 /* Source.swift */; };
		BBB55B7B1C8FCC820050DDA9 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B301C8FCC810050DDA9 /* Source.swift */; };
		BBB55B7C1C8FCC820050DDA9 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B301C8FCC810050DDA9 /* Source.swift */; };
		BBB55B7D1C8FCC820050DDA9 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B301C8FCC810050DDA9 /* Source.swift */; };
		BBB55B7E1C8FCC820050DDA9 /* TransformedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B311C8FCC810050DDA9 /* TransformedSource.swift */; };
		BBB55B801C8FCC820050DDA9 /* TransformedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B311C8FCC810050DDA9 /* TransformedSource.swift */; };
		BBB55B811C8FCC820050DDA9 /* TransformedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B311C8FCC810050DDA9 /* TransformedSource.swift */; };
		BBB55B821C8FCC820050DDA9 /* TimerSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B321C8FCC820050DDA9 /* TimerSource.swift */; };
		BBB55B841C8FCC820050DDA9 /* TimerSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B321C8FCC820050DDA9 /* TimerSource.swift */; };
		BBB55B851C8FCC820050DDA9 /* TimerSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B321C8FCC820050DDA9 /* TimerSource.swift */; };
		BBB55B861C8FCC820050DDA9 /* UpdatableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B331C8FCC820050DDA9 /* UpdatableValue.swift */; };
		BBB55B881C8FCC820050DDA9 /* UpdatableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B331C8FCC820050DDA9 /* UpdatableValue.swift */; };
		BBB55B891C8FCC820050DDA9 /* UpdatableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B331C8FCC820050DDA9 /* UpdatableValue.swift */; };
		BBB55B8E1C8FCC820050DDA9 /* Variable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B351C8FCC820050DDA9 /* Variable.swift */; };
		BBB55B901C8FCC820050DDA9 /* Variable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B351C8FCC820050DDA9 /* Variable.swift */; };
		BBB55B911C8FCC820050DDA9 /* Variable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B351C8FCC820050DDA9 /* Variable.swift */; };
		BBB55BAA1C8FCE2C0050DDA9 /* ArrayVariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B981C8FCE2C0050DDA9 /* ArrayVariableTests.swift */; };
		BBB55BAE1C8FCE2C0050DDA9 /* KVOSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9A1C8FCE2C0050DDA9 /* KVOSupportTests.swift */; };
		BBB55BB01C8FCE2C0050DDA9 /* KVOSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9A1C8FCE2C0050DDA9 /* KVOSupportTests.swift */; };
		BBB55BB11C8FCE2C0050DDA9 /* MergedSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9B1C8FCE2C0050DDA9 /* MergedSourceTests.swift */; };
		BBB55BB31C8FCE2C0050DDA9 /* MergedSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9B1C8FCE2C0050DDA9 /* MergedSourceTests.swift */; };
		BBB55BB41C8FCE2C0050DDA9 /* NotificationCenterSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9C1C8FCE2C0050DDA9 /* NotificationCenterSupportTests.swift */; };
		BBB55BB61C8FCE2C0050DDA9 /* NotificationCenterSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9C1C8FCE2C0050DDA9 /* NotificationCenterSupportTests.swift */; };
		BBB55BB71C8FCE2C0050DDA9 /* ObservableValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9D1C8FCE2C0050DDA9 /* ObservableValueTests.swift */; };
		BBB55BB91C8FCE2C0050DDA9 /* ObservableValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9D1C8FCE2C0050DDA9 /* ObservableValueTests.swift */; };
		BBB55BBA1C8FCE2C0050DDA9 /* DistinctTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9E1C8FCE2C0050DDA9 /* DistinctTests.swift */; };
		BBB55BBC1C8FCE2C0050DDA9 /* DistinctTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9E1C8FCE2C0050DDA9 /* DistinctTests.swift */; };
		BBB55BBF1C8FCE2C0050DDA9 /* ArrayMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9F1C8FCE2C0050DDA9 /* ArrayMappingTests.swift */; };
		BBB55BC01C8FCE2C0050DDA9 /* ValueMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA01C8FCE2C0050DDA9 /* ValueMappingTests.swift */; };
		BBB55BC21C8FCE2C0050DDA9 /* ValueMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA01C8FCE2C0050DDA9 /* ValueMappingTests.swift */; };
		BBB55BC31C8FCE2C0050DDA9 /* SignalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA11C8FCE2C0050DDA9 /* SignalTests.swift */; };
		BBB55BC51C8FCE2C0050DDA9 /* SignalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA11C8FCE2C0050DDA9 /* SignalTests.swift */; };
		BBB55BC61C8FCE2C0050DDA9 /* SimpleSourcesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA21C8FCE2C0050DDA9 /* SimpleSourcesTests.swift */; };
		BBB55BC81C8FCE2C0050DDA9 /* SimpleSourcesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA21C8FCE2C0050DDA9 /* SimpleSourcesTests.swift */; };
		BBB55BC91C8FCE2C0050DDA9 /* SourceOperatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA31C8FCE2C0050DDA9 /* SourceOperatorTests.swift */; };
		BBB55BCB1C8FCE2C0050DDA9 /* SourceOperatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA31C8FCE2C0050DDA9 /* SourceOperatorTests.swift */; };
		BBB55BCC1C8FCE2C0050DDA9 /* TestUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA41C8FCE2C0050DDA9 /* TestUtilities.swift */; };
		BBB55BCD1C8FCE2C0050DDA9 /* TestUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA41C8FCE2C0050DDA9 /* TestUtilities.swift */; };
		BBB55BCE1C8FCE2C0050DDA9 /* TestUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA41C8FCE2C0050DDA9 /* TestUtilities.swift */; };
		BBB55BCF1C8FCE2C0050DDA9 /* TimerSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA51C8FCE2C0050DDA9 /* TimerSourceTests.swift */; };
		BBB55BD11C8FCE2C0050DDA9 /* TimerSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA51C8FCE2C0050DDA9 /* TimerSourceTests.swift */; };
		BBB55BD21C8FCE2C0050DDA9 /* TwoWayBindingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA61C8FCE2C0050DDA9 /* TwoWayBindingTests.swift */; };
		BBB55BD41C8FCE2C0050DDA9 /* TwoWayBindingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA61C8FCE2C0050DDA9 /* TwoWayBindingTests.swift */; };
		BBB55BD51C8FCE2C0050DDA9 /* VariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA71C8FCE2C0050DDA9 /* VariableTests.swift */; };
		BBB55BD71C8FCE2C0050DDA9 /* VariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA71C8FCE2C0050DDA9 /* VariableTests.swift */; };
		BBBBEC8D1DCA1AEB000B646D /* ValueReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC8C1DCA1AEB000B646D /* ValueReference.swift */; };
		BBBBEC8E1DCA1AEB000B646D /* ValueReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC8C1DCA1AEB000B646D /* ValueReference.swift */; };
		BBBBEC8F1DCA1AEB000B646D /* ValueReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC8C1DCA1AEB000B646D /* ValueReference.swift */; };
		BBBBEC901DCA1AEB000B646D /* ValueReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC8C1DCA1AEB000B646D /* ValueReference.swift */; };
		BBBBEC921DCA1D43000B646D /* ValueReferenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC911DCA1D43000B646D /* ValueReferenceTests.swift */; };
		BBBBEC931DCA1D43000B646D /* ValueReferenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC911DCA1D43000B646D /* ValueReferenceTests.swift */; };
		BBBBEC941DCA1D43000B646D /* ValueReferenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC911DCA1D43000B646D /* ValueReferenceTests.swift */; };
		BBBBEC961DCA1FEB000B646D /* ArrayReferenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC951DCA1FEB000B646D /* ArrayReferenceTests.swift */; };
		BBBBEC971DCA1FEB000B646D /* ArrayReferenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC951DCA1FEB000B646D /* ArrayReferenceTests.swift */; };
		BBBBEC981DCA1FEB000B646D /* ArrayReferenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC951DCA1FEB000B646D /* ArrayReferenceTests.swift */; };
		BBBBEC9A1DCA223A000B646D /* SetReferenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC991DCA223A000B646D /* SetReferenceTests.swift */; };
		BBBBEC9B1DCA223A000B646D /* SetReferenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC991DCA223A000B646D /* SetReferenceTests.swift */; };
		BBBBEC9C1DCA223A000B646D /* SetReferenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC991DCA223A000B646D /* SetReferenceTests.swift */; };
		BBBBEC9E1DCA2FAB000B646D /* NSUserDefaultsSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC9D1DCA2FAB000B646D /* NSUserDefaultsSupportTests.swift */; };
		BBBBEC9F1DCA2FAB000B646D /* NSUserDefaultsSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC9D1DCA2FAB000B646D /* NSUserDefaultsSupportTests.swift */; };
		BBBBECA01DCA2FAB000B646D /* NSUserDefaultsSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBEC9D1DCA2FAB000B646D /* NSUserDefaultsSupportTests.swift */; };
		BBBBECA21DCA3AA8000B646D /* DispatchSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECA11DCA3AA8000B646D /* DispatchSourceTests.swift */; };
		BBBBECA31DCA3AA8000B646D /* DispatchSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECA11DCA3AA8000B646D /* DispatchSourceTests.swift */; };
		BBBBECA41DCA3AA8000B646D /* DispatchSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECA11DCA3AA8000B646D /* DispatchSourceTests.swift */; };
		BBBBECA61DCA3FF0000B646D /* BufferedSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECA51DCA3FF0000B646D /* BufferedSet.swift */; };
		BBBBECA71DCA3FF0000B646D /* BufferedSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECA51DCA3FF0000B646D /* BufferedSet.swift */; };
		BBBBECA81DCA3FF0000B646D /* BufferedSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECA51DCA3FF0000B646D /* BufferedSet.swift */; };
		BBBBECA91DCA3FF0000B646D /* BufferedSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECA51DCA3FF0000B646D /* BufferedSet.swift */; };
		BBBBECAB1DCA4168000B646D /* ArrayBufferingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECAA1DCA4168000B646D /* ArrayBufferingTests.swift */; };
		BBBBECAC1DCA4168000B646D /* ArrayBufferingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECAA1DCA4168000B646D /* ArrayBufferingTests.swift */; };
		BBBBECAD1DCA4168000B646D /* ArrayBufferingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECAA1DCA4168000B646D /* ArrayBufferingTests.swift */; };
		BBBBECAF1DCA446A000B646D /* SetBufferingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECAE1DCA446A000B646D /* SetBufferingTests.swift */; };
		BBBBECB01DCA446A000B646D /* SetBufferingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECAE1DCA446A000B646D /* SetBufferingTests.swift */; };
		BBBBECB11DCA446A000B646D /* SetBufferingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBBECAE1DCA446A000B646D /* SetBufferingTests.swift */; };
		BBBFD14B1EBE673200EC9814 /* SetSortingByComparableField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBFD14A1EBE673200EC9814 /* SetSortingByComparableField.swift */; };
		BBBFD14C1EBE673200EC9814 /* SetSortingByComparableField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBFD14A1EBE673200EC9814 /* SetSortingByComparableField.swift */; };
		BBBFD14D1EBE673200EC9814 /* SetSortingByComparableField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBFD14A1EBE673200EC9814 /* SetSortingByComparableField.swift */; };
		BBBFD14E1EBE673200EC9814 /* SetSortingByComparableField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBFD14A1EBE673200EC9814 /* SetSortingByComparableField.swift */; };
		BBC2A8291CBC14C600394D24 /* NSObject Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC2A8281CBC14C600394D24 /* NSObject Glue.swift */; };
		BBC2A82B1CBC14C600394D24 /* NSObject Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC2A8281CBC14C600394D24 /* NSObject Glue.swift */; };
		BBC2A82C1CBC14C600394D24 /* NSObject Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC2A8281CBC14C600394D24 /* NSObject Glue.swift */; };
		BBC36AED1DA8453000AB3E9D /* ArrayChangeSeparationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC36AE61DA83E0E00AB3E9D /* ArrayChangeSeparationTests.swift */; };
		BBC3C84E1C93164200E10D59 /* UIControl Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC3C84D1C93164200E10D59 /* UIControl Glue.swift */; };
		BBC4AE501D9A829500FF7DE0 /* ArrayFilteringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC4AE4D1D9A829500FF7DE0 /* ArrayFilteringTests.swift */; };
		BBCD9DF51DA9104A00E85FB9 /* RefListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DF41DA9104A00E85FB9 /* RefListTests.swift */; };
		BBCD9DF61DA9104A00E85FB9 /* RefListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DF41DA9104A00E85FB9 /* RefListTests.swift */; };
		BBCD9DF71DA9104A00E85FB9 /* RefListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DF41DA9104A00E85FB9 /* RefListTests.swift */; };
		BBCD9DF91DAA885E00E85FB9 /* ArrayFolding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DF81DAA885E00E85FB9 /* ArrayFolding.swift */; };
		BBCD9DFB1DAA885E00E85FB9 /* ArrayFolding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DF81DAA885E00E85FB9 /* ArrayFolding.swift */; };
		BBCD9DFC1DAA885E00E85FB9 /* ArrayFolding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DF81DAA885E00E85FB9 /* ArrayFolding.swift */; };
		BBCD9E001DAA8F7800E85FB9 /* ArrayFoldingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DFD1DAA8F7800E85FB9 /* ArrayFoldingTests.swift */; };
		BBCD9E041DAA910500E85FB9 /* SetFolding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E011DAA910500E85FB9 /* SetFolding.swift */; };
		BBCD9E051DAA910500E85FB9 /* SetFolding.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E011DAA910500E85FB9 /* SetFolding.swift */; };
		BBCD9E071DAA918400E85FB9 /* SetFoldingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E061DAA918400E85FB9 /* SetFoldingTests.swift */; };
		BBCD9E091DAA918400E85FB9 /* SetFoldingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E061DAA918400E85FB9 /* SetFoldingTests.swift */; };
		BBCD9E0B1DAAB6E700E85FB9 /* MockUpdateSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E0A1DAAB6E700E85FB9 /* MockUpdateSink.swift */; };
		BBCD9E0D1DAAB6E700E85FB9 /* MockUpdateSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E0A1DAAB6E700E85FB9 /* MockUpdateSink.swift */; };
		BBCD9E0F1DAAC33700E85FB9 /* ValueMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E0E1DAAC33700E85FB9 /* ValueMappingForValue.swift */; };
		BBCD9E111DAAC33700E85FB9 /* ValueMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E0E1DAAC33700E85FB9 /* ValueMappingForValue.swift */; };
		BBCD9E121DAAC33700E85FB9 /* ValueMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E0E1DAAC33700E85FB9 /* ValueMappingForValue.swift */; };
		BBCD9E141DAAC4DC00E85FB9 /* ValueMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E131DAAC4DC00E85FB9 /* ValueMappingForArrayField.swift */; };
		BBCD9E161DAAC4DC00E85FB9 /* ValueMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E131DAAC4DC00E85FB9 /* ValueMappingForArrayField.swift */; };
		BBCD9E171DAAC4DC00E85FB9 /* ValueMappingForArrayField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E131DAAC4DC00E85FB9 /* ValueMappingForArrayField.swift */; };
		BBCD9E191DAAC50900E85FB9 /* ValueMappingForSourceField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E181DAAC50900E85FB9 /* ValueMappingForSourceField.swift */; };
		BBCD9E1B1DAAC50900E85FB9 /* ValueMappingForSourceField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E181DAAC50900E85FB9 /* ValueMappingForSourceField.swift */; };
		BBCD9E1C1DAAC50900E85FB9 /* ValueMappingForSourceField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E181DAAC50900E85FB9 /* ValueMappingForSourceField.swift */; };
		BBCD9E201DAAC7E600E85FB9 /* ValueMappingForSetField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E1D1DAAC7E600E85FB9 /* ValueMappingForSetField.swift */; };
		BBCD9E211DAAC7E600E85FB9 /* ValueMappingForSetField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E1D1DAAC7E600E85FB9 /* ValueMappingForSetField.swift */; };
		BBCD9E231DAAD26200E85FB9 /* CompositeObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E221DAAD26200E85FB9 /* CompositeObservable.swift */; };
		BBCD9E251DAAD26200E85FB9 /* CompositeObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E221DAAD26200E85FB9 /* CompositeObservable.swift */; };
		BBCD9E261DAAD26200E85FB9 /* CompositeObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E221DAAD26200E85FB9 /* CompositeObservable.swift */; };
		BBCD9E281DAAD2B900E85FB9 /* DistinctValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E271DAAD2B900E85FB9 /* DistinctValue.swift */; };
		BBCD9E2A1DAAD2B900E85FB9 /* DistinctValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E271DAAD2B900E85FB9 /* DistinctValue.swift */; };
		BBCD9E2B1DAAD2B900E85FB9 /* DistinctValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E271DAAD2B900E85FB9 /* DistinctValue.swift */; };
		BBCD9E2D1DAAD4BC00E85FB9 /* CompositeUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E2C1DAAD4BC00E85FB9 /* CompositeUpdatable.swift */; };
		BBCD9E2F1DAAD4BC00E85FB9 /* CompositeUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E2C1DAAD4BC00E85FB9 /* CompositeUpdatable.swift */; };
		BBCD9E301DAAD4BC00E85FB9 /* CompositeUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E2C1DAAD4BC00E85FB9 /* CompositeUpdatable.swift */; };
		BBCD9E321DAAD66500E85FB9 /* CombinedObservableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E311DAAD66500E85FB9 /* CombinedObservableTests.swift */; };
		BBCD9E341DAAD66500E85FB9 /* CombinedObservableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E311DAAD66500E85FB9 /* CombinedObservableTests.swift */; };
		BBCD9E361DAAD74600E85FB9 /* CombinedUpdatableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E351DAAD74600E85FB9 /* CombinedUpdatableTests.swift */; };
		BBCD9E381DAAD74600E85FB9 /* CombinedUpdatableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E351DAAD74600E85FB9 /* CombinedUpdatableTests.swift */; };
		BBCD9E3A1DABC45000E85FB9 /* TypeHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E391DABC45000E85FB9 /* TypeHelperTests.swift */; };
		BBCD9E3C1DABC45000E85FB9 /* TypeHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E391DABC45000E85FB9 /* TypeHelperTests.swift */; };
		BBCD9E3E1DABC81A00E85FB9 /* MockSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E3D1DABC81A00E85FB9 /* MockSink.swift */; };
		BBCD9E401DABC81A00E85FB9 /* MockSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E3D1DABC81A00E85FB9 /* MockSink.swift */; };
		BBCD9E421DABD4BE00E85FB9 /* ObservableSetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E411DABD4BE00E85FB9 /* ObservableSetTests.swift */; };
		BBCD9E441DABD4BE00E85FB9 /* ObservableSetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E411DABD4BE00E85FB9 /* ObservableSetTests.swift */; };
		BBCD9E481DABEA5500E85FB9 /* ObservableArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E451DABEA5500E85FB9 /* ObservableArrayTests.swift */; };
		BBCD9E4C1DABFA2900E85FB9 /* ArrayConcatenationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E491DABFA2900E85FB9 /* ArrayConcatenationTests.swift */; };
		BBCD9E4E1DABFE8800E85FB9 /* SetVariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E4D1DABFE8800E85FB9 /* SetVariableTests.swift */; };
		BBCD9E501DABFE8800E85FB9 /* SetVariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E4D1DABFE8800E85FB9 /* SetVariableTests.swift */; };
		BBCD9E521DAC1B1300E85FB9 /* ConnectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E511DAC1B1300E85FB9 /* ConnectorTests.swift */; };
		BBCD9E541DAC1B1300E85FB9 /* ConnectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E511DAC1B1300E85FB9 /* ConnectorTests.swift */; };
		BBE4DF401DA3A88C005EC162 /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF3F1DA3A88C005EC162 /* ObservableType.swift */; };
		BBE4DF421DA3A88C005EC162 /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF3F1DA3A88C005EC162 /* ObservableType.swift */; };
		BBE4DF431DA3A88C005EC162 /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF3F1DA3A88C005EC162 /* ObservableType.swift */; };
		BBE4DF451DA3A908005EC162 /* ValueChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF441DA3A908005EC162 /* ValueChange.swift */; };
		BBE4DF471DA3A908005EC162 /* ValueChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF441DA3A908005EC162 /* ValueChange.swift */; };
		BBE4DF481DA3A908005EC162 /* ValueChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF441DA3A908005EC162 /* ValueChange.swift */; };
		BBE4DF4C1DA409EE005EC162 /* DistinctUnion.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF491DA409EE005EC162 /* DistinctUnion.swift */; };
		BBE4DF4D1DA409EE005EC162 /* DistinctUnion.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF491DA409EE005EC162 /* DistinctUnion.swift */; };
		BBE4DF551DA41373005EC162 /* DistinctUnionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF4E1DA412A0005EC162 /* DistinctUnionTests.swift */; };
		BBE4DF591DA55384005EC162 /* SetMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF561DA55384005EC162 /* SetMappingForValue.swift */; };
		BBE4DF5A1DA55384005EC162 /* SetMappingForValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF561DA55384005EC162 /* SetMappingForValue.swift */; };
		BBE4DF5E1DA55DA3005EC162 /* SetMappingBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF5B1DA55DA3005EC162 /* SetMappingBase.swift */; };
		BBE4DF5F1DA55DA3005EC162 /* SetMappingBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF5B1DA55DA3005EC162 /* SetMappingBase.swift */; };
		BBE4DF661DA5656B005EC162 /* SetMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF611DA5654F005EC162 /* SetMappingTests.swift */; };
		BBE4DF681DA5656D005EC162 /* SetMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF611DA5654F005EC162 /* SetMappingTests.swift */; };
		BBE9AACA1DC0F0A5000B3DD0 /* Update.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAC91DC0F0A5000B3DD0 /* Update.swift */; };
		BBE9AACC1DC0F0A5000B3DD0 /* Update.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAC91DC0F0A5000B3DD0 /* Update.swift */; };
		BBE9AACD1DC0F0A5000B3DD0 /* Update.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAC91DC0F0A5000B3DD0 /* Update.swift */; };
		BBE9AACF1DC0F1F6000B3DD0 /* ChangeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AACE1DC0F1F6000B3DD0 /* ChangeTests.swift */; };
		BBE9AAD01DC0F1F6000B3DD0 /* ChangeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AACE1DC0F1F6000B3DD0 /* ChangeTests.swift */; };
		BBE9AAD11DC0F1F6000B3DD0 /* ChangeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AACE1DC0F1F6000B3DD0 /* ChangeTests.swift */; };
		BBE9AAD41DC0F474000B3DD0 /* BufferedSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAD31DC0F474000B3DD0 /* BufferedSourceTests.swift */; };
		BBE9AAD51DC0F474000B3DD0 /* BufferedSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAD31DC0F474000B3DD0 /* BufferedSourceTests.swift */; };
		BBE9AAD61DC0F474000B3DD0 /* BufferedSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAD31DC0F474000B3DD0 /* BufferedSourceTests.swift */; };
		BBE9AAD81DC0FC17000B3DD0 /* BracketingSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAD71DC0FC17000B3DD0 /* BracketingSourceTests.swift */; };
		BBE9AAD91DC0FC17000B3DD0 /* BracketingSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAD71DC0FC17000B3DD0 /* BracketingSourceTests.swift */; };
		BBE9AADA1DC0FC17000B3DD0 /* BracketingSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE9AAD71DC0FC17000B3DD0 /* BracketingSourceTests.swift */; };
		BBEA2A291DBF9ADA00CCCB08 /* MockSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E3D1DABC81A00E85FB9 /* MockSink.swift */; };
		BBEA2A2B1DBF9E9C00CCCB08 /* AnySinkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A2A1DBF9E9C00CCCB08 /* AnySinkTests.swift */; };
		BBEA2A2C1DBF9E9C00CCCB08 /* AnySinkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A2A1DBF9E9C00CCCB08 /* AnySinkTests.swift */; };
		BBEA2A2D1DBF9E9C00CCCB08 /* AnySinkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A2A1DBF9E9C00CCCB08 /* AnySinkTests.swift */; };
		BBEA2A321DBFC3BB00CCCB08 /* SignalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA11C8FCE2C0050DDA9 /* SignalTests.swift */; };
		BBEA2A341DBFC4C300CCCB08 /* AnySourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A331DBFC4C300CCCB08 /* AnySourceTests.swift */; };
		BBEA2A351DBFC4C300CCCB08 /* AnySourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A331DBFC4C300CCCB08 /* AnySourceTests.swift */; };
		BBEA2A361DBFC4C300CCCB08 /* AnySourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A331DBFC4C300CCCB08 /* AnySourceTests.swift */; };
		BBEA2A371DBFC71000CCCB08 /* SimpleSourcesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA21C8FCE2C0050DDA9 /* SimpleSourcesTests.swift */; };
		BBEA2A381DBFC7B800CCCB08 /* MergedSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9B1C8FCE2C0050DDA9 /* MergedSourceTests.swift */; };
		BBEA2A3A1DBFE37A00CCCB08 /* BracketingSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A391DBFE37A00CCCB08 /* BracketingSource.swift */; };
		BBEA2A3B1DBFE37B00CCCB08 /* BracketingSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A391DBFE37A00CCCB08 /* BracketingSource.swift */; };
		BBEA2A3C1DBFE37B00CCCB08 /* BracketingSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A391DBFE37A00CCCB08 /* BracketingSource.swift */; };
		BBEA2A3D1DBFE37B00CCCB08 /* BracketingSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A391DBFE37A00CCCB08 /* BracketingSource.swift */; };
		BBEA2A3F1DBFE38F00CCCB08 /* BufferedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A3E1DBFE38F00CCCB08 /* BufferedSource.swift */; };
		BBEA2A401DBFE38F00CCCB08 /* BufferedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A3E1DBFE38F00CCCB08 /* BufferedSource.swift */; };
		BBEA2A411DBFE38F00CCCB08 /* BufferedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A3E1DBFE38F00CCCB08 /* BufferedSource.swift */; };
		BBEA2A421DBFE38F00CCCB08 /* BufferedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEA2A3E1DBFE38F00CCCB08 /* BufferedSource.swift */; };
		BBEA2A4D1DC0BB4D00CCCB08 /* SourceOperatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55BA31C8FCE2C0050DDA9 /* SourceOperatorTests.swift */; };
		BBEBFF721DB77D77008AC632 /* MockArrayObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB568AF61DA6A9EE00BC4B58 /* MockArrayObserver.swift */; };
		BBEBFF731DB77D77008AC632 /* ArrayModificationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033651DA7CFFE00E83AC1 /* ArrayModificationTests.swift */; };
		BBEBFF741DB77D77008AC632 /* ArrayChangeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA033691DA7D03300E83AC1 /* ArrayChangeTests.swift */; };
		BBEBFF751DB77D77008AC632 /* ArrayChangeSeparationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC36AE61DA83E0E00AB3E9D /* ArrayChangeSeparationTests.swift */; };
		BBEBFF761DB77D77008AC632 /* ObservableArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E451DABEA5500E85FB9 /* ObservableArrayTests.swift */; };
		BBEBFF771DB77D77008AC632 /* ArrayVariableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B981C8FCE2C0050DDA9 /* ArrayVariableTests.swift */; };
		BBEBFF781DB77D77008AC632 /* ArrayMappingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB55B9F1C8FCE2C0050DDA9 /* ArrayMappingTests.swift */; };
		BBEBFF791DB77D77008AC632 /* ArrayFilteringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC4AE4D1D9A829500FF7DE0 /* ArrayFilteringTests.swift */; };
		BBEBFF7A1DB77D77008AC632 /* ArrayFoldingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9DFD1DAA8F7800E85FB9 /* ArrayFoldingTests.swift */; };
		BBEBFF7B1DB77D77008AC632 /* DistinctUnionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE4DF4E1DA412A0005EC162 /* DistinctUnionTests.swift */; };
		BBEBFF7C1DB77D77008AC632 /* ArrayConcatenationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCD9E491DABFA2900E85FB9 /* ArrayConcatenationTests.swift */; };
		BBF3EB0E1D99ACDE006AC7CD /* RefList.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF3EB0D1D99ACDE006AC7CD /* RefList.swift */; };
		BBF3EB0F1D99ACDE006AC7CD /* RefList.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF3EB0D1D99ACDE006AC7CD /* RefList.swift */; };
		BBF3EB101D99ACDE006AC7CD /* RefList.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF3EB0D1D99ACDE006AC7CD /* RefList.swift */; };
		BBF3EB111D99ACDE006AC7CD /* RefList.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF3EB0D1D99ACDE006AC7CD /* RefList.swift */; };
		BBF400661DA108E900DA0B2C /* ObservableContains.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF400631DA108E900DA0B2C /* ObservableContains.swift */; };
		BBF400671DA108E900DA0B2C /* ObservableContains.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF400631DA108E900DA0B2C /* ObservableContains.swift */; };
		BBF7B9521EACE69B00073DF8 /* UILabel Glue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B9511EACE69B00073DF8 /* UILabel Glue.swift */; };
		BBF7B9541EACEB0100073DF8 /* AccumulatedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B9531EACEB0100073DF8 /* AccumulatedSource.swift */; };
		BBF7B9551EACEB0100073DF8 /* AccumulatedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B9531EACEB0100073DF8 /* AccumulatedSource.swift */; };
		BBF7B9561EACEB0100073DF8 /* AccumulatedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B9531EACEB0100073DF8 /* AccumulatedSource.swift */; };
		BBF7B9571EACEB0100073DF8 /* AccumulatedSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B9531EACEB0100073DF8 /* AccumulatedSource.swift */; };
		BBF7B9591EACFC3B00073DF8 /* DependentValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B9581EACFC3B00073DF8 /* DependentValue.swift */; };
		BBF7B95A1EACFC3B00073DF8 /* DependentValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B9581EACFC3B00073DF8 /* DependentValue.swift */; };
		BBF7B95B1EACFC3B00073DF8 /* DependentValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B9581EACFC3B00073DF8 /* DependentValue.swift */; };
		BBF7B95C1EACFC3B00073DF8 /* DependentValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B9581EACFC3B00073DF8 /* DependentValue.swift */; };
		BBF7B9601EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B95F1EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift */; };
		BBF7B9611EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B95F1EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift */; };
		BBF7B9621EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B95F1EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift */; };
		BBF7B9631EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF7B95F1EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
		BB351B021DB81E67005F083F /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = BBB55AA91C8F80020050DDA9 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = BBB55AD31C8F88F20050DDA9;
			remoteInfo = macOS;
		};
		BBB55ABE1C8F80020050DDA9 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = BBB55AA91C8F80020050DDA9 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = BBB55AB11C8F80020050DDA9;
			remoteInfo = GlueKit;
		};
		BBB55ADF1C8F88F20050DDA9 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = BBB55AA91C8F80020050DDA9 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = BBB55AD31C8F88F20050DDA9;
			remoteInfo = GlueKit;
		};
		BBB55B091C8F8CBC0050DDA9 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = BBB55AA91C8F80020050DDA9 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = BBB55AFD1C8F8CBB0050DDA9;
			remoteInfo = GlueKit;
		};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
		BB015F4E1DC624FB00C8C05A /* Language Enhancements.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = "Language Enhancements.md"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.markdown; };
		BB1657E61D71D65900094BAC /* ArrayChangeSeparation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayChangeSeparation.swift; sourceTree = "<group>"; };
		BB170F231DC1066D0000443E /* UpdateTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateTests.swift; sourceTree = "<group>"; };
		BB170F271DC106DE0000443E /* TestChange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestChange.swift; sourceTree = "<group>"; };
		BB170F2B1DC10D350000443E /* TestObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestObservable.swift; sourceTree = "<group>"; };
		BB170F2F1DC10DDB0000443E /* ChangesSourceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangesSourceTests.swift; sourceTree = "<group>"; };
		BB170F331DC110BD0000443E /* TestUpdatable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestUpdatable.swift; sourceTree = "<group>"; };
		BB170F371DC1545E0000443E /* TransactionStateTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionStateTests.swift; sourceTree = "<group>"; };
		BB170F3D1DC221180000443E /* ValueChangeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueChangeTests.swift; sourceTree = "<group>"; };
		BB170F411DC22A300000443E /* UpdatableValueTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = UpdatableValueTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BB1E4D691D61EA5200F1831F /* SetSortingByMappingToComparable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetSortingByMappingToComparable.swift; sourceTree = "<group>"; };
		BB318F6A1CB9922F0086EE83 /* UIBarButtonItem Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "UIBarButtonItem Extensions.swift"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BB351AFC1DB81E67005F083F /* PerformanceTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PerformanceTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
		BB3982EC1EC109C4000CDCB5 /* UISearchBar Glue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UISearchBar Glue.swift"; sourceTree = "<group>"; };
		BB3D12AF1E49FBF500097510 /* SipHash.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SipHash.framework; path = "../../Library/Developer/Xcode/DerivedData/GlueKit-gstdcmlxjxkcnggtlmasijktewlg/Build/Products/Debug/SipHash.framework"; sourceTree = "<group>"; };
		BB3D12B11E49FC5A00097510 /* BTree.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BTree.framework; path = Carthage/Build/iOS/BTree.framework; sourceTree = "<group>"; };
		BB3D12B31E49FC5E00097510 /* SipHash.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SipHash.framework; path = Carthage/Build/iOS/SipHash.framework; sourceTree = "<group>"; };
		BB3D12B51E49FC7600097510 /* BTree.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BTree.framework; path = Carthage/Build/Mac/BTree.framework; sourceTree = "<group>"; };
		BB3D12B61E49FC7600097510 /* SipHash.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SipHash.framework; path = Carthage/Build/Mac/SipHash.framework; sourceTree = "<group>"; };
		BB3D12B91E49FC8000097510 /* BTree.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BTree.framework; path = Carthage/Build/watchOS/BTree.framework; sourceTree = "<group>"; };
		BB3D12BA1E49FC8000097510 /* SipHash.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SipHash.framework; path = Carthage/Build/watchOS/SipHash.framework; sourceTree = "<group>"; };
		BB3D12BD1E49FC8700097510 /* BTree.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BTree.framework; path = Carthage/Build/tvOS/BTree.framework; sourceTree = "<group>"; };
		BB3D12BE1E49FC8700097510 /* SipHash.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SipHash.framework; path = Carthage/Build/tvOS/SipHash.framework; sourceTree = "<group>"; };
		BB3D92951D647E83003BEDBF /* SetReference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetReference.swift; sourceTree = "<group>"; };
		BB3D929A1D64862D003BEDBF /* ArrayReference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayReference.swift; sourceTree = "<group>"; };
		BB4052011C958712003D8F5B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
		BB471D991DA57FF8002550B0 /* SetSortingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SetSortingTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BB471D9E1DA58EA3002550B0 /* .codecov.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .codecov.yml; sourceTree = "<group>"; };
		BB568AE81DA66E6200BC4B58 /* Cartfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cartfile; sourceTree = "<group>"; };
		BB568AEE1DA693F700BC4B58 /* SetFilteringTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetFilteringTests.swift; sourceTree = "<group>"; };
		BB568AF21DA6942700BC4B58 /* MockSetObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockSetObserver.swift; sourceTree = "<group>"; };
		BB568AF61DA6A9EE00BC4B58 /* MockArrayObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockArrayObserver.swift; sourceTree = "<group>"; };
		BB5B02DA1F5E3FC50084D86B /* ArrayGatheringSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrayGatheringSource.swift; sourceTree = "<group>"; };
		BB5B02DF1F5E3FDE0084D86B /* SetGatheringSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetGatheringSource.swift; sourceTree = "<group>"; };
		BB6139821F5E1B3F005455D5 /* NSTextField Glue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSTextField Glue.swift"; sourceTree = "<group>"; };
		BB67E5511C9B6A63002B0AB5 /* CADisplayLink Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CADisplayLink Extensions.swift"; sourceTree = "<group>"; };
		BB69A7EE1D6AFF1A001D2821 /* Abstract.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Abstract.swift; sourceTree = "<group>"; };
		BB69A7FF1D6B2377001D2821 /* BufferedArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BufferedArray.swift; sourceTree = "<group>"; };
		BB69A83A1D6B90F5001D2821 /* ArrayConcatenation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayConcatenation.swift; sourceTree = "<group>"; };
		BB69A83F1D6B9A7E001D2821 /* ArrayMappingForValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayMappingForValue.swift; sourceTree = "<group>"; };
		BB6CE3B31DC4C21C00295C55 /* TransformedSink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformedSink.swift; sourceTree = "<group>"; };
		BB7E04C71DA7233B00BE3051 /* ArrayMappingForArrayField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayMappingForArrayField.swift; sourceTree = "<group>"; };
		BB7E04CC1DA723F300BE3051 /* SetMappingForValueField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetMappingForValueField.swift; sourceTree = "<group>"; };
		BB7E04D11DA7240C00BE3051 /* SetMappingForSequence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetMappingForSequence.swift; sourceTree = "<group>"; };
		BB7E04D61DA7242F00BE3051 /* SetMappingForSetField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetMappingForSetField.swift; sourceTree = "<group>"; };
		BB7E04DB1DA7244A00BE3051 /* SetMappingForArrayField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetMappingForArrayField.swift; sourceTree = "<group>"; };
		BB7E04E01DA7255D00BE3051 /* ArrayFilteringIndexmap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayFilteringIndexmap.swift; sourceTree = "<group>"; };
		BB7E04E51DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayFilteringOnObservableBool.swift; sourceTree = "<group>"; };
		BB82E3E01D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayFilteringOnPredicate.swift; sourceTree = "<group>"; };
		BB88C40D1DC3A08B00C7EC3C /* ObservableTypeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ObservableTypeTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BB88C4121DC3B65F00C7EC3C /* ValueBufferingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ValueBufferingTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BB8990021D5DF2D20097F350 /* SetChange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetChange.swift; sourceTree = "<group>"; };
		BB8990041D5DF8630097F350 /* Change.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Change.swift; sourceTree = "<group>"; };
		BB8990091D5DF88C0097F350 /* ObservableSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ObservableSet.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BB89901A1D5F6AAE0097F350 /* UpdatableSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatableSet.swift; sourceTree = "<group>"; };
		BB89901F1D5F6F980097F350 /* SetVariable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetVariable.swift; sourceTree = "<group>"; };
		BB8990251D5F84050097F350 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
		BB8990281D5F84210097F350 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
		BB89902A1D5F842C0097F350 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
		BB89902C1D5F84340097F350 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
		BB8D366D1DA116CB000D44C5 /* Bookshelf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bookshelf.swift; sourceTree = "<group>"; };
		BB8D36711DA14800000D44C5 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = "<group>"; };
		BB948BBB1DD5EFC900B0734C /* ComputedUpdatable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComputedUpdatable.swift; sourceTree = "<group>"; };
		BB948BC01DD720FE00B0734C /* UISwitch Glue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UISwitch Glue.swift"; sourceTree = "<group>"; };
		BB9D73C81DBB2EB400E20D67 /* Connect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Connect.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BB9D73CE1DBB38F900E20D67 /* Sink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sink.swift; sourceTree = "<group>"; };
		BB9D73DF1DBB61C100E20D67 /* TransactionalThing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionalThing.swift; sourceTree = "<group>"; };
		BB9D73E51DBB727300E20D67 /* ChangesSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ChangesSource.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BB9D73EE1DBDFEE400E20D67 /* TwoWayBinding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TwoWayBinding.swift; sourceTree = "<group>"; };
		BB9D73F31DBE03EB00E20D67 /* DispatchSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DispatchSource.swift; sourceTree = "<group>"; };
		BB9D73FD1DBE061D00E20D67 /* OwnedSink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OwnedSink.swift; sourceTree = "<group>"; };
		BB9FCDCB1F5E54BF001B8781 /* NSButton Glue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSButton Glue.swift"; sourceTree = "<group>"; };
		BB9FCDCD1F5EB646001B8781 /* NSControl Glue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSControl Glue.swift"; sourceTree = "<group>"; };
		BB9FCDCF1F5ECFF3001B8781 /* NSPopUpButton Glue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSPopUpButton Glue.swift"; sourceTree = "<group>"; };
		BBA033561DA726AA00E83AC1 /* SetFilteringOnObservableBool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetFilteringOnObservableBool.swift; sourceTree = "<group>"; };
		BBA0335B1DA7276200E83AC1 /* SetSortingByComparator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetSortingByComparator.swift; sourceTree = "<group>"; };
		BBA033601DA7278C00E83AC1 /* SetSortingByMappingToObservableComparable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetSortingByMappingToObservableComparable.swift; sourceTree = "<group>"; };
		BBA033651DA7CFFE00E83AC1 /* ArrayModificationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayModificationTests.swift; sourceTree = "<group>"; };
		BBA033691DA7D03300E83AC1 /* ArrayChangeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayChangeTests.swift; sourceTree = "<group>"; };
		BBAA827C1C91D43700586903 /* Type Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Type Helpers.swift"; sourceTree = "<group>"; };
		BBB4F2511C9594A9002532CC /* UIDevice Glue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIDevice Glue.swift"; sourceTree = "<group>"; };
		BBB4F26E1C99E6CB002532CC /* UIGestureRecognizer Glue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIGestureRecognizer Glue.swift"; sourceTree = "<group>"; };
		BBB55AB21C8F80020050DDA9 /* GlueKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GlueKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		BBB55AB71C8F80020050DDA9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		BBB55ABC1C8F80020050DDA9 /* GlueKit-Test.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "GlueKit-Test.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
		BBB55AC31C8F80020050DDA9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		BBB55ACC1C8F80660050DDA9 /* version.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = version.xcconfig; sourceTree = "<group>"; };
		BBB55AD41C8F88F20050DDA9 /* GlueKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GlueKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		BBB55ADD1C8F88F20050DDA9 /* GlueKit-Test.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "GlueKit-Test.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
		BBB55AF11C8F8BE00050DDA9 /* GlueKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GlueKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		BBB55AFE1C8F8CBB0050DDA9 /* GlueKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GlueKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		BBB55B071C8F8CBB0050DDA9 /* GlueKit-Test.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "GlueKit-Test.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
		BBB55B1C1C8F90F60050DDA9 /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .travis.yml; sourceTree = "<group>"; };
		BBB55B1D1C8F9E850050DDA9 /* LICENSE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.md; sourceTree = "<group>"; };
		BBB55B1E1C8F9E920050DDA9 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.markdown; };
		BBB55B1F1C8FCC810050DDA9 /* ArrayChange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayChange.swift; sourceTree = "<group>"; };
		BBB55B201C8FCC810050DDA9 /* ArrayVariable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayVariable.swift; sourceTree = "<group>"; };
		BBB55B221C8FCC810050DDA9 /* Connector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Connector.swift; sourceTree = "<group>"; };
		BBB55B231C8FCC810050DDA9 /* SetFilteringOnPredicate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetFilteringOnPredicate.swift; sourceTree = "<group>"; };
		BBB55B251C8FCC810050DDA9 /* Locks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Locks.swift; sourceTree = "<group>"; };
		BBB55B261C8FCC810050DDA9 /* MergedSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MergedSource.swift; sourceTree = "<group>"; };
		BBB55B271C8FCC810050DDA9 /* NSNotificationCenter Support.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSNotificationCenter Support.swift"; sourceTree = "<group>"; };
		BBB55B281C8FCC810050DDA9 /* BufferedValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BufferedValue.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55B291C8FCC810050DDA9 /* ObservableValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ObservableValue.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55B2A1C8FCC810050DDA9 /* ObservableArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObservableArray.swift; sourceTree = "<group>"; };
		BBB55B2B1C8FCC810050DDA9 /* Reference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reference.swift; sourceTree = "<group>"; };
		BBB55B2C1C8FCC810050DDA9 /* ValueMappingForValueField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ValueMappingForValueField.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55B2D1C8FCC810050DDA9 /* ArrayMappingForValueField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayMappingForValueField.swift; sourceTree = "<group>"; };
		BBB55B2E1C8FCC810050DDA9 /* Signal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal.swift; sourceTree = "<group>"; };
		BBB55B2F1C8FCC810050DDA9 /* SimpleSources.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleSources.swift; sourceTree = "<group>"; };
		BBB55B301C8FCC810050DDA9 /* Source.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Source.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55B311C8FCC810050DDA9 /* TransformedSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformedSource.swift; sourceTree = "<group>"; };
		BBB55B321C8FCC820050DDA9 /* TimerSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimerSource.swift; sourceTree = "<group>"; };
		BBB55B331C8FCC820050DDA9 /* UpdatableValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatableValue.swift; sourceTree = "<group>"; };
		BBB55B341C8FCC820050DDA9 /* UpdatableArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatableArray.swift; sourceTree = "<group>"; };
		BBB55B351C8FCC820050DDA9 /* Variable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Variable.swift; sourceTree = "<group>"; };
		BBB55B981C8FCE2C0050DDA9 /* ArrayVariableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ArrayVariableTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55B9A1C8FCE2C0050DDA9 /* KVOSupportTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = KVOSupportTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55B9B1C8FCE2C0050DDA9 /* MergedSourceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MergedSourceTests.swift; sourceTree = "<group>"; };
		BBB55B9C1C8FCE2C0050DDA9 /* NotificationCenterSupportTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NotificationCenterSupportTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55B9D1C8FCE2C0050DDA9 /* ObservableValueTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ObservableValueTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55B9E1C8FCE2C0050DDA9 /* DistinctTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DistinctTests.swift; sourceTree = "<group>"; };
		BBB55B9F1C8FCE2C0050DDA9 /* ArrayMappingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayMappingTests.swift; sourceTree = "<group>"; };
		BBB55BA01C8FCE2C0050DDA9 /* ValueMappingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ValueMappingTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55BA11C8FCE2C0050DDA9 /* SignalTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55BA21C8FCE2C0050DDA9 /* SimpleSourcesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleSourcesTests.swift; sourceTree = "<group>"; };
		BBB55BA31C8FCE2C0050DDA9 /* SourceOperatorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SourceOperatorTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55BA41C8FCE2C0050DDA9 /* TestUtilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestUtilities.swift; sourceTree = "<group>"; };
		BBB55BA51C8FCE2C0050DDA9 /* TimerSourceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = TimerSourceTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55BA61C8FCE2C0050DDA9 /* TwoWayBindingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = TwoWayBindingTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55BA71C8FCE2C0050DDA9 /* VariableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = VariableTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBB55BDC1C8FCFAD0050DDA9 /* Overview.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = Overview.md; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.markdown; };
		BBB55BDD1C8FD0160050DDA9 /* Demo.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; name = Demo.playground; path = ../GlueKit/Demo.playground; sourceTree = "<group>"; };
		BBB55BE61C8FD1C60050DDA9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		BBB55BEA1C8FD25F0050DDA9 /* GlueKitPerformanceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = GlueKitPerformanceTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBBBEC8C1DCA1AEB000B646D /* ValueReference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueReference.swift; sourceTree = "<group>"; };
		BBBBEC911DCA1D43000B646D /* ValueReferenceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueReferenceTests.swift; sourceTree = "<group>"; };
		BBBBEC951DCA1FEB000B646D /* ArrayReferenceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayReferenceTests.swift; sourceTree = "<group>"; };
		BBBBEC991DCA223A000B646D /* SetReferenceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetReferenceTests.swift; sourceTree = "<group>"; };
		BBBBEC9D1DCA2FAB000B646D /* NSUserDefaultsSupportTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSUserDefaultsSupportTests.swift; sourceTree = "<group>"; };
		BBBBECA11DCA3AA8000B646D /* DispatchSourceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = DispatchSourceTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBBBECA51DCA3FF0000B646D /* BufferedSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BufferedSet.swift; sourceTree = "<group>"; };
		BBBBECAA1DCA4168000B646D /* ArrayBufferingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayBufferingTests.swift; sourceTree = "<group>"; };
		BBBBECAE1DCA446A000B646D /* SetBufferingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetBufferingTests.swift; sourceTree = "<group>"; };
		BBBFD14A1EBE673200EC9814 /* SetSortingByComparableField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetSortingByComparableField.swift; sourceTree = "<group>"; };
		BBC1F1D01D7EDF4A00A320F5 /* GlueKit.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; path = GlueKit.podspec; sourceTree = "<group>"; };
		BBC2A8281CBC14C600394D24 /* NSObject Glue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSObject Glue.swift"; sourceTree = "<group>"; };
		BBC36AE61DA83E0E00AB3E9D /* ArrayChangeSeparationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayChangeSeparationTests.swift; sourceTree = "<group>"; };
		BBC3C84D1C93164200E10D59 /* UIControl Glue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIControl Glue.swift"; sourceTree = "<group>"; };
		BBC4AE4D1D9A829500FF7DE0 /* ArrayFilteringTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayFilteringTests.swift; sourceTree = "<group>"; };
		BBCD9DF41DA9104A00E85FB9 /* RefListTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefListTests.swift; sourceTree = "<group>"; };
		BBCD9DF81DAA885E00E85FB9 /* ArrayFolding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ArrayFolding.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBCD9DFD1DAA8F7800E85FB9 /* ArrayFoldingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayFoldingTests.swift; sourceTree = "<group>"; };
		BBCD9E011DAA910500E85FB9 /* SetFolding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetFolding.swift; sourceTree = "<group>"; };
		BBCD9E061DAA918400E85FB9 /* SetFoldingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetFoldingTests.swift; sourceTree = "<group>"; };
		BBCD9E0A1DAAB6E700E85FB9 /* MockUpdateSink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockUpdateSink.swift; sourceTree = "<group>"; };
		BBCD9E0E1DAAC33700E85FB9 /* ValueMappingForValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueMappingForValue.swift; sourceTree = "<group>"; };
		BBCD9E131DAAC4DC00E85FB9 /* ValueMappingForArrayField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueMappingForArrayField.swift; sourceTree = "<group>"; };
		BBCD9E181DAAC50900E85FB9 /* ValueMappingForSourceField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ValueMappingForSourceField.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBCD9E1D1DAAC7E600E85FB9 /* ValueMappingForSetField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ValueMappingForSetField.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBCD9E221DAAD26200E85FB9 /* CompositeObservable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CompositeObservable.swift; sourceTree = "<group>"; };
		BBCD9E271DAAD2B900E85FB9 /* DistinctValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DistinctValue.swift; sourceTree = "<group>"; };
		BBCD9E2C1DAAD4BC00E85FB9 /* CompositeUpdatable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CompositeUpdatable.swift; sourceTree = "<group>"; };
		BBCD9E311DAAD66500E85FB9 /* CombinedObservableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = CombinedObservableTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBCD9E351DAAD74600E85FB9 /* CombinedUpdatableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = CombinedUpdatableTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBCD9E391DABC45000E85FB9 /* TypeHelperTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypeHelperTests.swift; sourceTree = "<group>"; };
		BBCD9E3D1DABC81A00E85FB9 /* MockSink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockSink.swift; sourceTree = "<group>"; };
		BBCD9E411DABD4BE00E85FB9 /* ObservableSetTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObservableSetTests.swift; sourceTree = "<group>"; };
		BBCD9E451DABEA5500E85FB9 /* ObservableArrayTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObservableArrayTests.swift; sourceTree = "<group>"; };
		BBCD9E491DABFA2900E85FB9 /* ArrayConcatenationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayConcatenationTests.swift; sourceTree = "<group>"; };
		BBCD9E4D1DABFE8800E85FB9 /* SetVariableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetVariableTests.swift; sourceTree = "<group>"; };
		BBCD9E511DAC1B1300E85FB9 /* ConnectorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ConnectorTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBE4DF3F1DA3A88C005EC162 /* ObservableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ObservableType.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBE4DF441DA3A908005EC162 /* ValueChange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueChange.swift; sourceTree = "<group>"; };
		BBE4DF491DA409EE005EC162 /* DistinctUnion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DistinctUnion.swift; sourceTree = "<group>"; };
		BBE4DF4E1DA412A0005EC162 /* DistinctUnionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DistinctUnionTests.swift; sourceTree = "<group>"; };
		BBE4DF561DA55384005EC162 /* SetMappingForValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetMappingForValue.swift; sourceTree = "<group>"; };
		BBE4DF5B1DA55DA3005EC162 /* SetMappingBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetMappingBase.swift; sourceTree = "<group>"; };
		BBE4DF611DA5654F005EC162 /* SetMappingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetMappingTests.swift; sourceTree = "<group>"; };
		BBE9AAC91DC0F0A5000B3DD0 /* Update.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Update.swift; sourceTree = "<group>"; };
		BBE9AACE1DC0F1F6000B3DD0 /* ChangeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangeTests.swift; sourceTree = "<group>"; };
		BBE9AAD31DC0F474000B3DD0 /* BufferedSourceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BufferedSourceTests.swift; sourceTree = "<group>"; };
		BBE9AAD71DC0FC17000B3DD0 /* BracketingSourceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BracketingSourceTests.swift; sourceTree = "<group>"; };
		BBEA2A2A1DBF9E9C00CCCB08 /* AnySinkTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnySinkTests.swift; sourceTree = "<group>"; };
		BBEA2A331DBFC4C300CCCB08 /* AnySourceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnySourceTests.swift; sourceTree = "<group>"; };
		BBEA2A391DBFE37A00CCCB08 /* BracketingSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BracketingSource.swift; sourceTree = "<group>"; };
		BBEA2A3E1DBFE38F00CCCB08 /* BufferedSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BufferedSource.swift; sourceTree = "<group>"; };
		BBF3EB0D1D99ACDE006AC7CD /* RefList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefList.swift; sourceTree = "<group>"; };
		BBF400631DA108E900DA0B2C /* ObservableContains.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ObservableContains.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		BBF7B9511EACE69B00073DF8 /* UILabel Glue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UILabel Glue.swift"; sourceTree = "<group>"; };
		BBF7B9531EACEB0100073DF8 /* AccumulatedSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccumulatedSource.swift; sourceTree = "<group>"; };
		BBF7B9581EACFC3B00073DF8 /* DependentValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DependentValue.swift; sourceTree = "<group>"; };
		BBF7B95F1EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArrayBasedTableViewDataSource.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		BB351AF91DB81E67005F083F /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB351B011DB81E67005F083F /* GlueKit.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AAE1C8F80020050DDA9 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB89902B1D5F842C0097F350 /* Foundation.framework in Frameworks */,
				BB4052021C958712003D8F5B /* UIKit.framework in Frameworks */,
				BB3D12B21E49FC5A00097510 /* BTree.framework in Frameworks */,
				BB3D12B41E49FC5E00097510 /* SipHash.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AB91C8F80020050DDA9 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB23E63D1C90DEB6005EFD0A /* GlueKit.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AD01C8F88F20050DDA9 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB8990271D5F84150097F350 /* Foundation.framework in Frameworks */,
				BB3D12B71E49FC7600097510 /* BTree.framework in Frameworks */,
				BB3D12B81E49FC7600097510 /* SipHash.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55ADA1C8F88F20050DDA9 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB3D12C11E49FD1700097510 /* GlueKit.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AED1C8F8BE00050DDA9 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB8990291D5F84210097F350 /* Foundation.framework in Frameworks */,
				BB3D12BB1E49FC8000097510 /* BTree.framework in Frameworks */,
				BB3D12BC1E49FC8000097510 /* SipHash.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AFA1C8F8CBB0050DDA9 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB89902D1D5F84340097F350 /* Foundation.framework in Frameworks */,
				BB3D12BF1E49FC8700097510 /* BTree.framework in Frameworks */,
				BB3D12C01E49FC8700097510 /* SipHash.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55B041C8F8CBB0050DDA9 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BBB55B081C8F8CBC0050DDA9 /* GlueKit.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		BB3D12AE1E49FBF500097510 /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				BB3D12BD1E49FC8700097510 /* BTree.framework */,
				BB3D12BE1E49FC8700097510 /* SipHash.framework */,
				BB3D12B91E49FC8000097510 /* BTree.framework */,
				BB3D12BA1E49FC8000097510 /* SipHash.framework */,
				BB3D12B51E49FC7600097510 /* BTree.framework */,
				BB3D12B61E49FC7600097510 /* SipHash.framework */,
				BB3D12B31E49FC5E00097510 /* SipHash.framework */,
				BB3D12B11E49FC5A00097510 /* BTree.framework */,
				BB4052011C958712003D8F5B /* UIKit.framework */,
				BB89902C1D5F84340097F350 /* Foundation.framework */,
				BB89902A1D5F842C0097F350 /* Foundation.framework */,
				BB8990281D5F84210097F350 /* Foundation.framework */,
				BB8990251D5F84050097F350 /* Foundation.framework */,
				BB3D12AF1E49FBF500097510 /* SipHash.framework */,
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
		BB5B02D71F5E1B880084D86B /* AppKit Extensions */ = {
			isa = PBXGroup;
			children = (
				BB9FCDCD1F5EB646001B8781 /* NSControl Glue.swift */,
				BB9FCDCB1F5E54BF001B8781 /* NSButton Glue.swift */,
				BB9FCDCF1F5ECFF3001B8781 /* NSPopUpButton Glue.swift */,
				BB6139821F5E1B3F005455D5 /* NSTextField Glue.swift */,
			);
			name = "AppKit Extensions";
			sourceTree = "<group>";
		};
		BB8990011D5DF2BD0097F350 /* Observable Sets */ = {
			isa = PBXGroup;
			children = (
				BB8990021D5DF2D20097F350 /* SetChange.swift */,
				BB8990091D5DF88C0097F350 /* ObservableSet.swift */,
				BB89901A1D5F6AAE0097F350 /* UpdatableSet.swift */,
				BB89901F1D5F6F980097F350 /* SetVariable.swift */,
				BBBBECA51DCA3FF0000B646D /* BufferedSet.swift */,
				BBF400631DA108E900DA0B2C /* ObservableContains.swift */,
				BBE4DF5B1DA55DA3005EC162 /* SetMappingBase.swift */,
				BBE4DF561DA55384005EC162 /* SetMappingForValue.swift */,
				BB7E04D11DA7240C00BE3051 /* SetMappingForSequence.swift */,
				BB7E04CC1DA723F300BE3051 /* SetMappingForValueField.swift */,
				BB7E04D61DA7242F00BE3051 /* SetMappingForSetField.swift */,
				BB7E04DB1DA7244A00BE3051 /* SetMappingForArrayField.swift */,
				BBB55B231C8FCC810050DDA9 /* SetFilteringOnPredicate.swift */,
				BBA033561DA726AA00E83AC1 /* SetFilteringOnObservableBool.swift */,
				BBA0335B1DA7276200E83AC1 /* SetSortingByComparator.swift */,
				BB1E4D691D61EA5200F1831F /* SetSortingByMappingToComparable.swift */,
				BBA033601DA7278C00E83AC1 /* SetSortingByMappingToObservableComparable.swift */,
				BBBFD14A1EBE673200EC9814 /* SetSortingByComparableField.swift */,
				BBCD9E011DAA910500E85FB9 /* SetFolding.swift */,
				BB3D92951D647E83003BEDBF /* SetReference.swift */,
			);
			name = "Observable Sets";
			sourceTree = "<group>";
		};
		BB8D366C1DA116AA000D44C5 /* Examples */ = {
			isa = PBXGroup;
			children = (
				BB8D366D1DA116CB000D44C5 /* Bookshelf.swift */,
			);
			name = Examples;
			sourceTree = "<group>";
		};
		BBB4F2531C9594E0002532CC /* Foundation Extensions */ = {
			isa = PBXGroup;
			children = (
				BB9D73F31DBE03EB00E20D67 /* DispatchSource.swift */,
				BBB55B321C8FCC820050DDA9 /* TimerSource.swift */,
				BBC2A8281CBC14C600394D24 /* NSObject Glue.swift */,
				BBAA827C1C91D43700586903 /* Type Helpers.swift */,
				BBB55B271C8FCC810050DDA9 /* NSNotificationCenter Support.swift */,
				BBF7B9581EACFC3B00073DF8 /* DependentValue.swift */,
			);
			name = "Foundation Extensions";
			sourceTree = "<group>";
		};
		BBB55AA81C8F80020050DDA9 = {
			isa = PBXGroup;
			children = (
				BBB55B1E1C8F9E920050DDA9 /* README.md */,
				BBB55B1D1C8F9E850050DDA9 /* LICENSE.md */,
				BBB55B1C1C8F90F60050DDA9 /* .travis.yml */,
				BB471D9E1DA58EA3002550B0 /* .codecov.yml */,
				BBC1F1D01D7EDF4A00A320F5 /* GlueKit.podspec */,
				BB568AE81DA66E6200BC4B58 /* Cartfile */,
				BB8D36711DA14800000D44C5 /* Package.swift */,
				BBB55ACC1C8F80660050DDA9 /* version.xcconfig */,
				BBB55BDD1C8FD0160050DDA9 /* Demo.playground */,
				BBB55BDB1C8FCFAD0050DDA9 /* Documentation */,
				BBB55AB41C8F80020050DDA9 /* Sources */,
				BBB55AC01C8F80020050DDA9 /* Tests */,
				BBB55BE31C8FD1C60050DDA9 /* PerformanceTests */,
				BBB55AB31C8F80020050DDA9 /* Products */,
				BB3D12AE1E49FBF500097510 /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		BBB55AB31C8F80020050DDA9 /* Products */ = {
			isa = PBXGroup;
			children = (
				BBB55AB21C8F80020050DDA9 /* GlueKit.framework */,
				BBB55ABC1C8F80020050DDA9 /* GlueKit-Test.xctest */,
				BBB55AD41C8F88F20050DDA9 /* GlueKit.framework */,
				BBB55ADD1C8F88F20050DDA9 /* GlueKit-Test.xctest */,
				BBB55AF11C8F8BE00050DDA9 /* GlueKit.framework */,
				BBB55AFE1C8F8CBB0050DDA9 /* GlueKit.framework */,
				BBB55B071C8F8CBB0050DDA9 /* GlueKit-Test.xctest */,
				BB351AFC1DB81E67005F083F /* PerformanceTests.xctest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		BBB55AB41C8F80020050DDA9 /* Sources */ = {
			isa = PBXGroup;
			children = (
				BBB55AB71C8F80020050DDA9 /* Info.plist */,
				BBB55B921C8FCCD40050DDA9 /* Tools */,
				BBB55B931C8FCD010050DDA9 /* Sources and Signals */,
				BBB55B941C8FCD320050DDA9 /* Abstract Observable */,
				BBE4DF3E1DA3A869005EC162 /* Observable Values */,
				BBB55B951C8FCD4E0050DDA9 /* Observable Arrays */,
				BB8990011D5DF2BD0097F350 /* Observable Sets */,
				BBB4F2531C9594E0002532CC /* Foundation Extensions */,
				BB5B02D71F5E1B880084D86B /* AppKit Extensions */,
				BBC3C84F1C93164700E10D59 /* UIKit Extensions */,
			);
			path = Sources;
			sourceTree = "<group>";
		};
		BBB55AC01C8F80020050DDA9 /* Tests */ = {
			isa = PBXGroup;
			children = (
				BBB55AC31C8F80020050DDA9 /* Info.plist */,
				BBB55BA41C8FCE2C0050DDA9 /* TestUtilities.swift */,
				BBCD9DF41DA9104A00E85FB9 /* RefListTests.swift */,
				BBB55BD81C8FCE740050DDA9 /* Sources and Signals */,
				BBE9AAD21DC0F204000B3DD0 /* Abstract Observables */,
				BBB55BD91C8FCE9D0050DDA9 /* Observable Values */,
				BBB55BDA1C8FCEAE0050DDA9 /* Observable Arrays */,
				BBE4DF601DA56530005EC162 /* Observable Sets */,
				BBEA2A4C1DBFE60500CCCB08 /* Foundation Extensions */,
				BB8D366C1DA116AA000D44C5 /* Examples */,
			);
			name = Tests;
			path = Tests/GlueKitTests;
			sourceTree = "<group>";
		};
		BBB55B921C8FCCD40050DDA9 /* Tools */ = {
			isa = PBXGroup;
			children = (
				BBB55B251C8FCC810050DDA9 /* Locks.swift */,
				BBB55B2B1C8FCC810050DDA9 /* Reference.swift */,
				BB69A7EE1D6AFF1A001D2821 /* Abstract.swift */,
				BBF3EB0D1D99ACDE006AC7CD /* RefList.swift */,
			);
			name = Tools;
			sourceTree = "<group>";
		};
		BBB55B931C8FCD010050DDA9 /* Sources and Signals */ = {
			isa = PBXGroup;
			children = (
				BB9D73CE1DBB38F900E20D67 /* Sink.swift */,
				BB6CE3B31DC4C21C00295C55 /* TransformedSink.swift */,
				BB9D73FD1DBE061D00E20D67 /* OwnedSink.swift */,
				BBB55B301C8FCC810050DDA9 /* Source.swift */,
				BBB55B221C8FCC810050DDA9 /* Connector.swift */,
				BB9D73C81DBB2EB400E20D67 /* Connect.swift */,
				BBB55B2E1C8FCC810050DDA9 /* Signal.swift */,
				BBB55B2F1C8FCC810050DDA9 /* SimpleSources.swift */,
				BBB55B261C8FCC810050DDA9 /* MergedSource.swift */,
				BB5B02DA1F5E3FC50084D86B /* ArrayGatheringSource.swift */,
				BB5B02DF1F5E3FDE0084D86B /* SetGatheringSource.swift */,
				BBB55B311C8FCC810050DDA9 /* TransformedSource.swift */,
				BBEA2A3E1DBFE38F00CCCB08 /* BufferedSource.swift */,
				BBEA2A391DBFE37A00CCCB08 /* BracketingSource.swift */,
				BBF7B9531EACEB0100073DF8 /* AccumulatedSource.swift */,
			);
			name = "Sources and Signals";
			sourceTree = "<group>";
		};
		BBB55B941C8FCD320050DDA9 /* Abstract Observable */ = {
			isa = PBXGroup;
			children = (
				BB8990041D5DF8630097F350 /* Change.swift */,
				BBE9AAC91DC0F0A5000B3DD0 /* Update.swift */,
				BBE4DF3F1DA3A88C005EC162 /* ObservableType.swift */,
				BB9D73E51DBB727300E20D67 /* ChangesSource.swift */,
				BB9D73DF1DBB61C100E20D67 /* TransactionalThing.swift */,
			);
			name = "Abstract Observable";
			sourceTree = "<group>";
		};
		BBB55B951C8FCD4E0050DDA9 /* Observable Arrays */ = {
			isa = PBXGroup;
			children = (
				BBB55B1F1C8FCC810050DDA9 /* ArrayChange.swift */,
				BB1657E61D71D65900094BAC /* ArrayChangeSeparation.swift */,
				BBB55B2A1C8FCC810050DDA9 /* ObservableArray.swift */,
				BBB55B341C8FCC820050DDA9 /* UpdatableArray.swift */,
				BBB55B201C8FCC810050DDA9 /* ArrayVariable.swift */,
				BB69A7FF1D6B2377001D2821 /* BufferedArray.swift */,
				BB69A83F1D6B9A7E001D2821 /* ArrayMappingForValue.swift */,
				BBB55B2D1C8FCC810050DDA9 /* ArrayMappingForValueField.swift */,
				BB7E04C71DA7233B00BE3051 /* ArrayMappingForArrayField.swift */,
				BB7E04E01DA7255D00BE3051 /* ArrayFilteringIndexmap.swift */,
				BB82E3E01D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift */,
				BB7E04E51DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift */,
				BBCD9DF81DAA885E00E85FB9 /* ArrayFolding.swift */,
				BB3D929A1D64862D003BEDBF /* ArrayReference.swift */,
				BB69A83A1D6B90F5001D2821 /* ArrayConcatenation.swift */,
				BBE4DF491DA409EE005EC162 /* DistinctUnion.swift */,
			);
			name = "Observable Arrays";
			sourceTree = "<group>";
		};
		BBB55BD81C8FCE740050DDA9 /* Sources and Signals */ = {
			isa = PBXGroup;
			children = (
				BBCD9E3D1DABC81A00E85FB9 /* MockSink.swift */,
				BBEA2A2A1DBF9E9C00CCCB08 /* AnySinkTests.swift */,
				BBEA2A331DBFC4C300CCCB08 /* AnySourceTests.swift */,
				BBB55BA11C8FCE2C0050DDA9 /* SignalTests.swift */,
				BBB55BA21C8FCE2C0050DDA9 /* SimpleSourcesTests.swift */,
				BBB55B9B1C8FCE2C0050DDA9 /* MergedSourceTests.swift */,
				BBB55BA31C8FCE2C0050DDA9 /* SourceOperatorTests.swift */,
				BBE9AAD31DC0F474000B3DD0 /* BufferedSourceTests.swift */,
				BBE9AAD71DC0FC17000B3DD0 /* BracketingSourceTests.swift */,
				BBCD9E511DAC1B1300E85FB9 /* ConnectorTests.swift */,
			);
			name = "Sources and Signals";
			sourceTree = "<group>";
		};
		BBB55BD91C8FCE9D0050DDA9 /* Observable Values */ = {
			isa = PBXGroup;
			children = (
				BB170F3D1DC221180000443E /* ValueChangeTests.swift */,
				BBB55B9D1C8FCE2C0050DDA9 /* ObservableValueTests.swift */,
				BB170F411DC22A300000443E /* UpdatableValueTests.swift */,
				BBB55BA61C8FCE2C0050DDA9 /* TwoWayBindingTests.swift */,
				BBB55BA71C8FCE2C0050DDA9 /* VariableTests.swift */,
				BBB55B9E1C8FCE2C0050DDA9 /* DistinctTests.swift */,
				BB88C4121DC3B65F00C7EC3C /* ValueBufferingTests.swift */,
				BBB55BA01C8FCE2C0050DDA9 /* ValueMappingTests.swift */,
				BBCD9E311DAAD66500E85FB9 /* CombinedObservableTests.swift */,
				BBCD9E351DAAD74600E85FB9 /* CombinedUpdatableTests.swift */,
				BBCD9E391DABC45000E85FB9 /* TypeHelperTests.swift */,
				BBBBEC911DCA1D43000B646D /* ValueReferenceTests.swift */,
			);
			name = "Observable Values";
			sourceTree = "<group>";
		};
		BBB55BDA1C8FCEAE0050DDA9 /* Observable Arrays */ = {
			isa = PBXGroup;
			children = (
				BB568AF61DA6A9EE00BC4B58 /* MockArrayObserver.swift */,
				BBA033651DA7CFFE00E83AC1 /* ArrayModificationTests.swift */,
				BBA033691DA7D03300E83AC1 /* ArrayChangeTests.swift */,
				BBC36AE61DA83E0E00AB3E9D /* ArrayChangeSeparationTests.swift */,
				BBCD9E451DABEA5500E85FB9 /* ObservableArrayTests.swift */,
				BBB55B981C8FCE2C0050DDA9 /* ArrayVariableTests.swift */,
				BBBBECAA1DCA4168000B646D /* ArrayBufferingTests.swift */,
				BBB55B9F1C8FCE2C0050DDA9 /* ArrayMappingTests.swift */,
				BBC4AE4D1D9A829500FF7DE0 /* ArrayFilteringTests.swift */,
				BBCD9DFD1DAA8F7800E85FB9 /* ArrayFoldingTests.swift */,
				BBE4DF4E1DA412A0005EC162 /* DistinctUnionTests.swift */,
				BBCD9E491DABFA2900E85FB9 /* ArrayConcatenationTests.swift */,
				BBBBEC951DCA1FEB000B646D /* ArrayReferenceTests.swift */,
			);
			name = "Observable Arrays";
			sourceTree = "<group>";
		};
		BBB55BDB1C8FCFAD0050DDA9 /* Documentation */ = {
			isa = PBXGroup;
			children = (
				BBB55BDC1C8FCFAD0050DDA9 /* Overview.md */,
				BB015F4E1DC624FB00C8C05A /* Language Enhancements.md */,
			);
			path = Documentation;
			sourceTree = "<group>";
		};
		BBB55BE31C8FD1C60050DDA9 /* PerformanceTests */ = {
			isa = PBXGroup;
			children = (
				BBB55BEA1C8FD25F0050DDA9 /* GlueKitPerformanceTests.swift */,
				BBB55BE61C8FD1C60050DDA9 /* Info.plist */,
			);
			name = PerformanceTests;
			path = Tests/PerformanceTests;
			sourceTree = "<group>";
		};
		BBC3C84F1C93164700E10D59 /* UIKit Extensions */ = {
			isa = PBXGroup;
			children = (
				BBC3C84D1C93164200E10D59 /* UIControl Glue.swift */,
				BB948BC01DD720FE00B0734C /* UISwitch Glue.swift */,
				BBF7B9511EACE69B00073DF8 /* UILabel Glue.swift */,
				BBB4F2511C9594A9002532CC /* UIDevice Glue.swift */,
				BB3982EC1EC109C4000CDCB5 /* UISearchBar Glue.swift */,
				BBF7B95F1EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift */,
				BBB4F26E1C99E6CB002532CC /* UIGestureRecognizer Glue.swift */,
				BB318F6A1CB9922F0086EE83 /* UIBarButtonItem Extensions.swift */,
				BB67E5511C9B6A63002B0AB5 /* CADisplayLink Extensions.swift */,
			);
			name = "UIKit Extensions";
			sourceTree = "<group>";
		};
		BBE4DF3E1DA3A869005EC162 /* Observable Values */ = {
			isa = PBXGroup;
			children = (
				BBE4DF441DA3A908005EC162 /* ValueChange.swift */,
				BBB55B291C8FCC810050DDA9 /* ObservableValue.swift */,
				BBB55B331C8FCC820050DDA9 /* UpdatableValue.swift */,
				BB948BBB1DD5EFC900B0734C /* ComputedUpdatable.swift */,
				BB9D73EE1DBDFEE400E20D67 /* TwoWayBinding.swift */,
				BBB55B351C8FCC820050DDA9 /* Variable.swift */,
				BBB55B281C8FCC810050DDA9 /* BufferedValue.swift */,
				BBCD9E271DAAD2B900E85FB9 /* DistinctValue.swift */,
				BBCD9E221DAAD26200E85FB9 /* CompositeObservable.swift */,
				BBCD9E2C1DAAD4BC00E85FB9 /* CompositeUpdatable.swift */,
				BBCD9E0E1DAAC33700E85FB9 /* ValueMappingForValue.swift */,
				BBCD9E181DAAC50900E85FB9 /* ValueMappingForSourceField.swift */,
				BBB55B2C1C8FCC810050DDA9 /* ValueMappingForValueField.swift */,
				BBCD9E131DAAC4DC00E85FB9 /* ValueMappingForArrayField.swift */,
				BBCD9E1D1DAAC7E600E85FB9 /* ValueMappingForSetField.swift */,
				BBBBEC8C1DCA1AEB000B646D /* ValueReference.swift */,
			);
			name = "Observable Values";
			sourceTree = "<group>";
		};
		BBE4DF601DA56530005EC162 /* Observable Sets */ = {
			isa = PBXGroup;
			children = (
				BB568AF21DA6942700BC4B58 /* MockSetObserver.swift */,
				BBCD9E411DABD4BE00E85FB9 /* ObservableSetTests.swift */,
				BBCD9E4D1DABFE8800E85FB9 /* SetVariableTests.swift */,
				BBBBECAE1DCA446A000B646D /* SetBufferingTests.swift */,
				BBE4DF611DA5654F005EC162 /* SetMappingTests.swift */,
				BB568AEE1DA693F700BC4B58 /* SetFilteringTests.swift */,
				BB471D991DA57FF8002550B0 /* SetSortingTests.swift */,
				BBCD9E061DAA918400E85FB9 /* SetFoldingTests.swift */,
				BBBBEC991DCA223A000B646D /* SetReferenceTests.swift */,
			);
			name = "Observable Sets";
			sourceTree = "<group>";
		};
		BBE9AAD21DC0F204000B3DD0 /* Abstract Observables */ = {
			isa = PBXGroup;
			children = (
				BBCD9E0A1DAAB6E700E85FB9 /* MockUpdateSink.swift */,
				BB170F271DC106DE0000443E /* TestChange.swift */,
				BB170F2B1DC10D350000443E /* TestObservable.swift */,
				BB170F331DC110BD0000443E /* TestUpdatable.swift */,
				BBE9AACE1DC0F1F6000B3DD0 /* ChangeTests.swift */,
				BB170F231DC1066D0000443E /* UpdateTests.swift */,
				BB88C40D1DC3A08B00C7EC3C /* ObservableTypeTests.swift */,
				BB170F2F1DC10DDB0000443E /* ChangesSourceTests.swift */,
				BB170F371DC1545E0000443E /* TransactionStateTests.swift */,
			);
			name = "Abstract Observables";
			sourceTree = "<group>";
		};
		BBEA2A4C1DBFE60500CCCB08 /* Foundation Extensions */ = {
			isa = PBXGroup;
			children = (
				BBB55BA51C8FCE2C0050DDA9 /* TimerSourceTests.swift */,
				BBB55B9A1C8FCE2C0050DDA9 /* KVOSupportTests.swift */,
				BBB55B9C1C8FCE2C0050DDA9 /* NotificationCenterSupportTests.swift */,
				BBBBEC9D1DCA2FAB000B646D /* NSUserDefaultsSupportTests.swift */,
				BBBBECA11DCA3AA8000B646D /* DispatchSourceTests.swift */,
			);
			name = "Foundation Extensions";
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXHeadersBuildPhase section */
		BBB55AAF1C8F80020050DDA9 /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AD11C8F88F20050DDA9 /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AEE1C8F8BE00050DDA9 /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AFB1C8F8CBB0050DDA9 /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXHeadersBuildPhase section */

/* Begin PBXNativeTarget section */
		BB351AFB1DB81E67005F083F /* PerformanceTests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = BB351B041DB81E67005F083F /* Build configuration list for PBXNativeTarget "PerformanceTests" */;
			buildPhases = (
				BB351AF81DB81E67005F083F /* Sources */,
				BB351AF91DB81E67005F083F /* Frameworks */,
				BB351AFA1DB81E67005F083F /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				BB351B031DB81E67005F083F /* PBXTargetDependency */,
			);
			name = PerformanceTests;
			productName = PerformanceTests;
			productReference = BB351AFC1DB81E67005F083F /* PerformanceTests.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
		BBB55AB11C8F80020050DDA9 /* iOS */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = BBB55AC61C8F80020050DDA9 /* Build configuration list for PBXNativeTarget "iOS" */;
			buildPhases = (
				BBB55AAD1C8F80020050DDA9 /* Sources */,
				BBB55AAE1C8F80020050DDA9 /* Frameworks */,
				BBB55AAF1C8F80020050DDA9 /* Headers */,
				BBB55AB01C8F80020050DDA9 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = iOS;
			productName = GlueKit;
			productReference = BBB55AB21C8F80020050DDA9 /* GlueKit.framework */;
			productType = "com.apple.product-type.framework";
		};
		BBB55ABB1C8F80020050DDA9 /* iOS Tests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = BBB55AC91C8F80020050DDA9 /* Build configuration list for PBXNativeTarget "iOS Tests" */;
			buildPhases = (
				BBB55AB81C8F80020050DDA9 /* Sources */,
				BBB55AB91C8F80020050DDA9 /* Frameworks */,
				BBB55ABA1C8F80020050DDA9 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				BBB55ABF1C8F80020050DDA9 /* PBXTargetDependency */,
			);
			name = "iOS Tests";
			productName = GlueKitTests;
			productReference = BBB55ABC1C8F80020050DDA9 /* GlueKit-Test.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
		BBB55AD31C8F88F20050DDA9 /* macOS */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = BBB55AE51C8F88F20050DDA9 /* Build configuration list for PBXNativeTarget "macOS" */;
			buildPhases = (
				BBB55ACF1C8F88F20050DDA9 /* Sources */,
				BBB55AD01C8F88F20050DDA9 /* Frameworks */,
				BBB55AD11C8F88F20050DDA9 /* Headers */,
				BBB55AD21C8F88F20050DDA9 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = macOS;
			productName = GlueKit;
			productReference = BBB55AD41C8F88F20050DDA9 /* GlueKit.framework */;
			productType = "com.apple.product-type.framework";
		};
		BBB55ADC1C8F88F20050DDA9 /* macOS Tests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = BBB55AE81C8F88F20050DDA9 /* Build configuration list for PBXNativeTarget "macOS Tests" */;
			buildPhases = (
				BBB55AD91C8F88F20050DDA9 /* Sources */,
				BBB55ADA1C8F88F20050DDA9 /* Frameworks */,
				BBB55ADB1C8F88F20050DDA9 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				BBB55AE01C8F88F20050DDA9 /* PBXTargetDependency */,
			);
			name = "macOS Tests";
			productName = GlueKitTests;
			productReference = BBB55ADD1C8F88F20050DDA9 /* GlueKit-Test.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
		BBB55AF01C8F8BE00050DDA9 /* watchOS */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = BBB55AF61C8F8BE00050DDA9 /* Build configuration list for PBXNativeTarget "watchOS" */;
			buildPhases = (
				BBB55AEC1C8F8BE00050DDA9 /* Sources */,
				BBB55AED1C8F8BE00050DDA9 /* Frameworks */,
				BBB55AEE1C8F8BE00050DDA9 /* Headers */,
				BBB55AEF1C8F8BE00050DDA9 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = watchOS;
			productName = GlueKit;
			productReference = BBB55AF11C8F8BE00050DDA9 /* GlueKit.framework */;
			productType = "com.apple.product-type.framework";
		};
		BBB55AFD1C8F8CBB0050DDA9 /* tvOS */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = BBB55B0F1C8F8CBC0050DDA9 /* Build configuration list for PBXNativeTarget "tvOS" */;
			buildPhases = (
				BBB55AF91C8F8CBB0050DDA9 /* Sources */,
				BBB55AFA1C8F8CBB0050DDA9 /* Frameworks */,
				BBB55AFB1C8F8CBB0050DDA9 /* Headers */,
				BBB55AFC1C8F8CBB0050DDA9 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = tvOS;
			productName = GlueKit;
			productReference = BBB55AFE1C8F8CBB0050DDA9 /* GlueKit.framework */;
			productType = "com.apple.product-type.framework";
		};
		BBB55B061C8F8CBB0050DDA9 /* tvOS Tests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = BBB55B121C8F8CBC0050DDA9 /* Build configuration list for PBXNativeTarget "tvOS Tests" */;
			buildPhases = (
				BBB55B031C8F8CBB0050DDA9 /* Sources */,
				BBB55B041C8F8CBB0050DDA9 /* Frameworks */,
				BBB55B051C8F8CBB0050DDA9 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				BBB55B0A1C8F8CBC0050DDA9 /* PBXTargetDependency */,
			);
			name = "tvOS Tests";
			productName = GlueKitTests;
			productReference = BBB55B071C8F8CBB0050DDA9 /* GlueKit-Test.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		BBB55AA91C8F80020050DDA9 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastSwiftUpdateCheck = 0800;
				LastUpgradeCheck = 0900;
				ORGANIZATIONNAME = "Károly Lőrentey";
				TargetAttributes = {
					BB351AFB1DB81E67005F083F = {
						CreatedOnToolsVersion = 8.0;
						ProvisioningStyle = Automatic;
					};
					BBB55AB11C8F80020050DDA9 = {
						CreatedOnToolsVersion = 7.3;
						LastSwiftMigration = 0800;
					};
					BBB55ABB1C8F80020050DDA9 = {
						CreatedOnToolsVersion = 7.3;
						LastSwiftMigration = 0800;
						ProvisioningStyle = Automatic;
					};
					BBB55AD31C8F88F20050DDA9 = {
						CreatedOnToolsVersion = 7.3;
						LastSwiftMigration = 0800;
						ProvisioningStyle = Manual;
					};
					BBB55ADC1C8F88F20050DDA9 = {
						CreatedOnToolsVersion = 7.3;
						LastSwiftMigration = 0800;
						ProvisioningStyle = Automatic;
					};
					BBB55AF01C8F8BE00050DDA9 = {
						CreatedOnToolsVersion = 7.3;
						LastSwiftMigration = 0800;
					};
					BBB55AFD1C8F8CBB0050DDA9 = {
						CreatedOnToolsVersion = 7.3;
						LastSwiftMigration = 0800;
					};
					BBB55B061C8F8CBB0050DDA9 = {
						CreatedOnToolsVersion = 7.3;
						LastSwiftMigration = 0800;
						ProvisioningStyle = Automatic;
					};
				};
			};
			buildConfigurationList = BBB55AAC1C8F80020050DDA9 /* Build configuration list for PBXProject "GlueKit" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
			);
			mainGroup = BBB55AA81C8F80020050DDA9;
			productRefGroup = BBB55AB31C8F80020050DDA9 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				BBB55AB11C8F80020050DDA9 /* iOS */,
				BBB55AD31C8F88F20050DDA9 /* macOS */,
				BBB55AF01C8F8BE00050DDA9 /* watchOS */,
				BBB55AFD1C8F8CBB0050DDA9 /* tvOS */,
				BBB55ABB1C8F80020050DDA9 /* iOS Tests */,
				BBB55ADC1C8F88F20050DDA9 /* macOS Tests */,
				BBB55B061C8F8CBB0050DDA9 /* tvOS Tests */,
				BB351AFB1DB81E67005F083F /* PerformanceTests */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		BB351AFA1DB81E67005F083F /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AB01C8F80020050DDA9 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55ABA1C8F80020050DDA9 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AD21C8F88F20050DDA9 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55ADB1C8F88F20050DDA9 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AEF1C8F8BE00050DDA9 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AFC1C8F8CBB0050DDA9 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55B051C8F8CBB0050DDA9 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		BB351AF81DB81E67005F083F /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB351B071DB81EE1005F083F /* GlueKitPerformanceTests.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		BBB55AAD1C8F80020050DDA9 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB9D742F1DBE7B3B00E20D67 /* SetFilteringOnPredicate.swift in Sources */,
				BBB55B5E1C8FCC820050DDA9 /* ObservableValue.swift in Sources */,
				BB7E04E61DA725A500BE3051 /* ArrayFilteringOnObservableBool.swift in Sources */,
				BB948BBC1DD5EFC900B0734C /* ComputedUpdatable.swift in Sources */,
				BB9D74451DBEB5F300E20D67 /* DistinctUnion.swift in Sources */,
				BB9D744A1DBEC82C00E20D67 /* ValueMappingForSetField.swift in Sources */,
				BBB55B821C8FCC820050DDA9 /* TimerSource.swift in Sources */,
				BB1657E71D71D65900094BAC /* ArrayChangeSeparation.swift in Sources */,
				BBBBECA61DCA3FF0000B646D /* BufferedSet.swift in Sources */,
				BB69A83B1D6B90F5001D2821 /* ArrayConcatenation.swift in Sources */,
				BB6CE3B41DC4C21C00295C55 /* TransformedSink.swift in Sources */,
				BB82E3E11D98F34E0035DDAD /* ArrayFilteringOnPredicate.swift in Sources */,
				BBF7B9601EAEA60900073DF8 /* ArrayBasedTableViewDataSource.swift in Sources */,
				BB9D742E1DBE7B3B00E20D67 /* SetMappingForArrayField.swift in Sources */,
				BB9D74301DBE7B3B00E20D67 /* SetFilteringOnObservableBool.swift in Sources */,
				BBB55B761C8FCC820050DDA9 /* SimpleSources.swift in Sources */,
				BBC2A8291CBC14C600394D24 /* NSObject Glue.swift in Sources */,
				BB5B02E01F5E3FDE0084D86B /* SetGatheringSource.swift in Sources */,
				BB69A7FB1D6B1D94001D2821 /* ObservableArray.swift in Sources */,
				BBF3EB0E1D99ACDE006AC7CD /* RefList.swift in Sources */,
				BBB55B7E1C8FCC820050DDA9 /* TransformedSource.swift in Sources */,
				BB9D73E61DBB727300E20D67 /* ChangesSource.swift in Sources */,
				BBE4DF451DA3A908005EC162 /* ValueChange.swift in Sources */,
				BBB55B661C8FCC820050DDA9 /* Reference.swift in Sources */,
				BBCD9E281DAAD2B900E85FB9 /* DistinctValue.swift in Sources */,
				BBB55B721C8FCC820050DDA9 /* Signal.swift in Sources */,
				BB9D74331DBE7B3B00E20D67 /* SetSortingByMappingToObservableComparable.swift in Sources */,
				BB69A8081D6B442B001D2821 /* ArrayVariable.swift in Sources */,
				BB9D74311DBE7B3B00E20D67 /* SetSortingByComparator.swift in Sources */,
				BBB55B5A1C8FCC820050DDA9 /* BufferedValue.swift in Sources */,
				BBCD9E231DAAD26200E85FB9 /* CompositeObservable.swift in Sources */,
				BB9D74271DBE7B3B00E20D67 /* SetVariable.swift in Sources */,
				BB9D742D1DBE7B3B00E20D67 /* SetMappingForSetField.swift in Sources */,
				BBB55B521C8FCC820050DDA9 /* MergedSource.swift in Sources */,
				BB69A7F31D6B1D7B001D2821 /* Change.swift in Sources */,
				BB69A7F71D6B1D82001D2821 /* ArrayChange.swift in Sources */,
				BB7E04E11DA7255D00BE3051 /* ArrayFilteringIndexmap.swift in Sources */,
				BB9D73E01DBB61C100E20D67 /* TransactionalThing.swift in Sources */,
				BB9D73CF1DBB38F900E20D67 /* Sink.swift in Sources */,
				BB69A81D1D6B71F9001D2821 /* SetChange.swift in Sources */,
				BB69A8101D6B5397001D2821 /* ValueMappingForValueField.swift in Sources */,
				BBB55B4E1C8FCC820050DDA9 /* Locks.swift in Sources */,
				BBB55B8E1C8FCC820050DDA9 /* Variable.swift in Sources */,
				BBF7B9591EACFC3B00073DF8 /* DependentValue.swift in Sources */,
Download .txt
gitextract_rs09iz2z/

├── .codecov.yml
├── .gitignore
├── .gitmodules
├── .swift-version
├── .travis.yml
├── Cartfile
├── Cartfile.resolved
├── Demo.playground/
│   ├── Pages/
│   │   └── Untitled Page.xcplaygroundpage/
│   │       ├── Contents.swift
│   │       └── timeline.xctimeline
│   └── contents.xcplayground
├── Documentation/
│   ├── Language Enhancements.md
│   └── Overview.md
├── GlueKit.podspec
├── GlueKit.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── GlueKit.xcscmblueprint
│   └── xcshareddata/
│       ├── xcbaselines/
│       │   ├── BB351AFB1DB81E67005F083F.xcbaseline/
│       │   │   ├── EBF79DD4-EE66-4D33-B51C-EE37857B70A1.plist
│       │   │   └── Info.plist
│       │   └── BBB55BE11C8FD1C60050DDA9.xcbaseline/
│       │       ├── DD663408-0BA9-46F9-868F-F1570927CA52.plist
│       │       └── Info.plist
│       └── xcschemes/
│           ├── GlueKit-PerformanceTests.xcscheme
│           ├── GlueKit-iOS.xcscheme
│           ├── GlueKit-macOS.xcscheme
│           ├── GlueKit-tvOS.xcscheme
│           └── GlueKit-watchOS.xcscheme
├── GlueKit.xcworkspace/
│   ├── contents.xcworkspacedata
│   └── xcshareddata/
│       └── GlueKit.xcscmblueprint
├── LICENSE.md
├── Package.swift
├── README.md
├── Sources/
│   ├── Abstract.swift
│   ├── AccumulatedSource.swift
│   ├── ArrayBasedTableViewDataSource.swift
│   ├── ArrayChange.swift
│   ├── ArrayChangeSeparation.swift
│   ├── ArrayConcatenation.swift
│   ├── ArrayFilteringIndexmap.swift
│   ├── ArrayFilteringOnObservableBool.swift
│   ├── ArrayFilteringOnPredicate.swift
│   ├── ArrayFolding.swift
│   ├── ArrayGatheringSource.swift
│   ├── ArrayMappingForArrayField.swift
│   ├── ArrayMappingForValue.swift
│   ├── ArrayMappingForValueField.swift
│   ├── ArrayReference.swift
│   ├── ArrayVariable.swift
│   ├── BracketingSource.swift
│   ├── BufferedArray.swift
│   ├── BufferedSet.swift
│   ├── BufferedSource.swift
│   ├── BufferedValue.swift
│   ├── CADisplayLink Extensions.swift
│   ├── Change.swift
│   ├── ChangesSource.swift
│   ├── CompositeObservable.swift
│   ├── CompositeUpdatable.swift
│   ├── ComputedUpdatable.swift
│   ├── Connect.swift
│   ├── Connector.swift
│   ├── DependentValue.swift
│   ├── DispatchSource.swift
│   ├── DistinctUnion.swift
│   ├── DistinctValue.swift
│   ├── Info.plist
│   ├── Locks.swift
│   ├── MergedSource.swift
│   ├── NSButton Glue.swift
│   ├── NSControl Glue.swift
│   ├── NSNotificationCenter Support.swift
│   ├── NSObject Glue.swift
│   ├── NSPopUpButton Glue.swift
│   ├── NSTextField Glue.swift
│   ├── ObservableArray.swift
│   ├── ObservableContains.swift
│   ├── ObservableSet.swift
│   ├── ObservableType.swift
│   ├── ObservableValue.swift
│   ├── OwnedSink.swift
│   ├── RefList.swift
│   ├── Reference.swift
│   ├── SetChange.swift
│   ├── SetFilteringOnObservableBool.swift
│   ├── SetFilteringOnPredicate.swift
│   ├── SetFolding.swift
│   ├── SetGatheringSource.swift
│   ├── SetMappingBase.swift
│   ├── SetMappingForArrayField.swift
│   ├── SetMappingForSequence.swift
│   ├── SetMappingForSetField.swift
│   ├── SetMappingForValue.swift
│   ├── SetMappingForValueField.swift
│   ├── SetReference.swift
│   ├── SetSortingByComparableField.swift
│   ├── SetSortingByComparator.swift
│   ├── SetSortingByMappingToComparable.swift
│   ├── SetSortingByMappingToObservableComparable.swift
│   ├── SetVariable.swift
│   ├── Signal.swift
│   ├── SimpleSources.swift
│   ├── Sink.swift
│   ├── Source.swift
│   ├── TimerSource.swift
│   ├── TransactionalThing.swift
│   ├── TransformedSink.swift
│   ├── TransformedSource.swift
│   ├── TwoWayBinding.swift
│   ├── Type Helpers.swift
│   ├── UIBarButtonItem Extensions.swift
│   ├── UIControl Glue.swift
│   ├── UIDevice Glue.swift
│   ├── UIGestureRecognizer Glue.swift
│   ├── UILabel Glue.swift
│   ├── UISearchBar Glue.swift
│   ├── UISwitch Glue.swift
│   ├── UpdatableArray.swift
│   ├── UpdatableSet.swift
│   ├── UpdatableValue.swift
│   ├── Update.swift
│   ├── ValueChange.swift
│   ├── ValueMappingForArrayField.swift
│   ├── ValueMappingForSetField.swift
│   ├── ValueMappingForSourceField.swift
│   ├── ValueMappingForValue.swift
│   ├── ValueMappingForValueField.swift
│   ├── ValueReference.swift
│   └── Variable.swift
├── Tests/
│   ├── GlueKitTests/
│   │   ├── AnySinkTests.swift
│   │   ├── AnySourceTests.swift
│   │   ├── ArrayBufferingTests.swift
│   │   ├── ArrayChangeSeparationTests.swift
│   │   ├── ArrayChangeTests.swift
│   │   ├── ArrayConcatenationTests.swift
│   │   ├── ArrayFilteringTests.swift
│   │   ├── ArrayFoldingTests.swift
│   │   ├── ArrayMappingTests.swift
│   │   ├── ArrayModificationTests.swift
│   │   ├── ArrayReferenceTests.swift
│   │   ├── ArrayVariableTests.swift
│   │   ├── Bookshelf.swift
│   │   ├── BracketingSourceTests.swift
│   │   ├── BufferedSourceTests.swift
│   │   ├── ChangeTests.swift
│   │   ├── ChangesSourceTests.swift
│   │   ├── CombinedObservableTests.swift
│   │   ├── CombinedUpdatableTests.swift
│   │   ├── ConnectorTests.swift
│   │   ├── DispatchSourceTests.swift
│   │   ├── DistinctTests.swift
│   │   ├── DistinctUnionTests.swift
│   │   ├── Info.plist
│   │   ├── KVOSupportTests.swift
│   │   ├── MergedSourceTests.swift
│   │   ├── MockArrayObserver.swift
│   │   ├── MockSetObserver.swift
│   │   ├── MockSink.swift
│   │   ├── MockUpdateSink.swift
│   │   ├── NSUserDefaultsSupportTests.swift
│   │   ├── NotificationCenterSupportTests.swift
│   │   ├── ObservableArrayTests.swift
│   │   ├── ObservableSetTests.swift
│   │   ├── ObservableTypeTests.swift
│   │   ├── ObservableValueTests.swift
│   │   ├── RefListTests.swift
│   │   ├── SetBufferingTests.swift
│   │   ├── SetFilteringTests.swift
│   │   ├── SetFoldingTests.swift
│   │   ├── SetMappingTests.swift
│   │   ├── SetReferenceTests.swift
│   │   ├── SetSortingTests.swift
│   │   ├── SetVariableTests.swift
│   │   ├── SignalTests.swift
│   │   ├── SimpleSourcesTests.swift
│   │   ├── SourceOperatorTests.swift
│   │   ├── TestChange.swift
│   │   ├── TestObservable.swift
│   │   ├── TestUpdatable.swift
│   │   ├── TestUtilities.swift
│   │   ├── TimerSourceTests.swift
│   │   ├── TransactionStateTests.swift
│   │   ├── TwoWayBindingTests.swift
│   │   ├── TypeHelperTests.swift
│   │   ├── UpdatableValueTests.swift
│   │   ├── UpdateTests.swift
│   │   ├── ValueBufferingTests.swift
│   │   ├── ValueChangeTests.swift
│   │   ├── ValueMappingTests.swift
│   │   ├── ValueReferenceTests.swift
│   │   └── VariableTests.swift
│   └── PerformanceTests/
│       ├── GlueKitPerformanceTests.swift
│       └── Info.plist
├── jazzy.sh
└── version.xcconfig
Condensed preview — 192 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,076K chars).
[
  {
    "path": ".codecov.yml",
    "chars": 236,
    "preview": "ignore:\n- \"/Tests/*\"\ncomment:\n  layout: \"header, diff\"\n  behavior: default\n  require_changes: no\ncoverage:\n  status:\n   "
  },
  {
    "path": ".gitignore",
    "chars": 62,
    "preview": ".build\n/Carthage/Build\n/Packages\nxcuserdata\n/Package.resolved\n"
  },
  {
    "path": ".gitmodules",
    "chars": 242,
    "preview": "[submodule \"Carthage/Checkouts/BTree\"]\n\tpath = Carthage/Checkouts/BTree\n\turl = https://github.com/attaswift/BTree.git\n[s"
  },
  {
    "path": ".swift-version",
    "chars": 6,
    "preview": "3.0.1\n"
  },
  {
    "path": ".travis.yml",
    "chars": 429,
    "preview": "language: objective-c\nosx_image: xcode9\nscript:\n- xcrun xcodebuild -workspace GlueKit.xcworkspace -scheme GlueKit-macOS "
  },
  {
    "path": "Cartfile",
    "chars": 66,
    "preview": "github \"attaswift/BTree\" ~> 4.1\ngithub \"attaswift/SipHash\" ~> 1.2\n"
  },
  {
    "path": "Cartfile.resolved",
    "chars": 70,
    "preview": "github \"attaswift/BTree\" \"v4.1.0\"\ngithub \"attaswift/SipHash\" \"v1.2.0\"\n"
  },
  {
    "path": "Demo.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift",
    "chars": 4311,
    "preview": "import GlueKit\nimport XCPlayground\n\n// Let's suppose we're writing an app for maintaining a catalogue for your books.\n//"
  },
  {
    "path": "Demo.playground/Pages/Untitled Page.xcplaygroundpage/timeline.xctimeline",
    "chars": 6012,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Timeline\n   version = \"3.0\">\n   <TimelineItems>\n      <LoggerValueHistoryTimelin"
  },
  {
    "path": "Demo.playground/contents.xcplayground",
    "chars": 107,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<playground version='6.0' target-platform='macos'/>"
  },
  {
    "path": "Documentation/Language Enhancements.md",
    "chars": 17092,
    "preview": "# Potential Swift Improvements That Would Help GlueKit\n\nThis document lists a couple of potential improvements to the Sw"
  },
  {
    "path": "Documentation/Overview.md",
    "chars": 4869,
    "preview": "\n# Overview of GlueKit\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDI"
  },
  {
    "path": "GlueKit.podspec",
    "chars": 837,
    "preview": "Pod::Spec.new do |spec|\n  spec.name         = 'GlueKit'\n  spec.version      = '0.2.0'\n  spec.ios.deployment_target = \"9."
  },
  {
    "path": "GlueKit.xcodeproj/project.pbxproj",
    "chars": 219394,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "GlueKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 152,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:GlueKit.xcodepr"
  },
  {
    "path": "GlueKit.xcodeproj/project.xcworkspace/xcshareddata/GlueKit.xcscmblueprint",
    "chars": 1656,
    "preview": "{\n  \"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey\" : \"1C1227F33F1818028D5EE61FD15F57BEC36D44F4\",\n  \"DVTS"
  },
  {
    "path": "GlueKit.xcodeproj/xcshareddata/xcbaselines/BB351AFB1DB81E67005F083F.xcbaseline/EBF79DD4-EE66-4D33-B51C-EE37857B70A1.plist",
    "chars": 4859,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "GlueKit.xcodeproj/xcshareddata/xcbaselines/BB351AFB1DB81E67005F083F.xcbaseline/Info.plist",
    "chars": 912,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "GlueKit.xcodeproj/xcshareddata/xcbaselines/BBB55BE11C8FD1C60050DDA9.xcbaseline/DD663408-0BA9-46F9-868F-F1570927CA52.plist",
    "chars": 1159,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "GlueKit.xcodeproj/xcshareddata/xcbaselines/BBB55BE11C8FD1C60050DDA9.xcbaseline/Info.plist",
    "chars": 912,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "GlueKit.xcodeproj/xcshareddata/xcschemes/GlueKit-PerformanceTests.xcscheme",
    "chars": 4341,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0900\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "GlueKit.xcodeproj/xcshareddata/xcschemes/GlueKit-iOS.xcscheme",
    "chars": 3698,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0900\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "GlueKit.xcodeproj/xcshareddata/xcschemes/GlueKit-macOS.xcscheme",
    "chars": 3708,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0900\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "GlueKit.xcodeproj/xcshareddata/xcschemes/GlueKit-tvOS.xcscheme",
    "chars": 3703,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0900\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "GlueKit.xcodeproj/xcshareddata/xcschemes/GlueKit-watchOS.xcscheme",
    "chars": 2890,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0900\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "GlueKit.xcworkspace/contents.xcworkspacedata",
    "chars": 343,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Carthage/Check"
  },
  {
    "path": "GlueKit.xcworkspace/xcshareddata/GlueKit.xcscmblueprint",
    "chars": 2204,
    "preview": "{\n  \"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey\" : \"1C1227F33F1818028D5EE61FD15F57BEC36D44F4\",\n  \"DVTS"
  },
  {
    "path": "LICENSE.md",
    "chars": 1087,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015–2017 Károly Lőrentey\n\nPermission is hereby granted, free of charge, to any per"
  },
  {
    "path": "Package.swift",
    "chars": 718,
    "preview": "// swift-tools-version:4.0\nimport PackageDescription\n\nlet package = Package(\n    name: \"GlueKit\",\n    products: [\n      "
  },
  {
    "path": "README.md",
    "chars": 19985,
    "preview": "# GlueKit\n\n[![Swift 3](https://img.shields.io/badge/Swift-3.0-blue.svg)](https://swift.org) \n[![License](https://img.shi"
  },
  {
    "path": "Sources/Abstract.swift",
    "chars": 216,
    "preview": "//\n//  Abstract.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-22.\n//  Copyright © 2015–2017 Károly Lőre"
  },
  {
    "path": "Sources/AccumulatedSource.swift",
    "chars": 1467,
    "preview": "//\n//  AccumulatedSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2017-04-23.\n//  Copyright © 2015–2017 Ká"
  },
  {
    "path": "Sources/ArrayBasedTableViewDataSource.swift",
    "chars": 4260,
    "preview": "//\n//  ArrayBasedTableViewDataSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2017-04-24.\n//  Copyright © "
  },
  {
    "path": "Sources/ArrayChange.swift",
    "chars": 22806,
    "preview": "//\n//  ArrayChange.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-10.\n//  Copyright © 2015–2017 Károly L"
  },
  {
    "path": "Sources/ArrayChangeSeparation.swift",
    "chars": 5682,
    "preview": "//\n//  ArrayChangeSeparation.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-27.\n//  Copyright © 2015–201"
  },
  {
    "path": "Sources/ArrayConcatenation.swift",
    "chars": 3693,
    "preview": "//\n//  Concatenation.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-22.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/ArrayFilteringIndexmap.swift",
    "chars": 3546,
    "preview": "//\n//  ArrayFilteringIndexmap.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2015–20"
  },
  {
    "path": "Sources/ArrayFilteringOnObservableBool.swift",
    "chars": 5638,
    "preview": "//\n//  ArrayFilteringOnObservableBool.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright ©"
  },
  {
    "path": "Sources/ArrayFilteringOnPredicate.swift",
    "chars": 2624,
    "preview": "//\n//  ArrayFilteringOnPredicate.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-09-26.\n//  Copyright © 2015"
  },
  {
    "path": "Sources/ArrayFolding.swift",
    "chars": 2602,
    "preview": "//\n//  ArrayFolding.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2017 Károly "
  },
  {
    "path": "Sources/ArrayGatheringSource.swift",
    "chars": 1907,
    "preview": "//\n//  ArrayGatheringSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2017-09-05.\n//  Copyright © 2017 Káro"
  },
  {
    "path": "Sources/ArrayMappingForArrayField.swift",
    "chars": 8055,
    "preview": "//\n//  ArrayMappingForArrayField.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2015"
  },
  {
    "path": "Sources/ArrayMappingForValue.swift",
    "chars": 6130,
    "preview": "//\n//  ArrayMappingForValue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-22.\n//  Copyright © 2015–2017"
  },
  {
    "path": "Sources/ArrayMappingForValueField.swift",
    "chars": 4349,
    "preview": "//\n//  ArrayMappingForValueField.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-10.\n//  Copyright © 2015"
  },
  {
    "path": "Sources/ArrayReference.swift",
    "chars": 3210,
    "preview": "//\n//  ArrayReference.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-17.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Sources/ArrayVariable.swift",
    "chars": 2698,
    "preview": "//\n//  ArrayVariable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-08.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/BracketingSource.swift",
    "chars": 2895,
    "preview": "//\n//  BracketingSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-25.\n//  Copyright © 2015–2017 Kár"
  },
  {
    "path": "Sources/BufferedArray.swift",
    "chars": 2179,
    "preview": "//\n//  BufferedArray.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-22.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/BufferedSet.swift",
    "chars": 2298,
    "preview": "//\n//  BufferedSet.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-02.\n//  Copyright © 2015–2017 Károly L"
  },
  {
    "path": "Sources/BufferedSource.swift",
    "chars": 736,
    "preview": "//\n//  BufferedSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-25.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Sources/BufferedValue.swift",
    "chars": 1609,
    "preview": "//\n//  Observable Transformations.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-07.\n//  Copyright © 201"
  },
  {
    "path": "Sources/CADisplayLink Extensions.swift",
    "chars": 1111,
    "preview": "//\n//  CADisplayLink Extensions.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-03-17.\n//  Copyright © 2015–"
  },
  {
    "path": "Sources/Change.swift",
    "chars": 2120,
    "preview": "//\n//  Change.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-12.\n//  Copyright © 2015–2017 Károly Lőrent"
  },
  {
    "path": "Sources/ChangesSource.swift",
    "chars": 2723,
    "preview": "//\n//  ChangesSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-22.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/CompositeObservable.swift",
    "chars": 10669,
    "preview": "//\n//  CompositeObservable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Sources/CompositeUpdatable.swift",
    "chars": 4518,
    "preview": "//\n//  CompositeUpdatable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Sources/ComputedUpdatable.swift",
    "chars": 1250,
    "preview": "//\n//  ComputedUpdatable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-11.\n//  Copyright © 2015–2017 Ká"
  },
  {
    "path": "Sources/Connect.swift",
    "chars": 3917,
    "preview": "//\n//  Connect.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-22.\n//  Copyright © 2015–2017 Károly Lőren"
  },
  {
    "path": "Sources/Connector.swift",
    "chars": 963,
    "preview": "//\n//  Connector.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-11-30.\n//  Copyright © 2015–2017 Károly Lőr"
  },
  {
    "path": "Sources/DependentValue.swift",
    "chars": 1940,
    "preview": "//\n//  DependentValue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2017-04-23.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Sources/DispatchSource.swift",
    "chars": 1453,
    "preview": "//\n//  DispatchSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-24.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Sources/DistinctUnion.swift",
    "chars": 3260,
    "preview": "//\n//  DistinctUnion.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-04.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/DistinctValue.swift",
    "chars": 4394,
    "preview": "//\n//  DistinctValue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/Info.plist",
    "chars": 820,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Sources/Locks.swift",
    "chars": 1762,
    "preview": "//\n//  Locks.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-01.\n//  Copyright © 2015–2017 Károly Lőrente"
  },
  {
    "path": "Sources/MergedSource.swift",
    "chars": 3135,
    "preview": "//\n//  MergedSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-04.\n//  Copyright © 2015–2017 Károly "
  },
  {
    "path": "Sources/NSButton Glue.swift",
    "chars": 1660,
    "preview": "//\n//  NSButton Glue.swift\n//  macOS\n//\n//  Created by Károly Lőrentey on 2017-09-05.\n//  Copyright © 2017 Károly Lőrent"
  },
  {
    "path": "Sources/NSControl Glue.swift",
    "chars": 4094,
    "preview": "//\n//  NSControl Glue.swift\n//  macOS\n//\n//  Created by Károly Lőrentey on 2017-09-05.\n//  Copyright © 2017 Károly Lőren"
  },
  {
    "path": "Sources/NSNotificationCenter Support.swift",
    "chars": 2446,
    "preview": "//\n//  NSNotificationCenter Support.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-11-30.\n//  Copyright © 2"
  },
  {
    "path": "Sources/NSObject Glue.swift",
    "chars": 12215,
    "preview": "//\n//  NSObject Glue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-04-11.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/NSPopUpButton Glue.swift",
    "chars": 3006,
    "preview": "//\n//  NSPopUpButton Glue.swift\n//  macOS\n//\n//  Created by Károly Lőrentey on 2017-09-05.\n//  Copyright © 2017 Károly L"
  },
  {
    "path": "Sources/NSTextField Glue.swift",
    "chars": 2610,
    "preview": "//\n//  NSTextField Glue.swift\n//  macOS\n//\n//  Created by Károly Lőrentey on 2017-09-05.\n//  Copyright © 2017 Károly Lőr"
  },
  {
    "path": "Sources/ObservableArray.swift",
    "chars": 9385,
    "preview": "//\n//  AnyObservableArray.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-11.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Sources/ObservableContains.swift",
    "chars": 1422,
    "preview": "//\n//  ObservableContains.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-02.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Sources/ObservableSet.swift",
    "chars": 8356,
    "preview": "//\n//  ObservableSet.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-12.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/ObservableType.swift",
    "chars": 2893,
    "preview": "//\n//  ObservableValueType.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-04.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Sources/ObservableValue.swift",
    "chars": 7180,
    "preview": "//\n//  Observable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-07.\n//  Copyright © 2015–2017 Károly Lő"
  },
  {
    "path": "Sources/OwnedSink.swift",
    "chars": 971,
    "preview": "//\n//  StrongMethodSink.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-24.\n//  Copyright © 2015–2017 Kár"
  },
  {
    "path": "Sources/RefList.swift",
    "chars": 21142,
    "preview": "//\n//  RefList.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-09-26.\n//  Copyright © 2015–2017 Károly Lőren"
  },
  {
    "path": "Sources/Reference.swift",
    "chars": 281,
    "preview": "//\n//  Reference.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-13.\n//  Copyright © 2015–2017 Károly Lőr"
  },
  {
    "path": "Sources/SetChange.swift",
    "chars": 2261,
    "preview": "//\n//  SetChange.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-12.\n//  Copyright © 2015–2017 Károly Lőr"
  },
  {
    "path": "Sources/SetFilteringOnObservableBool.swift",
    "chars": 5677,
    "preview": "//\n//  SetFilteringOnObservableBool.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2"
  },
  {
    "path": "Sources/SetFilteringOnPredicate.swift",
    "chars": 4126,
    "preview": "//\n//  SetFilteringOnPredicate.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-12.\n//  Copyright © 2015–2"
  },
  {
    "path": "Sources/SetFolding.swift",
    "chars": 2906,
    "preview": "//\n//  SetFolding.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2017 Károly Lő"
  },
  {
    "path": "Sources/SetGatheringSource.swift",
    "chars": 1904,
    "preview": "//\n//  SetGatheringSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2017-09-05.\n//  Copyright © 2017 Károly"
  },
  {
    "path": "Sources/SetMappingBase.swift",
    "chars": 2241,
    "preview": "//\n//  SetMappingBase.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-05.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Sources/SetMappingForArrayField.swift",
    "chars": 3659,
    "preview": "//\n//  SetMappingForArrayField.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2015–2"
  },
  {
    "path": "Sources/SetMappingForSequence.swift",
    "chars": 2227,
    "preview": "//\n//  SetMappingForSequence.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2015–201"
  },
  {
    "path": "Sources/SetMappingForSetField.swift",
    "chars": 3515,
    "preview": "//\n//  SetMappingForSetField.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2015–201"
  },
  {
    "path": "Sources/SetMappingForValue.swift",
    "chars": 5503,
    "preview": "//\n//  SetMappingForValue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-05.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Sources/SetMappingForValueField.swift",
    "chars": 3739,
    "preview": "//\n//  SetMappingForValueField.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2015–2"
  },
  {
    "path": "Sources/SetReference.swift",
    "chars": 3281,
    "preview": "//\n//  SetReference.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-17.\n//  Copyright © 2015–2017 Károly "
  },
  {
    "path": "Sources/SetSortingByComparableField.swift",
    "chars": 5775,
    "preview": "//\n//  SetSortingByMappingToObservableComparable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2017-05-01.\n//  "
  },
  {
    "path": "Sources/SetSortingByComparator.swift",
    "chars": 2380,
    "preview": "//\n//  SetSortingByComparator.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2015–20"
  },
  {
    "path": "Sources/SetSortingByMappingToComparable.swift",
    "chars": 4057,
    "preview": "//\n//  SetSortingByMappingToComparable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-15.\n//  Copyright "
  },
  {
    "path": "Sources/SetSortingByMappingToObservableComparable.swift",
    "chars": 5983,
    "preview": "//\n//  SetSortingByMappingToObservableComparable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  "
  },
  {
    "path": "Sources/SetVariable.swift",
    "chars": 5151,
    "preview": "//\n//  SetVariable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-13.\n//  Copyright © 2015–2017 Károly L"
  },
  {
    "path": "Sources/Signal.swift",
    "chars": 10788,
    "preview": "//\n//  Signal.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-11-30.\n//  Copyright © 2015–2017 Károly Lőrent"
  },
  {
    "path": "Sources/SimpleSources.swift",
    "chars": 1434,
    "preview": "//\n//  SimpleSources.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-11-30.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/Sink.swift",
    "chars": 3539,
    "preview": "//\n//  Sink.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-22.\n//  Copyright © 2015–2017 Károly Lőrentey"
  },
  {
    "path": "Sources/Source.swift",
    "chars": 5525,
    "preview": "//\n//  Source.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-11-30.\n//  Copyright © 2015–2017 Károly Lőrent"
  },
  {
    "path": "Sources/TimerSource.swift",
    "chars": 5790,
    "preview": "//\n//  TimerSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-11-30.\n//  Copyright © 2015–2017 Károly L"
  },
  {
    "path": "Sources/TransactionalThing.swift",
    "chars": 3343,
    "preview": "//\n//  TransactionState.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-22.\n//  Copyright © 2015–2017 Kár"
  },
  {
    "path": "Sources/TransformedSink.swift",
    "chars": 3640,
    "preview": "//\n//  TransformedSink.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-29.\n//  Copyright © 2015–2017 Káro"
  },
  {
    "path": "Sources/TransformedSource.swift",
    "chars": 2581,
    "preview": "//\n//  TransformedSource.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-11-30.\n//  Copyright © 2015–2017 Ká"
  },
  {
    "path": "Sources/TwoWayBinding.swift",
    "chars": 5449,
    "preview": "//\n//  TwoWayBinding.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-24.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/Type Helpers.swift",
    "chars": 10445,
    "preview": "//\n//  Type Helpers.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-03-10.\n//  Copyright © 2015–2017 Károly "
  },
  {
    "path": "Sources/UIBarButtonItem Extensions.swift",
    "chars": 2879,
    "preview": "//\n//  UIBarButtonItem Extensions.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-04-09.\n//  Copyright © 201"
  },
  {
    "path": "Sources/UIControl Glue.swift",
    "chars": 2917,
    "preview": "//\n//  UIControl Glue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-03-11.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Sources/UIDevice Glue.swift",
    "chars": 5904,
    "preview": "//\n//  UIDevice Glue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-03-13.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/UIGestureRecognizer Glue.swift",
    "chars": 1630,
    "preview": "//\n//  UIGestureRecognizer Glue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-03-16.\n//  Copyright © 2015–"
  },
  {
    "path": "Sources/UILabel Glue.swift",
    "chars": 989,
    "preview": "//\n//  UILabel Glue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2017-04-23.\n//  Copyright © 2015–2017 Károly "
  },
  {
    "path": "Sources/UISearchBar Glue.swift",
    "chars": 1442,
    "preview": "//\n//  UISearchBar Glue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2017-05-08.\n//  Copyright © 2015–2017 Kár"
  },
  {
    "path": "Sources/UISwitch Glue.swift",
    "chars": 676,
    "preview": "//\n//  UISwitch Glue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-12.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Sources/UpdatableArray.swift",
    "chars": 10219,
    "preview": "//\n//  UpdatableArray.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-11.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Sources/UpdatableSet.swift",
    "chars": 10875,
    "preview": "//\n//  UpdatableSet.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-08-13.\n//  Copyright © 2015–2017 Károly "
  },
  {
    "path": "Sources/UpdatableValue.swift",
    "chars": 5979,
    "preview": "//\n//  Updatable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-07.\n//  Copyright © 2015–2017 Károly Lőr"
  },
  {
    "path": "Sources/Update.swift",
    "chars": 2336,
    "preview": "//\n//  Update.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–2017 Károly Lőrent"
  },
  {
    "path": "Sources/ValueChange.swift",
    "chars": 1531,
    "preview": "//\n//  ValueChange.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-04.\n//  Copyright © 2015–2017 Károly L"
  },
  {
    "path": "Sources/ValueMappingForArrayField.swift",
    "chars": 7412,
    "preview": "//\n//  ValueMappingForArrayField.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015"
  },
  {
    "path": "Sources/ValueMappingForSetField.swift",
    "chars": 5965,
    "preview": "//\n//  ValueMappingForSetField.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2"
  },
  {
    "path": "Sources/ValueMappingForSourceField.swift",
    "chars": 2358,
    "preview": "//\n//  ValueMappingForSourceField.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 201"
  },
  {
    "path": "Sources/ValueMappingForValue.swift",
    "chars": 3139,
    "preview": "//\n//  ValueMappingForValue.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2017"
  },
  {
    "path": "Sources/ValueMappingForValueField.swift",
    "chars": 10998,
    "preview": "//\n//  SelectOperator.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-06.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Sources/ValueReference.swift",
    "chars": 2685,
    "preview": "//\n//  ValueReference.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-02.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Sources/Variable.swift",
    "chars": 3804,
    "preview": "//\n//  Variable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-11-30.\n//  Copyright © 2015–2017 Károly Lőre"
  },
  {
    "path": "Tests/GlueKitTests/AnySinkTests.swift",
    "chars": 1262,
    "preview": "//\n//  AnySinkTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-25.\n//  Copyright © 2015–2017 Károly "
  },
  {
    "path": "Tests/GlueKitTests/AnySourceTests.swift",
    "chars": 2044,
    "preview": "//\n//  AnySourceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-25.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Tests/GlueKitTests/ArrayBufferingTests.swift",
    "chars": 2244,
    "preview": "//\n//  ArrayBufferingTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-02.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/ArrayChangeSeparationTests.swift",
    "chars": 4719,
    "preview": "//\n//  ArrayChangeSeparationTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 201"
  },
  {
    "path": "Tests/GlueKitTests/ArrayChangeTests.swift",
    "chars": 6770,
    "preview": "//\n//  ArrayChangeTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2015–2017 Kár"
  },
  {
    "path": "Tests/GlueKitTests/ArrayConcatenationTests.swift",
    "chars": 1615,
    "preview": "//\n//  ArrayConcatenationTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-10.\n//  Copyright © 2015–2"
  },
  {
    "path": "Tests/GlueKitTests/ArrayFilteringTests.swift",
    "chars": 5385,
    "preview": "//\n//  ArrayFilteringTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-09-27.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/ArrayFoldingTests.swift",
    "chars": 631,
    "preview": "//\n//  ArrayFoldingTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2017 Ká"
  },
  {
    "path": "Tests/GlueKitTests/ArrayMappingTests.swift",
    "chars": 17470,
    "preview": "//\n//  SelectOperatorTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-06.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/ArrayModificationTests.swift",
    "chars": 10839,
    "preview": "//\n//  ArrayModificationTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-07.\n//  Copyright © 2015–20"
  },
  {
    "path": "Tests/GlueKitTests/ArrayReferenceTests.swift",
    "chars": 1836,
    "preview": "//\n//  ArrayReferenceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-02.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/ArrayVariableTests.swift",
    "chars": 5583,
    "preview": "//\n//  ArrayVariableTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-09.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Tests/GlueKitTests/Bookshelf.swift",
    "chars": 4307,
    "preview": "//\n//  Bookshelf.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-02.\n//  Copyright © 2015–2017 Károly Lőr"
  },
  {
    "path": "Tests/GlueKitTests/BracketingSourceTests.swift",
    "chars": 2412,
    "preview": "//\n//  BracketingSourceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–201"
  },
  {
    "path": "Tests/GlueKitTests/BufferedSourceTests.swift",
    "chars": 2777,
    "preview": "//\n//  BufferedSourceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/ChangeTests.swift",
    "chars": 517,
    "preview": "//\n//  Abstract Observables.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–2017"
  },
  {
    "path": "Tests/GlueKitTests/ChangesSourceTests.swift",
    "chars": 2660,
    "preview": "//\n//  ChangesSourceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Tests/GlueKitTests/CombinedObservableTests.swift",
    "chars": 7949,
    "preview": "//\n//  CombinedObservableTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2"
  },
  {
    "path": "Tests/GlueKitTests/CombinedUpdatableTests.swift",
    "chars": 4033,
    "preview": "//\n//  CombinedUpdatableTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–20"
  },
  {
    "path": "Tests/GlueKitTests/ConnectorTests.swift",
    "chars": 3400,
    "preview": "//\n//  ConnectorTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-10.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Tests/GlueKitTests/DispatchSourceTests.swift",
    "chars": 1723,
    "preview": "//\n//  DispatchSourceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-02.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/DistinctTests.swift",
    "chars": 5968,
    "preview": "//\n//  DistinctTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-08.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Tests/GlueKitTests/DistinctUnionTests.swift",
    "chars": 2989,
    "preview": "//\n//  DistinctUnionTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-04.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Tests/GlueKitTests/Info.plist",
    "chars": 733,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Tests/GlueKitTests/KVOSupportTests.swift",
    "chars": 15770,
    "preview": "//\n//  KVOSupportTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-03.\n//  Copyright © 2015–2017 Káro"
  },
  {
    "path": "Tests/GlueKitTests/MergedSourceTests.swift",
    "chars": 2611,
    "preview": "//\n//  MergedSourceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-04.\n//  Copyright © 2015–2017 Ká"
  },
  {
    "path": "Tests/GlueKitTests/MockArrayObserver.swift",
    "chars": 1223,
    "preview": "//\n//  MockArrayObserver.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-06.\n//  Copyright © 2015–2017 Ká"
  },
  {
    "path": "Tests/GlueKitTests/MockSetObserver.swift",
    "chars": 1280,
    "preview": "//\n//  MockSetObserver.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-06.\n//  Copyright © 2015–2017 Káro"
  },
  {
    "path": "Tests/GlueKitTests/MockSink.swift",
    "chars": 4159,
    "preview": "//\n//  MockSink.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-10.\n//  Copyright © 2015–2017 Károly Lőre"
  },
  {
    "path": "Tests/GlueKitTests/MockUpdateSink.swift",
    "chars": 1109,
    "preview": "//\n//  MockUpdateSink.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Tests/GlueKitTests/NSUserDefaultsSupportTests.swift",
    "chars": 6425,
    "preview": "//\n//  NSUserDefaultsSupportTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-02.\n//  Copyright © 201"
  },
  {
    "path": "Tests/GlueKitTests/NotificationCenterSupportTests.swift",
    "chars": 4748,
    "preview": "//\n//  NotificationCenterSupportTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-04.\n//  Copyright ©"
  },
  {
    "path": "Tests/GlueKitTests/ObservableArrayTests.swift",
    "chars": 12380,
    "preview": "//\n//  ObservableArrayTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-10.\n//  Copyright © 2015–2017"
  },
  {
    "path": "Tests/GlueKitTests/ObservableSetTests.swift",
    "chars": 13766,
    "preview": "//\n//  ObservableSetTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-10.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Tests/GlueKitTests/ObservableTypeTests.swift",
    "chars": 2619,
    "preview": "//\n//  ObservableTypeTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-28.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/ObservableValueTests.swift",
    "chars": 4010,
    "preview": "//\n//  ObservableValueTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-08.\n//  Copyright © 2015–2017"
  },
  {
    "path": "Tests/GlueKitTests/RefListTests.swift",
    "chars": 6274,
    "preview": "//\n//  RefListTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-08.\n//  Copyright © 2015–2017 Károly "
  },
  {
    "path": "Tests/GlueKitTests/SetBufferingTests.swift",
    "chars": 2233,
    "preview": "//\n//  SetBufferingTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-02.\n//  Copyright © 2015–2017 Ká"
  },
  {
    "path": "Tests/GlueKitTests/SetFilteringTests.swift",
    "chars": 7229,
    "preview": "//\n//  SetFilteringTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-06.\n//  Copyright © 2015–2017 Ká"
  },
  {
    "path": "Tests/GlueKitTests/SetFoldingTests.swift",
    "chars": 675,
    "preview": "//\n//  SetFoldingTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-09.\n//  Copyright © 2015–2017 Káro"
  },
  {
    "path": "Tests/GlueKitTests/SetMappingTests.swift",
    "chars": 10497,
    "preview": "//\n//  SetMappingTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-05.\n//  Copyright © 2015–2017 Káro"
  },
  {
    "path": "Tests/GlueKitTests/SetReferenceTests.swift",
    "chars": 2032,
    "preview": "//\n//  SetReferenceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-02.\n//  Copyright © 2015–2017 Ká"
  },
  {
    "path": "Tests/GlueKitTests/SetSortingTests.swift",
    "chars": 8069,
    "preview": "//\n//  SetSortingTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-05.\n//  Copyright © 2015–2017 Káro"
  },
  {
    "path": "Tests/GlueKitTests/SetVariableTests.swift",
    "chars": 1630,
    "preview": "//\n//  SetVariableTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-10.\n//  Copyright © 2015–2017 Kár"
  },
  {
    "path": "Tests/GlueKitTests/SignalTests.swift",
    "chars": 12787,
    "preview": "//\n//  SignalTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-11-30.\n//  Copyright © 2015–2017 Károly L"
  },
  {
    "path": "Tests/GlueKitTests/SimpleSourcesTests.swift",
    "chars": 979,
    "preview": "//\n//  SimpleSourcesTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-03.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Tests/GlueKitTests/SourceOperatorTests.swift",
    "chars": 3787,
    "preview": "//\n//  SourceOperatorTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-03.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/TestChange.swift",
    "chars": 1100,
    "preview": "//\n//  TestChange.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–2017 Károly Lő"
  },
  {
    "path": "Tests/GlueKitTests/TestObservable.swift",
    "chars": 1778,
    "preview": "//\n//  TestObservable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Tests/GlueKitTests/TestUpdatable.swift",
    "chars": 2395,
    "preview": "//\n//  TestUpdatable.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Tests/GlueKitTests/TestUtilities.swift",
    "chars": 580,
    "preview": "//\n//  TestUtilities.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-03.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Tests/GlueKitTests/TimerSourceTests.swift",
    "chars": 3553,
    "preview": "//\n//  TimerSourceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-03.\n//  Copyright © 2015–2017 Kár"
  },
  {
    "path": "Tests/GlueKitTests/TransactionStateTests.swift",
    "chars": 8382,
    "preview": "//\n//  TransactionalTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Tests/GlueKitTests/TwoWayBindingTests.swift",
    "chars": 7374,
    "preview": "//\n//  UpdatableTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-07.\n//  Copyright © 2015–2017 Károl"
  },
  {
    "path": "Tests/GlueKitTests/TypeHelperTests.swift",
    "chars": 8523,
    "preview": "//\n//  TypeHelperTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-10.\n//  Copyright © 2015–2017 Káro"
  },
  {
    "path": "Tests/GlueKitTests/UpdatableValueTests.swift",
    "chars": 5251,
    "preview": "//\n//  UpdatableValueTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-27.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/UpdateTests.swift",
    "chars": 1750,
    "preview": "//\n//  UpdateTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-26.\n//  Copyright © 2015–2017 Károly L"
  },
  {
    "path": "Tests/GlueKitTests/ValueBufferingTests.swift",
    "chars": 1819,
    "preview": "//\n//  BufferedValueTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-28.\n//  Copyright © 2015–2017 K"
  },
  {
    "path": "Tests/GlueKitTests/ValueChangeTests.swift",
    "chars": 1444,
    "preview": "//\n//  ValueChangeTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-10-27.\n//  Copyright © 2015–2017 Kár"
  },
  {
    "path": "Tests/GlueKitTests/ValueMappingTests.swift",
    "chars": 11138,
    "preview": "//\n//  SelectOperatorTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-06.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/ValueReferenceTests.swift",
    "chars": 2168,
    "preview": "//\n//  ValueReferenceTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2016-11-02.\n//  Copyright © 2015–2017 "
  },
  {
    "path": "Tests/GlueKitTests/VariableTests.swift",
    "chars": 7844,
    "preview": "//\n//  VariableTests.swift\n//  GlueKit\n//\n//  Created by Károly Lőrentey on 2015-12-01.\n//  Copyright © 2015–2017 Károly"
  },
  {
    "path": "Tests/PerformanceTests/GlueKitPerformanceTests.swift",
    "chars": 9393,
    "preview": "//\n//  GlueKitPerformanceTests.swift\n//  GlueKitPerformanceTests\n//\n//  Created by Károly Lőrentey on 2015-12-04.\n//  Co"
  },
  {
    "path": "Tests/PerformanceTests/Info.plist",
    "chars": 680,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "jazzy.sh",
    "chars": 509,
    "preview": "#!/bin/sh\n\njazzy \\\n    --clean \\\n    --author \"Károly Lőrentey\" \\\n    --author_url \"https://twitter.com/lorentey\" \\\n    "
  },
  {
    "path": "version.xcconfig",
    "chars": 476,
    "preview": "//\n//  version.xcconfig\n//\n//  Created by Károly Lőrentey on 2016-03-08.\n//  Copyright © 2015–2017 Károly Lőrentey.\n//\n\n"
  }
]

About this extraction

This page contains the full source code of the lorentey/GlueKit GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 192 files (995.4 KB), approximately 272.5k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!