{
  "name": "Centrixlink-iOS",
  "version": "2.5.3",
  "summary": "Centrixlink's iOS SDK'",
  "description": "An SDK for video ad based monetization with the Centrixlink Network",
  "homepage": "http://www.Centrixlink.com/",
  "license": {
    "type": "Commercial",
    "text": "   \tCentrixlink SDK License and Publisher Terms\n The Centrixlink SDK is made available by Centrixlink, Inc. (\"Centrixlink\"). \n By downloading or using the Centrixlink SDK, you and any company, entity, or organization on behalf of which you are accepting these Centrixlink SDK License and Publisher Terms (this \"Agreement\") hereby agree to be bound by all terms and conditions of this Agreement. If you do not agree to all terms and conditions of this Agreement, do not download or use the Centrixlink SDK. \n If you are downloading or using the Centrixlink SDK on behalf of a company, entity, or organization, then you represent and warrant that you are an authorized representative of such company, entity, or organization with the authority to bind such company, entity, or organization to this Agreement; and agree to be bound by this Agreement on behalf of such company, entity, or organization. You and, if applicable, such company, entity, or organization may be referred to as the \"Developer\". \n Definitions \n \"Developer Apps\" means the mobile applications owned and/or controlled by Developer for which Developer wishes to use the Centrixlink SDK. \n \"Centrixlink Platform\" means Centrixlink’s hosted video advertising system, which supports video advertisement insertion within mobile applications, and related advertisement reporting tools.\n\"Centrixlink SDK\" means the software development kit and any other software that may be provided by Centrixlink to Developer with the software development kit (including any updates to the foregoing).\nCentrixlink SDK License. During the term of this Agreement, Centrixlink hereby grants Developer a worldwide, non-transferable (except for a permitted assignment of this Agreement), non-exclusive license to (a) use the Centrixlink SDK internally for the sole purpose integrating the Centrixlink SDK with Developer Apps, (b) use, reproduce and distribute certain portions of the Centrixlink SDK solely as required for Developer’s distribution of Developer Apps, solely in the manner enabled by Centrixlink and in accordance with any applicable documentation provided by Centrixlink, and provided that any such distribution to an end user is subject to terms at least as protective of the Centrixlink SDK as those set forth herein; (c) use the Centrixlink SDK and Centrixlink Platform to have video advertisements inserted within Developer Apps pursuant to this Agreement and any insertion order entered into between the parties, in the manner enabled by Centrixlink and in accordance with any applicable documentation provided by Centrixlink; and (d) to internally use any provided documentation for the sole purpose of exercising the foregoing licenses.\nLicense Restrictions. Developer has no rights or licenses with respect to the Centrixlink SDK or any documentation (collectively, the \"Centrixlink Materials\") except as expressly provided in this Agreement. Without limiting the generality of the foregoing, except as expressly provided in this Agreement, Developer may not (a) copy, distribute, rent, lease, lend, sublicense, transfer or make the Centrixlink Materials available to any third party or use the Centrixlink Materials on a service bureau basis, (b) decompile, reverse engineer, or disassemble the Centrixlink Materials, (c) create derivative works based on the Centrixlink Materials; or (d) modify, remove, or obscure any copyright, trademark, patent or other notices or legends that appear on the Centrixlink Materials or during the use and operation thereof.\nInsertion of Advertising. Centrixlink and Developer agree that any insertion order agreed to by the parties for the serving and insertion of advertisements from the Centrixlink Platform to or through the Developer Apps shall be subject to the terms and conditions of Exhibit A.\nOwnership \n\nCentrixlink Rights. As between Centrixlink and Developer, Centrixlink retains all right, title and interest in and to the Centrixlink Platform, the Centrixlink Materials and any materials created, developed or provided by Centrixlink in connection with this Agreement, including all intellectual property rights related to each of the foregoing. All rights not expressly granted by Centrixlink to Developer herein are hereby reserved by Centrixlink.\nDeveloper Rights. Subject to Section 5.1, as between Developer and Centrixlink, Developer retains all right, title and interest in and to the Developer Apps, including all intellectual property rights related to each of the foregoing. All rights not expressly granted by Developer to Centrixlink herein are hereby reserved by Developer.\nCollection of Unique Identifiers. Developer acknowledges that unique identifiers and other technologies may be used in connection with the Centrixlink SDK and Centrixlink Advertisements in order to collect and use data regarding advertisement performance and end user interests and to display Centrixlink Advertisments to end users, and that the collection of such data is regulated by the Children's Online Privacy Protection Act, 15 U.S.C. §§ 6501-6506 and the Federal Trade Commission's COPPA Rule, 16 C.F.R. Part 312 (collectively, \"COPPA\") and other applicable laws. Centrixlink will collect and use such unique identifiers in accordance with the Centrixlink Privacy Policy, which is available at http://www.Centrixlink.com/privacy.html (as updated from time to time) and incorporated by reference into this Agreement.\nCompliance with Laws. Developer acknowledges and agrees that Centrixlink may collect unique identifiers from end users via the Centrixlink SDK and use them in accordance with the Centrixlink Privacy Policy. Developer further acknowledges and agrees that it is responsible for providing adequate notice and obtaining any required end user or parental consent, including as required by the Children's Online Privacy Protection Act, 15 U.S.C. §§ 6501-6506 and the Federal Trade Commission's COPPA Rule, 16 C.F.R. Part 312 (collectively, \"COPPA\"), to the collection of unique identifiers and other information via the Centrixlink SDK and Developer's App. Developer expressly represents, warrants and covenants that it and its App shall fully comply with, and Developer shall ensure that the collection of unique identifiers and other information by the Centrixlink SDK as set forth in the Centrixlink Privacy Policy (as amended from time to time) complies with, COPPA and all other applicable laws, rules and regulations. For the avoidance of doubt, as between Centrixlink and Developer, Developer shall be responsible for ensuring that Developer's App, and the information collected from end users of Developer's App (including by the Centrixlink SDK), complies with COPPA and all applicable laws, rules and regulations. Developer shall fully indemnify, defend, and hold harmless Centrixlink and its directors, officers, agents, representatives, assigns, and employees from and against any liabilities, damages, costs, fines, penalties and expenses (including reasonable attorneys’ fees) arising out of or relating to a violation of this paragraph 7 and/or any claims of COPPA violations or other violations of laws relating to Developers Apps.\nSupport.\n  Centrixlink shall have no obligation under this Agreement to provide any upgrades, patches, enhancements, fixes or any other support for the Centrixlink Platform or Centrixlink Materials. Centrixlink may make maintenance and support services available under a separate agreement.\nTerm and Termination. \n \nTerm. This Agreement is effective until terminated. \n \nTermination by Centrixlink. Centrixlink may terminate this Agreement at any time by providing sixty (60) days’ notice to Developer.Additionally, Centrixlink may terminate this Agreement and the licenses granted herein immediately if Developer breaches any provision of this Agreement.\nTermination by Developer. Developer may terminate this Agreement and the licenses granted herein at any time by ceasing all use of the Centrixlink Platform and Centrixlink Materials and destroying or removing from all hard drives, networks, and other storage media all copies of the Centrixlink Materials.\nEffect of Termination. Sections 3, 4, 5, 7.4, and 8 through 12 shall survive any expiration or termination of this Agreement. \n Confidentiality \n\nDefinition. \"Confidential Information\" means any and all information disclosed by Centrixlink to Developer, either directly or indirectly, in writing, orally or by inspection of tangible objects, including without limitation the Centrixlink SDK, the features and functionality of the Centrixlink Platform and the results and performance of the Centrixlink Materials. Confidential Information does not include information that: (i) is or becomes generally known to the public through no fault of or breach of this Agreement by Developer; (ii) is rightfully known by Developer at the time of disclosure without an obligation of confidentiality; or (iii) Developer rightfully obtains from a third party without restriction on use or disclosure.\nUse and Disclosure Restrictions. Developer shall not use the Confidential Information except as necessary to exercise its rights or perform its obligations under this Agreement. Developer shall not disclose the Confidential Information to any third party except to those of its employees, subcontractors, and advisers that need to know such Confidential Information for the purposes of this Agreement, provided that each such employee and subcontractor is subject to a written agreement that includes binding use and disclosure restrictions that are at least as protective of Confidential Information as those set forth herein. Developer will use at least the efforts Developer ordinarily uses with respect to its own proprietary information of similar nature and importance to maintain the confidentiality of all Confidential Information in its possession or control, but in no event less than reasonable efforts. The foregoing obligations will not restrict Developer from disclosing Confidential Information pursuant to the order or requirement of a court, administrative agency, or other governmental body, provided that Developer gives reasonable notice to Centrixlink to contest such order or requirement.\nWarranty Disclaimer. EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, Centrixlink DOES NOT MAKE ANY WARRANTIES, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, WITH RESPECT TO THE SUBJECT MATTER OF THIS AGREEMENT, AND Centrixlink EXPRESSLY DISCLAIMS THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, AND ANY IMPLIED WARRANTIES ARISING FROM COURSE OF DEALING OR PERFORMANCE. Centrixlink AND ITS SUPPLIERS, LICENSORS, AND PARTNERS DO NOT WARRANT THAT THE Centrixlink PLATFORM OR Centrixlink SDK WILL BE CORRECT, UNINTERRUPTED OR ERROR-FREE, THAT DEFECTS WILL BE CORRECTED, OR THAT THE Centrixlink PLATFORM OR Centrixlink SDK ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. Centrixlink DOES NOT WARRANT THE RESULTS OF USE OF THE Centrixlink PLATFORM OR Centrixlink SDK. DEVELOPER ACKNOWLEDGES THAT Centrixlink MAY MODIFY OR SUSPEND THE Centrixlink PLATFORM AT ANY TIME IN ITS SOLE DISCRETION AND WITHOUT NOTICE.\nIndemnification. Developer agrees to indemnify, defend, and hold harmless Centrixlink and its directors, officers, and employees from and against any liabilities, damages, costs and expenses (including reasonable attorneys’ fees) arising out of any claim, demand, action, or proceeding initiated by a third party to the extent attributable to the alleged or actual breach of Developer’s obligations, representations or warranties set forth in this Agreement, provided that Centrixlink: (a) promptly notifies Developer in writing of the claim, except that any failure to provide this notice promptly only relieves Developer of its responsibility pursuant to this Section 10 to the extent its defense is materially prejudiced by the delay; (b) grants Developer sole control of the defense and/or settlement of the claim; and (c) provides Developer, at Developer’s expense, with all assistance, information and authority reasonably required for the defense and/or settlement of the claim, but in a manner consistent with Centrixlink’s respective confidentiality obligations and preservation of attorney/client, work product, and other privileges.\nLimitation of Liability. Centrixlink SHALL NOT BE LIABLE TO DEVELOPER FOR ANY PUNITIVE, INCIDENTAL, INDIRECT, SPECIAL, RELIANCE OR CONSEQUENTIAL DAMAGES, INCLUDING LOST BUSINESS, REVENUE, OR ANTICIPATED PROFITS, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT Centrixlink WAS ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGES. IN NO EVENT WILL Centrixlink’S AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED THE GREATER OF ONE HUNDRED DOLLARS ($100) AND THE TOTAL FEES PAYABLE TO DEVELOPER UNDER THIS AGREEMENT DURING THE TWELVE MONTHS IMMEDIATELY PRECEDING THE DATE THE CLAIM FIRST AROSE. THE PARTIES AGREE THAT THE LIMITATIONS OF LIABILITY SET FORTH IN THIS SECTION WILL APPLY EVEN IF ANY LIMITED REMEDY SPECIFIED IN THIS AGREEMENT IS FOUND TO HAVE FAILED OF ITS ESSENTIAL PURPOSE.\nGeneral \n \nRelationship of the Parties. The parties are independent contractors with respect to each other. This Agreement does not constitute and shall not be construed as constituting a partnership or joint venture among the parties hereto, or an employee-employer relationship. No party shall have any right to obligate or bind any other party in any manner whatsoever, and nothing herein contained shall give, or is intended to give, any rights of any kind to any third parties.\nAssignment. Neither party may assign any of its rights or obligations under this Agreement without the prior written consent of the other party, except that either party may assign its rights and obligations under this Agreement without the consent of the other party in connection with any merger (by operation of law or otherwise), consolidation, reorganization, change in control or sale of all or substantially all of its assets related to this Agreement or similar transaction. This Agreement inures to the benefit of and shall be binding on the parties’ permitted assignees, transferees and successors.\nForce Majeure. Neither party will be responsible for any failure or delay in its performance under this Agreement due to causes beyond its reasonable control, including, but not limited to, labor disputes, strikes, lockouts, internet or telecommunications failures, shortages of or inability to obtain labor, energy, or supplies, war, terrorism, riot, acts of God or governmental action, acts by hackers or other malicious third parties and problems with the Internet generally, and such performance shall be excused to the extent that it is prevented or delayed by reason of any of the foregoing.\nHeadings and Wording. Unless otherwise expressly stated in this Agreement, the words \"herein,\" \"hereof,\" \"hereto,\" and \"hereunder\" and other words of similar import refer to this Agreement as a whole and not to any particular Article, Section, Subsection, or other subdivision. The words \"include\" and \"including\" are not and should not be construed or interpreted as terms of limitation. The words \"day,\" \"month,\" and \"year\" mean, respectively, calendar day, calendar month, and calendar year. Section headings are for reference purposes only, and should not be used in the interpretation hereof. No provision of this Agreement will be construed against either party as the drafter thereof.\nNotices. All notices under the terms of this Agreement shall be given in writing and sent by registered mail, internationally recognized carrier, or facsimile transmission with machine confirmation or shall be delivered by hand.\nAmendments. An amendment of this Agreement shall be binding upon the parties so long as it is either in writing and executed by both parties or is presented by Centrixlink electronically via the Centrixlink Platform and accepted by Developer by clicking on \"I Accept\" or similar language.\nWaiver. A waiver of any provision of this Agreement will only be valid if provided in writing and will only be applicable to the specific incident and occurrence so waived. The failure by either party to insist upon the strict performance of this Agreement, or to exercise any term hereof, will not act as a waiver of any right, promise or term, which will continue in full force and effect.\nConstruction. This Agreement shall be fairly interpreted and construed in accordance with its terms and without strict interpretation or construction in favor of or against either party.\nSeverability. If any provision, or portion thereof, of this Agreement is determined by a court of competent jurisdiction to be invalid, illegal or unenforceable, such determination will not impair or affect the validity, legality, or enforceability of the remaining provisions of this Agreement, and each provision, or portion thereof, is hereby declared to be separate, severable, and distinct.\nGoverning Law; Jurisdiction. This Agreement shall be governed by, and construed in accordance with, the laws of the State of California, without reference to conflicts of laws principles. The parties agree that the federal and state courts in San Francisco County, California will have exclusive jurisdiction and venue under this Agreement, and the parties hereby agree to submit to such jurisdiction exclusively.\nEntire Agreement. This Agreement, together with the Exhibits attached hereto and hereby incorporated herein by reference, constitutes the complete, final and exclusive agreement between the parties with respect to the subject matter hereof, and supersedes any and all prior or contemporaneous oral or written representations, understandings, agreements or communications between them concerning the subject matter hereof. Neither party is relying upon any warranties, representations, assurances or inducements not expressly set forth herein.\n\nExhibit A \n \n\nAdvertising Insertion Order Terms \n \nDefinitions \n\n\"Advertisers\" means third-party advertisers.\n\"Content\" means any content or materials\navailable in, distributed with, or that otherwise may be viewed or downloaded by end users of the Developer Apps (excluding Centrixlink Advertisements).\n\"CPM\" means the cost per thousand advertisement impressions.\n\"Net Revenue\" means the gross revenue actually collected by Centrixlink from Advertisers for Centrixlink Advertisements, less (i) any refunds to Advertisers; (ii) a deduction of 10% to cover expenses related to discounts, payment transaction fees, telecommunications, data center and other serving costs, ; (iii) any amounts payable by Centrixlink to providers of targeting, reporting, verification or other data, technology or services used in connection with a given advertisement campaign hereunder.\n\"Centrixlink Advertisements\" means video advertisements, sourced by or on behalf of Centrixlink, which are routed and/or served by the Centrixlink Platform to the Developer Apps.\nCentrixlink Advertisement Sales. Upon agreement between Developer and Centrixlink on an insertion order for the placement of Centrixlink Advertisements in Developer Apps, Developer hereby grants Centrixlink the right to sell and have sold advertisement inventory in the Developer Apps and to insert Centrixlink Advertisements within such inventory during the term of the applicable insertion order, including the right to list such inventory in pitch materials to prospective Advertisers and to report such inventory as being part of Centrixlink’s advertising network. In addition, Developer hereby grants Centrixlink a nonexclusive license during the term of this Agreement to use Developer’s trademarks and logos and images of the Developer Apps in connection with exercising the foregoing right. Centrixlink is solely responsible for, and has final authority on, decisions related on how to sell Centrixlink Advertisement inventory, including packaging, pricing, promotional offers, and all other related deal terms and conditions. Developer shall designate a representative that will serve as the point of contact on an ongoing basis with Centrixlink’s account management team.\nDeveloper Permissions. Developer agrees that, in connection with fulfillment of any insertion order entered into between the parties, Centrixlink may: (a) access or call to the Developer Apps or the servers that make them available and to cause the routing, transmission, reproduction, and display of Centrixlink Advertisements as contemplated herein; and (b) collect data and information, including unique identifiers, usage data, and streaming data, with regard to the Content and Developer Apps within which Centrixlink Advertisements are routed and/or served and (i) use such information for Centrixlink’s internal business purposes; (ii) disclose such information to third parties (including Advertisers and partners) as reasonably necessary in connection with the operation of the Centrixlink Platform or as may be required by law or legal process; and (iii) disclose such information generally when it is aggregated with similar information relating to other Centrixlink publishers such that the specific information relating to Developer is not identified as such.\nRepresentations and Warranties of Developer. During the term of this Agreement, Developer represents, warrants and covenants to Centrixlink that: (a) it has all necessary rights, title, and interest in and to the Developer Apps to allow Centrixlink to insert Centrixlink Advertisements as contemplated herein; (b) it shall not use the Centrixlink Materials in connection with any Developer Apps, Content or technology that violate any law, rule or regulation, including without limitation applicable FTC regulations and COPPA; (c) it has any and all consents, authorizations and clearances from end users of the Developer Apps as may be required for Centrixlink to provide services hereunder; and (d) the Developer Apps do not and will not (i) infringe upon, violate, or misappropriate any third-party right, including any copyright, trademark, patent, trade secret, moral right, privacy right, right of publicity, or any other intellectual property or proprietary right or (ii) slander, defame, or libel any person.\n<\nRestrictions. Developer may not, and may not authorize or encourage any third party to: (i) generate fraudulent impressions of or fraudulent clicks on any advertisements, including through repeated manual clicks, the use of robots or other automated tools or any other method that may lead to artificially high numbers of impressions, downloads, or clicks; (ii) edit, modify, filter, or change the order of the information contained in any Centrixlink Advertisement, or remove, obscure or minimize any Centrixlink Advertisement in any way; and (iii) redirect an end user away from any web page accessed by an end user after selecting or clicking on any part of a Centrixlink Advertisement (\"Advertiser Page\"), provide a version of the Advertiser Page different from the page an end user would access by going directly to the Advertiser Page, or intersperse any content between the Centrixlink Advertisement and the Advertiser Page. Centrixlink may suspend Developer’s use of the Centrixlink Platform and/or terminate this Agreement immediately should Developer violate the foregoing provisions of this Section 5.\nContent. Developer acknowledges and agrees that it may not use the Centrixlink Platform in connection with any Developer Apps or Content containing, consisting of or promoting discrimination, illegal activities, hate speech, graphic violence, firearms, tobacco, illegal drugs, pornography, profanity, obscenity or sexually explicit material, and that it will notify Centrixlink immediately of any Developer Apps or Content relating to alcohol or gambling. Developer agrees that Centrixlink has no responsibility for any Content, and Centrixlink has no obligation or ability to monitor or edit the Developer Apps. Developer agrees to provide as much advance notice as is reasonably practicable (but in no event less than fifteen (15) days’ notice) regarding any material changes to the nature or design of any Developer App, including without limitation changes to the placement of Centrixlink Advertisement inventory, the type of Content, or the target audience.\nTracking Data. Developer acknowledges that unique identifiers and other technologies may be used in connection with the Centrixlink SDK Centrixlink Advertisements in order to collect and use data regarding advertisement performance and end user interests and to display Centrixlink Advertisements to end users, and that the collection of such data is regulated by the Children's Online Privacy Protection Act, 15 U.S.C. §§ 6501-6506 and the Federal Trade Commission's COPPA Rule, 16 C.F.R. Part 312 (collectively, \"COPPA\"). Developer hereby grants Centrixlink a perpetual, irrevocable, worldwide, sublicenseable right and license to ussde, copy, modify, distribute and otherwise exploit data collected through such cookies, beacons, and other technologies for Centrixlink’s business purposes. Without limiting any other terms of the Agreement or (including paragraphs 6 and 7) and this Exhibit A, during the term of this Agreement, Developer shall obtain all consents, authorizations and clearances from end users of the Developer Apps required in connection with the use of such cookies, beacons, and other technologies. Developer shall provide or make available to users of each Developer App a privacy notification in a conspicuous manner (via a privacy policy or other method appropriate for the type of such Developer App)which (i) complies with all applicable laws, rules and regulations; and (ii) to the extent applicable to the type of such Developer App, discloses to users of such Developer App that cookies, web beacons and other technologies may be used in connection with such Developer App. Developer shall comply with such other requirements that Centrixlink may issue in writing from time to time (including through the Centrixlink Platform) that relate to compliance with laws, rules, regulations, guidelines and industry standards relating to online advertising.\nPayment Amounts. Subject to the terms and conditions of this Agreement, Centrixlink shall pay to Developer amounts calculated in accordance with the applicable insertion order entered into between the parties and the definitions of CPM and Net Revenue set forth herein. Developer acknowledges that all payments hereunder shall be based on the impression counts used by the applicable Advertisers to pay Centrixlink. For the avoidance of doubt, all payments hereunder are based on advertisement requests from the Developer Apps that are actually fulfilled with a Centrixlink Advertisement, except as expressly provided in this Agreement. All amounts received from activities Centrixlink deems to be fraudulent may be refunded to Advertisers in Centrixlink’s sole discretion.\nPayment Terms. Centrixlink agrees to pay all amounts due hereunder within 60 days after the last day of the month in which Centrixlink received the corresponding payment from the Advertiser, provided that no check will be issued for any amount less than $50 U.S. If there are any payment fees from the receiving bank, immediate bank or from paypal, Developer will be responsible for these fees. All unpaid earnings will rollover to the next pay period. All payments will be made in U.S. dollars ($U.S.). Centrixlink may deduct from such payments any withholding, sales, value added, and other applicable taxes (other than its net income taxes) which Centrixlink is required by law to deduct. Developer is responsible for paying any other taxes, duties, or fees for which Developer is legally responsible.\n \n"
  },
  "authors": {
    "Centrixlink": "devsupport@Centrixlink.com",
    "peng.zhao": "peng.zhao@centrixlink.com"
  },
  "platforms": {
    "ios": "7.0"
  },
  "requires_arc": true,
  "source": {
    "git": "https://github.com/Centrixlink/Centrixlink-iOS-SDK.git",
    "tag": "2.5.3"
  },
  "resources": "Resources/*.bundle",
  "vendored_frameworks": "Centrixlink.embeddedframework/Centrixlink.framework",
  "xcconfig": {
    "OTHER_LDFLAGS": "-ObjC"
  },
  "frameworks": [
    "UIKit",
    "AVFoundation",
    "Foundation",
    "CoreMedia",
    "CoreLocation",
    "CoreTelephony",
    "SystemConfiguration",
    "StoreKit",
    "MediaPlayer",
    "CFNetwork",
    "AdSupport",
    "ImageIO"
  ],
  "libraries": [
    "z",
    "stdc++",
    "sqlite3"
  ]
}
