[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n*.gcno\n*.gcda\n.DS_Store\n\n#markdown files\n*.md\n*.mlmodel\nfastlane/report.xml\n\nPods/\n\n.idea"
  },
  {
    "path": "LICENSE.txt",
    "content": "Refactoring.Guru: Design Patterns in Swift\n© by Eremenko Maxim and Alexander Shvets\n\nThis work is licensed under a\nCreative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.\n\nYou should have received a copy of the license along with this\nwork. If not, see <http://creativecommons.org/licenses/by-nc-nd/4.0/>.\n\n=======================================================================\n\nAttribution-NonCommercial-NoDerivatives 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n\twiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More_considerations\n     for the public:\n\twiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-NonCommercial-NoDerivatives 4.0\nInternational Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-NonCommercial-NoDerivatives 4.0 International Public\nLicense (\"Public License\"). To the extent this Public License may be\ninterpreted as a contract, You are granted the Licensed Rights in\nconsideration of Your acceptance of these terms and conditions, and the\nLicensor grants You such rights in consideration of benefits the\nLicensor receives from making the Licensed Material available under\nthese terms and conditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  c. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  d. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  e. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  f. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  g. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  h. NonCommercial means not primarily intended for or directed towards\n     commercial advantage or monetary compensation. For purposes of\n     this Public License, the exchange of the Licensed Material for\n     other material subject to Copyright and Similar Rights by digital\n     file-sharing or similar means is NonCommercial provided there is\n     no payment of monetary compensation in connection with the\n     exchange.\n\n  i. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  j. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  k. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part, for NonCommercial purposes only; and\n\n            b. produce and reproduce, but not Share, Adapted Material\n               for NonCommercial purposes only.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties, including when\n          the Licensed Material is used other than for NonCommercial\n          purposes.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material, You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n          For the avoidance of doubt, You do not have permission under\n          this Public License to Share Adapted Material.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database for NonCommercial purposes\n     only and provided You do not Share Adapted Material;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material; and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n=======================================================================\n\nCreative Commons is not a party to its public\nlicenses. Notwithstanding, Creative Commons may elect to apply one of\nits public licenses to material it publishes and in those instances\nwill be considered the “Licensor.” The text of the Creative Commons\npublic licenses is dedicated to the public domain under the CC0 Public\nDomain Dedication. Except for the limited purpose of indicating that\nmaterial is shared under a Creative Commons public license or as\notherwise permitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the\npublic licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n\n"
  },
  {
    "path": "ProjectBundle/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 48;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t912C5CE2210BC33E007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5CE1210BC33E007DC364 /* Example.swift */; };\n\t\t912C5CEF210BC3A4007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5CEE210BC3A4007DC364 /* Example.swift */; };\n\t\t912C5D05210BC4A5007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D03210BC4A5007DC364 /* Example.swift */; };\n\t\t912C5D0E210BC4D9007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D0D210BC4D9007DC364 /* Example.swift */; };\n\t\t912C5D1B210BC553007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D1A210BC553007DC364 /* Example.swift */; };\n\t\t912C5D27210BC594007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D26210BC594007DC364 /* Example.swift */; };\n\t\t912C5D33210BC5E1007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D32210BC5E1007DC364 /* Example.swift */; };\n\t\t912C5D40210BC62D007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D3F210BC62D007DC364 /* Example.swift */; };\n\t\t912C5D4D210BC6A8007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D4C210BC6A8007DC364 /* Example.swift */; };\n\t\t912C5D59210BC6F1007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D58210BC6F1007DC364 /* Example.swift */; };\n\t\t912C5D65210BC749007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D64210BC749007DC364 /* Example.swift */; };\n\t\t912C5D72210BC7B1007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D71210BC7B1007DC364 /* Example.swift */; };\n\t\t912C5D7F210BC81E007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D7E210BC81E007DC364 /* Example.swift */; };\n\t\t912C5D8B210BC865007DC364 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 912C5D8A210BC865007DC364 /* Example.swift */; };\n\t\t91301AD520F55C25003B4FC0 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91301AD420F55C25003B4FC0 /* Example.swift */; };\n\t\t91301AE220F55CAA003B4FC0 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91301AE120F55CAA003B4FC0 /* Example.swift */; };\n\t\t919C89FA20DD7F03006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFB220B5D0A600266EF8 /* Example.swift */; };\n\t\t919C8A0D20DD7F58006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFB620B5D0A600266EF8 /* Example.swift */; };\n\t\t919C8A1B20DD81E7006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916B889F20BC6E6800BA92DF /* Example.swift */; };\n\t\t919C8A2820DD829C006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916B88A520BD468100BA92DF /* Example.swift */; };\n\t\t919C8A4120DD832C006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFDF20B5D0A700266EF8 /* Example.swift */; };\n\t\t919C8A4E20DD83AA006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFDC20B5D0A700266EF8 /* Example.swift */; };\n\t\t919C8A6720DD84DB006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFE520B5D0A700266EF8 /* Example.swift */; };\n\t\t919C8A7520DD85A3006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFE320B5D0A700266EF8 /* Example.swift */; };\n\t\t919C8A8220DD8698006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFD520B5D0A700266EF8 /* Example.swift */; };\n\t\t919C8A8F20DD86EB006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFD220B5D0A700266EF8 /* Example.swift */; };\n\t\t919C8AAA20DD879C006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916B889220BC4DA400BA92DF /* Example.swift */; };\n\t\t919C8AB220DD87F2006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 919C8AB120DD87F2006EE57D /* Example.swift */; };\n\t\t919C8ACF20DD887F006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916B889A20BC587D00BA92DF /* Example.swift */; };\n\t\t919C8AD720DD88C6006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 919C8AD620DD88C6006EE57D /* Example.swift */; };\n\t\t919C8AE820DD894F006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFBB20B5D0A600266EF8 /* Example.swift */; };\n\t\t919C8AF520DD89CE006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFBF20B5D0A600266EF8 /* Example.swift */; };\n\t\t919C8B0220DD8AB3006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFEE20B5D0A700266EF8 /* Example.swift */; };\n\t\t919C8B0F20DD8B12006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFEA20B5D0A700266EF8 /* Example.swift */; };\n\t\t919C8B1C20DD8B70006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFCC20B5D0A700266EF8 /* Example.swift */; };\n\t\t919C8B2920DD8BC3006EE57D /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9187BFC920B5D0A700266EF8 /* Example.swift */; };\n\t\t91B1206E20F610E400730C37 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B1206D20F610E400730C37 /* Example.swift */; };\n\t\t91B1207A20F6114A00730C37 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B1207920F6114A00730C37 /* Example.swift */; };\n\t\t91B1208620F611DA00730C37 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B1208520F611DA00730C37 /* Example.swift */; };\n\t\t91B1209320F6120C00730C37 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B1209220F6120C00730C37 /* Example.swift */; };\n\t\t91B120A020F6125500730C37 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B1209F20F6125500730C37 /* Example.swift */; };\n\t\t91B120AC20F6127400730C37 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B120AB20F6127400730C37 /* Example.swift */; };\n\t\t91B120B920F6130A00730C37 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B120B820F6130A00730C37 /* Example.swift */; };\n\t\t91B120C520F6132E00730C37 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B120C420F6132E00730C37 /* Example.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t912C5CDF210BC33D007DC364 /* MediatorConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MediatorConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5CE1210BC33E007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5CE3210BC33E007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5CEC210BC3A4007DC364 /* MediatorRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MediatorRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5CEE210BC3A4007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5CF0210BC3A4007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5CF8210BC3F5007DC364 /* MementoConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MementoConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D03210BC4A5007DC364 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D04210BC4A5007DC364 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D0B210BC4D8007DC364 /* MementoRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MementoRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D0D210BC4D9007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D0F210BC4D9007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D18210BC553007DC364 /* ObserverConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ObserverConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D1A210BC553007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D1C210BC553007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D24210BC594007DC364 /* ObserverRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ObserverRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D26210BC594007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D28210BC594007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D30210BC5E1007DC364 /* StateConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StateConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D32210BC5E1007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D34210BC5E1007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D3D210BC62D007DC364 /* StateRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StateRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D3F210BC62D007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D41210BC62D007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D4A210BC6A8007DC364 /* StrategyConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StrategyConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D4C210BC6A8007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D4E210BC6A8007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D56210BC6F0007DC364 /* StrategyRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StrategyRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D58210BC6F1007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D5A210BC6F1007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D62210BC749007DC364 /* TemplateMethodConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TemplateMethodConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D64210BC749007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D66210BC749007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D6F210BC7B1007DC364 /* TemplateMethodRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TemplateMethodRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D71210BC7B1007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D73210BC7B1007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D7C210BC81E007DC364 /* VisitorConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VisitorConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D7E210BC81E007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D80210BC81E007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t912C5D88210BC865007DC364 /* VisitorRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VisitorRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t912C5D8A210BC865007DC364 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t912C5D8C210BC865007DC364 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91301AD220F55C25003B4FC0 /* FlyweightConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlyweightConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91301AD420F55C25003B4FC0 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91301AD620F55C25003B4FC0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91301ADF20F55CAA003B4FC0 /* FlyweightRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlyweightRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91301AE120F55CAA003B4FC0 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91301AE320F55CAA003B4FC0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t913E0137210CA53800B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E0139210CA54F00B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E013B210CA55A00B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E013D210CA56000B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E013F210CA57200B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E0141210CA57900B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E0143210CA58300B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E0145210CA58900B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E0147210CA59400B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E0149210CA59A00B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E014B210CA5A200B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E014D210CA5AE00B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E014F210CA5B800B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913E0151210CA5BE00B7D71E /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t913FF2262097835E00193902 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t916B888F20BC4B1900BA92DF /* Output.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t916B889220BC4DA400BA92DF /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t916B889420BC56FD00BA92DF /* Output.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t916B889A20BC587D00BA92DF /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t916B889C20BC5B7600BA92DF /* Output.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t916B889F20BC6E6800BA92DF /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t916B88A120BC717400BA92DF /* Output.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t916B88A520BD468100BA92DF /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t916B88A720BD537300BA92DF /* Output.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFAB20B5D0A600266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFB220B5D0A600266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFB420B5D0A600266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFB620B5D0A600266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFBB20B5D0A600266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFBC20B5D0A600266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFBF20B5D0A600266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFC220B5D0A600266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFC820B5D0A700266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFC920B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFCB20B5D0A700266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFCC20B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFD220B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFD320B5D0A700266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFD520B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFD820B5D0A700266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFDC20B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFDE20B5D0A700266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFDF20B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFE220B5D0A700266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFE320B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFE520B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFE620B5D0A700266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFE920B5D0A700266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFEA20B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t9187BFEC20B5D0A700266EF8 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t9187BFEE20B5D0A700266EF8 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t919C89F120DD7EE4006EE57D /* AbstractFactoryRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AbstractFactoryRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C89F520DD7EE4006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8A0520DD7F3C006EE57D /* AbstractFactoryConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AbstractFactoryConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8A0920DD7F3C006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8A1320DD81D0006EE57D /* FacadeConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FacadeConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8A1720DD81D0006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8A2020DD8261006EE57D /* FacadeRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FacadeRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8A2420DD8261006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8A3920DD82F0006EE57D /* BridgeConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BridgeConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8A3D20DD82F0006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8A4620DD8393006EE57D /* BridgeRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BridgeRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8A4A20DD8393006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8A5F20DD849A006EE57D /* AdapterConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AdapterConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8A6320DD849B006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8A6C20DD858C006EE57D /* AdapterRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AdapterRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8A7020DD858C006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8A7A20DD8688006EE57D /* BuilderConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BuilderConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8A7E20DD8688006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8A8720DD86DC006EE57D /* BuilderRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BuilderRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8A8B20DD86DC006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8AA220DD878D006EE57D /* CompositeConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CompositeConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8AA620DD878E006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8AAF20DD87F2006EE57D /* CompositeRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CompositeRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8AB120DD87F2006EE57D /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t919C8AB320DD87F2006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8AC720DD8873006EE57D /* DecoratorConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DecoratorConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8ACB20DD8873006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8AD420DD88C6006EE57D /* DecoratorRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DecoratorRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8AD620DD88C6006EE57D /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t919C8AD820DD88C6006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8AE020DD893E006EE57D /* FactoryMethodRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FactoryMethodRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8AE420DD893E006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8AED20DD897E006EE57D /* FactoryMethodConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FactoryMethodConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8AF120DD897E006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8AFA20DD8A98006EE57D /* PrototypeConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PrototypeConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8AFE20DD8A98006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8B0720DD8AF0006EE57D /* PrototypeRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PrototypeRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8B0B20DD8AF0006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8B1420DD8B59006EE57D /* SingletonConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SingletonConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8B1820DD8B59006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t919C8B2120DD8BA9006EE57D /* SingletonRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SingletonRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t919C8B2520DD8BA9006EE57D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91B1206220F56BFA00730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91B1206420F56C0100730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91B1206B20F610E400730C37 /* ChainOfResponsibilityConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChainOfResponsibilityConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91B1206D20F610E400730C37 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91B1206F20F610E400730C37 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91B1207720F6114A00730C37 /* ChainOfResponsibilityRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChainOfResponsibilityRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91B1207920F6114A00730C37 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91B1207B20F6114A00730C37 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91B1208320F611DA00730C37 /* CommandConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CommandConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91B1208520F611DA00730C37 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91B1208720F611DA00730C37 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91B1209020F6120C00730C37 /* CommandRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CommandRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91B1209220F6120C00730C37 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91B1209420F6120C00730C37 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91B1209D20F6125500730C37 /* IteratorConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IteratorConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91B1209F20F6125500730C37 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91B120A120F6125500730C37 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91B120A920F6127400730C37 /* IteratorRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IteratorRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91B120AB20F6127400730C37 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91B120AD20F6127400730C37 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91B120B620F6130900730C37 /* ProxyConceptual.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ProxyConceptual.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91B120B820F6130A00730C37 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91B120BA20F6130A00730C37 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91B120C220F6132E00730C37 /* ProxyRealWorld.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ProxyRealWorld.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t91B120C420F6132E00730C37 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t91B120C620F6132E00730C37 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t91B120CA20F61BAD00730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91B120CC20F61BBC00730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91B120CE20F61BC600730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91B120D020F61BD000730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91B120D220F61BDA00730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91B120D420F61BE300730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91B120D620F61BE900730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91B120D820F61BF000730C37 /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91F0DA9520E6552A001F1C1A /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n\t\t91F0DAAC20E68AAD001F1C1A /* Output.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Output.txt; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t912C5CDC210BC33D007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5CE9210BC3A4007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5CF5210BC3F5007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D08210BC4D8007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D15210BC553007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D21210BC594007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D2D210BC5E1007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D3A210BC62D007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D47210BC6A8007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D53210BC6F0007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D5F210BC749007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D6C210BC7B1007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D79210BC81E007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D85210BC865007DC364 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91301ACF20F55C25003B4FC0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91301ADC20F55CAA003B4FC0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C89EE20DD7EE4006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A0220DD7F3C006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A1020DD81D0006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A1D20DD8261006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A3620DD82F0006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A4320DD8393006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A5C20DD849A006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A6920DD858C006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A7720DD8688006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A8420DD86DC006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A9F20DD878D006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AAC20DD87F2006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AC420DD8873006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AD120DD88C6006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8ADD20DD893E006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AEA20DD897E006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AF720DD8A98006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8B0420DD8AF0006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8B1120DD8B59006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8B1E20DD8BA9006EE57D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1206820F610E400730C37 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1207420F6114A00730C37 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1208020F611DA00730C37 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1208D20F6120C00730C37 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1209A20F6125500730C37 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B120A620F6127400730C37 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B120B320F6130900730C37 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B120BF20F6132E00730C37 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t912C5CE0210BC33D007DC364 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5CE1210BC33E007DC364 /* Example.swift */,\n\t\t\t\t912C5CE3210BC33E007DC364 /* Info.plist */,\n\t\t\t\t913E0137210CA53800B7D71E /* Output.txt */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5CE7210BC34E007DC364 /* Mediator */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5CE0210BC33D007DC364 /* Conceptual */,\n\t\t\t\t912C5CED210BC3A4007DC364 /* RealWorld */,\n\t\t\t);\n\t\t\tpath = Mediator;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5CED210BC3A4007DC364 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5CEE210BC3A4007DC364 /* Example.swift */,\n\t\t\t\t913E0139210CA54F00B7D71E /* Output.txt */,\n\t\t\t\t912C5CF0210BC3A4007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D01210BC4A5007DC364 /* Memento */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D02210BC4A5007DC364 /* Conceptual */,\n\t\t\t\t912C5D0C210BC4D9007DC364 /* RealWorld */,\n\t\t\t);\n\t\t\tpath = Memento;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D02210BC4A5007DC364 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D03210BC4A5007DC364 /* Example.swift */,\n\t\t\t\t913E013B210CA55A00B7D71E /* Output.txt */,\n\t\t\t\t912C5D04210BC4A5007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D0C210BC4D9007DC364 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D0D210BC4D9007DC364 /* Example.swift */,\n\t\t\t\t913E013D210CA56000B7D71E /* Output.txt */,\n\t\t\t\t912C5D0F210BC4D9007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D13210BC53A007DC364 /* Observer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D19210BC553007DC364 /* Conceptual */,\n\t\t\t\t912C5D25210BC594007DC364 /* RealWorld */,\n\t\t\t);\n\t\t\tpath = Observer;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D19210BC553007DC364 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D1A210BC553007DC364 /* Example.swift */,\n\t\t\t\t913E013F210CA57200B7D71E /* Output.txt */,\n\t\t\t\t912C5D1C210BC553007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D25210BC594007DC364 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D26210BC594007DC364 /* Example.swift */,\n\t\t\t\t913E0141210CA57900B7D71E /* Output.txt */,\n\t\t\t\t912C5D28210BC594007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D31210BC5E1007DC364 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D32210BC5E1007DC364 /* Example.swift */,\n\t\t\t\t913E0143210CA58300B7D71E /* Output.txt */,\n\t\t\t\t912C5D34210BC5E1007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D38210BC5EB007DC364 /* State */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D31210BC5E1007DC364 /* Conceptual */,\n\t\t\t\t912C5D3E210BC62D007DC364 /* RealWorld */,\n\t\t\t);\n\t\t\tpath = State;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D3E210BC62D007DC364 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D3F210BC62D007DC364 /* Example.swift */,\n\t\t\t\t913E0145210CA58900B7D71E /* Output.txt */,\n\t\t\t\t912C5D41210BC62D007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D45210BC687007DC364 /* Strategy */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D4B210BC6A8007DC364 /* Conceptual */,\n\t\t\t\t912C5D57210BC6F1007DC364 /* RealWorld */,\n\t\t\t);\n\t\t\tpath = Strategy;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D4B210BC6A8007DC364 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D4C210BC6A8007DC364 /* Example.swift */,\n\t\t\t\t913E0149210CA59A00B7D71E /* Output.txt */,\n\t\t\t\t912C5D4E210BC6A8007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D57210BC6F1007DC364 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D58210BC6F1007DC364 /* Example.swift */,\n\t\t\t\t913E0147210CA59400B7D71E /* Output.txt */,\n\t\t\t\t912C5D5A210BC6F1007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D63210BC749007DC364 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D64210BC749007DC364 /* Example.swift */,\n\t\t\t\t913E014D210CA5AE00B7D71E /* Output.txt */,\n\t\t\t\t912C5D66210BC749007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D6A210BC750007DC364 /* TemplateMethod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D63210BC749007DC364 /* Conceptual */,\n\t\t\t\t912C5D70210BC7B1007DC364 /* RealWorld */,\n\t\t\t);\n\t\t\tpath = TemplateMethod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D70210BC7B1007DC364 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D71210BC7B1007DC364 /* Example.swift */,\n\t\t\t\t913E014B210CA5A200B7D71E /* Output.txt */,\n\t\t\t\t912C5D73210BC7B1007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D77210BC80B007DC364 /* Visitor */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D7D210BC81E007DC364 /* Conceptual */,\n\t\t\t\t912C5D89210BC865007DC364 /* RealWorld */,\n\t\t\t);\n\t\t\tpath = Visitor;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D7D210BC81E007DC364 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D7E210BC81E007DC364 /* Example.swift */,\n\t\t\t\t913E014F210CA5B800B7D71E /* Output.txt */,\n\t\t\t\t912C5D80210BC81E007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912C5D89210BC865007DC364 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t912C5D8A210BC865007DC364 /* Example.swift */,\n\t\t\t\t913E0151210CA5BE00B7D71E /* Output.txt */,\n\t\t\t\t912C5D8C210BC865007DC364 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91301AD320F55C25003B4FC0 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91301AD420F55C25003B4FC0 /* Example.swift */,\n\t\t\t\t91301AD620F55C25003B4FC0 /* Info.plist */,\n\t\t\t\t91B1206420F56C0100730C37 /* Output.txt */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91301ADA20F55C4E003B4FC0 /* Flyweight */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91301AE020F55CAA003B4FC0 /* RealWorld */,\n\t\t\t\t91301AD320F55C25003B4FC0 /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Flyweight;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91301AE020F55CAA003B4FC0 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91301AE120F55CAA003B4FC0 /* Example.swift */,\n\t\t\t\t91301AE320F55CAA003B4FC0 /* Info.plist */,\n\t\t\t\t91B1206220F56BFA00730C37 /* Output.txt */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9139FA6F2088D85C00229150 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t913FF2252097835E00193902 /* ProjectBundle */,\n\t\t\t\t914ADA0420B2D4D200E0A74F /* Sources */,\n\t\t\t\t9139FA792088D85C00229150 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9139FA792088D85C00229150 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C89F120DD7EE4006EE57D /* AbstractFactoryRealWorld.xctest */,\n\t\t\t\t919C8A0520DD7F3C006EE57D /* AbstractFactoryConceptual.xctest */,\n\t\t\t\t919C8A1320DD81D0006EE57D /* FacadeConceptual.xctest */,\n\t\t\t\t919C8A2020DD8261006EE57D /* FacadeRealWorld.xctest */,\n\t\t\t\t919C8A3920DD82F0006EE57D /* BridgeConceptual.xctest */,\n\t\t\t\t919C8A4620DD8393006EE57D /* BridgeRealWorld.xctest */,\n\t\t\t\t919C8A5F20DD849A006EE57D /* AdapterConceptual.xctest */,\n\t\t\t\t919C8A6C20DD858C006EE57D /* AdapterRealWorld.xctest */,\n\t\t\t\t919C8A7A20DD8688006EE57D /* BuilderConceptual.xctest */,\n\t\t\t\t919C8A8720DD86DC006EE57D /* BuilderRealWorld.xctest */,\n\t\t\t\t919C8AA220DD878D006EE57D /* CompositeConceptual.xctest */,\n\t\t\t\t919C8AAF20DD87F2006EE57D /* CompositeRealWorld.xctest */,\n\t\t\t\t919C8AC720DD8873006EE57D /* DecoratorConceptual.xctest */,\n\t\t\t\t919C8AD420DD88C6006EE57D /* DecoratorRealWorld.xctest */,\n\t\t\t\t919C8AE020DD893E006EE57D /* FactoryMethodRealWorld.xctest */,\n\t\t\t\t919C8AED20DD897E006EE57D /* FactoryMethodConceptual.xctest */,\n\t\t\t\t919C8AFA20DD8A98006EE57D /* PrototypeConceptual.xctest */,\n\t\t\t\t919C8B0720DD8AF0006EE57D /* PrototypeRealWorld.xctest */,\n\t\t\t\t919C8B1420DD8B59006EE57D /* SingletonConceptual.xctest */,\n\t\t\t\t919C8B2120DD8BA9006EE57D /* SingletonRealWorld.xctest */,\n\t\t\t\t91301AD220F55C25003B4FC0 /* FlyweightConceptual.xctest */,\n\t\t\t\t91301ADF20F55CAA003B4FC0 /* FlyweightRealWorld.xctest */,\n\t\t\t\t91B1206B20F610E400730C37 /* ChainOfResponsibilityConceptual.xctest */,\n\t\t\t\t91B1207720F6114A00730C37 /* ChainOfResponsibilityRealWorld.xctest */,\n\t\t\t\t91B1208320F611DA00730C37 /* CommandConceptual.xctest */,\n\t\t\t\t91B1209020F6120C00730C37 /* CommandRealWorld.xctest */,\n\t\t\t\t91B1209D20F6125500730C37 /* IteratorConceptual.xctest */,\n\t\t\t\t91B120A920F6127400730C37 /* IteratorRealWorld.xctest */,\n\t\t\t\t91B120B620F6130900730C37 /* ProxyConceptual.xctest */,\n\t\t\t\t91B120C220F6132E00730C37 /* ProxyRealWorld.xctest */,\n\t\t\t\t912C5CDF210BC33D007DC364 /* MediatorConceptual.xctest */,\n\t\t\t\t912C5CEC210BC3A4007DC364 /* MediatorRealWorld.xctest */,\n\t\t\t\t912C5CF8210BC3F5007DC364 /* MementoConceptual.xctest */,\n\t\t\t\t912C5D0B210BC4D8007DC364 /* MementoRealWorld.xctest */,\n\t\t\t\t912C5D18210BC553007DC364 /* ObserverConceptual.xctest */,\n\t\t\t\t912C5D24210BC594007DC364 /* ObserverRealWorld.xctest */,\n\t\t\t\t912C5D30210BC5E1007DC364 /* StateConceptual.xctest */,\n\t\t\t\t912C5D3D210BC62D007DC364 /* StateRealWorld.xctest */,\n\t\t\t\t912C5D4A210BC6A8007DC364 /* StrategyConceptual.xctest */,\n\t\t\t\t912C5D56210BC6F0007DC364 /* StrategyRealWorld.xctest */,\n\t\t\t\t912C5D62210BC749007DC364 /* TemplateMethodConceptual.xctest */,\n\t\t\t\t912C5D6F210BC7B1007DC364 /* TemplateMethodRealWorld.xctest */,\n\t\t\t\t912C5D7C210BC81E007DC364 /* VisitorConceptual.xctest */,\n\t\t\t\t912C5D88210BC865007DC364 /* VisitorRealWorld.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t913FF2252097835E00193902 /* ProjectBundle */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t913FF2262097835E00193902 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = ProjectBundle;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t914ADA0420B2D4D200E0A74F /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8A0E20DD7F7B006EE57D /* AbstractFactory */,\n\t\t\t\t9187BFB820B5D0A600266EF8 /* FactoryMethod */,\n\t\t\t\t9187BFCD20B5D0A700266EF8 /* Builder */,\n\t\t\t\t9187BFE720B5D0A700266EF8 /* Prototype */,\n\t\t\t\t9187BFC320B5D0A700266EF8 /* Singleton */,\n\t\t\t\t9187BFE020B5D0A700266EF8 /* Adapter */,\n\t\t\t\t9187BFDA20B5D0A700266EF8 /* Bridge */,\n\t\t\t\t916B889120BC4D8100BA92DF /* Composite */,\n\t\t\t\t916B889620BC582D00BA92DF /* Decorator */,\n\t\t\t\t916B889E20BC5C5800BA92DF /* Facade */,\n\t\t\t\t91301ADA20F55C4E003B4FC0 /* Flyweight */,\n\t\t\t\t91B120B120F612F600730C37 /* Proxy */,\n\t\t\t\t91B1206620F610B600730C37 /* ChainOfResponsibility */,\n\t\t\t\t91B1208B20F611EF00730C37 /* Command */,\n\t\t\t\t91B1209820F6124200730C37 /* Iterator */,\n\t\t\t\t912C5CE7210BC34E007DC364 /* Mediator */,\n\t\t\t\t912C5D01210BC4A5007DC364 /* Memento */,\n\t\t\t\t912C5D13210BC53A007DC364 /* Observer */,\n\t\t\t\t912C5D38210BC5EB007DC364 /* State */,\n\t\t\t\t912C5D45210BC687007DC364 /* Strategy */,\n\t\t\t\t912C5D6A210BC750007DC364 /* TemplateMethod */,\n\t\t\t\t912C5D77210BC80B007DC364 /* Visitor */,\n\t\t\t);\n\t\t\tpath = Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t916B889120BC4D8100BA92DF /* Composite */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8AB020DD87F2006EE57D /* RealWorld */,\n\t\t\t\t919C8AA320DD878E006EE57D /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Composite;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t916B889620BC582D00BA92DF /* Decorator */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8AD520DD88C6006EE57D /* RealWorld */,\n\t\t\t\t919C8AC820DD8873006EE57D /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Decorator;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t916B889E20BC5C5800BA92DF /* Facade */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8A2120DD8261006EE57D /* RealWorld */,\n\t\t\t\t919C8A1420DD81D0006EE57D /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Facade;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9187BFB820B5D0A600266EF8 /* FactoryMethod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8AEE20DD897E006EE57D /* Conceptual */,\n\t\t\t\t919C8AE120DD893E006EE57D /* RealWorld */,\n\t\t\t);\n\t\t\tpath = FactoryMethod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9187BFC320B5D0A700266EF8 /* Singleton */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8B2220DD8BA9006EE57D /* RealWorld */,\n\t\t\t\t919C8B1520DD8B59006EE57D /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Singleton;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9187BFCD20B5D0A700266EF8 /* Builder */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8A8820DD86DC006EE57D /* RealWorld */,\n\t\t\t\t919C8A7B20DD8688006EE57D /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Builder;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9187BFDA20B5D0A700266EF8 /* Bridge */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8A4720DD8393006EE57D /* RealWorld */,\n\t\t\t\t919C8A3A20DD82F0006EE57D /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Bridge;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9187BFE020B5D0A700266EF8 /* Adapter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8A6D20DD858C006EE57D /* RealWorld */,\n\t\t\t\t919C8A6020DD849B006EE57D /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Adapter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9187BFE720B5D0A700266EF8 /* Prototype */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8B0820DD8AF0006EE57D /* RealWorld */,\n\t\t\t\t919C8AFB20DD8A98006EE57D /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Prototype;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C89F220DD7EE4006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFB220B5D0A600266EF8 /* Example.swift */,\n\t\t\t\t9187BFAB20B5D0A600266EF8 /* Output.txt */,\n\t\t\t\t919C89F520DD7EE4006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A0620DD7F3C006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFB620B5D0A600266EF8 /* Example.swift */,\n\t\t\t\t9187BFB420B5D0A600266EF8 /* Output.txt */,\n\t\t\t\t919C8A0920DD7F3C006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A0E20DD7F7B006EE57D /* AbstractFactory */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C89F220DD7EE4006EE57D /* RealWorld */,\n\t\t\t\t919C8A0620DD7F3C006EE57D /* Conceptual */,\n\t\t\t);\n\t\t\tpath = AbstractFactory;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A1420DD81D0006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t916B889F20BC6E6800BA92DF /* Example.swift */,\n\t\t\t\t916B88A120BC717400BA92DF /* Output.txt */,\n\t\t\t\t919C8A1720DD81D0006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A2120DD8261006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t916B88A520BD468100BA92DF /* Example.swift */,\n\t\t\t\t916B88A720BD537300BA92DF /* Output.txt */,\n\t\t\t\t919C8A2420DD8261006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A3A20DD82F0006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFDF20B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t9187BFDE20B5D0A700266EF8 /* Output.txt */,\n\t\t\t\t919C8A3D20DD82F0006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A4720DD8393006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFDC20B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t916B888F20BC4B1900BA92DF /* Output.txt */,\n\t\t\t\t919C8A4A20DD8393006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A6020DD849B006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFE520B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t9187BFE620B5D0A700266EF8 /* Output.txt */,\n\t\t\t\t919C8A6320DD849B006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A6D20DD858C006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFE320B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t9187BFE220B5D0A700266EF8 /* Output.txt */,\n\t\t\t\t919C8A7020DD858C006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A7B20DD8688006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFD520B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t9187BFD820B5D0A700266EF8 /* Output.txt */,\n\t\t\t\t919C8A7E20DD8688006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8A8820DD86DC006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFD220B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t9187BFD320B5D0A700266EF8 /* Output.txt */,\n\t\t\t\t919C8A8B20DD86DC006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8AA320DD878E006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t916B889220BC4DA400BA92DF /* Example.swift */,\n\t\t\t\t916B889420BC56FD00BA92DF /* Output.txt */,\n\t\t\t\t919C8AA620DD878E006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8AB020DD87F2006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8AB120DD87F2006EE57D /* Example.swift */,\n\t\t\t\t91F0DAAC20E68AAD001F1C1A /* Output.txt */,\n\t\t\t\t919C8AB320DD87F2006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8AC820DD8873006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t916B889A20BC587D00BA92DF /* Example.swift */,\n\t\t\t\t916B889C20BC5B7600BA92DF /* Output.txt */,\n\t\t\t\t919C8ACB20DD8873006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8AD520DD88C6006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t919C8AD620DD88C6006EE57D /* Example.swift */,\n\t\t\t\t91F0DA9520E6552A001F1C1A /* Output.txt */,\n\t\t\t\t919C8AD820DD88C6006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8AE120DD893E006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFBB20B5D0A600266EF8 /* Example.swift */,\n\t\t\t\t9187BFBC20B5D0A600266EF8 /* Output.txt */,\n\t\t\t\t919C8AE420DD893E006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8AEE20DD897E006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFBF20B5D0A600266EF8 /* Example.swift */,\n\t\t\t\t9187BFC220B5D0A600266EF8 /* Output.txt */,\n\t\t\t\t919C8AF120DD897E006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8AFB20DD8A98006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFEE20B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t9187BFEC20B5D0A700266EF8 /* Output.txt */,\n\t\t\t\t919C8AFE20DD8A98006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8B0820DD8AF0006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFEA20B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t9187BFE920B5D0A700266EF8 /* Output.txt */,\n\t\t\t\t919C8B0B20DD8AF0006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8B1520DD8B59006EE57D /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFCC20B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t9187BFCB20B5D0A700266EF8 /* Output.txt */,\n\t\t\t\t919C8B1820DD8B59006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t919C8B2220DD8BA9006EE57D /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9187BFC920B5D0A700266EF8 /* Example.swift */,\n\t\t\t\t9187BFC820B5D0A700266EF8 /* Output.txt */,\n\t\t\t\t919C8B2520DD8BA9006EE57D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B1206620F610B600730C37 /* ChainOfResponsibility */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B1206C20F610E400730C37 /* Conceptual */,\n\t\t\t\t91B1207820F6114A00730C37 /* RealWorld */,\n\t\t\t);\n\t\t\tpath = ChainOfResponsibility;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B1206C20F610E400730C37 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B1206D20F610E400730C37 /* Example.swift */,\n\t\t\t\t91B1206F20F610E400730C37 /* Info.plist */,\n\t\t\t\t91B120CA20F61BAD00730C37 /* Output.txt */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B1207820F6114A00730C37 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B1207920F6114A00730C37 /* Example.swift */,\n\t\t\t\t91B120CC20F61BBC00730C37 /* Output.txt */,\n\t\t\t\t91B1207B20F6114A00730C37 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B1208420F611DA00730C37 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B1208520F611DA00730C37 /* Example.swift */,\n\t\t\t\t91B1208720F611DA00730C37 /* Info.plist */,\n\t\t\t\t91B120D020F61BD000730C37 /* Output.txt */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B1208B20F611EF00730C37 /* Command */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B1208420F611DA00730C37 /* Conceptual */,\n\t\t\t\t91B1209120F6120C00730C37 /* RealWorld */,\n\t\t\t);\n\t\t\tpath = Command;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B1209120F6120C00730C37 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B1209220F6120C00730C37 /* Example.swift */,\n\t\t\t\t91B120CE20F61BC600730C37 /* Output.txt */,\n\t\t\t\t91B1209420F6120C00730C37 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B1209820F6124200730C37 /* Iterator */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B120AA20F6127400730C37 /* RealWorld */,\n\t\t\t\t91B1209E20F6125500730C37 /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Iterator;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B1209E20F6125500730C37 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B1209F20F6125500730C37 /* Example.swift */,\n\t\t\t\t91B120D420F61BE300730C37 /* Output.txt */,\n\t\t\t\t91B120A120F6125500730C37 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B120AA20F6127400730C37 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B120AB20F6127400730C37 /* Example.swift */,\n\t\t\t\t91B120D220F61BDA00730C37 /* Output.txt */,\n\t\t\t\t91B120AD20F6127400730C37 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B120B120F612F600730C37 /* Proxy */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B120C320F6132E00730C37 /* RealWorld */,\n\t\t\t\t91B120B720F6130A00730C37 /* Conceptual */,\n\t\t\t);\n\t\t\tpath = Proxy;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B120B720F6130A00730C37 /* Conceptual */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B120B820F6130A00730C37 /* Example.swift */,\n\t\t\t\t91B120D820F61BF000730C37 /* Output.txt */,\n\t\t\t\t91B120BA20F6130A00730C37 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Conceptual;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t91B120C320F6132E00730C37 /* RealWorld */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t91B120C420F6132E00730C37 /* Example.swift */,\n\t\t\t\t91B120D620F61BE900730C37 /* Output.txt */,\n\t\t\t\t91B120C620F6132E00730C37 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = RealWorld;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t912C5CDE210BC33D007DC364 /* MediatorConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5CE4210BC33E007DC364 /* Build configuration list for PBXNativeTarget \"MediatorConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5CDB210BC33D007DC364 /* Sources */,\n\t\t\t\t912C5CDC210BC33D007DC364 /* Frameworks */,\n\t\t\t\t912C5CDD210BC33D007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = MediatorConceptual;\n\t\t\tproductName = MediatorConceptual;\n\t\t\tproductReference = 912C5CDF210BC33D007DC364 /* MediatorConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5CEB210BC3A4007DC364 /* MediatorRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5CF1210BC3A4007DC364 /* Build configuration list for PBXNativeTarget \"MediatorRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5CE8210BC3A4007DC364 /* Sources */,\n\t\t\t\t912C5CE9210BC3A4007DC364 /* Frameworks */,\n\t\t\t\t912C5CEA210BC3A4007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = MediatorRealWorld;\n\t\t\tproductName = MediatorRealWorld;\n\t\t\tproductReference = 912C5CEC210BC3A4007DC364 /* MediatorRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5CF7210BC3F5007DC364 /* MementoConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5CFD210BC3F5007DC364 /* Build configuration list for PBXNativeTarget \"MementoConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5CF4210BC3F5007DC364 /* Sources */,\n\t\t\t\t912C5CF5210BC3F5007DC364 /* Frameworks */,\n\t\t\t\t912C5CF6210BC3F5007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = MementoConceptual;\n\t\t\tproductName = MementoConceptual;\n\t\t\tproductReference = 912C5CF8210BC3F5007DC364 /* MementoConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D0A210BC4D8007DC364 /* MementoRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D10210BC4D9007DC364 /* Build configuration list for PBXNativeTarget \"MementoRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D07210BC4D8007DC364 /* Sources */,\n\t\t\t\t912C5D08210BC4D8007DC364 /* Frameworks */,\n\t\t\t\t912C5D09210BC4D8007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = MementoRealWorld;\n\t\t\tproductName = MementoRealWorld;\n\t\t\tproductReference = 912C5D0B210BC4D8007DC364 /* MementoRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D17210BC553007DC364 /* ObserverConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D1D210BC553007DC364 /* Build configuration list for PBXNativeTarget \"ObserverConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D14210BC553007DC364 /* Sources */,\n\t\t\t\t912C5D15210BC553007DC364 /* Frameworks */,\n\t\t\t\t912C5D16210BC553007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ObserverConceptual;\n\t\t\tproductName = ObserverConceptual;\n\t\t\tproductReference = 912C5D18210BC553007DC364 /* ObserverConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D23210BC594007DC364 /* ObserverRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D29210BC594007DC364 /* Build configuration list for PBXNativeTarget \"ObserverRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D20210BC594007DC364 /* Sources */,\n\t\t\t\t912C5D21210BC594007DC364 /* Frameworks */,\n\t\t\t\t912C5D22210BC594007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ObserverRealWorld;\n\t\t\tproductName = ObserverRealWorld;\n\t\t\tproductReference = 912C5D24210BC594007DC364 /* ObserverRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D2F210BC5E1007DC364 /* StateConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D35210BC5E1007DC364 /* Build configuration list for PBXNativeTarget \"StateConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D2C210BC5E1007DC364 /* Sources */,\n\t\t\t\t912C5D2D210BC5E1007DC364 /* Frameworks */,\n\t\t\t\t912C5D2E210BC5E1007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StateConceptual;\n\t\t\tproductName = StateConceptual;\n\t\t\tproductReference = 912C5D30210BC5E1007DC364 /* StateConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D3C210BC62D007DC364 /* StateRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D42210BC62D007DC364 /* Build configuration list for PBXNativeTarget \"StateRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D39210BC62D007DC364 /* Sources */,\n\t\t\t\t912C5D3A210BC62D007DC364 /* Frameworks */,\n\t\t\t\t912C5D3B210BC62D007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StateRealWorld;\n\t\t\tproductName = StateRealWorld;\n\t\t\tproductReference = 912C5D3D210BC62D007DC364 /* StateRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D49210BC6A8007DC364 /* StrategyConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D4F210BC6A8007DC364 /* Build configuration list for PBXNativeTarget \"StrategyConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D46210BC6A8007DC364 /* Sources */,\n\t\t\t\t912C5D47210BC6A8007DC364 /* Frameworks */,\n\t\t\t\t912C5D48210BC6A8007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StrategyConceptual;\n\t\t\tproductName = StrategyConceptual;\n\t\t\tproductReference = 912C5D4A210BC6A8007DC364 /* StrategyConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D55210BC6F0007DC364 /* StrategyRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D5B210BC6F1007DC364 /* Build configuration list for PBXNativeTarget \"StrategyRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D52210BC6F0007DC364 /* Sources */,\n\t\t\t\t912C5D53210BC6F0007DC364 /* Frameworks */,\n\t\t\t\t912C5D54210BC6F0007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StrategyRealWorld;\n\t\t\tproductName = StrategyRealWorld;\n\t\t\tproductReference = 912C5D56210BC6F0007DC364 /* StrategyRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D61210BC749007DC364 /* TemplateMethodConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D67210BC749007DC364 /* Build configuration list for PBXNativeTarget \"TemplateMethodConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D5E210BC749007DC364 /* Sources */,\n\t\t\t\t912C5D5F210BC749007DC364 /* Frameworks */,\n\t\t\t\t912C5D60210BC749007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = TemplateMethodConceptual;\n\t\t\tproductName = TemplateMethodConceptual;\n\t\t\tproductReference = 912C5D62210BC749007DC364 /* TemplateMethodConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D6E210BC7B1007DC364 /* TemplateMethodRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D74210BC7B1007DC364 /* Build configuration list for PBXNativeTarget \"TemplateMethodRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D6B210BC7B1007DC364 /* Sources */,\n\t\t\t\t912C5D6C210BC7B1007DC364 /* Frameworks */,\n\t\t\t\t912C5D6D210BC7B1007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = TemplateMethodRealWorld;\n\t\t\tproductName = TemplateMethodRealWorld;\n\t\t\tproductReference = 912C5D6F210BC7B1007DC364 /* TemplateMethodRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D7B210BC81E007DC364 /* VisitorConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D81210BC81E007DC364 /* Build configuration list for PBXNativeTarget \"VisitorConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D78210BC81E007DC364 /* Sources */,\n\t\t\t\t912C5D79210BC81E007DC364 /* Frameworks */,\n\t\t\t\t912C5D7A210BC81E007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = VisitorConceptual;\n\t\t\tproductName = VisitorConceptual;\n\t\t\tproductReference = 912C5D7C210BC81E007DC364 /* VisitorConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t912C5D87210BC865007DC364 /* VisitorRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 912C5D8D210BC865007DC364 /* Build configuration list for PBXNativeTarget \"VisitorRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t912C5D84210BC865007DC364 /* Sources */,\n\t\t\t\t912C5D85210BC865007DC364 /* Frameworks */,\n\t\t\t\t912C5D86210BC865007DC364 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = VisitorRealWorld;\n\t\t\tproductName = VisitorRealWorld;\n\t\t\tproductReference = 912C5D88210BC865007DC364 /* VisitorRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91301AD120F55C25003B4FC0 /* FlyweightConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91301AD720F55C25003B4FC0 /* Build configuration list for PBXNativeTarget \"FlyweightConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91301ACE20F55C25003B4FC0 /* Sources */,\n\t\t\t\t91301ACF20F55C25003B4FC0 /* Frameworks */,\n\t\t\t\t91301AD020F55C25003B4FC0 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = FlyweightConceptual;\n\t\t\tproductName = FlyweightConceptual;\n\t\t\tproductReference = 91301AD220F55C25003B4FC0 /* FlyweightConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91301ADE20F55CAA003B4FC0 /* FlyweightRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91301AE420F55CAA003B4FC0 /* Build configuration list for PBXNativeTarget \"FlyweightRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91301ADB20F55CAA003B4FC0 /* Sources */,\n\t\t\t\t91301ADC20F55CAA003B4FC0 /* Frameworks */,\n\t\t\t\t91301ADD20F55CAA003B4FC0 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = FlyweightRealWorld;\n\t\t\tproductName = FlyweightRealWorld;\n\t\t\tproductReference = 91301ADF20F55CAA003B4FC0 /* FlyweightRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C89F020DD7EE4006EE57D /* AbstractFactoryRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C89F820DD7EE4006EE57D /* Build configuration list for PBXNativeTarget \"AbstractFactoryRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C89ED20DD7EE4006EE57D /* Sources */,\n\t\t\t\t919C89EE20DD7EE4006EE57D /* Frameworks */,\n\t\t\t\t919C89EF20DD7EE4006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AbstractFactoryRealWorld;\n\t\t\tproductName = AbstractFactoryRealWorld;\n\t\t\tproductReference = 919C89F120DD7EE4006EE57D /* AbstractFactoryRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8A0420DD7F3C006EE57D /* AbstractFactoryConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8A0A20DD7F3C006EE57D /* Build configuration list for PBXNativeTarget \"AbstractFactoryConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A0120DD7F3C006EE57D /* Sources */,\n\t\t\t\t919C8A0220DD7F3C006EE57D /* Frameworks */,\n\t\t\t\t919C8A0320DD7F3C006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AbstractFactoryConceptual;\n\t\t\tproductName = AbstractFactoryConceptual;\n\t\t\tproductReference = 919C8A0520DD7F3C006EE57D /* AbstractFactoryConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8A1220DD81D0006EE57D /* FacadeConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8A1820DD81D0006EE57D /* Build configuration list for PBXNativeTarget \"FacadeConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A0F20DD81D0006EE57D /* Sources */,\n\t\t\t\t919C8A1020DD81D0006EE57D /* Frameworks */,\n\t\t\t\t919C8A1120DD81D0006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = FacadeConceptual;\n\t\t\tproductName = FacadeConceptual;\n\t\t\tproductReference = 919C8A1320DD81D0006EE57D /* FacadeConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8A1F20DD8261006EE57D /* FacadeRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8A2520DD8261006EE57D /* Build configuration list for PBXNativeTarget \"FacadeRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A1C20DD8261006EE57D /* Sources */,\n\t\t\t\t919C8A1D20DD8261006EE57D /* Frameworks */,\n\t\t\t\t919C8A1E20DD8261006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = FacadeRealWorld;\n\t\t\tproductName = FacadeRealWorld;\n\t\t\tproductReference = 919C8A2020DD8261006EE57D /* FacadeRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8A3820DD82F0006EE57D /* BridgeConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8A3E20DD82F0006EE57D /* Build configuration list for PBXNativeTarget \"BridgeConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A3520DD82F0006EE57D /* Sources */,\n\t\t\t\t919C8A3620DD82F0006EE57D /* Frameworks */,\n\t\t\t\t919C8A3720DD82F0006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BridgeConceptual;\n\t\t\tproductName = BridgeConceptual;\n\t\t\tproductReference = 919C8A3920DD82F0006EE57D /* BridgeConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8A4520DD8393006EE57D /* BridgeRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8A4B20DD8393006EE57D /* Build configuration list for PBXNativeTarget \"BridgeRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A4220DD8393006EE57D /* Sources */,\n\t\t\t\t919C8A4320DD8393006EE57D /* Frameworks */,\n\t\t\t\t919C8A4420DD8393006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BridgeRealWorld;\n\t\t\tproductName = BridgeRealWorld;\n\t\t\tproductReference = 919C8A4620DD8393006EE57D /* BridgeRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8A5E20DD849A006EE57D /* AdapterConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8A6420DD849B006EE57D /* Build configuration list for PBXNativeTarget \"AdapterConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A5B20DD849A006EE57D /* Sources */,\n\t\t\t\t919C8A5C20DD849A006EE57D /* Frameworks */,\n\t\t\t\t919C8A5D20DD849A006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AdapterConceptual;\n\t\t\tproductName = AdapterConceptual;\n\t\t\tproductReference = 919C8A5F20DD849A006EE57D /* AdapterConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8A6B20DD858C006EE57D /* AdapterRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8A7120DD858C006EE57D /* Build configuration list for PBXNativeTarget \"AdapterRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A6820DD858C006EE57D /* Sources */,\n\t\t\t\t919C8A6920DD858C006EE57D /* Frameworks */,\n\t\t\t\t919C8A6A20DD858C006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = AdapterRealWorld;\n\t\t\tproductName = AdapterRealWorld;\n\t\t\tproductReference = 919C8A6C20DD858C006EE57D /* AdapterRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8A7920DD8688006EE57D /* BuilderConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8A7F20DD8688006EE57D /* Build configuration list for PBXNativeTarget \"BuilderConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A7620DD8688006EE57D /* Sources */,\n\t\t\t\t919C8A7720DD8688006EE57D /* Frameworks */,\n\t\t\t\t919C8A7820DD8688006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BuilderConceptual;\n\t\t\tproductName = BuilderConceptual;\n\t\t\tproductReference = 919C8A7A20DD8688006EE57D /* BuilderConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8A8620DD86DC006EE57D /* BuilderRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8A8C20DD86DC006EE57D /* Build configuration list for PBXNativeTarget \"BuilderRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A8320DD86DC006EE57D /* Sources */,\n\t\t\t\t919C8A8420DD86DC006EE57D /* Frameworks */,\n\t\t\t\t919C8A8520DD86DC006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BuilderRealWorld;\n\t\t\tproductName = BuilderRealWorld;\n\t\t\tproductReference = 919C8A8720DD86DC006EE57D /* BuilderRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8AA120DD878D006EE57D /* CompositeConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8AA720DD878E006EE57D /* Build configuration list for PBXNativeTarget \"CompositeConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8A9E20DD878D006EE57D /* Sources */,\n\t\t\t\t919C8A9F20DD878D006EE57D /* Frameworks */,\n\t\t\t\t919C8AA020DD878D006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CompositeConceptual;\n\t\t\tproductName = CompositeConceptual;\n\t\t\tproductReference = 919C8AA220DD878D006EE57D /* CompositeConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8AAE20DD87F2006EE57D /* CompositeRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8AB420DD87F2006EE57D /* Build configuration list for PBXNativeTarget \"CompositeRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8AAB20DD87F2006EE57D /* Sources */,\n\t\t\t\t919C8AAC20DD87F2006EE57D /* Frameworks */,\n\t\t\t\t919C8AAD20DD87F2006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CompositeRealWorld;\n\t\t\tproductName = CompositeRealWorld;\n\t\t\tproductReference = 919C8AAF20DD87F2006EE57D /* CompositeRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8AC620DD8873006EE57D /* DecoratorConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8ACC20DD8873006EE57D /* Build configuration list for PBXNativeTarget \"DecoratorConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8AC320DD8873006EE57D /* Sources */,\n\t\t\t\t919C8AC420DD8873006EE57D /* Frameworks */,\n\t\t\t\t919C8AC520DD8873006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = DecoratorConceptual;\n\t\t\tproductName = DecoratorConceptual;\n\t\t\tproductReference = 919C8AC720DD8873006EE57D /* DecoratorConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8AD320DD88C6006EE57D /* DecoratorRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8AD920DD88C6006EE57D /* Build configuration list for PBXNativeTarget \"DecoratorRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8AD020DD88C6006EE57D /* Sources */,\n\t\t\t\t919C8AD120DD88C6006EE57D /* Frameworks */,\n\t\t\t\t919C8AD220DD88C6006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = DecoratorRealWorld;\n\t\t\tproductName = DecoratorRealWorld;\n\t\t\tproductReference = 919C8AD420DD88C6006EE57D /* DecoratorRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8ADF20DD893E006EE57D /* FactoryMethodRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8AE520DD893E006EE57D /* Build configuration list for PBXNativeTarget \"FactoryMethodRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8ADC20DD893E006EE57D /* Sources */,\n\t\t\t\t919C8ADD20DD893E006EE57D /* Frameworks */,\n\t\t\t\t919C8ADE20DD893E006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = FactoryMethodRealWorld;\n\t\t\tproductName = FactoryMethodRealWorld;\n\t\t\tproductReference = 919C8AE020DD893E006EE57D /* FactoryMethodRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8AEC20DD897E006EE57D /* FactoryMethodConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8AF220DD897E006EE57D /* Build configuration list for PBXNativeTarget \"FactoryMethodConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8AE920DD897E006EE57D /* Sources */,\n\t\t\t\t919C8AEA20DD897E006EE57D /* Frameworks */,\n\t\t\t\t919C8AEB20DD897E006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = FactoryMethodConceptual;\n\t\t\tproductName = FactoryConceptual;\n\t\t\tproductReference = 919C8AED20DD897E006EE57D /* FactoryMethodConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8AF920DD8A98006EE57D /* PrototypeConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8AFF20DD8A98006EE57D /* Build configuration list for PBXNativeTarget \"PrototypeConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8AF620DD8A98006EE57D /* Sources */,\n\t\t\t\t919C8AF720DD8A98006EE57D /* Frameworks */,\n\t\t\t\t919C8AF820DD8A98006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = PrototypeConceptual;\n\t\t\tproductName = PrototypeConceptual;\n\t\t\tproductReference = 919C8AFA20DD8A98006EE57D /* PrototypeConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8B0620DD8AF0006EE57D /* PrototypeRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8B0C20DD8AF0006EE57D /* Build configuration list for PBXNativeTarget \"PrototypeRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8B0320DD8AF0006EE57D /* Sources */,\n\t\t\t\t919C8B0420DD8AF0006EE57D /* Frameworks */,\n\t\t\t\t919C8B0520DD8AF0006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = PrototypeRealWorld;\n\t\t\tproductName = PrototypeRealWorld;\n\t\t\tproductReference = 919C8B0720DD8AF0006EE57D /* PrototypeRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8B1320DD8B59006EE57D /* SingletonConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8B1920DD8B59006EE57D /* Build configuration list for PBXNativeTarget \"SingletonConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8B1020DD8B59006EE57D /* Sources */,\n\t\t\t\t919C8B1120DD8B59006EE57D /* Frameworks */,\n\t\t\t\t919C8B1220DD8B59006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SingletonConceptual;\n\t\t\tproductName = SingletonConceptual;\n\t\t\tproductReference = 919C8B1420DD8B59006EE57D /* SingletonConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t919C8B2020DD8BA9006EE57D /* SingletonRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 919C8B2620DD8BA9006EE57D /* Build configuration list for PBXNativeTarget \"SingletonRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t919C8B1D20DD8BA9006EE57D /* Sources */,\n\t\t\t\t919C8B1E20DD8BA9006EE57D /* Frameworks */,\n\t\t\t\t919C8B1F20DD8BA9006EE57D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SingletonRealWorld;\n\t\t\tproductName = SingletonRealWorld;\n\t\t\tproductReference = 919C8B2120DD8BA9006EE57D /* SingletonRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91B1206A20F610E400730C37 /* ChainOfResponsibilityConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91B1207020F610E400730C37 /* Build configuration list for PBXNativeTarget \"ChainOfResponsibilityConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91B1206720F610E400730C37 /* Sources */,\n\t\t\t\t91B1206820F610E400730C37 /* Frameworks */,\n\t\t\t\t91B1206920F610E400730C37 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ChainOfResponsibilityConceptual;\n\t\t\tproductName = ChainOfResponsibilityConceptual;\n\t\t\tproductReference = 91B1206B20F610E400730C37 /* ChainOfResponsibilityConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91B1207620F6114A00730C37 /* ChainOfResponsibilityRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91B1207C20F6114A00730C37 /* Build configuration list for PBXNativeTarget \"ChainOfResponsibilityRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91B1207320F6114A00730C37 /* Sources */,\n\t\t\t\t91B1207420F6114A00730C37 /* Frameworks */,\n\t\t\t\t91B1207520F6114A00730C37 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ChainOfResponsibilityRealWorld;\n\t\t\tproductName = ChainOfResponsibilityRealWorld;\n\t\t\tproductReference = 91B1207720F6114A00730C37 /* ChainOfResponsibilityRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91B1208220F611DA00730C37 /* CommandConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91B1208820F611DA00730C37 /* Build configuration list for PBXNativeTarget \"CommandConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91B1207F20F611DA00730C37 /* Sources */,\n\t\t\t\t91B1208020F611DA00730C37 /* Frameworks */,\n\t\t\t\t91B1208120F611DA00730C37 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CommandConceptual;\n\t\t\tproductName = CommandConceptual;\n\t\t\tproductReference = 91B1208320F611DA00730C37 /* CommandConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91B1208F20F6120C00730C37 /* CommandRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91B1209520F6120C00730C37 /* Build configuration list for PBXNativeTarget \"CommandRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91B1208C20F6120C00730C37 /* Sources */,\n\t\t\t\t91B1208D20F6120C00730C37 /* Frameworks */,\n\t\t\t\t91B1208E20F6120C00730C37 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CommandRealWorld;\n\t\t\tproductName = CommandRealWorld;\n\t\t\tproductReference = 91B1209020F6120C00730C37 /* CommandRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91B1209C20F6125500730C37 /* IteratorConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91B120A220F6125500730C37 /* Build configuration list for PBXNativeTarget \"IteratorConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91B1209920F6125500730C37 /* Sources */,\n\t\t\t\t91B1209A20F6125500730C37 /* Frameworks */,\n\t\t\t\t91B1209B20F6125500730C37 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = IteratorConceptual;\n\t\t\tproductName = IteratorConceptual;\n\t\t\tproductReference = 91B1209D20F6125500730C37 /* IteratorConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91B120A820F6127400730C37 /* IteratorRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91B120AE20F6127400730C37 /* Build configuration list for PBXNativeTarget \"IteratorRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91B120A520F6127400730C37 /* Sources */,\n\t\t\t\t91B120A620F6127400730C37 /* Frameworks */,\n\t\t\t\t91B120A720F6127400730C37 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = IteratorRealWorld;\n\t\t\tproductName = IteratorRealWorld;\n\t\t\tproductReference = 91B120A920F6127400730C37 /* IteratorRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91B120B520F6130900730C37 /* ProxyConceptual */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91B120BB20F6130A00730C37 /* Build configuration list for PBXNativeTarget \"ProxyConceptual\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91B120B220F6130900730C37 /* Sources */,\n\t\t\t\t91B120B320F6130900730C37 /* Frameworks */,\n\t\t\t\t91B120B420F6130900730C37 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ProxyConceptual;\n\t\t\tproductName = ProxyConceptual;\n\t\t\tproductReference = 91B120B620F6130900730C37 /* ProxyConceptual.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t91B120C120F6132E00730C37 /* ProxyRealWorld */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91B120C720F6132E00730C37 /* Build configuration list for PBXNativeTarget \"ProxyRealWorld\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91B120BE20F6132E00730C37 /* Sources */,\n\t\t\t\t91B120BF20F6132E00730C37 /* Frameworks */,\n\t\t\t\t91B120C020F6132E00730C37 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ProxyRealWorld;\n\t\t\tproductName = ProxyRealWorld;\n\t\t\tproductReference = 91B120C220F6132E00730C37 /* ProxyRealWorld.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t9139FA702088D85C00229150 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0930;\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t\tORGANIZATIONNAME = \"Eremenko Maxim\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t912C5CDE210BC33D007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5CEB210BC3A4007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5CF7210BC3F5007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D0A210BC4D8007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D17210BC553007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D23210BC594007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D2F210BC5E1007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D3C210BC62D007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D49210BC6A8007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D55210BC6F0007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D61210BC749007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D6E210BC7B1007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D7B210BC81E007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t912C5D87210BC865007DC364 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91301AD120F55C25003B4FC0 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91301ADE20F55CAA003B4FC0 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C89F020DD7EE4006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8A0420DD7F3C006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8A1220DD81D0006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8A1F20DD8261006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8A3820DD82F0006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8A4520DD8393006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8A5E20DD849A006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8A6B20DD858C006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8A7920DD8688006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8A8620DD86DC006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8AA120DD878D006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8AAE20DD87F2006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8AC620DD8873006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8AD320DD88C6006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8ADF20DD893E006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8AEC20DD897E006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8AF920DD8A98006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8B0620DD8AF0006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8B1320DD8B59006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t919C8B2020DD8BA9006EE57D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91B1206A20F610E400730C37 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91B1207620F6114A00730C37 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91B1208220F611DA00730C37 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91B1208F20F6120C00730C37 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91B1209C20F6125500730C37 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91B120A820F6127400730C37 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91B120B520F6130900730C37 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91B120C120F6132E00730C37 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.3;\n\t\t\t\t\t\tLastSwiftMigration = 1140;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 9139FA732088D85C00229150 /* Build configuration list for PBXProject \"RefactoringGuru.Patterns\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 9139FA6F2088D85C00229150;\n\t\t\tproductRefGroup = 9139FA792088D85C00229150 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t919C8A0420DD7F3C006EE57D /* AbstractFactoryConceptual */,\n\t\t\t\t919C89F020DD7EE4006EE57D /* AbstractFactoryRealWorld */,\n\t\t\t\t919C8A5E20DD849A006EE57D /* AdapterConceptual */,\n\t\t\t\t919C8A6B20DD858C006EE57D /* AdapterRealWorld */,\n\t\t\t\t919C8A3820DD82F0006EE57D /* BridgeConceptual */,\n\t\t\t\t919C8A4520DD8393006EE57D /* BridgeRealWorld */,\n\t\t\t\t919C8A7920DD8688006EE57D /* BuilderConceptual */,\n\t\t\t\t919C8A8620DD86DC006EE57D /* BuilderRealWorld */,\n\t\t\t\t919C8A1220DD81D0006EE57D /* FacadeConceptual */,\n\t\t\t\t919C8A1F20DD8261006EE57D /* FacadeRealWorld */,\n\t\t\t\t919C8AA120DD878D006EE57D /* CompositeConceptual */,\n\t\t\t\t919C8AAE20DD87F2006EE57D /* CompositeRealWorld */,\n\t\t\t\t919C8AC620DD8873006EE57D /* DecoratorConceptual */,\n\t\t\t\t919C8AD320DD88C6006EE57D /* DecoratorRealWorld */,\n\t\t\t\t919C8AEC20DD897E006EE57D /* FactoryMethodConceptual */,\n\t\t\t\t919C8ADF20DD893E006EE57D /* FactoryMethodRealWorld */,\n\t\t\t\t919C8AF920DD8A98006EE57D /* PrototypeConceptual */,\n\t\t\t\t919C8B0620DD8AF0006EE57D /* PrototypeRealWorld */,\n\t\t\t\t919C8B1320DD8B59006EE57D /* SingletonConceptual */,\n\t\t\t\t919C8B2020DD8BA9006EE57D /* SingletonRealWorld */,\n\t\t\t\t91301AD120F55C25003B4FC0 /* FlyweightConceptual */,\n\t\t\t\t91301ADE20F55CAA003B4FC0 /* FlyweightRealWorld */,\n\t\t\t\t91B1206A20F610E400730C37 /* ChainOfResponsibilityConceptual */,\n\t\t\t\t91B1207620F6114A00730C37 /* ChainOfResponsibilityRealWorld */,\n\t\t\t\t91B1208220F611DA00730C37 /* CommandConceptual */,\n\t\t\t\t91B1208F20F6120C00730C37 /* CommandRealWorld */,\n\t\t\t\t91B1209C20F6125500730C37 /* IteratorConceptual */,\n\t\t\t\t91B120A820F6127400730C37 /* IteratorRealWorld */,\n\t\t\t\t91B120B520F6130900730C37 /* ProxyConceptual */,\n\t\t\t\t91B120C120F6132E00730C37 /* ProxyRealWorld */,\n\t\t\t\t912C5CDE210BC33D007DC364 /* MediatorConceptual */,\n\t\t\t\t912C5CEB210BC3A4007DC364 /* MediatorRealWorld */,\n\t\t\t\t912C5CF7210BC3F5007DC364 /* MementoConceptual */,\n\t\t\t\t912C5D0A210BC4D8007DC364 /* MementoRealWorld */,\n\t\t\t\t912C5D17210BC553007DC364 /* ObserverConceptual */,\n\t\t\t\t912C5D23210BC594007DC364 /* ObserverRealWorld */,\n\t\t\t\t912C5D2F210BC5E1007DC364 /* StateConceptual */,\n\t\t\t\t912C5D3C210BC62D007DC364 /* StateRealWorld */,\n\t\t\t\t912C5D49210BC6A8007DC364 /* StrategyConceptual */,\n\t\t\t\t912C5D55210BC6F0007DC364 /* StrategyRealWorld */,\n\t\t\t\t912C5D61210BC749007DC364 /* TemplateMethodConceptual */,\n\t\t\t\t912C5D6E210BC7B1007DC364 /* TemplateMethodRealWorld */,\n\t\t\t\t912C5D7B210BC81E007DC364 /* VisitorConceptual */,\n\t\t\t\t912C5D87210BC865007DC364 /* VisitorRealWorld */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t912C5CDD210BC33D007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5CEA210BC3A4007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5CF6210BC3F5007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D09210BC4D8007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D16210BC553007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D22210BC594007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D2E210BC5E1007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D3B210BC62D007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D48210BC6A8007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D54210BC6F0007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D60210BC749007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D6D210BC7B1007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D7A210BC81E007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D86210BC865007DC364 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91301AD020F55C25003B4FC0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91301ADD20F55CAA003B4FC0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C89EF20DD7EE4006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A0320DD7F3C006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A1120DD81D0006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A1E20DD8261006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A3720DD82F0006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A4420DD8393006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A5D20DD849A006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A6A20DD858C006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A7820DD8688006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A8520DD86DC006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AA020DD878D006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AAD20DD87F2006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AC520DD8873006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AD220DD88C6006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8ADE20DD893E006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AEB20DD897E006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AF820DD8A98006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8B0520DD8AF0006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8B1220DD8B59006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8B1F20DD8BA9006EE57D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1206920F610E400730C37 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1207520F6114A00730C37 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1208120F611DA00730C37 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1208E20F6120C00730C37 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1209B20F6125500730C37 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B120A720F6127400730C37 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B120B420F6130900730C37 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B120C020F6132E00730C37 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t912C5CDB210BC33D007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5CE2210BC33E007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5CE8210BC3A4007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5CEF210BC3A4007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5CF4210BC3F5007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D05210BC4A5007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D07210BC4D8007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D0E210BC4D9007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D14210BC553007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D1B210BC553007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D20210BC594007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D27210BC594007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D2C210BC5E1007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D33210BC5E1007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D39210BC62D007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D40210BC62D007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D46210BC6A8007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D4D210BC6A8007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D52210BC6F0007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D59210BC6F1007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D5E210BC749007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D65210BC749007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D6B210BC7B1007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D72210BC7B1007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D78210BC81E007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D7F210BC81E007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t912C5D84210BC865007DC364 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t912C5D8B210BC865007DC364 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91301ACE20F55C25003B4FC0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91301AD520F55C25003B4FC0 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91301ADB20F55CAA003B4FC0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91301AE220F55CAA003B4FC0 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C89ED20DD7EE4006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C89FA20DD7F03006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A0120DD7F3C006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8A0D20DD7F58006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A0F20DD81D0006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8A1B20DD81E7006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A1C20DD8261006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8A2820DD829C006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A3520DD82F0006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8A4120DD832C006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A4220DD8393006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8A4E20DD83AA006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A5B20DD849A006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8A6720DD84DB006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A6820DD858C006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8A7520DD85A3006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A7620DD8688006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8A8220DD8698006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A8320DD86DC006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8A8F20DD86EB006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8A9E20DD878D006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8AAA20DD879C006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AAB20DD87F2006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8AB220DD87F2006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AC320DD8873006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8ACF20DD887F006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AD020DD88C6006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8AD720DD88C6006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8ADC20DD893E006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8AE820DD894F006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AE920DD897E006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8AF520DD89CE006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8AF620DD8A98006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8B0220DD8AB3006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8B0320DD8AF0006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8B0F20DD8B12006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8B1020DD8B59006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8B1C20DD8B70006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t919C8B1D20DD8BA9006EE57D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t919C8B2920DD8BC3006EE57D /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1206720F610E400730C37 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91B1206E20F610E400730C37 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1207320F6114A00730C37 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91B1207A20F6114A00730C37 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1207F20F611DA00730C37 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91B1208620F611DA00730C37 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1208C20F6120C00730C37 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91B1209320F6120C00730C37 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B1209920F6125500730C37 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91B120A020F6125500730C37 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B120A520F6127400730C37 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91B120AC20F6127400730C37 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B120B220F6130900730C37 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91B120B920F6130A00730C37 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B120BE20F6132E00730C37 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t91B120C520F6132E00730C37 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t912C5CE5210BC33E007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Mediator/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.MediatorConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5CE6210BC33E007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Mediator/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.MediatorConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5CF2210BC3A4007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Mediator/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.MediatorRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5CF3210BC3A4007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Mediator/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.MediatorRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5CFE210BC3F5007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Memento/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.MementoConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5CFF210BC3F5007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Memento/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.MementoConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D11210BC4D9007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Memento/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.MementoRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D12210BC4D9007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Memento/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.MementoRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D1E210BC553007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Observer/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ObserverConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D1F210BC553007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Observer/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ObserverConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D2A210BC594007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Observer/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ObserverRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D2B210BC594007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Observer/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ObserverRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D36210BC5E1007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/State/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.StateConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D37210BC5E1007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/State/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.StateConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D43210BC62D007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/State/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.StateRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D44210BC62D007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/State/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.StateRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D50210BC6A8007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Strategy/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.StrategyConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D51210BC6A8007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Strategy/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.StrategyConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D5C210BC6F1007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Strategy/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.StrategyRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D5D210BC6F1007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Strategy/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.StrategyRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D68210BC749007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/TemplateMethod/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.TemplateMethodConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D69210BC749007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/TemplateMethod/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.TemplateMethodConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D75210BC7B1007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/TemplateMethod/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.TemplateMethodRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D76210BC7B1007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/TemplateMethod/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.TemplateMethodRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D82210BC81E007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Visitor/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.VisitorConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D83210BC81E007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Visitor/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.VisitorConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t912C5D8E210BC865007DC364 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Visitor/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.VisitorRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t912C5D8F210BC865007DC364 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Visitor/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.VisitorRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91301AD820F55C25003B4FC0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Flyweight/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FlyweightConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91301AD920F55C25003B4FC0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Flyweight/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FlyweightConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91301AE520F55CAA003B4FC0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Flyweight/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FlyweightRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91301AE620F55CAA003B4FC0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Flyweight/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FlyweightRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9139FA932088D85F00229150 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9139FA942088D85F00229150 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C89F620DD7EE4006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/AbstractFactory/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.AbstractFactoryRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C89F720DD7EE4006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/AbstractFactory/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.AbstractFactoryRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8A0B20DD7F3C006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/AbstractFactory/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.AbstractFactoryConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8A0C20DD7F3C006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/AbstractFactory/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.AbstractFactoryConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8A1920DD81D0006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Facade/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FacadeConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8A1A20DD81D0006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Facade/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FacadeConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8A2620DD8261006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Facade/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FacadeRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8A2720DD8261006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Facade/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FacadeRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8A3F20DD82F0006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Bridge/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.BridgeConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8A4020DD82F0006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Bridge/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.BridgeConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8A4C20DD8393006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Bridge/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.BridgeRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8A4D20DD8393006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Bridge/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.BridgeRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8A6520DD849B006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Adapter/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.AdapterConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8A6620DD849B006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Adapter/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.AdapterConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8A7220DD858C006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Adapter/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.AdapterRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8A7320DD858C006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Adapter/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.AdapterRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8A8020DD8688006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Builder/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.BuilderConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8A8120DD8688006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Builder/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.BuilderConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8A8D20DD86DC006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Builder/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.BuilderRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8A8E20DD86DC006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Builder/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.BuilderRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8AA820DD878E006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Composite/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.CompositeConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8AA920DD878E006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Composite/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.CompositeConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8AB520DD87F2006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Composite/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.CompositeRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8AB620DD87F2006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Composite/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.CompositeRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8ACD20DD8873006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Decorator/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.DecoratorConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8ACE20DD8873006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Decorator/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.DecoratorConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8ADA20DD88C6006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Decorator/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.DecoratorRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8ADB20DD88C6006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Decorator/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.DecoratorRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8AE620DD893E006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/FactoryMethod/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FactoryMethodRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8AE720DD893E006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/FactoryMethod/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FactoryMethodRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8AF320DD897E006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/FactoryMethod/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FactoryConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8AF420DD897E006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/FactoryMethod/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.FactoryConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8B0020DD8A98006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Prototype/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.PrototypeConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8B0120DD8A98006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Prototype/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.PrototypeConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8B0D20DD8AF0006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Prototype/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.PrototypeRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8B0E20DD8AF0006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Prototype/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.PrototypeRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8B1A20DD8B59006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Singleton/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.SingletonConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8B1B20DD8B59006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Singleton/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.SingletonConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t919C8B2720DD8BA9006EE57D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Singleton/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.SingletonRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t919C8B2820DD8BA9006EE57D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Singleton/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.SingletonRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91B1207120F610E400730C37 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/ChainOfResponsibility/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ChainOfResponsibilityConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91B1207220F610E400730C37 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/ChainOfResponsibility/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ChainOfResponsibilityConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91B1207D20F6114A00730C37 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/ChainOfResponsibility/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ChainOfResponsibilityRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91B1207E20F6114A00730C37 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/ChainOfResponsibility/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ChainOfResponsibilityRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91B1208920F611DA00730C37 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Command/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.CommandConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91B1208A20F611DA00730C37 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Command/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.CommandConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91B1209620F6120C00730C37 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Command/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.CommandRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91B1209720F6120C00730C37 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Command/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.CommandRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91B120A320F6125500730C37 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Iterator/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.IteratorConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91B120A420F6125500730C37 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Iterator/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.IteratorConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91B120AF20F6127400730C37 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Iterator/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.IteratorRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91B120B020F6127400730C37 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Iterator/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.IteratorRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91B120BC20F6130A00730C37 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Proxy/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ProxyConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91B120BD20F6130A00730C37 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Proxy/Conceptual/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ProxyConceptual;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t91B120C820F6132E00730C37 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Proxy/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ProxyRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t91B120C920F6132E00730C37 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tINFOPLIST_FILE = Sources/Proxy/RealWorld/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.maxim.eremenko.ProxyRealWorld;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t912C5CE4210BC33E007DC364 /* Build configuration list for PBXNativeTarget \"MediatorConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5CE5210BC33E007DC364 /* Debug */,\n\t\t\t\t912C5CE6210BC33E007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5CF1210BC3A4007DC364 /* Build configuration list for PBXNativeTarget \"MediatorRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5CF2210BC3A4007DC364 /* Debug */,\n\t\t\t\t912C5CF3210BC3A4007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5CFD210BC3F5007DC364 /* Build configuration list for PBXNativeTarget \"MementoConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5CFE210BC3F5007DC364 /* Debug */,\n\t\t\t\t912C5CFF210BC3F5007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D10210BC4D9007DC364 /* Build configuration list for PBXNativeTarget \"MementoRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D11210BC4D9007DC364 /* Debug */,\n\t\t\t\t912C5D12210BC4D9007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D1D210BC553007DC364 /* Build configuration list for PBXNativeTarget \"ObserverConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D1E210BC553007DC364 /* Debug */,\n\t\t\t\t912C5D1F210BC553007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D29210BC594007DC364 /* Build configuration list for PBXNativeTarget \"ObserverRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D2A210BC594007DC364 /* Debug */,\n\t\t\t\t912C5D2B210BC594007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D35210BC5E1007DC364 /* Build configuration list for PBXNativeTarget \"StateConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D36210BC5E1007DC364 /* Debug */,\n\t\t\t\t912C5D37210BC5E1007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D42210BC62D007DC364 /* Build configuration list for PBXNativeTarget \"StateRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D43210BC62D007DC364 /* Debug */,\n\t\t\t\t912C5D44210BC62D007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D4F210BC6A8007DC364 /* Build configuration list for PBXNativeTarget \"StrategyConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D50210BC6A8007DC364 /* Debug */,\n\t\t\t\t912C5D51210BC6A8007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D5B210BC6F1007DC364 /* Build configuration list for PBXNativeTarget \"StrategyRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D5C210BC6F1007DC364 /* Debug */,\n\t\t\t\t912C5D5D210BC6F1007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D67210BC749007DC364 /* Build configuration list for PBXNativeTarget \"TemplateMethodConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D68210BC749007DC364 /* Debug */,\n\t\t\t\t912C5D69210BC749007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D74210BC7B1007DC364 /* Build configuration list for PBXNativeTarget \"TemplateMethodRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D75210BC7B1007DC364 /* Debug */,\n\t\t\t\t912C5D76210BC7B1007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D81210BC81E007DC364 /* Build configuration list for PBXNativeTarget \"VisitorConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D82210BC81E007DC364 /* Debug */,\n\t\t\t\t912C5D83210BC81E007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t912C5D8D210BC865007DC364 /* Build configuration list for PBXNativeTarget \"VisitorRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t912C5D8E210BC865007DC364 /* Debug */,\n\t\t\t\t912C5D8F210BC865007DC364 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91301AD720F55C25003B4FC0 /* Build configuration list for PBXNativeTarget \"FlyweightConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91301AD820F55C25003B4FC0 /* Debug */,\n\t\t\t\t91301AD920F55C25003B4FC0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91301AE420F55CAA003B4FC0 /* Build configuration list for PBXNativeTarget \"FlyweightRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91301AE520F55CAA003B4FC0 /* Debug */,\n\t\t\t\t91301AE620F55CAA003B4FC0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9139FA732088D85C00229150 /* Build configuration list for PBXProject \"RefactoringGuru.Patterns\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9139FA932088D85F00229150 /* Debug */,\n\t\t\t\t9139FA942088D85F00229150 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C89F820DD7EE4006EE57D /* Build configuration list for PBXNativeTarget \"AbstractFactoryRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C89F620DD7EE4006EE57D /* Debug */,\n\t\t\t\t919C89F720DD7EE4006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8A0A20DD7F3C006EE57D /* Build configuration list for PBXNativeTarget \"AbstractFactoryConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8A0B20DD7F3C006EE57D /* Debug */,\n\t\t\t\t919C8A0C20DD7F3C006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8A1820DD81D0006EE57D /* Build configuration list for PBXNativeTarget \"FacadeConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8A1920DD81D0006EE57D /* Debug */,\n\t\t\t\t919C8A1A20DD81D0006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8A2520DD8261006EE57D /* Build configuration list for PBXNativeTarget \"FacadeRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8A2620DD8261006EE57D /* Debug */,\n\t\t\t\t919C8A2720DD8261006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8A3E20DD82F0006EE57D /* Build configuration list for PBXNativeTarget \"BridgeConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8A3F20DD82F0006EE57D /* Debug */,\n\t\t\t\t919C8A4020DD82F0006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8A4B20DD8393006EE57D /* Build configuration list for PBXNativeTarget \"BridgeRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8A4C20DD8393006EE57D /* Debug */,\n\t\t\t\t919C8A4D20DD8393006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8A6420DD849B006EE57D /* Build configuration list for PBXNativeTarget \"AdapterConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8A6520DD849B006EE57D /* Debug */,\n\t\t\t\t919C8A6620DD849B006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8A7120DD858C006EE57D /* Build configuration list for PBXNativeTarget \"AdapterRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8A7220DD858C006EE57D /* Debug */,\n\t\t\t\t919C8A7320DD858C006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8A7F20DD8688006EE57D /* Build configuration list for PBXNativeTarget \"BuilderConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8A8020DD8688006EE57D /* Debug */,\n\t\t\t\t919C8A8120DD8688006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8A8C20DD86DC006EE57D /* Build configuration list for PBXNativeTarget \"BuilderRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8A8D20DD86DC006EE57D /* Debug */,\n\t\t\t\t919C8A8E20DD86DC006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8AA720DD878E006EE57D /* Build configuration list for PBXNativeTarget \"CompositeConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8AA820DD878E006EE57D /* Debug */,\n\t\t\t\t919C8AA920DD878E006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8AB420DD87F2006EE57D /* Build configuration list for PBXNativeTarget \"CompositeRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8AB520DD87F2006EE57D /* Debug */,\n\t\t\t\t919C8AB620DD87F2006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8ACC20DD8873006EE57D /* Build configuration list for PBXNativeTarget \"DecoratorConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8ACD20DD8873006EE57D /* Debug */,\n\t\t\t\t919C8ACE20DD8873006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8AD920DD88C6006EE57D /* Build configuration list for PBXNativeTarget \"DecoratorRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8ADA20DD88C6006EE57D /* Debug */,\n\t\t\t\t919C8ADB20DD88C6006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8AE520DD893E006EE57D /* Build configuration list for PBXNativeTarget \"FactoryMethodRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8AE620DD893E006EE57D /* Debug */,\n\t\t\t\t919C8AE720DD893E006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8AF220DD897E006EE57D /* Build configuration list for PBXNativeTarget \"FactoryMethodConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8AF320DD897E006EE57D /* Debug */,\n\t\t\t\t919C8AF420DD897E006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8AFF20DD8A98006EE57D /* Build configuration list for PBXNativeTarget \"PrototypeConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8B0020DD8A98006EE57D /* Debug */,\n\t\t\t\t919C8B0120DD8A98006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8B0C20DD8AF0006EE57D /* Build configuration list for PBXNativeTarget \"PrototypeRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8B0D20DD8AF0006EE57D /* Debug */,\n\t\t\t\t919C8B0E20DD8AF0006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8B1920DD8B59006EE57D /* Build configuration list for PBXNativeTarget \"SingletonConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8B1A20DD8B59006EE57D /* Debug */,\n\t\t\t\t919C8B1B20DD8B59006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t919C8B2620DD8BA9006EE57D /* Build configuration list for PBXNativeTarget \"SingletonRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t919C8B2720DD8BA9006EE57D /* Debug */,\n\t\t\t\t919C8B2820DD8BA9006EE57D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91B1207020F610E400730C37 /* Build configuration list for PBXNativeTarget \"ChainOfResponsibilityConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91B1207120F610E400730C37 /* Debug */,\n\t\t\t\t91B1207220F610E400730C37 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91B1207C20F6114A00730C37 /* Build configuration list for PBXNativeTarget \"ChainOfResponsibilityRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91B1207D20F6114A00730C37 /* Debug */,\n\t\t\t\t91B1207E20F6114A00730C37 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91B1208820F611DA00730C37 /* Build configuration list for PBXNativeTarget \"CommandConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91B1208920F611DA00730C37 /* Debug */,\n\t\t\t\t91B1208A20F611DA00730C37 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91B1209520F6120C00730C37 /* Build configuration list for PBXNativeTarget \"CommandRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91B1209620F6120C00730C37 /* Debug */,\n\t\t\t\t91B1209720F6120C00730C37 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91B120A220F6125500730C37 /* Build configuration list for PBXNativeTarget \"IteratorConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91B120A320F6125500730C37 /* Debug */,\n\t\t\t\t91B120A420F6125500730C37 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91B120AE20F6127400730C37 /* Build configuration list for PBXNativeTarget \"IteratorRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91B120AF20F6127400730C37 /* Debug */,\n\t\t\t\t91B120B020F6127400730C37 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91B120BB20F6130A00730C37 /* Build configuration list for PBXNativeTarget \"ProxyConceptual\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91B120BC20F6130A00730C37 /* Debug */,\n\t\t\t\t91B120BD20F6130A00730C37 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t91B120C720F6132E00730C37 /* Build configuration list for PBXNativeTarget \"ProxyRealWorld\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t91B120C820F6132E00730C37 /* Debug */,\n\t\t\t\t91B120C920F6132E00730C37 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 9139FA702088D85C00229150 /* Project object */;\n}\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:/Users/devme/Development/iOS/Guru/Patterns/RefactoringGuru.Patterns.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/AbstractFactoryConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8A0420DD7F3C006EE57D\"\n               BuildableName = \"AbstractFactoryConceptual.xctest\"\n               BlueprintName = \"AbstractFactoryConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/AbstractFactoryRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C89F020DD7EE4006EE57D\"\n               BuildableName = \"AbstractFactoryRealWorld.xctest\"\n               BlueprintName = \"AbstractFactoryRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/AdapterConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8A5E20DD849A006EE57D\"\n               BuildableName = \"AdapterConceptual.xctest\"\n               BlueprintName = \"AdapterConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/AdapterRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8A6B20DD858C006EE57D\"\n               BuildableName = \"AdapterRealWorld.xctest\"\n               BlueprintName = \"AdapterRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/BridgeConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8A3820DD82F0006EE57D\"\n               BuildableName = \"BridgeConceptual.xctest\"\n               BlueprintName = \"BridgeConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/BridgeRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8A4520DD8393006EE57D\"\n               BuildableName = \"BridgeRealWorld.xctest\"\n               BlueprintName = \"BridgeRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/BuilderConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8A7920DD8688006EE57D\"\n               BuildableName = \"BuilderConceptual.xctest\"\n               BlueprintName = \"BuilderConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/BuilderRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8A8620DD86DC006EE57D\"\n               BuildableName = \"BuilderRealWorld.xctest\"\n               BlueprintName = \"BuilderRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/ChainOfResponsibilityConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91B1206A20F610E400730C37\"\n               BuildableName = \"ChainOfResponsibilityConceptual.xctest\"\n               BlueprintName = \"ChainOfResponsibilityConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/ChainOfResponsibilityRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91B1207620F6114A00730C37\"\n               BuildableName = \"ChainOfResponsibilityRealWorld.xctest\"\n               BlueprintName = \"ChainOfResponsibilityRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/CommandConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91B1208220F611DA00730C37\"\n               BuildableName = \"CommandConceptual.xctest\"\n               BlueprintName = \"CommandConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/CommandRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91B1208F20F6120C00730C37\"\n               BuildableName = \"CommandRealWorld.xctest\"\n               BlueprintName = \"CommandRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/CompositeConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8AA120DD878D006EE57D\"\n               BuildableName = \"CompositeConceptual.xctest\"\n               BlueprintName = \"CompositeConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/CompositeRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8AAE20DD87F2006EE57D\"\n               BuildableName = \"CompositeRealWorld.xctest\"\n               BlueprintName = \"CompositeRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/DecoratorConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8AC620DD8873006EE57D\"\n               BuildableName = \"DecoratorConceptual.xctest\"\n               BlueprintName = \"DecoratorConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/DecoratorRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8AD320DD88C6006EE57D\"\n               BuildableName = \"DecoratorRealWorld.xctest\"\n               BlueprintName = \"DecoratorRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/FacadeConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8A1220DD81D0006EE57D\"\n               BuildableName = \"FacadeConceptual.xctest\"\n               BlueprintName = \"FacadeConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/FacadeRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8A1F20DD8261006EE57D\"\n               BuildableName = \"FacadeRealWorld.xctest\"\n               BlueprintName = \"FacadeRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/FactoryMethodConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8AEC20DD897E006EE57D\"\n               BuildableName = \"FactoryMethodConceptual.xctest\"\n               BlueprintName = \"FactoryMethodConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/FactoryMethodRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8ADF20DD893E006EE57D\"\n               BuildableName = \"FactoryMethodRealWorld.xctest\"\n               BlueprintName = \"FactoryMethodRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/FlyweightConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91301AD120F55C25003B4FC0\"\n               BuildableName = \"FlyweightConceptual.xctest\"\n               BlueprintName = \"FlyweightConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/FlyweightRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91301ADE20F55CAA003B4FC0\"\n               BuildableName = \"FlyweightRealWorld.xctest\"\n               BlueprintName = \"FlyweightRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/IteratorConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91B1209C20F6125500730C37\"\n               BuildableName = \"IteratorConceptual.xctest\"\n               BlueprintName = \"IteratorConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/IteratorRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91B120A820F6127400730C37\"\n               BuildableName = \"IteratorRealWorld.xctest\"\n               BlueprintName = \"IteratorRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/MediatorConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5CDE210BC33D007DC364\"\n               BuildableName = \"MediatorConceptual.xctest\"\n               BlueprintName = \"MediatorConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/MediatorRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5CEB210BC3A4007DC364\"\n               BuildableName = \"MediatorRealWorld.xctest\"\n               BlueprintName = \"MediatorRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/MementoConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5CF7210BC3F5007DC364\"\n               BuildableName = \"MementoConceptual.xctest\"\n               BlueprintName = \"MementoConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/MementoRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D0A210BC4D8007DC364\"\n               BuildableName = \"MementoRealWorld.xctest\"\n               BlueprintName = \"MementoRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/ObserverConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D17210BC553007DC364\"\n               BuildableName = \"ObserverConceptual.xctest\"\n               BlueprintName = \"ObserverConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/ObserverRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D23210BC594007DC364\"\n               BuildableName = \"ObserverRealWorld.xctest\"\n               BlueprintName = \"ObserverRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/PrototypeConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8AF920DD8A98006EE57D\"\n               BuildableName = \"PrototypeConceptual.xctest\"\n               BlueprintName = \"PrototypeConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/PrototypeRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8B0620DD8AF0006EE57D\"\n               BuildableName = \"PrototypeRealWorld.xctest\"\n               BlueprintName = \"PrototypeRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/ProxyConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91B120B520F6130900730C37\"\n               BuildableName = \"ProxyConceptual.xctest\"\n               BlueprintName = \"ProxyConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/ProxyRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91B120C120F6132E00730C37\"\n               BuildableName = \"ProxyRealWorld.xctest\"\n               BlueprintName = \"ProxyRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/SingletonConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8B1320DD8B59006EE57D\"\n               BuildableName = \"SingletonConceptual.xctest\"\n               BlueprintName = \"SingletonConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/SingletonRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"919C8B2020DD8BA9006EE57D\"\n               BuildableName = \"SingletonRealWorld.xctest\"\n               BlueprintName = \"SingletonRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/StateConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D2F210BC5E1007DC364\"\n               BuildableName = \"StateConceptual.xctest\"\n               BlueprintName = \"StateConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/StateRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D3C210BC62D007DC364\"\n               BuildableName = \"StateRealWorld.xctest\"\n               BlueprintName = \"StateRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/StrategyConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D49210BC6A8007DC364\"\n               BuildableName = \"StrategyConceptual.xctest\"\n               BlueprintName = \"StrategyConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/StrategyRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D55210BC6F0007DC364\"\n               BuildableName = \"StrategyRealWorld.xctest\"\n               BlueprintName = \"StrategyRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/TemplateMethodConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D61210BC749007DC364\"\n               BuildableName = \"TemplateMethodConceptual.xctest\"\n               BlueprintName = \"TemplateMethodConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/TemplateMethodRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D6E210BC7B1007DC364\"\n               BuildableName = \"TemplateMethodRealWorld.xctest\"\n               BlueprintName = \"TemplateMethodRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/VisitorConceptual.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D7B210BC81E007DC364\"\n               BuildableName = \"VisitorConceptual.xctest\"\n               BlueprintName = \"VisitorConceptual\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "RefactoringGuru.Patterns.xcodeproj/xcshareddata/xcschemes/VisitorRealWorld.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0940\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"912C5D87210BC865007DC364\"\n               BuildableName = \"VisitorRealWorld.xctest\"\n               BlueprintName = \"VisitorRealWorld\"\n               ReferencedContainer = \"container:RefactoringGuru.Patterns.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Sources/AbstractFactory/Conceptual/Example.swift",
    "content": "/// EN: Abstract Factory Design Pattern\n///\n/// Intent: Lets you produce families of related objects without specifying\n/// their concrete classes.\n///\n/// RU: Паттерн Абстрактная Фабрика\n///\n/// Назначение: Предоставляет интерфейс для создания семейств связанных или\n/// зависимых объектов без привязки к их конкретным классам.\n\nimport XCTest\n\n/// EN: The Abstract Factory protocol declares a set of methods that return\n/// different abstract products. These products are called a family and are\n/// related by a high-level theme or concept. Products of one family are usually\n/// able to collaborate among themselves. A family of products may have several\n/// variants, but the products of one variant are incompatible with products\n/// of another.\n///\n/// RU: Интерфейс Абстрактной Фабрики объявляет набор методов, которые\n/// возвращают различные абстрактные продукты. Эти продукты называются\n/// семейством и связаны темой или концепцией высокого уровня. Продукты одного\n/// семейства обычно могут взаимодействовать между собой. Семейство продуктов\n/// может иметь несколько вариаций, но продукты одной вариации несовместимы с\n/// продуктами другой.\nprotocol AbstractFactory {\n\n    func createProductA() -> AbstractProductA\n    func createProductB() -> AbstractProductB\n}\n\n/// EN: Concrete Factories produce a family of products that belong to a single\n/// variant. The factory guarantees that resulting products are compatible.\n/// Note that signatures of the Concrete Factory's methods return an abstract\n/// product, while inside the method a concrete product is instantiated.\n///\n/// RU: Конкретная Фабрика производит семейство продуктов одной вариации.\n/// Фабрика гарантирует совместимость полученных продуктов. Обратите внимание,\n/// что сигнатуры методов Конкретной Фабрики возвращают абстрактный продукт, в\n/// то время как внутри метода создается экземпляр конкретного продукта.\nclass ConcreteFactory1: AbstractFactory {\n\n    func createProductA() -> AbstractProductA {\n        return ConcreteProductA1()\n    }\n\n    func createProductB() -> AbstractProductB {\n        return ConcreteProductB1()\n    }\n}\n\n/// EN: Each Concrete Factory has a corresponding product variant.\n///\n/// RU: Каждая Конкретная Фабрика имеет соответствующую вариацию продукта.\nclass ConcreteFactory2: AbstractFactory {\n\n    func createProductA() -> AbstractProductA {\n        return ConcreteProductA2()\n    }\n\n    func createProductB() -> AbstractProductB {\n        return ConcreteProductB2()\n    }\n}\n\n/// EN: Each distinct product of a product family should have a base protocol.\n/// All variants of the product must implement this protocol.\n///\n/// RU: Каждый отдельный продукт семейства продуктов должен иметь базовый\n/// интерфейс. Все вариации продукта должны реализовывать этот интерфейс.\nprotocol AbstractProductA {\n\n    func usefulFunctionA() -> String\n}\n\n/// EN: Concrete Products are created by corresponding Concrete Factories.\n///\n/// RU: Конкретные продукты создаются соответствующими Конкретными Фабриками.\nclass ConcreteProductA1: AbstractProductA {\n\n    func usefulFunctionA() -> String {\n        return \"The result of the product A1.\"\n    }\n}\n\nclass ConcreteProductA2: AbstractProductA {\n\n    func usefulFunctionA() -> String {\n        return \"The result of the product A2.\"\n    }\n}\n\n/// EN: The base protocol of another product. All products can interact with\n/// each other, but proper interaction is possible only between products of the\n/// same concrete variant.\n///\n/// RU: Базовый интерфейс другого продукта. Все продукты могут взаимодействовать\n/// друг с другом, но правильное взаимодействие возможно только между продуктами\n/// одной и той же конкретной вариации.\nprotocol AbstractProductB {\n\n    /// EN: Product B is able to do its own thing...\n    ///\n    /// RU: Продукт B способен работать самостоятельно...\n    func usefulFunctionB() -> String\n\n    /// EN: ...but it also can collaborate with the ProductA.\n    ///\n    /// The Abstract Factory makes sure that all products it creates are of the\n    /// same variant and thus, compatible.\n    ///\n    /// RU: ...а также взаимодействовать с Продуктами A той же вариации.\n    ///\n    /// Абстрактная Фабрика гарантирует, что все продукты, которые она создает,\n    /// имеют одинаковую вариацию и, следовательно, совместимы.\n    func anotherUsefulFunctionB(collaborator: AbstractProductA) -> String\n}\n\n/// EN: Concrete Products are created by corresponding Concrete Factories.\n///\n/// RU: Конкретные Продукты создаются соответствующими Конкретными Фабриками.\nclass ConcreteProductB1: AbstractProductB {\n\n    func usefulFunctionB() -> String {\n        return \"The result of the product B1.\"\n    }\n\n    /// EN: This variant, Product B1, is only able to work correctly with the\n    /// variant, Product A1. Nevertheless, it accepts any instance of\n    /// AbstractProductA as an argument.\n    ///\n    /// RU: Продукт B1 может корректно работать только с Продуктом A1. Тем не\n    /// менее, он принимает любой экземпляр Абстрактного Продукта А в качестве\n    /// аргумента.\n    func anotherUsefulFunctionB(collaborator: AbstractProductA) -> String {\n        let result = collaborator.usefulFunctionA()\n        return \"The result of the B1 collaborating with the (\\(result))\"\n    }\n}\n\nclass ConcreteProductB2: AbstractProductB {\n\n    func usefulFunctionB() -> String {\n        return \"The result of the product B2.\"\n    }\n\n    /// EN: This variant, Product B2, is only able to work correctly with the\n    /// variant, Product A2. Nevertheless, it accepts any instance of\n    /// AbstractProductA as an argument.\n    ///\n    /// RU: Продукт B2 может корректно работать только с Продуктом A2. Тем не\n    /// менее, он принимает любой экземпляр Абстрактного Продукта А в качестве\n    /// аргумента.\n    func anotherUsefulFunctionB(collaborator: AbstractProductA) -> String {\n        let result = collaborator.usefulFunctionA()\n        return \"The result of the B2 collaborating with the (\\(result))\"\n    }\n}\n\n/// EN: The client code works with factories and products only through abstract\n/// types: AbstractFactory and AbstractProduct. This lets you pass any factory\n/// or product subclass to the client code without breaking it.\n///\n/// RU: Клиентский код работает с фабриками и продуктами только через\n/// абстрактные типы: Абстрактная Фабрика и Абстрактный Продукт. Это позволяет\n/// передавать любой подкласс фабрики или продукта клиентскому коду, не нарушая\n/// его.\nclass Client {\n    // ...\n    static func someClientCode(factory: AbstractFactory) {\n        let productA = factory.createProductA()\n        let productB = factory.createProductB()\n\n        print(productB.usefulFunctionB())\n        print(productB.anotherUsefulFunctionB(collaborator: productA))\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass AbstractFactoryConceptual: XCTestCase {\n\n    func testAbstractFactoryConceptual() {\n\n        /// EN: The client code can work with any concrete factory class.\n        ///\n        /// RU: Клиентский код может работать с любым конкретным классом\n        /// фабрики.\n\n        print(\"Client: Testing client code with the first factory type:\")\n        Client.someClientCode(factory: ConcreteFactory1())\n\n        print(\"Client: Testing the same client code with the second factory type:\")\n        Client.someClientCode(factory: ConcreteFactory2())\n    }\n}\n"
  },
  {
    "path": "Sources/AbstractFactory/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/AbstractFactory/Conceptual/Output.txt",
    "content": "Client: Testing client code with the first factory type:\nThe result of the product B1.\nThe result of the B1 collaborating with the (The result of the product A1.)\nClient: Testing the same client code with the second factory type:\nThe result of the product B2.\nThe result of the B2 collaborating with the (The result of the product A2.)\n"
  },
  {
    "path": "Sources/AbstractFactory/RealWorld/Example.swift",
    "content": "import Foundation\nimport UIKit\nimport XCTest\n\nenum AuthType {\n    case login\n    case signUp\n}\n\n\nprotocol AuthViewFactory {\n\n    static func authView(for type: AuthType) -> AuthView\n    static func authController(for type: AuthType) -> AuthViewController\n}\n\nclass StudentAuthViewFactory: AuthViewFactory {\n\n    static func authView(for type: AuthType) -> AuthView {\n        print(\"Student View has been created\")\n        switch type {\n            case .login: return StudentLoginView()\n            case .signUp: return StudentSignUpView()\n        }\n    }\n\n    static func authController(for type: AuthType) -> AuthViewController {\n        let controller = StudentAuthViewController(contentView: authView(for: type))\n        print(\"Student View Controller has been created\")\n        return controller\n    }\n}\n\nclass TeacherAuthViewFactory: AuthViewFactory {\n\n    static func authView(for type: AuthType) -> AuthView {\n        print(\"Teacher View has been created\")\n        switch type {\n            case .login: return TeacherLoginView()\n            case .signUp: return TeacherSignUpView()\n        }\n    }\n\n    static func authController(for type: AuthType) -> AuthViewController {\n        let controller = TeacherAuthViewController(contentView: authView(for: type))\n        print(\"Teacher View Controller has been created\")\n        return controller\n    }\n}\n\n\n\nprotocol AuthView {\n\n    typealias AuthAction = (AuthType) -> ()\n\n    var contentView: UIView { get }\n    var authHandler: AuthAction? { get set }\n\n    var description: String { get }\n}\n\nclass StudentSignUpView: UIView, AuthView {\n\n    private class StudentSignUpContentView: UIView {\n\n        /// This view contains a number of features available only during a\n        /// STUDENT authorization.\n    }\n\n    var contentView: UIView = StudentSignUpContentView()\n\n    /// The handler will be connected for actions of buttons of this view.\n    var authHandler: AuthView.AuthAction?\n\n    override var description: String {\n        return \"Student-SignUp-View\"\n    }\n}\n\nclass StudentLoginView: UIView, AuthView {\n\n    private let emailField = UITextField()\n    private let passwordField = UITextField()\n    private let signUpButton = UIButton()\n\n    var contentView: UIView {\n        return self\n    }\n\n    /// The handler will be connected for actions of buttons of this view.\n    var authHandler: AuthView.AuthAction?\n\n    override var description: String {\n        return \"Student-Login-View\"\n    }\n}\n\n\n\nclass TeacherSignUpView: UIView, AuthView {\n\n    class TeacherSignUpContentView: UIView {\n\n        /// This view contains a number of features available only during a\n        /// TEACHER authorization.\n    }\n\n    var contentView: UIView = TeacherSignUpContentView()\n\n    /// The handler will be connected for actions of buttons of this view.\n    var authHandler: AuthView.AuthAction?\n\n    override var description: String {\n        return \"Teacher-SignUp-View\"\n    }\n}\n\nclass TeacherLoginView: UIView, AuthView {\n\n    private let emailField = UITextField()\n    private let passwordField = UITextField()\n    private let loginButton = UIButton()\n    private let forgotPasswordButton = UIButton()\n\n    var contentView: UIView {\n        return self\n    }\n\n    /// The handler will be connected for actions of buttons of this view.\n    var authHandler: AuthView.AuthAction?\n\n    override var description: String {\n        return \"Teacher-Login-View\"\n    }\n}\n\n\n\nclass AuthViewController: UIViewController {\n\n    fileprivate var contentView: AuthView\n\n    init(contentView: AuthView) {\n        self.contentView = contentView\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    required convenience init?(coder aDecoder: NSCoder) {\n        return nil\n    }\n}\n\nclass StudentAuthViewController: AuthViewController {\n\n    /// Student-oriented features\n}\n\nclass TeacherAuthViewController: AuthViewController {\n\n    /// Teacher-oriented features\n}\n\n\nprivate class ClientCode {\n\n    private var currentController: AuthViewController?\n\n    private lazy var navigationController: UINavigationController = {\n        guard let vc = currentController else { return UINavigationController() }\n        return UINavigationController(rootViewController: vc)\n    }()\n\n    private let factoryType: AuthViewFactory.Type\n\n    init(factoryType: AuthViewFactory.Type) {\n        self.factoryType = factoryType\n    }\n\n    /// MARK: - Presentation\n\n    func presentLogin() {\n        let controller = factoryType.authController(for: .login)\n        navigationController.pushViewController(controller, animated: true)\n    }\n\n    func presentSignUp() {\n        let controller = factoryType.authController(for: .signUp)\n        navigationController.pushViewController(controller, animated: true)\n    }\n\n    /// Other methods...\n}\n\n\nclass AbstractFactoryRealWorld: XCTestCase {\n\n    func testFactoryMethodRealWorld() {\n\n        #if teacherMode\n            let clientCode = ClientCode(factoryType: TeacherAuthViewFactory.self)\n        #else\n            let clientCode = ClientCode(factoryType: StudentAuthViewFactory.self)\n        #endif\n\n        /// Present LogIn flow\n        clientCode.presentLogin()\n        print(\"Login screen has been presented\")\n\n        /// Present SignUp flow\n        clientCode.presentSignUp()\n        print(\"Sign up screen has been presented\")\n    }\n}"
  },
  {
    "path": "Sources/AbstractFactory/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/AbstractFactory/RealWorld/Output.txt",
    "content": "Teacher View has been created\nTeacher View Controller has been created\nLogin screen has been presented\nTeacher View has been created\nTeacher View Controller has been created\nSign up screen has been presented\n"
  },
  {
    "path": "Sources/Adapter/Conceptual/Example.swift",
    "content": "/// EN: Adapter Design Pattern\n///\n/// Intent: Provides a unified interface that allows objects with incompatible\n/// interfaces to collaborate.\n///\n/// RU: Паттерн Адаптер\n///\n/// Назначение: Позволяет объектам с несовместимыми интерфейсами работать\n/// вместе.\n\nimport XCTest\n\n/// EN: The Target defines the domain-specific interface used by the client\n/// code.\n///\n/// RU: Целевой класс объявляет интерфейс, с которым может работать клиентский\n/// код.\nclass Target {\n\n    func request() -> String {\n        return \"Target: The default target's behavior.\"\n    }\n}\n\n/// EN: The Adaptee contains some useful behavior, but its interface is\n/// incompatible with the existing client code. The Adaptee needs some\n/// adaptation before the client code can use it.\n///\n/// RU: Адаптируемый класс содержит некоторое полезное поведение, но его\n/// интерфейс несовместим с существующим клиентским кодом. Адаптируемый класс\n/// нуждается в некоторой доработке, прежде чем клиентский код сможет его\n/// использовать.\nclass Adaptee {\n\n    public func specificRequest() -> String {\n        return \".eetpadA eht fo roivaheb laicepS\"\n    }\n}\n\n/// EN: The Adapter makes the Adaptee's interface compatible with the Target's\n/// interface.\n///\n/// RU: Адаптер делает интерфейс Адаптируемого класса совместимым с целевым\n/// интерфейсом.\nclass Adapter: Target {\n\n    private var adaptee: Adaptee\n\n    init(_ adaptee: Adaptee) {\n        self.adaptee = adaptee\n    }\n\n    override func request() -> String {\n        return \"Adapter: (TRANSLATED) \" + adaptee.specificRequest().reversed()\n    }\n}\n\n/// EN: The client code supports all classes that follow the Target interface.\n///\n/// RU: Клиентский код поддерживает все классы, использующие целевой интерфейс.\nclass Client {\n    // ...\n    static func someClientCode(target: Target) {\n        print(target.request())\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass AdapterConceptual: XCTestCase {\n\n    func testAdapterConceptual() {\n        print(\"Client: I can work just fine with the Target objects:\")\n        Client.someClientCode(target: Target())\n\n        let adaptee = Adaptee()\n        print(\"Client: The Adaptee class has a weird interface. See, I don't understand it:\")\n        print(\"Adaptee: \" + adaptee.specificRequest())\n\n        print(\"Client: But I can work with it via the Adapter:\")\n        Client.someClientCode(target: Adapter(adaptee))\n    }\n}\n"
  },
  {
    "path": "Sources/Adapter/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Adapter/Conceptual/Output.txt",
    "content": "Client: I can work just fine with the Target objects:\nTarget: The default target's behavior.\nClient: The Adaptee class has a weird interface. See, I don't understand it:\nAdaptee: .eetpadA eht fo roivaheb laicepS\nClient: But I can work with it via the Adapter:\nAdapter: (TRANSLATED) Special behavior of the Adaptee."
  },
  {
    "path": "Sources/Adapter/RealWorld/Example.swift",
    "content": "import XCTest\nimport UIKit\n\n/// Adapter Design Pattern\n///\n/// Intent: Convert the interface of a class into the interface clients expect.\n/// Adapter lets classes work together that couldn't work otherwise because of\n/// incompatible interfaces.\n\nclass AdapterRealWorld: XCTestCase {\n\n    /// Example. Let's assume that our app perfectly works with Facebook\n    /// authorization. However, users ask you to add sign in via Twitter.\n    ///\n    /// Unfortunately, Twitter SDK has a different authorization method.\n    ///\n    /// Firstly, you have to create the new protocol 'AuthService' and insert\n    /// the authorization method of Facebook SDK.\n    ///\n    /// Secondly, write an extension for Twitter SDK and implement methods of\n    /// AuthService protocol, just a simple redirect.\n    ///\n    /// Thirdly, write an extension for Facebook SDK. You should not write any\n    /// code at this point as methods already implemented by Facebook SDK.\n    ///\n    /// It just tells a compiler that both SDKs have the same interface.\n\n    func testAdapterRealWorld() {\n\n        print(\"Starting an authorization via Facebook\")\n        startAuthorization(with: FacebookAuthSDK())\n\n        print(\"Starting an authorization via Twitter.\")\n        startAuthorization(with: TwitterAuthSDK())\n    }\n\n    func startAuthorization(with service: AuthService) {\n\n        /// The current top view controller of the app\n        let topViewController = UIViewController()\n\n        service.presentAuthFlow(from: topViewController)\n    }\n}\n\nprotocol AuthService {\n\n    func presentAuthFlow(from viewController: UIViewController)\n}\n\nclass FacebookAuthSDK {\n\n    func presentAuthFlow(from viewController: UIViewController) {\n        /// Call SDK methods and pass a view controller\n        print(\"Facebook WebView has been shown.\")\n    }\n}\n\nclass TwitterAuthSDK {\n\n    func startAuthorization(with viewController: UIViewController) {\n        /// Call SDK methods and pass a view controller\n        print(\"Twitter WebView has been shown. Users will be happy :)\")\n    }\n}\n\nextension TwitterAuthSDK: AuthService {\n\n    /// This is an adapter\n    ///\n    /// Yeah, we are able to not create another class and just extend an\n    /// existing one\n\n    func presentAuthFlow(from viewController: UIViewController) {\n        print(\"The Adapter is called! Redirecting to the original method...\")\n        self.startAuthorization(with: viewController)\n    }\n}\n\nextension FacebookAuthSDK: AuthService {\n    /// This extension just tells a compiler that both SDKs have the same\n    /// interface.\n}\n"
  },
  {
    "path": "Sources/Adapter/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Adapter/RealWorld/Output.txt",
    "content": "Starting an authorization via Facebook\nFacebook WebView has been shown\n///\nStarting an authorization via Twitter\nThe Adapter is called! Redirecting to the original method...\nTwitter WebView has been shown. Users will be happy :)\n"
  },
  {
    "path": "Sources/Bridge/Conceptual/Example.swift",
    "content": "/// EN: Bridge Design Pattern\n///\n/// Intent: Lets you split a large class or a set of closely related classes\n/// into two separate hierarchies—abstraction and implementation—which can be\n/// developed independently of each other.\n///\n///                    A\n///                 /     \\                        A         N\n///               Aa      Ab        ===>        /     \\     / \\\n///              / \\     /  \\                 Aa(N) Ab(N)  1   2\n///            Aa1 Aa2  Ab1 Ab2\n///\n/// RU: Паттерн Мост\n///\n/// Назначение: Разделяет один или несколько классов на две отдельные иерархии —\n/// абстракцию и реализацию, позволяя изменять их независимо друг от друга.\n///\n///               A\n///            /     \\                        A         N\n///          Aa      Ab        ===>        /     \\     / \\\n///         / \\     /  \\                 Aa(N) Ab(N)  1   2\n///       Aa1 Aa2  Ab1 Ab2\n\nimport XCTest\n\n/// EN: The Abstraction defines the interface for the \"control\" part of the two\n/// class hierarchies. It holds a reference to an object from the\n/// Implementation hierarchy and delegates all of the real work to this object.\n///\n/// RU: Абстракция устанавливает интерфейс для «управляющей» части двух иерархий\n/// классов. Она содержит ссылку на объект из иерархии Реализации и делегирует\n/// ему всю настоящую работу.\nclass Abstraction {\n\n    fileprivate var implementation: Implementation\n\n    init(_ implementation: Implementation) {\n        self.implementation = implementation\n    }\n\n    func operation() -> String {\n        let operation = implementation.operationImplementation()\n        return \"Abstraction: Base operation with:\\n\" + operation\n    }\n}\n\n/// EN: You can extend the Abstraction without changing the Implementation\n/// classes.\n///\n/// RU: Можно расширить Абстракцию без изменения классов Реализации.\nclass ExtendedAbstraction: Abstraction {\n\n    override func operation() -> String {\n        let operation = implementation.operationImplementation()\n        return \"ExtendedAbstraction: Extended operation with:\\n\" + operation\n    }\n}\n\n/// EN: The Implementation defines the interface for all implementation classes.\n/// It doesn't have to match the Abstraction's interface. In fact, the two\n/// interfaces can be entirely different. Typically the Implementation interface\n/// provides only primitive operations, while the Abstraction defines higher-\n/// level operations based on those primitives.\n///\n/// RU: Реализация устанавливает интерфейс для всех классов реализации. Он не\n/// должен соответствовать интерфейсу Абстракции. На практике оба интерфейса\n/// могут быть совершенно разными. Как правило, интерфейс Реализации\n/// предоставляет только примитивные операции, в то время как Абстракция\n/// определяет операции более высокого уровня, основанные на этих примитивах.\nprotocol Implementation {\n\n    func operationImplementation() -> String\n}\n\n/// EN: Each Concrete Implementation corresponds to a specific platform and\n/// implements the Implementation interface using that platform's API.\n///\n/// RU: Каждая Конкретная Реализация соответствует определённой платформе и\n/// реализует интерфейс Реализации с использованием API этой платформы.\nclass ConcreteImplementationA: Implementation {\n\n    func operationImplementation() -> String {\n        return \"ConcreteImplementationA: Here's the result on the platform A.\\n\"\n    }\n}\n\nclass ConcreteImplementationB: Implementation {\n\n    func operationImplementation() -> String {\n        return \"ConcreteImplementationB: Here's the result on the platform B\\n\"\n    }\n}\n\n/// EN: Except for the initialization phase, where an Abstraction object gets\n/// linked with a specific Implementation object, the client code should only\n/// depend on the Abstraction class. This way the client code can support any\n/// abstraction-implementation combination.\n///\n/// RU: За исключением этапа инициализации, когда объект Абстракции связывается\n/// с определённым объектом Реализации, клиентский код должен зависеть только от\n/// класса Абстракции. Таким образом, клиентский код может поддерживать любую\n/// комбинацию абстракции и реализации.\nclass Client {\n    // ...\n    static func someClientCode(abstraction: Abstraction) {\n        print(abstraction.operation())\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass BridgeConceptual: XCTestCase {\n\n    func testBridgeConceptual() {\n        // EN: The client code should be able to work with any pre-configured\n        // abstraction-implementation combination.\n        //\n        // RU: Клиентский код должен работать с любой предварительно\n        // сконфигурированной комбинацией абстракции и реализации.\n        let implementation = ConcreteImplementationA()\n        Client.someClientCode(abstraction: Abstraction(implementation))\n\n        let concreteImplementation = ConcreteImplementationB()\n        Client.someClientCode(abstraction: ExtendedAbstraction(concreteImplementation))\n    }\n}"
  },
  {
    "path": "Sources/Bridge/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Bridge/Conceptual/Output.txt",
    "content": "Abstraction: Base operation with:\nConcreteImplementationA: Here's the result on the platform A\n\nExtendedAbstraction: Extended operation with:\nConcreteImplementationB: Here's the result on the platform B\n"
  },
  {
    "path": "Sources/Bridge/RealWorld/Example.swift",
    "content": "import XCTest\n\nprivate class BridgeRealWorld: XCTestCase {\n\n    func testBridgeRealWorld() {\n\n        print(\"Client: Pushing Photo View Controller...\")\n        push(PhotoViewController())\n\n        print()\n\n        print(\"Client: Pushing Feed View Controller...\")\n        push(FeedViewController())\n    }\n\n    func push(_ container: SharingSupportable) {\n\n        let instagram = InstagramSharingService()\n        let facebook = FaceBookSharingService()\n\n        container.accept(service: instagram)\n        container.update(content: foodModel)\n\n        container.accept(service: facebook)\n        container.update(content: foodModel)\n    }\n\n    var foodModel: Content {\n        return FoodDomainModel(title: \"This food is so various and delicious!\",\n                               images: [UIImage(), UIImage()],\n                               calories: 47)\n    }\n}\n\nprivate protocol SharingSupportable {\n\n    /// Abstraction\n    func accept(service: SharingService)\n\n    func update(content: Content)\n}\n\nclass BaseViewController: UIViewController, SharingSupportable {\n\n    fileprivate var shareService: SharingService?\n\n    func update(content: Content) {\n        /// ...updating UI and showing a content...\n        /// ...\n        /// ... then, a user will choose a content and trigger an event\n        print(\"\\(description): User selected a \\(content) to share\")\n        /// ...\n        shareService?.share(content: content)\n    }\n\n    func accept(service: SharingService) {\n        shareService = service\n    }\n}\n\nclass PhotoViewController: BaseViewController {\n\n    /// Custom UI and features\n\n    override var description: String {\n        return \"PhotoViewController\"\n    }\n}\n\nclass FeedViewController: BaseViewController {\n\n    /// Custom UI and features\n\n    override var description: String {\n        return \"FeedViewController\"\n    }\n}\n\nprotocol SharingService {\n\n    /// Implementation\n    func share(content: Content)\n}\n\nclass FaceBookSharingService: SharingService {\n\n    func share(content: Content) {\n\n        /// Use FaceBook API to share a content\n        print(\"Service: \\(content) was posted to the Facebook\")\n    }\n}\n\nclass InstagramSharingService: SharingService {\n\n    func share(content: Content) {\n\n        /// Use Instagram API to share a content\n        print(\"Service: \\(content) was posted to the Instagram\", terminator: \"\\n\\n\")\n    }\n}\n\nprotocol Content: CustomStringConvertible {\n\n    var title: String { get }\n    var images: [UIImage] { get }\n}\n\nstruct FoodDomainModel: Content {\n\n    var title: String\n    var images: [UIImage]\n    var calories: Int\n\n    var description: String {\n        return \"Food Model\"\n    }\n}\n"
  },
  {
    "path": "Sources/Bridge/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Bridge/RealWorld/Output.txt",
    "content": "Client: Pushing Photo View Controller...\nPhotoViewController: User selected a Food Model to share\nService: Food Model was posted to the Instagram\n\nPhotoViewController: User selected a Food Model to share\nService: Food Model was posted to the Facebook\n\nClient: Pushing Feed View Controller...\nFeedViewController: User selected a Food Model to share\nService: Food Model was posted to the Instagram\n\nFeedViewController: User selected a Food Model to share\nService: Food Model was posted to the Facebook\n"
  },
  {
    "path": "Sources/Builder/Conceptual/Example.swift",
    "content": "/// EN: Builder Design Pattern\n///\n/// Intent: Lets you construct complex objects step by step. The pattern allows\n/// you to produce different types and representations of an object using the\n/// same construction code.\n///\n/// RU: Паттерн Строитель\n///\n/// Назначение: Позволяет создавать сложные объекты пошагово. Строитель даёт\n/// возможность использовать один и тот же код строительства для получения\n/// разных представлений объектов.\n\nimport XCTest\n\n/// EN: The Builder interface specifies methods for creating the different parts\n/// of the Product objects.\n///\n/// RU: Интерфейс Строителя объявляет создающие методы для различных частей\n/// объектов Продуктов.\nprotocol Builder {\n\n    func producePartA()\n    func producePartB()\n    func producePartC()\n}\n\n/// EN: The Concrete Builder classes follow the Builder interface and provide\n/// specific implementations of the building steps. Your program may have\n/// several variations of Builders, implemented differently.\n///\n/// RU: Классы Конкретного Строителя следуют интерфейсу Строителя и\n/// предоставляют конкретные реализации шагов построения. Ваша программа может\n/// иметь несколько вариантов Строителей, реализованных по-разному.\nclass ConcreteBuilder1: Builder {\n\n    /// EN: A fresh builder instance should contain a blank product object,\n    /// which is used in further assembly.\n    ///\n    /// RU: Новый экземпляр строителя должен содержать пустой объект продукта,\n    /// который используется в дальнейшей сборке.\n    private var product = Product1()\n\n    func reset() {\n        product = Product1()\n    }\n\n    /// EN: All production steps work with the same product instance.\n    ///\n    /// RU: Все этапы производства работают с одним и тем же экземпляром\n    /// продукта.\n    func producePartA() {\n        product.add(part: \"PartA1\")\n    }\n\n    func producePartB() {\n        product.add(part: \"PartB1\")\n    }\n\n    func producePartC() {\n        product.add(part: \"PartC1\")\n    }\n\n    /// EN: Concrete Builders are supposed to provide their own methods for\n    /// retrieving results. That's because various types of builders may create\n    /// entirely different products that don't follow the same interface.\n    /// Therefore, such methods cannot be declared in the base Builder interface\n    /// (at least in a statically typed programming language).\n    ///\n    /// Usually, after returning the end result to the client, a builder\n    /// instance is expected to be ready to start producing another product.\n    /// That's why it's a usual practice to call the reset method at the end of\n    /// the `getProduct` method body. However, this behavior is not mandatory,\n    /// and you can make your builders wait for an explicit reset call from the\n    /// client code before disposing of the previous result.\n    ///\n    /// RU: Конкретные Строители должны предоставить свои собственные методы\n    /// получения результатов. Это связано с тем, что различные типы строителей\n    /// могут создавать совершенно разные продукты с разными интерфейсами.\n    /// Поэтому такие методы не могут быть объявлены в базовом интерфейсе\n    /// Строителя (по крайней мере, в статически типизированном языке\n    /// программирования).\n    ///\n    /// Как правило, после возвращения конечного результата клиенту, экземпляр\n    /// строителя должен быть готов к началу производства следующего продукта.\n    /// Поэтому обычной практикой является вызов метода сброса в конце тела\n    /// метода getProduct. Однако такое поведение не является обязательным, вы\n    /// можете заставить своих строителей ждать явного запроса на сброс из кода\n    /// клиента, прежде чем избавиться от предыдущего результата.\n    func retrieveProduct() -> Product1 {\n        let result = self.product\n        reset()\n        return result\n    }\n}\n\n/// EN: The Director is only responsible for executing the building steps in a\n/// particular sequence. It is helpful when producing products according to a\n/// specific order or configuration. Strictly speaking, the Director class is\n/// optional, since the client can control builders directly.\n///\n/// RU: Директор отвечает только за выполнение шагов построения в определённой\n/// последовательности. Это полезно при производстве продуктов в определённом\n/// порядке или особой конфигурации. Строго говоря, класс Директор необязателен,\n/// так как клиент может напрямую управлять строителями.\nclass Director {\n\n    private var builder: Builder?\n\n    /// EN: The Director works with any builder instance that the client code\n    /// passes to it. This way, the client code may alter the final type of the\n    /// newly assembled product.\n    ///\n    /// RU: Директор работает с любым экземпляром строителя, который передаётся\n    /// ему клиентским кодом. Таким образом, клиентский код может изменить\n    /// конечный тип вновь собираемого продукта.\n    func update(builder: Builder) {\n        self.builder = builder\n    }\n\n    /// EN: The Director can construct several product variations using the same\n    /// building steps.\n    ///\n    /// RU: Директор может строить несколько вариаций продукта, используя\n    /// одинаковые шаги построения.\n    func buildMinimalViableProduct() {\n        builder?.producePartA()\n    }\n\n    func buildFullFeaturedProduct() {\n        builder?.producePartA()\n        builder?.producePartB()\n        builder?.producePartC()\n    }\n}\n\n/// EN: It makes sense to use the Builder pattern only when your products are\n/// quite complex and require extensive configuration.\n///\n/// Unlike in other creational patterns, different concrete builders can produce\n/// unrelated products. In other words, results of various builders may not\n/// always follow the same interface.\n///\n/// RU: Имеет смысл использовать паттерн Строитель только тогда, когда ваши\n/// продукты достаточно сложны и требуют обширной конфигурации.\n///\n/// В отличие от других порождающих паттернов, различные конкретные строители\n/// могут производить несвязанные продукты. Другими словами, результаты\n/// различных строителей могут не всегда следовать одному и тому же интерфейсу.\nclass Product1 {\n\n    private var parts = [String]()\n\n    func add(part: String) {\n        self.parts.append(part)\n    }\n\n    func listParts() -> String {\n        return \"Product parts: \" + parts.joined(separator: \", \") + \"\\n\"\n    }\n}\n\n/// EN: The client code creates a builder object, passes it to the director and\n/// then initiates the construction process. The end result is retrieved from\n/// the builder object.\n///\n/// RU: Клиентский код создаёт объект-строитель, передаёт его директору, а затем\n/// инициирует процесс построения. Конечный результат извлекается из\n/// объекта-строителя.\nclass Client {\n    // ...\n    static func someClientCode(director: Director) {\n        let builder = ConcreteBuilder1()\n        director.update(builder: builder)\n        \n        print(\"Standard basic product:\")\n        director.buildMinimalViableProduct()\n        print(builder.retrieveProduct().listParts())\n\n        print(\"Standard full featured product:\")\n        director.buildFullFeaturedProduct()\n        print(builder.retrieveProduct().listParts())\n\n        // EN: Remember, the Builder pattern can be used without a Director\n        // class.\n        //\n        // RU: Помните, что паттерн Строитель можно использовать без класса\n        // Директор.\n        print(\"Custom product:\")\n        builder.producePartA()\n        builder.producePartC()\n        print(builder.retrieveProduct().listParts())\n    }\n    // ...\n}\n\n/// EN: Let's see how it all comes together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass BuilderConceptual: XCTestCase {\n\n    func testBuilderConceptual() {\n        let director = Director()\n        Client.someClientCode(director: director)\n    }\n}\n"
  },
  {
    "path": "Sources/Builder/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Builder/Conceptual/Output.txt",
    "content": "Standard basic product:\nProduct parts: PartA1\n\nStandard full featured product:\nProduct parts: PartA1, PartB1, PartC1\n\nCustom product:\nProduct parts: PartA1, PartC1\n"
  },
  {
    "path": "Sources/Builder/RealWorld/Example.swift",
    "content": "import Foundation\nimport XCTest\n\n\nclass BaseQueryBuilder<Model: DomainModel> {\n\n    typealias Predicate = (Model) -> (Bool)\n\n    func limit(_ limit: Int) -> BaseQueryBuilder<Model> {\n        return self\n    }\n\n    func filter(_ predicate: @escaping Predicate) -> BaseQueryBuilder<Model> {\n        return self\n    }\n\n    func fetch() -> [Model] {\n        preconditionFailure(\"Should be overridden in subclasses.\")\n    }\n}\n\nclass RealmQueryBuilder<Model: DomainModel>: BaseQueryBuilder<Model> {\n\n    enum Query {\n        case filter(Predicate)\n        case limit(Int)\n        /// ...\n    }\n\n    fileprivate var operations = [Query]()\n\n    @discardableResult\n    override func limit(_ limit: Int) -> RealmQueryBuilder<Model> {\n        operations.append(Query.limit(limit))\n        return self\n    }\n\n    @discardableResult\n    override func filter(_ predicate: @escaping Predicate) -> RealmQueryBuilder<Model> {\n        operations.append(Query.filter(predicate))\n        return self\n    }\n\n    override func fetch() -> [Model] {\n        print(\"RealmQueryBuilder: Initializing RealmDataProvider with \\(operations.count) operations:\")\n        return RealmProvider().fetch(operations)\n    }\n}\n\nclass CoreDataQueryBuilder<Model: DomainModel>: BaseQueryBuilder<Model> {\n\n    enum Query {\n        case filter(Predicate)\n        case limit(Int)\n        case includesPropertyValues(Bool)\n        /// ...\n    }\n\n    fileprivate var operations = [Query]()\n\n    override func limit(_ limit: Int) -> CoreDataQueryBuilder<Model> {\n        operations.append(Query.limit(limit))\n        return self\n    }\n\n    override func filter(_ predicate: @escaping Predicate) -> CoreDataQueryBuilder<Model> {\n        operations.append(Query.filter(predicate))\n        return self\n    }\n\n    func includesPropertyValues(_ toggle: Bool) -> CoreDataQueryBuilder<Model> {\n        operations.append(Query.includesPropertyValues(toggle))\n        return self\n    }\n\n    override func fetch() -> [Model] {\n        print(\"CoreDataQueryBuilder: Initializing CoreDataProvider with \\(operations.count) operations.\")\n        return CoreDataProvider().fetch(operations)\n    }\n}\n\n\n/// Data Providers contain a logic how to fetch models. Builders accumulate\n/// operations and then update providers to fetch the data.\n\nclass RealmProvider {\n\n    func fetch<Model: DomainModel>(_ operations: [RealmQueryBuilder<Model>.Query]) -> [Model] {\n\n        print(\"RealmProvider: Retrieving data from Realm...\")\n\n        for item in operations {\n            switch item {\n            case .filter(_):\n                print(\"RealmProvider: executing the 'filter' operation.\")\n                /// Use Realm instance to filter results.\n                break\n            case .limit(_):\n                print(\"RealmProvider: executing the 'limit' operation.\")\n                /// Use Realm instance to limit results.\n                break\n            }\n        }\n\n        /// Return results from Realm\n        return []\n    }\n}\n\nclass CoreDataProvider {\n\n    func fetch<Model: DomainModel>(_ operations: [CoreDataQueryBuilder<Model>.Query]) -> [Model] {\n\n        /// Create a NSFetchRequest\n\n        print(\"CoreDataProvider: Retrieving data from CoreData...\")\n\n        for item in operations {\n            switch item {\n            case .filter(_):\n                print(\"CoreDataProvider: executing the 'filter' operation.\")\n                /// Set a 'predicate' for a NSFetchRequest.\n                break\n            case .limit(_):\n                print(\"CoreDataProvider: executing the 'limit' operation.\")\n                /// Set a 'fetchLimit' for a NSFetchRequest.\n                break\n            case .includesPropertyValues(_):\n                print(\"CoreDataProvider: executing the 'includesPropertyValues' operation.\")\n                /// Set an 'includesPropertyValues' for a NSFetchRequest.\n                break\n            }\n        }\n\n        /// Execute a NSFetchRequest and return results.\n        return []\n    }\n}\n\n\nprotocol DomainModel {\n    /// The protocol groups domain models to the common interface\n}\n\nprivate struct User: DomainModel {\n    let id: Int\n    let age: Int\n    let email: String\n}\n\n\nclass BuilderRealWorld: XCTestCase {\n\n    func testBuilderRealWorld() {\n        print(\"Client: Start fetching data from Realm\")\n        clientCode(builder: RealmQueryBuilder<User>())\n\n        print()\n\n        print(\"Client: Start fetching data from CoreData\")\n        clientCode(builder: CoreDataQueryBuilder<User>())\n    }\n\n    fileprivate func clientCode(builder: BaseQueryBuilder<User>) {\n\n        let results = builder.filter({ $0.age < 20 })\n            .limit(1)\n            .fetch()\n\n        print(\"Client: I have fetched: \" + String(results.count) + \" records.\")\n    }\n}\n\n"
  },
  {
    "path": "Sources/Builder/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Builder/RealWorld/Output.txt",
    "content": "Client: Start fetching data from Realm\nRealmQueryBuilder: Initializing RealmDataProvider with 2 operations:\nRealmProvider: Retrieving data from Realm...\nRealmProvider: executing the 'filter' operation.\nRealmProvider: executing the 'limit' operation.\nClient: I have fetched: 0 records.\n\nClient: Start fetching data from CoreData\nCoreDataQueryBuilder: Initializing CoreDataProvider with 2 operations.\nCoreDataProvider: Retrieving data from CoreData...\nCoreDataProvider: executing the 'filter' operation.\nCoreDataProvider: executing the 'limit' operation.\nClient: I have fetched: 0 records."
  },
  {
    "path": "Sources/ChainOfResponsibility/Conceptual/Example.swift",
    "content": "/// EN: Chain of Responsibility Design Pattern\n///\n/// Intent: Lets you pass requests along a chain of handlers. Upon receiving a\n/// request, each handler decides either to process the request or to pass it to\n/// the next handler in the chain.\n///\n/// RU: Паттерн Цепочка обязанностей\n///\n/// Назначение: Позволяет передавать запросы последовательно по цепочке\n/// обработчиков. Каждый последующий обработчик решает, может ли он обработать\n/// запрос сам и стоит ли передавать запрос дальше по цепи.\n\nimport XCTest\n\n/// EN: The Handler interface declares a method for building the chain of\n/// handlers. It also declares a method for executing a request.\n///\n/// RU: Интерфейс Обработчика объявляет метод построения цепочки обработчиков.\n/// Он также объявляет метод для выполнения запроса.\nprotocol Handler: AnyObject {\n\n    @discardableResult\n    func setNext(handler: Handler) -> Handler\n\n    func handle(request: String) -> String?\n\n    var nextHandler: Handler? { get set }\n}\n\nextension Handler {\n\n    func setNext(handler: Handler) -> Handler {\n        self.nextHandler = handler\n\n        /// EN: Returning a handler from here will let us link handlers in a\n        /// convenient way like this:\n        /// monkey.setNext(handler: squirrel).setNext(handler: dog)\n        ///\n        /// RU: Возврат обработчика отсюда позволит связать обработчики простым\n        /// способом, вот так:\n        /// monkey.setNext(handler: squirrel).setNext(handler: dog)\n        return handler\n    }\n\n    func handle(request: String) -> String? {\n        return nextHandler?.handle(request: request)\n    }\n}\n\n/// EN: All Concrete Handlers either handle a request or pass it to the next\n/// handler in the chain.\n///\n/// RU: Все Конкретные Обработчики либо обрабатывают запрос, либо передают его\n/// следующему обработчику в цепочке.\nclass MonkeyHandler: Handler {\n\n    var nextHandler: Handler?\n\n    func handle(request: String) -> String? {\n        if (request == \"Banana\") {\n            return \"Monkey: I'll eat the \" + request + \".\\n\"\n        } else {\n            return nextHandler?.handle(request: request)\n        }\n    }\n}\n\nclass SquirrelHandler: Handler {\n\n    var nextHandler: Handler?\n\n    func handle(request: String) -> String? {\n\n        if (request == \"Nut\") {\n            return \"Squirrel: I'll eat the \" + request + \".\\n\"\n        } else {\n            return nextHandler?.handle(request: request)\n        }\n    }\n}\n\nclass DogHandler: Handler {\n\n    var nextHandler: Handler?\n\n    func handle(request: String) -> String? {\n        if (request == \"MeatBall\") {\n            return \"Dog: I'll eat the \" + request + \".\\n\"\n        } else {\n            return nextHandler?.handle(request: request)\n        }\n    }\n}\n\n/// EN: The client code is usually suited to work with a single handler. In most\n/// cases, it is not even aware that the handler is part of a chain.\n///\n/// RU: Обычно клиентский код приспособлен для работы с единственным\n/// обработчиком. В большинстве случаев клиенту даже неизвестно, что этот\n/// обработчик является частью цепочки.\nclass Client {\n    // ...\n    static func someClientCode(handler: Handler) {\n\n        let food = [\"Nut\", \"Banana\", \"Cup of coffee\"]\n\n        for item in food {\n\n            print(\"Client: Who wants a \" + item + \"?\\n\")\n\n            guard let result = handler.handle(request: item) else {\n                print(\"  \" + item + \" was left untouched.\\n\")\n                return\n            }\n\n            print(\"  \" + result)\n        }\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass ChainOfResponsibilityConceptual: XCTestCase {\n \n    func test() {\n\n        /// EN: The other part of the client code constructs the actual chain.\n        ///\n        /// RU: Другая часть клиентского кода создает саму цепочку.\n\n        let monkey = MonkeyHandler()\n        let squirrel = SquirrelHandler()\n        let dog = DogHandler()\n        monkey.setNext(handler: squirrel).setNext(handler: dog)\n\n        /// EN: The client should be able to send a request to any handler, not\n        /// just the first one in the chain.\n        ///\n        /// RU: Клиент должен иметь возможность отправлять запрос любому\n        /// обработчику, а не только первому в цепочке.\n\n        print(\"Chain: Monkey > Squirrel > Dog\\n\\n\")\n        Client.someClientCode(handler: monkey)\n        print()\n        print(\"Subchain: Squirrel > Dog\\n\\n\")\n        Client.someClientCode(handler: squirrel)\n    }\n}\n\n"
  },
  {
    "path": "Sources/ChainOfResponsibility/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/ChainOfResponsibility/Conceptual/Output.txt",
    "content": "Chain: Monkey > Squirrel > Dog\n\n\nClient: Who wants a Nut?\n\nSquirrel: I'll eat the Nut.\n\nClient: Who wants a Banana?\n\nMonkey: I'll eat the Banana.\n\nClient: Who wants a Cup of coffee?\n\nCup of coffee was left untouched.\n\n\nSubchain: Squirrel > Dog\n\n\nClient: Who wants a Nut?\n\nSquirrel: I'll eat the Nut.\n\nClient: Who wants a Banana?\n\nBanana was left untouched.\n"
  },
  {
    "path": "Sources/ChainOfResponsibility/RealWorld/Example.swift",
    "content": "import Foundation\nimport UIKit\nimport XCTest\n\n\nprotocol Handler {\n\n    var next: Handler? { get }\n\n    func handle(_ request: Request) -> LocalizedError?\n}\n\nclass BaseHandler: Handler {\n\n    var next: Handler?\n\n    init(with handler: Handler? = nil) {\n        self.next = handler\n    }\n\n    func handle(_ request: Request) -> LocalizedError? {\n        return next?.handle(request)\n    }\n}\n\nclass LoginHandler: BaseHandler {\n\n    override func handle(_ request: Request) -> LocalizedError? {\n\n        guard request.email?.isEmpty == false else {\n            return AuthError.emptyEmail\n        }\n\n        guard request.password?.isEmpty == false else {\n            return AuthError.emptyPassword\n        }\n\n        return next?.handle(request)\n    }\n}\n\nclass SignUpHandler: BaseHandler {\n\n    private struct Limit {\n        static let passwordLength = 8\n    }\n\n    override func handle(_ request: Request) -> LocalizedError? {\n\n        guard request.email?.contains(\"@\") == true else {\n            return AuthError.invalidEmail\n        }\n\n        guard (request.password?.count ?? 0) >= Limit.passwordLength else {\n            return AuthError.invalidPassword\n        }\n\n        guard request.password == request.repeatedPassword else {\n            return AuthError.differentPasswords\n        }\n\n        return next?.handle(request)\n    }\n}\n\nclass LocationHandler: BaseHandler {\n\n    override func handle(_ request: Request) -> LocalizedError? {\n        guard isLocationEnabled() else {\n            return AuthError.locationDisabled\n        }\n        return next?.handle(request)\n    }\n\n    func isLocationEnabled() -> Bool {\n        return true /// Calls special method\n    }\n}\n\nclass NotificationHandler: BaseHandler {\n\n    override func handle(_ request: Request) -> LocalizedError? {\n        guard isNotificationsEnabled() else {\n            return AuthError.notificationsDisabled\n        }\n        return next?.handle(request)\n    }\n\n    func isNotificationsEnabled() -> Bool {\n        return false /// Calls special method\n    }\n}\n\nenum AuthError: LocalizedError {\n\n    case emptyFirstName\n    case emptyLastName\n\n    case emptyEmail\n    case emptyPassword\n\n    case invalidEmail\n    case invalidPassword\n    case differentPasswords\n\n    case locationDisabled\n    case notificationsDisabled\n\n    var errorDescription: String? {\n        switch self {\n        case .emptyFirstName:\n            return \"First name is empty\"\n        case .emptyLastName:\n            return \"Last name is empty\"\n        case .emptyEmail:\n            return \"Email is empty\"\n        case .emptyPassword:\n            return \"Password is empty\"\n        case .invalidEmail:\n            return \"Email is invalid\"\n        case .invalidPassword:\n            return \"Password is invalid\"\n        case .differentPasswords:\n            return \"Password and repeated password should be equal\"\n        case .locationDisabled:\n            return \"Please turn location services on\"\n        case .notificationsDisabled:\n            return \"Please turn notifications on\"\n        }\n    }\n}\n\n\nprotocol Request {\n\n    var firstName: String? { get }\n    var lastName: String? { get }\n\n    var email: String? { get }\n    var password: String? { get }\n    var repeatedPassword: String? { get }\n}\n\nextension Request {\n\n    /// Default implementations\n\n    var firstName: String? { return nil }\n    var lastName: String? { return nil }\n\n    var email: String? { return nil }\n    var password: String? { return nil }\n    var repeatedPassword: String? { return nil }\n}\n\nstruct SignUpRequest: Request {\n\n    var firstName: String?\n    var lastName: String?\n\n    var email: String?\n    var password: String?\n    var repeatedPassword: String?\n}\n\nstruct LoginRequest: Request {\n\n    var email: String?\n    var password: String?\n}\n\n\n\nprotocol AuthHandlerSupportable: AnyObject {\n\n    var handler: Handler? { get set }\n}\n\nclass BaseAuthViewController: UIViewController, AuthHandlerSupportable {\n\n    /// Base class or extensions can be used to implement a base behavior\n    var handler: Handler?\n\n    init(handler: Handler) {\n        self.handler = handler\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n    }\n}\n\nclass LoginViewController: BaseAuthViewController {\n\n    func loginButtonSelected() {\n        print(\"Login View Controller: User selected Login button\")\n\n        let request = LoginRequest(email: \"smth@gmail.com\", password: \"123HardPass\")\n\n        if let error = handler?.handle(request) {\n            print(\"Login View Controller: something went wrong\")\n            print(\"Login View Controller: Error -> \" + (error.errorDescription ?? \"\"))\n        } else {\n            print(\"Login View Controller: Preconditions are successfully validated\")\n        }\n    }\n}\n\nclass SignUpViewController: BaseAuthViewController {\n\n    func signUpButtonSelected() {\n        print(\"SignUp View Controller: User selected SignUp button\")\n\n        let request = SignUpRequest(firstName: \"Vasya\",\n                                    lastName: \"Pupkin\",\n                                    email: \"vasya.pupkin@gmail.com\",\n                                    password: \"123HardPass\",\n                                    repeatedPassword: \"123HardPass\")\n\n        if let error = handler?.handle(request) {\n            print(\"SignUp View Controller: something went wrong\")\n            print(\"SignUp View Controller: Error -> \" + (error.errorDescription ?? \"\"))\n        } else {\n            print(\"SignUp View Controller: Preconditions are successfully validated\")\n        }\n    }\n}\n\n\n\nclass ChainOfResponsibilityRealWorld: XCTestCase {\n\n    func testChainOfResponsibilityRealWorld() {\n\n        print(\"Client: Let's test Login flow!\")\n\n        let loginHandler = LoginHandler(with: LocationHandler())\n        let loginController = LoginViewController(handler: loginHandler)\n\n        loginController.loginButtonSelected()\n\n        print(\"\\nClient: Let's test SignUp flow!\")\n\n        let signUpHandler = SignUpHandler(with: LocationHandler(with: NotificationHandler()))\n        let signUpController = SignUpViewController(handler: signUpHandler)\n\n        signUpController.signUpButtonSelected()\n    }\n}\n"
  },
  {
    "path": "Sources/ChainOfResponsibility/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/ChainOfResponsibility/RealWorld/Output.txt",
    "content": "Client: Let's test Login flow!\nLogin View Controller: User selected Login button\nLogin View Controller: Preconditions are successfully validated\n\nClient: Let's test SignUp flow!\nSignUp View Controller: User selected SignUp button\nSignUp View Controller: something went wrong\nSignUp View Controller: Error -> Please turn notifications on\n"
  },
  {
    "path": "Sources/Command/Conceptual/Example.swift",
    "content": "/// EN: Command Design Pattern\n///\n/// Intent: Turns a request into a stand-alone object that contains all\n/// information about the request. This transformation lets you parameterize\n/// methods with different requests, delay or queue a request's execution, and\n/// support undoable operations.\n///\n/// RU: Паттерн Команда\n///\n/// Назначение: Превращает запросы в объекты, позволяя передавать их как\n/// аргументы при вызове методов, ставить запросы в очередь, логировать их, а\n/// также поддерживать отмену операций.\n\nimport XCTest\n\n/// EN: The Command interface declares a method for executing a command.\n///\n/// RU: Интерфейс Команды объявляет метод для выполнения команд.\nprotocol Command {\n\n    func execute()\n}\n\n/// EN: Some commands can implement simple operations on their own.\n///\n/// RU: Некоторые команды способны выполнять простые операции самостоятельно.\nclass SimpleCommand: Command {\n\n    private var payload: String\n\n    init(_ payload: String) {\n        self.payload = payload\n    }\n\n    func execute() {\n        print(\"SimpleCommand: See, I can do simple things like printing (\" + payload + \")\")\n    }\n}\n\n/// EN: However, some commands can delegate more complex operations to other\n/// objects, called \"receivers.\"\n///\n/// RU: Но есть и команды, которые делегируют более сложные операции другим\n/// объектам, называемым «получателями».\nclass ComplexCommand: Command {\n\n    private var receiver: Receiver\n\n    /// EN: Context data, required for launching the receiver's methods.\n    ///\n    /// RU: Данные о контексте, необходимые для запуска методов получателя.\n    private var a: String\n    private var b: String\n\n    /// EN: Complex commands can accept one or several receiver objects along\n    /// with any context data via the constructor.\n    ///\n    /// RU: Сложные команды могут принимать один или несколько\n    /// объектов-получателей вместе с любыми данными о контексте через\n    /// конструктор.\n    init(_ receiver: Receiver, _ a: String, _ b: String) {\n        self.receiver = receiver\n        self.a = a\n        self.b = b\n    }\n\n    /// EN: Commands can delegate to any methods of a receiver.\n    ///\n    /// RU: Команды могут делегировать выполнение любым методам получателя.\n    func execute() {\n        print(\"ComplexCommand: Complex stuff should be done by a receiver object.\\n\")\n        receiver.doSomething(a)\n        receiver.doSomethingElse(b)\n    }\n}\n\n/// EN: The Receiver classes contain some important business logic. They know\n/// how to perform all kinds of operations, associated with carrying out a\n/// request. In fact, any class may serve as a Receiver.\n///\n/// RU: Классы Получателей содержат некую важную бизнес-логику. Они умеют\n/// выполнять все виды операций, связанных с выполнением запроса. Фактически,\n/// любой класс может выступать Получателем.\nclass Receiver {\n\n    func doSomething(_ a: String) {\n        print(\"Receiver: Working on (\" + a + \")\\n\")\n    }\n\n    func doSomethingElse(_ b: String) {\n        print(\"Receiver: Also working on (\" + b + \")\\n\")\n    }\n}\n\n/// EN: The Invoker is associated with one or several commands. It sends a\n/// request to the command.\n///\n/// RU: Отпрвитель связан с одной или несколькими командами. Он отправляет\n/// запрос команде.\nclass Invoker {\n\n    private var onStart: Command?\n\n    private var onFinish: Command?\n\n    /// EN: Initialize commands.\n    ///\n    /// RU: Инициализация команд.\n    func setOnStart(_ command: Command) {\n        onStart = command\n    }\n\n    func setOnFinish(_ command: Command) {\n        onFinish = command\n    }\n\n    /// EN: The Invoker does not depend on concrete command or receiver classes.\n    /// The Invoker passes a request to a receiver indirectly, by executing a\n    /// command.\n    ///\n    /// RU: Отправитель не зависит от классов конкретных команд и получателей.\n    /// Отправитель передаёт запрос получателю косвенно, выполняя команду.\n    func doSomethingImportant() {\n\n        print(\"Invoker: Does anybody want something done before I begin?\")\n\n        onStart?.execute()\n\n        print(\"Invoker: ...doing something really important...\")\n        print(\"Invoker: Does anybody want something done after I finish?\")\n\n        onFinish?.execute()\n    }\n}\n\n/// EN: Let's see how it all comes together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass CommandConceptual: XCTestCase {\n\n    func test() {\n        /// EN: The client code can parameterize an invoker with any commands.\n        ///\n        /// RU: Клиентский код может параметризовать отправителя любыми\n        /// командами.\n\n        let invoker = Invoker()\n        invoker.setOnStart(SimpleCommand(\"Say Hi!\"))\n\n        let receiver = Receiver()\n        invoker.setOnFinish(ComplexCommand(receiver, \"Send email\", \"Save report\"))\n        invoker.doSomethingImportant()\n    }\n}\n\n\n"
  },
  {
    "path": "Sources/Command/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Command/Conceptual/Output.txt",
    "content": "Invoker: Does anybody want something done before I begin?\nSimpleCommand: See, I can do simple things like printing (Say Hi!)\nInvoker: ...doing something really important...\nInvoker: Does anybody want something done after I finish?\nComplexCommand: Complex stuff should be done by a receiver object.\n\nReceiver: Working on (Send email)\n\nReceiver: Also working on (Save report)\n"
  },
  {
    "path": "Sources/Command/RealWorld/Example.swift",
    "content": "import Foundation\nimport XCTest\n\n\nclass DelayedOperation: Operation, @unchecked Sendable {\n\n    private var delay: TimeInterval\n\n    init(_ delay: TimeInterval = 0) {\n        self.delay = delay\n    }\n\n    override var isExecuting : Bool {\n        get { return _executing }\n        set {\n            willChangeValue(forKey: \"isExecuting\")\n            _executing = newValue\n            didChangeValue(forKey: \"isExecuting\")\n        }\n    }\n    private var _executing : Bool = false\n\n    override var isFinished : Bool {\n        get { return _finished }\n        set {\n            willChangeValue(forKey: \"isFinished\")\n            _finished = newValue\n            didChangeValue(forKey: \"isFinished\")\n        }\n    }\n    private var _finished : Bool = false\n\n    override func start() {\n\n        guard delay > 0 else {\n            _start()\n            return\n        }\n\n        let deadline = DispatchTime.now() + delay\n        DispatchQueue(label: \"\").asyncAfter(deadline: deadline) {\n            self._start()\n        }\n    }\n\n    private func _start() {\n\n        guard !self.isCancelled else {\n            print(\"\\(self): operation is canceled\")\n            self.isFinished = true\n            return\n        }\n\n        self.isExecuting = true\n        self.main()\n        self.isExecuting = false\n        self.isFinished = true\n    }\n}\n\nclass WindowOperation: DelayedOperation, @unchecked Sendable {\n\n    override func main() {\n        print(\"\\(self): Windows are closed via HomeKit.\")\n    }\n\n    override var description: String { return \"WindowOperation\" }\n}\n\nclass DoorOperation: DelayedOperation, @unchecked Sendable {\n\n    override func main() {\n        print(\"\\(self): Doors are closed via HomeKit.\")\n    }\n\n    override var description: String { return \"DoorOperation\" }\n}\n\nclass TaxiOperation: DelayedOperation, @unchecked Sendable {\n\n    override func main() {\n        print(\"\\(self): Taxi is ordered via Uber\")\n    }\n\n    override var description: String { return \"TaxiOperation\" }\n}\n\n\n\nclass CommandRealWorld: XCTestCase {\n\n    func testCommandRealWorld() {\n        prepareTestEnvironment {\n\n            let siri = SiriShortcuts.shared\n\n            print(\"User: Hey Siri, I am leaving my home\")\n            siri.perform(.leaveHome)\n\n            print(\"User: Hey Siri, I am leaving my work in 3 minutes\")\n            siri.perform(.leaveWork, delay: 3) /// for simplicity, we use seconds\n\n            print(\"User: Hey Siri, I am still working\")\n            siri.cancel(.leaveWork)\n        }\n    }\n}\n\nextension CommandRealWorld {\n\n    struct ExecutionTime {\n        static let max: TimeInterval = 5\n        static let waiting: TimeInterval = 4\n    }\n\n    func prepareTestEnvironment(_ execution: () -> ()) {\n\n        /// This method tells Xcode to wait for async operations. Otherwise the\n        /// main test is done immediately.\n\n        let expectation = self.expectation(description: \"Expectation for async operations\")\n\n        let deadline = DispatchTime.now() + ExecutionTime.waiting\n        DispatchQueue.main.asyncAfter(deadline: deadline) { expectation.fulfill() }\n\n        execution()\n\n        wait(for: [expectation], timeout: ExecutionTime.max)\n    }\n}\n\nclass SiriShortcuts {\n\n    static let shared = SiriShortcuts()\n    private lazy var queue = OperationQueue()\n\n    private init() {}\n\n    enum Action: String {\n        case leaveHome\n        case leaveWork\n    }\n\n    func perform(_ action: Action, delay: TimeInterval = 0) {\n        print(\"Siri: performing \\(action)-action\\n\")\n        switch action {\n        case .leaveHome:\n            add(operation: WindowOperation(delay))\n            add(operation: DoorOperation(delay))\n        case .leaveWork:\n            add(operation: TaxiOperation(delay))\n        }\n    }\n\n    func cancel(_ action: Action) {\n        print(\"Siri: canceling \\(action)-action\\n\")\n        switch action {\n        case .leaveHome:\n            cancelOperation(with: WindowOperation.self)\n            cancelOperation(with: DoorOperation.self)\n        case .leaveWork:\n            cancelOperation(with: TaxiOperation.self)\n        }\n    }\n\n    private func cancelOperation(with operationType: Operation.Type) {\n        queue.operations.filter { operation in\n            return type(of: operation) == operationType\n        }.forEach({ $0.cancel() })\n    }\n\n    private func add(operation: Operation) {\n        queue.addOperation(operation)\n    }\n}\n"
  },
  {
    "path": "Sources/Command/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Command/RealWorld/Output.txt",
    "content": "User: Hey Siri, I am leaving my home\nSiri: performing leaveHome-action\n\nUser: Hey Siri, I am leaving my work in 3 minutes\nSiri: performing leaveWork-action\n\nUser: Hey Siri, I am still working\nSiri: canceling leaveWork-action\n\nDoorOperation: Doors are closed via HomeKit.\nWindowOperation: Windows are closed via HomeKit.\nTaxiOperation: operation is canceled\n"
  },
  {
    "path": "Sources/Composite/Conceptual/Example.swift",
    "content": "/// EN: Composite Design Pattern\n///\n/// Intent: Lets you compose objects into tree structures and then work with\n/// these structures as if they were individual objects.\n///\n/// RU: Паттерн Компоновщик\n///\n/// Назначение: Позволяет сгруппировать объекты в древовидную структуру, а затем\n/// работать с ними так, как будто это единичный объект.\n\nimport XCTest\n\n/// EN: The base Component class declares common operations for both simple and\n/// complex objects of a composition.\n///\n/// RU: Базовый класс Компонент объявляет общие операции как для простых, так и\n/// для сложных объектов структуры.\nprotocol Component {\n\n    /// EN: The base Component may optionally declare methods for setting and\n    /// accessing a parent of the component in a tree structure. It can also\n    /// provide some default implementation for these methods.\n    ///\n    /// RU: При необходимости базовый Компонент может объявить интерфейс для\n    /// установки и получения родителя компонента в древовидной структуре. Он\n    /// также может предоставить  некоторую реализацию по умолчанию для этих\n    /// методов.\n    var parent: Component? { get set }\n\n    /// EN: In some cases, it would be beneficial to define the child-management\n    /// operations right in the base Component class. This way, you won't need\n    /// to expose any concrete component classes to the client code, even during\n    /// the object tree assembly. The downside is that these methods will be\n    /// empty for the leaf-level components.\n    ///\n    /// RU: В некоторых случаях целесообразно определить операции управления\n    /// потомками прямо в базовом классе Компонент. Таким образом, вам не нужно\n    /// будет предоставлять  конкретные классы компонентов клиентскому коду,\n    /// даже во время сборки дерева объектов. Недостаток такого подхода в том,\n    /// что эти методы будут пустыми для компонентов уровня листа.\n    func add(component: Component)\n    func remove(component: Component)\n\n    /// EN: You can provide a method that lets the client code figure out\n    /// whether a component can bear children.\n    ///\n    /// RU: Вы можете предоставить метод, который позволит клиентскому коду\n    /// понять, может ли компонент иметь вложенные объекты.\n    func isComposite() -> Bool\n\n    /// EN: The base Component may implement some default behavior or leave it\n    /// to concrete classes.\n    ///\n    /// RU: Базовый Компонент может сам реализовать некоторое поведение по\n    /// умолчанию или поручить это конкретным классам.\n    func operation() -> String\n}\n\nextension Component {\n\n    func add(component: Component) {}\n    func remove(component: Component) {}\n    func isComposite() -> Bool {\n        return false\n    }\n}\n\n/// EN: The Leaf class represents the end objects of a composition. A leaf can't\n/// have any children.\n///\n/// Usually, it's the Leaf objects that do the actual work, whereas Composite\n/// objects only delegate to their sub-components.\n///\n/// RU: Класс Лист представляет собой конечные объекты структуры.  Лист не может\n/// иметь вложенных компонентов.\n///\n/// Обычно объекты Листьев выполняют фактическую работу, тогда как объекты\n/// Контейнера лишь делегируют работу своим подкомпонентам.\nclass Leaf: Component {\n\n    var parent: Component?\n\n    func operation() -> String {\n        return \"Leaf\"\n    }\n}\n\n/// EN: The Composite class represents the complex components that may have\n/// children. Usually, the Composite objects delegate the actual work to their\n/// children and then \"sum-up\" the result.\n///\n/// RU: Класс Контейнер содержит сложные компоненты, которые могут иметь\n/// вложенные компоненты. Обычно объекты Контейнеры делегируют фактическую\n/// работу своим детям, а затем «суммируют» результат.\nclass Composite: Component {\n\n    var parent: Component?\n\n    /// EN: This fields contains the conponent subtree.\n    ///\n    /// RU: Это поле содержит поддерево компонентов.\n    private var children = [Component]()\n\n    /// EN: A composite object can add or remove other components (both simple\n    /// or complex) to or from its child list.\n    ///\n    /// RU: Объект контейнера может как добавлять компоненты в свой список\n    /// вложенных компонентов, так и удалять их, как простые, так и сложные.\n    func add(component: Component) {\n        var item = component\n        item.parent = self\n        children.append(item)\n    }\n\n    func remove(component: Component) {\n        // ...\n    }\n\n    func isComposite() -> Bool {\n        return true\n    }\n\n    /// EN: The Composite executes its primary logic in a particular way. It\n    /// traverses recursively through all its children, collecting and summing\n    /// their results. Since the composite's children pass these calls to their\n    /// children and so forth, the whole object tree is traversed as a result.\n    ///\n    /// RU: Контейнер выполняет свою основную логику особым образом. Он проходит\n    /// рекурсивно через всех своих детей, собирая и суммируя их результаты.\n    /// Поскольку потомки контейнера передают эти вызовы своим потомкам и так\n    /// далее,  в результате обходится всё дерево объектов.\n    func operation() -> String {\n        let result = children.map({ $0.operation() })\n        return \"Branch(\" + result.joined(separator: \" \") + \")\"\n    }\n}\n\nclass Client {\n\n    /// EN: The client code works with all of the components via the base\n    /// interface.\n    ///\n    /// RU: Клиентский код работает со всеми компонентами через базовый\n    /// интерфейс.\n    static func someClientCode(component: Component) {\n        print(\"Result: \" + component.operation())\n    }\n\n    /// EN: Thanks to the fact that the child-management operations are also\n    /// declared in the base Component class, the client code can work with both\n    /// simple or complex components.\n    ///\n    /// RU: Благодаря тому, что операции управления потомками объявлены в\n    /// базовом классе Компонента, клиентский код может работать как с простыми,\n    /// так и со сложными компонентами.\n    static func moreComplexClientCode(leftComponent: Component, rightComponent: Component) {\n        if leftComponent.isComposite() {\n            leftComponent.add(component: rightComponent)\n        }\n        print(\"Result: \" + leftComponent.operation())\n    }\n}\n\n/// EN: Let's see how it all comes together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass CompositeConceptual: XCTestCase {\n\n    func testCompositeConceptual() {\n\n        /// EN: This way the client code can support the simple leaf\n        /// components...\n        ///\n        /// RU: Таким образом, клиентский код может поддерживать простые\n        /// компоненты-листья...\n        print(\"Client: I've got a simple component:\")\n        Client.someClientCode(component: Leaf())\n\n        /// EN: ...as well as the complex composites.\n        ///\n        /// RU: ...а также сложные контейнеры.\n        let tree = Composite()\n\n        let branch1 = Composite()\n        branch1.add(component: Leaf())\n        branch1.add(component: Leaf())\n\n        let branch2 = Composite()\n        branch2.add(component: Leaf())\n        branch2.add(component: Leaf())\n\n        tree.add(component: branch1)\n        tree.add(component: branch2)\n\n        print(\"\\nClient: Now I've got a composite tree:\")\n        Client.someClientCode(component: tree)\n\n        print(\"\\nClient: I don't need to check the components classes even when managing the tree:\")\n        Client.moreComplexClientCode(leftComponent: tree, rightComponent: Leaf())\n    }\n}\n"
  },
  {
    "path": "Sources/Composite/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Composite/Conceptual/Output.txt",
    "content": "Client: I've got a simple component:\nResult: Leaf\n\nClient: Now I've got a composite tree:\nResult: Branch(Branch(Leaf Leaf) Branch(Leaf Leaf))\n\nClient: I don't need to check the components classes even when managing the tree:\nResult: Branch(Branch(Leaf Leaf) Branch(Leaf Leaf) Leaf)\n"
  },
  {
    "path": "Sources/Composite/RealWorld/Example.swift",
    "content": "import UIKit\nimport XCTest\n\nprotocol Component {\n\n    func accept<T: Theme>(theme: T)\n}\n\nextension Component where Self: UIViewController {\n\n    func accept<T: Theme>(theme: T) {\n        view.accept(theme: theme)\n        view.subviews.forEach({ $0.accept(theme: theme) })\n    }\n}\n\nextension UIView: Component {}\nextension UIViewController: Component {}\n\nextension Component where Self: UIView {\n\n    func accept<T: Theme>(theme: T) {\n\n        print(\"\\t\\(description): has applied \\(theme.description)\")\n\n        backgroundColor = theme.backgroundColor\n    }\n}\n\nextension Component where Self: UILabel {\n\n    func accept<T: LabelTheme>(theme: T) {\n\n        print(\"\\t\\(description): has applied \\(theme.description)\")\n\n        backgroundColor = theme.backgroundColor\n        textColor = theme.textColor\n    }\n}\n\nextension Component where Self: UIButton {\n\n    func accept<T: ButtonTheme>(theme: T) {\n\n        print(\"\\t\\(description): has applied \\(theme.description)\")\n\n        backgroundColor = theme.backgroundColor\n        setTitleColor(theme.textColor, for: .normal)\n        setTitleColor(theme.highlightedColor, for: .highlighted)\n    }\n}\n\n\nprotocol Theme: CustomStringConvertible {\n\n    var backgroundColor: UIColor { get }\n}\n\nprotocol ButtonTheme: Theme {\n\n    var textColor: UIColor { get }\n\n    var highlightedColor: UIColor { get }\n\n    /// other properties\n}\n\nprotocol LabelTheme: Theme {\n\n    var textColor: UIColor { get }\n\n    /// other properties\n}\n\n/// Button Themes\n\nstruct DefaultButtonTheme: ButtonTheme {\n\n    var textColor = UIColor.red\n\n    var highlightedColor = UIColor.white\n\n    var backgroundColor = UIColor.orange\n\n    var description: String { return \"Default Buttom Theme\" }\n}\n\nstruct NightButtonTheme: ButtonTheme {\n\n    var textColor = UIColor.white\n\n    var highlightedColor = UIColor.red\n\n    var backgroundColor = UIColor.black\n\n    var description: String { return \"Night Buttom Theme\" }\n}\n\n/// Label Themes\n\nstruct DefaultLabelTheme: LabelTheme {\n\n    var textColor = UIColor.red\n\n    var backgroundColor = UIColor.black\n\n    var description: String { return \"Default Label Theme\" }\n}\n\nstruct NightLabelTheme: LabelTheme {\n\n    var textColor = UIColor.white\n\n    var backgroundColor = UIColor.black\n\n    var description: String { return \"Night Label Theme\" }\n}\n\n\n\nclass CompositeRealWorld: XCTestCase {\n\n    func testCompositeRealWorld() {\n\n        print(\"\\nClient: Applying 'default' theme for 'UIButton'\")\n        apply(theme: DefaultButtonTheme(), for: UIButton())\n\n        print(\"\\nClient: Applying 'night' theme for 'UIButton'\")\n        apply(theme: NightButtonTheme(), for: UIButton())\n\n\n        print(\"\\nClient: Let's use View Controller as a composite!\")\n\n        /// Night theme\n        print(\"\\nClient: Applying 'night button' theme for 'WelcomeViewController'...\")\n        apply(theme: NightButtonTheme(), for: WelcomeViewController())\n        print()\n\n        print(\"\\nClient: Applying 'night label' theme for 'WelcomeViewController'...\")\n        apply(theme: NightLabelTheme(), for: WelcomeViewController())\n        print()\n\n        /// Default Theme\n        print(\"\\nClient: Applying 'default button' theme for 'WelcomeViewController'...\")\n        apply(theme: DefaultButtonTheme(), for: WelcomeViewController())\n        print()\n\n        print(\"\\nClient: Applying 'default label' theme for 'WelcomeViewController'...\")\n        apply(theme: DefaultLabelTheme(), for: WelcomeViewController())\n        print()\n    }\n\n    func apply<T: Theme>(theme: T, for component: Component) {\n        component.accept(theme: theme)\n    }\n}\n\nclass WelcomeViewController: UIViewController {\n\n    class ContentView: UIView {\n\n        var titleLabel = UILabel()\n        var actionButton = UIButton()\n\n        override init(frame: CGRect) {\n            super.init(frame: frame)\n            setup()\n        }\n\n        required init?(coder decoder: NSCoder) {\n            super.init(coder: decoder)\n            setup()\n        }\n\n        func setup() {\n            addSubview(titleLabel)\n            addSubview(actionButton)\n        }\n    }\n\n    override func loadView() {\n        view = ContentView()\n    }\n}\n\n/// Let's override a description property for the better output\n\nextension WelcomeViewController {\n\n    open override var description: String { return \"WelcomeViewController\" }\n}\n\nextension WelcomeViewController.ContentView {\n\n    override var description: String { return \"ContentView\" }\n}\n\nextension UIButton {\n\n    open override var description: String { return \"UIButton\" }\n}\n\nextension UILabel {\n\n    open override var description: String { return \"UILabel\" }\n}\n"
  },
  {
    "path": "Sources/Composite/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Composite/RealWorld/Output.txt",
    "content": "Client: Applying 'default' theme for 'UIButton'\nUIButton: has applied Default Buttom Theme\n\nClient: Applying 'night' theme for 'UIButton'\nUIButton: has applied Night Buttom Theme\n\nClient: Let's use View Controller as a composite!\n\nClient: Applying 'night button' theme for 'WelcomeViewController'...\nContentView: has applied Night Buttom Theme\nUILabel: has applied Night Buttom Theme\nUIButton: has applied Night Buttom Theme\n"
  },
  {
    "path": "Sources/Decorator/Conceptual/Example.swift",
    "content": "/// EN: Decorator Design Pattern\n///\n/// Intent: Lets you attach new behaviors to objects by placing these objects\n/// inside special wrapper objects that contain the behaviors.\n///\n/// RU: Паттерн Декоратор\n///\n/// Назначение: Позволяет динамически добавлять объектам новую функциональность,\n/// оборачивая их в полезные «обёртки».\n\nimport XCTest\n\n/// EN: The base Component interface defines operations that can be altered by\n/// decorators.\n///\n/// RU: Базовый интерфейс Компонента определяет поведение, которое изменяется\n/// декораторами.\nprotocol Component {\n\n    func operation() -> String\n}\n\n/// EN: Concrete Components provide default implementations of the operations.\n/// There might be several variations of these classes.\n///\n/// RU: Конкретные Компоненты предоставляют реализации поведения по умолчанию.\n/// Может быть несколько вариаций этих классов.\nclass ConcreteComponent: Component {\n\n    func operation() -> String {\n        return \"ConcreteComponent\"\n    }\n}\n\n/// EN: The base Decorator class follows the same interface as the other\n/// components. The primary purpose of this class is to define the wrapping\n/// interface for all concrete decorators. The default implementation of the\n/// wrapping code might include a field for storing a wrapped component and the\n/// means to initialize it.\n///\n/// RU: Базовый класс Декоратора следует тому же интерфейсу, что и другие\n/// компоненты.   Основная цель этого класса - определить интерфейс обёртки для\n/// всех конкретных декораторов. Реализация кода обёртки по умолчанию может\n/// включать в себя  поле для хранения завёрнутого компонента и средства его\n/// инициализации.\nclass Decorator: Component {\n\n    private var component: Component\n\n    init(_ component: Component) {\n        self.component = component\n    }\n\n    /// EN: The Decorator delegates all work to the wrapped component.\n    ///\n    /// RU: Декоратор делегирует всю работу обёрнутому компоненту.\n    func operation() -> String {\n        return component.operation()\n    }\n}\n\n/// EN: Concrete Decorators call the wrapped object and alter its result in some\n/// way.\n///\n/// RU: Конкретные Декораторы вызывают обёрнутый объект и изменяют его результат\n/// некоторым образом.\nclass ConcreteDecoratorA: Decorator {\n\n    /// EN: Decorators may call parent implementation of the operation, instead\n    /// of calling the wrapped object directly. This approach simplifies\n    /// extension of decorator classes.\n    ///\n    /// RU: Декораторы могут вызывать родительскую реализацию операции,  вместо\n    /// того, чтобы вызвать обёрнутый объект напрямую. Такой подход упрощает\n    /// расширение классов декораторов.\n    override func operation() -> String {\n        return \"ConcreteDecoratorA(\" + super.operation() + \")\"\n    }\n}\n\n/// EN: Decorators can execute their behavior either before or after the call to\n/// a wrapped object.\n///\n/// RU: Декораторы могут выполнять своё поведение до или после вызова обёрнутого\n/// объекта.\nclass ConcreteDecoratorB: Decorator {\n\n    override func operation() -> String {\n        return \"ConcreteDecoratorB(\" + super.operation() + \")\"\n    }\n}\n\n/// EN: The client code works with all objects using the Component interface.\n/// This way it can stay independent of the concrete classes of components it\n/// works with.\n///\n/// RU: Клиентский код работает со всеми объектами, используя интерфейс\n/// Компонента. Таким образом, он остаётся независимым от конкретных классов\n/// компонентов,  с которыми работает.\nclass Client {\n    // ...\n    static func someClientCode(component: Component) {\n        print(\"Result: \" + component.operation())\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass DecoratorConceptual: XCTestCase {\n\n    func testDecoratorConceptual() {\n        // EN: This way the client code can support both simple components...\n        //\n        // RU: Таким образом, клиентский код может поддерживать как простые\n        // компоненты...\n        print(\"Client: I've got a simple component\")\n        let simple = ConcreteComponent()\n        Client.someClientCode(component: simple)\n\n        // EN: ...as well as decorated ones.\n        //\n        // Note how decorators can wrap not only simple components but the other\n        // decorators as well.\n        //\n        // RU: ...так и декорированные.\n        //\n        // Обратите внимание, что декораторы могут обёртывать не только простые\n        // компоненты, но и другие декораторы.\n        let decorator1 = ConcreteDecoratorA(simple)\n        let decorator2 = ConcreteDecoratorB(decorator1)\n        print(\"\\nClient: Now I've got a decorated component\")\n        Client.someClientCode(component: decorator2)\n    }\n}\n"
  },
  {
    "path": "Sources/Decorator/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Decorator/Conceptual/Output.txt",
    "content": "Client: I've got a simple component\nResult: ConcreteComponent\n\nClient: Now I've got a decorated component\nResult: ConcreteDecoratorB(ConcreteDecoratorA(ConcreteComponent))\n"
  },
  {
    "path": "Sources/Decorator/RealWorld/Example.swift",
    "content": "import UIKit\nimport XCTest\n\n\nprotocol ImageEditor: CustomStringConvertible {\n\n    func apply() -> UIImage\n}\n\nclass ImageDecorator: ImageEditor {\n\n    private var editor: ImageEditor\n\n    required init(_ editor: ImageEditor) {\n        self.editor = editor\n    }\n\n    func apply() -> UIImage {\n        print(editor.description + \" applies changes\")\n        return editor.apply()\n    }\n\n    var description: String {\n        return \"ImageDecorator\"\n    }\n}\n\nextension UIImage: ImageEditor {\n\n    func apply() -> UIImage {\n        return self\n    }\n\n    open override var description: String {\n        return \"Image\"\n    }\n}\n\n\n\nclass BaseFilter: ImageDecorator {\n\n    fileprivate var filter: CIFilter?\n\n    init(editor: ImageEditor, filterName: String) {\n        self.filter = CIFilter(name: filterName)\n        super.init(editor)\n    }\n\n    required init(_ editor: ImageEditor) {\n        super.init(editor)\n    }\n\n    override func apply() -> UIImage {\n\n        let image = super.apply()\n        let context = CIContext(options: nil)\n\n        filter?.setValue(CIImage(image: image), forKey: kCIInputImageKey)\n\n        guard let output = filter?.outputImage else { return image }\n        guard let coreImage = context.createCGImage(output, from: output.extent) else {\n            return image\n        }\n        return UIImage(cgImage: coreImage)\n    }\n\n    override var description: String {\n        return \"BaseFilter\"\n    }\n}\n\nclass BlurFilter: BaseFilter {\n\n    required init(_ editor: ImageEditor) {\n        super.init(editor: editor, filterName: \"CIGaussianBlur\")\n    }\n\n    func update(radius: Double) {\n        filter?.setValue(radius, forKey: \"inputRadius\")\n    }\n\n    override var description: String {\n        return \"BlurFilter\"\n    }\n}\n\nclass ColorFilter: BaseFilter {\n\n    required init(_ editor: ImageEditor) {\n        super.init(editor: editor, filterName: \"CIColorControls\")\n    }\n\n    func update(saturation: Double) {\n        filter?.setValue(saturation, forKey: \"inputSaturation\")\n    }\n\n    func update(brightness: Double) {\n        filter?.setValue(brightness, forKey: \"inputBrightness\")\n    }\n\n    func update(contrast: Double) {\n        filter?.setValue(contrast, forKey: \"inputContrast\")\n    }\n\n    override var description: String {\n        return \"ColorFilter\"\n    }\n}\n\nclass Resizer: ImageDecorator {\n\n    private var xScale: CGFloat = 0\n    private var yScale: CGFloat = 0\n    private var hasAlpha = false\n\n    convenience init(_ editor: ImageEditor, xScale: CGFloat = 0, yScale: CGFloat = 0, hasAlpha: Bool = false) {\n        self.init(editor)\n        self.xScale = xScale\n        self.yScale = yScale\n        self.hasAlpha = hasAlpha\n    }\n\n    required init(_ editor: ImageEditor) {\n        super.init(editor)\n    }\n\n    override func apply() -> UIImage {\n\n        let image = super.apply()\n\n        let size = image.size.applying(CGAffineTransform(scaleX: xScale, y: yScale))\n\n        UIGraphicsBeginImageContextWithOptions(size, !hasAlpha, UIScreen.main.scale)\n        image.draw(in: CGRect(origin: .zero, size: size))\n\n        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n\n        return scaledImage ?? image\n    }\n\n    override var description: String {\n        return \"Resizer\"\n    }\n}\n\n\nclass DecoratorRealWorld: XCTestCase {\n\n    func testDecoratorRealWorld() {\n\n        let image = loadImage()\n\n        print(\"Client: set up an editors stack\")\n        let resizer = Resizer(image, xScale: 0.2, yScale: 0.2)\n\n        let blurFilter = BlurFilter(resizer)\n        blurFilter.update(radius: 2)\n\n        let colorFilter = ColorFilter(blurFilter)\n        colorFilter.update(contrast: 0.53)\n        colorFilter.update(brightness: 0.12)\n        colorFilter.update(saturation: 4)\n\n        clientCode(editor: colorFilter)\n    }\n\n    func clientCode(editor: ImageEditor) {\n        let image = editor.apply()\n        /// Note. You can stop an execution in Xcode to see an image preview.\n        print(\"Client: all changes have been applied for \\(image)\")\n    }\n}\n\nprivate extension DecoratorRealWorld {\n\n    func loadImage() -> UIImage {\n\n        let urlString = \"https://refactoring.guru/images/content-public/logos/logo-new-3x.png\"\n\n        /// Note:\n        /// Do not download images the following way in a production code.\n\n        guard let url = URL(string: urlString) else {\n            fatalError(\"Please enter a valid URL\")\n        }\n\n        guard let data = try? Data(contentsOf: url) else {\n            fatalError(\"Cannot load an image\")\n        }\n\n        guard let image = UIImage(data: data) else {\n            fatalError(\"Cannot create an image from data\")\n        }\n        return image\n    }\n}\n"
  },
  {
    "path": "Sources/Decorator/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Decorator/RealWorld/Output.txt",
    "content": "Client: set up an editors stack\n\nBlurFilter applies changes\nResizer applies changes\nImage applies changes\n\nClient: all changes have been applied for Image\n"
  },
  {
    "path": "Sources/Facade/Conceptual/Example.swift",
    "content": "/// EN: Facade Design Pattern\n///\n/// Intent: Provides a simplified interface to a library, a framework, or any\n/// other complex set of classes.\n///\n/// RU: Паттерн Фасад\n///\n/// Назначение: Предоставляет простой интерфейс к сложной системе классов,\n/// библиотеке или фреймворку.\n\nimport XCTest\n\n/// EN: The Facade class provides a simple interface to the complex logic of one\n/// or several subsystems. The Facade delegates the client requests to the\n/// appropriate objects within the subsystem. The Facade is also responsible for\n/// managing their lifecycle. All of this shields the client from the undesired\n/// complexity of the subsystem.\n///\n/// RU: Класс Фасада предоставляет простой интерфейс для сложной логики одной\n/// или нескольких подсистем. Фасад делегирует запросы клиентов соответствующим\n/// объектам внутри подсистемы. Фасад также отвечает за управление их жизненным\n/// циклом. Все это защищает клиента от нежелательной сложности подсистемы.\nclass Facade {\n\n    private var subsystem1: Subsystem1\n    private var subsystem2: Subsystem2\n\n    /// EN: Depending on your application's needs, you can provide the Facade\n    /// with existing subsystem objects or force the Facade to create them on\n    /// its own.\n    ///\n    /// RU: В зависимости от потребностей вашего приложения вы можете\n    /// предоставить Фасаду существующие объекты подсистемы или заставить Фасад\n    /// создать их самостоятельно.\n    init(subsystem1: Subsystem1 = Subsystem1(),\n         subsystem2: Subsystem2 = Subsystem2()) {\n        self.subsystem1 = subsystem1\n        self.subsystem2 = subsystem2\n    }\n\n    /// EN: The Facade's methods are convenient shortcuts to the sophisticated\n    /// functionality of the subsystems. However, clients get only to a fraction\n    /// of a subsystem's capabilities.\n    ///\n    /// RU: Методы Фасада удобны для быстрого доступа к сложной функциональности\n    /// подсистем. Однако клиенты получают только часть возможностей подсистемы.\n    func operation() -> String {\n\n        var result = \"Facade initializes subsystems:\"\n        result += \" \" + subsystem1.operation1()\n        result += \" \" + subsystem2.operation1()\n        result += \"\\n\" + \"Facade orders subsystems to perform the action:\\n\"\n        result += \" \" + subsystem1.operationN()\n        result += \" \" + subsystem2.operationZ()\n        return result\n    }\n}\n\n/// EN: The Subsystem can accept requests either from the facade or client\n/// directly. In any case, to the Subsystem, the Facade is yet another client,\n/// and it's not a part of the Subsystem.\n///\n/// RU: Подсистема может принимать запросы либо от фасада, либо от клиента\n/// напрямую. В любом случае, для Подсистемы Фасад – это еще один клиент,  и он\n/// не является частью Подсистемы.\nclass Subsystem1 {\n\n    func operation1() -> String {\n        return \"Subsystem1: Ready!\\n\"\n    }\n\n    // ...\n\n    func operationN() -> String {\n        return \"Subsystem1: Go!\\n\"\n    }\n}\n\n/// EN: Some facades can work with multiple subsystems at the same time.\n///\n/// RU: Некоторые фасады могут работать с разными подсистемами одновременно.\nclass Subsystem2 {\n\n    func operation1() -> String {\n        return \"Subsystem2: Get ready!\\n\"\n    }\n\n    // ...\n\n    func operationZ() -> String {\n        return \"Subsystem2: Fire!\\n\"\n    }\n}\n\n/// EN: The client code works with complex subsystems through a simple interface\n/// provided by the Facade. When a facade manages the lifecycle of the\n/// subsystem, the client might not even know about the existence of the\n/// subsystem. This approach lets you keep the complexity under control.\n///\n/// RU: Клиентский код работает со сложными подсистемами через простой\n/// интерфейс, предоставляемый Фасадом. Когда фасад управляет жизненным циклом\n/// подсистемы, клиент может даже не знать о существовании подсистемы. Такой\n/// подход позволяет держать сложность под контролем.\nclass Client {\n    // ...\n    static func clientCode(facade: Facade) {\n        print(facade.operation())\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass FacadeConceptual: XCTestCase {\n\n    func testFacadeConceptual() {\n\n        /// EN: The client code may have some of the subsystem's objects already\n        /// created. In this case, it might be worthwhile to initialize the\n        /// Facade with these objects instead of letting the Facade create new\n        /// instances.\n        ///\n        /// RU: В клиентском коде могут быть уже созданы некоторые объекты\n        /// подсистемы. В этом случае может оказаться целесообразным\n        /// инициализировать Фасад с этими объектами вместо того, чтобы\n        /// позволить Фасаду создавать новые экземпляры.\n\n        let subsystem1 = Subsystem1()\n        let subsystem2 = Subsystem2()\n        let facade = Facade(subsystem1: subsystem1, subsystem2: subsystem2)\n        Client.clientCode(facade: facade)\n    }\n}\n\n"
  },
  {
    "path": "Sources/Facade/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Facade/Conceptual/Output.txt",
    "content": "Facade initializes subsystems: Sybsystem1: Ready!\nSybsystem2: Get ready!\n\nFacade orders subsystems to perform the action:\nSybsystem1: Go!\nSybsystem2: Fire!\n"
  },
  {
    "path": "Sources/Facade/RealWorld/Example.swift",
    "content": "import XCTest\n\n/// Facade Design Pattern\n///\n/// Intent: Provides a simplified interface to a library, a framework, or any\n/// other complex set of classes.\n\nclass FacadeRealWorld: XCTestCase {\n\n    /// In the real project, you probably will use third-party libraries. For\n    /// instance, to download images.\n    ///\n    /// Therefore, facade and wrapping it is a good way to use a third-party API\n    /// in the client code. Even if it is your own library that is connected to\n    /// a project.\n    ///\n    /// The benefits here are:\n    ///\n    /// 1) If you need to change a current image downloader it should be done\n    /// only in the one place of a project. A number of lines of the client code\n    /// will stay work.\n    ///\n    /// 2) The facade provides an access to a fraction of a functionality that\n    /// fits most client needs. Moreover, it can set frequently used or default\n    /// parameters.\n\n    func testFacadeRealWorld() {\n\n        let imageView = UIImageView()\n\n        print(\"Let's set an image for the image view\")\n\n        clientCode(imageView)\n\n        print(\"Image has been set\")\n\n        XCTAssert(imageView.image != nil)\n    }\n\n    fileprivate func clientCode(_ imageView: UIImageView) {\n\n        let url = URL(string: \"www.example.com/logo\")\n        imageView.downloadImage(at: url)\n    }\n}\n\nprivate extension UIImageView {\n\n    /// This extension plays a facade role.\n\n    func downloadImage(at url: URL?) {\n\n        print(\"Start downloading...\")\n\n        let placeholder = UIImage(named: \"placeholder\")\n\n        ImageDownloader().loadImage(at: url,\n                                    placeholder: placeholder,\n                                    completion: { image, error in\n            print(\"Handle an image...\")\n\n            /// Crop, cache, apply filters, whatever...\n\n            self.image = image\n        })\n    }\n}\n\nprivate class ImageDownloader {\n\n    /// Third-party library or your own solution (subsystem)\n\n    typealias Completion = (UIImage, Error?) -> ()\n    typealias Progress = (Int, Int) -> ()\n\n    func loadImage(at url: URL?,\n                   placeholder: UIImage? = nil,\n                   progress: Progress? = nil,\n                   completion: Completion) {\n        /// ... Set up a network stack\n        /// ... Downloading an image\n        /// ...\n        completion(UIImage(), nil)\n    }\n}\n"
  },
  {
    "path": "Sources/Facade/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Facade/RealWorld/Output.txt",
    "content": "Let's set an image for the image view\nStart downloading...\nHandle an image...\nImage has been set\n"
  },
  {
    "path": "Sources/FactoryMethod/Conceptual/Example.swift",
    "content": "/// EN: Factory Method Design Pattern\n///\n/// Intent: Provides an interface for creating objects in a superclass, but\n/// allows subclasses to alter the type of objects that will be created.\n///\n/// RU: Паттерн Фабричный Метод\n///\n/// Назначение: Определяет общий интерфейс для создания объектов в суперклассе,\n/// позволяя подклассам изменять тип создаваемых объектов.\n\nimport XCTest\n\n/// EN: The Creator protocol declares the factory method that's supposed to\n/// return a new object of a Product class. The Creator's subclasses usually\n/// provide the implementation of this method.\n///\n/// RU: Класс Создатель объявляет фабричный метод, который должен возвращать\n/// объект класса Продукт. Подклассы Создателя обычно предоставляют реализацию\n/// этого метода.\nprotocol Creator {\n\n    /// EN: Note that the Creator may also provide some default implementation\n    /// of the factory method.\n    ///\n    /// RU: Обратите внимание, что Создатель может также обеспечить реализацию\n    /// фабричного метода по умолчанию.\n    func factoryMethod() -> Product\n\n    /// EN: Also note that, despite its name, the Creator's primary\n    /// responsibility is not creating products. Usually, it contains some core\n    /// business logic that relies on Product objects, returned by the factory\n    /// method. Subclasses can indirectly change that business logic by\n    /// overriding the factory method and returning a different type of product\n    /// from it.\n    ///\n    /// RU: Также заметьте, что, несмотря на название, основная обязанность\n    /// Создателя не заключается в создании продуктов. Обычно он содержит\n    /// некоторую базовую бизнес-логику, которая основана на объектах Продуктов,\n    /// возвращаемых фабричным методом. Подклассы могут косвенно изменять эту\n    /// бизнес-логику, переопределяя фабричный метод и возвращая из него другой\n    /// тип продукта.\n    func someOperation() -> String\n}\n\n/// EN: This extension implements the default behavior of the Creator. This\n/// behavior can be overridden in subclasses.\n///\n/// RU: Это расширение реализует базовое поведение Создателя. Оно может быть\n/// переопределено в подклассах.\nextension Creator {\n\n    func someOperation() -> String {\n        // EN: Call the factory method to create a Product object.\n        //\n        // RU: Вызываем фабричный метод, чтобы получить объект-продукт.\n        let product = factoryMethod()\n\n        // EN: Now, use the product.\n        //\n        // RU: Далее, работаем с этим продуктом.\n        return \"Creator: The same creator's code has just worked with \" + product.operation()\n    }\n}\n\n/// EN: Concrete Creators override the factory method in order to change the\n/// resulting product's type.\n///\n/// RU: Конкретные Создатели переопределяют фабричный метод для того, чтобы\n/// изменить тип результирующего продукта.\nclass ConcreteCreator1: Creator {\n\n    /// EN: Note that the signature of the method still uses the abstract\n    /// product type, even though the concrete product is actually returned from\n    /// the method. This way the Creator can stay independent of concrete\n    /// product classes.\n    ///\n    /// RU: Обратите внимание, что сигнатура метода по-прежнему использует тип\n    /// абстрактного продукта, хотя фактически из метода возвращается конкретный\n    /// продукт. Таким образом, Создатель может оставаться независимым от\n    /// конкретных классов продуктов.\n    public func factoryMethod() -> Product {\n        return ConcreteProduct1()\n    }\n}\n\nclass ConcreteCreator2: Creator {\n\n    public func factoryMethod() -> Product {\n        return ConcreteProduct2()\n    }\n}\n\n/// EN: The Product protocol declares the operations that all concrete products\n/// must implement.\n///\n/// RU: Протокол Продукта объявляет операции, которые должны выполнять все\n/// конкретные продукты.\nprotocol Product {\n\n    func operation() -> String\n}\n\n/// EN: Concrete Products provide various implementations of the Product\n/// protocol.\n///\n/// RU: Конкретные Продукты предоставляют различные реализации протокола\n/// Продукта.\nclass ConcreteProduct1: Product {\n\n    func operation() -> String {\n        return \"{Result of the ConcreteProduct1}\"\n    }\n}\n\nclass ConcreteProduct2: Product {\n\n    func operation() -> String {\n        return \"{Result of the ConcreteProduct2}\"\n    }\n}\n\n\n/// EN: The client code works with an instance of a concrete creator, albeit\n/// through its base protocol. As long as the client keeps working with the\n/// creator via the base protocol, you can pass it any creator's subclass.\n///\n/// RU: Клиентский код работает с экземпляром конкретного создателя, хотя и\n/// через его базовый протокол. Пока клиент продолжает работать с создателем\n/// через базовый протокол, вы можете передать ему любой подкласс создателя.\nclass Client {\n    // ...\n    static func someClientCode(creator: Creator) {\n        print(\"Client: I'm not aware of the creator's class, but it still works.\\n\"\n            + creator.someOperation())\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass FactoryMethodConceptual: XCTestCase {\n\n    func testFactoryMethodConceptual() {\n\n        /// EN: The Application picks a creator's type depending on the\n        /// configuration or environment.\n        ///\n        /// RU: Приложение выбирает тип создателя в зависимости от конфигурации\n        /// или среды.\n\n        print(\"App: Launched with the ConcreteCreator1.\")\n        Client.someClientCode(creator: ConcreteCreator1())\n\n        print(\"\\nApp: Launched with the ConcreteCreator2.\")\n        Client.someClientCode(creator: ConcreteCreator2())\n    }\n}\n"
  },
  {
    "path": "Sources/FactoryMethod/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/FactoryMethod/Conceptual/Output.txt",
    "content": "App: Launched with the ConcreteCreator1.\nClient: I'm not aware of the creator's class, but it still works.\nCreator: The same creator's code has just worked with {Result of the ConcreteProduct1}\n\nApp: Launched with the ConcreteCreator2.\nClient: I'm not aware of the creator's class, but it still works.\nCreator: The same creator's code has just worked with {Result of the ConcreteProduct2}\n"
  },
  {
    "path": "Sources/FactoryMethod/RealWorld/Example.swift",
    "content": "import XCTest\n\nclass FactoryMethodRealWorld: XCTestCase {\n\n    func testFactoryMethodRealWorld() {\n\n        let info = \"Very important info of the presentation\"\n\n        let clientCode = ClientCode()\n\n        /// Present info over WiFi\n        clientCode.present(info: info, with: WifiFactory())\n\n        /// Present info over Bluetooth\n        clientCode.present(info: info, with: BluetoothFactory())\n    }\n}\n\nprotocol ProjectorFactory {\n\n    func createProjector() -> Projector\n\n    func syncedProjector(with projector: Projector) -> Projector\n}\n\nextension ProjectorFactory {\n\n    /// Base implementation of ProjectorFactory\n\n    func syncedProjector(with projector: Projector) -> Projector {\n\n        /// Every instance creates an own projector\n        let newProjector = createProjector()\n\n        /// sync projectors\n        newProjector.sync(with: projector)\n\n        return newProjector\n    }\n}\n\nclass WifiFactory: ProjectorFactory {\n\n    func createProjector() -> Projector {\n        return WifiProjector()\n    }\n}\n\nclass BluetoothFactory: ProjectorFactory {\n\n    func createProjector() -> Projector {\n        return BluetoothProjector()\n    }\n}\n\nprotocol Projector {\n\n    /// Abstract projector interface\n\n    var currentPage: Int { get }\n\n    func present(info: String)\n\n    func sync(with projector: Projector)\n\n    func update(with page: Int)\n}\n\nextension Projector {\n\n    /// Base implementation of Projector methods\n\n    func sync(with projector: Projector) {\n        projector.update(with: currentPage)\n    }\n}\n\nclass WifiProjector: Projector {\n\n    var currentPage = 0\n\n    func present(info: String) {\n        print(\"Info is presented over Wifi: \\(info)\")\n    }\n\n    func update(with page: Int) {\n        /// ... scroll page via WiFi connection\n        /// ...\n        currentPage = page\n    }\n}\n\nclass BluetoothProjector: Projector {\n\n    var currentPage = 0\n\n    func present(info: String) {\n        print(\"Info is presented over Bluetooth: \\(info)\")\n    }\n\n    func update(with page: Int) {\n        /// ... scroll page via Bluetooth connection\n        /// ...\n        currentPage = page\n    }\n}\n\nprivate class ClientCode {\n\n    private var currentProjector: Projector?\n\n    func present(info: String, with factory: ProjectorFactory) {\n\n        /// Check whether the client code is already presenting something...\n\n        guard let projector = currentProjector else {\n\n            /// 'currentProjector' variable is nil. Create a new projector and\n            /// start presentation.\n\n            let projector = factory.createProjector()\n            projector.present(info: info)\n            self.currentProjector = projector\n            return\n        }\n\n        /// Client code already has a projector. Let's sync pages of the old\n        /// projector with a new one.\n\n        self.currentProjector = factory.syncedProjector(with: projector)\n        self.currentProjector?.present(info: info)\n    }\n}\n\n"
  },
  {
    "path": "Sources/FactoryMethod/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/FactoryMethod/RealWorld/Output.txt",
    "content": "Info is presented over Wifi: Very important info of the presentation\nInfo is presented over Bluetooth: Very important info of the presentation\n"
  },
  {
    "path": "Sources/Flyweight/Conceptual/Example.swift",
    "content": "/// EN: Flyweight Design Pattern\n///\n/// Intent: Lets you fit more objects into the available amount of RAM by\n/// sharing common parts of state between multiple objects, instead of keeping\n/// all of the data in each object.\n///\n/// RU: Паттерн Легковес\n///\n/// Назначение: Позволяет вместить бóльшее количество объектов в отведённую\n/// оперативную память. Легковес экономит память, разделяя общее состояние\n/// объектов между собой, вместо хранения одинаковых данных в каждом объекте.\n\nimport XCTest\n\n/// EN: The Flyweight stores a common portion of the state (also called\n/// intrinsic state) that belongs to multiple real business entities. The\n/// Flyweight accepts the rest of the state (extrinsic state, unique for each\n/// entity) via its method parameters.\n///\n/// RU: Легковес хранит общую часть состояния (также называемую внутренним\n/// состоянием), которая принадлежит нескольким реальным бизнес-объектам.\n/// Легковес принимает  оставшуюся часть состояния (внешнее состояние,\n/// уникальное для каждого объекта)  через его параметры метода.\nclass Flyweight {\n\n    private let sharedState: [String]\n\n    init(sharedState: [String]) {\n        self.sharedState = sharedState\n    }\n\n    func operation(uniqueState: [String]) {\n        print(\"Flyweight: Displaying shared (\\(sharedState)) and unique (\\(uniqueState)) state.\\n\")\n    }\n}\n\n/// EN: The Flyweight Factory creates and manages the Flyweight objects. It\n/// ensures that flyweights are shared correctly. When the client requests a\n/// flyweight, the factory either returns an existing instance or creates a new\n/// one, if it doesn't exist yet.\n///\n/// RU: Фабрика Легковесов создает объекты-Легковесы и управляет ими. Она\n/// обеспечивает правильное разделение легковесов. Когда клиент запрашивает\n/// легковес, фабрика либо возвращает существующий экземпляр, либо создает\n/// новый, если он ещё не существует.\nclass FlyweightFactory {\n\n    private var flyweights: [String: Flyweight]\n\n    init(states: [[String]]) {\n\n        var flyweights = [String: Flyweight]()\n\n        for state in states {\n            flyweights[state.key] = Flyweight(sharedState: state)\n        }\n\n        self.flyweights = flyweights\n    }\n\n    /// EN: Returns an existing Flyweight with a given state or creates a new\n    /// one.\n    ///\n    /// RU: Возвращает существующий Легковес с заданным состоянием или создает\n    /// новый.\n    func flyweight(for state: [String]) -> Flyweight {\n\n        let key = state.key\n\n        guard let foundFlyweight = flyweights[key] else {\n\n            print(\"FlyweightFactory: Can't find a flyweight, creating new one.\\n\")\n            let flyweight = Flyweight(sharedState: state)\n            flyweights.updateValue(flyweight, forKey: key)\n            return flyweight\n        }\n        print(\"FlyweightFactory: Reusing existing flyweight.\\n\")\n        return foundFlyweight\n    }\n\n    func printFlyweights() {\n        print(\"FlyweightFactory: I have \\(flyweights.count) flyweights:\\n\")\n        for item in flyweights {\n            print(item.key)\n        }\n    }\n}\n\nextension Array where Element == String {\n\n    /// EN: Returns a Flyweight's string hash for a given state.\n    ///\n    /// RU: Возвращает хеш строки Легковеса для данного состояния.\n    var key: String {\n        return self.joined()\n    }\n}\n\n\nclass FlyweightConceptual: XCTestCase {\n\n    func testFlyweight() {\n\n        /// EN: The client code usually creates a bunch of pre-populated\n        /// flyweights in the initialization stage of the application.\n        ///\n        /// RU: Клиентский код обычно создает кучу предварительно заполненных\n        /// легковесов на этапе инициализации приложения.\n\n        let factory = FlyweightFactory(states:\n        [\n            [\"Chevrolet\", \"Camaro2018\", \"pink\"],\n            [\"Mercedes Benz\", \"C300\", \"black\"],\n            [\"Mercedes Benz\", \"C500\", \"red\"],\n            [\"BMW\", \"M5\", \"red\"],\n            [\"BMW\", \"X6\", \"white\"]\n        ])\n\n        factory.printFlyweights()\n\n        /// ...\n\n        addCarToPoliceDatabase(factory,\n                \"CL234IR\",\n                \"James Doe\",\n                \"BMW\",\n                \"M5\",\n                \"red\")\n\n        addCarToPoliceDatabase(factory,\n                \"CL234IR\",\n                \"James Doe\",\n                \"BMW\",\n                \"X1\",\n                \"red\")\n\n        factory.printFlyweights()\n    }\n\n    func addCarToPoliceDatabase(\n            _ factory: FlyweightFactory,\n            _ plates: String,\n            _ owner: String,\n            _ brand: String,\n            _ model: String,\n            _ color: String) {\n\n        print(\"Client: Adding a car to database.\\n\")\n\n        let flyweight = factory.flyweight(for: [brand, model, color])\n\n        /// EN: The client code either stores or calculates extrinsic state and\n        /// passes it to the flyweight's methods.\n        ///\n        /// RU: Клиентский код либо сохраняет, либо вычисляет внешнее состояние\n        /// и передает его методам легковеса.\n        flyweight.operation(uniqueState: [plates, owner])\n    }\n}\n\n"
  },
  {
    "path": "Sources/Flyweight/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Flyweight/Conceptual/Output.txt",
    "content": "FlyweightFactory: I have 5 flyweights:\n\nMercedes BenzC500red\nChevroletCamaro2018pink\nMercedes BenzC300black\nBMWX6white\nBMWM5red\nClient: Adding a car to database.\n\nFlyweightFactory: Reusing existing flyweight.\n\nFlyweight: Displaying shared ([\"BMW\", \"M5\", \"red\"]) and unique ([\"CL234IR\", \"James Doe\"] state.\n\nClient: Adding a car to database.\n\nFlyweightFactory: Can't find a flyweight, creating new one.\n\nFlyweight: Displaying shared ([\"BMW\", \"X1\", \"red\"]) and unique ([\"CL234IR\", \"James Doe\"] state.\n\nFlyweightFactory: I have 6 flyweights:\n\nMercedes BenzC500red\nBMWX1red\nChevroletCamaro2018pink\nMercedes BenzC300black\nBMWX6white\nBMWM5red\n\n"
  },
  {
    "path": "Sources/Flyweight/RealWorld/Example.swift",
    "content": "import XCTest\nimport UIKit\n\nclass FlyweightRealWorld: XCTestCase {\n\n    func testFlyweightRealWorld() {\n\n        let maineCoon = Animal(name: \"Maine Coon\",\n                               country: \"USA\",\n                               type: .cat)\n\n        let sphynx = Animal(name: \"Sphynx\",\n                            country: \"Egypt\",\n                            type: .cat)\n\n        let bulldog = Animal(name: \"Bulldog\",\n                             country: \"England\",\n                             type: .dog)\n\n        print(\"Client: I created a number of objects to display\")\n\n        /// Displaying objects for the 1-st time.\n\n        print(\"Client: Let's show animals for the 1st time\\n\")\n        display(animals: [maineCoon, sphynx, bulldog])\n\n\n        /// Displaying objects for the 2-nd time.\n        ///\n        /// Note: The cached appearance object will be reused this time.\n\n        print(\"\\nClient: I have a new dog, let's show it the same way!\\n\")\n\n        let germanShepherd = Animal(name: \"German Shepherd\",\n                              country: \"Germany\",\n                              type: .dog)\n\n        display(animals: [germanShepherd])\n    }\n}\n\nextension FlyweightRealWorld {\n\n    func display(animals: [Animal]) {\n\n        let cells = loadCells(count: animals.count)\n\n        for index in 0..<animals.count {\n            cells[index].update(with: animals[index])\n        }\n\n        /// Using cells...\n    }\n\n    func loadCells(count: Int) -> [Cell] {\n        /// Emulates behavior of a table/collection view.\n        return Array(repeating: Cell(), count: count)\n    }\n}\n\nenum Type: String {\n    case cat\n    case dog\n}\n\nclass Cell {\n\n    private var animal: Animal?\n\n    func update(with animal: Animal) {\n        self.animal = animal\n        let type = animal.type.rawValue\n        let photos = \"photos \\(animal.appearance.photos.count)\"\n        print(\"Cell: Updating an appearance of a \\(type)-cell: \\(photos)\\n\")\n    }\n}\n\nstruct Animal: Equatable {\n\n    /// This is an external context that contains specific values and an object\n    /// with a common state.\n    ///\n    /// Note: The object of appearance will be lazily created when it is needed\n\n    let name: String\n    let country: String\n    let type: Type\n\n    var appearance: Appearance {\n        return AppearanceFactory.appearance(for: type)\n    }\n}\n\nstruct Appearance: Equatable {\n\n    /// This object contains the predefined appearance for each cell.\n\n    let photos: [UIImage]\n    let backgroundColor: UIColor\n}\n\nextension Animal: CustomStringConvertible {\n\n    var description: String {\n        return \"\\(name), \\(country), \\(type.rawValue) + \\(appearance.description)\"\n    }\n}\n\nextension Appearance: CustomStringConvertible {\n\n    var description: String {\n        return \"photos: \\(photos.count), \\(backgroundColor)\"\n    }\n}\n\nclass AppearanceFactory {\n\n    private static var cache = [Type: Appearance]()\n\n    static func appearance(for key: Type) -> Appearance {\n\n        guard cache[key] == nil else {\n            print(\"AppearanceFactory: Reusing an existing \\(key.rawValue)-appearance.\")\n            return cache[key]!\n        }\n\n        print(\"AppearanceFactory: Can't find a cached \\(key.rawValue)-object, creating a new one.\")\n\n        switch key {\n        case .cat:\n            cache[key] = catInfo\n        case .dog:\n            cache[key] = dogInfo\n        }\n\n        return cache[key]!\n    }\n}\n\nextension AppearanceFactory {\n\n    private static var catInfo: Appearance {\n        return Appearance(photos: [UIImage()], backgroundColor: .red)\n    }\n\n    private static var dogInfo: Appearance {\n        return Appearance(photos: [UIImage(), UIImage()], backgroundColor: .blue)\n    }\n}\n"
  },
  {
    "path": "Sources/Flyweight/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Flyweight/RealWorld/Output.txt",
    "content": "Client: I created a number of objects to display\nClient: Let's show animals for the 1st time\n\nAppearanceFactory: Can't find a cached cat-object, creating a new one.\nCell: Updating an appearance of a cat-cell: photos 1\n\nAppearanceFactory: Reusing an existing cat-appearance.\nCell: Updating an appearance of a cat-cell: photos 1\n\nAppearanceFactory: Can't find a cached dog-object, creating a new one.\nCell: Updating an appearance of a dog-cell: photos 2\n\n\nClient: I have a new dog, let's show it the same way!\n\nAppearanceFactory: Reusing an existing dog-appearance.\nCell: Updating an appearance of a dog-cell: photos 2\n"
  },
  {
    "path": "Sources/Iterator/Conceptual/Example.swift",
    "content": "/// EN: Iterator Design Pattern\n///\n/// Intent: Lets you traverse elements of a collection without exposing its\n/// underlying representation (list, stack, tree, etc.).\n///\n/// Swift language has a built-in iterator support:\n///\n/// - The `IteratorProtocol` provides a simple iterator protocol:\n/// https://developer.apple.com/documentation/swift/iteratorprotocol\n///\n/// - The `AnyIterator<Element>` struct provides basic iterator implementation:\n/// https://developer.apple.com/documentation/swift/anyiterator\n///\n/// In this example, we'll see how to use both of these mechanisms.\n///\n/// RU: Паттерн Итератор\n///\n/// Назначение: Даёт возможность последовательно обходить элементы составных\n/// объектов, не раскрывая их внутреннего представления.\n///\n/// Язык Swift имеет встроенную поддержку итераторов:\n///\n/// - Протокол `IteratorProtocol` описывает базовый интерфейс итератора:\n/// https://developer.apple.com/documentation/swift/iteratorprotocol\n///\n/// - Структура `AnyIterator<Element>` предоставляет простую реализацию\n/// итератора по-умолчанию:\n/// https://developer.apple.com/documentation/swift/anyiterator\n///\n/// В этом примере мы увидим как работают оба этих механизма.\n\nimport XCTest\n\n/// EN: This is a collection that we're going to iterate through using an\n/// iterator that conforms to IteratorProtocol.\n///\n/// RU: Это коллекция, которую мы будем перебирать используя итератор,\n/// реализующий IteratorProtocol.\nclass WordsCollection {\n\n    fileprivate lazy var items = [String]()\n\n    func append(_ item: String) {\n        self.items.append(item)\n    }\n}\n\nextension WordsCollection: Sequence {\n\n    func makeIterator() -> WordsIterator {\n        return WordsIterator(self)\n    }\n}\n\n/// EN: Concrete Iterators implement various traversal algorithms. These classes\n/// store the current traversal position at all times.\n///\n/// RU: Конкретные Итераторы реализуют различные алгоритмы обхода. Эти классы\n/// постоянно хранят текущее положение обхода.\nclass WordsIterator: IteratorProtocol {\n\n    private let collection: WordsCollection\n    private var index = 0\n\n    init(_ collection: WordsCollection) {\n        self.collection = collection\n    }\n\n    func next() -> String? {\n        defer { index += 1 }\n        return index < collection.items.count ? collection.items[index] : nil\n    }\n}\n\n\n/// EN: This is another collection that we'll provide AnyIterator for traversing\n/// its items.\n///\n/// RU: Это другая коллекция, которая будет возвращать AnyIterator, способный\n/// перебирать её элементы.\nclass NumbersCollection {\n\n    fileprivate lazy var items = [Int]()\n\n    func append(_ item: Int) {\n        self.items.append(item)\n    }\n}\n\nextension NumbersCollection: Sequence {\n\n    func makeIterator() -> AnyIterator<Int> {\n        var index = self.items.count - 1\n\n        return AnyIterator {\n            defer { index -= 1 }\n            return index >= 0 ? self.items[index] : nil\n        }\n    }\n}\n\n/// EN: Client does not know the internal representation of a given sequence.\n///\n/// RU: Клиент не знает о внутреннем представлении данной последовательности.\nclass Client {\n    // ...\n    static func clientCode<S: Sequence>(sequence: S) {\n        for item in sequence {\n            print(item)\n        }\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass IteratorConceptual: XCTestCase {\n\n    func testIteratorProtocol() {\n\n        let words = WordsCollection()\n        words.append(\"First\")\n        words.append(\"Second\")\n        words.append(\"Third\")\n\n        print(\"Straight traversal using IteratorProtocol:\")\n        Client.clientCode(sequence: words)\n    }\n\n    func testAnyIterator() {\n\n        let numbers = NumbersCollection()\n        numbers.append(1)\n        numbers.append(2)\n        numbers.append(3)\n\n        print(\"\\nReverse traversal using AnyIterator:\")\n        Client.clientCode(sequence: numbers)\n    }\n}\n"
  },
  {
    "path": "Sources/Iterator/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Iterator/Conceptual/Output.txt",
    "content": "Straight traversal using IteratorProtocol:\nFirst\nSecond\nThird\n\nReverse traversal using AnyIterator:\n3\n2\n1\n"
  },
  {
    "path": "Sources/Iterator/RealWorld/Example.swift",
    "content": "import XCTest\n\nclass IteratorRealWorld: XCTestCase {\n\n    func test() {\n\n        let tree = Tree(1)\n        tree.left = Tree(2)\n        tree.right = Tree(3)\n\n        print(\"Tree traversal: Inorder\")\n        clientCode(iterator: tree.iterator(.inOrder))\n\n        print(\"\\nTree traversal: Preorder\")\n        clientCode(iterator: tree.iterator(.preOrder))\n\n        print(\"\\nTree traversal: Postorder\")\n        clientCode(iterator: tree.iterator(.postOrder))\n    }\n\n    func clientCode<T>(iterator: AnyIterator<T>) {\n        while case let item? = iterator.next() {\n            print(item)\n        }\n    }\n}\n\nclass Tree<T> {\n\n    var value: T\n    var left: Tree<T>?\n    var right: Tree<T>?\n\n    init(_ value: T) {\n        self.value = value\n    }\n\n    typealias Block = (T) -> ()\n\n    enum IterationType {\n        case inOrder\n        case preOrder\n        case postOrder\n    }\n\n    func iterator(_ type: IterationType) -> AnyIterator<T> {\n        var items = [T]()\n        switch type {\n        case .inOrder:\n            inOrder { items.append($0) }\n        case .preOrder:\n            preOrder { items.append($0) }\n        case .postOrder:\n            postOrder { items.append($0) }\n        }\n\n        /// Note:\n        /// AnyIterator is used to hide the type signature of an internal\n        /// iterator.\n        return AnyIterator(items.makeIterator())\n    }\n\n    private func inOrder(_ body: Block) {\n        left?.inOrder(body)\n        body(value)\n        right?.inOrder(body)\n    }\n\n    private func preOrder(_ body: Block) {\n        body(value)\n        left?.preOrder(body)\n        right?.preOrder(body)\n    }\n\n    private func postOrder(_ body: Block) {\n        left?.postOrder(body)\n        right?.postOrder(body)\n        body(value)\n    }\n}\n"
  },
  {
    "path": "Sources/Iterator/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Iterator/RealWorld/Output.txt",
    "content": "Tree traversal: Inorder\n2\n1\n3\n\nTree traversal: Preorder\n1\n2\n3\n\nTree traversal: Postorder\n2\n3\n1\n"
  },
  {
    "path": "Sources/Mediator/Conceptual/Example.swift",
    "content": "/// EN: Mediator Design Pattern\n///\n/// Intent: Lets you reduce chaotic dependencies between objects. The pattern\n/// restricts direct communications between the objects and forces them to\n/// collaborate only via a mediator object.\n///\n/// RU: Паттерн Посредник\n///\n/// Назначение: Позволяет уменьшить связанность множества классов между собой,\n/// благодаря перемещению этих связей в один класс-посредник.\n\nimport XCTest\n\n/// EN: The Mediator interface declares a method used by components to notify\n/// the mediator about various events. The Mediator may react to these events\n/// and pass the execution to other components.\n///\n/// RU: Интерфейс Посредника предоставляет метод, используемый компонентами для\n/// уведомления посредника о различных событиях. Посредник может реагировать на\n/// эти события и передавать исполнение другим компонентам.\nprotocol Mediator: AnyObject {\n\n    func notify(sender: BaseComponent, event: String)\n}\n\n/// EN: Concrete Mediators implement cooperative behavior by coordinating\n/// several components.\n///\n/// RU: Конкретные Посредники реализуют совместное поведение, координируя\n/// отдельные компоненты.\nclass ConcreteMediator: Mediator {\n\n    private var component1: Component1\n    private var component2: Component2\n\n    init(_ component1: Component1, _ component2: Component2) {\n        self.component1 = component1\n        self.component2 = component2\n\n        component1.update(mediator: self)\n        component2.update(mediator: self)\n    }\n\n    func notify(sender: BaseComponent, event: String) {\n        if event == \"A\" {\n            print(\"Mediator reacts on A and triggers following operations:\")\n            self.component2.doC()\n        }\n        else if (event == \"D\") {\n            print(\"Mediator reacts on D and triggers following operations:\")\n            self.component1.doB()\n            self.component2.doC()\n        }\n    }\n}\n\n/// EN: The Base Component provides the basic functionality of storing a\n/// mediator's instance inside component objects.\n///\n/// RU: Базовый Компонент обеспечивает базовую функциональность хранения\n/// экземпляра посредника внутри объектов компонентов.\nclass BaseComponent {\n\n    fileprivate weak var mediator: Mediator?\n\n    init(mediator: Mediator? = nil) {\n        self.mediator = mediator\n    }\n\n    func update(mediator: Mediator) {\n        self.mediator = mediator\n    }\n}\n\n/// EN: Concrete Components implement various functionality. They don't depend\n/// on other components. They also don't depend on any concrete mediator\n/// classes.\n///\n/// RU: Конкретные Компоненты реализуют различную функциональность. Они не\n/// зависят от других компонентов. Они также не зависят от каких-либо конкретных\n/// классов посредников.\nclass Component1: BaseComponent {\n\n    func doA() {\n        print(\"Component 1 does A.\")\n        mediator?.notify(sender: self, event: \"A\")\n    }\n\n    func doB() {\n        print(\"Component 1 does B.\\n\")\n        mediator?.notify(sender: self, event: \"B\")\n    }\n}\n\nclass Component2: BaseComponent {\n\n    func doC() {\n        print(\"Component 2 does C.\")\n        mediator?.notify(sender: self, event: \"C\")\n    }\n\n    func doD() {\n        print(\"Component 2 does D.\")\n        mediator?.notify(sender: self, event: \"D\")\n    }\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass MediatorConceptual: XCTestCase {\n\n    func testMediatorConceptual() {\n\n        let component1 = Component1()\n        let component2 = Component2()\n\n        let mediator = ConcreteMediator(component1, component2)\n        print(\"Client triggers operation A.\")\n        component1.doA()\n\n        print(\"\\nClient triggers operation D.\")\n        component2.doD()\n\n        print(mediator)\n    }\n}\n"
  },
  {
    "path": "Sources/Mediator/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Mediator/Conceptual/Output.txt",
    "content": "Client triggers operation A.\nComponent 1 does A.\nMediator reacts on A and triggers following operations:\nComponent 2 does C.\n\nClient triggers operation D.\nComponent 2 does D.\nMediator reacts on D and triggers following operations:\nComponent 1 does B.\n\nComponent 2 does C."
  },
  {
    "path": "Sources/Mediator/RealWorld/Example.swift",
    "content": "import XCTest\n\nclass MediatorRealWorld: XCTestCase {\n\n    func test() {\n\n        let newsArray = [News(id: 1, title: \"News1\", likesCount: 1),\n                         News(id: 2, title: \"News2\", likesCount: 2)]\n\n        let numberOfGivenLikes = newsArray.reduce(0, { $0 + $1.likesCount })\n\n        let mediator = ScreenMediator()\n\n        let feedVC = NewsFeedViewController(mediator, newsArray)\n        let newsDetailVC = NewsDetailViewController(mediator, newsArray.first!)\n        let profileVC = ProfileViewController(mediator, numberOfGivenLikes)\n\n        mediator.update([feedVC, newsDetailVC, profileVC])\n\n        feedVC.userLikedAllNews()\n        feedVC.userDislikedAllNews()\n    }\n}\n\nclass NewsFeedViewController: ScreenUpdatable {\n\n    private var newsArray: [News]\n    private weak var mediator: ScreenUpdatable?\n\n    init(_ mediator: ScreenUpdatable?, _ newsArray: [News]) {\n        self.newsArray = newsArray\n        self.mediator = mediator\n    }\n\n    func likeAdded(to news: News) {\n\n        print(\"News Feed: Received a liked news model with id \\(news.id)\")\n\n        for var item in newsArray {\n            if item == news {\n                item.likesCount += 1\n            }\n        }\n    }\n\n    func likeRemoved(from news: News) {\n\n        print(\"News Feed: Received a disliked news model with id \\(news.id)\")\n\n        for var item in newsArray {\n            if item == news {\n                item.likesCount -= 1\n            }\n        }\n    }\n\n    func userLikedAllNews() {\n        print(\"\\n\\nNews Feed: User LIKED all news models\")\n        print(\"News Feed: I am telling to mediator about it...\\n\")\n        newsArray.forEach({ mediator?.likeAdded(to: $0) })\n    }\n\n    func userDislikedAllNews() {\n        print(\"\\n\\nNews Feed: User DISLIKED all news models\")\n        print(\"News Feed: I am telling to mediator about it...\\n\")\n        newsArray.forEach({ mediator?.likeRemoved(from: $0) })\n    }\n}\n\nclass NewsDetailViewController: ScreenUpdatable {\n\n    private var news: News\n    private weak var mediator: ScreenUpdatable?\n\n    init(_ mediator: ScreenUpdatable?, _ news: News) {\n        self.news = news\n        self.mediator = mediator\n    }\n\n    func likeAdded(to news: News) {\n        print(\"News Detail: Received a liked news model with id \\(news.id)\")\n        if self.news == news {\n            self.news.likesCount += 1\n        }\n    }\n\n    func likeRemoved(from news: News) {\n        print(\"News Detail: Received a disliked news model with id \\(news.id)\")\n        if self.news == news {\n            self.news.likesCount -= 1\n        }\n    }\n}\n\nclass ProfileViewController: ScreenUpdatable {\n\n    private var numberOfGivenLikes: Int\n    private weak var mediator: ScreenUpdatable?\n\n    init(_ mediator: ScreenUpdatable?, _ numberOfGivenLikes: Int) {\n        self.numberOfGivenLikes = numberOfGivenLikes\n        self.mediator = mediator\n    }\n\n    func likeAdded(to news: News) {\n        print(\"Profile: Received a liked news model with id \\(news.id)\")\n        numberOfGivenLikes += 1\n    }\n\n    func likeRemoved(from news: News) {\n        print(\"Profile: Received a disliked news model with id \\(news.id)\")\n        numberOfGivenLikes -= 1\n    }\n}\n\nprotocol ScreenUpdatable: class {\n\n    func likeAdded(to news: News)\n\n    func likeRemoved(from news: News)\n}\n\nclass ScreenMediator: ScreenUpdatable {\n\n    private var screens: [ScreenUpdatable]?\n\n    func update(_ screens: [ScreenUpdatable]) {\n        self.screens = screens\n    }\n\n    func likeAdded(to news: News) {\n        print(\"Screen Mediator: Received a liked news model with id \\(news.id)\")\n        screens?.forEach({ $0.likeAdded(to: news) })\n    }\n\n    func likeRemoved(from news: News) {\n        print(\"ScreenMediator: Received a disliked news model with id \\(news.id)\")\n        screens?.forEach({ $0.likeRemoved(from: news) })\n    }\n}\n\nstruct News: Equatable {\n\n    let id: Int\n\n    let title: String\n\n    var likesCount: Int\n\n    /// Other properties\n\n    static func == (left: News, right: News) -> Bool {\n        return left.id == right.id\n    }\n}\n"
  },
  {
    "path": "Sources/Mediator/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Mediator/RealWorld/Output.txt",
    "content": "News Feed: User LIKED all news models\nNews Feed: I am telling to mediator about it...\n\nScreen Mediator: Received a liked news model with id 1\nNews Feed: Received a liked news model with id 1\nNews Detail: Received a liked news model with id 1\nProfile: Received a liked news model with id 1\nScreen Mediator: Received a liked news model with id 2\nNews Feed: Received a liked news model with id 2\nNews Detail: Received a liked news model with id 2\nProfile: Received a liked news model with id 2\n\n\nNews Feed: User DISLIKED all news models\nNews Feed: I am telling to mediator about it...\n\nScreenMediator: Received a disliked news model with id 1\nNews Feed: Received a disliked news model with id 1\nNews Detail: Received a disliked news model with id 1\nProfile: Received a disliked news model with id 1\nScreenMediator: Received a disliked news model with id 2\nNews Feed: Received a disliked news model with id 2\nNews Detail: Received a disliked news model with id 2\nProfile: Received a disliked news model with id 2\n\n"
  },
  {
    "path": "Sources/Memento/Conceptual/Example.swift",
    "content": "/// EN: Memento Design Pattern\n///\n/// Intent: Lets you save and restore the previous state of an object without\n/// revealing the details of its implementation.\n///\n/// RU: Паттерн Снимок\n///\n/// Назначение: Фиксирует и восстанавливает внутреннее состояние объекта таким\n/// образом, чтобы в дальнейшем объект можно было восстановить в этом состоянии\n/// без нарушения инкапсуляции.\n\nimport XCTest\n\n/// EN: The Originator holds some important state that may change over time. It\n/// also defines a method for saving the state inside a memento and another\n/// method for restoring the state from it.\n///\n/// RU: Создатель содержит некоторое важное состояние, которое может со временем\n/// меняться. Он также объявляет метод сохранения состояния внутри снимка и\n/// метод восстановления состояния из него.\nclass Originator {\n\n    /// EN: For the sake of simplicity, the originator's state is stored inside\n    /// a single variable.\n    ///\n    /// RU: Для удобства состояние создателя хранится внутри одной переменной.\n    private var state: String\n\n    init(state: String) {\n        self.state = state\n        print(\"Originator: My initial state is: \\(state)\")\n    }\n\n    /// EN: The Originator's business logic may affect its internal state.\n    /// Therefore, the client should backup the state before launching methods\n    /// of the business logic via the save() method.\n    ///\n    /// RU: Бизнес-логика Создателя может повлиять на его внутреннее состояние.\n    /// Поэтому клиент должен выполнить резервное копирование состояния с\n    /// помощью метода save перед запуском методов бизнес-логики.\n    func doSomething() {\n        print(\"Originator: I'm doing something important.\")\n        state = generateRandomString()\n        print(\"Originator: and my state has changed to: \\(state)\")\n    }\n\n    private func generateRandomString() -> String {\n        return String(UUID().uuidString.suffix(4))\n    }\n\n    /// EN: Saves the current state inside a memento.\n    ///\n    /// RU: Сохраняет текущее состояние внутри снимка.\n    func save() -> Memento {\n        return ConcreteMemento(state: state)\n    }\n\n    /// EN: Restores the Originator's state from a memento object.\n    ///\n    /// RU: Восстанавливает состояние Создателя из объекта снимка.\n    func restore(memento: Memento) {\n        guard let memento = memento as? ConcreteMemento else { return }\n        self.state = memento.state\n        print(\"Originator: My state has changed to: \\(state)\")\n    }\n}\n\n/// EN: The Memento interface provides a way to retrieve the memento's metadata,\n/// such as creation date or name. However, it doesn't expose the Originator's\n/// state.\n///\n/// RU: Интерфейс Снимка предоставляет способ извлечения метаданных снимка,\n/// таких как дата создания или название. Однако он не раскрывает состояние\n/// Создателя.\nprotocol Memento {\n\n    var name: String { get }\n    var date: Date { get }\n}\n\n/// EN: The Concrete Memento contains the infrastructure for storing the\n/// Originator's state.\n///\n/// RU: Конкретный снимок содержит инфраструктуру для хранения состояния\n/// Создателя.\nclass ConcreteMemento: Memento {\n\n    /// EN: The Originator uses this method when restoring its state.\n    ///\n    /// RU: Создатель использует этот метод, когда восстанавливает своё\n    /// состояние.\n    private(set) var state: String\n    private(set) var date: Date\n\n    init(state: String) {\n        self.state = state\n        self.date = Date()\n    }\n\n    /// EN: The rest of the methods are used by the Caretaker to display\n    /// metadata.\n    ///\n    /// RU: Остальные методы используются Опекуном для отображения метаданных.\n    var name: String { return state + \" \" + date.description.suffix(14).prefix(8) }\n}\n\n/// EN: The Caretaker doesn't depend on the Concrete Memento class. Therefore,\n/// it doesn't have access to the originator's state, stored inside the memento.\n/// It works with all mementos via the base Memento interface.\n///\n/// RU: Опекун не зависит от класса Конкретного Снимка. Таким образом, он не\n/// имеет доступа к состоянию создателя, хранящемуся внутри снимка. Он работает\n/// со всеми снимками через базовый интерфейс Снимка.\nclass Caretaker {\n\n    private lazy var mementos = [Memento]()\n    private var originator: Originator\n\n    init(originator: Originator) {\n        self.originator = originator\n    }\n\n    func backup() {\n        print(\"\\nCaretaker: Saving Originator's state...\\n\")\n        mementos.append(originator.save())\n    }\n\n    func undo() {\n\n        guard !mementos.isEmpty else { return }\n        let removedMemento = mementos.removeLast()\n\n        print(\"Caretaker: Restoring state to: \" + removedMemento.name)\n        originator.restore(memento: removedMemento)\n    }\n\n    func showHistory() {\n        print(\"Caretaker: Here's the list of mementos:\\n\")\n        mementos.forEach({ print($0.name) })\n    }\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass MementoConceptual: XCTestCase {\n\n    func testMementoConceptual() {\n\n        let originator = Originator(state: \"Super-duper-super-puper-super.\")\n        let caretaker = Caretaker(originator: originator)\n\n        caretaker.backup()\n        originator.doSomething()\n\n        caretaker.backup()\n        originator.doSomething()\n\n        caretaker.backup()\n        originator.doSomething()\n\n        print(\"\\n\")\n        caretaker.showHistory()\n\n        print(\"\\nClient: Now, let's rollback!\\n\\n\")\n        caretaker.undo()\n\n        print(\"\\nClient: Once more!\\n\\n\")\n        caretaker.undo()\n    }\n}\n"
  },
  {
    "path": "Sources/Memento/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Memento/Conceptual/Output.txt",
    "content": "Originator: My initial state is: Super-duper-super-puper-super.\n\nCaretaker: Saving Originator's state...\n\nOriginator: I'm doing something important.\nOriginator: and my state has changed to: 1923\n\nCaretaker: Saving Originator's state...\n\nOriginator: I'm doing something important.\nOriginator: and my state has changed to: 74FB\n\nCaretaker: Saving Originator's state...\n\nOriginator: I'm doing something important.\nOriginator: and my state has changed to: 3681\n\n\nCaretaker: Here's the list of mementos:\n\nSuper-duper-super-puper-super. 11:45:44\n1923 11:45:44\n74FB 11:45:44\n\nClient: Now, let's rollback!\n\n\nCaretaker: Restoring state to: 74FB 11:45:44\nOriginator: My state has changed to: 74FB\n\nClient: Once more!\n\n\nCaretaker: Restoring state to: 1923 11:45:44\nOriginator: My state has changed to: 1923"
  },
  {
    "path": "Sources/Memento/RealWorld/Example.swift",
    "content": "import XCTest\n\nclass MementoRealWorld: XCTestCase {\n\n    /// State and Command are often used together when the previous state of the\n    /// object should be restored in case of failure of some operation.\n    ///\n    /// Note: UndoManager can be used as an alternative.\n\n    func test() {\n\n        let textView = UITextView()\n        let undoStack = UndoStack(textView)\n\n        textView.text = \"First Change\"\n        undoStack.save()\n\n        textView.text = \"Second Change\"\n        undoStack.save()\n\n        textView.text = (textView.text ?? \"\") + \" & Third Change\"\n        textView.textColor = .red\n        undoStack.save()\n\n        print(undoStack)\n\n        print(\"Client: Perform Undo operation 2 times\\n\")\n        undoStack.undo()\n        undoStack.undo()\n\n        print(undoStack)\n    }\n}\n\nclass UndoStack: CustomStringConvertible {\n\n    private lazy var mementos = [Memento]()\n    private let textView: UITextView\n\n    init(_ textView: UITextView) {\n        self.textView = textView\n    }\n\n    func save() {\n        mementos.append(textView.memento)\n    }\n\n    func undo() {\n        guard !mementos.isEmpty else { return }\n        textView.restore(with: mementos.removeLast())\n    }\n\n    var description: String {\n        return mementos.reduce(\"\", { $0 + $1.description })\n    }\n}\n\nprotocol Memento: CustomStringConvertible {\n\n    var text: String { get }\n    var date: Date { get }\n}\n\nextension UITextView {\n\n    var memento: Memento {\n        return TextViewMemento(text: text,\n                               textColor: textColor,\n                               selectedRange: selectedRange)\n    }\n\n    func restore(with memento: Memento) {\n        guard let textViewMemento = memento as? TextViewMemento else { return }\n\n        text = textViewMemento.text\n        textColor = textViewMemento.textColor\n        selectedRange = textViewMemento.selectedRange\n    }\n\n    struct TextViewMemento: Memento {\n\n        let text: String\n        let date = Date()\n\n        let textColor: UIColor?\n        let selectedRange: NSRange\n\n        var description: String {\n            let time = Calendar.current.dateComponents([.hour, .minute, .second, .nanosecond],\n                                                       from: date)\n            let color = String(describing: textColor)\n            return \"Text: \\(text)\\n\" + \"Date: \\(time.description)\\n\"\n                + \"Color: \\(color)\\n\" + \"Range: \\(selectedRange)\\n\\n\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Memento/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Memento/RealWorld/Output.txt",
    "content": "Text: First Change\nDate: hour: 12 minute: 21 second: 50 nanosecond: 821737051 isLeapMonth: false\nColor: nil\nRange: {12, 0}\n\nText: Second Change\nDate: hour: 12 minute: 21 second: 50 nanosecond: 826483011 isLeapMonth: false\nColor: nil\nRange: {13, 0}\n\nText: Second Change & Third Change\nDate: hour: 12 minute: 21 second: 50 nanosecond: 829187035 isLeapMonth: false\nColor: Optional(UIExtendedSRGBColorSpace 1 0 0 1)\nRange: {28, 0}\n\n\nClient: Perform Undo operation 2 times\n\nText: First Change\nDate: hour: 12 minute: 21 second: 50 nanosecond: 821737051 isLeapMonth: false\nColor: nil\nRange: {12, 0}\n"
  },
  {
    "path": "Sources/Observer/Conceptual/Example.swift",
    "content": "/// EN: Observer Design Pattern\n///\n/// Intent: Lets you define a subscription mechanism to notify multiple objects\n/// about any events that happen to the object they're observing.\n///\n/// Note that there's a lot of different terms with similar meaning associated\n/// with this pattern. Just remember that the Subject is also called the\n/// Publisher and the Observer is often called the Subscriber and vice versa.\n/// Also the verbs \"observe\", \"listen\" or \"track\" usually mean the same thing.\n///\n/// Swift language has multiple ways of implementing the Observer pattern:\n///\n/// - KVO. Here is an example of how to implement it in a dozen lines of code:\n/// https://www.objc.io/blog/2018/04/24/bindings-with-kvo-and-keypaths/\n///\n/// - NotificationCenter\n/// https://developer.apple.com/documentation/foundation/notificationcenter\n///\n/// - RxSwift:\n/// https://github.com/ReactiveX/RxSwift\n///\n/// In this example we'll implement a custom observer from scratch.\n///\n/// RU: Паттерн Наблюдатель\n///\n/// Назначение: Создаёт механизм подписки, позволяющий одним объектам следить и\n/// реагировать на события, происходящие в других объектах.\n///\n/// Обратите внимание, что существует множество различных терминов с похожими\n/// значениями, связанных с этим паттерном. Просто помните, что Субъекта также\n/// называют Издателем, а Наблюдателя часто называют Подписчиком и наоборот.\n/// Также глаголы «наблюдать», «слушать» или «отслеживать» обычно означают одно\n/// и то же.\n///\n/// Язык Swift имеет несколько способов реализации Наблюдателя. Вот некоторые из\n/// них:\n///\n/// - KVO. Вот замечательный пример того, как можно реализовать паттерн с\n/// помощью дюжины строк кода:\n/// https://www.objc.io/blog/2018/04/24/bindings-with-kvo-and-keypaths/\n///\n/// - NotificationCenter:\n/// https://developer.apple.com/documentation/foundation/notificationcenter\n///\n/// - RxSwift:\n/// https://github.com/ReactiveX/RxSwift\n///\n/// В этом примере, однако, мы попробуем реализовать Наблюдатель самостоятельно.\n\nimport XCTest\n\n/// EN: The Subject owns some important state and notifies observers when the\n/// state changes.\n///\n/// RU: Издатель владеет некоторым важным состоянием и оповещает наблюдателей о\n/// его изменениях.\nclass Subject {\n\n    /// EN: For the sake of simplicity, the Subject's state, essential to all\n    /// subscribers, is stored in this variable.\n    ///\n    /// RU: Для удобства в этой переменной хранится состояние Издателя,\n    /// необходимое всем подписчикам.\n    var state: Int = { return Int(arc4random_uniform(10)) }()\n\n    /// EN: @var array List of subscribers. In real life, the list of\n    /// subscribers can be stored more comprehensively (categorized by event\n    /// type, etc.).\n    ///\n    /// RU: @var array Список подписчиков. В реальной жизни список подписчиков\n    /// может храниться в более подробном виде (классифицируется по типу события\n    /// и т.д.)\n    private lazy var observers = [Observer]()\n\n    /// EN: The subscription management methods.\n    ///\n    /// RU: Методы управления подпиской.\n    func attach(_ observer: Observer) {\n        print(\"Subject: Attached an observer.\\n\")\n        observers.append(observer)\n    }\n\n    func detach(_ observer: Observer) {\n        if let idx = observers.firstIndex(where: { $0 === observer }) {\n            observers.remove(at: idx)\n            print(\"Subject: Detached an observer.\\n\")\n        }\n    }\n\n    /// EN: Trigger an update in each subscriber.\n    ///\n    /// RU: Запуск обновления в каждом подписчике.\n    func notify() {\n        print(\"Subject: Notifying observers...\\n\")\n        observers.forEach({ $0.update(subject: self)})\n    }\n\n    /// EN: Usually, the subscription logic is only a fraction of what a Subject\n    /// can really do. Subjects commonly hold some important business logic,\n    /// that triggers a notification method whenever something important is\n    /// about to happen (or after it).\n    ///\n    /// RU: Обычно логика подписки – только часть того, что делает Издатель.\n    /// Издатели часто содержат некоторую важную бизнес-логику, которая\n    /// запускает метод уведомления всякий раз, когда должно произойти что-то\n    /// важное (или после этого).\n    func someBusinessLogic() {\n        print(\"\\nSubject: I'm doing something important.\\n\")\n        state = Int(arc4random_uniform(10))\n        print(\"Subject: My state has just changed to: \\(state)\\n\")\n        notify()\n    }\n}\n\n/// EN: The Observer protocol declares the update method, used by subjects.\n///\n/// RU: Наблюдатель объявляет метод уведомления, который используют издатели для\n/// оповещения.\nprotocol Observer: AnyObject {\n\n    func update(subject: Subject)\n}\n\n/// EN: Concrete Observers react to the updates issued by the Subject they had\n/// been attached to.\n///\n/// RU: Конкретные Наблюдатели реагируют на обновления, выпущенные Издателем, к\n/// которому они прикреплены.\nclass ConcreteObserverA: Observer {\n\n    func update(subject: Subject) {\n\n        if subject.state < 3 {\n            print(\"ConcreteObserverA: Reacted to the event.\\n\")\n        }\n    }\n}\n\nclass ConcreteObserverB: Observer {\n\n    func update(subject: Subject) {\n\n        if subject.state >= 3 {\n            print(\"ConcreteObserverB: Reacted to the event.\\n\")\n        }\n    }\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass ObserverConceptual: XCTestCase {\n\n    func testObserverConceptual() {\n\n        let subject = Subject()\n\n        let observer1 = ConcreteObserverA()\n        let observer2 = ConcreteObserverB()\n\n        subject.attach(observer1)\n        subject.attach(observer2)\n\n        subject.someBusinessLogic()\n        subject.someBusinessLogic()\n        subject.detach(observer2)\n        subject.someBusinessLogic()\n    }\n}\n"
  },
  {
    "path": "Sources/Observer/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Observer/Conceptual/Output.txt",
    "content": "Subject: Attached an observer.\n\nSubject: Attached an observer.\n\n\nSubject: I'm doing something important.\n\nSubject: My state has just changed to: 4\n\nSubject: Notifying observers...\n\nConcreteObserverB: Reacted to the event.\n\n\nSubject: I'm doing something important.\n\nSubject: My state has just changed to: 2\n\nSubject: Notifying observers...\n\nConcreteObserverA: Reacted to the event.\n\nSubject: Detached an observer.\n\n\nSubject: I'm doing something important.\n\nSubject: My state has just changed to: 8\n\nSubject: Notifying observers...\n"
  },
  {
    "path": "Sources/Observer/RealWorld/Example.swift",
    "content": "import XCTest\n\nclass ObserverRealWorld: XCTestCase {\n\n    func test() {\n\n        let cartManager = CartManager()\n\n        let navigationBar = UINavigationBar()\n        let cartVC = CartViewController()\n\n        cartManager.add(subscriber: navigationBar)\n        cartManager.add(subscriber: cartVC)\n\n        let apple = Food(id: 111, name: \"Apple\", price: 10, calories: 20)\n        cartManager.add(product: apple)\n\n        let tShirt = Clothes(id: 222, name: \"T-shirt\", price: 200, size: \"L\")\n        cartManager.add(product: tShirt)\n\n        cartManager.remove(product: apple)\n    }\n}\n\nprotocol CartSubscriber: CustomStringConvertible {\n\n    func accept(changed cart: [Product])\n}\n\nprotocol Product {\n\n    var id: Int { get }\n    var name: String { get }\n    var price: Double { get }\n\n    func isEqual(to product: Product) -> Bool\n}\n\nextension Product {\n\n    func isEqual(to product: Product) -> Bool {\n        return id == product.id\n    }\n}\n\nstruct Food: Product {\n\n    var id: Int\n    var name: String\n    var price: Double\n\n    /// Food-specific properties\n    var calories: Int\n}\n\nstruct Clothes: Product {\n\n    var id: Int\n    var name: String\n    var price: Double\n\n    /// Clothes-specific properties\n    var size: String\n}\n\nclass CartManager {\n\n    private lazy var cart = [Product]()\n    private lazy var subscribers = [CartSubscriber]()\n\n    func add(subscriber: CartSubscriber) {\n        print(\"CartManager: I'am adding a new subscriber: \\(subscriber.description)\")\n        subscribers.append(subscriber)\n    }\n\n    func add(product: Product) {\n        print(\"\\nCartManager: I'am adding a new product: \\(product.name)\")\n        cart.append(product)\n        notifySubscribers()\n    }\n\n    func remove(subscriber filter: (CartSubscriber) -> (Bool)) {\n        guard let index = subscribers.firstIndex(where: filter) else { return }\n        subscribers.remove(at: index)\n    }\n\n    func remove(product: Product) {\n        guard let index = cart.firstIndex(where: { $0.isEqual(to: product) }) else { return }\n        print(\"\\nCartManager: Product '\\(product.name)' is removed from a cart\")\n        cart.remove(at: index)\n        notifySubscribers()\n    }\n\n    private func notifySubscribers() {\n        subscribers.forEach({ $0.accept(changed: cart) })\n    }\n}\n\nextension UINavigationBar: CartSubscriber {\n\n    func accept(changed cart: [Product]) {\n        print(\"UINavigationBar: Updating an appearance of navigation items\")\n    }\n\n    open override var description: String { return \"UINavigationBar\" }\n}\n\nclass CartViewController: UIViewController, CartSubscriber {\n\n    func accept(changed cart: [Product]) {\n        print(\"CartViewController: Updating an appearance of a list view with products\")\n    }\n\n    open override var description: String { return \"CartViewController\" }\n}\n"
  },
  {
    "path": "Sources/Observer/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Observer/RealWorld/Output.txt",
    "content": "CartManager: I'am adding a new subscriber: UINavigationBar\nCartManager: I'am adding a new subscriber: CartViewController\n\nCartManager: I'am adding a new product: Apple\nUINavigationBar: Updating an appearance of navigation items\nCartViewController: Updating an appearance of a list view with products\n\nCartManager: I'am adding a new product: T-shirt\nUINavigationBar: Updating an appearance of navigation items\nCartViewController: Updating an appearance of a list view with products\n\nCartManager: Product 'Apple' is removed from a cart\nUINavigationBar: Updating an appearance of navigation items\nCartViewController: Updating an appearance of a list view with products\n"
  },
  {
    "path": "Sources/Prototype/Conceptual/Example.swift",
    "content": "/// EN: Prototype Design Pattern\n///\n/// Intent: Lets you copy existing objects without making your code dependent on\n/// their classes.\n///\n/// RU: Паттерн Прототип\n///\n/// Назначение: Позволяет копировать объекты, не вдаваясь в подробности их\n/// реализации.\n\nimport XCTest\n\n/// EN: Swift has built-in cloning support. To add cloning support to your\n/// class, you need to implement the NSCopying protocol in that class and\n/// provide the implementation for the `copy` method.\n///\n/// RU: Swift имеет встроенную поддержку клонирования. Чтобы сделать класс\n/// клонируемым, вам нужно реализовать в нём протокол NSCopying, а именно метод\n/// `copy`.\nclass BaseClass: NSCopying, Equatable {\n\n    private var intValue = 1\n    private var stringValue = \"Value\"\n\n    required init(intValue: Int = 1, stringValue: String = \"Value\") {\n\n        self.intValue = intValue\n        self.stringValue = stringValue\n    }\n\n    /// MARK: - NSCopying\n    func copy(with zone: NSZone? = nil) -> Any {\n        let prototype = type(of: self).init()\n        prototype.intValue = intValue\n        prototype.stringValue = stringValue\n        print(\"Values defined in BaseClass have been cloned!\")\n        return prototype\n    }\n\n    /// MARK: - Equatable\n    static func == (lhs: BaseClass, rhs: BaseClass) -> Bool {\n        return lhs.intValue == rhs.intValue && lhs.stringValue == rhs.stringValue\n    }\n}\n\n/// EN: Subclasses can override the base `copy` method to copy their own data\n/// into the resulting object. But you should always call the base method first.\n///\n/// RU: Подклассы могет переопределять базовый метод `copy`, чтобы дополнительно\n/// скопировать данные собственного класса. Но в этом случае всегда сперва\n/// вызывайте родительскую реализацию метод копирования.\nclass SubClass: BaseClass {\n\n    private var boolValue = true\n\n    func copy() -> Any {\n        return copy(with: nil)\n    }\n\n    override func copy(with zone: NSZone?) -> Any {\n        guard let prototype = super.copy(with: zone) as? SubClass else {\n            return SubClass() // oops\n        }\n        prototype.boolValue = boolValue\n        print(\"Values defined in SubClass have been cloned!\")\n        return prototype\n    }\n}\n\n/// EN: The client code.\n///\n/// RU: Клиентский код.\nclass Client {\n    // ...\n    static func someClientCode() {\n        let original = SubClass(intValue: 2, stringValue: \"Value2\")\n\n        guard let copy = original.copy() as? SubClass else {\n            XCTAssert(false)\n            return\n        }\n\n        /// EN: See implementation of `Equatable` protocol for more details.\n        ///\n        /// RU: См. реализацию протокола `Equatable`.\n        XCTAssert(copy == original)\n\n        print(\"The original object is equal to the copied object!\")\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass PrototypeConceptual: XCTestCase {\n\n    func testPrototype_NSCopying() {\n        Client.someClientCode()\n    }\n}\n"
  },
  {
    "path": "Sources/Prototype/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Prototype/Conceptual/Output.txt",
    "content": "Values defined in BaseClass have been cloned!\nValues defined in SubClass have been cloned!\nThe original object is equal to the copied object!"
  },
  {
    "path": "Sources/Prototype/RealWorld/Example.swift",
    "content": "import XCTest\n\nclass PrototypeRealWorld: XCTestCase {\n\n    func testPrototypeRealWorld() {\n\n        let author = Author(id: 10, username: \"Ivan_83\")\n        let page = Page(title: \"My First Page\", contents: \"Hello world!\", author: author)\n\n        page.add(comment: Comment(message: \"Keep it up!\"))\n\n        /// Since NSCopying returns Any, the copied object should be unwrapped.\n        guard let anotherPage = page.copy() as? Page else {\n            XCTFail(\"Page was not copied\")\n            return\n        }\n\n        /// Comments should be empty as it is a new page.\n        XCTAssert(anotherPage.comments.isEmpty)\n\n        /// Note that the author is now referencing two objects.\n        XCTAssert(author.pagesCount == 2)\n\n        print(\"Original title: \" + page.title)\n        print(\"Copied title: \" + anotherPage.title)\n        print(\"Count of pages: \" + String(author.pagesCount))\n    }\n}\n\nprivate class Author {\n\n    private var id: Int\n    private var username: String\n    private var pages = [Page]()\n\n    init(id: Int, username: String) {\n        self.id = id\n        self.username = username\n    }\n\n    func add(page: Page) {\n        pages.append(page)\n    }\n\n    var pagesCount: Int {\n        return pages.count\n    }\n}\n\nprivate class Page: NSCopying {\n\n    private(set) var title: String\n    private(set) var contents: String\n    private weak var author: Author?\n    private(set) var comments = [Comment]()\n\n    init(title: String, contents: String, author: Author?) {\n        self.title = title\n        self.contents = contents\n        self.author = author\n        author?.add(page: self)\n    }\n\n    func add(comment: Comment) {\n        comments.append(comment)\n    }\n\n    /// MARK: - NSCopying\n\n    func copy(with zone: NSZone? = nil) -> Any {\n        return Page(title: \"Copy of '\" + title + \"'\", contents: contents, author: author)\n    }\n}\n\nprivate struct Comment {\n\n    let date = Date()\n    let message: String\n}\n"
  },
  {
    "path": "Sources/Prototype/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Prototype/RealWorld/Output.txt",
    "content": "Original title: My First Page\nCopied title: Copy of 'My First Page'\nCount of pages: 2\n"
  },
  {
    "path": "Sources/Proxy/Conceptual/Example.swift",
    "content": "/// EN: Proxy Design Pattern\n///\n/// Intent: Provide a surrogate or placeholder for another object to control\n/// access to the original object or to add other responsibilities.\n///\n/// RU: Паттерн Заместитель\n///\n/// Назначение: Позволяет подставлять вместо реальных объектов специальные\n/// объекты-заменители. Эти объекты перехватывают вызовы к оригинальному\n/// объекту, позволяя сделать что-то до или после передачи вызова оригиналу.\n\nimport XCTest\n\n/// EN: The Subject interface declares common operations for both RealSubject\n/// and the Proxy. As long as the client works with RealSubject using this\n/// interface, you'll be able to pass it a proxy instead of a real subject.\n///\n/// RU: Интерфейс Субъекта объявляет общие операции как для Реального Субъекта,\n/// так и для Заместителя. Пока клиент работает с Реальным Субъектом, используя\n/// этот интерфейс,  вы сможете передать ему заместителя вместо реального\n/// субъекта.\nprotocol Subject {\n\n    func request()\n}\n\n/// EN: The RealSubject contains some core business logic. Usually, RealSubjects\n/// are capable of doing some useful work which may also be very slow or\n/// sensitive - e.g. correcting input data. A Proxy can solve these issues\n/// without any changes to the RealSubject's code.\n///\n/// RU: Реальный Субъект содержит некоторую базовую бизнес-логику. Как правило,\n/// Реальные Субъекты способны выполнять некоторую полезную работу, которая к\n/// тому же может быть очень медленной или точной – например, коррекция входных\n/// данных. Заместитель может решить эти задачи без каких-либо изменений в коде\n/// Реального Субъекта.\nclass RealSubject: Subject {\n\n    func request() {\n        print(\"RealSubject: Handling request.\")\n    }\n}\n\n/// EN: The Proxy has an interface identical to the RealSubject.\n///\n/// RU: Интерфейс Заместителя идентичен интерфейсу Реального Субъекта.\nclass Proxy: Subject {\n\n    private var realSubject: RealSubject\n\n    /// EN: The Proxy maintains a reference to an object of the RealSubject\n    /// class. It can be either lazy-loaded or passed to the Proxy by the\n    /// client.\n    ///\n    /// RU: Заместитель хранит ссылку на объект класса РеальныйСубъект. Клиент\n    /// может либо лениво загрузить его, либо передать Заместителю.\n    init(_ realSubject: RealSubject) {\n        self.realSubject = realSubject\n    }\n\n    /// EN: The most common applications of the Proxy pattern are lazy loading,\n    /// caching, controlling the access, logging, etc. A Proxy can perform one\n    /// of these things and then, depending on the result, pass the execution to\n    /// the same method in a linked RealSubject object.\n    ///\n    /// RU: Наиболее распространёнными областями применения паттерна Заместитель\n    /// являются ленивая загрузка, кэширование, контроль доступа, ведение\n    /// журнала и т.д. Заместитель может выполнить одну из этих задач, а затем,\n    /// в зависимости от результата, передать выполнение одноимённому методу в\n    /// связанном объекте класса РеальныйСубъект.\n    func request() {\n\n        if (checkAccess()) {\n            realSubject.request()\n            logAccess()\n        }\n    }\n\n    private func checkAccess() -> Bool {\n\n        /// EN: Some real checks should go here.\n        ///\n        /// RU: Некоторые реальные проверки должны проходить здесь.\n\n        print(\"Proxy: Checking access prior to firing a real request.\")\n\n        return true\n    }\n\n    private func logAccess() {\n        print(\"Proxy: Logging the time of request.\")\n    }\n}\n\n/// EN: The client code is supposed to work with all objects (both subjects and\n/// proxies) via the Subject interface in order to support both real subjects\n/// and proxies. In real life, however, clients mostly work with their real\n/// subjects directly. In this case, to implement the pattern more easily, you\n/// can extend your proxy from the real subject's class.\n///\n/// RU: Клиентский код должен работать со всеми объектами (как с реальными, так\n/// и заместителями) через интерфейс Субъекта, чтобы поддерживать как реальные\n/// субъекты, так и заместителей. В реальной жизни, однако, клиенты в основном\n/// работают с реальными субъектами напрямую. В этом случае, для более простой\n/// реализации паттерна, можно расширить заместителя из класса реального\n/// субъекта.\nclass Client {\n    // ...\n    static func clientCode(subject: Subject) {\n        // ...\n        subject.request()\n        // ...\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass ProxyConceptual: XCTestCase {\n\n    func test() {\n        print(\"Client: Executing the client code with a real subject:\")\n        let realSubject = RealSubject()\n        Client.clientCode(subject: realSubject)\n\n        print(\"\\nClient: Executing the same client code with a proxy:\")\n        let proxy = Proxy(realSubject)\n        Client.clientCode(subject: proxy)\n    }\n}\n"
  },
  {
    "path": "Sources/Proxy/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Proxy/Conceptual/Output.txt",
    "content": "Client: Executing the client code with a real subject:\nRealSubject: Handling request.\n\nClient: Executing the same client code with a proxy:\nProxy: Checking access prior to firing a real request.\nRealSubject: Handling request.\nProxy: Logging the time of request."
  },
  {
    "path": "Sources/Proxy/RealWorld/Example.swift",
    "content": "import XCTest\n\nclass ProxyRealWorld: XCTestCase {\n\n    /// EN: Proxy Design Pattern\n    ///\n    /// Intent: Provide a surrogate or placeholder for another object to control\n    /// access to the original object or to add other responsibilities.\n    ///\n    /// Example: There are countless ways proxies can be used: caching, logging,\n    /// access control, delayed initialization, etc.\n    ///\n    /// RU: Паттерн Заместитель\n    ///\n    /// Назначение: Позволяет подставлять вместо реальных объектов специальные\n    /// объекты-заменители. Эти объекты перехватывают вызовы к оригинальному\n    /// объекту, позволяя сделать что-то до или после передачи вызова оригиналу.\n    ///\n    /// Пример: Существует бесчисленное множество направлений, где могут быть\n    /// использованы заместители: кэширование, логирование, контроль доступа,\n    /// отложенная инициализация и т.д.\n\n    func testProxyRealWorld() {\n\n        print(\"Client: Loading a profile WITHOUT proxy\")\n        loadBasicProfile(with: Keychain())\n        loadProfileWithBankAccount(with: Keychain())\n\n        print(\"\\nClient: Let's load a profile WITH proxy\")\n        loadBasicProfile(with: ProfileProxy())\n        loadProfileWithBankAccount(with: ProfileProxy())\n    }\n\n    func loadBasicProfile(with service: ProfileService) {\n\n        service.loadProfile(with: [.basic], success: { profile in\n            print(\"Client: Basic profile is loaded\")\n        }) { error in\n            print(\"Client: Cannot load a basic profile\")\n            print(\"Client: Error: \" + error.localizedSummary)\n        }\n    }\n\n    func loadProfileWithBankAccount(with service: ProfileService) {\n\n        service.loadProfile(with: [.basic, .bankAccount], success: { profile in\n            print(\"Client: Basic profile with a bank account is loaded\")\n        }) { error in\n            print(\"Client: Cannot load a profile with a bank account\")\n            print(\"Client: Error: \" + error.localizedSummary)\n        }\n    }\n}\n\nenum AccessField {\n\n    case basic\n    case bankAccount\n}\n\nprotocol ProfileService {\n\n    typealias Success = (Profile) -> ()\n    typealias Failure = (LocalizedError) -> ()\n\n    func loadProfile(with fields: [AccessField], success: Success, failure: Failure)\n}\n\nclass ProfileProxy: ProfileService {\n\n    private let keychain = Keychain()\n\n    func loadProfile(with fields: [AccessField], success: Success, failure: Failure) {\n\n        if let error = checkAccess(for: fields) {\n            failure(error)\n        } else {\n            /// Note:\n            /// At this point, the `success` and `failure` closures can be\n            /// passed directly to the original service (as it is now) or\n            /// expanded here to handle a result (for example, to cache).\n\n            keychain.loadProfile(with: fields, success: success, failure: failure)\n        }\n    }\n\n    private func checkAccess(for fields: [AccessField]) -> LocalizedError? {\n        if fields.contains(.bankAccount) {\n            switch BiometricsService.checkAccess() {\n            case .authorized: return nil\n            case .denied: return ProfileError.accessDenied\n            }\n        }\n        return nil\n    }\n}\n\nclass Keychain: ProfileService {\n\n    func loadProfile(with fields: [AccessField], success: Success, failure: Failure) {\n\n        var profile = Profile()\n\n        for item in fields {\n            switch item {\n            case .basic:\n                let info = loadBasicProfile()\n                profile.firstName = info[Profile.Keys.firstName.raw]\n                profile.lastName = info[Profile.Keys.lastName.raw]\n                profile.email = info[Profile.Keys.email.raw]\n            case .bankAccount:\n                profile.bankAccount = loadBankAccount()\n            }\n        }\n\n        success(profile)\n    }\n\n    private func loadBasicProfile() -> [String : String] {\n        /// Gets these fields from a secure storage.\n        return [Profile.Keys.firstName.raw : \"Vasya\",\n                Profile.Keys.lastName.raw : \"Pupkin\",\n                Profile.Keys.email.raw : \"vasya.pupkin@gmail.com\"]\n    }\n\n    private func loadBankAccount() -> BankAccount {\n        /// Gets these fields from a secure storage.\n        return BankAccount(id: 12345, amount: 999)\n    }\n}\n\nclass BiometricsService {\n\n    enum Access {\n        case authorized\n        case denied\n    }\n\n    static func checkAccess() -> Access {\n        /// The service uses Face ID, Touch ID or a plain old password to\n        /// determine whether the current user is an owner of the device.\n\n        /// Let's assume that in our example a user forgot a password :)\n        return .denied\n    }\n}\n\nstruct Profile {\n\n    enum Keys: String {\n        case firstName\n        case lastName\n        case email\n    }\n\n    var firstName: String?\n    var lastName: String?\n    var email: String?\n\n    var bankAccount: BankAccount?\n}\n\nstruct BankAccount {\n\n    var id: Int\n    var amount: Double\n}\n\nenum ProfileError: LocalizedError {\n\n    case accessDenied\n\n    var errorDescription: String? {\n        switch self {\n        case .accessDenied:\n            return \"Access is denied. Please enter a valid password\"\n        }\n    }\n}\n\nextension RawRepresentable {\n\n    var raw: Self.RawValue {\n        return rawValue\n    }\n}\n\nextension LocalizedError {\n\n    var localizedSummary: String {\n        return errorDescription ?? \"\"\n    }\n}\n"
  },
  {
    "path": "Sources/Proxy/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Proxy/RealWorld/Output.txt",
    "content": "Client: Loading a profile WITHOUT proxy\nClient: Basic profile is loaded\nClient: Basic profile with a bank account is loaded\n\nClient: Let's load a profile WITH proxy\nClient: Basic profile is loaded\nClient: Cannot load a profile with a bank account\nClient: Error: Access is denied. Please enter a valid password\n"
  },
  {
    "path": "Sources/Singleton/Conceptual/Example.swift",
    "content": "/// EN: Singleton Design Pattern\n///\n/// Intent: Lets you ensure that a class has only one instance, while providing\n/// a global access point to this instance.\n///\n/// RU: Паттерн Одиночка\n///\n/// Назначение: Гарантирует, что у класса есть только один экземпляр, и\n/// предоставляет к нему глобальную точку доступа.\n\nimport XCTest\n\n/// EN: The Singleton class defines the `shared` field that lets clients access\n/// the unique singleton instance.\n///\n/// RU: Класс Одиночка предоставляет поле `shared`, которое позволяет клиентам\n/// получать доступ к уникальному экземпляру одиночки.\nclass Singleton {\n\n    /// EN: The static field that controls the access to the singleton instance.\n    ///\n    /// This implementation let you extend the Singleton class while keeping\n    /// just one instance of each subclass around.\n    ///\n    /// RU: Статическое поле, управляющие доступом к экземпляру одиночки.\n    ///\n    /// Эта реализация позволяет вам расширять класс Одиночки, сохраняя повсюду\n    /// только один экземпляр каждого подкласса.\n    static var shared: Singleton = {\n        let instance = Singleton()\n        // EN: ... configure the instance\n        // ...\n        //\n        // RU: ... настройка объекта\n        // ...\n        return instance\n    }()\n\n    /// EN: The Singleton's initializer should always be private to prevent\n    /// direct construction calls with the `new` operator.\n    ///\n    /// RU: Инициализатор Одиночки всегда должен быть скрытым, чтобы\n    /// предотвратить прямое создание объекта через инициализатор.\n    private init() {}\n\n    /// EN: Finally, any singleton should define some business logic, which can\n    /// be executed on its instance.\n    ///\n    /// RU: Наконец, любой одиночка должен содержать некоторую бизнес-логику,\n    /// которая может быть выполнена на его экземпляре.\n    func someBusinessLogic() -> String {\n        // ...\n        return \"Result of the 'someBusinessLogic' call\"\n    }\n}\n\n/// EN: Singletons should not be cloneable.\n///\n/// RU: Одиночки не должны быть клонируемыми.\nextension Singleton: NSCopying {\n\n    func copy(with zone: NSZone? = nil) -> Any {\n        return self\n    }\n}\n\n/// EN: The client code.\n///\n/// RU: Клиентский код.\nclass Client {\n    // ...\n    static func someClientCode() {\n        let instance1 = Singleton.shared\n        let instance2 = Singleton.shared\n\n        if (instance1 === instance2) {\n            print(\"Singleton works, both variables contain the same instance.\")\n        } else {\n            print(\"Singleton failed, variables contain different instances.\")\n        }\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass SingletonConceptual: XCTestCase {\n\n    func testSingletonConceptual() {\n        Client.someClientCode()\n    }\n}\n"
  },
  {
    "path": "Sources/Singleton/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Singleton/Conceptual/Output.txt",
    "content": "Singleton works, both variables contain the same instance.\n"
  },
  {
    "path": "Sources/Singleton/RealWorld/Example.swift",
    "content": "import XCTest\n\n/// Singleton Design Pattern\n///\n/// Intent: Ensure that class has a single instance, and provide a global point\n/// of access to it.\n\nclass SingletonRealWorld: XCTestCase {\n\n    func testSingletonRealWorld() {\n\n        /// There are two view controllers.\n        ///\n        /// MessagesListVC displays a list of last messages from a user's chats.\n        /// ChatVC displays a chat with a friend.\n        ///\n        /// FriendsChatService fetches messages from a server and provides all\n        /// subscribers (view controllers in our example) with new and removed\n        /// messages.\n        ///\n        /// FriendsChatService is used by both view controllers. It can be\n        /// implemented as an instance of a class as well as a global variable.\n        ///\n        /// In this example, it is important to have only one instance that\n        /// performs resource-intensive work.\n\n        let listVC = MessagesListVC()\n        let chatVC = ChatVC()\n\n        listVC.startReceiveMessages()\n        chatVC.startReceiveMessages()\n\n        /// ... add view controllers to the navigation stack ...\n    }\n}\n\n\nclass BaseVC: UIViewController, MessageSubscriber {\n\n    func accept(new messages: [Message]) {\n        /// Handles new messages in the base class\n    }\n\n    func accept(removed messages: [Message]) {\n        /// Hanldes removed messages in the base class\n    }\n\n    func startReceiveMessages() {\n\n        /// The singleton can be injected as a dependency. However, from an\n        /// informational perspective, this example calls FriendsChatService\n        /// directly to illustrate the intent of the pattern, which is: \"...to\n        /// provide the global point of access to the instance...\"\n\n        FriendsChatService.shared.add(subscriber: self)\n    }\n}\n\nclass MessagesListVC: BaseVC {\n\n    override func accept(new messages: [Message]) {\n        print(\"MessagesListVC accepted 'new messages'\")\n        /// Handles new messages in the child class\n    }\n\n    override func accept(removed messages: [Message]) {\n        print(\"MessagesListVC accepted 'removed messages'\")\n        /// Handles removed messages in the child class\n    }\n\n    override func startReceiveMessages() {\n        print(\"MessagesListVC starts receive messages\")\n        super.startReceiveMessages()\n    }\n}\n\nclass ChatVC: BaseVC {\n\n    override func accept(new messages: [Message]) {\n        print(\"ChatVC accepted 'new messages'\")\n        /// Handles new messages in the child class\n    }\n\n    override func accept(removed messages: [Message]) {\n        print(\"ChatVC accepted 'removed messages'\")\n        /// Handles removed messages in the child class\n    }\n\n    override func startReceiveMessages() {\n        print(\"ChatVC starts receive messages\")\n        super.startReceiveMessages()\n    }\n}\n\n/// Protocol for call-back events\n\nprotocol MessageSubscriber {\n\n    func accept(new messages: [Message])\n    func accept(removed messages: [Message])\n}\n\n/// Protocol for communication with a message service\n\nprotocol MessageService {\n\n    func add(subscriber: MessageSubscriber)\n}\n\n/// Message domain model\n\nstruct Message {\n\n    let id: Int\n    let text: String\n}\n\n\nclass FriendsChatService: MessageService {\n\n    static let shared = FriendsChatService()\n\n    private var subscribers = [MessageSubscriber]()\n\n    func add(subscriber: MessageSubscriber) {\n\n        /// In this example, fetching starts again by adding a new subscriber\n        subscribers.append(subscriber)\n\n        /// Please note, the first subscriber will receive messages again when\n        /// the second subscriber is added\n        startFetching()\n    }\n\n    func startFetching() {\n\n        /// Set up the network stack, establish a connection...\n        /// ...and retrieve data from a server\n\n        let newMessages = [Message(id: 0, text: \"Text0\"),\n                           Message(id: 5, text: \"Text5\"),\n                           Message(id: 10, text: \"Text10\")]\n\n        let removedMessages = [Message(id: 1, text: \"Text0\")]\n\n        /// Send updated data to subscribers\n        receivedNew(messages: newMessages)\n        receivedRemoved(messages: removedMessages)\n    }\n}\n\nprivate extension FriendsChatService {\n\n    func receivedNew(messages: [Message]) {\n\n        subscribers.forEach { item in\n            item.accept(new: messages)\n        }\n    }\n\n    func receivedRemoved(messages: [Message]) {\n\n        subscribers.forEach { item in\n            item.accept(removed: messages)\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Singleton/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Singleton/RealWorld/Output.txt",
    "content": "MessagesListVC starts receive messages\nMessagesListVC accepted 'new messages'\nMessagesListVC accepted 'removed messages'\n======== At this point, the second subscriber is added ======\nChatVC starts receive messages\nMessagesListVC accepted 'new messages'\nChatVC accepted 'new messages'\nMessagesListVC accepted 'removed messages'\nChatVC accepted 'removed messages'\n"
  },
  {
    "path": "Sources/State/Conceptual/Example.swift",
    "content": "/// EN: State Design Pattern\n///\n/// Intent: Lets an object alter its behavior when its internal state changes.\n/// It appears as if the object changed its class.\n///\n/// RU: Паттерн Состояние\n///\n/// Назначение: Позволяет объектам менять поведение в зависимости от своего\n/// состояния. Извне создаётся впечатление, что изменился класс объекта.\n\nimport XCTest\n\n/// EN: The Context defines the interface of interest to clients. It also\n/// maintains a reference to an instance of a State subclass, which represents\n/// the current state of the Context.\n///\n/// RU: Контекст определяет интерфейс, представляющий интерес для клиентов. Он\n/// также хранит ссылку на экземпляр подкласса Состояния, который отображает\n/// текущее состояние Контекста.\nclass Context {\n\n    /// EN: A reference to the current state of the Context.\n    ///\n    /// RU: Ссылка на текущее состояние Контекста.\n    private var state: State\n\n    init(_ state: State) {\n        self.state = state\n        transitionTo(state: state)\n    }\n\n    /// EN: The Context allows changing the State object at runtime.\n    ///\n    /// RU: Контекст позволяет изменять объект Состояния во время выполнения.\n    func transitionTo(state: State) {\n        print(\"Context: Transition to \" + String(describing: state))\n        self.state = state\n        self.state.update(context: self)\n    }\n\n    /// EN: The Context delegates part of its behavior to the current State\n    /// object.\n    ///\n    /// RU: Контекст делегирует часть своего поведения текущему объекту\n    /// Состояния.\n    func request1() {\n        state.handle1()\n    }\n\n    func request2() {\n        state.handle2()\n    }\n}\n\n/// EN: The base State class declares methods that all Concrete State should\n/// implement and also provides a backreference to the Context object,\n/// associated with the State. This backreference can be used by States to\n/// transition the Context to another State.\n///\n/// RU: Базовый класс Состояния объявляет методы, которые должны реализовать все\n/// Конкретные Состояния, а также предоставляет обратную ссылку на объект\n/// Контекст, связанный с Состоянием. Эта обратная ссылка может использоваться\n/// Состояниями для передачи Контекста другому Состоянию.\nprotocol State: AnyObject {\n\n    func update(context: Context)\n\n    func handle1()\n    func handle2()\n}\n\nclass BaseState: State {\n\n    private(set) weak var context: Context?\n\n    func update(context: Context) {\n        self.context = context\n    }\n\n    func handle1() {}\n    func handle2() {}\n}\n\n/// EN: Concrete States implement various behaviors, associated with a state of\n/// the Context.\n///\n/// RU: Конкретные Состояния реализуют различные модели поведения, связанные с\n/// состоянием Контекста.\nclass ConcreteStateA: BaseState {\n\n    override func handle1() {\n        print(\"ConcreteStateA handles request1.\")\n        print(\"ConcreteStateA wants to change the state of the context.\\n\")\n        context?.transitionTo(state: ConcreteStateB())\n    }\n\n    override func handle2() {\n        print(\"ConcreteStateA handles request2.\\n\")\n    }\n}\n\nclass ConcreteStateB: BaseState {\n\n    override func handle1() {\n        print(\"ConcreteStateB handles request1.\\n\")\n    }\n\n    override func handle2() {\n        print(\"ConcreteStateB handles request2.\")\n        print(\"ConcreteStateB wants to change the state of the context.\\n\")\n        context?.transitionTo(state: ConcreteStateA())\n    }\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass StateConceptual: XCTestCase {\n\n    func test() {\n        let context = Context(ConcreteStateA())\n        context.request1()\n        context.request2()\n    }\n}"
  },
  {
    "path": "Sources/State/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/State/Conceptual/Output.txt",
    "content": "Context: Transition to StateConceptual.ConcreteStateA\nConcreteStateA handles request1.\nConcreteStateA wants to change the state of the context.\n\nContext: Transition to StateConceptual.ConcreteStateB\nConcreteStateB handles request2.\nConcreteStateB wants to change the state of the context.\n\nContext: Transition to StateConceptual.ConcreteStateA\n\n"
  },
  {
    "path": "Sources/State/RealWorld/Example.swift",
    "content": "import XCTest\n\nclass StateRealWorld: XCTestCase {\n\n    func test() {\n\n        print(\"Client: I'm starting working with a location tracker\")\n        let tracker = LocationTracker()\n\n        print()\n        tracker.startTracking()\n\n        print()\n        tracker.pauseTracking(for: 2)\n\n        print()\n        tracker.makeCheckIn()\n\n        print()\n        tracker.findMyChildren()\n\n        print()\n        tracker.stopTracking()\n    }\n}\n\nclass LocationTracker {\n\n    /// Location tracking is enabled by default\n    private lazy var trackingState: TrackingState = EnabledTrackingState(tracker: self)\n\n    func startTracking() {\n        trackingState.startTracking()\n    }\n\n    func stopTracking() {\n        trackingState.stopTracking()\n    }\n\n    func pauseTracking(for time: TimeInterval) {\n        trackingState.pauseTracking(for: time)\n    }\n\n    func makeCheckIn() {\n        trackingState.makeCheckIn()\n    }\n\n    func findMyChildren() {\n        trackingState.findMyChildren()\n    }\n\n    func update(state: TrackingState) {\n        trackingState = state\n    }\n}\n\nprotocol TrackingState {\n\n    func startTracking()\n    func stopTracking()\n    func pauseTracking(for time: TimeInterval)\n\n    func makeCheckIn()\n    func findMyChildren()\n}\n\nclass EnabledTrackingState: TrackingState {\n\n    private weak var tracker: LocationTracker?\n\n    init(tracker: LocationTracker?) {\n        self.tracker = tracker\n    }\n\n    func startTracking() {\n        print(\"EnabledTrackingState: startTracking is invoked\")\n        print(\"EnabledTrackingState: tracking location....1\")\n        print(\"EnabledTrackingState: tracking location....2\")\n        print(\"EnabledTrackingState: tracking location....3\")\n    }\n\n    func stopTracking() {\n        print(\"EnabledTrackingState: Received 'stop tracking'\")\n        print(\"EnabledTrackingState: Changing state to 'disabled'...\")\n        tracker?.update(state: DisabledTrackingState(tracker: tracker))\n        tracker?.stopTracking()\n    }\n\n    func pauseTracking(for time: TimeInterval) {\n        print(\"EnabledTrackingState: Received 'pause tracking' for \\(time) seconds\")\n        print(\"EnabledTrackingState: Changing state to 'disabled'...\")\n        tracker?.update(state: DisabledTrackingState(tracker: tracker))\n        tracker?.pauseTracking(for: time)\n    }\n\n    func makeCheckIn() {\n        print(\"EnabledTrackingState: performing check-in at the current location\")\n    }\n\n    func findMyChildren() {\n        print(\"EnabledTrackingState: searching for children...\")\n    }\n}\n\nclass DisabledTrackingState: TrackingState {\n\n    private weak var tracker: LocationTracker?\n\n    init(tracker: LocationTracker?) {\n        self.tracker = tracker\n    }\n\n    func startTracking() {\n        print(\"DisabledTrackingState: Received 'start tracking'\")\n        print(\"DisabledTrackingState: Changing state to 'enabled'...\")\n        tracker?.update(state: EnabledTrackingState(tracker: tracker))\n    }\n\n    func pauseTracking(for time: TimeInterval) {\n        print(\"DisabledTrackingState: Pause tracking for \\(time) seconds\")\n\n        for i in 0...Int(time) {\n            print(\"DisabledTrackingState: pause...\\(i)\")\n        }\n\n        print(\"DisabledTrackingState: Time is over\")\n        print(\"DisabledTrackingState: Returing to 'enabled state'...\\n\")\n        self.tracker?.update(state: EnabledTrackingState(tracker: self.tracker))\n        self.tracker?.startTracking()\n    }\n\n    func stopTracking() {\n        print(\"DisabledTrackingState: Received 'stop tracking'\")\n        print(\"DisabledTrackingState: Do nothing...\")\n    }\n\n    func makeCheckIn() {\n        print(\"DisabledTrackingState: Received 'make check-in'\")\n        print(\"DisabledTrackingState: Changing state to 'enabled'...\")\n        tracker?.update(state: EnabledTrackingState(tracker: tracker))\n        tracker?.makeCheckIn()\n    }\n\n    func findMyChildren() {\n        print(\"DisabledTrackingState: Received 'find my children'\")\n        print(\"DisabledTrackingState: Changing state to 'enabled'...\")\n        tracker?.update(state: EnabledTrackingState(tracker: tracker))\n        tracker?.findMyChildren()\n    }\n}\n"
  },
  {
    "path": "Sources/State/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/State/RealWorld/Output.txt",
    "content": "Client: I'm starting working with a location tracker\n\nEnabledTrackingState: startTracking is invoked\nEnabledTrackingState: tracking location....1\nEnabledTrackingState: tracking location....2\nEnabledTrackingState: tracking location....3\n\nEnabledTrackingState: Received 'pause tracking' for 2.0 seconds\nEnabledTrackingState: Changing state to 'disabled'...\nDisabledTrackingState: Pause tracking for 2.0 seconds\nDisabledTrackingState: pause...0\nDisabledTrackingState: pause...1\nDisabledTrackingState: pause...2\nDisabledTrackingState: Time is over\nDisabledTrackingState: Returing to 'enabled state'...\n\nEnabledTrackingState: startTracking is invoked\nEnabledTrackingState: tracking location....1\nEnabledTrackingState: tracking location....2\nEnabledTrackingState: tracking location....3\n\nEnabledTrackingState: performing check-in at the current location\n\nEnabledTrackingState: searching for children...\n\nEnabledTrackingState: Received 'stop tracking'\nEnabledTrackingState: Changing state to 'disabled'...\nDisabledTrackingState: Received 'stop tracking'\nDisabledTrackingState: Do nothing...\n"
  },
  {
    "path": "Sources/Strategy/Conceptual/Example.swift",
    "content": "/// EN: Strategy Design Pattern\n///\n/// Intent: Lets you define a family of algorithms, put each of them into a\n/// separate class, and make their objects interchangeable.\n///\n/// RU: Паттерн Стратегия\n///\n/// Назначение: Определяет семейство схожих алгоритмов и помещает каждый из них\n/// в собственный класс, после чего алгоритмы можно взаимозаменять прямо во\n/// время исполнения программы.\n\nimport XCTest\n\n/// EN: The Context defines the interface of interest to clients.\n///\n/// RU: Контекст определяет интерфейс, представляющий интерес для клиентов.\nclass Context {\n\n    /// EN: The Context maintains a reference to one of the Strategy objects.\n    /// The Context does not know the concrete class of a strategy. It should\n    /// work with all strategies via the Strategy interface.\n    ///\n    /// RU: Контекст хранит ссылку на один из объектов Стратегии. Контекст не\n    /// знает конкретного класса стратегии. Он должен работать со всеми\n    /// стратегиями через интерфейс Стратегии.\n    private var strategy: Strategy\n\n    /// EN: Usually, the Context accepts a strategy through the constructor, but\n    /// also provides a setter to change it at runtime.\n    ///\n    /// RU: Обычно Контекст принимает стратегию через конструктор, а также\n    /// предоставляет сеттер для её изменения во время выполнения.\n    init(strategy: Strategy) {\n        self.strategy = strategy\n    }\n\n    /// EN: Usually, the Context allows replacing a Strategy object at runtime.\n    ///\n    /// RU: Обычно Контекст позволяет заменить объект Стратегии во время\n    /// выполнения.\n    func update(strategy: Strategy) {\n        self.strategy = strategy\n    }\n\n    /// EN: The Context delegates some work to the Strategy object instead of\n    /// implementing multiple versions of the algorithm on its own.\n    ///\n    /// RU: Вместо того, чтобы самостоятельно реализовывать множественные версии\n    /// алгоритма, Контекст делегирует некоторую работу объекту Стратегии.\n    func doSomeBusinessLogic() {\n        print(\"Context: Sorting data using the strategy (not sure how it'll do it)\\n\")\n\n        let result = strategy.doAlgorithm([\"a\", \"b\", \"c\", \"d\", \"e\"])\n        print(result.joined(separator: \",\"))\n    }\n}\n\n/// EN: The Strategy interface declares operations common to all supported\n/// versions of some algorithm.\n///\n/// The Context uses this interface to call the algorithm defined by Concrete\n/// Strategies.\n///\n/// RU: Интерфейс Стратегии объявляет операции, общие для всех поддерживаемых\n/// версий некоторого алгоритма.\n///\n/// Контекст использует этот интерфейс для вызова алгоритма, определённого\n/// Конкретными Стратегиями.\nprotocol Strategy {\n\n    func doAlgorithm<T: Comparable>(_ data: [T]) -> [T]\n}\n\n/// EN: Concrete Strategies implement the algorithm while following the base\n/// Strategy interface. The interface makes them interchangeable in the Context.\n///\n/// RU: Конкретные Стратегии реализуют алгоритм, следуя базовому интерфейсу\n/// Стратегии. Этот интерфейс делает их взаимозаменяемыми в Контексте.\nclass ConcreteStrategyA: Strategy {\n\n    func doAlgorithm<T: Comparable>(_ data: [T]) -> [T] {\n        return data.sorted()\n    }\n}\n\nclass ConcreteStrategyB: Strategy {\n\n    func doAlgorithm<T: Comparable>(_ data: [T]) -> [T] {\n        return data.sorted(by: >)\n    }\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass StrategyConceptual: XCTestCase {\n\n    func test() {\n\n        /// EN: The client code picks a concrete strategy and passes it to the\n        /// context. The client should be aware of the differences between\n        /// strategies in order to make the right choice.\n        ///\n        /// RU: Клиентский код выбирает конкретную стратегию и передаёт её в\n        /// контекст. Клиент должен знать о различиях между стратегиями, чтобы\n        /// сделать правильный выбор.\n\n        let context = Context(strategy: ConcreteStrategyA())\n        print(\"Client: Strategy is set to normal sorting.\\n\")\n        context.doSomeBusinessLogic()\n\n        print(\"\\nClient: Strategy is set to reverse sorting.\\n\")\n        context.update(strategy: ConcreteStrategyB())\n        context.doSomeBusinessLogic()\n    }\n}"
  },
  {
    "path": "Sources/Strategy/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Strategy/Conceptual/Output.txt",
    "content": "Client: Strategy is set to normal sorting.\n\nContext: Sorting data using the strategy (not sure how it'll do it)\n\na,b,c,d,e\n\nClient: Strategy is set to reverse sorting.\n\nContext: Sorting data using the strategy (not sure how it'll do it)\n\ne,d,c,b,a\n\n"
  },
  {
    "path": "Sources/Strategy/RealWorld/Example.swift",
    "content": "import XCTest\n\nclass StrategyRealWorld: XCTestCase {\n\n    /// This example shows a simple implementation of a list controller that is\n    /// able to display models from different data sources:\n    ///\n    /// (MemoryStorage, CoreDataStorage, RealmStorage)\n\n    func test() {\n\n        let controller = ListController()\n\n        let memoryStorage = MemoryStorage<User>()\n        memoryStorage.add(usersFromNetwork())\n\n        clientCode(use: controller, with: memoryStorage)\n\n        clientCode(use: controller, with: CoreDataStorage())\n\n        clientCode(use: controller, with: RealmStorage())\n    }\n\n    func clientCode(use controller: ListController, with dataSource: DataSource) {\n\n        controller.update(dataSource: dataSource)\n        controller.displayModels()\n    }\n\n    private func usersFromNetwork() -> [User] {\n        let firstUser = User(id: 1, username: \"username1\")\n        let secondUser = User(id: 2, username: \"username2\")\n        return [firstUser, secondUser]\n    }\n}\n\nclass ListController {\n\n    private var dataSource: DataSource?\n\n    func update(dataSource: DataSource) {\n        /// ... resest current states ...\n        self.dataSource = dataSource\n    }\n\n    func displayModels() {\n\n        guard let dataSource = dataSource else { return }\n        let models = dataSource.loadModels() as [User]\n\n        /// Bind models to cells of a list view...\n        print(\"\\nListController: Displaying models...\")\n        models.forEach({ print($0) })\n    }\n}\n\nprotocol DataSource {\n\n    func loadModels<T: DomainModel>() -> [T]\n}\n\nclass MemoryStorage<Model>: DataSource {\n\n    private lazy var items = [Model]()\n\n    func add(_ items: [Model]) {\n        self.items.append(contentsOf: items)\n    }\n\n    func loadModels<T: DomainModel>() -> [T] {\n        guard T.self == User.self else { return [] }\n        return items as! [T]\n    }\n}\n\nclass CoreDataStorage: DataSource {\n\n    func loadModels<T: DomainModel>() -> [T] {\n        guard T.self == User.self else { return [] }\n\n        let firstUser = User(id: 3, username: \"username3\")\n        let secondUser = User(id: 4, username: \"username4\")\n\n        return [firstUser, secondUser] as! [T]\n    }\n}\n\nclass RealmStorage: DataSource {\n\n    func loadModels<T: DomainModel>() -> [T] {\n        guard T.self == User.self else { return [] }\n\n        let firstUser = User(id: 5, username: \"username5\")\n        let secondUser = User(id: 6, username: \"username6\")\n\n        return [firstUser, secondUser] as! [T]\n    }\n}\n\nprotocol DomainModel {\n\n    var id: Int { get }\n}\n\nstruct User: DomainModel {\n\n    var id: Int\n    var username: String\n}\n"
  },
  {
    "path": "Sources/Strategy/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Strategy/RealWorld/Output.txt",
    "content": "ListController: Displaying models...\nUser(id: 1, username: \"username1\")\nUser(id: 2, username: \"username2\")\n\nListController: Displaying models...\nUser(id: 3, username: \"username3\")\nUser(id: 4, username: \"username4\")\n\nListController: Displaying models...\nUser(id: 5, username: \"username5\")\nUser(id: 6, username: \"username6\")\n"
  },
  {
    "path": "Sources/TemplateMethod/Conceptual/Example.swift",
    "content": "/// EN: Template Method Design Pattern\n///\n/// Intent: Defines the skeleton of an algorithm in the superclass but lets\n/// subclasses override specific steps of the algorithm without changing its\n/// structure.\n///\n/// RU: Паттерн Шаблонный метод\n///\n/// Назначение: Определяет скелет алгоритма, перекладывая ответственность за\n/// некоторые его шаги на подклассы. Паттерн позволяет подклассам переопределять\n/// шаги алгоритма, не меняя его общей структуры.\n\nimport XCTest\n\n\n/// EN: The Abstract Protocol and its extension defines a template method that\n/// contains a skeleton of some algorithm, composed of calls to (usually)\n/// abstract primitive operations.\n///\n/// Concrete subclasses should implement these operations, but leave the\n/// template method itself intact.\n///\n/// RU: Абстрактный Протокол и его расширение определяет шаблонный метод,\n/// содержащий скелет некоторого алгоритма, состоящего из вызовов (обычно)\n/// абстрактных примитивных операций.\n///\n/// Конкретные подклассы должны реализовать эти операции, но оставить сам\n/// шаблонный метод без изменений.\nprotocol AbstractProtocol {\n\n    /// EN: The template method defines the skeleton of an algorithm.\n    ///\n    /// RU: Шаблонный метод определяет скелет алгоритма.\n    func templateMethod()\n\n    /// EN: These operations already have implementations.\n    ///\n    /// RU: Эти операции уже имеют реализации.\n    func baseOperation1()\n\n    func baseOperation2()\n\n    func baseOperation3()\n\n    /// EN: These operations have to be implemented in subclasses.\n    ///\n    /// RU: А эти операции должны быть реализованы в подклассах.\n    func requiredOperations1()\n    func requiredOperation2()\n\n    /// EN: These are \"hooks.\" Subclasses may override them, but it's not\n    /// mandatory since the hooks already have default (but empty)\n    /// implementation. Hooks provide additional extension points in some\n    /// crucial places of the algorithm.\n    ///\n    /// RU: Это «хуки». Подклассы могут переопределять их, но это не\n    /// обязательно, поскольку у хуков уже есть стандартная (но пустая)\n    /// реализация. Хуки предоставляют дополнительные точки расширения в\n    /// некоторых критических местах алгоритма.\n    func hook1()\n    func hook2()\n}\n\nextension AbstractProtocol {\n\n    func templateMethod() {\n        baseOperation1()\n        requiredOperations1()\n        baseOperation2()\n        hook1()\n        requiredOperation2()\n        baseOperation3()\n        hook2()\n    }\n\n    /// EN: These operations already have implementations.\n    ///\n    /// RU: Эти операции уже имеют реализации.\n    func baseOperation1() {\n        print(\"AbstractProtocol says: I am doing the bulk of the work\\n\")\n    }\n\n    func baseOperation2() {\n        print(\"AbstractProtocol says: But I let subclasses override some operations\\n\")\n    }\n\n    func baseOperation3() {\n        print(\"AbstractProtocol says: But I am doing the bulk of the work anyway\\n\")\n    }\n\n    func hook1() {}\n    func hook2() {}\n}\n\n/// EN: Concrete classes have to implement all abstract operations of the base\n/// class. They can also override some operations with a default implementation.\n///\n/// RU: Конкретные классы должны реализовать все абстрактные операции базового\n/// класса. Они также могут переопределить некоторые операции с реализацией по\n/// умолчанию.\nclass ConcreteClass1: AbstractProtocol {\n\n    func requiredOperations1() {\n        print(\"ConcreteClass1 says: Implemented Operation1\\n\")\n    }\n\n    func requiredOperation2() {\n        print(\"ConcreteClass1 says: Implemented Operation2\\n\")\n    }\n\n    func hook2() {\n        print(\"ConcreteClass1 says: Overridden Hook2\\n\")\n    }\n}\n\n/// EN: Usually, concrete classes override only a fraction of base class'\n/// operations.\n///\n/// RU: Обычно конкретные классы переопределяют только часть операций базового\n/// класса.\nclass ConcreteClass2: AbstractProtocol {\n\n    func requiredOperations1() {\n        print(\"ConcreteClass2 says: Implemented Operation1\\n\")\n    }\n\n    func requiredOperation2() {\n        print(\"ConcreteClass2 says: Implemented Operation2\\n\")\n    }\n\n    func hook1() {\n        print(\"ConcreteClass2 says: Overridden Hook1\\n\")\n    }\n}\n\n/// EN: The client code calls the template method to execute the algorithm.\n/// Client code does not have to know the concrete class of an object it works\n/// with, as long as it works with objects through the interface of their base\n/// class.\n///\n/// RU: Клиентский код вызывает шаблонный метод для выполнения алгоритма.\n/// Клиентский код не должен знать конкретный класс объекта, с которым работает,\n/// при условии, что он работает с объектами через интерфейс их базового класса.\nclass Client {\n    // ...\n    static func clientCode(use object: AbstractProtocol) {\n        // ...\n        object.templateMethod()\n        // ...\n    }\n    // ...\n}\n\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass TemplateMethodConceptual: XCTestCase {\n\n    func test() {\n\n        print(\"Same client code can work with different subclasses:\\n\")\n        Client.clientCode(use: ConcreteClass1())\n\n        print(\"\\nSame client code can work with different subclasses:\\n\")\n        Client.clientCode(use: ConcreteClass2())\n    }\n}\n"
  },
  {
    "path": "Sources/TemplateMethod/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/TemplateMethod/Conceptual/Output.txt",
    "content": "Same client code can work with different subclasses:\n\nAbstractProtocol says: I am doing the bulk of the work\n\nConcreteClass1 says: Implemented Operation1\n\nAbstractProtocol says: But I let subclasses override some operations\n\nConcreteClass1 says: Implemented Operation2\n\nAbstractProtocol says: But I am doing the bulk of the work anyway\n\nConcreteClass1 says: Overridden Hook2\n\n\nSame client code can work with different subclasses:\n\nAbstractProtocol says: I am doing the bulk of the work\n\nConcreteClass2 says: Implemented Operation1\n\nAbstractProtocol says: But I let subclasses override some operations\n\nConcreteClass2 says: Overridden Hook1\n\nConcreteClass2 says: Implemented Operation2\n\nAbstractProtocol says: But I am doing the bulk of the work anyway\n"
  },
  {
    "path": "Sources/TemplateMethod/RealWorld/Example.swift",
    "content": "import XCTest\nimport AVFoundation\nimport CoreLocation\nimport Photos\n\nclass TemplateMethodRealWorld: XCTestCase {\n\n    /// A good example of Template Method is a life cycle of UIViewController\n\n    func testTemplateMethodReal() {\n\n        let accessors = [CameraAccessor(), MicrophoneAccessor(), PhotoLibraryAccessor()]\n\n        accessors.forEach { item in\n            item.requestAccessIfNeeded({ status in\n                let message = status ? \"You have access to \" : \"You do not have access to \"\n                print(message + item.description + \"\\n\")\n            })\n        }\n    }\n}\n\nclass PermissionAccessor: CustomStringConvertible {\n\n    typealias Completion = (Bool) -> ()\n\n    func requestAccessIfNeeded(_ completion: @escaping Completion) {\n\n        guard !hasAccess() else { completion(true); return }\n\n        willReceiveAccess()\n\n        requestAccess { status in\n            status ? self.didReceiveAccess() : self.didRejectAccess()\n\n            completion(status)\n        }\n    }\n\n    func requestAccess(_ completion: @escaping Completion) {\n        fatalError(\"Should be overridden\")\n    }\n\n    func hasAccess() -> Bool {\n        fatalError(\"Should be overridden\")\n    }\n\n    var description: String { return \"PermissionAccessor\" }\n\n    /// Hooks\n    func willReceiveAccess() {}\n\n    func didReceiveAccess() {}\n\n    func didRejectAccess() {}\n}\n\nclass CameraAccessor: PermissionAccessor {\n\n    override func requestAccess(_ completion: @escaping Completion) {\n        AVCaptureDevice.requestAccess(for: .video) { status in\n            return completion(status)\n        }\n    }\n\n    override func hasAccess() -> Bool {\n        return AVCaptureDevice.authorizationStatus(for: .video) == .authorized\n    }\n\n    override var description: String { return \"Camera\" }\n}\n\nclass MicrophoneAccessor: PermissionAccessor {\n\n    override func requestAccess(_ completion: @escaping Completion) {\n        AVAudioSession.sharedInstance().requestRecordPermission { status in\n            completion(status)\n        }\n    }\n\n    override func hasAccess() -> Bool {\n        return AVAudioSession.sharedInstance().recordPermission == .granted\n    }\n\n    override var description: String { return \"Microphone\" }\n}\n\nclass PhotoLibraryAccessor: PermissionAccessor {\n\n    override func requestAccess(_ completion: @escaping Completion) {\n        PHPhotoLibrary.requestAuthorization { status in\n            completion(status == .authorized)\n        }\n    }\n\n    override func hasAccess() -> Bool {\n        return PHPhotoLibrary.authorizationStatus() == .authorized\n    }\n\n    override var description: String { return \"PhotoLibrary\" }\n\n    override func didReceiveAccess() {\n        /// We want to track how many people give access to the PhotoLibrary.\n        print(\"PhotoLibrary Accessor: Receive access. Updating analytics...\")\n    }\n\n    override func didRejectAccess() {\n        /// ... and also we want to track how many people rejected access.\n        print(\"PhotoLibrary Accessor: Rejected with access. Updating analytics...\")\n    }\n}\n"
  },
  {
    "path": "Sources/TemplateMethod/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/TemplateMethod/RealWorld/Output.txt",
    "content": "You have access to Camera\n\nYou have access to Microphone\n\nPhotoLibrary Accessor: Rejected with access. Updating analytics...\nYou do not have access to PhotoLibrary\n"
  },
  {
    "path": "Sources/Visitor/Conceptual/Example.swift",
    "content": "/// EN: Visitor Design Pattern\n///\n/// Intent: Lets you separate algorithms from the objects on which they operate.\n///\n/// RU: Паттерн Посетитель\n///\n/// Назначение: Позволяет создавать новые операции, не меняя классы объектов,\n/// над которыми эти операции могут выполняться.\n\nimport XCTest\n\n/// EN: The Component interface declares an `accept` method that should take the\n/// base visitor interface as an argument.\n///\n/// RU: Интерфейс Компонента объявляет метод принятия, который в качестве\n/// аргумента может получать любой объект, реализующий интерфейс посетителя.\nprotocol Component {\n\n    func accept(_ visitor: Visitor)\n}\n\n/// EN: Each Concrete Component must implement the `accept` method in such a way\n/// that it calls the visitor's method corresponding to the component's class.\n///\n/// RU: Каждый Конкретный Компонент должен реализовать метод принятия таким\n/// образом, чтобы он вызывал метод посетителя, соотвествующий классу\n/// компонента.\nclass ConcreteComponentA: Component {\n\n    /// EN: Note that we're calling `visitConcreteComponentA`, which matches the\n    /// current class name. This way we let the visitor know the class of the\n    /// component it works with.\n    ///\n    /// RU: Обратите внимание, мы вызываем visitConcreteComponentA, что\n    /// соответствует названию текущего класса. Таким образом мы позволяем\n    /// посетителю узнать, с каким классом компонента он работает.\n    func accept(_ visitor: Visitor) {\n        visitor.visitConcreteComponentA(element: self)\n    }\n\n    /// EN: Concrete Components may have special methods that don't exist in\n    /// their base class or interface. The Visitor is still able to use these\n    /// methods since it's aware of the component's concrete class.\n    ///\n    /// RU: Конкретные Компоненты могут иметь особые методы, не объявленные в их\n    /// базовом классе или интерфейсе. Посетитель всё же может использовать эти\n    /// методы, поскольку он знает о конкретном классе компонента.\n    func exclusiveMethodOfConcreteComponentA() -> String {\n        return \"A\"\n    }\n}\n\nclass ConcreteComponentB: Component {\n\n    /// EN: Same here: visitConcreteComponentB => ConcreteComponentB\n    ///\n    /// RU: То же самое здесь: visitConcreteComponentB => ConcreteComponentB\n    func accept(_ visitor: Visitor) {\n        visitor.visitConcreteComponentB(element: self)\n    }\n\n    func specialMethodOfConcreteComponentB() -> String {\n        return \"B\"\n    }\n}\n\n/// EN: The Visitor Interface declares a set of visiting methods that correspond\n/// to component classes. The signature of a visiting method allows the visitor\n/// to identify the exact class of the component that it's dealing with.\n///\n/// RU: Интерфейс Посетителя объявляет набор методов посещения, соответствующих\n/// классам компонентов. Сигнатура метода посещения позволяет посетителю\n/// определить конкретный класс компонента, с которым он имеет дело.\nprotocol Visitor {\n\n    func visitConcreteComponentA(element: ConcreteComponentA)\n    func visitConcreteComponentB(element: ConcreteComponentB)\n}\n\n/// EN: Concrete Visitors implement several versions of the same algorithm,\n/// which can work with all concrete component classes.\n///\n/// You can experience the biggest benefit of the Visitor pattern when using it\n/// with a complex object structure, such as a Composite tree. In this case, it\n/// might be helpful to store some intermediate state of the algorithm while\n/// executing visitor's methods over various objects of the structure.\n///\n/// RU: Конкретные Посетители реализуют несколько версий одного и того же\n/// алгоритма, которые могут работать со всеми классами конкретных компонентов.\n///\n/// Максимальную выгоду от паттерна Посетитель вы почувствуете, используя его со\n/// сложной структурой объектов, такой как дерево Компоновщика. В этом случае\n/// было бы полезно хранить некоторое промежуточное состояние алгоритма при\n/// выполнении методов посетителя над различными объектами структуры.\nclass ConcreteVisitor1: Visitor {\n\n    func visitConcreteComponentA(element: ConcreteComponentA) {\n        print(element.exclusiveMethodOfConcreteComponentA() + \" + ConcreteVisitor1\\n\")\n    }\n\n    func visitConcreteComponentB(element: ConcreteComponentB) {\n        print(element.specialMethodOfConcreteComponentB() + \" + ConcreteVisitor1\\n\")\n    }\n}\n\nclass ConcreteVisitor2: Visitor {\n\n    func visitConcreteComponentA(element: ConcreteComponentA) {\n        print(element.exclusiveMethodOfConcreteComponentA() + \" + ConcreteVisitor2\\n\")\n    }\n\n    func visitConcreteComponentB(element: ConcreteComponentB) {\n        print(element.specialMethodOfConcreteComponentB() + \" + ConcreteVisitor2\\n\")\n    }\n}\n\n/// EN: The client code can run visitor operations over any set of elements\n/// without figuring out their concrete classes. The accept operation directs a\n/// call to the appropriate operation in the visitor object.\n///\n/// RU: Клиентский код может выполнять операции посетителя над любым набором\n/// элементов, не выясняя их конкретных классов. Операция принятия направляет\n/// вызов к соответствующей операции в объекте посетителя.\nclass Client {\n    // ...\n    static func clientCode(components: [Component], visitor: Visitor) {\n        // ...\n        components.forEach({ $0.accept(visitor) })\n        // ...\n    }\n    // ...\n}\n\n/// EN: Let's see how it all works together.\n///\n/// RU: Давайте посмотрим как всё это будет работать.\nclass VisitorConceptual: XCTestCase {\n\n    func test() {\n        let components: [Component] = [ConcreteComponentA(), ConcreteComponentB()]\n\n        print(\"The client code works with all visitors via the base Visitor interface:\\n\")\n        let visitor1 = ConcreteVisitor1()\n        Client.clientCode(components: components, visitor: visitor1)\n\n        print(\"\\nIt allows the same client code to work with different types of visitors:\\n\")\n        let visitor2 = ConcreteVisitor2()\n        Client.clientCode(components: components, visitor: visitor2)\n    }\n}"
  },
  {
    "path": "Sources/Visitor/Conceptual/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Visitor/Conceptual/Output.txt",
    "content": "The client code works with all visitors via the base Visitor interface:\n\nA + ConcreteVisitor1\n\nB + ConcreteVisitor1\n\n\nIt allows the same client code to work with different types of visitors:\n\nA + ConcreteVisitor2\n\nB + ConcreteVisitor2\n"
  },
  {
    "path": "Sources/Visitor/RealWorld/Example.swift",
    "content": "import Foundation\nimport XCTest\n\n\nprotocol Notification: CustomStringConvertible {\n\n    func accept(visitor: NotificationPolicy) -> Bool\n}\n\nstruct Email {\n\n    let emailOfSender: String\n\n    var description: String { return \"Email\" }\n}\n\nstruct SMS {\n\n    let phoneNumberOfSender: String\n\n    var description: String { return \"SMS\" }\n}\n\nstruct Push {\n\n    let usernameOfSender: String\n\n    var description: String { return \"Push\" }\n}\n\nextension Email: Notification {\n\n    func accept(visitor: NotificationPolicy) -> Bool {\n        return visitor.isTurnedOn(for: self)\n    }\n}\n\nextension SMS: Notification {\n\n    func accept(visitor: NotificationPolicy) -> Bool {\n        return visitor.isTurnedOn(for: self)\n    }\n}\n\nextension Push: Notification {\n\n    func accept(visitor: NotificationPolicy) -> Bool {\n        return visitor.isTurnedOn(for: self)\n    }\n}\n\n\nprotocol NotificationPolicy: CustomStringConvertible {\n\n    func isTurnedOn(for email: Email) -> Bool\n\n    func isTurnedOn(for sms: SMS) -> Bool\n\n    func isTurnedOn(for push: Push) -> Bool\n}\n\nclass NightPolicyVisitor: NotificationPolicy {\n\n    func isTurnedOn(for email: Email) -> Bool {\n        return false\n    }\n\n    func isTurnedOn(for sms: SMS) -> Bool {\n        return true\n    }\n\n    func isTurnedOn(for push: Push) -> Bool {\n        return false\n    }\n\n    var description: String { return \"Night Policy Visitor\" }\n}\n\nclass DefaultPolicyVisitor: NotificationPolicy {\n\n    func isTurnedOn(for email: Email) -> Bool {\n        return true\n    }\n\n    func isTurnedOn(for sms: SMS) -> Bool {\n        return true\n    }\n\n    func isTurnedOn(for push: Push) -> Bool {\n        return true\n    }\n\n    var description: String { return \"Default Policy Visitor\" }\n}\n\nclass BlackListVisitor: NotificationPolicy {\n\n    private var bannedEmails = [String]()\n    private var bannedPhones = [String]()\n    private var bannedUsernames = [String]()\n\n    init(emails: [String], phones: [String], usernames: [String]) {\n        self.bannedEmails = emails\n        self.bannedPhones = phones\n        self.bannedUsernames = usernames\n    }\n\n    func isTurnedOn(for email: Email) -> Bool {\n        return bannedEmails.contains(email.emailOfSender)\n    }\n\n    func isTurnedOn(for sms: SMS) -> Bool {\n        return bannedPhones.contains(sms.phoneNumberOfSender)\n    }\n\n    func isTurnedOn(for push: Push) -> Bool {\n        return bannedUsernames.contains(push.usernameOfSender)\n    }\n\n    var description: String { return \"Black List Visitor\" }\n}\n\n\n\nclass VisitorRealWorld: XCTestCase {\n\n    func testVisitorRealWorld() {\n\n        let email = Email(emailOfSender: \"some@email.com\")\n        let sms = SMS(phoneNumberOfSender: \"+3806700000\")\n        let push = Push(usernameOfSender: \"Spammer\")\n\n        let notifications: [Notification] = [email, sms, push]\n\n        clientCode(handle: notifications, with: DefaultPolicyVisitor())\n\n        clientCode(handle: notifications, with: NightPolicyVisitor())\n    }\n}\n\nextension VisitorRealWorld {\n\n    /// Client code traverses notifications with visitors and checks whether a\n    /// notification is in a blacklist and should be shown in accordance with a\n    /// current SilencePolicy\n\n    func clientCode(handle notifications: [Notification], with policy: NotificationPolicy) {\n\n        let blackList = createBlackList()\n\n        print(\"\\nClient: Using \\(policy.description) and \\(blackList.description)\")\n\n        notifications.forEach { item in\n\n            guard !item.accept(visitor: blackList) else {\n                print(\"\\tWARNING: \" + item.description + \" is in a black list\")\n                return\n            }\n\n            if item.accept(visitor: policy) {\n                print(\"\\t\" + item.description + \" notification will be shown\")\n            } else {\n                print(\"\\t\" + item.description + \" notification will be silenced\")\n            }\n        }\n    }\n\n    private func createBlackList() -> BlackListVisitor {\n        return BlackListVisitor(emails: [\"banned@email.com\"],\n                                phones: [\"000000000\", \"1234325232\"],\n                                usernames: [\"Spammer\"])\n    }\n}\n"
  },
  {
    "path": "Sources/Visitor/RealWorld/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/Visitor/RealWorld/Output.txt",
    "content": "Client: Using Default Policy Visitor and Black List Visitor\n    Email notification will be shown\n    SMS notification will be shown\n    WARNING: Push is in a black list\n\nClient: Using Night Policy Visitor and Black List Visitor\n    Email notification will be silenced\n    SMS notification will be shown\n    WARNING: Push is in a black list\n"
  }
]