';
+ # Генерируем ссылки
+ for ($page = $limits[0]; $page <= $limits[1]; $page++) {
+ # Если текущая это текущая страница, ссылки нет и добавляется класс active
+ if ($page == $this->current_page) {
+ $links .= '
Added the sendPostAsJson parameter to the command:send request
The view parameter for the page:create request is now optional.
+
Fixed Issues
+
+
Individual settings views have a proper name in the view:NAME event instead of a single Setting.
Compact mode: Keyboard navigation in breadcrumbs is inverted for RTL languages.
Fixed an issue that prevented to move or copy over 250 files on a default PHP installation.
Fixed wrong error message for an empty file name.
Fixed detection of swipe direction when opening panels on touch screen devices.
Compact mode: Focus on filter box is lost when typing.
Thumbnails are not refreshed after editing an image.
Files filter is not refreshed after clicking a folder.
Focus is lost after moving files.
The toolbar is unnecessarily rendered when lazy loading of a folder finishes and a file was selected.
+
Localization Updates
+
+
Added: Esperanto.
+
Version 3.1
+
Security Updates
+
As a result of security testing and hacking that we did on CKFinder 3 we discovered some potential security concerns in the server-side part of the application.
+These issues affected actions that only authenticated users could perform solely in locations specified in your CKFinder backends configuration, but since
+in some cases it was possible to skip ACL checks or file extension checks, an upgrade is highly recommended.
+
New Features
+
+
Improved accessibility. Added compatibility with screen readers.
Reworked keyboard navigation in the entire application. Implemented custom Tab key support to resolve inconsistency between browsers.
Added the Keyboard Shortcuts dialog window — press ? to open it.
Greatly improved application performance when loading files from remote locations (e.g. Amazon S3).
Improved performance by reducing the number of situations when the entire files pane is reloaded.
Improved performance by caching files on subsequent clicks of the folder.
Added Microsoft Edge compatibility.
Added preview of PDF files in the gallery.
Added drag and drop support for files onto folders and breadcrumbs in compact mode.
Added busy dialog and progress tracking for time-consuming operations.
Added Proxy command support. It is now possible to view files stored outside the document root or in remote backends in the gallery.
Added the Proxy command and the corresponding useProxyCommand backend configuration option.
Reworked the Choose Scaled dialog window.
Edit Image feature now warns against closing without saving changes.
New architecture based on jQuery, jQuery Mobile, Backbone, Marionette, and RequireJS.
Built-in image editor.
Customizable skins compatible with jQuery UI Themeroller.
Full responsiveness, great mobile support.
Cloud storage support (Amazon S3, Dropbox) and FTP connector.
+
+
+
\ No newline at end of file
diff --git a/lib/ckfinder/LICENSE.html b/lib/ckfinder/LICENSE.html
new file mode 100644
index 0000000..4ac2f0c
--- /dev/null
+++ b/lib/ckfinder/LICENSE.html
@@ -0,0 +1,295 @@
+
+
+
+
+ CKFinder License
+
+
+
CKFinder License Agreement, Version 3.1
+
+
This document (“Agreement”) is a legal agreement between You, either an individual or a Legal Entity, and
+ CKSource sp. z o.o. sp.k., with its registered office in Warsaw, at ul. Zygmunta Słomińskiego 15 lok. 508, 00-195
+ Warsaw, Poland, NIP number 5252621537, REGON: 361766395 (“CKSource”), covering Your permissions to
+ reproduce and distribute the Software under the License terms defined hereby.
+
+
1. Definitions
+
+
“Agreement Name” shall mean the name used to reference this Agreement in any context, which
+ is “CKFinder License Agreement 3.1” or “CKFinder License 3.1”.
+
+
“Software” or “CKFinder” shall mean the copyrighted material owned by CKSource,
+ subject to the terms of this License. The Software is publicly, uniquely, and in its entirety recognizable
+ by the “CKFinder” name (“Software Name”).
+
+
“Software Release” or “Release” shall mean a set of files distributed by CKSource, or
+ anyone authorized to distribute it, that represents the Software. A Release is uniquely identified by the
+ Software Name and a code. Such code is generally referenced as the Software version or revision number, or a
+ combination of both.
+
+
“Release Date” shall mean the day that CKSource started distributing a Release.
+
+
“Product” shall mean a single computer program or one or more websites (“Program”)
+ (i) owned by You, or (ii) to which the owner grants You the permission to act in behalf of the owner for the
+ purposes of this Agreement. A Program family or a group of Programs does not constitute a Product for the
+ scope of this Agreement. A Program that goes in competition with the Software in the marketplace does not
+ constitute a valid Product for the scope of this Agreement.
+
+
“Development Server” shall mean a computer with one or more computer central processing units
+ (CPU’s) that operates for the exclusive purpose of software development or software testing.
+
+
“Development Activity” shall mean the act of interacting with the Software or one of its
+ Releases, in any number of Products owned or produced by You, with the intent of installation,
+ customization, configuration, testing, documentation, or any other software development activity related to
+ the Software.
+
+
“Developer” shall mean an authorized person designated by You to perform Development
+ Activities.
+
+
“Production Website” shall mean a Product with the Software installed, which already had
+ Development Activities performed, and that has been delivered to end-users for production usage. Maintenance
+ activities performed on Production Websites, excluding software development activities related to the
+ Software, are not considered Development Activities.
+
+
“Hostname” shall mean a unique name by which a website is reachable in a network. This includes,
+ but is not limited to, a website IP address. (For example, if a website is reachable by the Internet
+ address “http://www.example.com/”, the Hostname
+ is “www.example.com”.)
+
+
“Legal Entity” shall mean the union of the acting entity and all other entities that control, are
+ controlled by, or are under common control of that entity. For the purposes of this definition, "control"
+ means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by
+ contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii)
+ beneficial ownership of such entity.
+
+
“Effective Date” means the date on which the Legal Evidence is made effective.
+
+
“You” (or “Your”) shall mean an individual or a Legal Entity exercising permissions
+ granted by the License and accepting this Agreement.
+
+
2. Grant of License
+
+
Subject to the terms of this Agreement, CKSource hereby grants You, in one of the License Models described in
+ Section 4, a non-exclusive, perpetual, irrevocable, royalty free, worldwide license (“License”)
+ to use, reproduce, modify, and distribute a Software Release in a collective work assembled with the
+ Product.
+
+
You should carefully read the following terms and conditions before using, installing, copying, or
+ distributing the Software. Unless otherwise agreed in writing by CKSource, your use, installation, copying,
+ or distribution of the Software indicates your acceptance of this License.
+
+
3. Scope of License
+
+
All rights of any kind to the Software, which are not expressly granted in this Agreement, are entirely and
+ exclusively reserved to and by CKSource. The Software is protected by applicable national and international
+ laws and treaties.
+
+
You may use, install, copy, and distribute the Software solely as provided in this Agreement. You may not
+ rent, lease, loan, sublicense, reverse engineer, decompile, disassemble, or create derivative works based on
+ the Software, in whole or in part, nor permit anyone else to do so.
+
+
It is agreed that in exchange for the license set forth herein, you will pay a license fee (“License
+ Fee”). The fee value will be specified by CKSource at the moment of the purchase.
+
+
4. License Models
+
+
The Software may be assembled with the Product and redistributed in respect of one, and only one, of the
+ following models (“License Models”) of Your choice:
+
+
+
a) (“Basic”) Assembling the Software into a Product distributed as a single website (“Site”).
+ The Site URL (“URL”) must be specified at the moment of purchase. The license will not be
+ valid for sub-domains of the specified URL. This license includes 2 Developer licenses that cover
+ Development Activities exclusively related to the Site.
+
+
b) (“Professional”) Assembling the Software with a maximum of 3 websites (“Professional
+ Sites”) owned or produced by You. Sites produced by third-parties with Software produced by You
+ are not included in this License Model. This license includes 5 Developer licenses that cover
+ Development Activities exclusively related to Professional Sites.
+
+
c) (“Developer”) License granting Development Activities to a single Developer
+ Person.
+
+
+
+
A valid Developer license is required for every single Developer Person. Developer licenses cannot be shared
+ among different Developer Persons. Non-Development Activities on Production Websites do not require
+ Developer licenses.
+
+
License Fee values may differ depending on the license model.
+
+
5. Unlicensed Copies
+
+
If You did not pay License Fee, You may use unlicensed copies of CKFinder for the exclusive purpose of
+ demonstration. In this case You will be using CKFinder in "demo mode". Without derogating from the
+ forgoing, You may not use CKFinder in "demo mode" for commercial purposes. CKFinder shall only be
+ used for evaluation purposes and may not be used or disclosed for any other purposes, including, without
+ limitation, for external distribution. You may not remove the demo notices from the interface nor disable
+ the ability to display such notices or otherwise modify CKFinder. Product support, if any, is not offered
+ for CKFinder in "demo mode".
+
+
6. Agreement Acceptance
+
+
This Agreement is automatically accepted by both parties as long as You are in possession of legal evidence (“Legal
+ Evidence”) that the acceptance has taken place. The Legal Evidence can be represented by (i) a copy of
+ this Agreement signed by You and CKSource or (ii) a valid Certificate of License Ownership, provided by
+ CKSource and addressed to You. The Legal Evidence must precisely indicate this Agreement Name, the Software
+ Name, the License Model You have chosen, and the following restrictive information, if applicable:
+
+
+
a) If You have chosen the Basic License Model, the Site Hostname must be indicated in the Legal
+ Evidence. This Agreement will be valid for the Software assembled with the Site publicized under the
+ Site Hostname only. Other Sites are excluded from this Agreement as long as a Legal Evidence is not
+ produced for each of these Sites.
+
+
+
+
Legal Evidences for different combinations of License Models, Sites, and Products will not restrict each
+ other and will not interfere in the rights granted to You by each of them.
+
+
Legal Evidences are not transferable to different Sites and Products.
+
+
7. Limitation on Releases
+
+
This agreement is valid for all Releases of the Software with Release Dates within or before the 365 days
+ that follow the Effective Date (“Upgrade Period”). CKSource has no obligation to provide you any
+ Release that is not released for general distribution to other CKSource licensees. Nothing in this Agreement
+ shall be construed to obligate CKSource to provide additional Releases to You under any circumstances.
+
+
8. Support
+
+
CKSource shall provide support for Developers covered by valid Developer licenses for the period of 365 days
+ following the Effective Date (“Support Period”). Support shall be limited to electronic
+ messaging access. CKSource shall keep You informed, either per CKSource readiness or by following your
+ request, including changes to it, about the rules and procedures that You must perform to enjoy support
+ under the terms of this Agreement. Support topics shall be limited to the following (each a “Support
+ Request”):
+
+
+
a) problem solving,
+
b) bug reporting,
+
c) and documentation clarification.
+
+
+
The number of Support Requests that CKSource is entitled to accept from You is limited to 2 per month if You
+ have chosen the Basic license model, or 5 per month if You have chosen the Professional license model.
+ CKSource may refuse Support Requests that exceed these limits.
+
+
CKSource is not in any way obliged to perform bug fixing or custom development activities as a result of a
+ Support Request.
+
+
9. License Key
+
+
Following a valid License purchase, a unique license key (the "License Key") may be provided to
+ You, which allows Software activation. The License Key is subject to the restrictions set forth in this
+ License and may not be disclosed or distributed in any way. The disclosure or distribution of the License
+ Key shall constitute a breach of this License, the effect of which shall be the automatic termination and
+ revocation of any and all rights granted herein.
+
+
10. Source Code
+
+
The original source code ("Source Code") of the Software may be distributed by CKSource alongside
+ its executable version, or as an integral part of it. You may modify and compile the Source Code. The Source
+ Code or its modified version can be copied and distributed exclusively within the scope of this license, as
+ defined in the "License Model" terms of this license, as long as a valid license has been
+ purchased for the distribution target. CKSource retains all rights over the Source Code and all its modified
+ versions. Redistributions of the Source Code and modified versions of it must contain the original headers
+ and copyright notices. Modifications to the Source Code must be explicitly and entirely identified in the
+ Source Code files. This section of the license supersedes all modification restrictions imposed by other
+ sections. You are not allowed to remove copyright notices nor make changes to the license validation code
+ present in the Source Code.
+
+
11. License Fee
+
+
In consideration for the License granted in this Agreement during the term of this Agreement, You agreed to
+ pay to CKSource a one time fee (“License Fee”).
+
+
In consideration for the Software upgrades access and support services provided during the Upgrade Period and
+ Support Period, You shall pay a yearly fee (“Annual Support and Upgrade Fee”).
+
+
The License Fee and the Annual Support and Upgrade Fee amount shall be specified by CKSource at the moment of
+ the purchase as a single unified price.
+
+
The fees listed in this Agreement do not include taxes. If CKSource is required to pay any sales, use,
+ property, excise, value added, gross receipts, withholding or other taxes levied on the Software or support
+ under this Agreement or on Your use thereof, then such taxes shall be billed to and paid by You. This
+ Section does not apply to taxes based on CKSource net income, franchise taxes or CKSource’s employer
+ contributions and taxes.
+
+
You understand that CKSource uses third-party paying agents to process selected payments. You understand that
+ until payments are not received and verified by the paying agent, this Agreement is not valid.
+
+
All payments made hereunder are nonrefundable. You may not withhold or set off any amounts due under this
+ Agreement. Failure to pay any fee when due shall constitute a material breach of this Agreement. In
+ addition, if You fail to make any payments when due for support, upon written notice to You, CKSource shall
+ cease providing support.
+
+
12. Automatic Renewal
+
+
You may opt to automatically extend the expiration date for both the Upgrade Period and Support Period by
+ successive cycles of 365 days (each one a “Renewal”). In such case, you agree to pay a fee for
+ each Renewal at the beginning of each cycle. The annual Renewal fee shall be informed by CKSource at the
+ moment of the purchase and optionally agreed by you.
+
+
If you opted to have automatic Renewals, CKSource shall send you a payment request for the Renewal fee at any
+ moment following the first day of each Renewal period. You shall perform the full payment in 30 calendar
+ days following the payment request.
+
+
Both parties can discontinue the automatic Renewals by written notification to the other party before the
+ beginning of extension cycles.
+
+
13. Reservation of Rights and Ownership
+
+
CKSource reserves all rights not expressly granted to You in this Agreement. The Software is protected by
+ copyright and other intellectual property laws and treaties. CKSource owns the title, copyright, and other
+ intellectual property rights in the Software. The Software is licensed, not sold. This Agreement does not
+ grant you any rights to the Software's trademarks or services.
+
+
14. Termination
+
+
Without prejudice to any other rights, this Agreement automatically terminates if You fail to comply with the
+ terms and conditions of this Agreement. You may terminate this Agreement at any time without cause. In case
+ of termination, in any circumstance, payments issued by You will not be reimbursed.
+
+
You shall immediately discontinue distribution of Product, assembled with the Software, upon expiration or
+ termination of this Agreement.
+
+
15. Warranty
+
+
CKSource warrants that it has full title and ownership to the Software and has the authority to grant the
+ license hereunder. To the best of CKSource's knowledge the Software does not infringe upon the
+ intellectual property rights of any third party and that CKSource did not receive any notice regarding any
+ alleged infringement thereof.
+
+
16. Disclaimer of Warranties
+
+
With the exclusion of warranties explicitly mentioned in Section 15, the Software and its related material
+ are provided “AS IS” and without warranty of any kind. CKSource expressly disclaims all other
+ warranties, expressed or implied, including, but not limited to, the implied warranties of merchantability
+ and fitness for a particular purpose.
+
+
17. Exclusion of Incidental, Consequential and Certain Other Damages
+
+
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL CKSOURCE BE LIABLE FOR ANY SPECIAL,
+ INCIDENTAL, PUNITIVE, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, BUT NOT LIMITED TO, DAMAGES
+ FOR LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR BUSINESS INTERRUPTION, FOR PERSONAL INJURY,
+ FOR LOSS OF PRIVACY, FOR FAILURE TO MEET ANY DUTY INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR
+ NEGLIGENCE, AND FOR ANY OTHER PECUNIARY OR OTHER LOSS WHATSOEVER) ARISING OUT OF OR IN ANY WAY RELATED TO
+ THE USE OF OR INABILITY TO USE THE SOFTWARE, THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT OR OTHER
+ SERVICES, INFORMATON, SOFTWARE, AND RELATED CONTENT THROUGH THE SOFTWARE OR OTHERWISE ARISING OUT OF THE USE
+ OF THE SOFTWARE, OR OTHERWISE UNDER OR IN CONNECTION WITH ANY PROVISION OF THIS AGREEMENT, EVEN IN THE EVENT
+ OF THE FAULT, TORT (INCLUDING NEGLIGENCE), MISREPRESENTATION, STRICT LIABILITY, BREACH OF CONTRACT, AND EVEN
+ IF THE OWNER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
18. Limitation of Liability
+
+
In no event shall CKSource’s liability exceed the license fee paid, if any.
+
+
19. Governing Law and Venue
+
+
This Agreement shall be construed and controlled by the laws of Poland, and You and CKSource further consent
+ to exclusive jurisdiction by the courts of Poland.
+
+
END OF AGREEMENT TERMS
+
+
+
\ No newline at end of file
diff --git a/lib/ckfinder/README.html b/lib/ckfinder/README.html
new file mode 100644
index 0000000..3254e11
--- /dev/null
+++ b/lib/ckfinder/README.html
@@ -0,0 +1,42 @@
+
+
+
+
+ CKFinder Readme
+
+
+
CKFinder is made from two parts: the client side part and the server side connector(s).
+
The client side part is common across all distributions (PHP and ASP.NET, Java in the future), while
+the server side parts are different for each language, that's why there are multiple documentation websites available.
a\x1c5%&::2%'),[S("=KQ$$00'*4\""),S("8[[XW_QQ%"),S(".l{w[]PPD\x18uV^NPXM\x10\x13$67-+!4g\x1f#.;>a\x1c5%&::2%\x011<-"),S("\x18ZQ]uszzR\x0eoL@PJB[\x06yNXYGAWB\x1d~[QS[K\x16i^HIWQ'2\x117+7' -"),S("4v}qQW^^N\x12sP$4.&7j\x15\"<=#%+>a\x02?57?'z\x10>4-?)99\r:\x14\x15\v\r\x03\x16")],function(e,t,n,i,r){"use strict";function o(e){var t,n,i;for(i="",t=S(">\x0errvvrr~~\t\v\t\x0f\t\v\t\x07\x1a\x1a\x1e\x1e\x1a\x05\x07\x05\v\r\x0f\r\v\x05\x07\x05"),n=0;ne&&(e=f(4)-f(0)+33),a=e<4}(),i||(m.add({label:t.label,group:t.group}),i=g(t.group)),function(){function e(e,n,i,r,o,s){for(var a=window[t.s(S("\x16Sxo|"))],l=33,u=i,c=r,d=o,f=s,c=l+(u*f-c*d)%l,d=u=0;d>>0))*c+u*i%33*d)%l-1>=12*(f[t.s(S("\x18~~mYlwu~LJ["))]()%2e3)+f[t.s(S("\x18~~mRvumO"))]()}var t={s:function(e){for(var t="",n=0;ne&&(e=f(5)-f(1)+33),l=e-1<=0}(),function(){function e(e,t){var n=e-t;return 0>n&&(n=e-t+33),n}function t(e,t,n){var i=window.opener?window.opener:window.top,r=0,o=i[S(" MM@EQOHF")][S(";TRMK. /&")].toLocaleLowerCase();if(0===t){var s=S(">a765\x1fj");o=o.replace(new RegExp(s),"")}if(1===t&&(o=("."+o.replace(new RegExp(S("3jBA@d\x17")),"")).search(new RegExp(S("\x16K6")+n+"$"))>=0&&n),2===t)return!0;for(var a=0;a>>0)}d=t(f(7),e(f(4),f(0)),s.config.initConfigInfo.s)}(),e.forEach(t.settings,function(i){var o,s;i=e.extend({},{isEnabled:!0},i),s=r.findWhere({name:i.name}),s&&m.remove(s),m.hasValueInStorage(t.group,i.name)?i.value=m.getValueFromStorage(t.group,i.name):i.value=i.defaultValue,o=r.add(i),o.on(S("/SYS]SP\fAYUO^"),n)}),function(){function e(e,t){for(var n=0,i=0;i<10;i++)n+=e.charCodeAt(i);for(;n>33;){var r=n.toString().split("");n=0;for(var o=0;ol)return!0;if(0===t||e.get(S("D6.(:=)>8>")).length+t<=l)return!1;var i=(2-u)*l,r=n.indexOf(e),s=n.reduce(function(e,t,n){return n=s}var o=new t.Collection;e.forEach(i,function(e){o.add({column:e,groups:new t.Collection,size:0})});var s=n.reduce(function(e,t){return e+t.get(S("2@\\ZDC[LNH")).length},0),a=o.length,l=Math.ceil(s/a),u=0,c=s;return n.forEach(function(e){u6*j_")}),CKFinder.define(S("2GQMB\x16{r|RRY[Mo\x15'.4)'3-:e\x18$\"<;3$& {\x06>8*-9.(s:0\x14"),[],function(){return S("-\x12[T\x11Q_UFE\n\x1aZQ]\x11NVP25!606k,-09irG54.q;'z&>8*-9.(.d;\x05\x07\v\r\r\x11\x0f\b\x06I\x17\x16fdR\x1c\0\x10\x1cS\x17\x19\x17\x04\vDX\x18\x17\x1bS\fhnpwgprt%zbd~ymzd1gz9wwe5ptsyowk\x02\x1f(*_^X\x07LLLBBDZF__\bXQL\f^\x18DG@G\x02\x1eV`\x7fbsd8;a&+9;wfh!2\"\"h/.i*%e198cTV\x1b\x1a]C\r\x11H\f\r\x10\x190L\x06\v\x16P,R\x0e\t\x7f\x7f~D\n\n\x1a\x12]\x1d\x13arq>&fma%zbd~ymzdb?aqtrrj4uupdk10r`#!3=j__^d**:2},0\f\x04_A\x14\x17\x03\x14\r\x07\x1e\n\x18\x04\x01\x01RQ\x13\x01\x1d\x14[\x1f\x11\x1d\x1e\x1e\x12@\\\vrtg!:\x0f\x0f\x0e\x01rq4,dz!|p|t:f~xjmynhn0tEXQbFGTB^@K_EB@\\k\x11[G\x1a^SNKb\x1aPYD\x1ebn%+04)'>h\x14j61GGFYX)(iu?#v5;5;s-7\x0f\x13\x16\0\x11\x11\x15I\x03\f\x13\x18-\x0f\f\x1d\x15\x07\x1b\x12\0\x1c\x19\x19\v\"Z\x12\bS\x15\x1ayrY#o`\x7f'U'nb\x7f}bni1O3ih\x1c\x1e\x11\x10a`#\"cb*(+*-^]\x1a\b@^\x05GHW\\k\x11YVM\x15k\x19\\PIKP\\G\x1f=5\x05=0!"),[S("\x1d]TfHLGAW\tqAL]X\x03oO\\U\x1e{GQX`^]N"),S("\vOFHf~uwa;C\x7froj5Y}n{0cNNOAFRNGG|BIZ"),S("6ts\x7fSUXXL\x10\x16('47j\x04&;,e\b# > #8&6\x02<3 "),S("8M_CH\x1c}t\x06(,'!7i\x13-$:'-9+<\x7f\x02:<&!5\",*u\x1c.2+/N\x05\r\x17"),S("\x1ci{gT\0ahbLHCM[\x05\x7fI@^CQEW@\x1bf^XJMYNHN\x11l(.07'02i,&>")],function(e,t,n,i,r){"use strict";var o=e.extend({name:S(" rJLVQER\\\x7fCN["),tagName:S("\n\x7f~"),template:r,templateHelpers:function(){return{keys:this.getOption(S("(BOR_"))}}}),s=n.extend({name:S("\x19Issoj|UUQdVJSW~@O\\"),childViewContainer:S(")^ICIW"),childView:o,tagName:S("@5#!( "),className:S("C'. j;!%98.;;#"),template:i,initialize:function(e){this.collection=e.model.get(S("9ISSOJ\\551"))},childViewOptions:function(){return{keys:this.getOption(S("7S\\CH"))}}}),a=t.extend({name:S("\x1cNvpRUAVPVeHD\\GEzDKX"),template:"",childView:s,initialize:function(e){this.collection=e.model.get(S("\x11ua{`fd")),this.once(S("\r|j~uwa"),function(){this.$el.addClass(S("?5(o!(*%,e")+this.model.get(S("C'**2%'")))},this)},childViewOptions:function(){return{keys:this.getOption(S("\x1apydm"))}}}),l=t.extend({name:S("%uOG[^HYY]cYBFZZR"),childView:a,className:S('A7*i"4.,d(k9$c=5""<:&?!=y90:p-7\x0f\x13\x16\0\x11\x11\x15J\f\0\v\x07\x03\n'),template:"",childViewOptions:function(){return{keys:this.getOption(S("\x1etEXQ"))}}});return l}),CKFinder.define(S("<~uy)/&&6j\v(,<&.?b\x1d'?#&0!!%x\v15)(>++\x13"),[S("\vycjjbbq|fp"),S("\x1d|~CJ@LJ@"),S("\x14V]Qqw~~n2KkIM\rhA\\eHLL"),S('7{r|RRY[Mo\f-\'1)#4g\x1a"$>9-:$"}\x1e;13;+v\t33/*<\x15\x15\x11'),S("(jamECJJB\x1e\x7f\\P@ZRK\x16iSSOJ\\551l\x12,#0;f\x19##?:,%%!\x17=4:8?\x0f3>+"),S("\x13W^P~v}\x7fi3KwzWR\raEVC\bkFFGINZF__dZQB"),S("\x15U\\^pt\x7fyo1IIDUP\vgGTM\x06iDA]A\\YEWe]PA")],function(e,t,n,i,r){"use strict";function o(o){o.request(S("!IF]\x1fJN[]OE"),{key:n.slash}),o.on(S("\x11yvmqy`v#")+n.slash,function(n){if(n.finder.util.isShortcut(n.data.evt,S("\x13g}\x7fql"))){var s=i.createCollection();n.finder.fire(S("#WMIU\\J___\x17BFCE"),{groups:s},n.finder);var a={esc:{display:S("\nn\x7fn"),text:o.lang.shortcuts.keys.escape},del:{display:S(")NN@"),text:o.lang.shortcuts.keys.delete},ctrl:{display:S("\x12p`gz"),text:o.lang.shortcuts.keys.ctrl},downArrow:{display:S("\x1a=x|lm\x1b"),text:o.lang.shortcuts.keys.downArrow},leftArrow:{display:S("4\x13ZVJK\x01"),text:o.lang.shortcuts.keys.leftArrow},question:{display:"?",text:o.lang.shortcuts.keys.question},rightArrow:{display:S("0\x17@RFG\r"),text:o.lang.shortcuts.keys.rightArrow},upArrow:{display:S("\v*xo}b*"),text:o.lang.shortcuts.keys.upArrow}};s.forEach(function(e){var i=new t.Collection;n.finder.fire(S('C7-)5<*???w"%h')+e.get(S("\r`n}t")),{keys:a,shortcuts:i},n.finder),e.set(S("\x17kquih~kkS"),i)}),s.forEach(function(t){t.get(S("\x12`|zdc{lnh")).forEach(function(t){var n=[];e.forEach(t.get(S("2@\\ZDC[LNH")).split("|"),function(e){n.push(e.replace(/{|}/g,"").split("+"))}),t.set(S("\x1fSIMQPFSS["),n)})}),n.finder.request(S("2W]TZX_"),{name:S("\x1cNvpRUAVPVbNIEEL"),title:n.finder.lang.shortcuts.title,view:new r({finder:o,collection:i.createColumns(s,["a","b","c"]),keys:a}),buttons:[S("D*-\x04$&9.")],restrictHeight:!0})}}),o.on(S("\x15e\x7fwknxiim%LHQW\x1eBCIM[KG"),function(e){e.data.shortcuts.add({label:e.finder.lang.shortcuts.general.listShortcuts,shortcuts:S("|\v\x07+- 4h\x1e /"),attributes:{"data-role":S("9\\TSI[M"),"data-position":S("-HFHTV"),"data-tap-toggle":S(":]]QMZ"),role:S("\x1dmkAUWP"),tabindex:50},ui:{regions:S('7\x16ZQ]\x11NJ^441n&$4j:,-"##=')},events:{keydown:function(e){e.keyCode===t.tab&&(this.finder.util.isShortcut(e,"")||this.finder.util.isShortcut(e,S("\x0e|xxtg")))&&this.finder.request(S(this.finder.util.isShortcut(e,"")?"\x17~vyno'pzXU":"\vjbmzc+baqc"),{node:this.$el,event:e})}},initialize:function(e){this.once(S("\v~h`kuc"),function(){this.$el.attr(S('"BVLG\nDHHN@'),e.label)},this)},onRender:function(){var t=this;setTimeout(function(){t.$el.toolbar(),t.$el.toolbar(S(';IMZ^4$\x12"# \x16&,-#%+')),e.mobile.resetActivePageHeight()},0)}});return i}),CKFinder.define(S("\x1e\\kgKM@@T\beFN^@H]\0cESGAFtVJ\x16iO]IKL\x02 0"),[S("-D^ET@J"),S("@## /'))-"),S('A\x01\b\x02,(#-;e\x06#);#5"}\0 4""+\x1b;)s\v7:\x17\x12M0\x10\x04\x12\x12\x1b+\v\x19:\x04\v\x18')],function(e,t,n){"use strict";function i(e){this.bars=new t.Collection;var i=this;i.finder=e,e.setHandlers({"statusBar:create":function(t){if(!t.name)throw S('#v@WRMZ^\v_YO[EBpRF\x15UE]XN^\x1cS[Z$2b-%(#g8(8*!(:*"');if(!t.page)throw S('B\x11!43";=j88,::#\x133!n6$29-?{28;;\x13A\x12\x02\x03\0F\x17\t\x1b\v\x06\t\x19\v\x1d');var r=new n({finder:i.finder,name:t.name,label:t.label});return i.bars.add({name:t.name,page:t.page,bar:r}),r.render().$el.appendTo(S('>d$ 6"i&-!e9+,)pl')+t.page+S(":\x19a")),e.fire(S("&T\\H^^_oO]\nR@VUAS"),{name:t.name,page:t.page},e),r},"statusBar:destroy":function(t){var n=i.bars.findWhere({name:t.name});n&&(e.fire(S(",^ZNDDAqUG\fS]JNISD\x04")+t.name,null,e),n.get(S("\x16uyk")).destroy(),i.bars.remove(n))},"statusBar:addRegion":function(e){var t=i.bars.findWhere({name:e.name});t&&t.get(S("$GGU")).createRegion({id:e.id,name:e.id,priority:e.priority?e.priority:50})},"statusBar:showView":function(e){var t=i.bars.findWhere({name:e.name});t&&t.get(S("\x11prf"))[e.region].show(e.view)}})}return i}),CKFinder.define(S("\x1c^UYIOFFV\nkHL\\FN_\x02z@_]PRFF\x19aQ\\MH\x13iQP,##1\x06023''\x1c\"):"),[S("]556,*"),name:S("1f\\[YTVJpN^Q\x7fKK4.,"),template:S("$^]\x1a\b@^\x05@LLJ\\\x11ON"),modelEvents:{"change:isDisabled":function(e){e.get(S("!KP`LUFJEOO"))?this.$el.addClass(S(".ZY\x1cAGUAS\x1a\\PIZ^Q[[")).attr(S("/QC[R\x19Q_DY[V^X"),S("4ADB]")):this.$el.removeClass(S("D0/j;=+?)`*?11")).attr(S("2RF\\W\x1a\\PIZ^Q[["),S("%@FDZO"))},focus:function(){this.$el.focus()}},events:{click:S("\x1bnhp^CUKLJ"),keydown:function(e){this.trigger(S("\x0efdt\x7fxqlrxow"),{evt:e,view:this,model:this.model})},keyup:function(e){e.preventDefault(),e.stopPropagation()},focus:function(){this.$el.attr(S("=J^\"(,'!="),1)},blur:function(){this.$el.attr(S("\vxllf~uwk"),-1)}},onRender:function(){this.$el.button()},runAction:function(){var t=this.model.get(S("5WTLPUU"));e.isFunction(t)&&t(this)}});return n}),CKFinder.define(S("=}t\x06(,'!7i\n'-?')>a\x1b?>>15'%x\x0e0?,/r\n0\x0f\r\0\x02\x163\x0f\x02\x1f"),[S("\x13a{rrjjytnx"),S("\x1bvlkzRX"),S("\vOFHf~uwa;C\x7froj5Y}n{0cNOSKVOSM\x7fCN["),S(")i`jD@KUC\x1de]PAD\x17{[HY\x12wK%,\x14*!2"),S('$fmaAGNN^\x02c@TD^VG\x1abXWUXZNN\x11i)$50k\x11)($++9\x0e8:;??\x04:1"'),S("\x11QXR|xs}k5Nhtr0kD[`KAC")],function(e,t,n,i,r,o){"use strict";function s(t,n){var i=t.finder.request(S("D0/}/,>\x06#)+")),o=[S("!AHB\bRHGEHJ^\0G[U\\"),S(">\\+'o7+**%);g)99: >"),S(")I@J\0Z@_]PRF\x18_C]T\x17]S^KL!#.&d0/j*=$k9$c,?#<6&x7;4")];n.has(S("%EKIZYeM@K"))&&o.push(n.get(S("-MCQBA}UXS"))),i!==S("\x1fDDQHPJV")||n.get(S(":R_RPp.-;"))?o.push(S("D0/j*=$f%.!!}?='1-\"")):o.push(S('gawc}4~ro||sEE")),s[S("\x13ug\x7fv5}sh}\x7frzD")]=S("\x10e`fq")),n.has(S("D$23: (>8(="))&&(s=e.extend(s,n.get(S("&F\\]XBNXZJC")))),r.extend({attributes:s,className:o.join(" ")})}function a(e,t){var n=S('7[R\\\x16HRQS" 0n-1#*h*!-a9! <33!y!3/,');return t.has(S('>\\, 10\n$+"'))&&(n+=" "+t.get(S('"@HDUTfHGN'))),i.extend({finder:e.finder,name:S("'|FEGNL\\fDT_gQMB"),tagName:S("2W]C"),template:S("/KJ\x0f\x13]A\x18[Y[_W\x1c@C"),className:n,attributes:{"data-ckf-name":t.get(S("?. /&"))}})}function l(e,t){return t.set({attributes:{"data-show-more":!0},alwaysVisible:!0}),s(e,t)}function u(t,n){var r=t.finder.request(S("!WJ\x1eBCSeFNN")),s=[S("\x19ypz0jpOM@BV\bOSMD"),S("B /#k3'&&)-?c-%%&<:"),S("0RYU\x19AYXT[[I\x11TJZ-l$,'05&*%/k9$c-$?r&=x58*7?)q<23")];n.has(S("-MCQBA}UXS"))&&s.push(n.get(S("3WYWDKw[VY"))),r!==S('"GAVMSGY')||n.get(S("\nbob`@~}k"))?s.push(S("\x1dkv\rCVM\tLEHF\x04DDXHV[")):s.push(S("\x12f}8tcv4sxss3")+S(t.finder.lang.dir===S("E*3:")?"\x14ysql":"&UANB_")),s.push(S("\x15c~5pytr0")+n.get(S(")CHCC")));var a={"data-ckf-name":n.get(S("\x12}uxs")),title:n.get(S("&KIKOG")),tabindex:-1,href:n.get(S("\x18qh~z")),role:S("\x0frdfg{{")};return n.get(S("*B_iG\\QS^VP"))&&(s.push(S("\r{f=bfr`p;sqj{ypxz")),a[S("6VJP[\x16XTM^\"-''")]=S("K91'"));if(n===S("/CY]DyZDR")||e.get(S("D$*0)09\x1d%>'-<4")))return void(n===S("B0,*1\n';/")&&(a=e));var l=t.children.findByModelCid(e.cid),u=Math.ceil(l.$el.outerWidth(!0));e.get(S("\x1fHHFGAK"))?d(l):u+r>=o?(n===S("\x17zlnoss")&&(i+=1),d(l),e.set(S("\x16dpvmVso{"),!0)):r+=u,i||(s=l)}),i&&(a.set(S("E..,-/%"),!1),n.show(),n.removeAttr(S("2RF\\W\x1aPP^_YS")),s&&r+Math.ceil(n.outerWidth(!0))>o&&(d(s),s.model.set(S("\x1dmwOVoLV@"),!0))),t.$el.find(S("\x1e1CJD\x0ePJIKJHX\x06EYKB")).removeClass(m);var l=t.collection.findWhere({focus:!0});if(l){var u=t.children.findByModelCid(l.cid);u&&u.$el.focus()}}}function d(e){e.$el.hide(),e.$el.attr(S(")KYEL\x03GYUVVZ"),S('C073"')),e.trigger(S("%NNLMOE"))}function f(e){var t=e.get(S("+MAYNIBdZG\\T[]"))?v:0;return t-e.get(S(">O2(-1-1?"))}function h(e){e.model.get(S("\x1azptyqMDLW"))!==S("&WZ@GJ^T")&&e.$el.addClass(S("\x17{r|6hrqsB@P\x0eW@EHFMKYU")),e.model.get(S("\rzv`t"))===S("0RG@@Z[")&&e.$el.addClass(S("6TS_\x17OSRR]!3o*0 +")),e.model.get(S('"BHRG^[\x7fCXEOBJ'))&&e.$el.attr(S(">[!5#n'. j)%=*5>c99\";180"),S("-Z]ET"))}function g(e){var t=e.collection.filter(function(e){return!(e.get(S("'@@NOIC"))===!0||e.get(S('C0<6"'))===S("\x10rg``z{")||e.get(S("=JF0$"))===S("\x0fdtjg"))}),n=[],i=[];return t.forEach(function(t){t.get(S("E'+!.$&)#:"))===S(e.finder.lang.dir===S(",AZ]")?"C47/*);3":" RG@KKBFZP")?n.push(t):i.unshift(t)}),n.concat(i)}var p,v=9e5,m=S(">\\+'o7+**%);g\"8(#b88671;");return p=n.extend({name:S("@\x15-,(''5\x1e /<"),attributes:{"data-role":S(":SY\\ZZ2"),role:S("\rln~\x7fwa")},childViewContainer:S("\x169{r|6hrqsB@P\x0eMQCJ["),template:S("\x0e3txd3`tt~v}\x7fc!?//\x02\x01AOEVU\x1a\nJAM\x01YA@\\SSA\x19\\BRUJ\x18\x1bNRRZ}c6,+)$&:ktwc)'9n"),events:{keydown:function(e){var t=e.keyCode;if(t===o.tab&&this.finder.util.isShortcut(e,""))return void this.finder.request(S("\x0fv~qfg/xr`m"),{node:this.ui.items,event:e});if(t>=o.left&&t<=o.down||t===o.home||t===o.end){e.stopPropagation(),e.preventDefault();var n=g(this);if(!n.length)return;var i=this.finder.lang.dir===S("\x1esTS")?o.end:o.home,r=t===o.left||t===o.up||t===i?n.length-1:0;this.children.findByModel(n[r]).$el.focus()}},"focus @ui.items":function(e){if(e.target===e.currentTarget){e.preventDefault(),e.stopPropagation();var t=g(this);if(t.length){var n=this.finder.lang.dir===S("#HQT")?0:t.length-1;this.children.findByModel(t[n]).$el.focus()}}}},ui:{items:S("&\tKBL\x06XBACRP@\x1e]ASZK")},onRender:function(){var e=this;setTimeout(function(){e.$el.toolbar(e.toolbarOptions),e.$el.toolbar(S("@42'%1#\x17)./\x1b-)*&>6")),t.mobile.resetActivePageHeight(),e.$el.attr(S("*OMYO\x02SZT\x1e@ZY[ZXH"),e.name),e.finder.fire(S("\fya`|ssa.vdrym\x7f"),{name:e.name,page:e.page},e.finder)},0)},initialize:function(t){var n=this;n.name=t.name,n.page=t.page,n.toolbarOptions={position:S("\x11tzlpr"),tapToggle:!1,updatePagePadding:!0},n.on(S('9H^RY[Mz"-/( %3!&$'),function(){n.$el.addClass(S(":XW[\x13K/..!%7"))}),n.on(S("\x0fqefrw}Tb~\x7f\x7fi"),c,n),n.on(S(':XTTR[6(\'4~,2"%"/2("9!'),function(t,i){var r,s,a=i.evt;if(a.keyCode===o.up||a.keyCode===o.left||a.keyCode===o.down||a.keyCode===o.right){a.stopPropagation(),a.preventDefault();var l=g(n);r=e.indexOf(l,t.model),a.keyCode===o.down||a.keyCode===o.right?(s=r+1,s=s<=l.length-1?s:0):(s=r-1,s=s>=0?s:l.length-1),this.children.findByModel(l[s]).$el.focus()}a.keyCode!==o.enter&&a.keyCode!==o.space||(a.stopPropagation(),a.preventDefault(),e.isFunction(t.runAction)&&t.runAction())})},getChildView:function(e){var t=e.get(S("\n\x7fu}k"));return t===S("=]J35-.")?e.get(S(";JT[H")):t===S("/CY]DyZDR")?l(this,e):t===S("-ZJHE")?a(this,e):t===S("\x15z~vr7yiijpN")?u(this,e):s(this,e)},focus:function(){t(this.childViewContainer).focus()}})}),CKFinder.define(S("\x0eL[W{}ppd8Uv~npxm0tNMOFDTT\x07}ED@OO]"),[S("\x1ejNEGQWFIUM"),S("1XBAPDN"),S("\x11prw~txv|"),S("7{r|RRY[Mo\f-'1)#4g\x1d%$ //=#~\x04:1\"%x\f657><,\t\t\x04\x15"),S("\x13W^P~v}\x7fi3Pq{UMGP\vfII\\LR_aH@Z\x1fg[VCF\x19tWWN^DIsZ.4\x14*!2")],function(e,t,n,i,r){"use strict";function o(e,t){this.name=t,this.finder=e,this.currentToolbar=new l}var s=30,a=n.Model.extend({defaults:{type:S("\x15tblmuu"),alignment:S("E65!$+95"),priority:s,alwaysVisible:!1}}),l=n.Collection.extend({model:a,comparator:function(e,t){var n=e.get(S(";]QWX.,'-0"));if(n!==t.get(S(".N\\XU]YPXC")))return n===S("C47/*);3")?-1:1;var i=e.get(S("\x1akntqmIU[")),r=t.get(S("C47/(: >2"));if(i===r)return 0;var o=n===S("$UTNEHXR")?1:-1;return iyzdr5o\x7fiht}~L"),iconOnly:!0,type:S("\x11a{{b[xj|"),label:o.finder.lang.common.showMore,priority:-10,hidden:!0,action:function(){var e=new n.Collection;o.currentToolbar.chain().filter(function(e){return!!e.get(S("/CY]DyZDR"))}).forEach(function(t){e.push({action:t.get(S("\x1e~CUKLJ")),isActive:!0,icon:t.get(S(".FS^\\")),label:t.get(S("$IGEME")),hidden:!1})});var t=o.toolbarView.children.findByModel(o.currentToolbar.findWhere({type:S("\x1ahtriROSG")}));o.currentToolbar.showMore=new r({finder:o.finder,collection:e,positionToEl:t.$el}).render(),o.currentToolbar.showMore.once(S("?$$176*?"),function(){o.currentToolbar.showMore=!1,t.$el.focus()})}}),o.currentToolbar.reset(s.toolbar.toArray())},o.prototype.init=function(e,t){var n=this;n.toolbarView=new i({finder:e,collection:n.currentToolbar,name:n.name,page:t}),n.toolbarView.on(S("=]W)-&5- 1} ./)#"),function(e){e.model.set(S(">W)%&&*"),!0)}),n.toolbarView.render().$el.prependTo(S(":`X\\J^m\")%i5' -th")+t+S("\x198F"))},o.prototype.destroy=function(){this.toolbarView.destroy(),this.currentToolbar.reset()},o.prototype.redraw=function(){this.currentToolbar.forEach(function(t){if(t.get(S(")^R\\H"))!==S("\v\x7feax]~`v")&&t.set(S(" IKG@@H"),!1),t.has(S("7WWh^XO_H"))){var n=t.get(S("\x13{{Dr|k{l"));e.isFunction(n)&&n.call(t)}}),this.toolbarView.render()},o.prototype.hideMore=function(){this.currentToolbar.showMore&&this.currentToolbar.showMore.destroy()},o}),CKFinder.define(S("-mdvX\\WQG\x19zW]OWYN\x11k/..!%75h\x1c&%'.,<<"),[S(";VLKZ28"),S("B6*!#5;*%9)"),S("\x0frpqxvzxr"),S('A\x01\b\x02,(#-;e\x06#);#5"}\x07;::59+)t\b213\x02\0\x10'),S("\x1c^UYIOFFV\nsSAE\x05`ITm@TT")],function(e,t,n,i,r){"use strict";function o(){this.toolbars=new n.Collection}function s(e){e.get(S("\x11f|{ytvj")).destroy(),this.toolbars.remove(e),this.finder.fire(S('\x10e}|xwwe"}\x7fhhoqf'),{name:e.get(S("\r`n}t"))},this.finder)}function a(t){t.request(S(":PYD\x04S)26&*"),{key:r.f7}),t.on(S(">T%8&,3+|")+r.f7,function(n){t.util.isShortcut(n.data.evt,S("\x1azpi"))&&(n.data.evt.preventDefault(),n.data.evt.stopPropagation(),e(S(";\x12HW\x120 %&i$%3!?/kb.%)}%=<877%u0.>1.")).focus())}),t.on(S("\x17kquih~kkS\x1bNJWQ\x1c@MGOYMA"),function(e){e.data.shortcuts.add({label:e.finder.lang.shortcuts.general.focusToolbar,shortcuts:S('"XEIRZ\x03RL\x1cQ')})},null,null,20)}var l=S(":XW[\x13K/..!%7k1!:#) (");return o.prototype={getHandlers:function(){return{"toolbar:create":{callback:this.toolbarCreateHandler,context:this},"toolbar:reset":{callback:this.toolbarResetHandler,context:this},"toolbar:destroy":{callback:this.toolbarDestroyHandler,context:this}}},setFinder:function(n){function i(t){o.toolbars.where({page:t}).forEach(function(e){e.get(S("\x12g{zzuyk")).redraw()}),r=e(document).width()}this.finder=n,a(n);var r=0;n.on(S("2F]\x0fDRKP@^"),function(){var t=e(document).width();if(r!==t){var o=n.request(S("/@PUV\x0eVCEJ\\TO"));i(o)}}),n.on(S("']@\x10I@X\\"),function(){o.toolbars.where({page:n.request(S("\r~nwt(pagdrvm"))}).forEach(function(e){e.get(S("1F\\[YTVJ")).hideMore()})});var o=this;n.on(S("\x15fv\x7f| htri"),function(t){var n=t.data.page;i(n),o.toolbars.where({page:n}).length?e(S("*ICIW")).addClass(l):e(S("\x1d|pDX")).removeClass(l)}),n.on(S("\x16gy~\x7f!xxmkRN["),function(e){t.forEach(this.toolbars.where({page:e.data.page}),s,this)},this)},toolbarCreateHandler:function(t){this.toolbarDestroyHandler(t);var n=new i(this.finder,t.name);this.toolbars.add({page:t.page,name:t.name,toolbar:n}),n.init(this.finder,t.page);var r=this.finder.request(S("6GY^_\x01_HLM%/6"));t.page===r&&e(S("!@L@\\")).addClass(l)},toolbarDestroyHandler:function(t){var n=this.toolbars.where({name:t.name})[0];n&&(s.call(this,n),n.page===this.finder.request(S("%VFOL\x10HY_\\J^E"))&&e(S("\x1d|pDX")).removeClass(l))},toolbarResetHandler:function(e){var n=this.toolbars.where({name:e.name})[0];if(n){var i=t.extend({},e.context);n.get(S("\x14ayxt{{i")).reset(e.event,i)}}},o}),CKFinder.define(S("\x13W^P~v}\x7fi3Pq{UMGP\vpVKGHNmEAKmEEF\\Z\x1acGTV[_zTRZ\x02467++"),[S("\x14V]Qqw~~n2KkIM\rhA\\eHLL")],function(e){"use strict";function t(e){e.on(S("(]ED@OO]\nCW@QA\fzYPT\x01ZRR[%3"),n),e.on(S("\x1fTNMOFDT\x1dZLYNX\x17cNY_\bU]YS"),n),e.on(S("\x15bxwuxzn'lzSDV\x19iDOI\x12OCGI^"),n),i(e)}function n(e){var t=e.finder.request(S("\x1fFNNGAW\x1c@M]kHXDXJ"));t.get(S(",LMC")).fileUpload&&e.data.toolbar.push({name:S("-{_\\^SW"),type:S("\x18{oohrp"),priority:80,icon:S("\x16ts\x7f7nlqq~D"),label:e.finder.lang.common.upload,action:function(){e.finder.request(S("\vy}b`qu"))}})}function i(t){t.request(S("=UZ9{.*71#)"),{key:e.u}),t.on(S("\ffkvt~e}.")+e.u,function(e){t.util.isShortcut(e.data.evt,S("\x11s\x7f`"))&&t.request(S("\x1chnsO@F"))}),t.on(S("/CY]A@VCCK\x03VROI\x04Y)-'0"),function(e){e.data.shortcuts.add({label:e.finder.lang.shortcuts.files.upload,shortcuts:S("\x14nw{ld1`i`")})},null,null,40)}return t}),CKFinder.define(S("\x14V]Qqw~~n2SpDTNFW\nkHL\\FN_"),[S("3A[RRJJYTNX"),S('>]!")!++#'),S("\rMDVx|wqg9Zw}owyn1\\SSDwKNCIeHDJKH\\\0sB@U`Z]RVt[U]Z[M"),S("\x0eL[W{}ppd8Uv~npxm0cNLMAFRHZ\x06iDBCKLD^@"),S("\nHGKgatt`a\t?2' \x19486?<(t\x1a2=*\x13,\x03\r\x05\x02\x03\x15"),S("&dcoCEHH\\\0}^VFXPE\x18~VV_YOM\x10\x06..'!75"),S("\x12P_S\x7fy||h4QrzjLDQ\fbJTJ}YFDMI\x01i_C_fDYYV\\"),S("\vOFHf~uwa;Xysmu\x7fh3UjrL\x14wSHJGC\x07a^F@\x18{_\\^SW"),S("\fNEIy\x7fvvf:[x|lv~o2UzYmKPP@HBZ\x06aNUaG\\DT\\VF"),S("%eln@DOI_\x01b_UG_QF\x19{WX^^N\x12rP!%'1"),S("B\0\x0f\x03/),,8d\x01\"*:<4!|\x194.>50 >s\x10?'\t\f\v\x19\x01"),S("-mdvX\\WQG\x19zW]OWYN\x11o!&'0k\x15' -:"),S("3w~p^V]_I\x13pQ[5-'0k\x15')-%9d\x1c, *<\""),S("(jamECJJB\x1e\x7f\\P@ZRK\x16h^R\\SZ\x06(.&k\x17#))$/\r%!+"),S("\x12P_S\x7fy||h4QrzjLDQ\fv@HFELlD@IK]\x1fcW]UXSqWU^^N"),S("'kblBBIK]\x1f|]WAYSD\x17\x7fSWHXLy)-'0k\x03/+<,8\r%!+<"),S('5u|~PT_YO\x11r/%7/!6i\x14-=>""*=`\x034&\'=;1$'),S("\x0eL[W{}ppd8Uv~npxm0sIMQPFSS[\x06yCC_ZLEEA"),S("1qxr\\XS]K\x15vSYKS%2m\x100$22;\v+9c\x1e:.$$!\x115'"),S("\nHGKgatt`?##")],function(e,t,n,i,r,o,s,a,l,u,c,d,f,h,g,p,v,m,w,C,y,b,x,F,_,E,M,I,T,D,P){"use strict";function O(t,n,i){if(R[t]&&(!i||!e.contains(i,t))){var r=new R[t](n.finder);n.add(r),r.getHandlers&&n.finder.setHandlers(r.getHandlers()),r.setFinder&&r.setFinder(n.finder)}}var A=[S("\x1c^lzAUGeKIBBZ"),S("\x16S}u\x7foy[wsE"),S("\x1a_yq{kEgMO@@T"),S("\x1d[{IUkNEBC"),S("\x10W{\x7fqf[xn|Ytld"),S("\x17^vhvImrpAE"),S(';tISSu\x142/+$"'),S("B\x11!+'*-\x0f#')"),S("\x16E}w{vy[qsDDP"),S("3aEZXY]|RPX|J45--")],R={CsrfTokenManager:n,Connector:i,ContextMenu:r,CreateFolder:o,DeleteFile:s,DeleteFolder:a,Dialogs:l,EditImage:u,FileDownload:c,FilePreview:d,Files:f,FilesMoveCopy:h,Folders:p,FocusManager:g,FormUpload:v,Html5Upload:m,KeyListener:w,Loader:C,Maximize:y,Pages:b,Panels:x,RenameFile:F,RenameFolder:_,FilterFiles:E,Settings:M,Shortcuts:I,StatusBar:T,Toolbars:D,UploadFileButton:P},V=t.Collection.extend({init:function(t){var n=this;n.finder=t;var i=t.config.readOnlyExclude.length?t.config.readOnlyExclude.split(","):[],r=!!t.config.readOnly&&e.union(A,i);t.config.removeModules&&(r=e.union(r?r:[],t.config.removeModules.split(","))),O(S("\x1eSO@FFV"),n,r),O(S("\x13RzubkT{u}z{m"),n,r),O(S("@\n':\b,53-'/9"),n,r),O(S("-m\\BWf\\_PXzYW[\\YO"),n,r),O(S("\x18Zuurx}kOS"),n,r),O(S("'{L^_ECI\\"),n,r),O(S("(yKEIA]"),n,r),O(S("\x13P|w{w~i"),n,r),O(S("A\x01,*1#?<\x04/%9"),n,r),O(S("\r^nwta"),n,r),O(S("&sGFFIM_]"),n,r),O(S("\x1dMkAUWPfDT"),n,r),O(S("@\x07+/!6"),n,r),O(S("\x1c[qsDDPP"),n,r),O(S('D\x064")=/\r#!**"'),n,r),O(S("+hHBJDTt\\XQSE"),n,r),O(S("B\x11!+'*-\x0f%'((<"),n,r),O(S("E\0.$,9\x06#;+\f?!+"),n,r),O(S("8k_U]P[y)-'"),n,r),O(S("\vHhbjdtTzxp"),n,r),O(S('\x12[`xz"Mivt}y'),n,r),O(S("'nFXFy]B@QU"),n,r),O(S('"vTIIFLoCGIo[[D^\\'),n,r),O(S("-hF\\EWAr\\ZRK"),n,r),O(S("\x1eRAYKNM_C"),n,r),O(S("0w[_QeDRNP_L"),n,r),O(S("\x1bZtrzdNUMHJGC"),n,r),O(S("\x0eJtxfZytqr"),n,r),O(S("4f^XJMYNHN"),n,r)}});return V}),CKFinder.define(S("%eln@DOI_\x01yYTE@\x1baSZHU[OY~_\\($"),[S(";ISZZ22!,6 "),S("\x1cyqK")],function(e,t){"use strict";function n(e){this.finder=e,this._templates={}}return n.prototype.has=function(e){return!!this.get(e)},n.prototype.get=function(e){return this._templates[e]},n.prototype.compile=function(n,i,r){e.isFunction(r)&&(r=r.call(this));var o={imports:r,name:n,template:i};this.finder.fire(S("\fykb`}sgq"),o,this.finder),this.finder.fire(S("\x1bhxsoL@VF\x1e")+n,o,this.finder);var s=t.template(o.template,null,o.imports);return this._templates[n]=s,s},n}),CKFinder.define(S('.l{w[]PPD\x18nP_LO\x12jZ-1."0 \x14"&-/9)?'),[S("2FZQSEKZUIY"),S("B.%7/(&,>?)")],function(e,t){"use strict";function n(e){this.finder=e}return n.prototype.render=function(n,i,r,o){var s;if(s=this.finder.templateCache.has(i)?this.finder.templateCache.get(i):this.finder.templateCache.compile(i,r,{}),!s)throw new t.Error({name:S('"vJACAAGOOxHC_\\PFVqGDXJ'),message:S('3wTXYWM\x1aIYSZZ2a6+!e2"%9&*8(n<9?16t<"w1*z5)12\x7f\x0f\x13B\x16\n\x01\x03\x01\x01\x07\x0f\x0fB')});var a=e.extend(this.mixinTemplateHelpers(n.toJSON(),o));return t.Renderer.render(s,a)},n.prototype.mixinTemplateHelpers=function(t,n){return t=t||{},e.extend(t,{lang:this.finder.lang,config:this.finder.config},n)},n}),CKFinder.define(S("\x1aXW[wqDDP\feUVKAJK_EB@"),[S("#QKBBZZID^H"),S("\x10{cfqgo"),S("\x10u}G"),S("\x1b~|}tBNLF"),S(" bieMKBBZ\x06iDBKGH"),S('"`ocOILLX\x04i[KAD'),S("(jamECJJB\x1egG]Y\x19bLPV"),S(">|\v\x07+- 4h\x1d=#'c\x01/!7"),S("'kblBBIK]\x1fd{\x1ca|~V[RI"),S("\x0fSZTzzqse7Ivn{tpl\x0fqNVCLHT"),S('8zq}USZZ2n\x0f, 0*";f\x07$(8"*#'),S("\x17[R\\rry{m\x0fwKFSV\tsMDZGMYKlQRZV"),S("\x1b_VXvNEGQ\vsOB_Z\x05\x7fI@^CQEWaQ[RRJ\\H")],function(e,t,n,i,r,o,s,a,l,u,c,d,f){"use strict";function h(){var e,t,n;n=this,g(n),n._modules.init(n),t=n.config.resourceType,e={name:S("\x10X|z`")},t&&(e.params={type:t}),n.once(S("\x15uxut{ux'qt\x1ahLJP"),function(e){n.config.initConfigInfo=e.data.response},null,null,1),n.once(S("\x1axsps~NE\x18LO\x1foIA]"),function(){n.fire(S("+M]^\x15CESA@"),{},n)},null,null,999),n.once(S("\vobcbq\x7fv){~,P}m\\rpxm"),function(){n.fire(S("3UEF\rJ\\[_E"),{},n)},null,null,999),n.fire(S("2RDE\f[WX^^X"),{},n),n.request(S("C'*+*)'.q?( +"),e)}function g(t){var n,i=t.config,r={ckfinder:t},o=S("\x19ypztp{ESpFEA_");try{n=new CustomEvent(o,{detail:r})}catch(e){n=document.createEvent(S("\x12Vbpxc")),n.initEvent(o,!0,!1),n.detail=r}window.dispatchEvent(n),e.isFunction(i.onInit)?i.onInit(t):"object"==typeof i.onInit&&i.onInit.call(void 0,t)}function p(e){var t,n=e.data.response.error.number;t=e.data.response.error.message?e.data.response.error.message:n&&this.lang.errors.codes[n]?this.lang.errors.codes[n]:this.lang.errors.unknown.replace(S("C?+3**,86"),n),this.request(S("-JFQ]]T\x0e\\XQW"),{msg:t,name:S("+oBCBQ_VvFGYE")})}return n.templateSettings.doNotSkipEncoded=!0,{start:function(r){r.type&&(r.resourceType=r.type);var g={_reqres:new i.Wreqr.RequestResponse,_plugins:new u,_modules:new c,config:r,util:s,Backbone:i,_:e,doT:n};return g.templateCache=new d(g),g.renderer=new f(g),g.hasHandler=function(){return this._reqres.hasHandler.apply(g._reqres,arguments)},g.getHandler=function(){return this._reqres.getHandler.apply(g._reqres,arguments)},g.setHandler=function(){return this._reqres.setHandler.apply(g._reqres,arguments)},g.setHandlers=function(){return this._reqres.setHandlers.apply(g._reqres,arguments)},g.request=function(){return this._reqres.request.apply(g._reqres,arguments)},e.extend(g,o.prototype),g.on(S("\x16twtwzry$zRSMQ"),p,g),g.on(S("\x19ytqp\x7fqD\x1bGQVJT\x1daGC_"),function(){t(S("\x0fxe\x7f\x7f")).removeClass(S("4@_\x1aUVXRPX\x13M%/&&6,( "))}),g.on(S("?!12y!74(:"),function(e){alert(S("2p[@ZS\x18WUO\x1cNJ^25b\0\x0f\x03/),,8ql")+e.data.msg)}),g.on(S("\x12`|zdc{lnh&qwlT"),function(e){e.data.groups.add({name:S("\x19}~rxl~L"),priority:10,label:e.finder.lang.shortcuts.general.title})}),g.on(S(';OUQM4"777\x7f*.;=p,)#+=1='),function(e){e.data.shortcuts.add({label:e.finder.lang.shortcuts.general.action,shortcuts:S("?;$,7!7;")}),e.data.shortcuts.add({label:e.finder.lang.shortcuts.general.focusNext,shortcuts:S('@:6"&8')}),e.data.shortcuts.add({label:e.finder.lang.common.close,shortcuts:S("(ROXOP")})},null,null,60),g.once(S("\x0e\x7f|duzz/w{tK\x7fzxd"),h,g),a.init(g.config).fail(function(){g.fire(S("%GWX\x13OY^B\\"),{msg:S("/|P\\TATQR\x18_SWY\x1dWL`,+07,( h&8k.?!$5?")},g)}).done(function(t){g.lang=t;var n=r.skin;n.indexOf("/")<0&&(n=S("A1(-+5h")+n+S(" \x0eQHMK")),window.CKFinder.require([n],function(t){e.isFunction(t.init)&&(t.path=g.util.parentFolder(n)+"/",t.init(g)),l.init(g),g._plugins.load(g)})}),g}}}),CKFinder.define(S(";OVWQ3n(21 4>e$%)%!+`#:;="),{config:function(e){return e.iconsCSS||(e.iconsCSS=S(";OVWQ3n(21 4>e$%)%!+`92=='{5$+")),e.themeCSS||(e.themeCSS=S("\x1esICQ\fNTSBZP\x04FCOGCU\x1fF[QXS\x19[JI")),e},init:function(){CKFinder.require([S('C.43":0')],function(e){e(S("\x13vzrn")).addClass(S("2F]\x18_TWW\x17ZPI"))})}});CKFinder.define(S("6DSPTH\x13PQP..m0/,("),{config:function(e){return e.swatch="a",e.dialogOverlaySwatch=!0,e.loaderOverlaySwatch=!0,e.themeCSS||(e.themeCSS=S(".\\[X\\@\x1bXYXVV\x15XW[WQ$$0m'65")),e.iconsCSS||(e.iconsCSS=S("0BYZZF\x19ZWVTT\x13T]P.2l 76")),e},init:function(){CKFinder.require([S("\x1euQTGQ]")],function(e){e(S("\x0em\x7fuk")).addClass(S(",XG\x02Q]F\x1e]VYY"))})}});window.CKFinder=window.CKFinder||{},window.CKFinder.require=CKFinder.require||window.require||require,window.CKFinder.requirejs=CKFinder.requirejs||window.requirejs||requirejs,window.CKFinder.define=CKFinder.define||window.define||define,window.CKFinder.basePath&&window.CKFinder.requirejs.config({baseUrl:window.CKFinder.basePath}),window.CKFinder.requirejs.config({waitSeconds:0}),window.CKFinder.define(S("\x1e|KG}DHJDFD"),function(){return window.CKFinder});var event,eventType=S("\x12p\x7fs\x7fy||hIylkvRDpFEA_");try{event=new CustomEvent(eventType)}catch(e){event=document.createEvent(S("/uGW]@")),event.initEvent(eventType,!0,!1)}window.dispatchEvent(event),window.CKFinder.start=function(e){function t(e){[e.jqueryMobileStructureCSS,e.coreCSS,e.jqueryMobileIconsCSS,e.iconsCSS,e.themeCSS].forEach(function(e){if(e){var t=window.document.createElement(S(".CY_Y"));t.setAttribute(S(",_KC"),S("\x15ecau\x7fhtx{k")),t.setAttribute(S(" IPFB"),CKFinder.require.toUrl(e)+S("\x19%myo#uLXZA\x15")),window.document.head.appendChild(t)}})}e=e||{},window.CKFinder.require([S("-[ATT@@WZDR"),S("\x1c^UYIOFFV\neHFOCL"),S("E\x05\f\x0e $/)?a\x1a$8>|\x01!?;")],function(n,i,r){function o(e,t,i){var o,a,l=[S("3]Q"),S("\x17l`j~"),S("#V@UH][INxT^J"),S("6[YW]xSY["),S("$fmbL@^D^"),S("\x17[R_\x7fuiqmfTL@jPK")];if(a=n.pick(r.getUrlParams(),l),a.langCode&&(a.language=a.langCode),a.type&&(a.resourceType=a.type),a.CKEditor){a.chooseFiles=!0;var u=a.CKEditorFuncNum;a.ckeditor={id:a.CKEditor,funcNumber:u,callback:function(e,t){window.opener.CKEDITOR.tools.callFunction(u,e,t),window.close()}}}delete a.langCode,delete a.CKEditor,delete a.CKEditorFuncNum;var c;c=window!==window.parent&&window.opener||window.isCKFinderPopup?window.opener:window.parent.CKFinder&&window.parent.CKFinder.modal&&window.parent.CKFinder.modal(S(",[G\\YS^V"))||window!==window.parent&&!window.opener?window.parent:window,
+o=n.extend({},e,t,c.CKFinder?c.CKFinder._config:{},i,a),s(o,function(e){e.start(o)})}function s(e,i){var r=e.skin;r.indexOf("/")<0&&(r=S("/CZ[]G\x1a")+r+S(")\x05XGD@")),window.CKFinder.require([r],function(i){var r=n.isFunction(i.config)?i.config(e):i.config;t(n.extend(e,r))}),window.jQuery&&/1|2\.[0-9]+.[0-9]+/.test(window.jQuery.fn.jquery)?a(e,i):window.CKFinder.require([window.CKFinder.require.toUrl(e.jquery)+S("7\x07O_I\x01WRF8#s")],function(){a(e,i)})}function a(e,t){window.CKFinder.define(S("A(21 4>"),function(){return window.jQuery}),window.jQuery(window.document).bind(S("\x19wt~trzIOKW"),function(){window.jQuery.mobile.linkBindingEnabled=!1,window.jQuery.mobile.hashListeningEnabled=!1,window.jQuery.mobile.autoInitializePage=!1,window.jQuery.mobile.ignoreContentEnabled=!0}),window.CKFinder.require([window.CKFinder.require.toUrl(e.jqueryMobile)+S("8\x06L^N\0TS99 r")],function(){window.CKFinder.define(S("0RYU\x19_GB]KC\x16QR\\V,$"),function(){return window.jQuery.mobile}),window.CKFinder.require([S("6ts\x7fSUXXL\x10\x0112/-&'3!&$")],t)})}var l=n.isUndefined(e.configPath)?i.configPath:e.configPath;return l?void window.CKFinder.require([window.CKFinder.require.toUrl(l)],function(t){o(i,t,e)},function(){o(i,{},e)}):void o(i,{},e)})}}}}();
\ No newline at end of file
diff --git a/lib/ckfinder/config.js b/lib/ckfinder/config.js
new file mode 100644
index 0000000..63df7c8
--- /dev/null
+++ b/lib/ckfinder/config.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2007-2016, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.html or http://cksource.com/ckfinder/license
+ */
+
+var config = {};
+
+// Set your configuration options below.
+
+// Examples:
+// config.language = 'pl';
+// config.skin = 'jquery-mobile';
+
+CKFinder.define( config );
diff --git a/lib/ckfinder/config.php b/lib/ckfinder/config.php
new file mode 100644
index 0000000..086dca9
--- /dev/null
+++ b/lib/ckfinder/config.php
@@ -0,0 +1,175 @@
+ 'default',
+ 'tags' => '.ckfinder/tags',
+ 'logs' => '.ckfinder/logs',
+ 'cache' => '.ckfinder/cache',
+ 'thumbs' => '.ckfinder/cache/thumbs',
+);
+
+/*============================ Images and Thumbnails ==================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_images
+
+$config['images'] = array(
+ 'maxWidth' => 1600,
+ 'maxHeight' => 1200,
+ 'quality' => 80,
+ 'sizes' => array(
+ 'small' => array('width' => 480, 'height' => 320, 'quality' => 80),
+ 'medium' => array('width' => 600, 'height' => 480, 'quality' => 80),
+ 'large' => array('width' => 800, 'height' => 600, 'quality' => 80)
+ )
+);
+
+/*=================================== Backends ========================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_backends
+
+$config['backends'][] = array(
+ 'name' => 'default',
+ 'adapter' => 'local',
+ 'baseUrl' => '/ckfinder/userfiles/',
+// 'root' => '', // Can be used to explicitly set the CKFinder user files directory.
+ 'chmodFiles' => 0777,
+ 'chmodFolders' => 0755,
+ 'filesystemEncoding' => 'UTF-8',
+);
+
+/*================================ Resource Types =====================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_resourceTypes
+
+$config['defaultResourceTypes'] = '';
+
+$config['resourceTypes'][] = array(
+ 'name' => 'Files', // Single quotes not allowed.
+ 'directory' => 'files',
+ 'maxSize' => 0,
+ 'allowedExtensions' => '7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xlsx,zip',
+ 'deniedExtensions' => '',
+ 'backend' => 'default'
+);
+
+$config['resourceTypes'][] = array(
+ 'name' => 'Images',
+ 'directory' => 'images',
+ 'maxSize' => 0,
+ 'allowedExtensions' => 'bmp,gif,jpeg,jpg,png',
+ 'deniedExtensions' => '',
+ 'backend' => 'default'
+);
+
+/*================================ Access Control =====================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_roleSessionVar
+
+$config['roleSessionVar'] = 'CKFinder_UserRole';
+
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_accessControl
+$config['accessControl'][] = array(
+ 'role' => '*',
+ 'resourceType' => '*',
+ 'folder' => '/',
+
+ 'FOLDER_VIEW' => true,
+ 'FOLDER_CREATE' => true,
+ 'FOLDER_RENAME' => true,
+ 'FOLDER_DELETE' => true,
+
+ 'FILE_VIEW' => true,
+ 'FILE_CREATE' => true,
+ 'FILE_RENAME' => true,
+ 'FILE_DELETE' => true,
+
+ 'IMAGE_RESIZE' => true,
+ 'IMAGE_RESIZE_CUSTOM' => true
+);
+
+
+/*================================ Other Settings =====================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html
+
+$config['overwriteOnUpload'] = false;
+$config['checkDoubleExtension'] = true;
+$config['disallowUnsafeCharacters'] = false;
+$config['secureImageUploads'] = true;
+$config['checkSizeAfterScaling'] = true;
+$config['htmlExtensions'] = array('html', 'htm', 'xml', 'js');
+$config['hideFolders'] = array('.*', 'CVS', '__thumbs');
+$config['hideFiles'] = array('.*');
+$config['forceAscii'] = false;
+$config['xSendfile'] = false;
+
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_debug
+$config['debug'] = false;
+
+/*==================================== Plugins ========================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_plugins
+
+$config['pluginsDirectory'] = __DIR__ . '/plugins';
+$config['plugins'] = array();
+
+/*================================ Cache settings =====================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_cache
+
+$config['cache'] = array(
+ 'imagePreview' => 24 * 3600,
+ 'thumbnails' => 24 * 3600 * 365,
+ 'proxyCommand' => 0
+);
+
+/*============================ Temp Directory settings ================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_tempDirectory
+
+$config['tempDirectory'] = sys_get_temp_dir();
+
+/*============================ Session Cause Performance Issues =======================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_sessionWriteClose
+
+$config['sessionWriteClose'] = true;
+
+/*================================= CSRF protection ===================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_csrfProtection
+
+$config['csrfProtection'] = true;
+
+/*============================== End of Configuration =================================*/
+
+// Config must be returned - do not change it.
+return $config;
diff --git a/lib/ckfinder/core/connector/php/connector.php b/lib/ckfinder/core/connector/php/connector.php
new file mode 100644
index 0000000..537698b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/connector.php
@@ -0,0 +1,20 @@
+run();
diff --git a/lib/ckfinder/core/connector/php/vendor/autoload.php b/lib/ckfinder/core/connector/php/vendor/autoload.php
new file mode 100644
index 0000000..c875cf7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/autoload.php
@@ -0,0 +1,7 @@
+addAlias('_aws', self::getDefaultServiceDefinition())
+ ->addAlias('_sdk1', __DIR__ . '/Resources/sdk1-config.php');
+
+ return $loader->load($config, $globalParameters);
+ }
+
+ /**
+ * Get the full path to the default service builder definition file
+ *
+ * @return string
+ */
+ public static function getDefaultServiceDefinition()
+ {
+ return __DIR__ . '/Resources/aws-config.php';
+ }
+
+ /**
+ * Returns the configuration for the service builder
+ *
+ * @return array
+ */
+ public function getConfig()
+ {
+ return $this->builderConfig;
+ }
+
+ /**
+ * Enables the facades for the clients defined in the service builder
+ *
+ * @param string|null $namespace The namespace that the facades should be mounted to. Defaults to global namespace
+ *
+ * @return Aws
+ * @deprecated "Facades" are being removed in version 3.0 of the SDK.
+ */
+ public function enableFacades($namespace = null)
+ {
+ Facade::mountFacades($this, $namespace);
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/AbstractClient.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/AbstractClient.php
new file mode 100644
index 0000000..f0d6c30
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/AbstractClient.php
@@ -0,0 +1,283 @@
+get(Options::BASE_URL), $config);
+ $this->credentials = $credentials;
+ $this->signature = $signature;
+ $this->aggregator = new DuplicateAggregator();
+
+ // Make sure the user agent is prefixed by the SDK version
+ $this->setUserAgent('aws-sdk-php2/' . Aws::VERSION, true);
+
+ // Add the event listener so that requests are signed before they are sent
+ $dispatcher = $this->getEventDispatcher();
+ $dispatcher->addSubscriber(new SignatureListener($credentials, $signature));
+
+ if ($backoff = $config->get(Options::BACKOFF)) {
+ $dispatcher->addSubscriber($backoff, -255);
+ }
+ }
+
+ public function __call($method, $args)
+ {
+ if (substr($method, 0, 3) === 'get' && substr($method, -8) === 'Iterator') {
+ // Allow magic method calls for iterators (e.g. $client->getIterator($params))
+ $commandOptions = isset($args[0]) ? $args[0] : null;
+ $iteratorOptions = isset($args[1]) ? $args[1] : array();
+ return $this->getIterator(substr($method, 3, -8), $commandOptions, $iteratorOptions);
+ } elseif (substr($method, 0, 9) == 'waitUntil') {
+ // Allow magic method calls for waiters (e.g. $client->waitUntil($params))
+ return $this->waitUntil(substr($method, 9), isset($args[0]) ? $args[0]: array());
+ } else {
+ return parent::__call(ucfirst($method), $args);
+ }
+ }
+
+ /**
+ * Get an endpoint for a specific region from a service description
+ * @deprecated This function will no longer be updated to work with new regions.
+ */
+ public static function getEndpoint(ServiceDescriptionInterface $description, $region, $scheme)
+ {
+ try {
+ $service = $description->getData('endpointPrefix');
+ $provider = RulesEndpointProvider::fromDefaults();
+ $result = $provider(array(
+ 'service' => $service,
+ 'region' => $region,
+ 'scheme' => $scheme
+ ));
+ return $result['endpoint'];
+ } catch (\InvalidArgumentException $e) {
+ throw new InvalidArgumentException($e->getMessage(), 0, $e);
+ }
+ }
+
+ public function getCredentials()
+ {
+ return $this->credentials;
+ }
+
+ public function setCredentials(CredentialsInterface $credentials)
+ {
+ $formerCredentials = $this->credentials;
+ $this->credentials = $credentials;
+
+ // Dispatch an event that the credentials have been changed
+ $this->dispatch('client.credentials_changed', array(
+ 'credentials' => $credentials,
+ 'former_credentials' => $formerCredentials,
+ ));
+
+ return $this;
+ }
+
+ public function getSignature()
+ {
+ return $this->signature;
+ }
+
+ public function getRegions()
+ {
+ return $this->serviceDescription->getData('regions');
+ }
+
+ public function getRegion()
+ {
+ return $this->getConfig(Options::REGION);
+ }
+
+ public function setRegion($region)
+ {
+ $config = $this->getConfig();
+ $formerRegion = $config->get(Options::REGION);
+ $global = $this->serviceDescription->getData('globalEndpoint');
+ $provider = $config->get('endpoint_provider');
+
+ if (!$provider) {
+ throw new \RuntimeException('No endpoint provider configured');
+ }
+
+ // Only change the region if the service does not have a global endpoint
+ if (!$global || $this->serviceDescription->getData('namespace') === 'S3') {
+
+ $endpoint = call_user_func(
+ $provider,
+ array(
+ 'scheme' => $config->get(Options::SCHEME),
+ 'region' => $region,
+ 'service' => $config->get(Options::SERVICE)
+ )
+ );
+
+ $this->setBaseUrl($endpoint['endpoint']);
+ $config->set(Options::BASE_URL, $endpoint['endpoint']);
+ $config->set(Options::REGION, $region);
+
+ // Update the signature if necessary
+ $signature = $this->getSignature();
+ if ($signature instanceof EndpointSignatureInterface) {
+ /** @var EndpointSignatureInterface $signature */
+ $signature->setRegionName($region);
+ }
+
+ // Dispatch an event that the region has been changed
+ $this->dispatch('client.region_changed', array(
+ 'region' => $region,
+ 'former_region' => $formerRegion,
+ ));
+ }
+
+ return $this;
+ }
+
+ public function waitUntil($waiter, array $input = array())
+ {
+ $this->getWaiter($waiter, $input)->wait();
+
+ return $this;
+ }
+
+ public function getWaiter($waiter, array $input = array())
+ {
+ return $this->getWaiterFactory()->build($waiter)
+ ->setClient($this)
+ ->setConfig($input);
+ }
+
+ public function setWaiterFactory(WaiterFactoryInterface $waiterFactory)
+ {
+ $this->waiterFactory = $waiterFactory;
+
+ return $this;
+ }
+
+ public function getWaiterFactory()
+ {
+ if (!$this->waiterFactory) {
+ $clientClass = get_class($this);
+ // Use a composite factory that checks for classes first, then config waiters
+ $this->waiterFactory = new CompositeWaiterFactory(array(
+ new WaiterClassFactory(substr($clientClass, 0, strrpos($clientClass, '\\')) . '\\Waiter')
+ ));
+ if ($this->getDescription()) {
+ $waiterConfig = $this->getDescription()->getData('waiters') ?: array();
+ $this->waiterFactory->addFactory(new WaiterConfigFactory($waiterConfig));
+ }
+ }
+
+ return $this->waiterFactory;
+ }
+
+ public function getApiVersion()
+ {
+ return $this->serviceDescription->getApiVersion();
+ }
+
+ /**
+ * {@inheritdoc}
+ * @throws \Aws\Common\Exception\TransferException
+ */
+ public function send($requests)
+ {
+ try {
+ return parent::send($requests);
+ } catch (CurlException $e) {
+ $wrapped = new TransferException($e->getMessage(), null, $e);
+ $wrapped->setCurlHandle($e->getCurlHandle())
+ ->setCurlInfo($e->getCurlInfo())
+ ->setError($e->getError(), $e->getErrorNo())
+ ->setRequest($e->getRequest());
+ throw $wrapped;
+ }
+ }
+
+ /**
+ * Ensures that the duplicate query string aggregator is used so that
+ * query string values are sent over the wire as foo=bar&foo=baz.
+ * {@inheritdoc}
+ */
+ public function createRequest(
+ $method = 'GET',
+ $uri = null,
+ $headers = null,
+ $body = null,
+ array $options = array()
+ ) {
+ $request = parent::createRequest($method, $uri, $headers, $body, $options);
+ $request->getQuery()->setAggregator($this->aggregator);
+ return $request;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/AwsClientInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/AwsClientInterface.php
new file mode 100644
index 0000000..4c0579f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/AwsClientInterface.php
@@ -0,0 +1,118 @@
+ 'https');
+
+ /**
+ * @var array Default client requirements
+ */
+ protected static $commonConfigRequirements = array(Options::SERVICE_DESCRIPTION);
+
+ /**
+ * @var string The namespace of the client
+ */
+ protected $clientNamespace;
+
+ /**
+ * @var array The config options
+ */
+ protected $config = array();
+
+ /**
+ * @var array The config defaults
+ */
+ protected $configDefaults = array();
+
+ /**
+ * @var array The config requirements
+ */
+ protected $configRequirements = array();
+
+ /**
+ * @var ExceptionParserInterface The Parser interface for the client
+ */
+ protected $exceptionParser;
+
+ /**
+ * @var array Array of configuration data for iterators available for the client
+ */
+ protected $iteratorsConfig = array();
+
+ /** @var string */
+ private $clientClass;
+
+ /** @var string */
+ private $serviceName;
+
+ /**
+ * Factory method for creating the client builder
+ *
+ * @param string $namespace The namespace of the client
+ *
+ * @return ClientBuilder
+ */
+ public static function factory($namespace = null)
+ {
+ return new static($namespace);
+ }
+
+ /**
+ * Constructs a client builder
+ *
+ * @param string $namespace The namespace of the client
+ */
+ public function __construct($namespace = null)
+ {
+ $this->clientNamespace = $namespace;
+
+ // Determine service and class name
+ $this->clientClass = 'Aws\Common\Client\DefaultClient';
+
+ if ($this->clientNamespace) {
+ $this->serviceName = substr($this->clientNamespace, strrpos($this->clientNamespace, '\\') + 1);
+ $this->clientClass = $this->clientNamespace . '\\' . $this->serviceName . 'Client';
+ }
+ }
+
+ /**
+ * Sets the config options
+ *
+ * @param array|Collection $config The config options
+ *
+ * @return ClientBuilder
+ */
+ public function setConfig($config)
+ {
+ $this->config = $this->processArray($config);
+
+ return $this;
+ }
+
+ /**
+ * Sets the config options' defaults
+ *
+ * @param array|Collection $defaults The default values
+ *
+ * @return ClientBuilder
+ */
+ public function setConfigDefaults($defaults)
+ {
+ $this->configDefaults = $this->processArray($defaults);
+
+ return $this;
+ }
+
+ /**
+ * Sets the required config options
+ *
+ * @param array|Collection $required The required config options
+ *
+ * @return ClientBuilder
+ */
+ public function setConfigRequirements($required)
+ {
+ $this->configRequirements = $this->processArray($required);
+
+ return $this;
+ }
+
+ /**
+ * Sets the exception parser. If one is not provided the builder will use
+ * the default XML exception parser.
+ *
+ * @param ExceptionParserInterface $parser The exception parser
+ *
+ * @return ClientBuilder
+ */
+ public function setExceptionParser(ExceptionParserInterface $parser)
+ {
+ $this->exceptionParser = $parser;
+
+ return $this;
+ }
+
+ /**
+ * Set the configuration for the client's iterators
+ *
+ * @param array $config Configuration data for client's iterators
+ *
+ * @return ClientBuilder
+ */
+ public function setIteratorsConfig(array $config)
+ {
+ $this->iteratorsConfig = $config;
+
+ return $this;
+ }
+
+ /**
+ * Performs the building logic using all of the parameters that have been
+ * set and falling back to default values. Returns an instantiate service
+ * client with credentials prepared and plugins attached.
+ *
+ * @return AwsClientInterface
+ * @throws InvalidArgumentException
+ */
+ public function build()
+ {
+ // Resolve configuration
+ $config = Collection::fromConfig(
+ $this->config,
+ array_merge(self::$commonConfigDefaults, $this->configDefaults),
+ (self::$commonConfigRequirements + $this->configRequirements)
+ );
+
+ if ($config[Options::VERSION] === 'latest') {
+ $config[Options::VERSION] = constant("{$this->clientClass}::LATEST_API_VERSION");
+ }
+
+ if (!isset($config['endpoint_provider'])) {
+ $config['endpoint_provider'] = RulesEndpointProvider::fromDefaults();
+ }
+
+ // Resolve the endpoint, signature, and credentials
+ $description = $this->updateConfigFromDescription($config);
+ $signature = $this->getSignature($description, $config);
+ $credentials = $this->getCredentials($config);
+ $this->extractHttpConfig($config);
+
+ // Resolve exception parser
+ if (!$this->exceptionParser) {
+ $this->exceptionParser = new DefaultXmlExceptionParser();
+ }
+
+ // Resolve backoff strategy
+ $backoff = $config->get(Options::BACKOFF);
+ if ($backoff === null) {
+ $retries = isset($config[Options::BACKOFF_RETRIES]) ? $config[Options::BACKOFF_RETRIES] : 3;
+ $backoff = $this->createDefaultBackoff($retries);
+ $config->set(Options::BACKOFF, $backoff);
+ }
+
+ if ($backoff) {
+ $this->addBackoffLogger($backoff, $config);
+ }
+
+ /** @var AwsClientInterface $client */
+ $client = new $this->clientClass($credentials, $signature, $config);
+ $client->setDescription($description);
+
+ // Add exception marshaling so that more descriptive exception are thrown
+ if ($this->clientNamespace) {
+ $exceptionFactory = new NamespaceExceptionFactory(
+ $this->exceptionParser,
+ "{$this->clientNamespace}\\Exception",
+ "{$this->clientNamespace}\\Exception\\{$this->serviceName}Exception"
+ );
+ $client->addSubscriber(new ExceptionListener($exceptionFactory));
+ }
+
+ // Add the UserAgentPlugin to append to the User-Agent header of requests
+ $client->addSubscriber(new UserAgentListener());
+
+ // Filters used for the cache plugin
+ $client->getConfig()->set(
+ 'params.cache.key_filter',
+ 'header=date,x-amz-date,x-amz-security-token,x-amzn-authorization'
+ );
+
+ // Set the iterator resource factory based on the provided iterators config
+ $client->setResourceIteratorFactory(new AwsResourceIteratorFactory(
+ $this->iteratorsConfig,
+ new ResourceIteratorClassFactory($this->clientNamespace . '\\Iterator')
+ ));
+
+ // Disable parameter validation if needed
+ if ($config->get(Options::VALIDATION) === false) {
+ $params = $config->get('command.params') ?: array();
+ $params['command.disable_validation'] = true;
+ $config->set('command.params', $params);
+ }
+
+ return $client;
+ }
+
+ /**
+ * Add backoff logging to the backoff plugin if needed
+ *
+ * @param BackoffPlugin $plugin Backoff plugin
+ * @param Collection $config Configuration settings
+ *
+ * @throws InvalidArgumentException
+ */
+ protected function addBackoffLogger(BackoffPlugin $plugin, Collection $config)
+ {
+ // The log option can be set to `debug` or an instance of a LogAdapterInterface
+ if ($logger = $config->get(Options::BACKOFF_LOGGER)) {
+ $format = $config->get(Options::BACKOFF_LOGGER_TEMPLATE);
+ if ($logger === 'debug') {
+ $logger = new ClosureLogAdapter(function ($message) {
+ trigger_error($message . "\n");
+ });
+ } elseif (!($logger instanceof LogAdapterInterface)) {
+ throw new InvalidArgumentException(
+ Options::BACKOFF_LOGGER . ' must be set to `debug` or an instance of '
+ . 'Guzzle\\Common\\Log\\LogAdapterInterface'
+ );
+ }
+ // Create the plugin responsible for logging exponential backoff retries
+ $logPlugin = new BackoffLogger($logger);
+ // You can specify a custom format or use the default
+ if ($format) {
+ $logPlugin->setTemplate($format);
+ }
+ $plugin->addSubscriber($logPlugin);
+ }
+ }
+
+ /**
+ * Ensures that an array (e.g. for config data) is actually in array form
+ *
+ * @param array|Collection $array The array data
+ *
+ * @return array
+ * @throws InvalidArgumentException if the arg is not an array or Collection
+ */
+ protected function processArray($array)
+ {
+ if ($array instanceof Collection) {
+ $array = $array->getAll();
+ }
+
+ if (!is_array($array)) {
+ throw new InvalidArgumentException('The config must be provided as an array or Collection.');
+ }
+
+ return $array;
+ }
+
+ /**
+ * Update a configuration object from a service description
+ *
+ * @param Collection $config Config to update
+ *
+ * @return ServiceDescription
+ * @throws InvalidArgumentException
+ */
+ protected function updateConfigFromDescription(Collection $config)
+ {
+ $description = $config->get(Options::SERVICE_DESCRIPTION);
+ if (!($description instanceof ServiceDescription)) {
+ // Inject the version into the sprintf template if it is a string
+ if (is_string($description)) {
+ $description = sprintf($description, $config->get(Options::VERSION));
+ }
+ $description = ServiceDescription::factory($description);
+ $config->set(Options::SERVICE_DESCRIPTION, $description);
+ }
+
+ if (!$config->get(Options::SERVICE)) {
+ $config->set(Options::SERVICE, $description->getData('endpointPrefix'));
+ }
+
+ if ($iterators = $description->getData('iterators')) {
+ $this->setIteratorsConfig($iterators);
+ }
+
+ $this->handleRegion($config);
+ $this->handleEndpoint($config);
+
+ return $description;
+ }
+
+ /**
+ * Return an appropriate signature object for a a client based on the
+ * "signature" configuration setting, or the default signature specified in
+ * a service description. The signature can be set to a valid signature
+ * version identifier string or an instance of Aws\Common\Signature\SignatureInterface.
+ *
+ * @param ServiceDescription $description Description that holds a signature option
+ * @param Collection $config Configuration options
+ *
+ * @return SignatureInterface
+ * @throws InvalidArgumentException
+ */
+ protected function getSignature(ServiceDescription $description, Collection $config)
+ {
+ // If a custom signature has not been provided, then use the default
+ // signature setting specified in the service description.
+ $signature = $config->get(Options::SIGNATURE) ?: $description->getData('signatureVersion');
+
+ if (is_string($signature)) {
+ if ($signature == 'v4') {
+ $signature = new SignatureV4();
+ } elseif ($signature == 'v2') {
+ $signature = new SignatureV2();
+ } elseif ($signature == 'v3https') {
+ $signature = new SignatureV3Https();
+ } else {
+ throw new InvalidArgumentException("Invalid signature type: {$signature}");
+ }
+ } elseif (!($signature instanceof SignatureInterface)) {
+ throw new InvalidArgumentException('The provided signature is not '
+ . 'a signature version string or an instance of '
+ . 'Aws\\Common\\Signature\\SignatureInterface');
+ }
+
+ // Allow a custom service name or region value to be provided
+ if ($signature instanceof EndpointSignatureInterface) {
+
+ // Determine the service name to use when signing
+ $signature->setServiceName($config->get(Options::SIGNATURE_SERVICE)
+ ?: $description->getData('signingName')
+ ?: $description->getData('endpointPrefix'));
+
+ // Determine the region to use when signing requests
+ $signature->setRegionName($config->get(Options::SIGNATURE_REGION) ?: $config->get(Options::REGION));
+ }
+
+ return $signature;
+ }
+
+ protected function getCredentials(Collection $config)
+ {
+ $credentials = $config->get(Options::CREDENTIALS);
+
+ if (is_array($credentials)) {
+ $credentials = Credentials::factory($credentials);
+ } elseif ($credentials === false) {
+ $credentials = new NullCredentials();
+ } elseif (!$credentials instanceof CredentialsInterface) {
+ $credentials = Credentials::factory($config);
+ }
+
+ return $credentials;
+ }
+
+ private function handleRegion(Collection $config)
+ {
+ // Make sure a valid region is set
+ $region = $config[Options::REGION];
+ $description = $config[Options::SERVICE_DESCRIPTION];
+ $global = $description->getData('globalEndpoint');
+
+ if (!$global && !$region) {
+ throw new InvalidArgumentException(
+ 'A region is required when using ' . $description->getData('serviceFullName')
+ );
+ } elseif ($global && !$region) {
+ $config[Options::REGION] = 'us-east-1';
+ }
+ }
+
+ private function handleEndpoint(Collection $config)
+ {
+ // Alias "endpoint" with "base_url" for forwards compatibility.
+ if ($config['endpoint']) {
+ $config[Options::BASE_URL] = $config['endpoint'];
+ return;
+ }
+
+ if ($config[Options::BASE_URL]) {
+ return;
+ }
+
+ $endpoint = call_user_func(
+ $config['endpoint_provider'],
+ array(
+ 'scheme' => $config[Options::SCHEME],
+ 'region' => $config[Options::REGION],
+ 'service' => $config[Options::SERVICE]
+ )
+ );
+
+ $config[Options::BASE_URL] = $endpoint['endpoint'];
+
+ // Set a signature if one was not explicitly provided.
+ if (!$config->hasKey(Options::SIGNATURE)
+ && isset($endpoint['signatureVersion'])
+ ) {
+ $config->set(Options::SIGNATURE, $endpoint['signatureVersion']);
+ }
+
+ // The the signing region if endpoint rule specifies one.
+ if (isset($endpoint['credentialScope'])) {
+ $scope = $endpoint['credentialScope'];
+ if (isset($scope['region'])) {
+ $config->set(Options::SIGNATURE_REGION, $scope['region']);
+ }
+ }
+ }
+
+ private function createDefaultBackoff($retries = 3)
+ {
+ return new BackoffPlugin(
+ // Retry failed requests up to 3 times if it is determined that the request can be retried
+ new TruncatedBackoffStrategy($retries,
+ // Retry failed requests with 400-level responses due to throttling
+ new ThrottlingErrorChecker($this->exceptionParser,
+ // Retry failed requests due to transient network or cURL problems
+ new CurlBackoffStrategy(null,
+ // Retry failed requests with 500-level responses
+ new HttpBackoffStrategy(array(500, 503, 509),
+ // Retry requests that failed due to expired credentials
+ new ExpiredCredentialsChecker($this->exceptionParser,
+ new ExponentialBackoffStrategy()
+ )
+ )
+ )
+ )
+ )
+ );
+ }
+
+ private function extractHttpConfig(Collection $config)
+ {
+ $http = $config['http'];
+
+ if (!is_array($http)) {
+ return;
+ }
+
+ if (isset($http['verify'])) {
+ $config[Options::SSL_CERT] = $http['verify'];
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/DefaultClient.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/DefaultClient.php
new file mode 100644
index 0000000..277f088
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/DefaultClient.php
@@ -0,0 +1,67 @@
+setConfig($config)
+ ->setConfigDefaults(array(Options::SCHEME => 'https'))
+ ->build();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/ExpiredCredentialsChecker.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/ExpiredCredentialsChecker.php
new file mode 100644
index 0000000..05b8445
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/ExpiredCredentialsChecker.php
@@ -0,0 +1,80 @@
+ true,
+ 'ExpiredTokenException' => true,
+ 'ExpiredToken' => true
+ );
+
+ /**
+ * @var ExceptionParserInterface Exception parser used to parse exception responses
+ */
+ protected $exceptionParser;
+
+ public function __construct(ExceptionParserInterface $exceptionParser, BackoffStrategyInterface $next = null) {
+ $this->exceptionParser = $exceptionParser;
+ $this->next = $next;
+ }
+
+ public function makesDecision()
+ {
+ return true;
+ }
+
+ protected function getDelay($retries, RequestInterface $request, Response $response = null, HttpException $e = null)
+ {
+ if ($response && $response->isClientError()) {
+
+ $parts = $this->exceptionParser->parse($request, $response);
+ if (!isset($this->retryable[$parts['code']]) || !$request->getClient()) {
+ return null;
+ }
+
+ /** @var AwsClientInterface $client */
+ $client = $request->getClient();
+ // Only retry if the credentials can be refreshed
+ if (!($client->getCredentials() instanceof AbstractRefreshableCredentials)) {
+ return null;
+ }
+
+ // Resign the request using new credentials
+ $client->getSignature()->signRequest($request, $client->getCredentials()->setExpiration(-1));
+
+ // Retry immediately with no delay
+ return 0;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/ThrottlingErrorChecker.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/ThrottlingErrorChecker.php
new file mode 100644
index 0000000..a35cbcb
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/ThrottlingErrorChecker.php
@@ -0,0 +1,75 @@
+ true,
+ 'Throttling' => true,
+ 'ThrottlingException' => true,
+ 'ProvisionedThroughputExceededException' => true,
+ 'RequestThrottled' => true,
+ );
+
+ /**
+ * @var ExceptionParserInterface Exception parser used to parse exception responses
+ */
+ protected $exceptionParser;
+
+ public function __construct(ExceptionParserInterface $exceptionParser, BackoffStrategyInterface $next = null)
+ {
+ $this->exceptionParser = $exceptionParser;
+ if ($next) {
+ $this->setNext($next);
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function makesDecision()
+ {
+ return true;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getDelay(
+ $retries,
+ RequestInterface $request,
+ Response $response = null,
+ HttpException $e = null
+ ) {
+ if ($response && $response->isClientError()) {
+ $parts = $this->exceptionParser->parse($request, $response);
+ return isset(self::$throttlingExceptions[$parts['code']]) ? true : null;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/UploadBodyListener.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/UploadBodyListener.php
new file mode 100644
index 0000000..10cd825
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/UploadBodyListener.php
@@ -0,0 +1,95 @@
+commands = $commands;
+ $this->bodyParameter = (string) $bodyParameter;
+ $this->sourceParameter = (string) $sourceParameter;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getSubscribedEvents()
+ {
+ return array('command.before_prepare' => array('onCommandBeforePrepare'));
+ }
+
+ /**
+ * Converts filenames and file handles into EntityBody objects before the command is validated
+ *
+ * @param Event $event Event emitted
+ * @throws InvalidArgumentException
+ */
+ public function onCommandBeforePrepare(Event $event)
+ {
+ /** @var Command $command */
+ $command = $event['command'];
+ if (in_array($command->getName(), $this->commands)) {
+ // Get the interesting parameters
+ $source = $command->get($this->sourceParameter);
+ $body = $command->get($this->bodyParameter);
+
+ // If a file path is passed in then get the file handle
+ if (is_string($source) && file_exists($source)) {
+ $body = fopen($source, 'r');
+ }
+
+ // Prepare the body parameter and remove the source file parameter
+ if (null !== $body) {
+ $command->remove($this->sourceParameter);
+ $command->set($this->bodyParameter, EntityBody::factory($body));
+ } else {
+ throw new InvalidArgumentException("You must specify a non-null value for the {$this->bodyParameter} or {$this->sourceParameter} parameters.");
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/UserAgentListener.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/UserAgentListener.php
new file mode 100644
index 0000000..cc7e312
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Client/UserAgentListener.php
@@ -0,0 +1,61 @@
+ 'onBeforeSend');
+ }
+
+ /**
+ * Adds strings to the User-Agent header using the `ua.append` parameter of a command
+ *
+ * @param Event $event Event emitted
+ */
+ public function onBeforeSend(Event $event)
+ {
+ $command = $event['command'];
+ if ($userAgentAppends = $command->get(self::OPTION)) {
+ $request = $command->getRequest();
+ $userAgent = (string) $request->getHeader('User-Agent');
+ foreach ((array) $userAgentAppends as $append) {
+ $append = ' ' . $append;
+ if (strpos($userAgent, $append) === false) {
+ $userAgent .= $append;
+ }
+ }
+ $request->setHeader('User-Agent', $userAgent);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/AwsQueryVisitor.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/AwsQueryVisitor.php
new file mode 100644
index 0000000..a335c7b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/AwsQueryVisitor.php
@@ -0,0 +1,120 @@
+fqname = $command->getName();
+ $query = array();
+ $this->customResolver($value, $param, $query, $param->getWireName());
+ $request->addPostFields($query);
+ }
+
+ /**
+ * Map nested parameters into the location_key based parameters
+ *
+ * @param array $value Value to map
+ * @param Parameter $param Parameter that holds information about the current key
+ * @param array $query Built up query string values
+ * @param string $prefix String to prepend to sub query values
+ */
+ protected function customResolver($value, Parameter $param, array &$query, $prefix = '')
+ {
+ switch ($param->getType()) {
+ case 'object':
+ $this->resolveObject($param, $value, $prefix, $query);
+ break;
+ case 'array':
+ $this->resolveArray($param, $value, $prefix, $query);
+ break;
+ default:
+ $query[$prefix] = $param->filter($value);
+ }
+ }
+
+ /**
+ * Custom handling for objects
+ *
+ * @param Parameter $param Parameter for the object
+ * @param array $value Value that is set for this parameter
+ * @param string $prefix Prefix for the resulting key
+ * @param array $query Query string array passed by reference
+ */
+ protected function resolveObject(Parameter $param, array $value, $prefix, array &$query)
+ {
+ // Maps are implemented using additional properties
+ $hasAdditionalProperties = ($param->getAdditionalProperties() instanceof Parameter);
+ $additionalPropertyCount = 0;
+
+ foreach ($value as $name => $v) {
+ if ($subParam = $param->getProperty($name)) {
+ // if the parameter was found by name as a regular property
+ $key = $prefix . '.' . $subParam->getWireName();
+ $this->customResolver($v, $subParam, $query, $key);
+ } elseif ($hasAdditionalProperties) {
+ // Handle map cases like &Attribute.1.Name=&Attribute.1.Value=
+ $additionalPropertyCount++;
+ $data = $param->getData();
+ $keyName = isset($data['keyName']) ? $data['keyName'] : 'key';
+ $valueName = isset($data['valueName']) ? $data['valueName'] : 'value';
+ $query["{$prefix}.{$additionalPropertyCount}.{$keyName}"] = $name;
+ $newPrefix = "{$prefix}.{$additionalPropertyCount}.{$valueName}";
+ if (is_array($v)) {
+ $this->customResolver($v, $param->getAdditionalProperties(), $query, $newPrefix);
+ } else {
+ $query[$newPrefix] = $param->filter($v);
+ }
+ }
+ }
+ }
+
+ /**
+ * Custom handling for arrays
+ *
+ * @param Parameter $param Parameter for the object
+ * @param array $value Value that is set for this parameter
+ * @param string $prefix Prefix for the resulting key
+ * @param array $query Query string array passed by reference
+ */
+ protected function resolveArray(Parameter $param, array $value, $prefix, array &$query)
+ {
+ static $serializeEmpty = array(
+ 'SetLoadBalancerPoliciesForBackendServer' => 1,
+ 'SetLoadBalancerPoliciesOfListener' => 1,
+ 'UpdateStack' => 1
+ );
+
+ // For BC, serialize empty lists for specific operations
+ if (!$value) {
+ if (isset($serializeEmpty[$this->fqname])) {
+ if (substr($prefix, -7) === '.member') {
+ $prefix = substr($prefix, 0, -7);
+ }
+ $query[$prefix] = '';
+ }
+ return;
+ }
+
+ $offset = $param->getData('offset') ?: 1;
+ foreach ($value as $index => $v) {
+ $index += $offset;
+ if (is_array($v) && $items = $param->getItems()) {
+ $this->customResolver($v, $items, $query, $prefix . '.' . $index);
+ } else {
+ $query[$prefix . '.' . $index] = $param->filter($v);
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/JsonCommand.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/JsonCommand.php
new file mode 100644
index 0000000..15ad593
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/JsonCommand.php
@@ -0,0 +1,47 @@
+request->getBody()) {
+ $this->request->setBody('{}');
+ }
+
+ // Never send the Expect header when interacting with a JSON query service
+ $this->request->removeHeader('Expect');
+
+ // Always send JSON requests as a raw string rather than using streams to avoid issues with
+ // cURL error code 65: "necessary data rewind wasn't possible".
+ // This could be removed after PHP addresses https://bugs.php.net/bug.php?id=47204
+ $this->request->getCurlOptions()->set(CurlHandle::BODY_AS_STRING, true);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/QueryCommand.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/QueryCommand.php
new file mode 100644
index 0000000..63eb8e8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/QueryCommand.php
@@ -0,0 +1,53 @@
+getRequestSerializer()->addVisitor('aws.query', self::$queryVisitor);
+ $this->getResponseParser()->addVisitor('xml', self::$xmlVisitor);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/XmlResponseLocationVisitor.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/XmlResponseLocationVisitor.php
new file mode 100644
index 0000000..ad229fd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Command/XmlResponseLocationVisitor.php
@@ -0,0 +1,74 @@
+getOperation();
+ if ($operation->getServiceDescription()->getData('resultWrapped')) {
+ $wrappingNode = $operation->getName() . 'Result';
+ if (isset($result[$wrappingNode])) {
+ $result = $result[$wrappingNode] + $result;
+ unset($result[$wrappingNode]);
+ }
+ }
+ }
+
+ /**
+ * Accounts for wrapper nodes
+ * {@inheritdoc}
+ */
+ public function visit(
+ CommandInterface $command,
+ Response $response,
+ Parameter $param,
+ &$value,
+ $context = null
+ ) {
+ parent::visit($command, $response, $param, $value, $context);
+
+ // Account for wrapper nodes (e.g. RDS, ElastiCache, etc)
+ if ($param->getData('wrapper')) {
+ $wireName = $param->getWireName();
+ $value += $value[$wireName];
+ unset($value[$wireName]);
+ }
+ }
+
+ /**
+ * Filter used when converting XML maps into associative arrays in service descriptions
+ *
+ * @param array $value Value to filter
+ * @param string $entryName Name of each entry
+ * @param string $keyName Name of each key
+ * @param string $valueName Name of each value
+ *
+ * @return array Returns the map of the XML data
+ */
+ public static function xmlMap($value, $entryName, $keyName, $valueName)
+ {
+ $result = array();
+ foreach ($value as $entry) {
+ $result[$entry[$keyName]] = $entry[$valueName];
+ }
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/AbstractCredentialsDecorator.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/AbstractCredentialsDecorator.php
new file mode 100644
index 0000000..b3a1df9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/AbstractCredentialsDecorator.php
@@ -0,0 +1,136 @@
+credentials = $credentials;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function serialize()
+ {
+ return $this->credentials->serialize();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function unserialize($serialized)
+ {
+ $this->credentials = new Credentials('', '');
+ $this->credentials->unserialize($serialized);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getAccessKeyId()
+ {
+ return $this->credentials->getAccessKeyId();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSecretKey()
+ {
+ return $this->credentials->getSecretKey();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSecurityToken()
+ {
+ return $this->credentials->getSecurityToken();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getExpiration()
+ {
+ return $this->credentials->getExpiration();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function isExpired()
+ {
+ return $this->credentials->isExpired();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setAccessKeyId($key)
+ {
+ $this->credentials->setAccessKeyId($key);
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setSecretKey($secret)
+ {
+ $this->credentials->setSecretKey($secret);
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setSecurityToken($token)
+ {
+ $this->credentials->setSecurityToken($token);
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setExpiration($timestamp)
+ {
+ $this->credentials->setExpiration($timestamp);
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/AbstractRefreshableCredentials.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/AbstractRefreshableCredentials.php
new file mode 100644
index 0000000..ebd957d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/AbstractRefreshableCredentials.php
@@ -0,0 +1,95 @@
+credentials->isExpired()) {
+ $this->refresh();
+ }
+
+ return new Credentials(
+ $this->credentials->getAccessKeyId(),
+ $this->credentials->getSecretKey(),
+ $this->credentials->getSecurityToken(),
+ $this->credentials->getExpiration()
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getAccessKeyId()
+ {
+ if ($this->credentials->isExpired()) {
+ $this->refresh();
+ }
+
+ return $this->credentials->getAccessKeyId();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSecretKey()
+ {
+ if ($this->credentials->isExpired()) {
+ $this->refresh();
+ }
+
+ return $this->credentials->getSecretKey();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSecurityToken()
+ {
+ if ($this->credentials->isExpired()) {
+ $this->refresh();
+ }
+
+ return $this->credentials->getSecurityToken();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function serialize()
+ {
+ if ($this->credentials->isExpired()) {
+ $this->refresh();
+ }
+
+ return $this->credentials->serialize();
+ }
+
+ /**
+ * Attempt to get new credentials
+ */
+ abstract protected function refresh();
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/CacheableCredentials.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/CacheableCredentials.php
new file mode 100644
index 0000000..44e6cf3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/CacheableCredentials.php
@@ -0,0 +1,74 @@
+cache = $cache;
+ $this->cacheKey = $cacheKey;
+
+ parent::__construct($credentials);
+ }
+
+ /**
+ * Attempt to get new credentials from cache or from the adapted object
+ */
+ protected function refresh()
+ {
+ if (!$cache = $this->cache->fetch($this->cacheKey)) {
+ // The credentials were not found, so try again and cache if new
+ $this->credentials->getAccessKeyId();
+ if (!$this->credentials->isExpired()) {
+ // The credentials were updated, so cache them
+ $this->cache->save($this->cacheKey, $this->credentials, $this->credentials->getExpiration() - time());
+ }
+ } else {
+ // The credentials were found in cache, so update the adapter object
+ // if the cached credentials are not expired
+ if (!$cache->isExpired()) {
+ $this->credentials->setAccessKeyId($cache->getAccessKeyId());
+ $this->credentials->setSecretKey($cache->getSecretKey());
+ $this->credentials->setSecurityToken($cache->getSecurityToken());
+ $this->credentials->setExpiration($cache->getExpiration());
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/Credentials.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/Credentials.php
new file mode 100644
index 0000000..bc95334
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/Credentials.php
@@ -0,0 +1,352 @@
+ null,
+ Options::SECRET => null,
+ Options::TOKEN => null,
+ Options::TOKEN_TTD => null,
+ Options::PROFILE => null,
+ Options::CREDENTIALS_CACHE => null,
+ Options::CREDENTIALS_CACHE_KEY => null,
+ Options::CREDENTIALS_CLIENT => null
+ );
+ }
+
+ /**
+ * Factory method for creating new credentials. This factory method will
+ * create the appropriate credentials object with appropriate decorators
+ * based on the passed configuration options.
+ *
+ * @param array $config Options to use when instantiating the credentials
+ *
+ * @return CredentialsInterface
+ * @throws InvalidArgumentException If the caching options are invalid
+ * @throws RuntimeException If using the default cache and APC is disabled
+ */
+ public static function factory($config = array())
+ {
+ // Add default key values
+ foreach (self::getConfigDefaults() as $key => $value) {
+ if (!isset($config[$key])) {
+ $config[$key] = $value;
+ }
+ }
+
+ // Set up the cache
+ $cache = $config[Options::CREDENTIALS_CACHE];
+ $cacheKey = $config[Options::CREDENTIALS_CACHE_KEY] ?:
+ 'credentials_' . ($config[Options::KEY] ?: crc32(gethostname()));
+
+ if (
+ $cacheKey &&
+ $cache instanceof CacheAdapterInterface &&
+ $cached = self::createFromCache($cache, $cacheKey)
+ ) {
+ return $cached;
+ }
+
+ // Create the credentials object
+ if (!$config[Options::KEY] || !$config[Options::SECRET]) {
+ $credentials = self::createFromEnvironment($config);
+ } else {
+ // Instantiate using short or long term credentials
+ $credentials = new static(
+ $config[Options::KEY],
+ $config[Options::SECRET],
+ $config[Options::TOKEN],
+ $config[Options::TOKEN_TTD]
+ );
+ }
+
+ // Check if the credentials are refreshable, and if so, configure caching
+ $cache = $config[Options::CREDENTIALS_CACHE];
+ if ($cacheKey && $cache) {
+ $credentials = self::createCache($credentials, $cache, $cacheKey);
+ }
+
+ return $credentials;
+ }
+
+ /**
+ * Create credentials from the credentials ini file in the HOME directory.
+ *
+ * @param string|null $profile Pass a specific profile to use. If no
+ * profile is specified we will attempt to use
+ * the value specified in the AWS_PROFILE
+ * environment variable. If AWS_PROFILE is not
+ * set, the "default" profile is used.
+ * @param string|null $filename Pass a string to specify the location of the
+ * credentials files. If null is passed, the
+ * SDK will attempt to find the configuration
+ * file at in your HOME directory at
+ * ~/.aws/credentials.
+ * @return CredentialsInterface
+ * @throws \RuntimeException if the file cannot be found, if the file is
+ * invalid, or if the profile is invalid.
+ */
+ public static function fromIni($profile = null, $filename = null)
+ {
+ if (!$filename) {
+ $filename = self::getHomeDir() . '/.aws/credentials';
+ }
+
+ if (!$profile) {
+ $profile = self::getEnvVar(self::ENV_PROFILE) ?: 'default';
+ }
+
+ if (!is_readable($filename) || ($data = parse_ini_file($filename, true)) === false) {
+ throw new \RuntimeException("Invalid AWS credentials file: {$filename}.");
+ }
+
+ if (!isset($data[$profile]['aws_access_key_id']) || !isset($data[$profile]['aws_secret_access_key'])) {
+ throw new \RuntimeException("Invalid AWS credentials profile {$profile} in {$filename}.");
+ }
+
+ return new self(
+ $data[$profile]['aws_access_key_id'],
+ $data[$profile]['aws_secret_access_key'],
+ isset($data[$profile]['aws_security_token'])
+ ? $data[$profile]['aws_security_token']
+ : null
+ );
+ }
+
+ /**
+ * Constructs a new BasicAWSCredentials object, with the specified AWS
+ * access key and AWS secret key
+ *
+ * @param string $accessKeyId AWS access key ID
+ * @param string $secretAccessKey AWS secret access key
+ * @param string $token Security token to use
+ * @param int $expiration UNIX timestamp for when credentials expire
+ */
+ public function __construct($accessKeyId, $secretAccessKey, $token = null, $expiration = null)
+ {
+ $this->key = trim($accessKeyId);
+ $this->secret = trim($secretAccessKey);
+ $this->token = $token;
+ $this->ttd = $expiration;
+ }
+
+ public function serialize()
+ {
+ return json_encode(array(
+ Options::KEY => $this->key,
+ Options::SECRET => $this->secret,
+ Options::TOKEN => $this->token,
+ Options::TOKEN_TTD => $this->ttd
+ ));
+ }
+
+ public function unserialize($serialized)
+ {
+ $data = json_decode($serialized, true);
+ $this->key = $data[Options::KEY];
+ $this->secret = $data[Options::SECRET];
+ $this->token = $data[Options::TOKEN];
+ $this->ttd = $data[Options::TOKEN_TTD];
+ }
+
+ public function getAccessKeyId()
+ {
+ return $this->key;
+ }
+
+ public function getSecretKey()
+ {
+ return $this->secret;
+ }
+
+ public function getSecurityToken()
+ {
+ return $this->token;
+ }
+
+ public function getExpiration()
+ {
+ return $this->ttd;
+ }
+
+ public function isExpired()
+ {
+ return $this->ttd !== null && time() >= $this->ttd;
+ }
+
+ public function setAccessKeyId($key)
+ {
+ $this->key = $key;
+
+ return $this;
+ }
+
+ public function setSecretKey($secret)
+ {
+ $this->secret = $secret;
+
+ return $this;
+ }
+
+ public function setSecurityToken($token)
+ {
+ $this->token = $token;
+
+ return $this;
+ }
+
+ public function setExpiration($timestamp)
+ {
+ $this->ttd = $timestamp;
+
+ return $this;
+ }
+
+ /**
+ * When no keys are provided, attempt to create them based on the
+ * environment or instance profile credentials.
+ *
+ * @param array|Collection $config
+ *
+ * @return CredentialsInterface
+ */
+ private static function createFromEnvironment($config)
+ {
+ // Get key and secret from ENV variables
+ $envKey = self::getEnvVar(self::ENV_KEY);
+ if (!($envSecret = self::getEnvVar(self::ENV_SECRET))) {
+ // Use AWS_SECRET_ACCESS_KEY if AWS_SECRET_KEY was not set
+ $envSecret = self::getEnvVar(self::ENV_SECRET_ACCESS_KEY);
+ }
+
+ // Use credentials from the environment variables if available
+ if ($envKey && $envSecret) {
+ return new static($envKey, $envSecret);
+ }
+
+ try {
+ // Use credentials from the INI file in HOME directory if available
+ return self::fromIni($config[Options::PROFILE]);
+ } catch (\RuntimeException $e) {
+ // Otherwise, try using instance profile credentials (available on EC2 instances)
+ return new RefreshableInstanceProfileCredentials(
+ new static('', '', '', 1),
+ $config[Options::CREDENTIALS_CLIENT]
+ );
+ }
+ }
+
+ private static function createFromCache(CacheAdapterInterface $cache, $cacheKey)
+ {
+ $cached = $cache->fetch($cacheKey);
+ if ($cached instanceof CredentialsInterface && !$cached->isExpired()) {
+ return new CacheableCredentials($cached, $cache, $cacheKey);
+ }
+
+ return null;
+ }
+
+ private static function createCache(CredentialsInterface $credentials, $cache, $cacheKey)
+ {
+ if ($cache === 'true' || $cache === true) {
+ // If no cache adapter was provided, then create one for the user
+ // @codeCoverageIgnoreStart
+ if (!extension_loaded('apc')) {
+ throw new RequiredExtensionNotLoadedException('PHP has not been compiled with APC. Unable to cache '
+ . 'the credentials.');
+ } elseif (!class_exists('Doctrine\Common\Cache\ApcCache')) {
+ throw new RuntimeException(
+ 'Cannot set ' . Options::CREDENTIALS_CACHE . ' to true because the Doctrine cache component is '
+ . 'not installed. Either install doctrine/cache or pass in an instantiated '
+ . 'Guzzle\Cache\CacheAdapterInterface object'
+ );
+ }
+ // @codeCoverageIgnoreEnd
+ $cache = new DoctrineCacheAdapter(new \Doctrine\Common\Cache\ApcCache());
+ } elseif (!($cache instanceof CacheAdapterInterface)) {
+ throw new InvalidArgumentException('Unable to utilize caching with the specified options');
+ }
+
+ // Decorate the credentials with a cache
+ return new CacheableCredentials($credentials, $cache, $cacheKey);
+ }
+
+ private static function getHomeDir()
+ {
+ // On Linux/Unix-like systems, use the HOME environment variable
+ if ($homeDir = self::getEnvVar('HOME')) {
+ return $homeDir;
+ }
+
+ // Get the HOMEDRIVE and HOMEPATH values for Windows hosts
+ $homeDrive = self::getEnvVar('HOMEDRIVE');
+ $homePath = self::getEnvVar('HOMEPATH');
+
+ return ($homeDrive && $homePath) ? $homeDrive . $homePath : null;
+ }
+
+ /**
+ * Fetches the value of an environment variable by checking $_SERVER and getenv().
+ *
+ * @param string $var Name of the environment variable
+ *
+ * @return mixed|null
+ */
+ private static function getEnvVar($var)
+ {
+ return isset($_SERVER[$var]) ? $_SERVER[$var] : getenv($var);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/CredentialsInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/CredentialsInterface.php
new file mode 100644
index 0000000..dd43037
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Credentials/CredentialsInterface.php
@@ -0,0 +1,96 @@
+setClient($client);
+ }
+
+ public function setClient(InstanceMetadataClient $client = null)
+ {
+ $this->customClient = null !== $client;
+ $this->client = $client ?: InstanceMetadataClient::factory();
+ }
+
+ public function serialize()
+ {
+ $serializable = array(
+ 'credentials' => parent::serialize(),
+ 'customClient' => $this->customClient,
+ );
+
+ if ($this->customClient) {
+ $serializable['client'] = serialize($this->client);
+ }
+
+ return json_encode($serializable);
+ }
+
+ public function unserialize($value)
+ {
+ $serialized = json_decode($value, true);
+ parent::unserialize($serialized['credentials']);
+ $this->customClient = $serialized['customClient'];
+ $this->client = $this->customClient ?
+ unserialize($serialized['client'])
+ : InstanceMetadataClient::factory();
+ }
+
+ /**
+ * Attempt to get new credentials from the instance profile
+ *
+ * @throws InstanceProfileCredentialsException On error
+ */
+ protected function refresh()
+ {
+ $credentials = $this->client->getInstanceProfileCredentials();
+ // Expire the token 5 minutes early to pre-fetch before expiring.
+ $this->credentials->setAccessKeyId($credentials->getAccessKeyId())
+ ->setSecretKey($credentials->getSecretKey())
+ ->setSecurityToken($credentials->getSecurityToken())
+ ->setExpiration($credentials->getExpiration() - 300);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Enum.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Enum.php
new file mode 100644
index 0000000..7f4d356
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Enum.php
@@ -0,0 +1,55 @@
+getConstants();
+ }
+
+ return self::$cache[$class];
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Enum/ClientOptions.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Enum/ClientOptions.php
new file mode 100644
index 0000000..abc42f7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Enum/ClientOptions.php
@@ -0,0 +1,167 @@
+factory = $factory;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getSubscribedEvents()
+ {
+ return array('request.error' => array('onRequestError', -1));
+ }
+
+ /**
+ * Throws a more meaningful request exception if available
+ *
+ * @param Event $event Event emitted
+ */
+ public function onRequestError(Event $event)
+ {
+ $e = $this->factory->fromResponse($event['request'], $event['response']);
+ $event->stopPropagation();
+ throw $e;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/InstanceProfileCredentialsException.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/InstanceProfileCredentialsException.php
new file mode 100644
index 0000000..fb1dcf1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/InstanceProfileCredentialsException.php
@@ -0,0 +1,50 @@
+statusCode = $code;
+ }
+
+ /**
+ * Get the error response code from the service
+ *
+ * @return string|null
+ */
+ public function getStatusCode()
+ {
+ return $this->statusCode;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/InvalidArgumentException.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000..4360a00
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/InvalidArgumentException.php
@@ -0,0 +1,22 @@
+getMessage(),
+ 0,
+ $exception
+ );
+
+ $this->state = $state;
+ }
+
+ /**
+ * Get the state of the transfer
+ *
+ * @return TransferStateInterface
+ */
+ public function getState()
+ {
+ return $this->state;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php
new file mode 100644
index 0000000..6489069
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php
@@ -0,0 +1,103 @@
+parser = $parser;
+ $this->baseNamespace = $baseNamespace;
+ $this->defaultException = $defaultException;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function fromResponse(RequestInterface $request, Response $response)
+ {
+ $parts = $this->parser->parse($request, $response);
+
+ // Removing leading 'AWS.' and embedded periods
+ $className = $this->baseNamespace . '\\' . str_replace(array('AWS.', '.'), '', $parts['code']);
+ if (substr($className, -9) !== 'Exception') {
+ $className .= 'Exception';
+ }
+
+ $className = class_exists($className) ? $className : $this->defaultException;
+
+ return $this->createException($className, $request, $response, $parts);
+ }
+
+ /**
+ * Create an prepare an exception object
+ *
+ * @param string $className Name of the class to create
+ * @param RequestInterface $request Request
+ * @param Response $response Response received
+ * @param array $parts Parsed exception data
+ *
+ * @return \Exception
+ */
+ protected function createException($className, RequestInterface $request, Response $response, array $parts)
+ {
+ $class = new $className($parts['message']);
+
+ if ($class instanceof ServiceResponseException) {
+ $class->setExceptionCode($parts['code']);
+ $class->setExceptionType($parts['type']);
+ $class->setResponse($response);
+ $class->setRequest($request);
+ $class->setRequestId($parts['request_id']);
+ }
+
+ return $class;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/OutOfBoundsException.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/OutOfBoundsException.php
new file mode 100644
index 0000000..6738c0c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/OutOfBoundsException.php
@@ -0,0 +1,22 @@
+ null,
+ 'message' => null,
+ 'type' => $response->isClientError() ? 'client' : 'server',
+ 'request_id' => (string) $response->getHeader('x-amzn-RequestId'),
+ 'parsed' => null
+ );
+
+ // Parse the json and normalize key casings
+ if (null !== $json = json_decode($response->getBody(true), true)) {
+ $data['parsed'] = array_change_key_case($json);
+ }
+
+ // Do additional, protocol-specific parsing and return the result
+ $data = $this->doParse($data, $response);
+
+ // Remove "Fault" suffix from exception names
+ if (isset($data['code']) && strpos($data['code'], 'Fault')) {
+ $data['code'] = preg_replace('/^([a-zA-Z]+)Fault$/', '$1', $data['code']);
+ }
+
+ return $data;
+ }
+
+ /**
+ * Pull relevant exception data out of the parsed json
+ *
+ * @param array $data The exception data
+ * @param Response $response The response from the service containing the error
+ *
+ * @return array
+ */
+ abstract protected function doParse(array $data, Response $response);
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/Parser/DefaultXmlExceptionParser.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/Parser/DefaultXmlExceptionParser.php
new file mode 100644
index 0000000..9656760
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/Parser/DefaultXmlExceptionParser.php
@@ -0,0 +1,109 @@
+ null,
+ 'message' => null,
+ 'type' => $response->isClientError() ? 'client' : 'server',
+ 'request_id' => null,
+ 'parsed' => null
+ );
+
+ $body = $response->getBody(true);
+
+ if (!$body) {
+ $this->parseHeaders($request, $response, $data);
+ return $data;
+ }
+
+ try {
+ $xml = new \SimpleXMLElement($body);
+ $this->parseBody($xml, $data);
+ return $data;
+ } catch (\Exception $e) {
+ // Gracefully handle parse errors. This could happen when the
+ // server responds with a non-XML response (e.g., private beta
+ // services).
+ $data['code'] = 'PhpInternalXmlParseError';
+ $data['message'] = 'A non-XML response was received';
+ return $data;
+ }
+ }
+
+ /**
+ * Parses additional exception information from the response headers
+ *
+ * @param RequestInterface $request Request that was issued
+ * @param Response $response The response from the request
+ * @param array $data The current set of exception data
+ */
+ protected function parseHeaders(RequestInterface $request, Response $response, array &$data)
+ {
+ $data['message'] = $response->getStatusCode() . ' ' . $response->getReasonPhrase();
+ if ($requestId = $response->getHeader('x-amz-request-id')) {
+ $data['request_id'] = $requestId;
+ $data['message'] .= " (Request-ID: $requestId)";
+ }
+ }
+
+ /**
+ * Parses additional exception information from the response body
+ *
+ * @param \SimpleXMLElement $body The response body as XML
+ * @param array $data The current set of exception data
+ */
+ protected function parseBody(\SimpleXMLElement $body, array &$data)
+ {
+ $data['parsed'] = $body;
+
+ $namespaces = $body->getDocNamespaces();
+ if (isset($namespaces[''])) {
+ // Account for the default namespace being defined and PHP not being able to handle it :(
+ $body->registerXPathNamespace('ns', $namespaces['']);
+ $prefix = 'ns:';
+ } else {
+ $prefix = '';
+ }
+
+ if ($tempXml = $body->xpath("//{$prefix}Code[1]")) {
+ $data['code'] = (string) $tempXml[0];
+ }
+
+ if ($tempXml = $body->xpath("//{$prefix}Message[1]")) {
+ $data['message'] = (string) $tempXml[0];
+ }
+
+ $tempXml = $body->xpath("//{$prefix}RequestId[1]");
+ if (empty($tempXml)) {
+ $tempXml = $body->xpath("//{$prefix}RequestID[1]");
+ }
+ if (isset($tempXml[0])) {
+ $data['request_id'] = (string) $tempXml[0];
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/Parser/ExceptionParserInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/Parser/ExceptionParserInterface.php
new file mode 100644
index 0000000..1b25d96
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/Parser/ExceptionParserInterface.php
@@ -0,0 +1,42 @@
+getHeader('x-amzn-ErrorType')) {
+ $data['code'] = substr($code, 0, strpos($code, ':'));
+ }
+
+ return $data;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/RequiredExtensionNotLoadedException.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/RequiredExtensionNotLoadedException.php
new file mode 100644
index 0000000..c4a072c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/RequiredExtensionNotLoadedException.php
@@ -0,0 +1,22 @@
+exceptionCode = $code;
+ }
+
+ /**
+ * Get the exception code
+ *
+ * @return string|null
+ */
+ public function getExceptionCode()
+ {
+ return $this->exceptionCode;
+ }
+
+ /**
+ * Set the exception type
+ *
+ * @param string $type Exception type
+ */
+ public function setExceptionType($type)
+ {
+ $this->exceptionType = $type;
+ }
+
+ /**
+ * Get the exception type (one of client or server)
+ *
+ * @return string|null
+ */
+ public function getExceptionType()
+ {
+ return $this->exceptionType;
+ }
+
+ /**
+ * Set the request ID
+ *
+ * @param string $id Request ID
+ */
+ public function setRequestId($id)
+ {
+ $this->requestId = $id;
+ }
+
+ /**
+ * Get the Request ID
+ *
+ * @return string|null
+ */
+ public function getRequestId()
+ {
+ return $this->requestId;
+ }
+
+ /**
+ * Set the associated response
+ *
+ * @param Response $response Response
+ */
+ public function setResponse(Response $response)
+ {
+ $this->response = $response;
+ }
+
+ /**
+ * Get the associated response object
+ *
+ * @return Response|null
+ */
+ public function getResponse()
+ {
+ return $this->response;
+ }
+
+ /**
+ * Set the associated request
+ *
+ * @param RequestInterface $request
+ */
+ public function setRequest(RequestInterface $request)
+ {
+ $this->request = $request;
+ }
+
+ /**
+ * Get the associated request object
+ *
+ * @return RequestInterface|null
+ */
+ public function getRequest()
+ {
+ return $this->request;
+ }
+
+ /**
+ * Get the status code of the response
+ *
+ * @return int|null
+ */
+ public function getStatusCode()
+ {
+ return $this->response ? $this->response->getStatusCode() : null;
+ }
+
+ /**
+ * Cast to a string
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ $message = get_class($this) . ': '
+ . 'AWS Error Code: ' . $this->getExceptionCode() . ', '
+ . 'Status Code: ' . $this->getStatusCode() . ', '
+ . 'AWS Request ID: ' . $this->getRequestId() . ', '
+ . 'AWS Error Type: ' . $this->getExceptionType() . ', '
+ . 'AWS Error Message: ' . $this->getMessage();
+
+ // Add the User-Agent if available
+ if ($this->request) {
+ $message .= ', ' . 'User-Agent: ' . $this->request->getHeader('User-Agent');
+ }
+
+ return $message;
+ }
+
+ /**
+ * Get the request ID of the error. This value is only present if a
+ * response was received, and is not present in the event of a networking
+ * error.
+ *
+ * Same as `getRequestId()` method, but matches the interface for SDKv3.
+ *
+ * @return string|null Returns null if no response was received
+ */
+ public function getAwsRequestId()
+ {
+ return $this->requestId;
+ }
+
+ /**
+ * Get the AWS error type.
+ *
+ * Same as `getExceptionType()` method, but matches the interface for SDKv3.
+ *
+ * @return string|null Returns null if no response was received
+ */
+ public function getAwsErrorType()
+ {
+ return $this->exceptionType;
+ }
+
+ /**
+ * Get the AWS error code.
+ *
+ * Same as `getExceptionCode()` method, but matches the interface for SDKv3.
+ *
+ * @return string|null Returns null if no response was received
+ */
+ public function getAwsErrorCode()
+ {
+ return $this->exceptionCode;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/TransferException.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/TransferException.php
new file mode 100644
index 0000000..47aa80d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/TransferException.php
@@ -0,0 +1,24 @@
+getConfig() as $service) {
+ if (isset($service['alias'], $service['class'])) {
+ $facadeClass = __NAMESPACE__ . '\\' . $service['alias'];
+ $facadeAlias = ltrim($targetNamespace . '\\' . $service['alias'], '\\');
+ if (!class_exists($facadeAlias) && class_exists($facadeClass)) {
+ // @codeCoverageIgnoreStart
+ class_alias($facadeClass, $facadeAlias);
+ // @codeCoverageIgnoreEnd
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the instance of the client that the facade operates on
+ *
+ * @return \Aws\Common\Client\AwsClientInterface
+ */
+ public static function getClient()
+ {
+ return self::$serviceBuilder->get(static::getServiceBuilderKey());
+ }
+
+ public static function __callStatic($method, $args)
+ {
+ return call_user_func_array(array(self::getClient(), $method), $args);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Facade/FacadeInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Facade/FacadeInterface.php
new file mode 100644
index 0000000..c00c32d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Facade/FacadeInterface.php
@@ -0,0 +1,34 @@
+context = hash_init($algorithm);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function addData($data)
+ {
+ if (!$this->context) {
+ throw new LogicException('You may not add more data to a finalized chunk hash.');
+ }
+
+ hash_update($this->context, $data);
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getHash($returnBinaryForm = false)
+ {
+ if (!$this->hash) {
+ $this->hashRaw = hash_final($this->context, true);
+ $this->hash = HashUtils::binToHex($this->hashRaw);
+ $this->context = null;
+ }
+
+ return $returnBinaryForm ? $this->hashRaw : $this->hash;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function __clone()
+ {
+ if ($this->context) {
+ $this->context = hash_copy($this->context);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Hash/ChunkHashInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Hash/ChunkHashInterface.php
new file mode 100644
index 0000000..5fcf9a5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Hash/ChunkHashInterface.php
@@ -0,0 +1,52 @@
+checksums = $inBinaryForm ? $checksums : array_map('Aws\Common\Hash\HashUtils::hexToBin', $checksums);
+
+ // Pre-calculate hash
+ $treeHash->getHash();
+
+ return $treeHash;
+ }
+
+ /**
+ * Create a tree hash from a content body
+ *
+ * @param string|resource|EntityBody $content Content to create a tree hash for
+ * @param string $algorithm A valid hash algorithm name as returned by `hash_algos()`
+ *
+ * @return TreeHash
+ */
+ public static function fromContent($content, $algorithm = self::DEFAULT_ALGORITHM)
+ {
+ $treeHash = new self($algorithm);
+
+ // Read the data in 1MB chunks and add to tree hash
+ $content = EntityBody::factory($content);
+ while ($data = $content->read(Size::MB)) {
+ $treeHash->addData($data);
+ }
+
+ // Pre-calculate hash
+ $treeHash->getHash();
+
+ return $treeHash;
+ }
+
+ /**
+ * Validates an entity body with a tree hash checksum
+ *
+ * @param string|resource|EntityBody $content Content to create a tree hash for
+ * @param string $checksum The checksum to use for validation
+ * @param string $algorithm A valid hash algorithm name as returned by `hash_algos()`
+ *
+ * @return bool
+ */
+ public static function validateChecksum($content, $checksum, $algorithm = self::DEFAULT_ALGORITHM)
+ {
+ $treeHash = self::fromContent($content, $algorithm);
+
+ return ($checksum === $treeHash->getHash());
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function __construct($algorithm = self::DEFAULT_ALGORITHM)
+ {
+ HashUtils::validateAlgorithm($algorithm);
+ $this->algorithm = $algorithm;
+ }
+
+ /**
+ * {@inheritdoc}
+ * @throws LogicException if the root tree hash is already calculated
+ * @throws InvalidArgumentException if the data is larger than 1MB
+ */
+ public function addData($data)
+ {
+ // Error if hash is already calculated
+ if ($this->hash) {
+ throw new LogicException('You may not add more data to a finalized tree hash.');
+ }
+
+ // Make sure that only 1MB chunks or smaller get passed in
+ if (strlen($data) > Size::MB) {
+ throw new InvalidArgumentException('The chunk of data added is too large for tree hashing.');
+ }
+
+ // Store the raw hash of this data segment
+ $this->checksums[] = hash($this->algorithm, $data, true);
+
+ return $this;
+ }
+
+ /**
+ * Add a checksum to the tree hash directly
+ *
+ * @param string $checksum The checksum to add
+ * @param bool $inBinaryForm Whether or not the checksum is already in binary form
+ *
+ * @return self
+ * @throws LogicException if the root tree hash is already calculated
+ */
+ public function addChecksum($checksum, $inBinaryForm = false)
+ {
+ // Error if hash is already calculated
+ if ($this->hash) {
+ throw new LogicException('You may not add more checksums to a finalized tree hash.');
+ }
+
+ // Convert the checksum to binary form if necessary
+ $this->checksums[] = $inBinaryForm ? $checksum : HashUtils::hexToBin($checksum);
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getHash($returnBinaryForm = false)
+ {
+ if (!$this->hash) {
+ // Perform hashes up the tree to arrive at the root checksum of the tree hash
+ $hashes = $this->checksums;
+ while (count($hashes) > 1) {
+ $sets = array_chunk($hashes, 2);
+ $hashes = array();
+ foreach ($sets as $set) {
+ $hashes[] = (count($set) === 1) ? $set[0] : hash($this->algorithm, $set[0] . $set[1], true);
+ }
+ }
+
+ $this->hashRaw = $hashes[0];
+ $this->hash = HashUtils::binToHex($this->hashRaw);
+ }
+
+ return $returnBinaryForm ? $this->hashRaw : $this->hash;
+ }
+
+ /**
+ * @return array Array of raw checksums composing the tree hash
+ */
+ public function getChecksums()
+ {
+ return $this->checksums;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/HostNameUtils.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/HostNameUtils.php
new file mode 100644
index 0000000..4b791aa
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/HostNameUtils.php
@@ -0,0 +1,85 @@
+getHost(), -14) != '.amazonaws.com') {
+ return self::DEFAULT_REGION;
+ }
+
+ $serviceAndRegion = substr($url->getHost(), 0, -14);
+ // Special handling for S3 regions
+ $separator = strpos($serviceAndRegion, 's3') === 0 ? '-' : '.';
+ $separatorPos = strpos($serviceAndRegion, $separator);
+
+ // If don't detect a separator, then return the default region
+ if ($separatorPos === false) {
+ return self::DEFAULT_REGION;
+ }
+
+ $region = substr($serviceAndRegion, $separatorPos + 1);
+
+ // All GOV regions currently use the default GOV region
+ if ($region == 'us-gov') {
+ return self::DEFAULT_GOV_REGION;
+ }
+
+ return $region;
+ }
+
+ /**
+ * Parse the AWS service name from a URL
+ *
+ * @param Url $url HTTP URL
+ *
+ * @return string Returns a service name (or empty string)
+ * @link http://docs.aws.amazon.com/general/latest/gr/rande.html
+ */
+ public static function parseServiceName(Url $url)
+ {
+ // The service name is the first part of the host
+ $parts = explode('.', $url->getHost(), 2);
+
+ // Special handling for S3
+ if (stripos($parts[0], 's3') === 0) {
+ return 's3';
+ }
+
+ return $parts[0];
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/InstanceMetadata/InstanceMetadataClient.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/InstanceMetadata/InstanceMetadataClient.php
new file mode 100644
index 0000000..229be15
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/InstanceMetadata/InstanceMetadataClient.php
@@ -0,0 +1,102 @@
+ 'http://169.254.169.254/{version}/',
+ 'version' => 'latest',
+ 'request.options' => array(
+ 'connect_timeout' => 5,
+ 'timeout' => 10
+ )
+ ), array('base_url', 'version'));
+
+ return new self($config);
+ }
+
+ /**
+ * Constructor override
+ */
+ public function __construct(Collection $config)
+ {
+ $this->setConfig($config);
+ $this->setBaseUrl($config->get(Options::BASE_URL));
+ $this->defaultHeaders = new Collection();
+ $this->setRequestFactory(RequestFactory::getInstance());
+ }
+
+ /**
+ * Get instance profile credentials
+ *
+ * @return Credentials
+ * @throws InstanceProfileCredentialsException
+ */
+ public function getInstanceProfileCredentials()
+ {
+ try {
+ $request = $this->get('meta-data/iam/security-credentials/');
+ $credentials = trim($request->send()->getBody(true));
+ $result = $this->get("meta-data/iam/security-credentials/{$credentials}")->send()->json();
+ } catch (\Exception $e) {
+ $message = sprintf('Error retrieving credentials from the instance profile metadata server. When you are'
+ . ' not running inside of Amazon EC2, you must provide your AWS access key ID and secret access key in'
+ . ' the "key" and "secret" options when creating a client or provide an instantiated'
+ . ' Aws\\Common\\Credentials\\CredentialsInterface object. (%s)', $e->getMessage());
+ throw new InstanceProfileCredentialsException($message, $e->getCode());
+ }
+
+ // Ensure that the status code was successful
+ if ($result['Code'] !== 'Success') {
+ $e = new InstanceProfileCredentialsException('Unexpected response code: ' . $result['Code']);
+ $e->setStatusCode($result['Code']);
+ throw $e;
+ }
+
+ return new Credentials(
+ $result['AccessKeyId'],
+ $result['SecretAccessKey'],
+ $result['Token'],
+ strtotime($result['Expiration'])
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/InstanceMetadata/Waiter/ServiceAvailable.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/InstanceMetadata/Waiter/ServiceAvailable.php
new file mode 100644
index 0000000..ac305c3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/InstanceMetadata/Waiter/ServiceAvailable.php
@@ -0,0 +1,50 @@
+client->get();
+ try {
+ $request->getCurlOptions()->set(CURLOPT_CONNECTTIMEOUT, 10)
+ ->set(CURLOPT_TIMEOUT, 10);
+ $request->send();
+
+ return true;
+ } catch (CurlException $e) {
+ return false;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Iterator/AwsResourceIterator.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Iterator/AwsResourceIterator.php
new file mode 100644
index 0000000..cdd8119
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Iterator/AwsResourceIterator.php
@@ -0,0 +1,169 @@
+lastResult;
+ }
+
+ /**
+ * {@inheritdoc}
+ * This AWS specific version of the resource iterator provides a default implementation of the typical AWS iterator
+ * process. It relies on configuration and extension to implement the operation-specific logic of handling results
+ * and nextTokens. This method will loop until resources are acquired or there are no more iterations available.
+ */
+ protected function sendRequest()
+ {
+ do {
+ // Prepare the request including setting the next token
+ $this->prepareRequest();
+ if ($this->nextToken) {
+ $this->applyNextToken();
+ }
+
+ // Execute the request and handle the results
+ $this->command->add(Ua::OPTION, Ua::ITERATOR);
+ $this->lastResult = $this->command->getResult();
+ $resources = $this->handleResults($this->lastResult);
+ $this->determineNextToken($this->lastResult);
+
+ // If no resources collected, prepare to reiterate before yielding
+ if ($reiterate = empty($resources) && $this->nextToken) {
+ $this->command = clone $this->originalCommand;
+ }
+ } while ($reiterate);
+
+ return $resources;
+ }
+
+ protected function prepareRequest()
+ {
+ // Get the limit parameter key to set
+ $limitKey = $this->get('limit_key');
+ if ($limitKey && ($limit = $this->command->get($limitKey))) {
+ $pageSize = $this->calculatePageSize();
+
+ // If the limit of the command is different than the pageSize of the iterator, use the smaller value
+ if ($limit && $pageSize) {
+ $realLimit = min($limit, $pageSize);
+ $this->command->set($limitKey, $realLimit);
+ }
+ }
+ }
+
+ protected function handleResults(Model $result)
+ {
+ $results = array();
+
+ // Get the result key that contains the results
+ if ($resultKey = $this->get('result_key')) {
+ $results = $this->getValueFromResult($result, $resultKey) ?: array();
+ }
+
+ return $results;
+ }
+
+ protected function applyNextToken()
+ {
+ // Get the token parameter key to set
+ if ($tokenParam = $this->get('input_token')) {
+ // Set the next token. Works with multi-value tokens
+ if (is_array($tokenParam)) {
+ if (is_array($this->nextToken) && count($tokenParam) === count($this->nextToken)) {
+ foreach (array_combine($tokenParam, $this->nextToken) as $param => $token) {
+ $this->command->set($param, $token);
+ }
+ } else {
+ throw new RuntimeException('The definition of the iterator\'s token parameter and the actual token '
+ . 'value are not compatible.');
+ }
+ } else {
+ $this->command->set($tokenParam, $this->nextToken);
+ }
+ }
+ }
+
+ protected function determineNextToken(Model $result)
+ {
+ $this->nextToken = null;
+
+ // If the value of "more_results" is true or there is no "more_results" to check, then try to get the next token
+ $moreKey = $this->get('more_results');
+ if ($moreKey === null || $this->getValueFromResult($result, $moreKey)) {
+ // Get the token key to check
+ if ($tokenKey = $this->get('output_token')) {
+ // Get the next token's value. Works with multi-value tokens
+ if (is_array($tokenKey)) {
+ $this->nextToken = array();
+ foreach ($tokenKey as $key) {
+ $this->nextToken[] = $this->getValueFromResult($result, $key);
+ }
+ } else {
+ $this->nextToken = $this->getValueFromResult($result, $tokenKey);
+ }
+ }
+ }
+ }
+
+ /**
+ * Extracts the value from the result using Collection::getPath. Also adds some additional logic for keys that need
+ * to access n-1 indexes (e.g., ImportExport, Kinesis). The n-1 logic only works for the known cases. We will switch
+ * to a jmespath implementation in the future to cover all cases
+ *
+ * @param Model $result
+ * @param string $key
+ *
+ * @return mixed|null
+ */
+ protected function getValueFromResult(Model $result, $key)
+ {
+ // Special handling for keys that need to access n-1 indexes
+ if (strpos($key, '#') !== false) {
+ $keyParts = explode('#', $key, 2);
+ $items = $result->getPath(trim($keyParts[0], '/'));
+ if ($items && is_array($items)) {
+ $index = count($items) - 1;
+ $key = strtr($key, array('#' => $index));
+ }
+ }
+
+ // Get the value
+ return $result->getPath($key);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Iterator/AwsResourceIteratorFactory.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Iterator/AwsResourceIteratorFactory.php
new file mode 100644
index 0000000..ce668a2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Iterator/AwsResourceIteratorFactory.php
@@ -0,0 +1,106 @@
+ null,
+ 'output_token' => null,
+ 'limit_key' => null,
+ 'result_key' => null,
+ 'more_results' => null,
+ );
+
+ /**
+ * @var array Legacy configuration options mapped to their new names
+ */
+ private static $legacyConfigOptions = array(
+ 'token_param' => 'input_token',
+ 'token_key' => 'output_token',
+ 'limit_param' => 'limit_key',
+ 'more_key' => 'more_results',
+ );
+
+ /**
+ * @var array Iterator configuration for each iterable operation
+ */
+ protected $config;
+
+ /**
+ * @var ResourceIteratorFactoryInterface Another factory that will be used first to instantiate the iterator
+ */
+ protected $primaryIteratorFactory;
+
+ /**
+ * @param array $config An array of configuration values for the factory
+ * @param ResourceIteratorFactoryInterface $primaryIteratorFactory Another factory to use for chain of command
+ */
+ public function __construct(array $config, ResourceIteratorFactoryInterface $primaryIteratorFactory = null)
+ {
+ $this->primaryIteratorFactory = $primaryIteratorFactory;
+ $this->config = array();
+ foreach ($config as $name => $operation) {
+ $this->config[$name] = $operation + self::$defaultIteratorConfig;
+ }
+ }
+
+ public function build(CommandInterface $command, array $options = array())
+ {
+ // Get the configuration data for the command
+ $commandName = $command->getName();
+ $commandSupported = isset($this->config[$commandName]);
+ $options = $this->translateLegacyConfigOptions($options);
+ $options += $commandSupported ? $this->config[$commandName] : array();
+
+ // Instantiate the iterator using the primary factory (if one was provided)
+ if ($this->primaryIteratorFactory && $this->primaryIteratorFactory->canBuild($command)) {
+ $iterator = $this->primaryIteratorFactory->build($command, $options);
+ } elseif (!$commandSupported) {
+ throw new InvalidArgumentException("Iterator was not found for {$commandName}.");
+ } else {
+ // Instantiate a generic AWS resource iterator
+ $iterator = new AwsResourceIterator($command, $options);
+ }
+
+ return $iterator;
+ }
+
+ public function canBuild(CommandInterface $command)
+ {
+ if ($this->primaryIteratorFactory) {
+ return $this->primaryIteratorFactory->canBuild($command);
+ } else {
+ return isset($this->config[$command->getName()]);
+ }
+ }
+
+ /**
+ * @param array $config The config for a single operation
+ *
+ * @return array The modified config with legacy options translated
+ */
+ private function translateLegacyConfigOptions($config)
+ {
+ foreach (self::$legacyConfigOptions as $legacyOption => $newOption) {
+ if (isset($config[$legacyOption])) {
+ $config[$newOption] = $config[$legacyOption];
+ unset($config[$legacyOption]);
+ }
+ }
+
+ return $config;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractTransfer.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractTransfer.php
new file mode 100644
index 0000000..751b558
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractTransfer.php
@@ -0,0 +1,270 @@
+client = $client;
+ $this->state = $state;
+ $this->source = $source;
+ $this->options = $options;
+
+ $this->init();
+
+ $this->partSize = $this->calculatePartSize();
+ }
+
+ public function __invoke()
+ {
+ return $this->upload();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getAllEvents()
+ {
+ return array(
+ self::BEFORE_PART_UPLOAD,
+ self::AFTER_UPLOAD,
+ self::BEFORE_PART_UPLOAD,
+ self::AFTER_PART_UPLOAD,
+ self::AFTER_ABORT,
+ self::AFTER_COMPLETE
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function abort()
+ {
+ $command = $this->getAbortCommand();
+ $result = $command->getResult();
+
+ $this->state->setAborted(true);
+ $this->stop();
+ $this->dispatch(self::AFTER_ABORT, $this->getEventData($command));
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function stop()
+ {
+ $this->stopped = true;
+
+ return $this->state;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getState()
+ {
+ return $this->state;
+ }
+
+ /**
+ * Get the array of options associated with the transfer
+ *
+ * @return array
+ */
+ public function getOptions()
+ {
+ return $this->options;
+ }
+
+ /**
+ * Set an option on the transfer
+ *
+ * @param string $option Name of the option
+ * @param mixed $value Value to set
+ *
+ * @return self
+ */
+ public function setOption($option, $value)
+ {
+ $this->options[$option] = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get the source body of the upload
+ *
+ * @return EntityBodyInterface
+ */
+ public function getSource()
+ {
+ return $this->source;
+ }
+
+ /**
+ * {@inheritdoc}
+ * @throws MultipartUploadException when an error is encountered. Use getLastException() to get more information.
+ * @throws RuntimeException when attempting to upload an aborted transfer
+ */
+ public function upload()
+ {
+ if ($this->state->isAborted()) {
+ throw new RuntimeException('The transfer has been aborted and cannot be uploaded');
+ }
+
+ $this->stopped = false;
+ $eventData = $this->getEventData();
+ $this->dispatch(self::BEFORE_UPLOAD, $eventData);
+
+ try {
+ $this->transfer();
+ $this->dispatch(self::AFTER_UPLOAD, $eventData);
+
+ if ($this->stopped) {
+ return null;
+ } else {
+ $result = $this->complete();
+ $this->dispatch(self::AFTER_COMPLETE, $eventData);
+ }
+ } catch (\Exception $e) {
+ throw new MultipartUploadException($this->state, $e);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get an array used for event notifications
+ *
+ * @param OperationCommand $command Command to include in event data
+ *
+ * @return array
+ */
+ protected function getEventData(OperationCommand $command = null)
+ {
+ $data = array(
+ 'transfer' => $this,
+ 'source' => $this->source,
+ 'options' => $this->options,
+ 'client' => $this->client,
+ 'part_size' => $this->partSize,
+ 'state' => $this->state
+ );
+
+ if ($command) {
+ $data['command'] = $command;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Hook to initialize the transfer
+ */
+ protected function init() {}
+
+ /**
+ * Determine the upload part size based on the size of the source data and
+ * taking into account the acceptable minimum and maximum part sizes.
+ *
+ * @return int The part size
+ */
+ abstract protected function calculatePartSize();
+
+ /**
+ * Complete the multipart upload
+ *
+ * @return Model Returns the result of the complete multipart upload command
+ */
+ abstract protected function complete();
+
+ /**
+ * Hook to implement in subclasses to perform the actual transfer
+ */
+ abstract protected function transfer();
+
+ /**
+ * Fetches the abort command fom the concrete implementation
+ *
+ * @return OperationCommand
+ */
+ abstract protected function getAbortCommand();
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractTransferState.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractTransferState.php
new file mode 100644
index 0000000..06d6c84
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractTransferState.php
@@ -0,0 +1,164 @@
+uploadId = $uploadId;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getUploadId()
+ {
+ return $this->uploadId;
+ }
+
+ /**
+ * Get a data value from the transfer state's uploadId
+ *
+ * @param string $key Key to retrieve (e.g. Bucket, Key, UploadId, etc)
+ *
+ * @return string|null
+ */
+ public function getFromId($key)
+ {
+ $params = $this->uploadId->toParams();
+
+ return isset($params[$key]) ? $params[$key] : null;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getPart($partNumber)
+ {
+ return isset($this->parts[$partNumber]) ? $this->parts[$partNumber] : null;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function addPart(UploadPartInterface $part)
+ {
+ $partNumber = $part->getPartNumber();
+ $this->parts[$partNumber] = $part;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function hasPart($partNumber)
+ {
+ return isset($this->parts[$partNumber]);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getPartNumbers()
+ {
+ return array_keys($this->parts);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setAborted($aborted)
+ {
+ $this->aborted = (bool) $aborted;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function isAborted()
+ {
+ return $this->aborted;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function count()
+ {
+ return count($this->parts);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->parts);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function serialize()
+ {
+ return serialize(get_object_vars($this));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function unserialize($serialized)
+ {
+ $data = unserialize($serialized);
+ foreach (get_object_vars($this) as $property => $oldValue) {
+ if (array_key_exists($property, $data)) {
+ $this->{$property} = $data[$property];
+ } else {
+ throw new RuntimeException("The {$property} property could be restored during unserialization.");
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php
new file mode 100644
index 0000000..8690d5c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php
@@ -0,0 +1,148 @@
+client = $client;
+
+ return $this;
+ }
+
+ /**
+ * Set the state of the upload. This is useful for resuming from a previously started multipart upload.
+ * You must use a local file stream as the data source if you wish to resume from a previous upload.
+ *
+ * @param TransferStateInterface|string $state Pass a TransferStateInterface object or the ID of the initiated
+ * multipart upload. When an ID is passed, the builder will create a
+ * state object using the data from a ListParts API response.
+ *
+ * @return $this
+ */
+ public function resumeFrom($state)
+ {
+ $this->state = $state;
+
+ return $this;
+ }
+
+ /**
+ * Set the data source of the transfer
+ *
+ * @param resource|string|EntityBody $source Source of the transfer. Pass a string to transfer from a file on disk.
+ * You can also stream from a resource returned from fopen or a Guzzle
+ * {@see EntityBody} object.
+ *
+ * @return $this
+ * @throws InvalidArgumentException when the source cannot be found or opened
+ */
+ public function setSource($source)
+ {
+ // Use the contents of a file as the data source
+ if (is_string($source)) {
+ if (!file_exists($source)) {
+ throw new InvalidArgumentException("File does not exist: {$source}");
+ }
+ // Clear the cache so that we send accurate file sizes
+ clearstatcache(true, $source);
+ $source = fopen($source, 'r');
+ }
+
+ $this->source = EntityBody::factory($source);
+
+ if ($this->source->isSeekable() && $this->source->getSize() == 0) {
+ throw new InvalidArgumentException('Empty body provided to upload builder');
+ }
+
+ return $this;
+ }
+
+ /**
+ * Specify the headers to set on the upload
+ *
+ * @param array $headers Headers to add to the uploaded object
+ *
+ * @return $this
+ */
+ public function setHeaders(array $headers)
+ {
+ $this->headers = $headers;
+
+ return $this;
+ }
+
+ /**
+ * Build the appropriate uploader based on the builder options
+ *
+ * @return TransferInterface
+ */
+ abstract public function build();
+
+ /**
+ * Initiate the multipart upload
+ *
+ * @return TransferStateInterface
+ */
+ abstract protected function initiateMultipartUpload();
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractUploadId.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractUploadId.php
new file mode 100644
index 0000000..da79521
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractUploadId.php
@@ -0,0 +1,89 @@
+loadData($data);
+
+ return $uploadId;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function toParams()
+ {
+ return $this->data;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function serialize()
+ {
+ return serialize($this->data);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function unserialize($serialized)
+ {
+ $this->loadData(unserialize($serialized));
+ }
+
+ /**
+ * Loads an array of data into the UploadId by extracting only the needed keys
+ *
+ * @param array $data Data to load
+ *
+ * @throws InvalidArgumentException if a required key is missing
+ */
+ protected function loadData($data)
+ {
+ $data = array_replace(static::$expectedValues, array_intersect_key($data, static::$expectedValues));
+ foreach ($data as $key => $value) {
+ if (isset($data[$key])) {
+ $this->data[$key] = $data[$key];
+ } else {
+ throw new InvalidArgumentException("A required key [$key] was missing from the UploadId.");
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractUploadPart.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractUploadPart.php
new file mode 100644
index 0000000..1cf4c6d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/AbstractUploadPart.php
@@ -0,0 +1,101 @@
+loadData($data);
+
+ return $part;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getPartNumber()
+ {
+ return $this->partNumber;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function toArray()
+ {
+ $array = array();
+ foreach (static::$keyMap as $key => $property) {
+ $array[$key] = $this->{$property};
+ }
+
+ return $array;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function serialize()
+ {
+ return serialize($this->toArray());
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function unserialize($serialized)
+ {
+ $this->loadData(unserialize($serialized));
+ }
+
+ /**
+ * Loads an array of data into the upload part by extracting only the needed keys
+ *
+ * @param array|\Traversable $data Data to load into the upload part value object
+ *
+ * @throws InvalidArgumentException if a required key is missing
+ */
+ protected function loadData($data)
+ {
+ foreach (static::$keyMap as $key => $property) {
+ if (isset($data[$key])) {
+ $this->{$property} = $data[$key];
+ } else {
+ throw new InvalidArgumentException("A required key [$key] was missing from the upload part.");
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/TransferInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/TransferInterface.php
new file mode 100644
index 0000000..1fc1ae9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Model/MultipartUpload/TransferInterface.php
@@ -0,0 +1,66 @@
+ 'Aws\Common\Aws',
+ 'services' => array(
+
+ 'default_settings' => array(
+ 'params' => array()
+ ),
+
+ 'autoscaling' => array(
+ 'alias' => 'AutoScaling',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\AutoScaling\AutoScalingClient'
+ ),
+
+ 'cloudformation' => array(
+ 'alias' => 'CloudFormation',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CloudFormation\CloudFormationClient'
+ ),
+
+ 'cloudfront' => array(
+ 'alias' => 'CloudFront',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CloudFront\CloudFrontClient'
+ ),
+
+ 'cloudfront_20120505' => array(
+ 'extends' => 'cloudfront',
+ 'params' => array(
+ 'version' => '2012-05-05'
+ )
+ ),
+
+ 'cloudhsm' => array(
+ 'alias' => 'CloudHsm',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CloudHsm\CloudHsmClient'
+ ),
+
+ 'cloudsearch' => array(
+ 'alias' => 'CloudSearch',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CloudSearch\CloudSearchClient'
+ ),
+
+ 'cloudsearch_20110201' => array(
+ 'extends' => 'cloudsearch',
+ 'params' => array(
+ 'version' => '2011-02-01'
+ )
+ ),
+
+ 'cloudsearchdomain' => array(
+ 'alias' => 'CloudSearchDomain',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CloudSearchDomain\CloudSearchDomainClient'
+ ),
+
+ 'cloudtrail' => array(
+ 'alias' => 'CloudTrail',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CloudTrail\CloudTrailClient'
+ ),
+
+ 'cloudwatch' => array(
+ 'alias' => 'CloudWatch',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CloudWatch\CloudWatchClient'
+ ),
+
+ 'cloudwatchlogs' => array(
+ 'alias' => 'CloudWatchLogs',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CloudWatchLogs\CloudWatchLogsClient'
+ ),
+
+ 'cognito-identity' => array(
+ 'alias' => 'CognitoIdentity',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CognitoIdentity\CognitoIdentityClient'
+ ),
+
+ 'cognitoidentity' => array('extends' => 'cognito-identity'),
+
+ 'cognito-sync' => array(
+ 'alias' => 'CognitoSync',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CognitoSync\CognitoSyncClient'
+ ),
+
+ 'cognitosync' => array('extends' => 'cognito-sync'),
+
+ 'codecommit' => array(
+ 'alias' => 'CodeCommit',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CodeCommit\CodeCommitClient'
+ ),
+
+ 'codedeploy' => array(
+ 'alias' => 'CodeDeploy',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CodeDeploy\CodeDeployClient'
+ ),
+
+ 'codepipeline' => array(
+ 'alias' => 'CodePipeline',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\CodePipeline\CodePipelineClient'
+ ),
+
+ 'config' => array(
+ 'alias' => 'ConfigService',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\ConfigService\ConfigServiceClient'
+ ),
+
+ 'datapipeline' => array(
+ 'alias' => 'DataPipeline',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\DataPipeline\DataPipelineClient'
+ ),
+
+ 'devicefarm' => array(
+ 'alias' => 'DeviceFarm',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\DeviceFarm\DeviceFarmClient'
+ ),
+
+ 'directconnect' => array(
+ 'alias' => 'DirectConnect',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\DirectConnect\DirectConnectClient'
+ ),
+
+ 'ds' => array(
+ 'alias' => 'DirectoryService',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\DirectoryService\DirectoryServiceClient'
+ ),
+
+ 'dynamodb' => array(
+ 'alias' => 'DynamoDb',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\DynamoDb\DynamoDbClient'
+ ),
+
+ 'dynamodb_20111205' => array(
+ 'extends' => 'dynamodb',
+ 'params' => array(
+ 'version' => '2011-12-05'
+ )
+ ),
+
+ 'dynamodbstreams' => array(
+ 'alias' => 'DynamoDbStreams',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\DynamoDbStreams\DynamoDbStreamsClient'
+ ),
+
+ 'ec2' => array(
+ 'alias' => 'Ec2',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Ec2\Ec2Client'
+ ),
+
+ 'ecs' => array(
+ 'alias' => 'Ecs',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Ecs\EcsClient'
+ ),
+
+ 'elasticache' => array(
+ 'alias' => 'ElastiCache',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\ElastiCache\ElastiCacheClient'
+ ),
+
+ 'elasticbeanstalk' => array(
+ 'alias' => 'ElasticBeanstalk',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\ElasticBeanstalk\ElasticBeanstalkClient'
+ ),
+
+ 'efs' => array(
+ 'alias' => 'Efs',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Efs\EfsClient'
+ ),
+
+ 'elasticloadbalancing' => array(
+ 'alias' => 'ElasticLoadBalancing',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\ElasticLoadBalancing\ElasticLoadBalancingClient'
+ ),
+
+ 'elastictranscoder' => array(
+ 'alias' => 'ElasticTranscoder',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\ElasticTranscoder\ElasticTranscoderClient'
+ ),
+
+ 'emr' => array(
+ 'alias' => 'Emr',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Emr\EmrClient'
+ ),
+
+ 'glacier' => array(
+ 'alias' => 'Glacier',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Glacier\GlacierClient'
+ ),
+
+ 'kinesis' => array(
+ 'alias' => 'Kinesis',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Kinesis\KinesisClient'
+ ),
+
+ 'kms' => array(
+ 'alias' => 'Kms',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Kms\KmsClient'
+ ),
+
+ 'lambda' => array(
+ 'alias' => 'Lambda',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Lambda\LambdaClient'
+ ),
+
+ 'iam' => array(
+ 'alias' => 'Iam',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Iam\IamClient'
+ ),
+
+ 'importexport' => array(
+ 'alias' => 'ImportExport',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\ImportExport\ImportExportClient'
+ ),
+
+ 'machinelearning' => array(
+ 'alias' => 'MachineLearning',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\MachineLearning\MachineLearningClient'
+ ),
+
+ 'opsworks' => array(
+ 'alias' => 'OpsWorks',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\OpsWorks\OpsWorksClient'
+ ),
+
+ 'rds' => array(
+ 'alias' => 'Rds',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Rds\RdsClient'
+ ),
+
+ 'redshift' => array(
+ 'alias' => 'Redshift',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Redshift\RedshiftClient'
+ ),
+
+ 'route53' => array(
+ 'alias' => 'Route53',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Route53\Route53Client'
+ ),
+
+ 'route53domains' => array(
+ 'alias' => 'Route53Domains',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Route53Domains\Route53DomainsClient'
+ ),
+
+ 's3' => array(
+ 'alias' => 'S3',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\S3\S3Client'
+ ),
+
+ 'sdb' => array(
+ 'alias' => 'SimpleDb',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\SimpleDb\SimpleDbClient'
+ ),
+
+ 'ses' => array(
+ 'alias' => 'Ses',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Ses\SesClient'
+ ),
+
+ 'sns' => array(
+ 'alias' => 'Sns',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Sns\SnsClient'
+ ),
+
+ 'sqs' => array(
+ 'alias' => 'Sqs',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Sqs\SqsClient'
+ ),
+
+ 'ssm' => array(
+ 'alias' => 'Ssm',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Ssm\SsmClient'
+ ),
+
+ 'storagegateway' => array(
+ 'alias' => 'StorageGateway',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\StorageGateway\StorageGatewayClient'
+ ),
+
+ 'sts' => array(
+ 'alias' => 'Sts',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Sts\StsClient'
+ ),
+
+ 'support' => array(
+ 'alias' => 'Support',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Support\SupportClient'
+ ),
+
+ 'swf' => array(
+ 'alias' => 'Swf',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\Swf\SwfClient'
+ ),
+
+ 'workspaces' => array(
+ 'alias' => 'WorkSpaces',
+ 'extends' => 'default_settings',
+ 'class' => 'Aws\WorkSpaces\WorkSpacesClient'
+ ),
+ )
+);
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Resources/public-endpoints.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Resources/public-endpoints.php
new file mode 100644
index 0000000..d939f1f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Resources/public-endpoints.php
@@ -0,0 +1,79 @@
+ 2,
+ 'endpoints' => array(
+ '*/*' => array(
+ 'endpoint' => '{service}.{region}.amazonaws.com'
+ ),
+ 'cn-north-1/*' => array(
+ 'endpoint' => '{service}.{region}.amazonaws.com.cn',
+ 'signatureVersion' => 'v4'
+ ),
+ 'us-gov-west-1/iam' => array(
+ 'endpoint' => 'iam.us-gov.amazonaws.com'
+ ),
+ 'us-gov-west-1/sts' => array(
+ 'endpoint' => 'sts.us-gov-west-1.amazonaws.com'
+ ),
+ 'us-gov-west-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ '*/cloudfront' => array(
+ 'endpoint' => 'cloudfront.amazonaws.com',
+ 'credentialScope' => array(
+ 'region' => 'us-east-1'
+ )
+ ),
+ '*/iam' => array(
+ 'endpoint' => 'iam.amazonaws.com',
+ 'credentialScope' => array(
+ 'region' => 'us-east-1'
+ )
+ ),
+ '*/importexport' => array(
+ 'endpoint' => 'importexport.amazonaws.com',
+ 'credentialScope' => array(
+ 'region' => 'us-east-1'
+ )
+ ),
+ '*/route53' => array(
+ 'endpoint' => 'route53.amazonaws.com',
+ 'credentialScope' => array(
+ 'region' => 'us-east-1'
+ )
+ ),
+ '*/sts' => array(
+ 'endpoint' => 'sts.amazonaws.com',
+ 'credentialScope' => array(
+ 'region' => 'us-east-1'
+ )
+ ),
+ 'us-east-1/sdb' => array(
+ 'endpoint' => 'sdb.amazonaws.com'
+ ),
+ 'us-east-1/s3' => array(
+ 'endpoint' => 's3.amazonaws.com'
+ ),
+ 'us-west-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'us-west-2/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'eu-west-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'ap-southeast-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'ap-southeast-2/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'ap-northeast-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ ),
+ 'sa-east-1/s3' => array(
+ 'endpoint' => 's3-{region}.amazonaws.com'
+ )
+ )
+);
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Resources/sdk1-config.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Resources/sdk1-config.php
new file mode 100644
index 0000000..a5121ab
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Resources/sdk1-config.php
@@ -0,0 +1,138 @@
+ array('_aws'),
+ 'services' => array(
+
+ 'sdk1_settings' => array(
+ 'extends' => 'default_settings',
+ 'params' => array(
+ 'certificate_authority' => false
+ )
+ ),
+
+ 'v1.autoscaling' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonAS'
+ ),
+
+ 'v1.cloudformation' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonCloudFormation'
+ ),
+
+ 'v1.cloudfront' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonCloudFront'
+ ),
+
+ 'v1.cloudsearch' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonCloudSearch'
+ ),
+
+ 'v1.cloudwatch' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonCloudWatch'
+ ),
+
+ 'v1.dynamodb' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonDynamoDB'
+ ),
+
+ 'v1.ec2' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonEC2'
+ ),
+
+ 'v1.elasticache' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonElastiCache'
+ ),
+
+ 'v1.elasticbeanstalk' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonElasticBeanstalk'
+ ),
+
+ 'v1.elb' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonELB'
+ ),
+
+ 'v1.emr' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonEMR'
+ ),
+
+ 'v1.iam' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonIAM'
+ ),
+
+ 'v1.importexport' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonImportExport'
+ ),
+
+ 'v1.rds' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonRDS'
+ ),
+
+ 'v1.s3' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonS3'
+ ),
+
+ 'v1.sdb' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonSDB'
+ ),
+
+ 'v1.ses' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonSES'
+ ),
+
+ 'v1.sns' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonSNS'
+ ),
+
+ 'v1.sqs' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonSQS'
+ ),
+
+ 'v1.storagegateway' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonStorageGateway'
+ ),
+
+ 'v1.sts' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonSTS'
+ ),
+
+ 'v1.swf' => array(
+ 'extends' => 'sdk1_settings',
+ 'class' => 'AmazonSWF'
+ )
+ )
+);
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/RulesEndpointProvider.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/RulesEndpointProvider.php
new file mode 100644
index 0000000..ec57cb8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/RulesEndpointProvider.php
@@ -0,0 +1,67 @@
+patterns = $patterns;
+ }
+
+ /**
+ * Creates and returns the default RulesEndpointProvider based on the
+ * public rule sets.
+ *
+ * @return self
+ */
+ public static function fromDefaults()
+ {
+ return new self(require __DIR__ . '/Resources/public-endpoints.php');
+ }
+
+ public function __invoke(array $args = array())
+ {
+ if (!isset($args['service'])) {
+ throw new \InvalidArgumentException('Requires a "service" value');
+ }
+
+ if (!isset($args['region'])) {
+ throw new \InvalidArgumentException('Requires a "region" value');
+ }
+
+ foreach ($this->getKeys($args['region'], $args['service']) as $key) {
+ if (isset($this->patterns['endpoints'][$key])) {
+ return $this->expand($this->patterns['endpoints'][$key], $args);
+ }
+ }
+
+ throw new \RuntimeException('Could not resolve endpoint');
+ }
+
+ private function expand(array $config, array $args)
+ {
+ $scheme = isset($args['scheme']) ? $args['scheme'] : 'https';
+ $config['endpoint'] = $scheme . '://' . str_replace(
+ array('{service}', '{region}'),
+ array($args['service'], $args['region']),
+ $config['endpoint']
+ );
+
+ return $config;
+ }
+
+ private function getKeys($region, $service)
+ {
+ return array("$region/$service", "$region/*", "*/$service", "*/*");
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/AbstractSignature.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/AbstractSignature.php
new file mode 100644
index 0000000..2d25d87
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/AbstractSignature.php
@@ -0,0 +1,44 @@
+credentials = $credentials;
+ $this->signature = $signature;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getSubscribedEvents()
+ {
+ return array(
+ 'request.before_send' => array('onRequestBeforeSend', -255),
+ 'client.credentials_changed' => array('onCredentialsChanged')
+ );
+ }
+
+ /**
+ * Updates the listener with new credentials if the client is updated
+ *
+ * @param Event $event Event emitted
+ */
+ public function onCredentialsChanged(Event $event)
+ {
+ $this->credentials = $event['credentials'];
+ }
+
+ /**
+ * Signs requests before they are sent
+ *
+ * @param Event $event Event emitted
+ */
+ public function onRequestBeforeSend(Event $event)
+ {
+ $creds = $this->credentials instanceof AbstractRefreshableCredentials
+ ? $this->credentials->getCredentials()
+ : $this->credentials;
+
+ if(!$creds instanceof NullCredentials) {
+ $this->signature->signRequest($event['request'], $creds);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/SignatureV2.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/SignatureV2.php
new file mode 100644
index 0000000..c900287
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/SignatureV2.php
@@ -0,0 +1,109 @@
+getTimestamp(true);
+
+ // set values we need in CanonicalizedParameterString
+ $this->addParameter($request, 'Timestamp', gmdate('c', $timestamp));
+ $this->addParameter($request, 'SignatureVersion', '2');
+ $this->addParameter($request, 'SignatureMethod', 'HmacSHA256');
+ $this->addParameter($request, 'AWSAccessKeyId', $credentials->getAccessKeyId());
+
+ if ($token = $credentials->getSecurityToken()) {
+ $this->addParameter($request, 'SecurityToken', $token);
+ }
+
+ // Get the path and ensure it's absolute
+ $path = '/' . ltrim($request->getUrl(true)->normalizePath()->getPath(), '/');
+
+ // build string to sign
+ $sign = $request->getMethod() . "\n"
+ . $request->getHost() . "\n"
+ . $path . "\n"
+ . $this->getCanonicalizedParameterString($request);
+
+ // Add the string to sign to the request for debugging purposes
+ $request->getParams()->set('aws.string_to_sign', $sign);
+
+ $signature = base64_encode(
+ hash_hmac(
+ 'sha256',
+ $sign,
+ $credentials->getSecretKey(),
+ true
+ )
+ );
+
+ $this->addParameter($request, 'Signature', $signature);
+ }
+
+ /**
+ * Add a parameter key and value to the request according to type
+ *
+ * @param RequestInterface $request The request
+ * @param string $key The name of the parameter
+ * @param string $value The value of the parameter
+ */
+ public function addParameter(RequestInterface $request, $key, $value)
+ {
+ if ($request->getMethod() == 'POST') {
+ $request->setPostField($key, $value);
+ } else {
+ $request->getQuery()->set($key, $value);
+ }
+ }
+
+ /**
+ * Get the canonicalized query/parameter string for a request
+ *
+ * @param RequestInterface $request Request used to build canonicalized string
+ *
+ * @return string
+ */
+ private function getCanonicalizedParameterString(RequestInterface $request)
+ {
+ if ($request->getMethod() == 'POST') {
+ $params = $request->getPostFields()->toArray();
+ } else {
+ $params = $request->getQuery()->toArray();
+ }
+
+ // Don't resign a previous signature value
+ unset($params['Signature']);
+ uksort($params, 'strcmp');
+
+ $str = '';
+ foreach ($params as $key => $val) {
+ $str .= rawurlencode($key) . '=' . rawurlencode($val) . '&';
+ }
+
+ return substr($str, 0, -1);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/SignatureV3Https.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/SignatureV3Https.php
new file mode 100644
index 0000000..be0514e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/SignatureV3Https.php
@@ -0,0 +1,52 @@
+hasHeader('date') && !$request->hasHeader('x-amz-date')) {
+ $request->setHeader('Date', gmdate(DateFormat::RFC1123, $this->getTimestamp()));
+ }
+
+ // Add the security token if one is present
+ if ($credentials->getSecurityToken()) {
+ $request->setHeader('x-amz-security-token', $credentials->getSecurityToken());
+ }
+
+ // Determine the string to sign
+ $stringToSign = (string) ($request->getHeader('Date') ?: $request->getHeader('x-amz-date'));
+ $request->getParams()->set('aws.string_to_sign', $stringToSign);
+
+ // Calculate the signature
+ $signature = base64_encode(hash_hmac('sha256', $stringToSign, $credentials->getSecretKey(), true));
+
+ // Add the authorization header to the request
+ $headerFormat = 'AWS3-HTTPS AWSAccessKeyId=%s,Algorithm=HmacSHA256,Signature=%s';
+ $request->setHeader('X-Amzn-Authorization', sprintf($headerFormat, $credentials->getAccessKeyId(), $signature));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/SignatureV4.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/SignatureV4.php
new file mode 100644
index 0000000..2137760
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Signature/SignatureV4.php
@@ -0,0 +1,477 @@
+serviceName = $serviceName;
+ $this->regionName = $regionName;
+ }
+
+ /**
+ * Set the service name instead of inferring it from a request URL
+ *
+ * @param string $service Name of the service used when signing
+ *
+ * @return self
+ */
+ public function setServiceName($service)
+ {
+ $this->serviceName = $service;
+
+ return $this;
+ }
+
+ /**
+ * Set the region name instead of inferring it from a request URL
+ *
+ * @param string $region Name of the region used when signing
+ *
+ * @return self
+ */
+ public function setRegionName($region)
+ {
+ $this->regionName = $region;
+
+ return $this;
+ }
+
+ /**
+ * Set the maximum number of computed hashes to cache
+ *
+ * @param int $maxCacheSize Maximum number of hashes to cache
+ *
+ * @return self
+ */
+ public function setMaxCacheSize($maxCacheSize)
+ {
+ $this->maxCacheSize = $maxCacheSize;
+
+ return $this;
+ }
+
+ public function signRequest(RequestInterface $request, CredentialsInterface $credentials)
+ {
+ $timestamp = $this->getTimestamp();
+ $longDate = gmdate(DateFormat::ISO8601, $timestamp);
+ $shortDate = substr($longDate, 0, 8);
+
+ // Remove any previously set Authorization headers so that retries work
+ $request->removeHeader('Authorization');
+
+ // Requires a x-amz-date header or Date
+ if ($request->hasHeader('x-amz-date') || !$request->hasHeader('Date')) {
+ $request->setHeader('x-amz-date', $longDate);
+ } else {
+ $request->setHeader('Date', gmdate(DateFormat::RFC1123, $timestamp));
+ }
+
+ // Add the security token if one is present
+ if ($credentials->getSecurityToken()) {
+ $request->setHeader('x-amz-security-token', $credentials->getSecurityToken());
+ }
+
+ // Parse the service and region or use one that is explicitly set
+ $region = $this->regionName;
+ $service = $this->serviceName;
+ if (!$region || !$service) {
+ $url = Url::factory($request->getUrl());
+ $region = $region ?: HostNameUtils::parseRegionName($url);
+ $service = $service ?: HostNameUtils::parseServiceName($url);
+ }
+
+ $credentialScope = $this->createScope($shortDate, $region, $service);
+ $payload = $this->getPayload($request);
+ $signingContext = $this->createSigningContext($request, $payload);
+ $signingContext['string_to_sign'] = $this->createStringToSign(
+ $longDate,
+ $credentialScope,
+ $signingContext['canonical_request']
+ );
+
+ // Calculate the signing key using a series of derived keys
+ $signingKey = $this->getSigningKey($shortDate, $region, $service, $credentials->getSecretKey());
+ $signature = hash_hmac('sha256', $signingContext['string_to_sign'], $signingKey);
+
+ $request->setHeader('Authorization', "AWS4-HMAC-SHA256 "
+ . "Credential={$credentials->getAccessKeyId()}/{$credentialScope}, "
+ . "SignedHeaders={$signingContext['signed_headers']}, Signature={$signature}");
+
+ // Add debug information to the request
+ $request->getParams()->set('aws.signature', $signingContext);
+ }
+
+ public function createPresignedUrl(
+ RequestInterface $request,
+ CredentialsInterface $credentials,
+ $expires
+ ) {
+ $request = $this->createPresignedRequest($request, $credentials);
+ $query = $request->getQuery();
+ $httpDate = gmdate(DateFormat::ISO8601, $this->getTimestamp());
+ $shortDate = substr($httpDate, 0, 8);
+ $scope = $this->createScope(
+ $shortDate,
+ $this->regionName,
+ $this->serviceName
+ );
+ $this->addQueryValues($scope, $request, $credentials, $expires);
+ $payload = $this->getPresignedPayload($request);
+ $context = $this->createSigningContext($request, $payload);
+ $stringToSign = $this->createStringToSign(
+ $httpDate,
+ $scope,
+ $context['canonical_request']
+ );
+ $key = $this->getSigningKey(
+ $shortDate,
+ $this->regionName,
+ $this->serviceName,
+ $credentials->getSecretKey()
+ );
+ $query['X-Amz-Signature'] = hash_hmac('sha256', $stringToSign, $key);
+
+ return $request->getUrl();
+ }
+
+ /**
+ * Converts a POST request to a GET request by moving POST fields into the
+ * query string.
+ *
+ * Useful for pre-signing query protocol requests.
+ *
+ * @param EntityEnclosingRequestInterface $request Request to clone
+ *
+ * @return RequestInterface
+ * @throws \InvalidArgumentException if the method is not POST
+ */
+ public static function convertPostToGet(EntityEnclosingRequestInterface $request)
+ {
+ if ($request->getMethod() !== 'POST') {
+ throw new \InvalidArgumentException('Expected a POST request but '
+ . 'received a ' . $request->getMethod() . ' request.');
+ }
+
+ $cloned = RequestFactory::getInstance()
+ ->cloneRequestWithMethod($request, 'GET');
+
+ // Move POST fields to the query if they are present
+ foreach ($request->getPostFields() as $name => $value) {
+ $cloned->getQuery()->set($name, $value);
+ }
+
+ return $cloned;
+ }
+
+ /**
+ * Get the payload part of a signature from a request.
+ *
+ * @param RequestInterface $request
+ *
+ * @return string
+ */
+ protected function getPayload(RequestInterface $request)
+ {
+ // Calculate the request signature payload
+ if ($request->hasHeader('x-amz-content-sha256')) {
+ // Handle streaming operations (e.g. Glacier.UploadArchive)
+ return (string) $request->getHeader('x-amz-content-sha256');
+ }
+
+ if ($request instanceof EntityEnclosingRequestInterface) {
+ if ($request->getMethod() == 'POST' && count($request->getPostFields())) {
+ return hash('sha256', (string) $request->getPostFields());
+ } elseif ($body = $request->getBody()) {
+ return Stream::getHash($request->getBody(), 'sha256');
+ }
+ }
+
+ return self::DEFAULT_PAYLOAD;
+ }
+
+ /**
+ * Get the payload of a request for use with pre-signed URLs.
+ *
+ * @param RequestInterface $request
+ *
+ * @return string
+ */
+ protected function getPresignedPayload(RequestInterface $request)
+ {
+ return $this->getPayload($request);
+ }
+
+ protected function createCanonicalizedPath(RequestInterface $request)
+ {
+ $doubleEncoded = rawurlencode(ltrim($request->getPath(), '/'));
+
+ return '/' . str_replace('%2F', '/', $doubleEncoded);
+ }
+
+ private function createStringToSign($longDate, $credentialScope, $creq)
+ {
+ return "AWS4-HMAC-SHA256\n{$longDate}\n{$credentialScope}\n"
+ . hash('sha256', $creq);
+ }
+
+ private function createPresignedRequest(
+ RequestInterface $request,
+ CredentialsInterface $credentials
+ ) {
+ // POST requests can be sent as GET requests instead by moving the
+ // POST fields into the query string.
+ if ($request instanceof EntityEnclosingRequestInterface
+ && $request->getMethod() === 'POST'
+ && strpos($request->getHeader('Content-Type'), 'application/x-www-form-urlencoded') === 0
+ ) {
+ $sr = RequestFactory::getInstance()
+ ->cloneRequestWithMethod($request, 'GET');
+ // Move POST fields to the query if they are present
+ foreach ($request->getPostFields() as $name => $value) {
+ $sr->getQuery()->set($name, $value);
+ }
+ } else {
+ $sr = clone $request;
+ }
+
+ // Make sure to handle temporary credentials
+ if ($token = $credentials->getSecurityToken()) {
+ $sr->setHeader('X-Amz-Security-Token', $token);
+ $sr->getQuery()->set('X-Amz-Security-Token', $token);
+ }
+
+ $this->moveHeadersToQuery($sr);
+
+ return $sr;
+ }
+
+ /**
+ * Create the canonical representation of a request
+ *
+ * @param RequestInterface $request Request to canonicalize
+ * @param string $payload Request payload (typically the value
+ * of the x-amz-content-sha256 header.
+ *
+ * @return array Returns an array of context information including:
+ * - canonical_request
+ * - signed_headers
+ */
+ private function createSigningContext(RequestInterface $request, $payload)
+ {
+ $signable = array(
+ 'host' => true,
+ 'date' => true,
+ 'content-md5' => true
+ );
+
+ // Normalize the path as required by SigV4 and ensure it's absolute
+ $canon = $request->getMethod() . "\n"
+ . $this->createCanonicalizedPath($request) . "\n"
+ . $this->getCanonicalizedQueryString($request) . "\n";
+
+ $canonHeaders = array();
+
+ foreach ($request->getHeaders()->getAll() as $key => $values) {
+ $key = strtolower($key);
+ if (isset($signable[$key]) || substr($key, 0, 6) === 'x-amz-') {
+ $values = $values->toArray();
+ if (count($values) == 1) {
+ $values = $values[0];
+ } else {
+ sort($values);
+ $values = implode(',', $values);
+ }
+ $canonHeaders[$key] = $key . ':' . preg_replace('/\s+/', ' ', $values);
+ }
+ }
+
+ ksort($canonHeaders);
+ $signedHeadersString = implode(';', array_keys($canonHeaders));
+ $canon .= implode("\n", $canonHeaders) . "\n\n"
+ . $signedHeadersString . "\n"
+ . $payload;
+
+ return array(
+ 'canonical_request' => $canon,
+ 'signed_headers' => $signedHeadersString
+ );
+ }
+
+ /**
+ * Get a hash for a specific key and value. If the hash was previously
+ * cached, return it
+ *
+ * @param string $shortDate Short date
+ * @param string $region Region name
+ * @param string $service Service name
+ * @param string $secretKey Secret Access Key
+ *
+ * @return string
+ */
+ private function getSigningKey($shortDate, $region, $service, $secretKey)
+ {
+ $cacheKey = $shortDate . '_' . $region . '_' . $service . '_' . $secretKey;
+
+ // Retrieve the hash form the cache or create it and add it to the cache
+ if (!isset($this->hashCache[$cacheKey])) {
+ // When the cache size reaches the max, then just clear the cache
+ if (++$this->cacheSize > $this->maxCacheSize) {
+ $this->hashCache = array();
+ $this->cacheSize = 0;
+ }
+ $dateKey = hash_hmac('sha256', $shortDate, 'AWS4' . $secretKey, true);
+ $regionKey = hash_hmac('sha256', $region, $dateKey, true);
+ $serviceKey = hash_hmac('sha256', $service, $regionKey, true);
+ $this->hashCache[$cacheKey] = hash_hmac('sha256', 'aws4_request', $serviceKey, true);
+ }
+
+ return $this->hashCache[$cacheKey];
+ }
+
+ /**
+ * Get the canonicalized query string for a request
+ *
+ * @param RequestInterface $request
+ * @return string
+ */
+ private function getCanonicalizedQueryString(RequestInterface $request)
+ {
+ $queryParams = $request->getQuery()->getAll();
+ unset($queryParams['X-Amz-Signature']);
+ if (empty($queryParams)) {
+ return '';
+ }
+
+ $qs = '';
+ ksort($queryParams);
+ foreach ($queryParams as $key => $values) {
+ if (is_array($values)) {
+ sort($values);
+ } elseif ($values === 0) {
+ $values = array('0');
+ } elseif (!$values) {
+ $values = array('');
+ }
+
+ foreach ((array) $values as $value) {
+ if ($value === QueryString::BLANK) {
+ $value = '';
+ }
+ $qs .= rawurlencode($key) . '=' . rawurlencode($value) . '&';
+ }
+ }
+
+ return substr($qs, 0, -1);
+ }
+
+ private function convertExpires($expires)
+ {
+ if ($expires instanceof \DateTime) {
+ $expires = $expires->getTimestamp();
+ } elseif (!is_numeric($expires)) {
+ $expires = strtotime($expires);
+ }
+
+ $duration = $expires - time();
+
+ // Ensure that the duration of the signature is not longer than a week
+ if ($duration > 604800) {
+ throw new \InvalidArgumentException('The expiration date of a '
+ . 'signature version 4 presigned URL must be less than one '
+ . 'week');
+ }
+
+ return $duration;
+ }
+
+ private function createScope($shortDate, $region, $service)
+ {
+ return $shortDate
+ . '/' . $region
+ . '/' . $service
+ . '/aws4_request';
+ }
+
+ private function addQueryValues(
+ $scope,
+ RequestInterface $request,
+ CredentialsInterface $credentials,
+ $expires
+ ) {
+ $credential = $credentials->getAccessKeyId() . '/' . $scope;
+
+ // Set query params required for pre-signed URLs
+ $request->getQuery()
+ ->set('X-Amz-Algorithm', 'AWS4-HMAC-SHA256')
+ ->set('X-Amz-Credential', $credential)
+ ->set('X-Amz-Date', gmdate('Ymd\THis\Z', $this->getTimestamp()))
+ ->set('X-Amz-SignedHeaders', 'Host')
+ ->set('X-Amz-Expires', $this->convertExpires($expires));
+ }
+
+ private function moveHeadersToQuery(RequestInterface $request)
+ {
+ $query = $request->getQuery();
+
+ foreach ($request->getHeaders() as $name => $header) {
+ if (substr($name, 0, 5) == 'x-amz') {
+ $query[$header->getName()] = (string) $header;
+ }
+ if ($name !== 'host') {
+ $request->removeHeader($name);
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/AbstractResourceWaiter.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/AbstractResourceWaiter.php
new file mode 100644
index 0000000..5334848
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/AbstractResourceWaiter.php
@@ -0,0 +1,53 @@
+client = $client;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function wait()
+ {
+ if (!$this->client) {
+ throw new RuntimeException('No client has been specified on the waiter');
+ }
+
+ parent::wait();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/AbstractWaiter.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/AbstractWaiter.php
new file mode 100644
index 0000000..09dbea1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/AbstractWaiter.php
@@ -0,0 +1,146 @@
+config[self::MAX_ATTEMPTS]) ? $this->config[self::MAX_ATTEMPTS] : 10;
+ }
+
+ /**
+ * Get the amount of time in seconds to delay between attempts
+ *
+ * @return int
+ */
+ public function getInterval()
+ {
+ return isset($this->config[self::INTERVAL]) ? $this->config[self::INTERVAL] : 0;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setMaxAttempts($maxAttempts)
+ {
+ $this->config[self::MAX_ATTEMPTS] = $maxAttempts;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setInterval($interval)
+ {
+ $this->config[self::INTERVAL] = $interval;
+
+ return $this;
+ }
+
+ /**
+ * Set config options associated with the waiter
+ *
+ * @param array $config Options to set
+ *
+ * @return self
+ */
+ public function setConfig(array $config)
+ {
+ if (isset($config['waiter.before_attempt'])) {
+ $this->getEventDispatcher()->addListener('waiter.before_attempt', $config['waiter.before_attempt']);
+ unset($config['waiter.before_attempt']);
+ }
+
+ if (isset($config['waiter.before_wait'])) {
+ $this->getEventDispatcher()->addListener('waiter.before_wait', $config['waiter.before_wait']);
+ unset($config['waiter.before_wait']);
+ }
+
+ $this->config = $config;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function wait()
+ {
+ $this->attempts = 0;
+
+ do {
+ $this->dispatch('waiter.before_attempt', array(
+ 'waiter' => $this,
+ 'config' => $this->config,
+ ));
+
+ if ($this->doWait()) {
+ break;
+ }
+
+ if (++$this->attempts >= $this->getMaxAttempts()) {
+ throw new RuntimeException('Wait method never resolved to true after ' . $this->attempts . ' attempts');
+ }
+
+ $this->dispatch('waiter.before_wait', array(
+ 'waiter' => $this,
+ 'config' => $this->config,
+ ));
+
+ if ($this->getInterval()) {
+ usleep($this->getInterval() * 1000000);
+ }
+
+ } while (1);
+ }
+
+ /**
+ * Method to implement in subclasses
+ *
+ * @return bool Return true when successful, false on failure
+ */
+ abstract protected function doWait();
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/CallableWaiter.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/CallableWaiter.php
new file mode 100644
index 0000000..a205e06
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/CallableWaiter.php
@@ -0,0 +1,82 @@
+callable = $callable;
+
+ return $this;
+ }
+
+ /**
+ * Set additional context for the callable function. This data will be passed into the callable function as the
+ * second argument
+ *
+ * @param array $context Additional context
+ *
+ * @return self
+ */
+ public function setContext(array $context)
+ {
+ $this->context = $context;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function doWait()
+ {
+ if (!$this->callable) {
+ throw new RuntimeException('No callable was specified for the wait method');
+ }
+
+ return call_user_func($this->callable, $this->attempts, $this->context);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/CompositeWaiterFactory.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/CompositeWaiterFactory.php
new file mode 100644
index 0000000..5278e49
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/CompositeWaiterFactory.php
@@ -0,0 +1,90 @@
+factories = $factories;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function build($waiter)
+ {
+ if (!($factory = $this->getFactory($waiter))) {
+ throw new InvalidArgumentException("Waiter was not found matching {$waiter}.");
+ }
+
+ return $factory->build($waiter);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function canBuild($waiter)
+ {
+ return (bool) $this->getFactory($waiter);
+ }
+
+ /**
+ * Add a factory to the composite factory
+ *
+ * @param WaiterFactoryInterface $factory Factory to add
+ *
+ * @return self
+ */
+ public function addFactory(WaiterFactoryInterface $factory)
+ {
+ $this->factories[] = $factory;
+
+ return $this;
+ }
+
+ /**
+ * Get the factory that matches the waiter name
+ *
+ * @param string $waiter Name of the waiter
+ *
+ * @return WaiterFactoryInterface|bool
+ */
+ protected function getFactory($waiter)
+ {
+ foreach ($this->factories as $factory) {
+ if ($factory->canBuild($waiter)) {
+ return $factory;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/ConfigResourceWaiter.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/ConfigResourceWaiter.php
new file mode 100644
index 0000000..8ef0577
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/ConfigResourceWaiter.php
@@ -0,0 +1,225 @@
+waiterConfig = $waiterConfig;
+ $this->setInterval($waiterConfig->get(WaiterConfig::INTERVAL));
+ $this->setMaxAttempts($waiterConfig->get(WaiterConfig::MAX_ATTEMPTS));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setConfig(array $config)
+ {
+ foreach ($config as $key => $value) {
+ if (substr($key, 0, 7) == 'waiter.') {
+ $this->waiterConfig->set(substr($key, 7), $value);
+ }
+ }
+
+ if (!isset($config[self::INTERVAL])) {
+ $config[self::INTERVAL] = $this->waiterConfig->get(WaiterConfig::INTERVAL);
+ }
+
+ if (!isset($config[self::MAX_ATTEMPTS])) {
+ $config[self::MAX_ATTEMPTS] = $this->waiterConfig->get(WaiterConfig::MAX_ATTEMPTS);
+ }
+
+ return parent::setConfig($config);
+ }
+
+ /**
+ * Get the waiter's configuration data
+ *
+ * @return WaiterConfig
+ */
+ public function getWaiterConfig()
+ {
+ return $this->waiterConfig;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function doWait()
+ {
+ $params = $this->config;
+ // remove waiter settings from the operation's input
+ foreach (array_keys($params) as $key) {
+ if (substr($key, 0, 7) == 'waiter.') {
+ unset($params[$key]);
+ }
+ }
+
+ $operation = $this->client->getCommand($this->waiterConfig->get(WaiterConfig::OPERATION), $params);
+
+ try {
+ return $this->checkResult($this->client->execute($operation));
+ } catch (ValidationException $e) {
+ throw new InvalidArgumentException(
+ $this->waiterConfig->get(WaiterConfig::WAITER_NAME) . ' waiter validation failed: ' . $e->getMessage(),
+ $e->getCode(),
+ $e
+ );
+ } catch (ServiceResponseException $e) {
+
+ // Check if this exception satisfies a success or failure acceptor
+ $transition = $this->checkErrorAcceptor($e);
+ if (null !== $transition) {
+ return $transition;
+ }
+
+ // Check if this exception should be ignored
+ foreach ((array) $this->waiterConfig->get(WaiterConfig::IGNORE_ERRORS) as $ignore) {
+ if ($e->getExceptionCode() == $ignore) {
+ // This exception is ignored, so it counts as a failed attempt rather than a fast-fail
+ return false;
+ }
+ }
+
+ // Allow non-ignore exceptions to bubble through
+ throw $e;
+ }
+ }
+
+ /**
+ * Check if an exception satisfies a success or failure acceptor
+ *
+ * @param ServiceResponseException $e
+ *
+ * @return bool|null Returns true for success, false for failure, and null for no transition
+ */
+ protected function checkErrorAcceptor(ServiceResponseException $e)
+ {
+ if ($this->waiterConfig->get(WaiterConfig::SUCCESS_TYPE) == 'error') {
+ if ($e->getExceptionCode() == $this->waiterConfig->get(WaiterConfig::SUCCESS_VALUE)) {
+ // Mark as a success
+ return true;
+ }
+ }
+
+ // Mark as an attempt
+ return null;
+ }
+
+ /**
+ * Check to see if the response model satisfies a success or failure state
+ *
+ * @param Model $result Result model
+ *
+ * @return bool
+ * @throws RuntimeException
+ */
+ protected function checkResult(Model $result)
+ {
+ // Check if the result evaluates to true based on the path and output model
+ if ($this->waiterConfig->get(WaiterConfig::SUCCESS_TYPE) == 'output' &&
+ $this->checkPath(
+ $result,
+ $this->waiterConfig->get(WaiterConfig::SUCCESS_PATH),
+ $this->waiterConfig->get(WaiterConfig::SUCCESS_VALUE)
+ )
+ ) {
+ return true;
+ }
+
+ // It did not finish waiting yet. Determine if we need to fail-fast based on the failure acceptor.
+ if ($this->waiterConfig->get(WaiterConfig::FAILURE_TYPE) == 'output') {
+ $failureValue = $this->waiterConfig->get(WaiterConfig::FAILURE_VALUE);
+ if ($failureValue) {
+ $key = $this->waiterConfig->get(WaiterConfig::FAILURE_PATH);
+ if ($this->checkPath($result, $key, $failureValue, false)) {
+ // Determine which of the results triggered the failure
+ $triggered = array_intersect(
+ (array) $this->waiterConfig->get(WaiterConfig::FAILURE_VALUE),
+ array_unique((array) $result->getPath($key))
+ );
+ // fast fail because the failure case was satisfied
+ throw new RuntimeException(
+ 'A resource entered into an invalid state of "'
+ . implode(', ', $triggered) . '" while waiting with the "'
+ . $this->waiterConfig->get(WaiterConfig::WAITER_NAME) . '" waiter.'
+ );
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Check to see if the path of the output key is satisfied by the value
+ *
+ * @param Model $model Result model
+ * @param string $key Key to check
+ * @param string $checkValue Compare the key to the value
+ * @param bool $all Set to true to ensure all value match or false to only match one
+ *
+ * @return bool
+ */
+ protected function checkPath(Model $model, $key = null, $checkValue = array(), $all = true)
+ {
+ // If no key is set, then just assume true because the request succeeded
+ if (!$key) {
+ return true;
+ }
+
+ if (!($result = $model->getPath($key))) {
+ return false;
+ }
+
+ $total = $matches = 0;
+ foreach ((array) $result as $value) {
+ $total++;
+ foreach ((array) $checkValue as $check) {
+ if ($value == $check) {
+ $matches++;
+ break;
+ }
+ }
+ }
+
+ // When matching all values, ensure that the match count matches the total count
+ if ($all && $total != $matches) {
+ return false;
+ }
+
+ return $matches > 0;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/ResourceWaiterInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/ResourceWaiterInterface.php
new file mode 100644
index 0000000..07cf41d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/ResourceWaiterInterface.php
@@ -0,0 +1,34 @@
+ CamelCase).
+ */
+class WaiterClassFactory implements WaiterFactoryInterface
+{
+ /**
+ * @var array List of namespaces used to look for classes
+ */
+ protected $namespaces;
+
+ /**
+ * @var InflectorInterface Inflector used to inflect class names
+ */
+ protected $inflector;
+
+ /**
+ * @param array|string $namespaces Namespaces of waiter objects
+ * @param InflectorInterface $inflector Inflector used to resolve class names
+ */
+ public function __construct($namespaces = array(), InflectorInterface $inflector = null)
+ {
+ $this->namespaces = (array) $namespaces;
+ $this->inflector = $inflector ?: Inflector::getDefault();
+ }
+
+ /**
+ * Registers a namespace to check for Waiters
+ *
+ * @param string $namespace Namespace which contains Waiter classes
+ *
+ * @return self
+ */
+ public function registerNamespace($namespace)
+ {
+ array_unshift($this->namespaces, $namespace);
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function build($waiter)
+ {
+ if (!($className = $this->getClassName($waiter))) {
+ throw new InvalidArgumentException("Waiter was not found matching {$waiter}.");
+ }
+
+ return new $className();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function canBuild($waiter)
+ {
+ return $this->getClassName($waiter) !== null;
+ }
+
+ /**
+ * Get the name of a waiter class
+ *
+ * @param string $waiter Waiter name
+ *
+ * @return string|null
+ */
+ protected function getClassName($waiter)
+ {
+ $waiterName = $this->inflector->camel($waiter);
+
+ // Determine the name of the class to load
+ $className = null;
+ foreach ($this->namespaces as $namespace) {
+ $potentialClassName = $namespace . '\\' . $waiterName;
+ if (class_exists($potentialClassName)) {
+ return $potentialClassName;
+ }
+ }
+
+ return null;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/WaiterConfig.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/WaiterConfig.php
new file mode 100644
index 0000000..7c10f5a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/WaiterConfig.php
@@ -0,0 +1,67 @@
+data = $data;
+ $this->extractConfig();
+ }
+
+ /**
+ * Create the command configuration variables
+ */
+ protected function extractConfig()
+ {
+ // Populate success.* and failure.* if specified in acceptor.*
+ foreach ($this->data as $key => $value) {
+ if (substr($key, 0, 9) == 'acceptor.') {
+ $name = substr($key, 9);
+ if (!isset($this->data["success.{$name}"])) {
+ $this->data["success.{$name}"] = $value;
+ }
+ if (!isset($this->data["failure.{$name}"])) {
+ $this->data["failure.{$name}"] = $value;
+ }
+ unset($this->data[$key]);
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/WaiterConfigFactory.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/WaiterConfigFactory.php
new file mode 100644
index 0000000..cb92149
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/WaiterConfigFactory.php
@@ -0,0 +1,98 @@
+config = $config;
+ $this->inflector = $inflector ?: Inflector::getDefault();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function build($waiter)
+ {
+ return new ConfigResourceWaiter($this->getWaiterConfig($waiter));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function canBuild($waiter)
+ {
+ return isset($this->config[$waiter]) || isset($this->config[$this->inflector->camel($waiter)]);
+ }
+
+ /**
+ * Get waiter configuration data, taking __default__ and extensions into account
+ *
+ * @param string $name Waiter name
+ *
+ * @return WaiterConfig
+ * @throws InvalidArgumentException
+ */
+ protected function getWaiterConfig($name)
+ {
+ if (!$this->canBuild($name)) {
+ throw new InvalidArgumentException('No waiter found matching "' . $name . '"');
+ }
+
+ // inflect the name if needed
+ $name = isset($this->config[$name]) ? $name : $this->inflector->camel($name);
+ $waiter = new WaiterConfig($this->config[$name]);
+ $waiter['name'] = $name;
+
+ // Always use __default__ as the basis if it's set
+ if (isset($this->config['__default__'])) {
+ $parentWaiter = new WaiterConfig($this->config['__default__']);
+ $waiter = $parentWaiter->overwriteWith($waiter);
+ }
+
+ // Allow for configuration extensions
+ if (isset($this->config[$name]['extends'])) {
+ $waiter = $this->getWaiterConfig($this->config[$name]['extends'])->overwriteWith($waiter);
+ }
+
+ return $waiter;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/WaiterFactoryInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/WaiterFactoryInterface.php
new file mode 100644
index 0000000..b9bf0f4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/Common/Waiter/WaiterFactoryInterface.php
@@ -0,0 +1,41 @@
+ array('onCommandBeforePrepare', -255));
+ }
+
+ /**
+ * An event handler for constructing ACP definitions.
+ *
+ * @param Event $event The event to respond to.
+ *
+ * @throws InvalidArgumentException
+ */
+ public function onCommandBeforePrepare(Event $event)
+ {
+ /** @var \Guzzle\Service\Command\AbstractCommand $command */
+ $command = $event['command'];
+ $operation = $command->getOperation();
+ if ($operation->hasParam('ACP') && $command->hasKey('ACP')) {
+ if ($acp = $command->get('ACP')) {
+ // Ensure that the correct object was passed
+ if (!($acp instanceof Acp)) {
+ throw new InvalidArgumentException('ACP must be an instance of Aws\S3\Model\Acp');
+ }
+
+ // Check if the user specified both an ACP and Grants
+ if ($command->hasKey('Grants')) {
+ throw new InvalidArgumentException(
+ 'Use either the ACP parameter or the Grants parameter. Do not use both.'
+ );
+ }
+
+ // Add the correct headers/body based parameters to the command
+ if ($operation->hasParam('Grants')) {
+ $command->overwriteWith($acp->toArray());
+ } else {
+ $acp->updateCommand($command);
+ }
+ }
+
+ // Remove the ACP parameter
+ $command->remove('ACP');
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/BucketStyleListener.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/BucketStyleListener.php
new file mode 100644
index 0000000..5d7bbde
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/BucketStyleListener.php
@@ -0,0 +1,89 @@
+ true);
+
+ public static function getSubscribedEvents()
+ {
+ return array('command.after_prepare' => array('onCommandAfterPrepare', -255));
+ }
+
+ /**
+ * Changes how buckets are referenced in the HTTP request
+ *
+ * @param Event $event Event emitted
+ */
+ public function onCommandAfterPrepare(Event $event)
+ {
+ $command = $event['command'];
+ $bucket = $command['Bucket'];
+ $request = $command->getRequest();
+ $pathStyle = false;
+
+ // Skip operations that do not need the bucket moved to the host.
+ if (isset(self::$exclusions[$command->getName()])) {
+ return;
+ }
+
+ if ($key = $command['Key']) {
+ // Modify the command Key to account for the {/Key*} explosion into an array
+ if (is_array($key)) {
+ $command['Key'] = $key = implode('/', $key);
+ }
+ }
+
+ // Set the key and bucket on the request
+ $request->getParams()->set('bucket', $bucket)->set('key', $key);
+
+ // Switch to virtual if PathStyle is disabled, or not a DNS compatible bucket name, or the scheme is
+ // http, or the scheme is https and there are no dots in the host header (avoids SSL issues)
+ if (!$command['PathStyle'] && $command->getClient()->isValidBucketName($bucket)
+ && !($command->getRequest()->getScheme() == 'https' && strpos($bucket, '.'))
+ ) {
+ // Switch to virtual hosted bucket
+ $request->setHost($bucket . '.' . $request->getHost());
+ $request->setPath(preg_replace("#^/{$bucket}#", '', $request->getPath()));
+ } else {
+ $pathStyle = true;
+ }
+
+ if (!$bucket) {
+ $request->getParams()->set('s3.resource', '/');
+ } elseif ($pathStyle) {
+ // Path style does not need a trailing slash
+ $request->getParams()->set(
+ 's3.resource',
+ '/' . rawurlencode($bucket) . ($key ? ('/' . S3Client::encodeKey($key)) : '')
+ );
+ } else {
+ // Bucket style needs a trailing slash
+ $request->getParams()->set(
+ 's3.resource',
+ '/' . rawurlencode($bucket) . ($key ? ('/' . S3Client::encodeKey($key)) : '/')
+ );
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Command/S3Command.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Command/S3Command.php
new file mode 100644
index 0000000..d0d3b24
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Command/S3Command.php
@@ -0,0 +1,65 @@
+client->createPresignedUrl($this->prepare(), $expires);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function process()
+ {
+ $request = $this->getRequest();
+ $response = $this->getResponse();
+
+ // Dispatch an error if a 301 redirect occurred
+ if ($response->getStatusCode() == 301) {
+ $this->getClient()->getEventDispatcher()->dispatch('request.error', new Event(array(
+ 'request' => $this->getRequest(),
+ 'response' => $response
+ )));
+ }
+
+ parent::process();
+
+ // Set the GetObject URL if using the PutObject operation
+ if ($this->result instanceof Model && $this->getName() == 'PutObject') {
+ $this->result->set('ObjectURL', $request->getUrl());
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Enum/CannedAcl.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Enum/CannedAcl.php
new file mode 100644
index 0000000..da47045
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Enum/CannedAcl.php
@@ -0,0 +1,32 @@
+errors = $errors;
+ }
+
+ /**
+ * Get the errored objects
+ *
+ * @return array Returns an array of associative arrays, each containing
+ * a 'Code', 'Message', and 'Key' key.
+ */
+ public function getErrors()
+ {
+ return $this->errors;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Exception/EntityTooLargeException.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Exception/EntityTooLargeException.php
new file mode 100644
index 0000000..66e6da9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Exception/EntityTooLargeException.php
@@ -0,0 +1,22 @@
+getStatusCode() === 301) {
+ $data['type'] = 'client';
+ if (isset($data['message'], $data['parsed'])) {
+ $data['message'] = rtrim($data['message'], '.') . ': "' . $data['parsed']->Endpoint . '".';
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function parseHeaders(RequestInterface $request, Response $response, array &$data)
+ {
+ parent::parseHeaders($request, $response, $data);
+
+ // Get the request
+ $status = $response->getStatusCode();
+ $method = $request->getMethod();
+
+ // Attempt to determine code for 403s and 404s
+ if ($status === 403) {
+ $data['code'] = 'AccessDenied';
+ } elseif ($method === 'HEAD' && $status === 404) {
+ $path = explode('/', trim($request->getPath(), '/'));
+ $host = explode('.', $request->getHost());
+ $bucket = (count($host) === 4) ? $host[0] : array_shift($path);
+ $object = array_shift($path);
+
+ if ($bucket && $object) {
+ $data['code'] = 'NoSuchKey';
+ } elseif ($bucket) {
+ $data['code'] = 'NoSuchBucket';
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Exception/PermanentRedirectException.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Exception/PermanentRedirectException.php
new file mode 100644
index 0000000..d2af820
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Exception/PermanentRedirectException.php
@@ -0,0 +1,22 @@
+setNext($next);
+ }
+ }
+
+ public function makesDecision()
+ {
+ return true;
+ }
+
+ protected function getDelay(
+ $retries,
+ RequestInterface $request,
+ Response $response = null,
+ HttpException $e = null
+ ) {
+ if ($response && $request->getMethod() === 'POST'
+ && $request instanceof EntityEnclosingRequestInterface
+ && $response->getStatusCode() == 200
+ && strpos($request->getBody(), 'getBody(), 'get('Buckets') ?: array();
+
+ // If only the names_only set, change arrays to a string
+ if ($this->get('names_only')) {
+ foreach ($buckets as &$bucket) {
+ $bucket = $bucket['Name'];
+ }
+ }
+
+ return $buckets;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/ListMultipartUploadsIterator.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/ListMultipartUploadsIterator.php
new file mode 100644
index 0000000..592aa0a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/ListMultipartUploadsIterator.php
@@ -0,0 +1,46 @@
+get('Uploads') ?: array();
+
+ // If there are prefixes and we want them, merge them in
+ if ($this->get('return_prefixes') && $result->hasKey('CommonPrefixes')) {
+ $uploads = array_merge($uploads, $result->get('CommonPrefixes'));
+ }
+
+ return $uploads;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/ListObjectVersionsIterator.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/ListObjectVersionsIterator.php
new file mode 100644
index 0000000..991a77e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/ListObjectVersionsIterator.php
@@ -0,0 +1,48 @@
+get('Versions') ?: array();
+ $deleteMarkers = $result->get('DeleteMarkers') ?: array();
+ $versions = array_merge($versions, $deleteMarkers);
+
+ // If there are prefixes and we want them, merge them in
+ if ($this->get('return_prefixes') && $result->hasKey('CommonPrefixes')) {
+ $versions = array_merge($versions, $result->get('CommonPrefixes'));
+ }
+
+ return $versions;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/ListObjectsIterator.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/ListObjectsIterator.php
new file mode 100644
index 0000000..852b2a9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/ListObjectsIterator.php
@@ -0,0 +1,68 @@
+get('Contents') ?: array();
+ $numObjects = count($objects);
+ $lastKey = $numObjects ? $objects[$numObjects - 1]['Key'] : false;
+ if ($lastKey && !$result->hasKey($this->get('output_token'))) {
+ $result->set($this->get('output_token'), $lastKey);
+ }
+
+ // Closure for getting the name of an object or prefix
+ $getName = function ($object) {
+ return isset($object['Key']) ? $object['Key'] : $object['Prefix'];
+ };
+
+ // If common prefixes returned (i.e. a delimiter was set) and they need to be returned, there is more to do
+ if ($this->get('return_prefixes') && $result->hasKey('CommonPrefixes')) {
+ // Collect and format the prefixes to include with the objects
+ $objects = array_merge($objects, $result->get('CommonPrefixes'));
+
+ // Sort the objects and prefixes to maintain alphabetical order, but only if some of each were returned
+ if ($this->get('sort_results') && $lastKey && $objects) {
+ usort($objects, function ($object1, $object2) use ($getName) {
+ return strcmp($getName($object1), $getName($object2));
+ });
+ }
+ }
+
+ // If only the names are desired, iterate through the results and convert the arrays to the object/prefix names
+ if ($this->get('names_only')) {
+ $objects = array_map($getName, $objects);
+ }
+
+ return $objects;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/OpendirIterator.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/OpendirIterator.php
new file mode 100644
index 0000000..82c0153
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Iterator/OpendirIterator.php
@@ -0,0 +1,86 @@
+filePrefix = $filePrefix;
+ $this->dirHandle = $dirHandle;
+ $this->next();
+ }
+
+ public function __destruct()
+ {
+ if ($this->dirHandle) {
+ closedir($this->dirHandle);
+ }
+ }
+
+ public function rewind()
+ {
+ $this->key = 0;
+ rewinddir($this->dirHandle);
+ }
+
+ public function current()
+ {
+ return $this->currentFile;
+ }
+
+ public function next()
+ {
+ if ($file = readdir($this->dirHandle)) {
+ $this->currentFile = new \SplFileInfo($this->filePrefix . $file);
+ } else {
+ $this->currentFile = false;
+ }
+
+ $this->key++;
+ }
+
+ public function key()
+ {
+ return $this->key;
+ }
+
+ public function valid()
+ {
+ return $this->currentFile !== false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/Acp.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/Acp.php
new file mode 100644
index 0000000..9ddc3dd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/Acp.php
@@ -0,0 +1,243 @@
+setOwner($owner);
+ $this->setGrants($grants);
+ }
+
+ /**
+ * Create an Acp object from an array. This can be used to create an ACP from a response to a GetObject/Bucket ACL
+ * operation.
+ *
+ * @param array $data Array of ACP data
+ *
+ * @return Acp
+ */
+ public static function fromArray(array $data)
+ {
+ $builder = new AcpBuilder();
+ $builder->setOwner((string) $data['Owner']['ID'], $data['Owner']['DisplayName']);
+
+ // Add each Grantee to the ACP
+ foreach ($data['Grants'] as $grant) {
+ $permission = $grant['Permission'];
+
+ // Determine the type for response bodies that are missing the Type parameter
+ if (!isset($grant['Grantee']['Type'])) {
+ if (isset($grant['Grantee']['ID'])) {
+ $grant['Grantee']['Type'] = 'CanonicalUser';
+ } elseif (isset($grant['Grantee']['URI'])) {
+ $grant['Grantee']['Type'] = 'Group';
+ } else {
+ $grant['Grantee']['Type'] = 'AmazonCustomerByEmail';
+ }
+ }
+
+ switch ($grant['Grantee']['Type']) {
+ case 'Group':
+ $builder->addGrantForGroup($permission, $grant['Grantee']['URI']);
+ break;
+ case 'AmazonCustomerByEmail':
+ $builder->addGrantForEmail($permission, $grant['Grantee']['EmailAddress']);
+ break;
+ case 'CanonicalUser':
+ $builder->addGrantForUser(
+ $permission,
+ $grant['Grantee']['ID'],
+ $grant['Grantee']['DisplayName']
+ );
+ }
+ }
+
+ return $builder->build();
+ }
+
+ /**
+ * Set the owner of the ACP policy
+ *
+ * @param Grantee $owner ACP policy owner
+ *
+ * @return $this
+ *
+ * @throws InvalidArgumentException if the grantee does not have an ID set
+ */
+ public function setOwner(Grantee $owner)
+ {
+ if (!$owner->isCanonicalUser()) {
+ throw new InvalidArgumentException('The owner must have an ID set.');
+ }
+
+ $this->owner = $owner;
+
+ return $this;
+ }
+
+ /**
+ * Get the owner of the ACP policy
+ *
+ * @return Grantee
+ */
+ public function getOwner()
+ {
+ return $this->owner;
+ }
+
+ /**
+ * Set the grants for the ACP
+ *
+ * @param array|\Traversable $grants List of grants for the ACP
+ *
+ * @return $this
+ *
+ * @throws InvalidArgumentException
+ */
+ public function setGrants($grants = array())
+ {
+ $this->grants = new \SplObjectStorage();
+
+ if ($grants) {
+ if (is_array($grants) || $grants instanceof \Traversable) {
+ /** @var Grant $grant */
+ foreach ($grants as $grant) {
+ $this->addGrant($grant);
+ }
+ } else {
+ throw new InvalidArgumentException('Grants must be passed in as an array or Traversable object.');
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get all of the grants
+ *
+ * @return \SplObjectStorage
+ */
+ public function getGrants()
+ {
+ return $this->grants;
+ }
+
+ /**
+ * Add a Grant
+ *
+ * @param Grant $grant Grant to add
+ *
+ * @return $this
+ */
+ public function addGrant(Grant $grant)
+ {
+ if (count($this->grants) < 100) {
+ $this->grants->attach($grant);
+ } else {
+ throw new OverflowException('An ACP may contain up to 100 grants.');
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the total number of attributes
+ *
+ * @return int
+ */
+ public function count()
+ {
+ return count($this->grants);
+ }
+
+ /**
+ * Returns the grants for iteration
+ *
+ * @return \SplObjectStorage
+ */
+ public function getIterator()
+ {
+ return $this->grants;
+ }
+
+ /**
+ * Applies grant headers to a command's parameters
+ *
+ * @param AbstractCommand $command Command to be updated
+ *
+ * @return $this
+ */
+ public function updateCommand(AbstractCommand $command)
+ {
+ $parameters = array();
+ foreach ($this->grants as $grant) {
+ /** @var Grant $grant */
+ $parameters = array_merge_recursive($parameters, $grant->getParameterArray());
+ }
+
+ foreach ($parameters as $name => $values) {
+ $command->set($name, implode(', ', (array) $values));
+ }
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function toArray()
+ {
+ $grants = array();
+ foreach ($this->grants as $grant) {
+ $grants[] = $grant->toArray();
+ }
+
+ return array(
+ 'Owner' => array(
+ 'ID' => $this->owner->getId(),
+ 'DisplayName' => $this->owner->getDisplayName()
+ ),
+ 'Grants' => $grants
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/AcpBuilder.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/AcpBuilder.php
new file mode 100644
index 0000000..b6d1be7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/AcpBuilder.php
@@ -0,0 +1,134 @@
+owner = new Grantee($id, $displayName ?: $id, GranteeType::USER);
+
+ return $this;
+ }
+
+ /**
+ * Create and store a Grant with a CanonicalUser Grantee for the ACL
+ *
+ * @param string $permission Permission for the Grant
+ * @param string $id Grantee identifier
+ * @param string $displayName Grantee display name
+ *
+ * @return $this
+ */
+ public function addGrantForUser($permission, $id, $displayName = null)
+ {
+ $grantee = new Grantee($id, $displayName ?: $id, GranteeType::USER);
+ $this->addGrant($permission, $grantee);
+
+ return $this;
+ }
+
+ /**
+ * Create and store a Grant with a AmazonCustomerByEmail Grantee for the ACL
+ *
+ * @param string $permission Permission for the Grant
+ * @param string $email Grantee email address
+ *
+ * @return $this
+ */
+ public function addGrantForEmail($permission, $email)
+ {
+ $grantee = new Grantee($email, null, GranteeType::EMAIL);
+ $this->addGrant($permission, $grantee);
+
+ return $this;
+ }
+
+ /**
+ * Create and store a Grant with a Group Grantee for the ACL
+ *
+ * @param string $permission Permission for the Grant
+ * @param string $group Grantee group
+ *
+ * @return $this
+ */
+ public function addGrantForGroup($permission, $group)
+ {
+ $grantee = new Grantee($group, null, GranteeType::GROUP);
+ $this->addGrant($permission, $grantee);
+
+ return $this;
+ }
+
+ /**
+ * Create and store a Grant for the ACL
+ *
+ * @param string $permission Permission for the Grant
+ * @param Grantee $grantee The Grantee for the Grant
+ *
+ * @return $this
+ */
+ public function addGrant($permission, Grantee $grantee)
+ {
+ $this->grants[] = new Grant($grantee, $permission);
+
+ return $this;
+ }
+
+ /**
+ * Builds the ACP and returns it
+ *
+ * @return Acp
+ */
+ public function build()
+ {
+ return new Acp($this->owner, $this->grants);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/ClearBucket.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/ClearBucket.php
new file mode 100644
index 0000000..09982d8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/ClearBucket.php
@@ -0,0 +1,189 @@
+client = $client;
+ $this->bucket = $bucket;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getAllEvents()
+ {
+ return array(self::AFTER_DELETE, self::BEFORE_CLEAR, self::AFTER_CLEAR);
+ }
+
+ /**
+ * Set the bucket that is to be cleared
+ *
+ * @param string $bucket Name of the bucket to clear
+ *
+ * @return $this
+ */
+ public function setBucket($bucket)
+ {
+ $this->bucket = $bucket;
+
+ return $this;
+ }
+
+ /**
+ * Get the iterator used to yield the keys to be deleted. A default iterator
+ * will be created and returned if no iterator has been explicitly set.
+ *
+ * @return \Iterator
+ */
+ public function getIterator()
+ {
+ if (!$this->iterator) {
+ $this->iterator = $this->client->getIterator('ListObjectVersions', array(
+ 'Bucket' => $this->bucket
+ ));
+ }
+
+ return $this->iterator;
+ }
+
+ /**
+ * Sets a different iterator to use than the default iterator. This can be helpful when you wish to delete
+ * only specific keys from a bucket (e.g. keys that match a certain prefix or delimiter, or perhaps keys that
+ * pass through a filtered, decorated iterator).
+ *
+ * @param \Iterator $iterator Iterator used to yield the keys to be deleted
+ *
+ * @return $this
+ */
+ public function setIterator(\Iterator $iterator)
+ {
+ $this->iterator = $iterator;
+
+ return $this;
+ }
+
+ /**
+ * Set the MFA token to send with each request
+ *
+ * @param string $mfa MFA token to send with each request. The value is the concatenation of the authentication
+ * device's serial number, a space, and the value displayed on your authentication device.
+ *
+ * @return $this
+ */
+ public function setMfa($mfa)
+ {
+ $this->mfa = $mfa;
+
+ return $this;
+ }
+
+ /**
+ * Clear the bucket
+ *
+ * @return int Returns the number of deleted keys
+ * @throws ExceptionCollection
+ */
+ public function clear()
+ {
+ $that = $this;
+ $batch = DeleteObjectsBatch::factory($this->client, $this->bucket, $this->mfa);
+ $batch = new NotifyingBatch($batch, function ($items) use ($that) {
+ $that->dispatch(ClearBucket::AFTER_DELETE, array('keys' => $items));
+ });
+ $batch = new FlushingBatch(new ExceptionBufferingBatch($batch), 1000);
+
+ // Let any listeners know that the bucket is about to be cleared
+ $this->dispatch(self::BEFORE_CLEAR, array(
+ 'iterator' => $this->getIterator(),
+ 'batch' => $batch,
+ 'mfa' => $this->mfa
+ ));
+
+ $deleted = 0;
+ foreach ($this->getIterator() as $object) {
+ if (isset($object['VersionId'])) {
+ $versionId = $object['VersionId'] == 'null' ? null : $object['VersionId'];
+ } else {
+ $versionId = null;
+ }
+ $batch->addKey($object['Key'], $versionId);
+ $deleted++;
+ }
+ $batch->flush();
+
+ // If any errors were encountered, then throw an ExceptionCollection
+ if (count($batch->getExceptions())) {
+ $e = new ExceptionCollection();
+ foreach ($batch->getExceptions() as $exception) {
+ $e->add($exception->getPrevious());
+ }
+ throw $e;
+ }
+
+ // Let any listeners know that the bucket was cleared
+ $this->dispatch(self::AFTER_CLEAR, array('deleted' => $deleted));
+
+ return $deleted;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/DeleteObjectsBatch.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/DeleteObjectsBatch.php
new file mode 100644
index 0000000..ab6425b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/DeleteObjectsBatch.php
@@ -0,0 +1,87 @@
+ %s, VersionId => %s] and call flush when the objects
+ * should be deleted.
+ */
+class DeleteObjectsBatch extends AbstractBatchDecorator
+{
+ /**
+ * Factory for creating a DeleteObjectsBatch
+ *
+ * @param AwsClientInterface $client Client used to transfer requests
+ * @param string $bucket Bucket that contains the objects to delete
+ * @param string $mfa MFA token to use with the request
+ *
+ * @return static
+ */
+ public static function factory(AwsClientInterface $client, $bucket, $mfa = null)
+ {
+ $batch = BatchBuilder::factory()
+ ->createBatchesWith(new BatchSizeDivisor(1000))
+ ->transferWith(new DeleteObjectsTransfer($client, $bucket, $mfa))
+ ->build();
+
+ return new static($batch);
+ }
+
+ /**
+ * Add an object to be deleted
+ *
+ * @param string $key Key of the object
+ * @param string $versionId VersionID of the object
+ *
+ * @return $this
+ */
+ public function addKey($key, $versionId = null)
+ {
+ return $this->add(array(
+ 'Key' => $key,
+ 'VersionId' => $versionId
+ ));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function add($item)
+ {
+ if ($item instanceof AbstractCommand && $item->getName() == 'DeleteObject') {
+ $item = array(
+ 'Key' => $item['Key'],
+ 'VersionId' => $item['VersionId']
+ );
+ }
+
+ if (!is_array($item) || (!isset($item['Key']))) {
+ throw new InvalidArgumentException('Item must be a DeleteObject command or array containing a Key and VersionId key.');
+ }
+
+ return parent::add($item);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/DeleteObjectsTransfer.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/DeleteObjectsTransfer.php
new file mode 100644
index 0000000..5918ff1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/DeleteObjectsTransfer.php
@@ -0,0 +1,133 @@
+client = $client;
+ $this->bucket = $bucket;
+ $this->mfa = $mfa;
+ }
+
+ /**
+ * Set a new MFA token value
+ *
+ * @param string $token MFA token
+ *
+ * @return $this
+ */
+ public function setMfa($token)
+ {
+ $this->mfa = $token;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ * @throws OverflowException if a batch has more than 1000 items
+ * @throws InvalidArgumentException when an invalid batch item is encountered
+ */
+ public function transfer(array $batch)
+ {
+ if (empty($batch)) {
+ return;
+ }
+
+ if (count($batch) > 1000) {
+ throw new OverflowException('Batches should be divided into chunks of no larger than 1000 keys');
+ }
+
+ $del = array();
+ $command = $this->client->getCommand('DeleteObjects', array(
+ 'Bucket' => $this->bucket,
+ Ua::OPTION => Ua::BATCH
+ ));
+
+ if ($this->mfa) {
+ $command->getRequestHeaders()->set('x-amz-mfa', $this->mfa);
+ }
+
+ foreach ($batch as $object) {
+ // Ensure that the batch item is valid
+ if (!is_array($object) || !isset($object['Key'])) {
+ throw new InvalidArgumentException('Invalid batch item encountered: ' . var_export($batch, true));
+ }
+ $del[] = array(
+ 'Key' => $object['Key'],
+ 'VersionId' => isset($object['VersionId']) ? $object['VersionId'] : null
+ );
+ }
+
+ $command['Objects'] = $del;
+
+ $command->execute();
+ $this->processResponse($command);
+ }
+
+ /**
+ * Process the response of the DeleteMultipleObjects request
+ *
+ * @paramCommandInterface $command Command executed
+ */
+ protected function processResponse(CommandInterface $command)
+ {
+ $result = $command->getResult();
+
+ // Ensure that the objects were deleted successfully
+ if (!empty($result['Errors'])) {
+ $errors = $result['Errors'];
+ throw new DeleteMultipleObjectsException($errors);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/Grant.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/Grant.php
new file mode 100644
index 0000000..2e35f05
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/Grant.php
@@ -0,0 +1,139 @@
+ 'GrantRead',
+ Permission::WRITE => 'GrantWrite',
+ Permission::READ_ACP => 'GrantReadACP',
+ Permission::WRITE_ACP => 'GrantWriteACP',
+ Permission::FULL_CONTROL => 'GrantFullControl'
+ );
+
+ /**
+ * @var Grantee The grantee affected by the grant
+ */
+ protected $grantee;
+
+ /**
+ * @var string The permission set by the grant
+ */
+ protected $permission;
+
+ /**
+ * Constructs an ACL
+ *
+ * @param Grantee $grantee Affected grantee
+ * @param string $permission Permission applied
+ */
+ public function __construct(Grantee $grantee, $permission)
+ {
+ $this->setGrantee($grantee);
+ $this->setPermission($permission);
+ }
+
+ /**
+ * Set the grantee affected by the grant
+ *
+ * @param Grantee $grantee Affected grantee
+ *
+ * @return $this
+ */
+ public function setGrantee(Grantee $grantee)
+ {
+ $this->grantee = $grantee;
+
+ return $this;
+ }
+
+ /**
+ * Get the grantee affected by the grant
+ *
+ * @return Grantee
+ */
+ public function getGrantee()
+ {
+ return $this->grantee;
+ }
+
+ /**
+ * Set the permission set by the grant
+ *
+ * @param string $permission Permission applied
+ *
+ * @return $this
+ *
+ * @throws InvalidArgumentException
+ */
+ public function setPermission($permission)
+ {
+ $valid = Permission::values();
+ if (!in_array($permission, $valid)) {
+ throw new InvalidArgumentException('The permission must be one of '
+ . 'the following: ' . implode(', ', $valid) . '.');
+ }
+
+ $this->permission = $permission;
+
+ return $this;
+ }
+
+ /**
+ * Get the permission set by the grant
+ *
+ * @return string
+ */
+ public function getPermission()
+ {
+ return $this->permission;
+ }
+
+ /**
+ * Returns an array of the operation parameter and value to set on the operation
+ *
+ * @return array
+ */
+ public function getParameterArray()
+ {
+ return array(
+ self::$parameterMap[$this->permission] => $this->grantee->getHeaderValue()
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function toArray()
+ {
+ return array(
+ 'Grantee' => $this->grantee->toArray(),
+ 'Permission' => $this->permission
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/Grantee.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/Grantee.php
new file mode 100644
index 0000000..7634b84
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/Grantee.php
@@ -0,0 +1,245 @@
+ 'id',
+ GranteeType::EMAIL => 'emailAddress',
+ GranteeType::GROUP => 'uri'
+ );
+
+ /**
+ * @var string The account ID, email, or URL identifying the grantee
+ */
+ protected $id;
+
+ /**
+ * @var string The display name of the grantee
+ */
+ protected $displayName;
+
+ /**
+ * @var string The type of the grantee (CanonicalUser or Group)
+ */
+ protected $type;
+
+ /**
+ * Constructs a Grantee
+ *
+ * @param string $id Grantee identifier
+ * @param string $displayName Grantee display name
+ * @param string $expectedType The expected type of the grantee
+ */
+ public function __construct($id, $displayName = null, $expectedType = null)
+ {
+ $this->type = GranteeType::USER;
+ $this->setId($id, $expectedType);
+ $this->setDisplayName($displayName);
+ }
+
+ /**
+ * Sets the account ID, email, or URL identifying the grantee
+ *
+ * @param string $id Grantee identifier
+ * @param string $expectedType The expected type of the grantee
+ *
+ * @return Grantee
+ *
+ * @throws UnexpectedValueException if $expectedType is set and the grantee
+ * is not of that type after instantiation
+ * @throws InvalidArgumentException when the ID provided is not a string
+ */
+ public function setId($id, $expectedType = null)
+ {
+ if (in_array($id, Group::values())) {
+ $this->type = GranteeType::GROUP;
+ } elseif (!is_string($id)) {
+ throw new InvalidArgumentException('The grantee ID must be provided as a string value.');
+ }
+
+ if (strpos($id, '@') !== false) {
+ $this->type = GranteeType::EMAIL;
+ }
+
+ if ($expectedType && $expectedType !== $this->type) {
+ throw new UnexpectedValueException('The type of the grantee after '
+ . 'setting the ID did not match the specified, expected type "'
+ . $expectedType . '" but received "' . $this->type . '".');
+ }
+
+ $this->id = $id;
+
+ return $this;
+ }
+
+ /**
+ * Gets the grantee identifier
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Gets the grantee email address (if it is set)
+ *
+ * @return null|string
+ */
+ public function getEmailAddress()
+ {
+ return $this->isAmazonCustomerByEmail() ? $this->id : null;
+ }
+
+ /**
+ * Gets the grantee URI (if it is set)
+ *
+ * @return null|string
+ */
+ public function getGroupUri()
+ {
+ return $this->isGroup() ? $this->id : null;
+ }
+
+ /**
+ * Sets the display name of the grantee
+ *
+ * @param string $displayName Grantee name
+ *
+ * @return Grantee
+ *
+ * @throws LogicException when the grantee type not CanonicalUser
+ */
+ public function setDisplayName($displayName)
+ {
+ if ($this->type === GranteeType::USER) {
+ if (empty($displayName) || !is_string($displayName)) {
+ $displayName = $this->id;
+ }
+ $this->displayName = $displayName;
+ } else {
+ if ($displayName) {
+ throw new LogicException('The display name can only be set '
+ . 'for grantees specified by ID.');
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Gets the grantee display name
+ *
+ * @return string
+ */
+ public function getDisplayName()
+ {
+ return $this->displayName;
+ }
+
+ /**
+ * Gets the grantee type (determined by ID)
+ *
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * Returns true if this grantee object represents a canonical user by ID
+ *
+ * @return bool
+ */
+ public function isCanonicalUser()
+ {
+ return ($this->type === GranteeType::USER);
+ }
+
+ /**
+ * Returns true if this grantee object represents a customer by email
+ *
+ * @return bool
+ */
+ public function isAmazonCustomerByEmail()
+ {
+ return ($this->type === GranteeType::EMAIL);
+ }
+
+ /**
+ * Returns true if this grantee object represents a group by URL
+ *
+ * @return bool
+ */
+ public function isGroup()
+ {
+ return ($this->type === GranteeType::GROUP);
+ }
+
+ /**
+ * Returns the value used in headers to specify this grantee
+ *
+ * @return string
+ */
+ public function getHeaderValue()
+ {
+ $key = static::$headerMap[$this->type];
+
+ return "{$key}=\"{$this->id}\"";
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function toArray()
+ {
+ $result = array(
+ 'Type' => $this->type
+ );
+
+ switch ($this->type) {
+ case GranteeType::USER:
+ $result['ID'] = $this->id;
+ $result['DisplayName'] = $this->displayName;
+ break;
+ case GranteeType::EMAIL:
+ $result['EmailAddress'] = $this->id;
+ break;
+ case GranteeType::GROUP:
+ $result['URI'] = $this->id;
+ }
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/AbstractTransfer.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/AbstractTransfer.php
new file mode 100644
index 0000000..b1a5734
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/AbstractTransfer.php
@@ -0,0 +1,103 @@
+options = array_replace(array(
+ 'min_part_size' => self::MIN_PART_SIZE,
+ 'part_md5' => true
+ ), $this->options);
+
+ // Make sure the part size can be calculated somehow
+ if (!$this->options['min_part_size'] && !$this->source->getContentLength()) {
+ throw new RuntimeException('The ContentLength of the data source could not be determined, and no '
+ . 'min_part_size option was provided');
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function calculatePartSize()
+ {
+ $partSize = $this->source->getContentLength()
+ ? (int) ceil(($this->source->getContentLength() / self::MAX_PARTS))
+ : self::MIN_PART_SIZE;
+ $partSize = max($this->options['min_part_size'], $partSize);
+ $partSize = min($partSize, self::MAX_PART_SIZE);
+ $partSize = max($partSize, self::MIN_PART_SIZE);
+
+ return $partSize;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function complete()
+ {
+ /** @var UploadPart $part */
+ $parts = array();
+ foreach ($this->state as $part) {
+ $parts[] = array(
+ 'PartNumber' => $part->getPartNumber(),
+ 'ETag' => $part->getETag(),
+ );
+ }
+
+ $params = $this->state->getUploadId()->toParams();
+ $params[Ua::OPTION] = Ua::MULTIPART_UPLOAD;
+ $params['Parts'] = $parts;
+ $command = $this->client->getCommand('CompleteMultipartUpload', $params);
+
+ return $command->getResult();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getAbortCommand()
+ {
+ $params = $this->state->getUploadId()->toParams();
+ $params[Ua::OPTION] = Ua::MULTIPART_UPLOAD;
+
+ /** @var OperationCommand $command */
+ $command = $this->client->getCommand('AbortMultipartUpload', $params);
+
+ return $command;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/ParallelTransfer.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/ParallelTransfer.php
new file mode 100644
index 0000000..b42c3c4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/ParallelTransfer.php
@@ -0,0 +1,124 @@
+source->isLocal() || $this->source->getWrapper() != 'plainfile') {
+ throw new RuntimeException('The source data must be a local file stream when uploading in parallel.');
+ }
+
+ if (empty($this->options['concurrency'])) {
+ throw new RuntimeException('The `concurrency` option must be specified when instantiating.');
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function transfer()
+ {
+ $totalParts = (int) ceil($this->source->getContentLength() / $this->partSize);
+ $concurrency = min($totalParts, $this->options['concurrency']);
+ $partsToSend = $this->prepareParts($concurrency);
+ $eventData = $this->getEventData();
+
+ while (!$this->stopped && count($this->state) < $totalParts) {
+
+ $currentTotal = count($this->state);
+ $commands = array();
+
+ for ($i = 0; $i < $concurrency && $i + $currentTotal < $totalParts; $i++) {
+
+ // Move the offset to the correct position
+ $partsToSend[$i]->setOffset(($currentTotal + $i) * $this->partSize);
+
+ // @codeCoverageIgnoreStart
+ if ($partsToSend[$i]->getContentLength() == 0) {
+ break;
+ }
+ // @codeCoverageIgnoreEnd
+
+ $params = $this->state->getUploadId()->toParams();
+ $eventData['command'] = $this->client->getCommand('UploadPart', array_replace($params, array(
+ 'PartNumber' => count($this->state) + 1 + $i,
+ 'Body' => $partsToSend[$i],
+ 'ContentMD5' => (bool) $this->options['part_md5'],
+ Ua::OPTION => Ua::MULTIPART_UPLOAD
+ )));
+ $commands[] = $eventData['command'];
+ // Notify any listeners of the part upload
+ $this->dispatch(self::BEFORE_PART_UPLOAD, $eventData);
+ }
+
+ // Allow listeners to stop the transfer if needed
+ if ($this->stopped) {
+ break;
+ }
+
+ // Execute each command, iterate over the results, and add to the transfer state
+ /** @var \Guzzle\Service\Command\OperationCommand $command */
+ foreach ($this->client->execute($commands) as $command) {
+ $this->state->addPart(UploadPart::fromArray(array(
+ 'PartNumber' => $command['PartNumber'],
+ 'ETag' => $command->getResponse()->getEtag(),
+ 'Size' => (int) $command->getRequest()->getBody()->getContentLength(),
+ 'LastModified' => gmdate(DateFormat::RFC2822)
+ )));
+ $eventData['command'] = $command;
+ // Notify any listeners the the part was uploaded
+ $this->dispatch(self::AFTER_PART_UPLOAD, $eventData);
+ }
+ }
+ }
+
+ /**
+ * Prepare the entity body handles to use while transferring
+ *
+ * @param int $concurrency Number of parts to prepare
+ *
+ * @return array Parts to send
+ */
+ protected function prepareParts($concurrency)
+ {
+ $url = $this->source->getUri();
+ // Use the source EntityBody as the first part
+ $parts = array(new ReadLimitEntityBody($this->source, $this->partSize));
+ // Open EntityBody handles for each part to upload in parallel
+ for ($i = 1; $i < $concurrency; $i++) {
+ $parts[] = new ReadLimitEntityBody(new EntityBody(fopen($url, 'r')), $this->partSize);
+ }
+
+ return $parts;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/SerialTransfer.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/SerialTransfer.php
new file mode 100644
index 0000000..2840dd5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/SerialTransfer.php
@@ -0,0 +1,86 @@
+stopped && !$this->source->isConsumed()) {
+
+ if ($this->source->getContentLength() && $this->source->isSeekable()) {
+ // If the stream is seekable and the Content-Length known, then stream from the data source
+ $body = new ReadLimitEntityBody($this->source, $this->partSize, $this->source->ftell());
+ } else {
+ // We need to read the data source into a temporary buffer before streaming
+ $body = EntityBody::factory();
+ while ($body->getContentLength() < $this->partSize
+ && $body->write(
+ $this->source->read(max(1, min(10 * Size::KB, $this->partSize - $body->getContentLength())))
+ ));
+ }
+
+ // @codeCoverageIgnoreStart
+ if ($body->getContentLength() == 0) {
+ break;
+ }
+ // @codeCoverageIgnoreEnd
+
+ $params = $this->state->getUploadId()->toParams();
+ $command = $this->client->getCommand('UploadPart', array_replace($params, array(
+ 'PartNumber' => count($this->state) + 1,
+ 'Body' => $body,
+ 'ContentMD5' => (bool) $this->options['part_md5'],
+ Ua::OPTION => Ua::MULTIPART_UPLOAD
+ )));
+
+ // Notify observers that the part is about to be uploaded
+ $eventData = $this->getEventData();
+ $eventData['command'] = $command;
+ $this->dispatch(self::BEFORE_PART_UPLOAD, $eventData);
+
+ // Allow listeners to stop the transfer if needed
+ if ($this->stopped) {
+ break;
+ }
+
+ $response = $command->getResponse();
+
+ $this->state->addPart(UploadPart::fromArray(array(
+ 'PartNumber' => $command['PartNumber'],
+ 'ETag' => $response->getEtag(),
+ 'Size' => $body->getContentLength(),
+ 'LastModified' => gmdate(DateFormat::RFC2822)
+ )));
+
+ // Notify observers that the part was uploaded
+ $this->dispatch(self::AFTER_PART_UPLOAD, $eventData);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/TransferState.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/TransferState.php
new file mode 100644
index 0000000..c63663f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/TransferState.php
@@ -0,0 +1,41 @@
+getIterator('ListParts', $uploadId->toParams()) as $part) {
+ $transferState->addPart(UploadPart::fromArray($part));
+ }
+
+ return $transferState;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/UploadBuilder.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/UploadBuilder.php
new file mode 100644
index 0000000..e30f23a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/UploadBuilder.php
@@ -0,0 +1,297 @@
+setOption('Bucket', $bucket);
+ }
+
+ /**
+ * Set the key of the object
+ *
+ * @param string $key Key of the object to upload
+ *
+ * @return $this
+ */
+ public function setKey($key)
+ {
+ return $this->setOption('Key', $key);
+ }
+
+ /**
+ * Set the minimum acceptable part size
+ *
+ * @param int $minSize Minimum acceptable part size in bytes
+ *
+ * @return $this
+ */
+ public function setMinPartSize($minSize)
+ {
+ $this->minPartSize = (int) max((int) $minSize, AbstractTransfer::MIN_PART_SIZE);
+
+ return $this;
+ }
+
+ /**
+ * Set the concurrency level to use when uploading parts. This affects how
+ * many parts are uploaded in parallel. You must use a local file as your
+ * data source when using a concurrency greater than 1
+ *
+ * @param int $concurrency Concurrency level
+ *
+ * @return $this
+ */
+ public function setConcurrency($concurrency)
+ {
+ $this->concurrency = $concurrency;
+
+ return $this;
+ }
+
+ /**
+ * Explicitly set the MD5 hash of the entire body
+ *
+ * @param string $md5 MD5 hash of the entire body
+ *
+ * @return $this
+ */
+ public function setMd5($md5)
+ {
+ $this->md5 = $md5;
+
+ return $this;
+ }
+
+ /**
+ * Set to true to have the builder calculate the MD5 hash of the entire data
+ * source before initiating a multipart upload (this could be an expensive
+ * operation). This setting can ony be used with seekable data sources.
+ *
+ * @param bool $calculateMd5 Set to true to calculate the MD5 hash of the body
+ *
+ * @return $this
+ */
+ public function calculateMd5($calculateMd5)
+ {
+ $this->calculateEntireMd5 = (bool) $calculateMd5;
+
+ return $this;
+ }
+
+ /**
+ * Specify whether or not to calculate the MD5 hash of each uploaded part.
+ * This setting defaults to true.
+ *
+ * @param bool $usePartMd5 Set to true to calculate the MD5 has of each part
+ *
+ * @return $this
+ */
+ public function calculatePartMd5($usePartMd5)
+ {
+ $this->calculatePartMd5 = (bool) $usePartMd5;
+
+ return $this;
+ }
+
+ /**
+ * Set the ACP to use on the object
+ *
+ * @param Acp $acp ACP to set on the object
+ *
+ * @return $this
+ */
+ public function setAcp(Acp $acp)
+ {
+ return $this->setOption('ACP', $acp);
+ }
+
+ /**
+ * Set an option to pass to the initial CreateMultipartUpload operation
+ *
+ * @param string $name Option name
+ * @param string $value Option value
+ *
+ * @return $this
+ */
+ public function setOption($name, $value)
+ {
+ $this->commandOptions[$name] = $value;
+
+ return $this;
+ }
+
+ /**
+ * Add an array of options to pass to the initial CreateMultipartUpload operation
+ *
+ * @param array $options Array of CreateMultipartUpload operation parameters
+ *
+ * @return $this
+ */
+ public function addOptions(array $options)
+ {
+ $this->commandOptions = array_replace($this->commandOptions, $options);
+
+ return $this;
+ }
+
+ /**
+ * Set an array of transfer options to apply to the upload transfer object
+ *
+ * @param array $options Transfer options
+ *
+ * @return $this
+ */
+ public function setTransferOptions(array $options)
+ {
+ $this->transferOptions = $options;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ * @throws InvalidArgumentException when attempting to resume a transfer using a non-seekable stream
+ * @throws InvalidArgumentException when missing required properties (bucket, key, client, source)
+ */
+ public function build()
+ {
+ if ($this->state instanceof TransferState) {
+ $this->commandOptions = array_replace($this->commandOptions, $this->state->getUploadId()->toParams());
+ }
+
+ if (!isset($this->commandOptions['Bucket']) || !isset($this->commandOptions['Key'])
+ || !$this->client || !$this->source
+ ) {
+ throw new InvalidArgumentException('You must specify a Bucket, Key, client, and source.');
+ }
+
+ if ($this->state && !$this->source->isSeekable()) {
+ throw new InvalidArgumentException('You cannot resume a transfer using a non-seekable source.');
+ }
+
+ // If no state was set, then create one by initiating or loading a multipart upload
+ if (is_string($this->state)) {
+ $this->state = TransferState::fromUploadId($this->client, UploadId::fromParams(array(
+ 'Bucket' => $this->commandOptions['Bucket'],
+ 'Key' => $this->commandOptions['Key'],
+ 'UploadId' => $this->state
+ )));
+ } elseif (!$this->state) {
+ $this->state = $this->initiateMultipartUpload();
+ }
+
+ $options = array_replace(array(
+ 'min_part_size' => $this->minPartSize,
+ 'part_md5' => (bool) $this->calculatePartMd5,
+ 'concurrency' => $this->concurrency
+ ), $this->transferOptions);
+
+ return $this->concurrency > 1
+ ? new ParallelTransfer($this->client, $this->state, $this->source, $options)
+ : new SerialTransfer($this->client, $this->state, $this->source, $options);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function initiateMultipartUpload()
+ {
+ // Determine Content-Type
+ if (!isset($this->commandOptions['ContentType'])) {
+ if ($mimeType = $this->source->getContentType()) {
+ $this->commandOptions['ContentType'] = $mimeType;
+ }
+ }
+
+ $params = array_replace(array(
+ Ua::OPTION => Ua::MULTIPART_UPLOAD,
+ 'command.headers' => $this->headers,
+ 'Metadata' => array()
+ ), $this->commandOptions);
+
+ // Calculate the MD5 hash if none was set and it is asked of the builder
+ if ($this->calculateEntireMd5) {
+ $this->md5 = $this->source->getContentMd5();
+ }
+
+ // If an MD5 is specified, then add it to the custom headers of the request
+ // so that it will be returned when downloading the object from Amazon S3
+ if ($this->md5) {
+ $params['Metadata']['x-amz-Content-MD5'] = $this->md5;
+ }
+
+ $result = $this->client->getCommand('CreateMultipartUpload', $params)->execute();
+ // Create a new state based on the initiated upload
+ $params['UploadId'] = $result['UploadId'];
+
+ return new TransferState(UploadId::fromParams($params));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/UploadId.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/UploadId.php
new file mode 100644
index 0000000..9d5f384
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/UploadId.php
@@ -0,0 +1,35 @@
+ false,
+ 'Key' => false,
+ 'UploadId' => false
+ );
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/UploadPart.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/UploadPart.php
new file mode 100644
index 0000000..e0ded33
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/MultipartUpload/UploadPart.php
@@ -0,0 +1,74 @@
+ 'partNumber',
+ 'ETag' => 'eTag',
+ 'LastModified' => 'lastModified',
+ 'Size' => 'size'
+ );
+
+ /**
+ * @var string The ETag for this part
+ */
+ protected $eTag;
+
+ /**
+ * @var string The last modified date
+ */
+ protected $lastModified;
+
+ /**
+ * @var int The size (or content-length) in bytes of the upload body
+ */
+ protected $size;
+
+ /**
+ * @return string
+ */
+ public function getETag()
+ {
+ return $this->eTag;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLastModified()
+ {
+ return $this->lastModified;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSize()
+ {
+ return $this->size;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/PostObject.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/PostObject.php
new file mode 100644
index 0000000..0aa2dbc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Model/PostObject.php
@@ -0,0 +1,275 @@
+ tag attributes as an array
+ */
+ protected $formAttributes;
+
+ /**
+ * @var array The form's elements as an array
+ */
+ protected $formInputs;
+
+ /**
+ * @var string The raw json policy
+ */
+ protected $jsonPolicy;
+
+ /**
+ * Constructs the PostObject
+ *
+ * The options array accepts the following keys:
+ *
+ * - acl: The access control setting to apply to the uploaded file. Accepts any of the
+ * CannedAcl constants
+ * - Cache-Control: The Cache-Control HTTP header value to apply to the uploaded file
+ * - Content-Disposition: The Content-Disposition HTTP header value to apply to the uploaded file
+ * - Content-Encoding: The Content-Encoding HTTP header value to apply to the uploaded file
+ * - Content-Type: The Content-Type HTTP header value to apply to the uploaded file. The default
+ * value is `application/octet-stream`
+ * - Expires: The Expires HTTP header value to apply to the uploaded file
+ * - key: The location where the file should be uploaded to. The default value is
+ * `^${filename}` which will use the name of the uploaded file
+ * - policy: A raw policy in JSON format. By default, the PostObject creates one for you
+ * - policy_callback: A callback used to modify the policy before encoding and signing it. The
+ * method signature for the callback should accept an array of the policy data as
+ * the 1st argument, (optionally) the PostObject as the 2nd argument, and return
+ * the policy data with the desired modifications.
+ * - success_action_redirect: The URI for Amazon S3 to redirect to upon successful upload
+ * - success_action_status: The status code for Amazon S3 to return upon successful upload
+ * - ttd: The expiration time for the generated upload form data
+ * - x-amz-meta-*: Any custom meta tag that should be set to the object
+ * - x-amz-server-side-encryption: The server-side encryption mechanism to use
+ * - x-amz-storage-class: The storage setting to apply to the object
+ * - x-amz-server-side-encryption-customer-algorithm: The SSE-C algorithm
+ * - x-amz-server-side-encryption-customer-key: The SSE-C customer secret key
+ * - x-amz-server-side-encryption-customer-key-MD5: The MD5 hash of the SSE-C customer secret key
+ *
+ * For the Cache-Control, Content-Disposition, Content-Encoding,
+ * Content-Type, Expires, and key options, to use a "starts-with" comparison
+ * instead of an equals comparison, prefix the value with a ^ (carat)
+ * character
+ *
+ * @param S3Client $client
+ * @param $bucket
+ * @param array $options
+ */
+ public function __construct(S3Client $client, $bucket, array $options = array())
+ {
+ $this->setClient($client);
+ $this->setBucket($bucket);
+ parent::__construct($options);
+ }
+
+ /**
+ * Analyzes the provided data and turns it into useful data that can be
+ * consumed and used to build an upload form
+ *
+ * @return PostObject
+ */
+ public function prepareData()
+ {
+ // Validate required options
+ $options = Collection::fromConfig($this->data, array(
+ 'ttd' => '+1 hour',
+ 'key' => '^${filename}',
+ ));
+
+ // Format ttd option
+ $ttd = $options['ttd'];
+ $ttd = is_numeric($ttd) ? (int) $ttd : strtotime($ttd);
+ unset($options['ttd']);
+
+ // If a policy or policy callback were provided, extract those from the options
+ $rawJsonPolicy = $options['policy'];
+ $policyCallback = $options['policy_callback'];
+ unset($options['policy'], $options['policy_callback']);
+
+ // Setup policy document
+ $policy = array(
+ 'expiration' => gmdate(DateFormat::ISO8601_S3, $ttd),
+ 'conditions' => array(array('bucket' => $this->bucket))
+ );
+
+ // Configure the endpoint/action
+ $url = Url::factory($this->client->getBaseUrl());
+ if ($url->getScheme() === 'https' && strpos($this->bucket, '.') !== false) {
+ // Use path-style URLs
+ $url->setPath($this->bucket);
+ } else {
+ // Use virtual-style URLs
+ $url->setHost($this->bucket . '.' . $url->getHost());
+ }
+
+ // Setup basic form
+ $this->formAttributes = array(
+ 'action' => (string) $url,
+ 'method' => 'POST',
+ 'enctype' => 'multipart/form-data'
+ );
+ $this->formInputs = array(
+ 'AWSAccessKeyId' => $this->client->getCredentials()->getAccessKeyId()
+ );
+
+ // Add success action status
+ $status = (int) $options->get('success_action_status');
+ if ($status && in_array($status, array(200, 201, 204))) {
+ $this->formInputs['success_action_status'] = (string) $status;
+ $policy['conditions'][] = array(
+ 'success_action_status' => (string) $status
+ );
+ unset($options['success_action_status']);
+ }
+
+ // Add other options
+ foreach ($options as $key => $value) {
+ $value = (string) $value;
+ if ($value[0] === '^') {
+ $value = substr($value, 1);
+ $this->formInputs[$key] = $value;
+ $value = preg_replace('/\$\{(\w*)\}/', '', $value);
+ $policy['conditions'][] = array('starts-with', '$' . $key, $value);
+ } else {
+ $this->formInputs[$key] = $value;
+ $policy['conditions'][] = array($key => $value);
+ }
+ }
+
+ // Handle the policy
+ $policy = is_callable($policyCallback) ? $policyCallback($policy, $this) : $policy;
+ $this->jsonPolicy = $rawJsonPolicy ?: json_encode($policy);
+ $this->applyPolicy();
+
+ return $this;
+ }
+
+ /**
+ * Sets the S3 client
+ *
+ * @param S3Client $client
+ *
+ * @return PostObject
+ */
+ public function setClient(S3Client $client)
+ {
+ $this->client = $client;
+
+ return $this;
+ }
+
+ /**
+ * Gets the S3 client
+ *
+ * @return S3Client
+ */
+ public function getClient()
+ {
+ return $this->client;
+ }
+
+ /**
+ * Sets the bucket and makes sure it is a valid bucket name
+ *
+ * @param string $bucket
+ *
+ * @return PostObject
+ */
+ public function setBucket($bucket)
+ {
+ $this->bucket = $bucket;
+
+ return $this;
+ }
+
+ /**
+ * Gets the bucket name
+ *
+ * @return string
+ */
+ public function getBucket()
+ {
+ return $this->bucket;
+ }
+
+ /**
+ * Gets the form attributes as an array
+ *
+ * @return array
+ */
+ public function getFormAttributes()
+ {
+ return $this->formAttributes;
+ }
+
+ /**
+ * Gets the form inputs as an array
+ *
+ * @return array
+ */
+ public function getFormInputs()
+ {
+ return $this->formInputs;
+ }
+
+ /**
+ * Gets the raw JSON policy
+ *
+ * @return string
+ */
+ public function getJsonPolicy()
+ {
+ return $this->jsonPolicy;
+ }
+
+ /**
+ * Handles the encoding, singing, and injecting of the policy
+ */
+ protected function applyPolicy()
+ {
+ $jsonPolicy64 = base64_encode($this->jsonPolicy);
+ $this->formInputs['policy'] = $jsonPolicy64;
+
+ $this->formInputs['signature'] = base64_encode(hash_hmac(
+ 'sha1',
+ $jsonPolicy64,
+ $this->client->getCredentials()->getSecretKey(),
+ true
+ ));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Resources/s3-2006-03-01.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Resources/s3-2006-03-01.php
new file mode 100644
index 0000000..381a410
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Resources/s3-2006-03-01.php
@@ -0,0 +1,5769 @@
+ '2006-03-01',
+ 'endpointPrefix' => 's3',
+ 'serviceFullName' => 'Amazon Simple Storage Service',
+ 'serviceAbbreviation' => 'Amazon S3',
+ 'serviceType' => 'rest-xml',
+ 'timestampFormat' => 'rfc822',
+ 'globalEndpoint' => 's3.amazonaws.com',
+ 'signatureVersion' => 's3',
+ 'namespace' => 'S3',
+ 'regions' => array(
+ 'us-east-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3.amazonaws.com',
+ ),
+ 'us-west-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-us-west-1.amazonaws.com',
+ ),
+ 'us-west-2' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-us-west-2.amazonaws.com',
+ ),
+ 'eu-west-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-eu-west-1.amazonaws.com',
+ ),
+ 'eu-central-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-eu-central-1.amazonaws.com',
+ ),
+ 'ap-northeast-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-ap-northeast-1.amazonaws.com',
+ ),
+ 'ap-southeast-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-ap-southeast-1.amazonaws.com',
+ ),
+ 'ap-southeast-2' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-ap-southeast-2.amazonaws.com',
+ ),
+ 'sa-east-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-sa-east-1.amazonaws.com',
+ ),
+ 'cn-north-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3.cn-north-1.amazonaws.com.cn',
+ ),
+ 'us-gov-west-1' => array(
+ 'http' => true,
+ 'https' => true,
+ 'hostname' => 's3-us-gov-west-1.amazonaws.com',
+ ),
+ ),
+ 'operations' => array(
+ 'AbortMultipartUpload' => array(
+ 'httpMethod' => 'DELETE',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'AbortMultipartUploadOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadAbort.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'UploadId' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'uploadId',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'The specified multipart upload does not exist.',
+ 'class' => 'NoSuchUploadException',
+ ),
+ ),
+ ),
+ 'CompleteMultipartUpload' => array(
+ 'httpMethod' => 'POST',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'CompleteMultipartUploadOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'CompleteMultipartUpload',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'Parts' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'CompletedPart',
+ 'type' => 'object',
+ 'sentAs' => 'Part',
+ 'properties' => array(
+ 'ETag' => array(
+ 'type' => 'string',
+ ),
+ 'PartNumber' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ ),
+ 'UploadId' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'uploadId',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'CopyObject' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'CopyObjectOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'CopyObjectRequest',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'ACL' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-acl',
+ ),
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'CacheControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Cache-Control',
+ ),
+ 'ContentDisposition' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Disposition',
+ ),
+ 'ContentEncoding' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Encoding',
+ ),
+ 'ContentLanguage' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Language',
+ ),
+ 'ContentType' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Type',
+ ),
+ 'CopySource' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source',
+ ),
+ 'CopySourceIfMatch' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-if-match',
+ ),
+ 'CopySourceIfModifiedSince' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-if-modified-since',
+ ),
+ 'CopySourceIfNoneMatch' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-if-none-match',
+ ),
+ 'CopySourceIfUnmodifiedSince' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-if-unmodified-since',
+ ),
+ 'Expires' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ ),
+ 'GrantFullControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-full-control',
+ ),
+ 'GrantRead' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read',
+ ),
+ 'GrantReadACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read-acp',
+ ),
+ 'GrantWriteACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-write-acp',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'Metadata' => array(
+ 'type' => 'object',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-meta-',
+ 'additionalProperties' => array(
+ 'type' => 'string',
+ ),
+ ),
+ 'MetadataDirective' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-metadata-directive',
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-storage-class',
+ ),
+ 'WebsiteRedirectLocation' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-website-redirect-location',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKey' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'CopySourceSSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-server-side-encryption-customer-algorithm',
+ ),
+ 'CopySourceSSECustomerKey' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-server-side-encryption-customer-key',
+ ),
+ 'CopySourceSSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-server-side-encryption-customer-key-MD5',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'ACP' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'The source object of the COPY operation is not in the active tier and is only stored in Amazon Glacier.',
+ 'class' => 'ObjectNotInActiveTierErrorException',
+ ),
+ ),
+ ),
+ 'CreateBucket' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'CreateBucketOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUT.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'CreateBucketConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'ACL' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-acl',
+ ),
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'LocationConstraint' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'GrantFullControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-full-control',
+ ),
+ 'GrantRead' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read',
+ ),
+ 'GrantReadACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read-acp',
+ ),
+ 'GrantWrite' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-write',
+ ),
+ 'GrantWriteACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-write-acp',
+ ),
+ 'ACP' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.',
+ 'class' => 'BucketAlreadyExistsException',
+ ),
+ ),
+ ),
+ 'CreateMultipartUpload' => array(
+ 'httpMethod' => 'POST',
+ 'uri' => '/{Bucket}{/Key*}?uploads',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'CreateMultipartUploadOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'CreateMultipartUploadRequest',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'ACL' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-acl',
+ ),
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'CacheControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Cache-Control',
+ ),
+ 'ContentDisposition' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Disposition',
+ ),
+ 'ContentEncoding' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Encoding',
+ ),
+ 'ContentLanguage' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Language',
+ ),
+ 'ContentType' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Type',
+ ),
+ 'Expires' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ ),
+ 'GrantFullControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-full-control',
+ ),
+ 'GrantRead' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read',
+ ),
+ 'GrantReadACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read-acp',
+ ),
+ 'GrantWriteACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-write-acp',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'Metadata' => array(
+ 'type' => 'object',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-meta-',
+ 'additionalProperties' => array(
+ 'type' => 'string',
+ ),
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-storage-class',
+ ),
+ 'WebsiteRedirectLocation' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-website-redirect-location',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKey' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'ACP' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'DeleteBucket' => array(
+ 'httpMethod' => 'DELETE',
+ 'uri' => '/{Bucket}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'DeleteBucketOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETE.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ ),
+ 'DeleteBucketCors' => array(
+ 'httpMethod' => 'DELETE',
+ 'uri' => '/{Bucket}?cors',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'DeleteBucketCorsOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETEcors.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ ),
+ 'DeleteBucketLifecycle' => array(
+ 'httpMethod' => 'DELETE',
+ 'uri' => '/{Bucket}?lifecycle',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'DeleteBucketLifecycleOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETElifecycle.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ ),
+ 'DeleteBucketPolicy' => array(
+ 'httpMethod' => 'DELETE',
+ 'uri' => '/{Bucket}?policy',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'DeleteBucketPolicyOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETEpolicy.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ ),
+ 'DeleteBucketReplication' => array(
+ 'httpMethod' => 'DELETE',
+ 'uri' => '/{Bucket}?replication',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'DeleteBucketReplicationOutput',
+ 'responseType' => 'model',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ ),
+ 'DeleteBucketTagging' => array(
+ 'httpMethod' => 'DELETE',
+ 'uri' => '/{Bucket}?tagging',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'DeleteBucketTaggingOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETEtagging.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ ),
+ 'DeleteBucketWebsite' => array(
+ 'httpMethod' => 'DELETE',
+ 'uri' => '/{Bucket}?website',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'DeleteBucketWebsiteOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETEwebsite.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ ),
+ 'DeleteObject' => array(
+ 'httpMethod' => 'DELETE',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'DeleteObjectOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'MFA' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-mfa',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'versionId',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ ),
+ ),
+ 'DeleteObjects' => array(
+ 'httpMethod' => 'POST',
+ 'uri' => '/{Bucket}?delete',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'DeleteObjectsOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/multiobjectdeleteapi.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'Delete',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ 'contentMd5' => true,
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Objects' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'ObjectIdentifier',
+ 'type' => 'object',
+ 'sentAs' => 'Object',
+ 'properties' => array(
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'minLength' => 1,
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'Quiet' => array(
+ 'type' => 'boolean',
+ 'format' => 'boolean-string',
+ 'location' => 'xml',
+ ),
+ 'MFA' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-mfa',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketAcl' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?acl',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketAclOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETacl.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketCors' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?cors',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketCorsOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETcors.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketLifecycle' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?lifecycle',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketLifecycleOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlifecycle.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketLifecycleConfiguration' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?lifecycle',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketLifecycleConfigurationOutput',
+ 'responseType' => 'model',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketLocation' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?location',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketLocationOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ ),
+ 'GetBucketLogging' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?logging',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketLoggingOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlogging.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketNotification' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?notification',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'NotificationConfigurationDeprecated',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETnotification.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketNotificationConfiguration' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?notification',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'NotificationConfiguration',
+ 'responseType' => 'model',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketPolicy' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?policy',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketPolicyOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETpolicy.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ ),
+ 'GetBucketReplication' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?replication',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketReplicationOutput',
+ 'responseType' => 'model',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketRequestPayment' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?requestPayment',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketRequestPaymentOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTrequestPaymentGET.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketTagging' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?tagging',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketTaggingOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETtagging.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketVersioning' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?versioning',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketVersioningOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETversioningStatus.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetBucketWebsite' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?website',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetBucketWebsiteOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETwebsite.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'GetObject' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetObjectOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'IfMatch' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'If-Match',
+ ),
+ 'IfModifiedSince' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ 'sentAs' => 'If-Modified-Since',
+ ),
+ 'IfNoneMatch' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'If-None-Match',
+ ),
+ 'IfUnmodifiedSince' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ 'sentAs' => 'If-Unmodified-Since',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'Range' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ ),
+ 'ResponseCacheControl' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'response-cache-control',
+ ),
+ 'ResponseContentDisposition' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'response-content-disposition',
+ ),
+ 'ResponseContentEncoding' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'response-content-encoding',
+ ),
+ 'ResponseContentLanguage' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'response-content-language',
+ ),
+ 'ResponseContentType' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'response-content-type',
+ ),
+ 'ResponseExpires' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'query',
+ 'sentAs' => 'response-expires',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'versionId',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKey' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'SaveAs' => array(
+ 'location' => 'response_body',
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'The specified key does not exist.',
+ 'class' => 'NoSuchKeyException',
+ ),
+ ),
+ ),
+ 'GetObjectAcl' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}{/Key*}?acl',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetObjectAclOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'versionId',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'The specified key does not exist.',
+ 'class' => 'NoSuchKeyException',
+ ),
+ ),
+ ),
+ 'GetObjectTorrent' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}{/Key*}?torrent',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'GetObjectTorrentOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETtorrent.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ ),
+ ),
+ 'HeadBucket' => array(
+ 'httpMethod' => 'HEAD',
+ 'uri' => '/{Bucket}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'HeadBucketOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketHEAD.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'The specified bucket does not exist.',
+ 'class' => 'NoSuchBucketException',
+ ),
+ ),
+ ),
+ 'HeadObject' => array(
+ 'httpMethod' => 'HEAD',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'HeadObjectOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'IfMatch' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'If-Match',
+ ),
+ 'IfModifiedSince' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ 'sentAs' => 'If-Modified-Since',
+ ),
+ 'IfNoneMatch' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'If-None-Match',
+ ),
+ 'IfUnmodifiedSince' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ 'sentAs' => 'If-Unmodified-Since',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'Range' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'versionId',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKey' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'The specified key does not exist.',
+ 'class' => 'NoSuchKeyException',
+ ),
+ ),
+ ),
+ 'ListBuckets' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'ListBucketsOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTServiceGET.html',
+ 'parameters' => array(
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'ListMultipartUploads' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?uploads',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'ListMultipartUploadsOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListMPUpload.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Delimiter' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'delimiter',
+ ),
+ 'EncodingType' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'encoding-type',
+ ),
+ 'KeyMarker' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'key-marker',
+ ),
+ 'MaxUploads' => array(
+ 'type' => 'numeric',
+ 'location' => 'query',
+ 'sentAs' => 'max-uploads',
+ ),
+ 'Prefix' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'prefix',
+ ),
+ 'UploadIdMarker' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'upload-id-marker',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'ListObjectVersions' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}?versions',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'ListObjectVersionsOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETVersion.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Delimiter' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'delimiter',
+ ),
+ 'EncodingType' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'encoding-type',
+ ),
+ 'KeyMarker' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'key-marker',
+ ),
+ 'MaxKeys' => array(
+ 'type' => 'numeric',
+ 'location' => 'query',
+ 'sentAs' => 'max-keys',
+ ),
+ 'Prefix' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'prefix',
+ ),
+ 'VersionIdMarker' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'version-id-marker',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'ListObjects' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'ListObjectsOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Delimiter' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'delimiter',
+ ),
+ 'EncodingType' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'encoding-type',
+ ),
+ 'Marker' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'marker',
+ ),
+ 'MaxKeys' => array(
+ 'type' => 'numeric',
+ 'location' => 'query',
+ 'sentAs' => 'max-keys',
+ ),
+ 'Prefix' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'prefix',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'The specified bucket does not exist.',
+ 'class' => 'NoSuchBucketException',
+ ),
+ ),
+ ),
+ 'ListParts' => array(
+ 'httpMethod' => 'GET',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'ListPartsOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListParts.html',
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'MaxParts' => array(
+ 'type' => 'numeric',
+ 'location' => 'query',
+ 'sentAs' => 'max-parts',
+ ),
+ 'PartNumberMarker' => array(
+ 'type' => 'numeric',
+ 'location' => 'query',
+ 'sentAs' => 'part-number-marker',
+ ),
+ 'UploadId' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'uploadId',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ 'PutBucketAcl' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?acl',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketAclOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTacl.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'AccessControlPolicy',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'ACL' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-acl',
+ ),
+ 'Grants' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'AccessControlList',
+ 'items' => array(
+ 'name' => 'Grant',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Grantee' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'EmailAddress' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Type' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'sentAs' => 'xsi:type',
+ 'data' => array(
+ 'xmlAttribute' => true,
+ 'xmlNamespace' => 'http://www.w3.org/2001/XMLSchema-instance',
+ ),
+ ),
+ 'URI' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Permission' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'Owner' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'GrantFullControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-full-control',
+ ),
+ 'GrantRead' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read',
+ ),
+ 'GrantReadACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read-acp',
+ ),
+ 'GrantWrite' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-write',
+ ),
+ 'GrantWriteACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-write-acp',
+ ),
+ 'ACP' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ ),
+ ),
+ ),
+ 'PutBucketCors' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?cors',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketCorsOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTcors.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'CORSConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ 'contentMd5' => true,
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'CORSRules' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'CORSRule',
+ 'type' => 'object',
+ 'sentAs' => 'CORSRule',
+ 'properties' => array(
+ 'AllowedHeaders' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'AllowedHeader',
+ 'type' => 'string',
+ 'sentAs' => 'AllowedHeader',
+ ),
+ ),
+ 'AllowedMethods' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'AllowedMethod',
+ 'type' => 'string',
+ 'sentAs' => 'AllowedMethod',
+ ),
+ ),
+ 'AllowedOrigins' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'AllowedOrigin',
+ 'type' => 'string',
+ 'sentAs' => 'AllowedOrigin',
+ ),
+ ),
+ 'ExposeHeaders' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'ExposeHeader',
+ 'type' => 'string',
+ 'sentAs' => 'ExposeHeader',
+ ),
+ ),
+ 'MaxAgeSeconds' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'PutBucketLifecycle' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?lifecycle',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketLifecycleOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'LifecycleConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ 'contentMd5' => true,
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Rules' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Rule',
+ 'type' => 'object',
+ 'sentAs' => 'Rule',
+ 'properties' => array(
+ 'Expiration' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Date' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time',
+ ),
+ 'Days' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Prefix' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ 'Status' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ 'Transition' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Date' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time',
+ ),
+ 'Days' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'NoncurrentVersionTransition' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'NoncurrentDays' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'NoncurrentVersionExpiration' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'NoncurrentDays' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'PutBucketLifecycleConfiguration' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?lifecycle',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketLifecycleConfigurationOutput',
+ 'responseType' => 'model',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'LifecycleConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Rules' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'LifecycleRule',
+ 'type' => 'object',
+ 'sentAs' => 'Rule',
+ 'properties' => array(
+ 'Expiration' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Date' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ ),
+ 'Days' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Prefix' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ 'Status' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ 'Transitions' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Transition',
+ 'type' => 'object',
+ 'sentAs' => 'Transition',
+ 'properties' => array(
+ 'Date' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ ),
+ 'Days' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'NoncurrentVersionTransitions' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'NoncurrentVersionTransition',
+ 'type' => 'object',
+ 'sentAs' => 'NoncurrentVersionTransition',
+ 'properties' => array(
+ 'NoncurrentDays' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'NoncurrentVersionExpiration' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'NoncurrentDays' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'PutBucketLogging' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?logging',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketLoggingOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'BucketLoggingStatus',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ 'xmlAllowEmpty' => true,
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'LoggingEnabled' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'TargetBucket' => array(
+ 'type' => 'string',
+ ),
+ 'TargetGrants' => array(
+ 'type' => 'array',
+ 'items' => array(
+ 'name' => 'Grant',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Grantee' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'EmailAddress' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Type' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'sentAs' => 'xsi:type',
+ 'data' => array(
+ 'xmlAttribute' => true,
+ 'xmlNamespace' => 'http://www.w3.org/2001/XMLSchema-instance',
+ ),
+ ),
+ 'URI' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Permission' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'TargetPrefix' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'PutBucketNotification' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?notification',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketNotificationOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'NotificationConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ 'xmlAllowEmpty' => true,
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'TopicConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ ),
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Topic' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'QueueConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ ),
+ ),
+ 'Queue' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'CloudFunctionConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ ),
+ ),
+ 'CloudFunction' => array(
+ 'type' => 'string',
+ ),
+ 'InvocationRole' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'PutBucketNotificationConfiguration' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?notification',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketNotificationConfigurationOutput',
+ 'responseType' => 'model',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'NotificationConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'TopicConfigurations' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'TopicConfiguration',
+ 'type' => 'object',
+ 'sentAs' => 'TopicConfiguration',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'TopicArn' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'sentAs' => 'Topic',
+ ),
+ 'Events' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'Filter' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'object',
+ 'sentAs' => 'S3Key',
+ 'properties' => array(
+ 'FilterRules' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'FilterRule',
+ 'type' => 'object',
+ 'sentAs' => 'FilterRule',
+ 'properties' => array(
+ 'Name' => array(
+ 'type' => 'string',
+ ),
+ 'Value' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'QueueConfigurations' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'QueueConfiguration',
+ 'type' => 'object',
+ 'sentAs' => 'QueueConfiguration',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'QueueArn' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'sentAs' => 'Queue',
+ ),
+ 'Events' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'Filter' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'object',
+ 'sentAs' => 'S3Key',
+ 'properties' => array(
+ 'FilterRules' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'FilterRule',
+ 'type' => 'object',
+ 'sentAs' => 'FilterRule',
+ 'properties' => array(
+ 'Name' => array(
+ 'type' => 'string',
+ ),
+ 'Value' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'LambdaFunctionConfigurations' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'LambdaFunctionConfiguration',
+ 'type' => 'object',
+ 'sentAs' => 'CloudFunctionConfiguration',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'LambdaFunctionArn' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'sentAs' => 'CloudFunction',
+ ),
+ 'Events' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'Filter' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'object',
+ 'sentAs' => 'S3Key',
+ 'properties' => array(
+ 'FilterRules' => array(
+ 'type' => 'array',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'FilterRule',
+ 'type' => 'object',
+ 'sentAs' => 'FilterRule',
+ 'properties' => array(
+ 'Name' => array(
+ 'type' => 'string',
+ ),
+ 'Value' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'PutBucketPolicy' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?policy',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketPolicyOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTpolicy.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'PutBucketPolicyRequest',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Policy' => array(
+ 'required' => true,
+ 'type' => array(
+ 'string',
+ 'object',
+ ),
+ 'location' => 'body',
+ ),
+ ),
+ ),
+ 'PutBucketReplication' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?replication',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketReplicationOutput',
+ 'responseType' => 'model',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'ReplicationConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Role' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Rules' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'ReplicationRule',
+ 'type' => 'object',
+ 'sentAs' => 'Rule',
+ 'properties' => array(
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Prefix' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ 'Status' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ 'Destination' => array(
+ 'required' => true,
+ 'type' => 'object',
+ 'properties' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'PutBucketRequestPayment' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?requestPayment',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketRequestPaymentOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTrequestPaymentPUT.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'RequestPaymentConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Payer' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ ),
+ ),
+ 'PutBucketTagging' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?tagging',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketTaggingOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTtagging.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'Tagging',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ 'contentMd5' => true,
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'TagSet' => array(
+ 'required' => true,
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'items' => array(
+ 'name' => 'Tag',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'minLength' => 1,
+ ),
+ 'Value' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'PutBucketVersioning' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?versioning',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketVersioningOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'VersioningConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'MFA' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-mfa',
+ ),
+ 'MFADelete' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ 'sentAs' => 'MfaDelete',
+ ),
+ 'Status' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ ),
+ ),
+ 'PutBucketWebsite' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}?website',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutBucketWebsiteOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'WebsiteConfiguration',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ 'xmlAllowEmpty' => true,
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'ErrorDocument' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'minLength' => 1,
+ ),
+ ),
+ ),
+ 'IndexDocument' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Suffix' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'RedirectAllRequestsTo' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'HostName' => array(
+ 'required' => true,
+ 'type' => 'string',
+ ),
+ 'Protocol' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'RoutingRules' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'items' => array(
+ 'name' => 'RoutingRule',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Condition' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'HttpErrorCodeReturnedEquals' => array(
+ 'type' => 'string',
+ ),
+ 'KeyPrefixEquals' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Redirect' => array(
+ 'required' => true,
+ 'type' => 'object',
+ 'properties' => array(
+ 'HostName' => array(
+ 'type' => 'string',
+ ),
+ 'HttpRedirectCode' => array(
+ 'type' => 'string',
+ ),
+ 'Protocol' => array(
+ 'type' => 'string',
+ ),
+ 'ReplaceKeyPrefixWith' => array(
+ 'type' => 'string',
+ ),
+ 'ReplaceKeyWith' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'PutObject' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutObjectOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'PutObjectRequest',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'ACL' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-acl',
+ ),
+ 'Body' => array(
+ 'type' => array(
+ 'string',
+ 'object',
+ ),
+ 'location' => 'body',
+ ),
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'CacheControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Cache-Control',
+ ),
+ 'ContentDisposition' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Disposition',
+ ),
+ 'ContentEncoding' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Encoding',
+ ),
+ 'ContentLanguage' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Language',
+ ),
+ 'ContentLength' => array(
+ 'type' => 'numeric',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Length',
+ ),
+ 'ContentMD5' => array(
+ 'type' => array(
+ 'string',
+ 'boolean',
+ ),
+ 'location' => 'header',
+ 'sentAs' => 'Content-MD5',
+ ),
+ 'ContentType' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Type',
+ ),
+ 'Expires' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ ),
+ 'GrantFullControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-full-control',
+ ),
+ 'GrantRead' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read',
+ ),
+ 'GrantReadACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read-acp',
+ ),
+ 'GrantWriteACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-write-acp',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'Metadata' => array(
+ 'type' => 'object',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-meta-',
+ 'additionalProperties' => array(
+ 'type' => 'string',
+ ),
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-storage-class',
+ ),
+ 'WebsiteRedirectLocation' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-website-redirect-location',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKey' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'ACP' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ ),
+ ),
+ ),
+ 'PutObjectAcl' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}{/Key*}?acl',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'PutObjectAclOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUTacl.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'AccessControlPolicy',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'ACL' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-acl',
+ ),
+ 'Grants' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'AccessControlList',
+ 'items' => array(
+ 'name' => 'Grant',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Grantee' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'EmailAddress' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Type' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'sentAs' => 'xsi:type',
+ 'data' => array(
+ 'xmlAttribute' => true,
+ 'xmlNamespace' => 'http://www.w3.org/2001/XMLSchema-instance',
+ ),
+ ),
+ 'URI' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Permission' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'Owner' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'GrantFullControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-full-control',
+ ),
+ 'GrantRead' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read',
+ ),
+ 'GrantReadACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-read-acp',
+ ),
+ 'GrantWrite' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-write',
+ ),
+ 'GrantWriteACP' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-grant-write-acp',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'ACP' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'The specified key does not exist.',
+ 'class' => 'NoSuchKeyException',
+ ),
+ ),
+ ),
+ 'RestoreObject' => array(
+ 'httpMethod' => 'POST',
+ 'uri' => '/{Bucket}{/Key*}?restore',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'RestoreObjectOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectRestore.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'RestoreRequest',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'versionId',
+ ),
+ 'Days' => array(
+ 'required' => true,
+ 'type' => 'numeric',
+ 'location' => 'xml',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ ),
+ 'errorResponses' => array(
+ array(
+ 'reason' => 'This operation is not allowed against this storage tier',
+ 'class' => 'ObjectAlreadyInActiveTierErrorException',
+ ),
+ ),
+ ),
+ 'UploadPart' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'UploadPartOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'UploadPartRequest',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Body' => array(
+ 'type' => array(
+ 'string',
+ 'object',
+ ),
+ 'location' => 'body',
+ ),
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'ContentLength' => array(
+ 'type' => 'numeric',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Length',
+ ),
+ 'ContentMD5' => array(
+ 'type' => array(
+ 'string',
+ 'boolean',
+ ),
+ 'location' => 'header',
+ 'sentAs' => 'Content-MD5',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'PartNumber' => array(
+ 'required' => true,
+ 'type' => 'numeric',
+ 'location' => 'query',
+ 'sentAs' => 'partNumber',
+ ),
+ 'UploadId' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'uploadId',
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKey' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ ),
+ ),
+ 'UploadPartCopy' => array(
+ 'httpMethod' => 'PUT',
+ 'uri' => '/{Bucket}{/Key*}',
+ 'class' => 'Aws\\S3\\Command\\S3Command',
+ 'responseClass' => 'UploadPartCopyOutput',
+ 'responseType' => 'model',
+ 'documentationUrl' => 'http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html',
+ 'data' => array(
+ 'xmlRoot' => array(
+ 'name' => 'UploadPartCopyRequest',
+ 'namespaces' => array(
+ 'http://s3.amazonaws.com/doc/2006-03-01/',
+ ),
+ ),
+ ),
+ 'parameters' => array(
+ 'Bucket' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ ),
+ 'CopySource' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source',
+ ),
+ 'CopySourceIfMatch' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-if-match',
+ ),
+ 'CopySourceIfModifiedSince' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-if-modified-since',
+ ),
+ 'CopySourceIfNoneMatch' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-if-none-match',
+ ),
+ 'CopySourceIfUnmodifiedSince' => array(
+ 'type' => array(
+ 'object',
+ 'string',
+ 'integer',
+ ),
+ 'format' => 'date-time-http',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-if-unmodified-since',
+ ),
+ 'CopySourceRange' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-range',
+ ),
+ 'Key' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'uri',
+ 'minLength' => 1,
+ 'filters' => array(
+ 'Aws\\S3\\S3Client::explodeKey',
+ ),
+ ),
+ 'PartNumber' => array(
+ 'required' => true,
+ 'type' => 'numeric',
+ 'location' => 'query',
+ 'sentAs' => 'partNumber',
+ ),
+ 'UploadId' => array(
+ 'required' => true,
+ 'type' => 'string',
+ 'location' => 'query',
+ 'sentAs' => 'uploadId',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKey' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'CopySourceSSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-server-side-encryption-customer-algorithm',
+ ),
+ 'CopySourceSSECustomerKey' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-server-side-encryption-customer-key',
+ ),
+ 'CopySourceSSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-server-side-encryption-customer-key-MD5',
+ ),
+ 'RequestPayer' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-payer',
+ ),
+ 'command.expects' => array(
+ 'static' => true,
+ 'default' => 'application/xml',
+ ),
+ ),
+ ),
+ ),
+ 'models' => array(
+ 'AbortMultipartUploadOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'CompleteMultipartUploadOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Location' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Bucket' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Key' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Expiration' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-expiration',
+ ),
+ 'ETag' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-version-id',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'CopyObjectOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'ETag' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'LastModified' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Expiration' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-expiration',
+ ),
+ 'CopySourceVersionId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-version-id',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-version-id',
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'CreateBucketOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Location' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'CreateMultipartUploadOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Bucket' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ 'sentAs' => 'Bucket',
+ ),
+ 'Key' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'UploadId' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'DeleteBucketOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'DeleteBucketCorsOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'DeleteBucketLifecycleOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'DeleteBucketPolicyOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'DeleteBucketReplicationOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'DeleteBucketTaggingOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'DeleteBucketWebsiteOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'DeleteObjectOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'DeleteMarker' => array(
+ 'type' => 'boolean',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-delete-marker',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-version-id',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'DeleteObjectsOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Deleted' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'DeletedObject',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'string',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ ),
+ 'DeleteMarker' => array(
+ 'type' => 'boolean',
+ ),
+ 'DeleteMarkerVersionId' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'Errors' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'Error',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Error',
+ 'type' => 'object',
+ 'sentAs' => 'Error',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'string',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ ),
+ 'Code' => array(
+ 'type' => 'string',
+ ),
+ 'Message' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketAclOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Owner' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Grants' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'AccessControlList',
+ 'items' => array(
+ 'name' => 'Grant',
+ 'type' => 'object',
+ 'sentAs' => 'Grant',
+ 'properties' => array(
+ 'Grantee' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'EmailAddress' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Type' => array(
+ 'type' => 'string',
+ 'sentAs' => 'xsi:type',
+ 'data' => array(
+ 'xmlAttribute' => true,
+ 'xmlNamespace' => 'http://www.w3.org/2001/XMLSchema-instance',
+ ),
+ ),
+ 'URI' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Permission' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketCorsOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'CORSRules' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'CORSRule',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'CORSRule',
+ 'type' => 'object',
+ 'sentAs' => 'CORSRule',
+ 'properties' => array(
+ 'AllowedHeaders' => array(
+ 'type' => 'array',
+ 'sentAs' => 'AllowedHeader',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'AllowedHeader',
+ 'type' => 'string',
+ 'sentAs' => 'AllowedHeader',
+ ),
+ ),
+ 'AllowedMethods' => array(
+ 'type' => 'array',
+ 'sentAs' => 'AllowedMethod',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'AllowedMethod',
+ 'type' => 'string',
+ 'sentAs' => 'AllowedMethod',
+ ),
+ ),
+ 'AllowedOrigins' => array(
+ 'type' => 'array',
+ 'sentAs' => 'AllowedOrigin',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'AllowedOrigin',
+ 'type' => 'string',
+ 'sentAs' => 'AllowedOrigin',
+ ),
+ ),
+ 'ExposeHeaders' => array(
+ 'type' => 'array',
+ 'sentAs' => 'ExposeHeader',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'ExposeHeader',
+ 'type' => 'string',
+ 'sentAs' => 'ExposeHeader',
+ ),
+ ),
+ 'MaxAgeSeconds' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketLifecycleOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Rules' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'Rule',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Rule',
+ 'type' => 'object',
+ 'sentAs' => 'Rule',
+ 'properties' => array(
+ 'Expiration' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Date' => array(
+ 'type' => 'string',
+ ),
+ 'Days' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Prefix' => array(
+ 'type' => 'string',
+ ),
+ 'Status' => array(
+ 'type' => 'string',
+ ),
+ 'Transition' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Date' => array(
+ 'type' => 'string',
+ ),
+ 'Days' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'NoncurrentVersionTransition' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'NoncurrentDays' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'NoncurrentVersionExpiration' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'NoncurrentDays' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketLifecycleConfigurationOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Rules' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'Rule',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'LifecycleRule',
+ 'type' => 'object',
+ 'sentAs' => 'Rule',
+ 'properties' => array(
+ 'Expiration' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Date' => array(
+ 'type' => 'string',
+ ),
+ 'Days' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Prefix' => array(
+ 'type' => 'string',
+ ),
+ 'Status' => array(
+ 'type' => 'string',
+ ),
+ 'Transitions' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Transition',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Transition',
+ 'type' => 'object',
+ 'sentAs' => 'Transition',
+ 'properties' => array(
+ 'Date' => array(
+ 'type' => 'string',
+ ),
+ 'Days' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'NoncurrentVersionTransitions' => array(
+ 'type' => 'array',
+ 'sentAs' => 'NoncurrentVersionTransition',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'NoncurrentVersionTransition',
+ 'type' => 'object',
+ 'sentAs' => 'NoncurrentVersionTransition',
+ 'properties' => array(
+ 'NoncurrentDays' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'NoncurrentVersionExpiration' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'NoncurrentDays' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketLocationOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Location' => array(
+ 'type' => 'string',
+ 'location' => 'body',
+ 'filters' => array(
+ 'strval',
+ 'strip_tags',
+ 'trim',
+ ),
+ ),
+ ),
+ ),
+ 'GetBucketLoggingOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'LoggingEnabled' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'TargetBucket' => array(
+ 'type' => 'string',
+ ),
+ 'TargetGrants' => array(
+ 'type' => 'array',
+ 'items' => array(
+ 'name' => 'Grant',
+ 'type' => 'object',
+ 'sentAs' => 'Grant',
+ 'properties' => array(
+ 'Grantee' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'EmailAddress' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Type' => array(
+ 'type' => 'string',
+ 'sentAs' => 'xsi:type',
+ 'data' => array(
+ 'xmlAttribute' => true,
+ 'xmlNamespace' => 'http://www.w3.org/2001/XMLSchema-instance',
+ ),
+ ),
+ 'URI' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Permission' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'TargetPrefix' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'NotificationConfigurationDeprecated' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'TopicConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Event',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Topic' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'QueueConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Event',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'Queue' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'CloudFunctionConfiguration' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'Event' => array(
+ 'type' => 'string',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Event',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'CloudFunction' => array(
+ 'type' => 'string',
+ ),
+ 'InvocationRole' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'NotificationConfiguration' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'TopicConfigurations' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'TopicConfiguration',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'TopicConfiguration',
+ 'type' => 'object',
+ 'sentAs' => 'TopicConfiguration',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'TopicArn' => array(
+ 'type' => 'string',
+ 'sentAs' => 'Topic',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Event',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'Filter' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'object',
+ 'sentAs' => 'S3Key',
+ 'properties' => array(
+ 'FilterRules' => array(
+ 'type' => 'array',
+ 'sentAs' => 'FilterRule',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'FilterRule',
+ 'type' => 'object',
+ 'sentAs' => 'FilterRule',
+ 'properties' => array(
+ 'Name' => array(
+ 'type' => 'string',
+ ),
+ 'Value' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'QueueConfigurations' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'QueueConfiguration',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'QueueConfiguration',
+ 'type' => 'object',
+ 'sentAs' => 'QueueConfiguration',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'QueueArn' => array(
+ 'type' => 'string',
+ 'sentAs' => 'Queue',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Event',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'Filter' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'object',
+ 'sentAs' => 'S3Key',
+ 'properties' => array(
+ 'FilterRules' => array(
+ 'type' => 'array',
+ 'sentAs' => 'FilterRule',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'FilterRule',
+ 'type' => 'object',
+ 'sentAs' => 'FilterRule',
+ 'properties' => array(
+ 'Name' => array(
+ 'type' => 'string',
+ ),
+ 'Value' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'LambdaFunctionConfigurations' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'CloudFunctionConfiguration',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'LambdaFunctionConfiguration',
+ 'type' => 'object',
+ 'sentAs' => 'CloudFunctionConfiguration',
+ 'properties' => array(
+ 'Id' => array(
+ 'type' => 'string',
+ ),
+ 'LambdaFunctionArn' => array(
+ 'type' => 'string',
+ 'sentAs' => 'CloudFunction',
+ ),
+ 'Events' => array(
+ 'type' => 'array',
+ 'sentAs' => 'Event',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Event',
+ 'type' => 'string',
+ 'sentAs' => 'Event',
+ ),
+ ),
+ 'Filter' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'object',
+ 'sentAs' => 'S3Key',
+ 'properties' => array(
+ 'FilterRules' => array(
+ 'type' => 'array',
+ 'sentAs' => 'FilterRule',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'FilterRule',
+ 'type' => 'object',
+ 'sentAs' => 'FilterRule',
+ 'properties' => array(
+ 'Name' => array(
+ 'type' => 'string',
+ ),
+ 'Value' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketPolicyOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Policy' => array(
+ 'type' => 'string',
+ 'instanceOf' => 'Guzzle\\Http\\EntityBody',
+ 'location' => 'body',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketReplicationOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Role' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Rules' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'Rule',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'ReplicationRule',
+ 'type' => 'object',
+ 'sentAs' => 'Rule',
+ 'properties' => array(
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Prefix' => array(
+ 'type' => 'string',
+ ),
+ 'Status' => array(
+ 'type' => 'string',
+ ),
+ 'Destination' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'Bucket' => array(
+ 'type' => 'string',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketRequestPaymentOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Payer' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketTaggingOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'TagSet' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'items' => array(
+ 'name' => 'Tag',
+ 'type' => 'object',
+ 'sentAs' => 'Tag',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'string',
+ ),
+ 'Value' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketVersioningOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Status' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'MFADelete' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ 'sentAs' => 'MfaDelete',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetBucketWebsiteOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RedirectAllRequestsTo' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'HostName' => array(
+ 'type' => 'string',
+ ),
+ 'Protocol' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'IndexDocument' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Suffix' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'ErrorDocument' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'RoutingRules' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'items' => array(
+ 'name' => 'RoutingRule',
+ 'type' => 'object',
+ 'sentAs' => 'RoutingRule',
+ 'properties' => array(
+ 'Condition' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'HttpErrorCodeReturnedEquals' => array(
+ 'type' => 'string',
+ ),
+ 'KeyPrefixEquals' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Redirect' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'HostName' => array(
+ 'type' => 'string',
+ ),
+ 'HttpRedirectCode' => array(
+ 'type' => 'string',
+ ),
+ 'Protocol' => array(
+ 'type' => 'string',
+ ),
+ 'ReplaceKeyPrefixWith' => array(
+ 'type' => 'string',
+ ),
+ 'ReplaceKeyWith' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetObjectOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Body' => array(
+ 'type' => 'string',
+ 'instanceOf' => 'Guzzle\\Http\\EntityBody',
+ 'location' => 'body',
+ ),
+ 'DeleteMarker' => array(
+ 'type' => 'boolean',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-delete-marker',
+ ),
+ 'AcceptRanges' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'accept-ranges',
+ ),
+ 'Expiration' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-expiration',
+ ),
+ 'Restore' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-restore',
+ ),
+ 'LastModified' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Last-Modified',
+ ),
+ 'ContentLength' => array(
+ 'type' => 'numeric',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Length',
+ ),
+ 'ETag' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ ),
+ 'MissingMeta' => array(
+ 'type' => 'numeric',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-missing-meta',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-version-id',
+ ),
+ 'CacheControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Cache-Control',
+ ),
+ 'ContentDisposition' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Disposition',
+ ),
+ 'ContentEncoding' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Encoding',
+ ),
+ 'ContentLanguage' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Language',
+ ),
+ 'ContentRange' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Range',
+ ),
+ 'ContentType' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Type',
+ ),
+ 'Expires' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ ),
+ 'WebsiteRedirectLocation' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-website-redirect-location',
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'Metadata' => array(
+ 'type' => 'object',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-meta-',
+ 'additionalProperties' => array(
+ 'type' => 'string',
+ ),
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-storage-class',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'ReplicationStatus' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-replication-status',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetObjectAclOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Owner' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Grants' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'AccessControlList',
+ 'items' => array(
+ 'name' => 'Grant',
+ 'type' => 'object',
+ 'sentAs' => 'Grant',
+ 'properties' => array(
+ 'Grantee' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'EmailAddress' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'Type' => array(
+ 'type' => 'string',
+ 'sentAs' => 'xsi:type',
+ 'data' => array(
+ 'xmlAttribute' => true,
+ 'xmlNamespace' => 'http://www.w3.org/2001/XMLSchema-instance',
+ ),
+ ),
+ 'URI' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Permission' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'GetObjectTorrentOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Body' => array(
+ 'type' => 'string',
+ 'instanceOf' => 'Guzzle\\Http\\EntityBody',
+ 'location' => 'body',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'HeadBucketOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'HeadObjectOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'DeleteMarker' => array(
+ 'type' => 'boolean',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-delete-marker',
+ ),
+ 'AcceptRanges' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'accept-ranges',
+ ),
+ 'Expiration' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-expiration',
+ ),
+ 'Restore' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-restore',
+ ),
+ 'LastModified' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Last-Modified',
+ ),
+ 'ContentLength' => array(
+ 'type' => 'numeric',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Length',
+ ),
+ 'ETag' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ ),
+ 'MissingMeta' => array(
+ 'type' => 'numeric',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-missing-meta',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-version-id',
+ ),
+ 'CacheControl' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Cache-Control',
+ ),
+ 'ContentDisposition' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Disposition',
+ ),
+ 'ContentEncoding' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Encoding',
+ ),
+ 'ContentLanguage' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Language',
+ ),
+ 'ContentType' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'Content-Type',
+ ),
+ 'Expires' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ ),
+ 'WebsiteRedirectLocation' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-website-redirect-location',
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'Metadata' => array(
+ 'type' => 'object',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-meta-',
+ 'additionalProperties' => array(
+ 'type' => 'string',
+ ),
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-storage-class',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'ReplicationStatus' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-replication-status',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'ListBucketsOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Buckets' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'items' => array(
+ 'name' => 'Bucket',
+ 'type' => 'object',
+ 'sentAs' => 'Bucket',
+ 'properties' => array(
+ 'Name' => array(
+ 'type' => 'string',
+ ),
+ 'CreationDate' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'Owner' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'ListMultipartUploadsOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Bucket' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'KeyMarker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'UploadIdMarker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'NextKeyMarker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Prefix' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Delimiter' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'NextUploadIdMarker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'MaxUploads' => array(
+ 'type' => 'numeric',
+ 'location' => 'xml',
+ ),
+ 'IsTruncated' => array(
+ 'type' => 'boolean',
+ 'location' => 'xml',
+ ),
+ 'Uploads' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'Upload',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'MultipartUpload',
+ 'type' => 'object',
+ 'sentAs' => 'Upload',
+ 'properties' => array(
+ 'UploadId' => array(
+ 'type' => 'string',
+ ),
+ 'Key' => array(
+ 'type' => 'string',
+ ),
+ 'Initiated' => array(
+ 'type' => 'string',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ 'Owner' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Initiator' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'CommonPrefixes' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'CommonPrefix',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Prefix' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'EncodingType' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'ListObjectVersionsOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'IsTruncated' => array(
+ 'type' => 'boolean',
+ 'location' => 'xml',
+ ),
+ 'KeyMarker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'VersionIdMarker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'NextKeyMarker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'NextVersionIdMarker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Versions' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'Version',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'ObjectVersion',
+ 'type' => 'object',
+ 'sentAs' => 'Version',
+ 'properties' => array(
+ 'ETag' => array(
+ 'type' => 'string',
+ ),
+ 'Size' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ 'Key' => array(
+ 'type' => 'string',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ ),
+ 'IsLatest' => array(
+ 'type' => 'boolean',
+ ),
+ 'LastModified' => array(
+ 'type' => 'string',
+ ),
+ 'Owner' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'DeleteMarkers' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'DeleteMarker',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'DeleteMarkerEntry',
+ 'type' => 'object',
+ 'sentAs' => 'DeleteMarker',
+ 'properties' => array(
+ 'Owner' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Key' => array(
+ 'type' => 'string',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ ),
+ 'IsLatest' => array(
+ 'type' => 'boolean',
+ ),
+ 'LastModified' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'Name' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Prefix' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Delimiter' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'MaxKeys' => array(
+ 'type' => 'numeric',
+ 'location' => 'xml',
+ ),
+ 'CommonPrefixes' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'CommonPrefix',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Prefix' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'EncodingType' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'ListObjectsOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'IsTruncated' => array(
+ 'type' => 'boolean',
+ 'location' => 'xml',
+ ),
+ 'Marker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'NextMarker' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Contents' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Object',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Key' => array(
+ 'type' => 'string',
+ ),
+ 'LastModified' => array(
+ 'type' => 'string',
+ ),
+ 'ETag' => array(
+ 'type' => 'string',
+ ),
+ 'Size' => array(
+ 'type' => 'numeric',
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ ),
+ 'Owner' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ 'Name' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Prefix' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Delimiter' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'MaxKeys' => array(
+ 'type' => 'numeric',
+ 'location' => 'xml',
+ ),
+ 'CommonPrefixes' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'CommonPrefix',
+ 'type' => 'object',
+ 'properties' => array(
+ 'Prefix' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ ),
+ 'EncodingType' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'ListPartsOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Bucket' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'Key' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'UploadId' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'PartNumberMarker' => array(
+ 'type' => 'numeric',
+ 'location' => 'xml',
+ ),
+ 'NextPartNumberMarker' => array(
+ 'type' => 'numeric',
+ 'location' => 'xml',
+ ),
+ 'MaxParts' => array(
+ 'type' => 'numeric',
+ 'location' => 'xml',
+ ),
+ 'IsTruncated' => array(
+ 'type' => 'boolean',
+ 'location' => 'xml',
+ ),
+ 'Parts' => array(
+ 'type' => 'array',
+ 'location' => 'xml',
+ 'sentAs' => 'Part',
+ 'data' => array(
+ 'xmlFlattened' => true,
+ ),
+ 'items' => array(
+ 'name' => 'Part',
+ 'type' => 'object',
+ 'sentAs' => 'Part',
+ 'properties' => array(
+ 'PartNumber' => array(
+ 'type' => 'numeric',
+ ),
+ 'LastModified' => array(
+ 'type' => 'string',
+ ),
+ 'ETag' => array(
+ 'type' => 'string',
+ ),
+ 'Size' => array(
+ 'type' => 'numeric',
+ ),
+ ),
+ ),
+ ),
+ 'Initiator' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'Owner' => array(
+ 'type' => 'object',
+ 'location' => 'xml',
+ 'properties' => array(
+ 'DisplayName' => array(
+ 'type' => 'string',
+ ),
+ 'ID' => array(
+ 'type' => 'string',
+ ),
+ ),
+ ),
+ 'StorageClass' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketAclOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketCorsOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketLifecycleOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketLifecycleConfigurationOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketLoggingOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketNotificationOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketNotificationConfigurationOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketPolicyOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketReplicationOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketRequestPaymentOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketTaggingOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketVersioningOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutBucketWebsiteOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'PutObjectOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'Expiration' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-expiration',
+ ),
+ 'ETag' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'VersionId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-version-id',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ 'ObjectURL' => array(
+ ),
+ ),
+ ),
+ 'PutObjectAclOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'RestoreObjectOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'UploadPartOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'ETag' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ 'UploadPartCopyOutput' => array(
+ 'type' => 'object',
+ 'additionalProperties' => true,
+ 'properties' => array(
+ 'CopySourceVersionId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-copy-source-version-id',
+ ),
+ 'ETag' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'LastModified' => array(
+ 'type' => 'string',
+ 'location' => 'xml',
+ ),
+ 'ServerSideEncryption' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption',
+ ),
+ 'SSECustomerAlgorithm' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-algorithm',
+ ),
+ 'SSECustomerKeyMD5' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-customer-key-MD5',
+ ),
+ 'SSEKMSKeyId' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-server-side-encryption-aws-kms-key-id',
+ ),
+ 'RequestCharged' => array(
+ 'type' => 'string',
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-charged',
+ ),
+ 'RequestId' => array(
+ 'location' => 'header',
+ 'sentAs' => 'x-amz-request-id',
+ ),
+ ),
+ ),
+ ),
+ 'iterators' => array(
+ 'ListBuckets' => array(
+ 'result_key' => 'Buckets',
+ ),
+ 'ListMultipartUploads' => array(
+ 'limit_key' => 'MaxUploads',
+ 'more_results' => 'IsTruncated',
+ 'output_token' => array(
+ 'NextKeyMarker',
+ 'NextUploadIdMarker',
+ ),
+ 'input_token' => array(
+ 'KeyMarker',
+ 'UploadIdMarker',
+ ),
+ 'result_key' => array(
+ 'Uploads',
+ 'CommonPrefixes',
+ ),
+ ),
+ 'ListObjectVersions' => array(
+ 'more_results' => 'IsTruncated',
+ 'limit_key' => 'MaxKeys',
+ 'output_token' => array(
+ 'NextKeyMarker',
+ 'NextVersionIdMarker',
+ ),
+ 'input_token' => array(
+ 'KeyMarker',
+ 'VersionIdMarker',
+ ),
+ 'result_key' => array(
+ 'Versions',
+ 'DeleteMarkers',
+ 'CommonPrefixes',
+ ),
+ ),
+ 'ListObjects' => array(
+ 'more_results' => 'IsTruncated',
+ 'limit_key' => 'MaxKeys',
+ 'output_token' => 'NextMarker',
+ 'input_token' => 'Marker',
+ 'result_key' => array(
+ 'Contents',
+ 'CommonPrefixes',
+ ),
+ ),
+ 'ListParts' => array(
+ 'more_results' => 'IsTruncated',
+ 'limit_key' => 'MaxParts',
+ 'output_token' => 'NextPartNumberMarker',
+ 'input_token' => 'PartNumberMarker',
+ 'result_key' => 'Parts',
+ ),
+ ),
+ 'waiters' => array(
+ '__default__' => array(
+ 'interval' => 5,
+ 'max_attempts' => 20,
+ ),
+ 'BucketExists' => array(
+ 'operation' => 'HeadBucket',
+ 'success.type' => 'output',
+ 'ignore_errors' => array(
+ 'NoSuchBucket',
+ ),
+ ),
+ 'BucketNotExists' => array(
+ 'operation' => 'HeadBucket',
+ 'success.type' => 'error',
+ 'success.value' => 'NoSuchBucket',
+ ),
+ 'ObjectExists' => array(
+ 'operation' => 'HeadObject',
+ 'success.type' => 'output',
+ 'ignore_errors' => array(
+ 'NoSuchKey',
+ ),
+ ),
+ 'ObjectNotExists' => array(
+ 'operation' => 'HeadObject',
+ 'success.type' => 'error',
+ 'success.value' => 'NoSuchKey'
+ ),
+ ),
+);
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/ResumableDownload.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/ResumableDownload.php
new file mode 100644
index 0000000..6d99677
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/ResumableDownload.php
@@ -0,0 +1,176 @@
+params = $params;
+ $this->client = $client;
+ $this->params['Bucket'] = $bucket;
+ $this->params['Key'] = $key;
+
+ // If a string is passed, then assume that the download should stream to a file on disk
+ if (is_string($target)) {
+ if (!($target = fopen($target, 'a+'))) {
+ throw new RuntimeException("Unable to open {$target} for writing");
+ }
+ // Always append to the file
+ fseek($target, 0, SEEK_END);
+ }
+
+ // Get the metadata and Content-MD5 of the object
+ $this->target = EntityBody::factory($target);
+ }
+
+ /**
+ * Get the bucket of the download
+ *
+ * @return string
+ */
+ public function getBucket()
+ {
+ return $this->params['Bucket'];
+ }
+
+ /**
+ * Get the key of the download
+ *
+ * @return string
+ */
+ public function getKey()
+ {
+ return $this->params['Key'];
+ }
+
+ /**
+ * Get the file to which the contents are downloaded
+ *
+ * @return string
+ */
+ public function getFilename()
+ {
+ return $this->target->getUri();
+ }
+
+ /**
+ * Download the remainder of the object from Amazon S3
+ *
+ * Performs a message integrity check if possible
+ *
+ * @return Model
+ */
+ public function __invoke()
+ {
+ $command = $this->client->getCommand('HeadObject', $this->params);
+ $this->meta = $command->execute();
+
+ if ($this->target->ftell() >= $this->meta['ContentLength']) {
+ return false;
+ }
+
+ $this->meta['ContentMD5'] = (string) $command->getResponse()->getHeader('Content-MD5');
+
+ // Use a ReadLimitEntityBody so that rewinding the stream after an error does not cause the file pointer
+ // to enter an inconsistent state with the data being downloaded
+ $this->params['SaveAs'] = new ReadLimitEntityBody(
+ $this->target,
+ $this->meta['ContentLength'],
+ $this->target->ftell()
+ );
+
+ $result = $this->getRemaining();
+ $this->checkIntegrity();
+
+ return $result;
+ }
+
+ /**
+ * Send the command to get the remainder of the object
+ *
+ * @return Model
+ */
+ protected function getRemaining()
+ {
+ $current = $this->target->ftell();
+ $targetByte = $this->meta['ContentLength'] - 1;
+ $this->params['Range'] = "bytes={$current}-{$targetByte}";
+
+ // Set the starting offset so that the body is never seeked to before this point in the event of a retry
+ $this->params['SaveAs']->setOffset($current);
+ $command = $this->client->getCommand('GetObject', $this->params);
+
+ return $command->execute();
+ }
+
+ /**
+ * Performs an MD5 message integrity check if possible
+ *
+ * @throws UnexpectedValueException if the message does not validate
+ */
+ protected function checkIntegrity()
+ {
+ if ($this->target->isReadable() && $expected = $this->meta['ContentMD5']) {
+ $actual = $this->target->getContentMd5();
+ if ($actual != $expected) {
+ throw new UnexpectedValueException(
+ "Message integrity check failed. Expected {$expected} but got {$actual}."
+ );
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3Client.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3Client.php
new file mode 100644
index 0000000..c17dd6c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3Client.php
@@ -0,0 +1,696 @@
+ 'ListBuckets',
+ 'GetBucket' => 'ListObjects',
+ 'PutBucket' => 'CreateBucket',
+
+ // SDK 1.x Aliases
+ 'GetBucketHeaders' => 'HeadBucket',
+ 'GetObjectHeaders' => 'HeadObject',
+ 'SetBucketAcl' => 'PutBucketAcl',
+ 'CreateObject' => 'PutObject',
+ 'DeleteObjects' => 'DeleteMultipleObjects',
+ 'PutObjectCopy' => 'CopyObject',
+ 'SetObjectAcl' => 'PutObjectAcl',
+ 'GetLogs' => 'GetBucketLogging',
+ 'GetVersioningStatus' => 'GetBucketVersioning',
+ 'SetBucketPolicy' => 'PutBucketPolicy',
+ 'CreateBucketNotification' => 'PutBucketNotification',
+ 'GetBucketNotifications' => 'GetBucketNotification',
+ 'CopyPart' => 'UploadPartCopy',
+ 'CreateWebsiteConfig' => 'PutBucketWebsite',
+ 'GetWebsiteConfig' => 'GetBucketWebsite',
+ 'DeleteWebsiteConfig' => 'DeleteBucketWebsite',
+ 'CreateObjectExpirationConfig' => 'PutBucketLifecycle',
+ 'GetObjectExpirationConfig' => 'GetBucketLifecycle',
+ 'DeleteObjectExpirationConfig' => 'DeleteBucketLifecycle',
+ );
+
+ protected $directory = __DIR__;
+
+ /**
+ * Factory method to create a new Amazon S3 client using an array of configuration options.
+ *
+ * @param array|Collection $config Client configuration data
+ *
+ * @return S3Client
+ * @link http://docs.aws.amazon.com/aws-sdk-php/v2/guide/configuration.html#client-configuration-options
+ */
+ public static function factory($config = array())
+ {
+ $exceptionParser = new S3ExceptionParser();
+
+ // Configure the custom exponential backoff plugin for retrying S3 specific errors
+ if (!isset($config[Options::BACKOFF])) {
+ $retries = isset($config[Options::BACKOFF_RETRIES]) ? $config[Options::BACKOFF_RETRIES] : 3;
+ $config[Options::BACKOFF] = static::createBackoffPlugin($exceptionParser, $retries);
+ }
+
+ $config[Options::SIGNATURE] = $signature = static::createSignature($config);
+
+ $client = ClientBuilder::factory(__NAMESPACE__)
+ ->setConfig($config)
+ ->setConfigDefaults(array(
+ Options::VERSION => self::LATEST_API_VERSION,
+ Options::SERVICE_DESCRIPTION => __DIR__ . '/Resources/s3-%s.php'
+ ))
+ ->setExceptionParser($exceptionParser)
+ ->setIteratorsConfig(array(
+ 'more_key' => 'IsTruncated',
+ 'operations' => array(
+ 'ListBuckets',
+ 'ListMultipartUploads' => array(
+ 'limit_param' => 'MaxUploads',
+ 'token_param' => array('KeyMarker', 'UploadIdMarker'),
+ 'token_key' => array('NextKeyMarker', 'NextUploadIdMarker'),
+ ),
+ 'ListObjects' => array(
+ 'limit_param' => 'MaxKeys',
+ 'token_param' => 'Marker',
+ 'token_key' => 'NextMarker',
+ ),
+ 'ListObjectVersions' => array(
+ 'limit_param' => 'MaxKeys',
+ 'token_param' => array('KeyMarker', 'VersionIdMarker'),
+ 'token_key' => array('nextKeyMarker', 'nextVersionIdMarker'),
+ ),
+ 'ListParts' => array(
+ 'limit_param' => 'MaxParts',
+ 'result_key' => 'Parts',
+ 'token_param' => 'PartNumberMarker',
+ 'token_key' => 'NextPartNumberMarker',
+ ),
+ )
+ ))
+ ->build();
+
+ // Use virtual hosted buckets when possible
+ $client->addSubscriber(new BucketStyleListener());
+ // Ensure that ACP headers are applied when needed
+ $client->addSubscriber(new AcpListener());
+ // Validate and add required Content-MD5 hashes (e.g. DeleteObjects)
+ $client->addSubscriber(new S3Md5Listener($signature));
+
+ // Allow for specifying bodies with file paths and file handles
+ $client->addSubscriber(new UploadBodyListener(array('PutObject', 'UploadPart')));
+
+ // Ensures that if a SSE-CPK key is provided, the key and md5 are formatted correctly
+ $client->addSubscriber(new SseCpkListener);
+
+ // Add aliases for some S3 operations
+ $default = CompositeFactory::getDefaultChain($client);
+ $default->add(
+ new AliasFactory($client, static::$commandAliases),
+ 'Guzzle\Service\Command\Factory\ServiceDescriptionFactory'
+ );
+ $client->setCommandFactory($default);
+
+ return $client;
+ }
+
+ /**
+ * Create an Amazon S3 specific backoff plugin
+ *
+ * @param S3ExceptionParser $exceptionParser
+ *
+ * @return BackoffPlugin
+ */
+ private static function createBackoffPlugin(S3ExceptionParser $exceptionParser, $retries = 3)
+ {
+ return new BackoffPlugin(
+ new TruncatedBackoffStrategy($retries,
+ new IncompleteMultipartUploadChecker(
+ new CurlBackoffStrategy(null,
+ new HttpBackoffStrategy(null,
+ new SocketTimeoutChecker(
+ new ExpiredCredentialsChecker($exceptionParser,
+ new ExponentialBackoffStrategy()
+ )
+ )
+ )
+ )
+ )
+ )
+ );
+ }
+
+ /**
+ * Create an appropriate signature based on the configuration settings
+ *
+ * @param $config
+ *
+ * @return \Aws\Common\Signature\SignatureInterface
+ * @throws InvalidArgumentException
+ */
+ private static function createSignature($config)
+ {
+ $currentValue = isset($config[Options::SIGNATURE]) ? $config[Options::SIGNATURE] : null;
+
+ // Force v4 if no value is provided, a region is in the config, and
+ // the region starts with "cn-" or "eu-central-".
+ $requiresV4 = !$currentValue
+ && isset($config['region'])
+ && (strpos($config['region'], 'eu-central-') === 0
+ || strpos($config['region'], 'cn-') === 0);
+
+ // Use the Amazon S3 signature V4 when the value is set to "v4" or when
+ // the value is not set and the region starts with "cn-".
+ if ($currentValue == 'v4' || $requiresV4) {
+ // Force SignatureV4 for specific regions or if specified in the config
+ $currentValue = new S3SignatureV4('s3');
+ } elseif (!$currentValue || $currentValue == 's3') {
+ // Use the Amazon S3 signature by default
+ $currentValue = new S3Signature();
+ }
+
+ // A region is require with v4
+ if ($currentValue instanceof SignatureV4 && !isset($config['region'])) {
+ throw new InvalidArgumentException('A region must be specified '
+ . 'when using signature version 4');
+ }
+
+ return $currentValue;
+ }
+
+ /**
+ * Determine if a string is a valid name for a DNS compatible Amazon S3
+ * bucket, meaning the bucket can be used as a subdomain in a URL (e.g.,
+ * ".s3.amazonaws.com").
+ *
+ * @param string $bucket The name of the bucket to check.
+ *
+ * @return bool TRUE if the bucket name is valid or FALSE if it is invalid.
+ */
+ public static function isValidBucketName($bucket)
+ {
+ $bucketLen = strlen($bucket);
+ if ($bucketLen < 3 || $bucketLen > 63 ||
+ // Cannot look like an IP address
+ preg_match('/(\d+\.){3}\d+$/', $bucket) ||
+ // Cannot include special characters, must start and end with lower alnum
+ !preg_match('/^[a-z0-9]([a-z0-9\-\.]*[a-z0-9])?$/', $bucket)
+ ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Create a pre-signed URL for a request
+ *
+ * @param RequestInterface $request Request to generate the URL for. Use the factory methods of the client to
+ * create this request object
+ * @param int|string|\DateTime $expires The time at which the URL should expire. This can be a Unix timestamp, a
+ * PHP DateTime object, or a string that can be evaluated by strtotime
+ *
+ * @return string
+ * @throws InvalidArgumentException if the request is not associated with this client object
+ */
+ public function createPresignedUrl(RequestInterface $request, $expires)
+ {
+ if ($request->getClient() !== $this) {
+ throw new InvalidArgumentException('The request object must be associated with the client. Use the '
+ . '$client->get(), $client->head(), $client->post(), $client->put(), etc. methods when passing in a '
+ . 'request object');
+ }
+
+ return $this->signature->createPresignedUrl($request, $this->credentials, $expires);
+ }
+
+ /**
+ * Returns the URL to an object identified by its bucket and key. If an expiration time is provided, the URL will
+ * be signed and set to expire at the provided time.
+ *
+ * Note: This method does not ensure that the generated URL is valid. For example, the bucket referenced may not
+ * exist, the key referenced may not exist, and the URL might include parameters that require it to be signed.
+ * If you need to use parameters that require a signed URL (e.g., ResponseCacheControl), then you must sign the
+ * URL either by providing an $expires argument or by signing the URL returned by this method in some other
+ * manner.
+ *
+ * @param string $bucket The name of the bucket where the object is located
+ * @param string $key The key of the object
+ * @param mixed $expires The time at which the URL should expire
+ * @param array $args Arguments to the GetObject command. Additionally you can specify a "Scheme" if you would
+ * like the URL to use a different scheme than what the client is configured to use
+ *
+ * @return string The URL to the object
+ */
+ public function getObjectUrl($bucket, $key, $expires = null, array $args = array())
+ {
+ $command = $this->getCommand('GetObject', $args + array('Bucket' => $bucket, 'Key' => $key));
+
+ if ($command->hasKey('Scheme')) {
+ $scheme = $command['Scheme'];
+ $request = $command->remove('Scheme')->prepare()->setScheme($scheme)->setPort(null);
+ } else {
+ $request = $command->prepare();
+ }
+
+ return $expires ? $this->createPresignedUrl($request, $expires) : $request->getUrl();
+ }
+
+ /**
+ * Helper used to clear the contents of a bucket. Use the {@see ClearBucket} object directly
+ * for more advanced options and control.
+ *
+ * @param string $bucket Name of the bucket to clear.
+ *
+ * @return int Returns the number of deleted keys
+ */
+ public function clearBucket($bucket)
+ {
+ $clear = new ClearBucket($this, $bucket);
+
+ return $clear->clear();
+ }
+
+ /**
+ * Determines whether or not a bucket exists by name
+ *
+ * @param string $bucket The name of the bucket
+ * @param bool $accept403 Set to true if 403s are acceptable
+ * @param array $options Additional options to add to the executed command
+ *
+ * @return bool
+ */
+ public function doesBucketExist($bucket, $accept403 = true, array $options = array())
+ {
+ return $this->checkExistenceWithCommand(
+ $this->getCommand('HeadBucket', array_merge($options, array(
+ 'Bucket' => $bucket
+ ))), $accept403
+ );
+ }
+
+ /**
+ * Determines whether or not an object exists by name
+ *
+ * @param string $bucket The name of the bucket
+ * @param string $key The key of the object
+ * @param array $options Additional options to add to the executed command
+ *
+ * @return bool
+ */
+ public function doesObjectExist($bucket, $key, array $options = array())
+ {
+ return $this->checkExistenceWithCommand(
+ $this->getCommand('HeadObject', array_merge($options, array(
+ 'Bucket' => $bucket,
+ 'Key' => $key
+ )))
+ );
+ }
+
+ /**
+ * Determines whether or not a bucket policy exists for a bucket
+ *
+ * @param string $bucket The name of the bucket
+ * @param array $options Additional options to add to the executed command
+ *
+ * @return bool
+ */
+ public function doesBucketPolicyExist($bucket, array $options = array())
+ {
+ return $this->checkExistenceWithCommand(
+ $this->getCommand('GetBucketPolicy', array_merge($options, array(
+ 'Bucket' => $bucket
+ )))
+ );
+ }
+
+ /**
+ * Raw URL encode a key and allow for '/' characters
+ *
+ * @param string $key Key to encode
+ *
+ * @return string Returns the encoded key
+ */
+ public static function encodeKey($key)
+ {
+ return str_replace('%2F', '/', rawurlencode($key));
+ }
+
+ /**
+ * Explode a prefixed key into an array of values
+ *
+ * @param string $key Key to explode
+ *
+ * @return array Returns the exploded
+ */
+ public static function explodeKey($key)
+ {
+ // Remove a leading slash if one is found
+ return explode('/', $key && $key[0] == '/' ? substr($key, 1) : $key);
+ }
+
+ /**
+ * Register the Amazon S3 stream wrapper and associates it with this client object
+ *
+ * @return $this
+ */
+ public function registerStreamWrapper()
+ {
+ StreamWrapper::register($this);
+
+ return $this;
+ }
+
+ /**
+ * Upload a file, stream, or string to a bucket. If the upload size exceeds the specified threshold, the upload
+ * will be performed using parallel multipart uploads.
+ *
+ * @param string $bucket Bucket to upload the object
+ * @param string $key Key of the object
+ * @param mixed $body Object data to upload. Can be a Guzzle\Http\EntityBodyInterface, stream resource, or
+ * string of data to upload.
+ * @param string $acl ACL to apply to the object
+ * @param array $options Custom options used when executing commands:
+ * - params: Custom parameters to use with the upload. The parameters must map to a PutObject
+ * or InitiateMultipartUpload operation parameters.
+ * - min_part_size: Minimum size to allow for each uploaded part when performing a multipart upload.
+ * - concurrency: Maximum number of concurrent multipart uploads.
+ * - before_upload: Callback to invoke before each multipart upload. The callback will receive a
+ * Guzzle\Common\Event object with context.
+ *
+ * @see Aws\S3\Model\MultipartUpload\UploadBuilder for more options and customization
+ * @return \Guzzle\Service\Resource\Model Returns the modeled result of the performed operation
+ */
+ public function upload($bucket, $key, $body, $acl = 'private', array $options = array())
+ {
+ $body = EntityBody::factory($body);
+ $options = Collection::fromConfig(array_change_key_case($options), array(
+ 'min_part_size' => AbstractMulti::MIN_PART_SIZE,
+ 'params' => array(),
+ 'concurrency' => $body->getWrapper() == 'plainfile' ? 3 : 1
+ ));
+
+ if ($body->getSize() < $options['min_part_size']) {
+ // Perform a simple PutObject operation
+ return $this->putObject(array(
+ 'Bucket' => $bucket,
+ 'Key' => $key,
+ 'Body' => $body,
+ 'ACL' => $acl
+ ) + $options['params']);
+ }
+
+ // Perform a multipart upload if the file is large enough
+ $transfer = UploadBuilder::newInstance()
+ ->setBucket($bucket)
+ ->setKey($key)
+ ->setMinPartSize($options['min_part_size'])
+ ->setConcurrency($options['concurrency'])
+ ->setClient($this)
+ ->setSource($body)
+ ->setTransferOptions($options->toArray())
+ ->addOptions($options['params'])
+ ->setOption('ACL', $acl)
+ ->build();
+
+ if ($options['before_upload']) {
+ $transfer->getEventDispatcher()->addListener(
+ AbstractTransfer::BEFORE_PART_UPLOAD,
+ $options['before_upload']
+ );
+ }
+
+ return $transfer->upload();
+ }
+
+ /**
+ * Recursively uploads all files in a given directory to a given bucket.
+ *
+ * @param string $directory Full path to a directory to upload
+ * @param string $bucket Name of the bucket
+ * @param string $keyPrefix Virtual directory key prefix to add to each upload
+ * @param array $options Associative array of upload options
+ * - params: Array of parameters to use with each PutObject operation performed during the transfer
+ * - base_dir: Base directory to remove from each object key
+ * - force: Set to true to upload every file, even if the file is already in Amazon S3 and has not changed
+ * - concurrency: Maximum number of parallel uploads (defaults to 10)
+ * - debug: Set to true or an fopen resource to enable debug mode to print information about each upload
+ * - multipart_upload_size: When the size of a file exceeds this value, the file will be uploaded using a
+ * multipart upload.
+ *
+ * @see Aws\S3\S3Sync\S3Sync for more options and customization
+ */
+ public function uploadDirectory($directory, $bucket, $keyPrefix = null, array $options = array())
+ {
+ $options = Collection::fromConfig(
+ $options,
+ array(
+ 'base_dir' => realpath($directory) ?: $directory
+ )
+ );
+
+ $builder = $options['builder'] ?: UploadSyncBuilder::getInstance();
+ $builder->uploadFromDirectory($directory)
+ ->setClient($this)
+ ->setBucket($bucket)
+ ->setKeyPrefix($keyPrefix)
+ ->setConcurrency($options['concurrency'] ?: 5)
+ ->setBaseDir($options['base_dir'])
+ ->force($options['force'])
+ ->setOperationParams($options['params'] ?: array())
+ ->enableDebugOutput($options['debug']);
+
+ if ($options->hasKey('multipart_upload_size')) {
+ $builder->setMultipartUploadSize($options['multipart_upload_size']);
+ }
+
+ $builder->build()->transfer();
+ }
+
+ /**
+ * Downloads a bucket to the local filesystem
+ *
+ * @param string $directory Directory to download to
+ * @param string $bucket Bucket to download from
+ * @param string $keyPrefix Only download objects that use this key prefix
+ * @param array $options Associative array of download options
+ * - params: Array of parameters to use with each GetObject operation performed during the transfer
+ * - base_dir: Base directory to remove from each object key when storing in the local filesystem
+ * - force: Set to true to download every file, even if the file is already on the local filesystem and has not
+ * changed
+ * - concurrency: Maximum number of parallel downloads (defaults to 10)
+ * - debug: Set to true or a fopen resource to enable debug mode to print information about each download
+ * - allow_resumable: Set to true to allow previously interrupted downloads to be resumed using a Range GET
+ */
+ public function downloadBucket($directory, $bucket, $keyPrefix = '', array $options = array())
+ {
+ $options = new Collection($options);
+ $builder = $options['builder'] ?: DownloadSyncBuilder::getInstance();
+ $builder->setDirectory($directory)
+ ->setClient($this)
+ ->setBucket($bucket)
+ ->setKeyPrefix($keyPrefix)
+ ->setConcurrency($options['concurrency'] ?: 10)
+ ->setBaseDir($options['base_dir'])
+ ->force($options['force'])
+ ->setOperationParams($options['params'] ?: array())
+ ->enableDebugOutput($options['debug']);
+
+ if ($options['allow_resumable']) {
+ $builder->allowResumableDownloads();
+ }
+
+ $builder->build()->transfer();
+ }
+
+ /**
+ * Deletes objects from Amazon S3 that match the result of a ListObjects operation. For example, this allows you
+ * to do things like delete all objects that match a specific key prefix.
+ *
+ * @param string $bucket Bucket that contains the object keys
+ * @param string $prefix Optionally delete only objects under this key prefix
+ * @param string $regex Delete only objects that match this regex
+ * @param array $options Options used when deleting the object:
+ * - before_delete: Callback to invoke before each delete. The callback will receive a
+ * Guzzle\Common\Event object with context.
+ *
+ * @see Aws\S3\S3Client::listObjects
+ * @see Aws\S3\Model\ClearBucket For more options or customization
+ * @return int Returns the number of deleted keys
+ * @throws RuntimeException if no prefix and no regex is given
+ */
+ public function deleteMatchingObjects($bucket, $prefix = '', $regex = '', array $options = array())
+ {
+ if (!$prefix && !$regex) {
+ throw new RuntimeException('A prefix or regex is required, or use S3Client::clearBucket().');
+ }
+
+ $clear = new ClearBucket($this, $bucket);
+ $iterator = $this->getIterator('ListObjects', array('Bucket' => $bucket, 'Prefix' => $prefix));
+
+ if ($regex) {
+ $iterator = new FilterIterator($iterator, function ($current) use ($regex) {
+ return preg_match($regex, $current['Key']);
+ });
+ }
+
+ $clear->setIterator($iterator);
+ if (isset($options['before_delete'])) {
+ $clear->getEventDispatcher()->addListener(ClearBucket::BEFORE_CLEAR, $options['before_delete']);
+ }
+
+ return $clear->clear();
+ }
+
+ /**
+ * Determines whether or not a resource exists using a command
+ *
+ * @param CommandInterface $command Command used to poll for the resource
+ * @param bool $accept403 Set to true if 403s are acceptable
+ *
+ * @return bool
+ * @throws S3Exception|\Exception if there is an unhandled exception
+ */
+ protected function checkExistenceWithCommand(CommandInterface $command, $accept403 = false)
+ {
+ try {
+ $command->execute();
+ $exists = true;
+ } catch (AccessDeniedException $e) {
+ $exists = (bool) $accept403;
+ } catch (S3Exception $e) {
+ $exists = false;
+ if ($e->getResponse()->getStatusCode() >= 500) {
+ // @codeCoverageIgnoreStart
+ throw $e;
+ // @codeCoverageIgnoreEnd
+ }
+ }
+
+ return $exists;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3Md5Listener.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3Md5Listener.php
new file mode 100644
index 0000000..7558c47
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3Md5Listener.php
@@ -0,0 +1,73 @@
+ 'onCommandAfterPrepare');
+ }
+
+ public function __construct(SignatureInterface $signature)
+ {
+ $this->signature = $signature;
+ }
+
+ public function onCommandAfterPrepare(Event $event)
+ {
+ $command = $event['command'];
+ $operation = $command->getOperation();
+
+ if ($operation->getData('contentMd5')) {
+ // Add the MD5 if it is required for all signers
+ $this->addMd5($command);
+ } elseif ($operation->hasParam('ContentMD5')) {
+ $value = $command['ContentMD5'];
+ // Add a computed MD5 if the parameter is set to true or if
+ // not using Signature V4 and the value is not set (null).
+ if ($value === true ||
+ ($value === null && !($this->signature instanceof SignatureV4))
+ ) {
+ $this->addMd5($command);
+ }
+ }
+ }
+
+ private function addMd5(CommandInterface $command)
+ {
+ $request = $command->getRequest();
+ $body = $request->getBody();
+ if ($body && $body->getSize() > 0) {
+ if (false !== ($md5 = $body->getContentMd5(true, true))) {
+ $request->setHeader('Content-MD5', $md5);
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3Signature.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3Signature.php
new file mode 100644
index 0000000..ef9a86b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3Signature.php
@@ -0,0 +1,266 @@
+signableQueryString);
+
+ // Add the security token header if one is being used by the credentials
+ if ($token = $credentials->getSecurityToken()) {
+ $request->setHeader('x-amz-security-token', $token);
+ }
+
+ $request->removeHeader('x-amz-date');
+ $request->setHeader('Date', gmdate(\DateTime::RFC2822));
+
+ $stringToSign = $this->createCanonicalizedString($request);
+ $request->getParams()->set('aws.string_to_sign', $stringToSign);
+
+ $request->setHeader(
+ 'Authorization',
+ 'AWS ' . $credentials->getAccessKeyId() . ':' . $this->signString($stringToSign, $credentials)
+ );
+ }
+
+ public function createPresignedUrl(
+ RequestInterface $request,
+ CredentialsInterface $credentials,
+ $expires
+ ) {
+ if ($expires instanceof \DateTime) {
+ $expires = $expires->getTimestamp();
+ } elseif (!is_numeric($expires)) {
+ $expires = strtotime($expires);
+ }
+
+ // Operate on a clone of the request, so the original is not altered
+ $request = clone $request;
+
+ // URL encoding already occurs in the URI template expansion. Undo that and encode using the same encoding as
+ // GET object, PUT object, etc.
+ $path = S3Client::encodeKey(rawurldecode($request->getPath()));
+ $request->setPath($path);
+
+ // Make sure to handle temporary credentials
+ if ($token = $credentials->getSecurityToken()) {
+ $request->setHeader('x-amz-security-token', $token);
+ $request->getQuery()->set('x-amz-security-token', $token);
+ }
+
+ // Set query params required for pre-signed URLs
+ $request->getQuery()
+ ->set('AWSAccessKeyId', $credentials->getAccessKeyId())
+ ->set('Expires', $expires)
+ ->set('Signature', $this->signString(
+ $this->createCanonicalizedString($request, $expires),
+ $credentials
+ ));
+
+ // Move X-Amz-* headers to the query string
+ foreach ($request->getHeaders() as $name => $header) {
+ $name = strtolower($name);
+ if (strpos($name, 'x-amz-') === 0) {
+ $request->getQuery()->set($name, (string) $header);
+ $request->removeHeader($name);
+ }
+ }
+
+ return $request->getUrl();
+ }
+
+ public function signString($string, CredentialsInterface $credentials)
+ {
+ return base64_encode(hash_hmac('sha1', $string, $credentials->getSecretKey(), true));
+ }
+
+ public function createCanonicalizedString(RequestInterface $request, $expires = null)
+ {
+ $buffer = $request->getMethod() . "\n";
+
+ // Add the interesting headers
+ foreach ($this->signableHeaders as $header) {
+ $buffer .= (string) $request->getHeader($header) . "\n";
+ }
+
+ // Choose dates from left to right based on what's set
+ $date = $expires ?: (string) $request->getHeader('date');
+
+ $buffer .= "{$date}\n"
+ . $this->createCanonicalizedAmzHeaders($request)
+ . $this->createCanonicalizedResource($request);
+
+ return $buffer;
+ }
+
+ /**
+ * Create a canonicalized AmzHeaders string for a signature.
+ *
+ * @param RequestInterface $request Request from which to gather headers
+ *
+ * @return string Returns canonicalized AMZ headers.
+ */
+ private function createCanonicalizedAmzHeaders(RequestInterface $request)
+ {
+ $headers = array();
+ foreach ($request->getHeaders() as $name => $header) {
+ $name = strtolower($name);
+ if (strpos($name, 'x-amz-') === 0) {
+ $value = trim((string) $header);
+ if ($value || $value === '0') {
+ $headers[$name] = $name . ':' . $value;
+ }
+ }
+ }
+
+ if (!$headers) {
+ return '';
+ }
+
+ ksort($headers);
+
+ return implode("\n", $headers) . "\n";
+ }
+
+ /**
+ * Create a canonicalized resource for a request
+ *
+ * @param RequestInterface $request Request for the resource
+ *
+ * @return string
+ */
+ private function createCanonicalizedResource(RequestInterface $request)
+ {
+ $buffer = $request->getParams()->get('s3.resource');
+ // When sending a raw HTTP request (e.g. $client->get())
+ if (null === $buffer) {
+ $bucket = $request->getParams()->get('bucket') ?: $this->parseBucketName($request);
+ // Use any specified bucket name, the parsed bucket name, or no bucket name when interacting with GetService
+ $buffer = $bucket ? "/{$bucket}" : '';
+ // Remove encoding from the path and use the S3 specific encoding
+ $path = S3Client::encodeKey(rawurldecode($request->getPath()));
+ // if the bucket was path style, then ensure that the bucket wasn't duplicated in the resource
+ $buffer .= preg_replace("#^/{$bucket}/{$bucket}#", "/{$bucket}", $path);
+ }
+
+ // Remove double slashes
+ $buffer = str_replace('//', '/', $buffer);
+
+ // Add sub resource parameters
+ $query = $request->getQuery();
+ $first = true;
+ foreach ($this->signableQueryString as $key) {
+ if ($query->hasKey($key)) {
+ $value = $query[$key];
+ $buffer .= $first ? '?' : '&';
+ $first = false;
+ $buffer .= $key;
+ // Don't add values for empty sub-resources
+ if ($value !== '' &&
+ $value !== false &&
+ $value !== null &&
+ $value !== QueryString::BLANK
+ ) {
+ $buffer .= "={$value}";
+ }
+ }
+ }
+
+ return $buffer;
+ }
+
+ /**
+ * Parse the bucket name from a request object
+ *
+ * @param RequestInterface $request Request to parse
+ *
+ * @return string
+ */
+ private function parseBucketName(RequestInterface $request)
+ {
+ $baseUrl = Url::factory($request->getClient()->getBaseUrl());
+ $baseHost = $baseUrl->getHost();
+ $host = $request->getHost();
+
+ if (strpos($host, $baseHost) === false) {
+ // Does not contain the base URL, so it's either a redirect, CNAME, or using a different region
+ $baseHost = '';
+ // For every known S3 host, check if that host is present on the request
+ $regions = $request->getClient()->getDescription()->getData('regions');
+ foreach ($regions as $region) {
+ if (strpos($host, $region['hostname']) !== false) {
+ // This host matches the request host. Tells use the region and endpoint-- we can derive the bucket
+ $baseHost = $region['hostname'];
+ break;
+ }
+ }
+ // If no matching base URL was found, then assume that this is a CNAME, and the CNAME is the bucket
+ if (!$baseHost) {
+ return $host;
+ }
+ }
+
+ // Remove the baseURL from the host of the request to attempt to determine the bucket name
+ return trim(str_replace($baseHost, '', $request->getHost()), ' .');
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3SignatureInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3SignatureInterface.php
new file mode 100644
index 0000000..0b7e940
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/S3SignatureInterface.php
@@ -0,0 +1,24 @@
+hasHeader('x-amz-content-sha256')) {
+ $request->setHeader(
+ 'x-amz-content-sha256',
+ $this->getPayload($request)
+ );
+ }
+
+ parent::signRequest($request, $credentials);
+ }
+
+ /**
+ * Override used to allow pre-signed URLs to be created for an
+ * in-determinate request payload.
+ */
+ protected function getPresignedPayload(RequestInterface $request)
+ {
+ return 'UNSIGNED-PAYLOAD';
+ }
+
+ /**
+ * Amazon S3 does not double-encode the path component in the canonical req
+ */
+ protected function createCanonicalizedPath(RequestInterface $request)
+ {
+ return '/' . ltrim($request->getPath(), '/');
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/SocketTimeoutChecker.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/SocketTimeoutChecker.php
new file mode 100644
index 0000000..ede2b96
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/SocketTimeoutChecker.php
@@ -0,0 +1,71 @@
+setNext($next);
+ }
+ }
+
+ /**
+ * {@inheridoc}
+ */
+ public function makesDecision()
+ {
+ return true;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getDelay(
+ $retries,
+ RequestInterface $request,
+ Response $response = null,
+ HttpException $e = null
+ ) {
+ if ($response
+ && $response->getStatusCode() == 400
+ && strpos($response->getBody(), self::ERR)
+ ) {
+ return true;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/SseCpkListener.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/SseCpkListener.php
new file mode 100644
index 0000000..c1a9260
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/SseCpkListener.php
@@ -0,0 +1,68 @@
+ 'onCommandBeforePrepare');
+ }
+
+ public function onCommandBeforePrepare(Event $event)
+ {
+ /** @var CommandInterface $command */
+ $command = $event['command'];
+
+ // Allows only HTTPS connections when using SSE-C
+ if ($command['SSECustomerKey'] ||
+ $command['CopySourceSSECustomerKey']
+ ) {
+ $this->validateScheme($command);
+ }
+
+ // Prepare the normal SSE-CPK headers
+ if ($command['SSECustomerKey']) {
+ $this->prepareSseParams($command);
+ }
+
+ // If it's a copy operation, prepare the SSE-CPK headers for the source.
+ if ($command['CopySourceSSECustomerKey']) {
+ $this->prepareSseParams($command, true);
+ }
+ }
+
+ private function validateScheme(CommandInterface $command)
+ {
+ if ($command->getClient()->getConfig('scheme') !== 'https') {
+ throw new RuntimeException('You must configure your S3 client to '
+ . 'use HTTPS in order to use the SSE-C features.');
+ }
+ }
+
+ private function prepareSseParams(
+ CommandInterface $command,
+ $isCopy = false
+ ) {
+ $prefix = $isCopy ? 'CopySource' : '';
+
+ // Base64 encode the provided key
+ $key = $command[$prefix . 'SSECustomerKey'];
+ $command[$prefix . 'SSECustomerKey'] = base64_encode($key);
+
+ // Base64 the provided MD5 or, generate an MD5 if not provided
+ if ($md5 = $command[$prefix . 'SSECustomerKeyMD5']) {
+ $command[$prefix . 'SSECustomerKeyMD5'] = base64_encode($md5);
+ } else {
+ $command[$prefix . 'SSECustomerKeyMD5'] = base64_encode(md5($key, true));
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/StreamWrapper.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/StreamWrapper.php
new file mode 100644
index 0000000..b191ef2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/StreamWrapper.php
@@ -0,0 +1,907 @@
+/" files with PHP streams, supporting "r", "w", "a", "x".
+ *
+ * # Supported stream related PHP functions:
+ * - fopen, fclose, fread, fwrite, fseek, ftell, feof, fflush
+ * - opendir, closedir, readdir, rewinddir
+ * - copy, rename, unlink
+ * - mkdir, rmdir, rmdir (recursive)
+ * - file_get_contents, file_put_contents
+ * - file_exists, filesize, is_file, is_dir
+ *
+ * # Opening "r" (read only) streams:
+ *
+ * Read only streams are truly streaming by default and will not allow you to seek. This is because data
+ * read from the stream is not kept in memory or on the local filesystem. You can force a "r" stream to be seekable
+ * by setting the "seekable" stream context option true. This will allow true streaming of data from Amazon S3, but
+ * will maintain a buffer of previously read bytes in a 'php://temp' stream to allow seeking to previously read bytes
+ * from the stream.
+ *
+ * You may pass any GetObject parameters as 's3' stream context options. These options will affect how the data is
+ * downloaded from Amazon S3.
+ *
+ * # Opening "w" and "x" (write only) streams:
+ *
+ * Because Amazon S3 requires a Content-Length header, write only streams will maintain a 'php://temp' stream to buffer
+ * data written to the stream until the stream is flushed (usually by closing the stream with fclose).
+ *
+ * You may pass any PutObject parameters as 's3' stream context options. These options will affect how the data is
+ * uploaded to Amazon S3.
+ *
+ * When opening an "x" stream, the file must exist on Amazon S3 for the stream to open successfully.
+ *
+ * # Opening "a" (write only append) streams:
+ *
+ * Similar to "w" streams, opening append streams requires that the data be buffered in a "php://temp" stream. Append
+ * streams will attempt to download the contents of an object in Amazon S3, seek to the end of the object, then allow
+ * you to append to the contents of the object. The data will then be uploaded using a PutObject operation when the
+ * stream is flushed (usually with fclose).
+ *
+ * You may pass any GetObject and/or PutObject parameters as 's3' stream context options. These options will affect how
+ * the data is downloaded and uploaded from Amazon S3.
+ *
+ * Stream context options:
+ *
+ * - "seekable": Set to true to create a seekable "r" (read only) stream by using a php://temp stream buffer
+ * - For "unlink" only: Any option that can be passed to the DeleteObject operation
+ */
+class StreamWrapper
+{
+ /**
+ * @var resource|null Stream context (this is set by PHP when a context is used)
+ */
+ public $context;
+
+ /**
+ * @var S3Client Client used to send requests
+ */
+ protected static $client;
+
+ /**
+ * @var string Mode the stream was opened with
+ */
+ protected $mode;
+
+ /**
+ * @var EntityBody Underlying stream resource
+ */
+ protected $body;
+
+ /**
+ * @var array Current parameters to use with the flush operation
+ */
+ protected $params;
+
+ /**
+ * @var ListObjectsIterator Iterator used with opendir() and subsequent readdir() calls
+ */
+ protected $objectIterator;
+
+ /**
+ * @var string The bucket that was opened when opendir() was called
+ */
+ protected $openedBucket;
+
+ /**
+ * @var string The prefix of the bucket that was opened with opendir()
+ */
+ protected $openedBucketPrefix;
+
+ /**
+ * @var array The next key to retrieve when using a directory iterator. Helps for fast directory traversal.
+ */
+ protected static $nextStat = array();
+
+ /**
+ * Register the 's3://' stream wrapper
+ *
+ * @param S3Client $client Client to use with the stream wrapper
+ */
+ public static function register(S3Client $client)
+ {
+ if (in_array('s3', stream_get_wrappers())) {
+ stream_wrapper_unregister('s3');
+ }
+
+ stream_wrapper_register('s3', get_called_class(), STREAM_IS_URL);
+ static::$client = $client;
+ }
+
+ /**
+ * Close the stream
+ */
+ public function stream_close()
+ {
+ $this->body = null;
+ }
+
+ /**
+ * @param string $path
+ * @param string $mode
+ * @param int $options
+ * @param string $opened_path
+ *
+ * @return bool
+ */
+ public function stream_open($path, $mode, $options, &$opened_path)
+ {
+ // We don't care about the binary flag
+ $this->mode = $mode = rtrim($mode, 'bt');
+ $this->params = $params = $this->getParams($path);
+ $errors = array();
+
+ if (!$params['Key']) {
+ $errors[] = 'Cannot open a bucket. You must specify a path in the form of s3://bucket/key';
+ }
+
+ if (strpos($mode, '+')) {
+ $errors[] = 'The Amazon S3 stream wrapper does not allow simultaneous reading and writing.';
+ }
+
+ if (!in_array($mode, array('r', 'w', 'a', 'x'))) {
+ $errors[] = "Mode not supported: {$mode}. Use one 'r', 'w', 'a', or 'x'.";
+ }
+
+ // When using mode "x" validate if the file exists before attempting to read
+ if ($mode == 'x' && static::$client->doesObjectExist($params['Bucket'], $params['Key'], $this->getOptions())) {
+ $errors[] = "{$path} already exists on Amazon S3";
+ }
+
+ if (!$errors) {
+ if ($mode == 'r') {
+ return $this->openReadStream($params, $errors);
+ } elseif ($mode == 'a') {
+ return $this->openAppendStream($params, $errors);
+ } else {
+ return $this->openWriteStream($params, $errors);
+ }
+ }
+
+ return $this->triggerError($errors);
+ }
+
+ /**
+ * @return bool
+ */
+ public function stream_eof()
+ {
+ return $this->body->feof();
+ }
+
+ /**
+ * @return bool
+ */
+ public function stream_flush()
+ {
+ if ($this->mode == 'r') {
+ return false;
+ }
+
+ $this->body->rewind();
+ $params = $this->params;
+ $params['Body'] = $this->body;
+
+ // Attempt to guess the ContentType of the upload based on the
+ // file extension of the key
+ if (!isset($params['ContentType']) &&
+ ($type = Mimetypes::getInstance()->fromFilename($params['Key']))
+ ) {
+ $params['ContentType'] = $type;
+ }
+
+ try {
+ static::$client->putObject($params);
+ return true;
+ } catch (\Exception $e) {
+ return $this->triggerError($e->getMessage());
+ }
+ }
+
+ /**
+ * Read data from the underlying stream
+ *
+ * @param int $count Amount of bytes to read
+ *
+ * @return string
+ */
+ public function stream_read($count)
+ {
+ return $this->body->read($count);
+ }
+
+ /**
+ * Seek to a specific byte in the stream
+ *
+ * @param int $offset Seek offset
+ * @param int $whence Whence (SEEK_SET, SEEK_CUR, SEEK_END)
+ *
+ * @return bool
+ */
+ public function stream_seek($offset, $whence = SEEK_SET)
+ {
+ return $this->body->seek($offset, $whence);
+ }
+
+ /**
+ * Get the current position of the stream
+ *
+ * @return int Returns the current position in the stream
+ */
+ public function stream_tell()
+ {
+ return $this->body->ftell();
+ }
+
+ /**
+ * Write data the to the stream
+ *
+ * @param string $data
+ *
+ * @return int Returns the number of bytes written to the stream
+ */
+ public function stream_write($data)
+ {
+ return $this->body->write($data);
+ }
+
+ /**
+ * Delete a specific object
+ *
+ * @param string $path
+ * @return bool
+ */
+ public function unlink($path)
+ {
+ try {
+ $this->clearStatInfo($path);
+ static::$client->deleteObject($this->getParams($path));
+ return true;
+ } catch (\Exception $e) {
+ return $this->triggerError($e->getMessage());
+ }
+ }
+
+ /**
+ * @return array
+ */
+ public function stream_stat()
+ {
+ $stat = fstat($this->body->getStream());
+ // Add the size of the underlying stream if it is known
+ if ($this->mode == 'r' && $this->body->getSize()) {
+ $stat[7] = $stat['size'] = $this->body->getSize();
+ }
+
+ return $stat;
+ }
+
+ /**
+ * Provides information for is_dir, is_file, filesize, etc. Works on buckets, keys, and prefixes
+ *
+ * @param string $path
+ * @param int $flags
+ *
+ * @return array Returns an array of stat data
+ * @link http://www.php.net/manual/en/streamwrapper.url-stat.php
+ */
+ public function url_stat($path, $flags)
+ {
+ // Check if this path is in the url_stat cache
+ if (isset(static::$nextStat[$path])) {
+ return static::$nextStat[$path];
+ }
+
+ $parts = $this->getParams($path);
+
+ if (!$parts['Key']) {
+ // Stat "directories": buckets, or "s3://"
+ if (!$parts['Bucket'] || static::$client->doesBucketExist($parts['Bucket'])) {
+ return $this->formatUrlStat($path);
+ } else {
+ return $this->triggerError("File or directory not found: {$path}", $flags);
+ }
+ }
+
+ try {
+ try {
+ $result = static::$client->headObject($parts)->toArray();
+ if (substr($parts['Key'], -1, 1) == '/' && $result['ContentLength'] == 0) {
+ // Return as if it is a bucket to account for console bucket objects (e.g., zero-byte object "foo/")
+ return $this->formatUrlStat($path);
+ } else {
+ // Attempt to stat and cache regular object
+ return $this->formatUrlStat($result);
+ }
+ } catch (NoSuchKeyException $e) {
+ // Maybe this isn't an actual key, but a prefix. Do a prefix listing of objects to determine.
+ $result = static::$client->listObjects(array(
+ 'Bucket' => $parts['Bucket'],
+ 'Prefix' => rtrim($parts['Key'], '/') . '/',
+ 'MaxKeys' => 1
+ ));
+ if (!$result['Contents'] && !$result['CommonPrefixes']) {
+ return $this->triggerError("File or directory not found: {$path}", $flags);
+ }
+ // This is a directory prefix
+ return $this->formatUrlStat($path);
+ }
+ } catch (\Exception $e) {
+ return $this->triggerError($e->getMessage(), $flags);
+ }
+ }
+
+ /**
+ * Support for mkdir().
+ *
+ * @param string $path Directory which should be created.
+ * @param int $mode Permissions. 700-range permissions map to ACL_PUBLIC. 600-range permissions map to
+ * ACL_AUTH_READ. All other permissions map to ACL_PRIVATE. Expects octal form.
+ * @param int $options A bitwise mask of values, such as STREAM_MKDIR_RECURSIVE.
+ *
+ * @return bool
+ * @link http://www.php.net/manual/en/streamwrapper.mkdir.php
+ */
+ public function mkdir($path, $mode, $options)
+ {
+ $params = $this->getParams($path);
+ if (!$params['Bucket']) {
+ return false;
+ }
+
+ if (!isset($params['ACL'])) {
+ $params['ACL'] = $this->determineAcl($mode);
+ }
+
+ return !isset($params['Key']) || $params['Key'] === '/'
+ ? $this->createBucket($path, $params)
+ : $this->createPseudoDirectory($path, $params);
+ }
+
+ /**
+ * Remove a bucket from Amazon S3
+ *
+ * @param string $path the directory path
+ * @param int $options A bitwise mask of values
+ *
+ * @return bool true if directory was successfully removed
+ * @link http://www.php.net/manual/en/streamwrapper.rmdir.php
+ */
+ public function rmdir($path, $options)
+ {
+ $params = $this->getParams($path);
+ if (!$params['Bucket']) {
+ return $this->triggerError('You cannot delete s3://. Please specify a bucket.');
+ }
+
+ try {
+
+ if (!$params['Key']) {
+ static::$client->deleteBucket(array('Bucket' => $params['Bucket']));
+ $this->clearStatInfo($path);
+ return true;
+ }
+
+ // Use a key that adds a trailing slash if needed.
+ $prefix = rtrim($params['Key'], '/') . '/';
+
+ $result = static::$client->listObjects(array(
+ 'Bucket' => $params['Bucket'],
+ 'Prefix' => $prefix,
+ 'MaxKeys' => 1
+ ));
+
+ // Check if the bucket contains keys other than the placeholder
+ if ($result['Contents']) {
+ foreach ($result['Contents'] as $key) {
+ if ($key['Key'] == $prefix) {
+ continue;
+ }
+ return $this->triggerError('Psuedo folder is not empty');
+ }
+ return $this->unlink(rtrim($path, '/') . '/');
+ }
+
+ return $result['CommonPrefixes']
+ ? $this->triggerError('Pseudo folder contains nested folders')
+ : true;
+
+ } catch (\Exception $e) {
+ return $this->triggerError($e->getMessage());
+ }
+ }
+
+ /**
+ * Support for opendir().
+ *
+ * The opendir() method of the Amazon S3 stream wrapper supports a stream
+ * context option of "listFilter". listFilter must be a callable that
+ * accepts an associative array of object data and returns true if the
+ * object should be yielded when iterating the keys in a bucket.
+ *
+ * @param string $path The path to the directory (e.g. "s3://dir[]")
+ * @param string $options Whether or not to enforce safe_mode (0x04). Unused.
+ *
+ * @return bool true on success
+ * @see http://www.php.net/manual/en/function.opendir.php
+ */
+ public function dir_opendir($path, $options)
+ {
+ // Reset the cache
+ $this->clearStatInfo();
+ $params = $this->getParams($path);
+ $delimiter = $this->getOption('delimiter');
+ $filterFn = $this->getOption('listFilter');
+
+ if ($delimiter === null) {
+ $delimiter = '/';
+ }
+
+ if ($params['Key']) {
+ $params['Key'] = rtrim($params['Key'], $delimiter) . $delimiter;
+ }
+
+ $this->openedBucket = $params['Bucket'];
+ $this->openedBucketPrefix = $params['Key'];
+ $operationParams = array('Bucket' => $params['Bucket'], 'Prefix' => $params['Key']);
+
+ if ($delimiter) {
+ $operationParams['Delimiter'] = $delimiter;
+ }
+
+ $objectIterator = static::$client->getIterator('ListObjects', $operationParams, array(
+ 'return_prefixes' => true,
+ 'sort_results' => true
+ ));
+
+ // Filter our "/" keys added by the console as directories, and ensure
+ // that if a filter function is provided that it passes the filter.
+ $this->objectIterator = new FilterIterator(
+ $objectIterator,
+ function ($key) use ($filterFn) {
+ // Each yielded results can contain a "Key" or "Prefix"
+ return (!$filterFn || call_user_func($filterFn, $key)) &&
+ (!isset($key['Key']) || substr($key['Key'], -1, 1) !== '/');
+ }
+ );
+
+ $this->objectIterator->next();
+
+ return true;
+ }
+
+ /**
+ * Close the directory listing handles
+ *
+ * @return bool true on success
+ */
+ public function dir_closedir()
+ {
+ $this->objectIterator = null;
+
+ return true;
+ }
+
+ /**
+ * This method is called in response to rewinddir()
+ *
+ * @return boolean true on success
+ */
+ public function dir_rewinddir()
+ {
+ $this->clearStatInfo();
+ $this->objectIterator->rewind();
+
+ return true;
+ }
+
+ /**
+ * This method is called in response to readdir()
+ *
+ * @return string Should return a string representing the next filename, or false if there is no next file.
+ *
+ * @link http://www.php.net/manual/en/function.readdir.php
+ */
+ public function dir_readdir()
+ {
+ // Skip empty result keys
+ if (!$this->objectIterator->valid()) {
+ return false;
+ }
+
+ $current = $this->objectIterator->current();
+ if (isset($current['Prefix'])) {
+ // Include "directories". Be sure to strip a trailing "/"
+ // on prefixes.
+ $prefix = rtrim($current['Prefix'], '/');
+ $result = str_replace($this->openedBucketPrefix, '', $prefix);
+ $key = "s3://{$this->openedBucket}/{$prefix}";
+ $stat = $this->formatUrlStat($prefix);
+ } else {
+ // Remove the prefix from the result to emulate other
+ // stream wrappers.
+ $result = str_replace($this->openedBucketPrefix, '', $current['Key']);
+ $key = "s3://{$this->openedBucket}/{$current['Key']}";
+ $stat = $this->formatUrlStat($current);
+ }
+
+ // Cache the object data for quick url_stat lookups used with
+ // RecursiveDirectoryIterator.
+ static::$nextStat = array($key => $stat);
+ $this->objectIterator->next();
+
+ return $result;
+ }
+
+ /**
+ * Called in response to rename() to rename a file or directory. Currently only supports renaming objects.
+ *
+ * @param string $path_from the path to the file to rename
+ * @param string $path_to the new path to the file
+ *
+ * @return bool true if file was successfully renamed
+ * @link http://www.php.net/manual/en/function.rename.php
+ */
+ public function rename($path_from, $path_to)
+ {
+ $partsFrom = $this->getParams($path_from);
+ $partsTo = $this->getParams($path_to);
+ $this->clearStatInfo($path_from);
+ $this->clearStatInfo($path_to);
+
+ if (!$partsFrom['Key'] || !$partsTo['Key']) {
+ return $this->triggerError('The Amazon S3 stream wrapper only supports copying objects');
+ }
+
+ try {
+ // Copy the object and allow overriding default parameters if desired, but by default copy metadata
+ static::$client->copyObject($this->getOptions() + array(
+ 'Bucket' => $partsTo['Bucket'],
+ 'Key' => $partsTo['Key'],
+ 'CopySource' => '/' . $partsFrom['Bucket'] . '/' . rawurlencode($partsFrom['Key']),
+ 'MetadataDirective' => 'COPY'
+ ));
+ // Delete the original object
+ static::$client->deleteObject(array(
+ 'Bucket' => $partsFrom['Bucket'],
+ 'Key' => $partsFrom['Key']
+ ) + $this->getOptions());
+ } catch (\Exception $e) {
+ return $this->triggerError($e->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Cast the stream to return the underlying file resource
+ *
+ * @param int $cast_as STREAM_CAST_FOR_SELECT or STREAM_CAST_AS_STREAM
+ *
+ * @return resource
+ */
+ public function stream_cast($cast_as)
+ {
+ return $this->body->getStream();
+ }
+
+ /**
+ * Get the stream context options available to the current stream
+ *
+ * @return array
+ */
+ protected function getOptions()
+ {
+ $context = $this->context ?: stream_context_get_default();
+ $options = stream_context_get_options($context);
+
+ return isset($options['s3']) ? $options['s3'] : array();
+ }
+
+ /**
+ * Get a specific stream context option
+ *
+ * @param string $name Name of the option to retrieve
+ *
+ * @return mixed|null
+ */
+ protected function getOption($name)
+ {
+ $options = $this->getOptions();
+
+ return isset($options[$name]) ? $options[$name] : null;
+ }
+
+ /**
+ * Get the bucket and key from the passed path (e.g. s3://bucket/key)
+ *
+ * @param string $path Path passed to the stream wrapper
+ *
+ * @return array Hash of 'Bucket', 'Key', and custom params
+ */
+ protected function getParams($path)
+ {
+ $parts = explode('/', substr($path, 5), 2);
+
+ $params = $this->getOptions();
+ unset($params['seekable']);
+
+ return array(
+ 'Bucket' => $parts[0],
+ 'Key' => isset($parts[1]) ? $parts[1] : null
+ ) + $params;
+ }
+
+ /**
+ * Serialize and sign a command, returning a request object
+ *
+ * @param CommandInterface $command Command to sign
+ *
+ * @return RequestInterface
+ */
+ protected function getSignedRequest($command)
+ {
+ $request = $command->prepare();
+ $request->dispatch('request.before_send', array('request' => $request));
+
+ return $request;
+ }
+
+ /**
+ * Initialize the stream wrapper for a read only stream
+ *
+ * @param array $params Operation parameters
+ * @param array $errors Any encountered errors to append to
+ *
+ * @return bool
+ */
+ protected function openReadStream(array $params, array &$errors)
+ {
+ // Create the command and serialize the request
+ $request = $this->getSignedRequest(static::$client->getCommand('GetObject', $params));
+ // Create a stream that uses the EntityBody object
+ $factory = $this->getOption('stream_factory') ?: new PhpStreamRequestFactory();
+ $this->body = $factory->fromRequest($request, array(), array('stream_class' => 'Guzzle\Http\EntityBody'));
+
+ // Headers are placed in the "wrapper_data" array. The array of headers
+ // is simply an array of header lines of which the first line is the
+ // status line of the HTTP response.
+ $headers = $this->body->getMetaData('wrapper_data');
+
+ if ($headers && isset($headers[0])) {
+ $statusParts = explode(' ', $headers[0]);
+ $status = $statusParts[1];
+ if ($status != 200) {
+ return $this->triggerError('Cannot open file: ' . $this->body);
+ }
+ }
+
+ // Wrap the body in a caching entity body if seeking is allowed
+ if ($this->getOption('seekable')) {
+ $this->body = new CachingEntityBody($this->body);
+ }
+
+ return true;
+ }
+
+ /**
+ * Initialize the stream wrapper for a write only stream
+ *
+ * @param array $params Operation parameters
+ * @param array $errors Any encountered errors to append to
+ *
+ * @return bool
+ */
+ protected function openWriteStream(array $params, array &$errors)
+ {
+ $this->body = new EntityBody(fopen('php://temp', 'r+'));
+
+ return true;
+ }
+
+ /**
+ * Initialize the stream wrapper for an append stream
+ *
+ * @param array $params Operation parameters
+ * @param array $errors Any encountered errors to append to
+ *
+ * @return bool
+ */
+ protected function openAppendStream(array $params, array &$errors)
+ {
+ try {
+ // Get the body of the object
+ $this->body = static::$client->getObject($params)->get('Body');
+ $this->body->seek(0, SEEK_END);
+ } catch (S3Exception $e) {
+ // The object does not exist, so use a simple write stream
+ $this->openWriteStream($params, $errors);
+ }
+
+ return true;
+ }
+
+ /**
+ * Trigger one or more errors
+ *
+ * @param string|array $errors Errors to trigger
+ * @param mixed $flags If set to STREAM_URL_STAT_QUIET, then no error or exception occurs
+ *
+ * @return bool Returns false
+ * @throws RuntimeException if throw_errors is true
+ */
+ protected function triggerError($errors, $flags = null)
+ {
+ if ($flags & STREAM_URL_STAT_QUIET) {
+ // This is triggered with things like file_exists()
+
+ if ($flags & STREAM_URL_STAT_LINK) {
+ // This is triggered for things like is_link()
+ return $this->formatUrlStat(false);
+ }
+ return false;
+ }
+
+ // This is triggered when doing things like lstat() or stat()
+ trigger_error(implode("\n", (array) $errors), E_USER_WARNING);
+
+ return false;
+ }
+
+ /**
+ * Prepare a url_stat result array
+ *
+ * @param string|array $result Data to add
+ *
+ * @return array Returns the modified url_stat result
+ */
+ protected function formatUrlStat($result = null)
+ {
+ static $statTemplate = array(
+ 0 => 0, 'dev' => 0,
+ 1 => 0, 'ino' => 0,
+ 2 => 0, 'mode' => 0,
+ 3 => 0, 'nlink' => 0,
+ 4 => 0, 'uid' => 0,
+ 5 => 0, 'gid' => 0,
+ 6 => -1, 'rdev' => -1,
+ 7 => 0, 'size' => 0,
+ 8 => 0, 'atime' => 0,
+ 9 => 0, 'mtime' => 0,
+ 10 => 0, 'ctime' => 0,
+ 11 => -1, 'blksize' => -1,
+ 12 => -1, 'blocks' => -1,
+ );
+
+ $stat = $statTemplate;
+ $type = gettype($result);
+
+ // Determine what type of data is being cached
+ if ($type == 'NULL' || $type == 'string') {
+ // Directory with 0777 access - see "man 2 stat".
+ $stat['mode'] = $stat[2] = 0040777;
+ } elseif ($type == 'array' && isset($result['LastModified'])) {
+ // ListObjects or HeadObject result
+ $stat['mtime'] = $stat[9] = $stat['ctime'] = $stat[10] = strtotime($result['LastModified']);
+ $stat['size'] = $stat[7] = (isset($result['ContentLength']) ? $result['ContentLength'] : $result['Size']);
+ // Regular file with 0777 access - see "man 2 stat".
+ $stat['mode'] = $stat[2] = 0100777;
+ }
+
+ return $stat;
+ }
+
+ /**
+ * Clear the next stat result from the cache
+ *
+ * @param string $path If a path is specific, clearstatcache() will be called
+ */
+ protected function clearStatInfo($path = null)
+ {
+ static::$nextStat = array();
+ if ($path) {
+ clearstatcache(true, $path);
+ }
+ }
+
+ /**
+ * Creates a bucket for the given parameters.
+ *
+ * @param string $path Stream wrapper path
+ * @param array $params A result of StreamWrapper::getParams()
+ *
+ * @return bool Returns true on success or false on failure
+ */
+ private function createBucket($path, array $params)
+ {
+ if (static::$client->doesBucketExist($params['Bucket'])) {
+ return $this->triggerError("Directory already exists: {$path}");
+ }
+
+ try {
+ static::$client->createBucket($params);
+ $this->clearStatInfo($path);
+ return true;
+ } catch (\Exception $e) {
+ return $this->triggerError($e->getMessage());
+ }
+ }
+
+ /**
+ * Creates a pseudo-folder by creating an empty "/" suffixed key
+ *
+ * @param string $path Stream wrapper path
+ * @param array $params A result of StreamWrapper::getParams()
+ *
+ * @return bool
+ */
+ private function createPseudoDirectory($path, array $params)
+ {
+ // Ensure the path ends in "/" and the body is empty.
+ $params['Key'] = rtrim($params['Key'], '/') . '/';
+ $params['Body'] = '';
+
+ // Fail if this pseudo directory key already exists
+ if (static::$client->doesObjectExist($params['Bucket'], $params['Key'])) {
+ return $this->triggerError("Directory already exists: {$path}");
+ }
+
+ try {
+ static::$client->putObject($params);
+ $this->clearStatInfo($path);
+ return true;
+ } catch (\Exception $e) {
+ return $this->triggerError($e->getMessage());
+ }
+ }
+
+ /**
+ * Determine the most appropriate ACL based on a file mode.
+ *
+ * @param int $mode File mode
+ *
+ * @return string
+ */
+ private function determineAcl($mode)
+ {
+ $mode = decoct($mode);
+
+ if ($mode >= 700 && $mode <= 799) {
+ return 'public-read';
+ }
+
+ if ($mode >= 600 && $mode <= 699) {
+ return 'authenticated-read';
+ }
+
+ return 'private';
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/AbstractSync.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/AbstractSync.php
new file mode 100644
index 0000000..ac5bbbe
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/AbstractSync.php
@@ -0,0 +1,127 @@
+options = Collection::fromConfig(
+ $options,
+ array('concurrency' => 10),
+ array('client', 'bucket', 'iterator', 'source_converter')
+ );
+ $this->init();
+ }
+
+ public static function getAllEvents()
+ {
+ return array(self::BEFORE_TRANSFER, self::AFTER_TRANSFER);
+ }
+
+ /**
+ * Begin transferring files
+ */
+ public function transfer()
+ {
+ // Pull out chunks of uploads to upload in parallel
+ $iterator = new ChunkedIterator($this->options['iterator'], $this->options['concurrency']);
+ foreach ($iterator as $files) {
+ $this->transferFiles($files);
+ }
+ }
+
+ /**
+ * Create a command or special transfer action for the
+ *
+ * @param \SplFileInfo $file File used to build the transfer
+ *
+ * @return CommandInterface|callable
+ */
+ abstract protected function createTransferAction(\SplFileInfo $file);
+
+ /**
+ * Hook to initialize subclasses
+ * @codeCoverageIgnore
+ */
+ protected function init() {}
+
+ /**
+ * Process and transfer a group of files
+ *
+ * @param array $files Files to transfer
+ */
+ protected function transferFiles(array $files)
+ {
+ // Create the base event data object
+ $event = array('sync' => $this, 'client' => $this->options['client']);
+
+ $commands = array();
+ foreach ($files as $file) {
+ if ($action = $this->createTransferAction($file)) {
+ $event = array('command' => $action, 'file' => $file) + $event;
+ $this->dispatch(self::BEFORE_TRANSFER, $event);
+ if ($action instanceof CommandInterface) {
+ $commands[] = $action;
+ } elseif (is_callable($action)) {
+ $action();
+ $this->dispatch(self::AFTER_TRANSFER, $event);
+ }
+ }
+ }
+
+ $this->transferCommands($commands);
+ }
+
+ /**
+ * Transfer an array of commands in parallel
+ *
+ * @param array $commands Commands to transfer
+ */
+ protected function transferCommands(array $commands)
+ {
+ if ($commands) {
+ $this->options['client']->execute($commands);
+ // Notify listeners that each command finished
+ $event = array('sync' => $this, 'client' => $this->options['client']);
+ foreach ($commands as $command) {
+ $event['command'] = $command;
+ $this->dispatch(self::AFTER_TRANSFER, $event);
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/AbstractSyncBuilder.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/AbstractSyncBuilder.php
new file mode 100644
index 0000000..1308c3d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/AbstractSyncBuilder.php
@@ -0,0 +1,434 @@
+bucket = $bucket;
+
+ return $this;
+ }
+
+ /**
+ * Set the Amazon S3 client object that will send requests
+ *
+ * @param S3Client $client Amazon S3 client
+ *
+ * @return $this
+ */
+ public function setClient(S3Client $client)
+ {
+ $this->client = $client;
+
+ return $this;
+ }
+
+ /**
+ * Set a custom iterator that returns \SplFileInfo objects for the source data
+ *
+ * @param \Iterator $iterator
+ *
+ * @return $this
+ */
+ public function setSourceIterator(\Iterator $iterator)
+ {
+ $this->sourceIterator = $iterator;
+
+ return $this;
+ }
+
+ /**
+ * Set a custom object key provider instead of building one internally
+ *
+ * @param FileNameConverterInterface $converter Filename to object key provider
+ *
+ * @return $this
+ */
+ public function setSourceFilenameConverter(FilenameConverterInterface $converter)
+ {
+ $this->sourceConverter = $converter;
+
+ return $this;
+ }
+
+ /**
+ * Set a custom object key provider instead of building one internally
+ *
+ * @param FileNameConverterInterface $converter Filename to object key provider
+ *
+ * @return $this
+ */
+ public function setTargetFilenameConverter(FilenameConverterInterface $converter)
+ {
+ $this->targetConverter = $converter;
+
+ return $this;
+ }
+
+ /**
+ * Set the base directory of the files being transferred. The base directory is removed from each file path before
+ * converting the file path to an object key or vice versa.
+ *
+ * @param string $baseDir Base directory, which will be deleted from each uploaded object key
+ *
+ * @return $this
+ */
+ public function setBaseDir($baseDir)
+ {
+ $this->baseDir = $baseDir;
+
+ return $this;
+ }
+
+ /**
+ * Specify a prefix to prepend to each Amazon S3 object key or the prefix where object are stored in a bucket
+ *
+ * Can be used to upload files to a pseudo sub-folder key or only download files from a pseudo sub-folder
+ *
+ * @param string $keyPrefix Prefix for each uploaded key
+ *
+ * @return $this
+ */
+ public function setKeyPrefix($keyPrefix)
+ {
+ // Removing leading slash
+ $this->keyPrefix = ltrim($keyPrefix, '/');
+
+ return $this;
+ }
+
+ /**
+ * Specify the delimiter used for the targeted filesystem (default delimiter is "/")
+ *
+ * @param string $delimiter Delimiter to use to separate paths
+ *
+ * @return $this
+ */
+ public function setDelimiter($delimiter)
+ {
+ $this->delimiter = $delimiter;
+
+ return $this;
+ }
+
+ /**
+ * Specify an array of operation parameters to apply to each operation executed by the sync object
+ *
+ * @param array $params Associative array of PutObject (upload) GetObject (download) parameters
+ *
+ * @return $this
+ */
+ public function setOperationParams(array $params)
+ {
+ $this->params = $params;
+
+ return $this;
+ }
+
+ /**
+ * Set the number of files that can be transferred concurrently
+ *
+ * @param int $concurrency Number of concurrent transfers
+ *
+ * @return $this
+ */
+ public function setConcurrency($concurrency)
+ {
+ $this->concurrency = $concurrency;
+
+ return $this;
+ }
+
+ /**
+ * Set to true to force transfers even if a file already exists and has not changed
+ *
+ * @param bool $force Set to true to force transfers without checking if it has changed
+ *
+ * @return $this
+ */
+ public function force($force = false)
+ {
+ $this->forcing = (bool) $force;
+
+ return $this;
+ }
+
+ /**
+ * Enable debug mode
+ *
+ * @param bool|resource $enabledOrResource Set to true or false to enable or disable debug output. Pass an opened
+ * fopen resource to write to instead of writing to standard out.
+ * @return $this
+ */
+ public function enableDebugOutput($enabledOrResource = true)
+ {
+ $this->debug = $enabledOrResource;
+
+ return $this;
+ }
+
+ /**
+ * Add a filename filter that uses a regular expression to filter out files that you do not wish to transfer.
+ *
+ * @param string $search Regular expression search (in preg_match format). Any filename that matches this regex
+ * will not be transferred.
+ * @return $this
+ */
+ public function addRegexFilter($search)
+ {
+ $this->assertFileIteratorSet();
+ $this->sourceIterator = new FilterIterator($this->sourceIterator, function ($i) use ($search) {
+ return !preg_match($search, (string) $i);
+ });
+ $this->sourceIterator->rewind();
+
+ return $this;
+ }
+
+ /**
+ * Builds a UploadSync or DownloadSync object
+ *
+ * @return AbstractSync
+ */
+ public function build()
+ {
+ $this->validateRequirements();
+ $this->sourceConverter = $this->sourceConverter ?: $this->getDefaultSourceConverter();
+ $this->targetConverter = $this->targetConverter ?: $this->getDefaultTargetConverter();
+
+ // Only wrap the source iterator in a changed files iterator if we are not forcing the transfers
+ if (!$this->forcing) {
+ $this->sourceIterator->rewind();
+ $this->sourceIterator = new ChangedFilesIterator(
+ new \NoRewindIterator($this->sourceIterator),
+ $this->getTargetIterator(),
+ $this->sourceConverter,
+ $this->targetConverter
+ );
+ $this->sourceIterator->rewind();
+ }
+
+ $sync = $this->specificBuild();
+
+ if ($this->params) {
+ $this->addCustomParamListener($sync);
+ }
+
+ if ($this->debug) {
+ $this->addDebugListener($sync, is_bool($this->debug) ? STDOUT : $this->debug);
+ }
+
+ return $sync;
+ }
+
+ /**
+ * Hook to implement in subclasses
+ *
+ * @return AbstractSync
+ */
+ abstract protected function specificBuild();
+
+ /**
+ * @return \Iterator
+ */
+ abstract protected function getTargetIterator();
+
+ /**
+ * @return FilenameConverterInterface
+ */
+ abstract protected function getDefaultSourceConverter();
+
+ /**
+ * @return FilenameConverterInterface
+ */
+ abstract protected function getDefaultTargetConverter();
+
+ /**
+ * Add a listener to the sync object to output debug information while transferring
+ *
+ * @param AbstractSync $sync Sync object to listen to
+ * @param resource $resource Where to write debug messages
+ */
+ abstract protected function addDebugListener(AbstractSync $sync, $resource);
+
+ /**
+ * Validate that the builder has the minimal requirements
+ *
+ * @throws RuntimeException if the builder is not configured completely
+ */
+ protected function validateRequirements()
+ {
+ if (!$this->client) {
+ throw new RuntimeException('No client was provided');
+ }
+ if (!$this->bucket) {
+ throw new RuntimeException('No bucket was provided');
+ }
+ $this->assertFileIteratorSet();
+ }
+
+ /**
+ * Ensure that the base file iterator has been provided
+ *
+ * @throws RuntimeException
+ */
+ protected function assertFileIteratorSet()
+ {
+ // Interesting... Need to use isset because: Object of class GlobIterator could not be converted to boolean
+ if (!isset($this->sourceIterator)) {
+ throw new RuntimeException('A source file iterator must be specified');
+ }
+ }
+
+ /**
+ * Wraps a generated iterator in a filter iterator that removes directories
+ *
+ * @param \Iterator $iterator Iterator to wrap
+ *
+ * @return \Iterator
+ * @throws UnexpectedValueException
+ */
+ protected function filterIterator(\Iterator $iterator)
+ {
+ $f = new FilterIterator($iterator, function ($i) {
+ if (!$i instanceof \SplFileInfo) {
+ throw new UnexpectedValueException('All iterators for UploadSync must return SplFileInfo objects');
+ }
+ return $i->isFile();
+ });
+
+ $f->rewind();
+
+ return $f;
+ }
+
+ /**
+ * Add the custom param listener to a transfer object
+ *
+ * @param HasDispatcherInterface $sync
+ */
+ protected function addCustomParamListener(HasDispatcherInterface $sync)
+ {
+ $params = $this->params;
+ $sync->getEventDispatcher()->addListener(
+ UploadSync::BEFORE_TRANSFER,
+ function (Event $e) use ($params) {
+ if ($e['command'] instanceof CommandInterface) {
+ $e['command']->overwriteWith($params);
+ }
+ }
+ );
+ }
+
+ /**
+ * Create an Amazon S3 file iterator based on the given builder settings
+ *
+ * @return OpendirIterator
+ */
+ protected function createS3Iterator()
+ {
+ // Ensure that the stream wrapper is registered
+ $this->client->registerStreamWrapper();
+
+ // Calculate the opendir() bucket and optional key prefix location
+ $dir = "s3://{$this->bucket}";
+ if ($this->keyPrefix) {
+ $dir .= '/' . ltrim($this->keyPrefix, '/ ');
+ }
+
+ // Use opendir so that we can pass stream context to the iterator
+ $dh = opendir($dir, stream_context_create(array(
+ 's3' => array(
+ 'delimiter' => '',
+ 'listFilter' => function ($obj) {
+ // Ensure that we do not try to download a glacier object.
+ return !isset($obj['StorageClass']) ||
+ $obj['StorageClass'] != 'GLACIER';
+ }
+ )
+ )));
+
+ // Add the trailing slash for the OpendirIterator concatenation
+ if (!$this->keyPrefix) {
+ $dir .= '/';
+ }
+
+ return $this->filterIterator(new \NoRewindIterator(new OpendirIterator($dh, $dir)));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/ChangedFilesIterator.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/ChangedFilesIterator.php
new file mode 100644
index 0000000..dc3e07c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/ChangedFilesIterator.php
@@ -0,0 +1,130 @@
+targetIterator = $targetIterator;
+ $this->sourceConverter = $sourceConverter;
+ $this->targetConverter = $targetConverter;
+ parent::__construct($sourceIterator);
+ }
+
+ public function accept()
+ {
+ $current = $this->current();
+ $key = $this->sourceConverter->convert($this->normalize($current));
+
+ if (!($data = $this->getTargetData($key))) {
+ return true;
+ }
+
+ // Ensure the Content-Length matches and it hasn't been modified since the mtime
+ return $current->getSize() != $data[0] || $current->getMTime() > $data[1];
+ }
+
+ /**
+ * Returns an array of the files from the target iterator that were not found in the source iterator
+ *
+ * @return array
+ */
+ public function getUnmatched()
+ {
+ return array_keys($this->cache);
+ }
+
+ /**
+ * Get key information from the target iterator for a particular filename
+ *
+ * @param string $key Target iterator filename
+ *
+ * @return array|bool Returns an array of data, or false if the key is not in the iterator
+ */
+ protected function getTargetData($key)
+ {
+ $key = $this->cleanKey($key);
+
+ if (isset($this->cache[$key])) {
+ $result = $this->cache[$key];
+ unset($this->cache[$key]);
+ return $result;
+ }
+
+ $it = $this->targetIterator;
+
+ while ($it->valid()) {
+ $value = $it->current();
+ $data = array($value->getSize(), $value->getMTime());
+ $filename = $this->targetConverter->convert($this->normalize($value));
+ $filename = $this->cleanKey($filename);
+
+ if ($filename == $key) {
+ return $data;
+ }
+
+ $this->cache[$filename] = $data;
+ $it->next();
+ }
+
+ return false;
+ }
+
+ private function normalize($current)
+ {
+ $asString = (string) $current;
+
+ return strpos($asString, 's3://') === 0
+ ? $asString
+ : $current->getRealPath();
+ }
+
+ private function cleanKey($key)
+ {
+ return ltrim($key, '/');
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/DownloadSync.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/DownloadSync.php
new file mode 100644
index 0000000..560ccdf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/DownloadSync.php
@@ -0,0 +1,95 @@
+getPathname();
+ list($bucket, $key) = explode('/', substr($sourceFilename, 5), 2);
+ $filename = $this->options['source_converter']->convert($sourceFilename);
+ $this->createDirectory($filename);
+
+ // Some S3 buckets contains nested files under the same name as a directory
+ if (is_dir($filename)) {
+ return false;
+ }
+
+ // Allow a previously interrupted download to resume
+ if (file_exists($filename) && $this->options['resumable']) {
+ return new ResumableDownload($this->options['client'], $bucket, $key, $filename);
+ }
+
+ return $this->options['client']->getCommand('GetObject', array(
+ 'Bucket' => $bucket,
+ 'Key' => $key,
+ 'SaveAs' => $filename
+ ));
+ }
+
+ /**
+ * @codeCoverageIgnore
+ */
+ protected function createDirectory($filename)
+ {
+ $directory = dirname($filename);
+ // Some S3 clients create empty files to denote directories. Remove these so that we can create the directory.
+ if (is_file($directory) && filesize($directory) == 0) {
+ unlink($directory);
+ }
+ // Create the directory if it does not exist
+ if (!is_dir($directory) && !mkdir($directory, 0777, true)) {
+ $errors = error_get_last();
+ throw new RuntimeException('Could not create directory: ' . $directory . ' - ' . $errors['message']);
+ }
+ }
+
+ protected function filterCommands(array $commands)
+ {
+ // Build a list of all of the directories in each command so that we don't attempt to create an empty dir in
+ // the same parallel transfer as attempting to create a file in that dir
+ $dirs = array();
+ foreach ($commands as $command) {
+ $parts = array_values(array_filter(explode('/', $command['SaveAs'])));
+ for ($i = 0, $total = count($parts); $i < $total; $i++) {
+ $dir = '';
+ for ($j = 0; $j < $i; $j++) {
+ $dir .= '/' . $parts[$j];
+ }
+ if ($dir && !in_array($dir, $dirs)) {
+ $dirs[] = $dir;
+ }
+ }
+ }
+
+ return array_filter($commands, function ($command) use ($dirs) {
+ return !in_array($command['SaveAs'], $dirs);
+ });
+ }
+
+ protected function transferCommands(array $commands)
+ {
+ parent::transferCommands($this->filterCommands($commands));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/DownloadSyncBuilder.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/DownloadSyncBuilder.php
new file mode 100644
index 0000000..d9cd044
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/DownloadSyncBuilder.php
@@ -0,0 +1,129 @@
+directory = $directory;
+
+ return $this;
+ }
+
+ /**
+ * Call this function to allow partial downloads to be resumed if the download was previously interrupted
+ *
+ * @return self
+ */
+ public function allowResumableDownloads()
+ {
+ $this->resumable = true;
+
+ return $this;
+ }
+
+ protected function specificBuild()
+ {
+ $sync = new DownloadSync(array(
+ 'client' => $this->client,
+ 'bucket' => $this->bucket,
+ 'iterator' => $this->sourceIterator,
+ 'source_converter' => $this->sourceConverter,
+ 'target_converter' => $this->targetConverter,
+ 'concurrency' => $this->concurrency,
+ 'resumable' => $this->resumable,
+ 'directory' => $this->directory
+ ));
+
+ return $sync;
+ }
+
+ protected function getTargetIterator()
+ {
+ if (!$this->directory) {
+ throw new RuntimeException('A directory is required');
+ }
+
+ if (!is_dir($this->directory) && !mkdir($this->directory, 0777, true)) {
+ // @codeCoverageIgnoreStart
+ throw new RuntimeException('Unable to create root download directory: ' . $this->directory);
+ // @codeCoverageIgnoreEnd
+ }
+
+ return $this->filterIterator(
+ new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->directory))
+ );
+ }
+
+ protected function getDefaultSourceConverter()
+ {
+ return new KeyConverter(
+ "s3://{$this->bucket}/{$this->baseDir}",
+ $this->directory . DIRECTORY_SEPARATOR, $this->delimiter
+ );
+ }
+
+ protected function getDefaultTargetConverter()
+ {
+ return new KeyConverter("s3://{$this->bucket}/{$this->baseDir}", '', $this->delimiter);
+ }
+
+ protected function assertFileIteratorSet()
+ {
+ $this->sourceIterator = $this->sourceIterator ?: $this->createS3Iterator();
+ }
+
+ protected function addDebugListener(AbstractSync $sync, $resource)
+ {
+ $sync->getEventDispatcher()->addListener(UploadSync::BEFORE_TRANSFER, function (Event $e) use ($resource) {
+ if ($e['command'] instanceof CommandInterface) {
+ $from = $e['command']['Bucket'] . '/' . $e['command']['Key'];
+ $to = $e['command']['SaveAs'] instanceof EntityBodyInterface
+ ? $e['command']['SaveAs']->getUri()
+ : $e['command']['SaveAs'];
+ fwrite($resource, "Downloading {$from} -> {$to}\n");
+ } elseif ($e['command'] instanceof ResumableDownload) {
+ $from = $e['command']->getBucket() . '/' . $e['command']->getKey();
+ $to = $e['command']->getFilename();
+ fwrite($resource, "Resuming {$from} -> {$to}\n");
+ }
+ });
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/FilenameConverterInterface.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/FilenameConverterInterface.php
new file mode 100644
index 0000000..ded2cfb
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/FilenameConverterInterface.php
@@ -0,0 +1,32 @@
+baseDir = (string) $baseDir;
+ $this->prefix = $prefix;
+ $this->delimiter = $delimiter;
+ }
+
+ public function convert($filename)
+ {
+ $key = $filename;
+
+ // Remove base directory from the key (only the first occurrence)
+ if ($this->baseDir && (false !== $pos = strpos($filename, $this->baseDir))) {
+ $key = substr_replace($key, '', $pos, strlen($this->baseDir));
+ }
+
+ // Replace Windows directory separators to become Unix style, and convert that to the custom dir separator
+ $key = str_replace('/', $this->delimiter, str_replace('\\', '/', $key));
+
+ // Add the key prefix and remove double slashes that are not in the protocol (e.g. prefixed with ":")
+ $delim = preg_quote($this->delimiter);
+ $key = preg_replace(
+ "#(?delimiter,
+ $this->prefix . $key
+ );
+
+ return $key;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/UploadSync.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/UploadSync.php
new file mode 100644
index 0000000..31b81e6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/UploadSync.php
@@ -0,0 +1,86 @@
+options['multipart_upload_size']) {
+ $this->options['multipart_upload_size'] = AbstractTransfer::MIN_PART_SIZE;
+ }
+ }
+
+ protected function createTransferAction(\SplFileInfo $file)
+ {
+ // Open the file for reading
+ $filename = $file->getRealPath() ?: $file->getPathName();
+
+ if (!($resource = fopen($filename, 'r'))) {
+ // @codeCoverageIgnoreStart
+ throw new RuntimeException('Could not open ' . $file->getPathname() . ' for reading');
+ // @codeCoverageIgnoreEnd
+ }
+
+ $key = $this->options['source_converter']->convert($filename);
+ $body = EntityBody::factory($resource);
+
+ // Determine how the ACL should be applied
+ if ($acl = $this->options['acl']) {
+ $aclType = is_string($this->options['acl']) ? 'ACL' : 'ACP';
+ } else {
+ $acl = 'private';
+ $aclType = 'ACL';
+ }
+
+ // Use a multi-part upload if the file is larger than the cutoff size and is a regular file
+ if ($body->getWrapper() == 'plainfile' && $file->getSize() >= $this->options['multipart_upload_size']) {
+ $builder = UploadBuilder::newInstance()
+ ->setBucket($this->options['bucket'])
+ ->setKey($key)
+ ->setMinPartSize($this->options['multipart_upload_size'])
+ ->setOption($aclType, $acl)
+ ->setClient($this->options['client'])
+ ->setSource($body)
+ ->setConcurrency($this->options['concurrency']);
+
+ $this->dispatch(
+ self::BEFORE_MULTIPART_BUILD,
+ array('builder' => $builder, 'file' => $file)
+ );
+
+ return $builder->build();
+ }
+
+ return $this->options['client']->getCommand('PutObject', array(
+ 'Bucket' => $this->options['bucket'],
+ 'Key' => $key,
+ 'Body' => $body,
+ $aclType => $acl
+ ));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/UploadSyncBuilder.php b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/UploadSyncBuilder.php
new file mode 100644
index 0000000..8f7907c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/aws/aws-sdk-php/src/Aws/S3/Sync/UploadSyncBuilder.php
@@ -0,0 +1,190 @@
+baseDir = realpath($path);
+ $this->sourceIterator = $this->filterIterator(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(
+ $path,
+ FI::SKIP_DOTS | FI::UNIX_PATHS | FI::FOLLOW_SYMLINKS
+ )));
+
+ return $this;
+ }
+
+ /**
+ * Set a glob expression that will match files to upload to Amazon S3
+ *
+ * @param string $glob Glob expression
+ *
+ * @return $this
+ * @link http://www.php.net/manual/en/function.glob.php
+ */
+ public function uploadFromGlob($glob)
+ {
+ $this->sourceIterator = $this->filterIterator(
+ new \GlobIterator($glob, FI::SKIP_DOTS | FI::UNIX_PATHS | FI::FOLLOW_SYMLINKS)
+ );
+
+ return $this;
+ }
+
+ /**
+ * Set a canned ACL to apply to each uploaded object
+ *
+ * @param string $acl Canned ACL for each upload
+ *
+ * @return $this
+ */
+ public function setAcl($acl)
+ {
+ $this->acp = $acl;
+
+ return $this;
+ }
+
+ /**
+ * Set an Access Control Policy to apply to each uploaded object
+ *
+ * @param Acp $acp Access control policy
+ *
+ * @return $this
+ */
+ public function setAcp(Acp $acp)
+ {
+ $this->acp = $acp;
+
+ return $this;
+ }
+
+ /**
+ * Set the multipart upload size threshold. When the size of a file exceeds this value, the file will be uploaded
+ * using a multipart upload.
+ *
+ * @param int $size Size threshold
+ *
+ * @return $this
+ */
+ public function setMultipartUploadSize($size)
+ {
+ $this->multipartUploadSize = $size;
+
+ return $this;
+ }
+
+ protected function specificBuild()
+ {
+ $sync = new UploadSync(array(
+ 'client' => $this->client,
+ 'bucket' => $this->bucket,
+ 'iterator' => $this->sourceIterator,
+ 'source_converter' => $this->sourceConverter,
+ 'target_converter' => $this->targetConverter,
+ 'concurrency' => $this->concurrency,
+ 'multipart_upload_size' => $this->multipartUploadSize,
+ 'acl' => $this->acp
+ ));
+
+ return $sync;
+ }
+
+ protected function addCustomParamListener(HasDispatcherInterface $sync)
+ {
+ // Handle the special multi-part upload event
+ parent::addCustomParamListener($sync);
+ $params = $this->params;
+ $sync->getEventDispatcher()->addListener(
+ UploadSync::BEFORE_MULTIPART_BUILD,
+ function (Event $e) use ($params) {
+ foreach ($params as $k => $v) {
+ $e['builder']->setOption($k, $v);
+ }
+ }
+ );
+ }
+
+ protected function getTargetIterator()
+ {
+ return $this->createS3Iterator();
+ }
+
+ protected function getDefaultSourceConverter()
+ {
+ return new KeyConverter($this->baseDir, $this->keyPrefix . $this->delimiter, $this->delimiter);
+ }
+
+ protected function getDefaultTargetConverter()
+ {
+ return new KeyConverter('s3://' . $this->bucket . '/', '', DIRECTORY_SEPARATOR);
+ }
+
+ protected function addDebugListener(AbstractSync $sync, $resource)
+ {
+ $sync->getEventDispatcher()->addListener(UploadSync::BEFORE_TRANSFER, function (Event $e) use ($resource) {
+
+ $c = $e['command'];
+
+ if ($c instanceof CommandInterface) {
+ $uri = $c['Body']->getUri();
+ $size = $c['Body']->getSize();
+ fwrite($resource, "Uploading {$uri} -> {$c['Key']} ({$size} bytes)\n");
+ return;
+ }
+
+ // Multipart upload
+ $body = $c->getSource();
+ $totalSize = $body->getSize();
+ $progress = 0;
+ fwrite($resource, "Beginning multipart upload: " . $body->getUri() . ' -> ');
+ fwrite($resource, $c->getState()->getFromId('Key') . " ({$totalSize} bytes)\n");
+
+ $c->getEventDispatcher()->addListener(
+ AbstractTransfer::BEFORE_PART_UPLOAD,
+ function ($e) use (&$progress, $totalSize, $resource) {
+ $command = $e['command'];
+ $size = $command['Body']->getContentLength();
+ $percentage = number_format(($progress / $totalSize) * 100, 2);
+ fwrite($resource, "- Part {$command['PartNumber']} ({$size} bytes, {$percentage}%)\n");
+ $progress += $size;
+ }
+ );
+ });
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/config.template.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/config.template.php
new file mode 100644
index 0000000..086dca9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/config.template.php
@@ -0,0 +1,175 @@
+ 'default',
+ 'tags' => '.ckfinder/tags',
+ 'logs' => '.ckfinder/logs',
+ 'cache' => '.ckfinder/cache',
+ 'thumbs' => '.ckfinder/cache/thumbs',
+);
+
+/*============================ Images and Thumbnails ==================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_images
+
+$config['images'] = array(
+ 'maxWidth' => 1600,
+ 'maxHeight' => 1200,
+ 'quality' => 80,
+ 'sizes' => array(
+ 'small' => array('width' => 480, 'height' => 320, 'quality' => 80),
+ 'medium' => array('width' => 600, 'height' => 480, 'quality' => 80),
+ 'large' => array('width' => 800, 'height' => 600, 'quality' => 80)
+ )
+);
+
+/*=================================== Backends ========================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_backends
+
+$config['backends'][] = array(
+ 'name' => 'default',
+ 'adapter' => 'local',
+ 'baseUrl' => '/ckfinder/userfiles/',
+// 'root' => '', // Can be used to explicitly set the CKFinder user files directory.
+ 'chmodFiles' => 0777,
+ 'chmodFolders' => 0755,
+ 'filesystemEncoding' => 'UTF-8',
+);
+
+/*================================ Resource Types =====================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_resourceTypes
+
+$config['defaultResourceTypes'] = '';
+
+$config['resourceTypes'][] = array(
+ 'name' => 'Files', // Single quotes not allowed.
+ 'directory' => 'files',
+ 'maxSize' => 0,
+ 'allowedExtensions' => '7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xlsx,zip',
+ 'deniedExtensions' => '',
+ 'backend' => 'default'
+);
+
+$config['resourceTypes'][] = array(
+ 'name' => 'Images',
+ 'directory' => 'images',
+ 'maxSize' => 0,
+ 'allowedExtensions' => 'bmp,gif,jpeg,jpg,png',
+ 'deniedExtensions' => '',
+ 'backend' => 'default'
+);
+
+/*================================ Access Control =====================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_roleSessionVar
+
+$config['roleSessionVar'] = 'CKFinder_UserRole';
+
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_accessControl
+$config['accessControl'][] = array(
+ 'role' => '*',
+ 'resourceType' => '*',
+ 'folder' => '/',
+
+ 'FOLDER_VIEW' => true,
+ 'FOLDER_CREATE' => true,
+ 'FOLDER_RENAME' => true,
+ 'FOLDER_DELETE' => true,
+
+ 'FILE_VIEW' => true,
+ 'FILE_CREATE' => true,
+ 'FILE_RENAME' => true,
+ 'FILE_DELETE' => true,
+
+ 'IMAGE_RESIZE' => true,
+ 'IMAGE_RESIZE_CUSTOM' => true
+);
+
+
+/*================================ Other Settings =====================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html
+
+$config['overwriteOnUpload'] = false;
+$config['checkDoubleExtension'] = true;
+$config['disallowUnsafeCharacters'] = false;
+$config['secureImageUploads'] = true;
+$config['checkSizeAfterScaling'] = true;
+$config['htmlExtensions'] = array('html', 'htm', 'xml', 'js');
+$config['hideFolders'] = array('.*', 'CVS', '__thumbs');
+$config['hideFiles'] = array('.*');
+$config['forceAscii'] = false;
+$config['xSendfile'] = false;
+
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_debug
+$config['debug'] = false;
+
+/*==================================== Plugins ========================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_plugins
+
+$config['pluginsDirectory'] = __DIR__ . '/plugins';
+$config['plugins'] = array();
+
+/*================================ Cache settings =====================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_cache
+
+$config['cache'] = array(
+ 'imagePreview' => 24 * 3600,
+ 'thumbnails' => 24 * 3600 * 365,
+ 'proxyCommand' => 0
+);
+
+/*============================ Temp Directory settings ================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_tempDirectory
+
+$config['tempDirectory'] = sys_get_temp_dir();
+
+/*============================ Session Cause Performance Issues =======================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_sessionWriteClose
+
+$config['sessionWriteClose'] = true;
+
+/*================================= CSRF protection ===================================*/
+// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_csrfProtection
+
+$config['csrfProtection'] = true;
+
+/*============================== End of Configuration =================================*/
+
+// Config must be returned - do not change it.
+return $config;
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/Acl.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/Acl.php
new file mode 100644
index 0000000..11420cf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/Acl.php
@@ -0,0 +1,275 @@
+[folderPath][role][resourceType] => MaskBuilder
+ *
+ * @var array $entries
+ */
+ protected $rules = array();
+
+ /**
+ * @brief The role context interface.
+ *
+ * By default an instance of SessionRoleContext is used as a role context.
+ * You can easily add a new class that implements RoleContextInterface to
+ * better fit your application.
+ *
+ * @var RoleContextInterface $roleContext
+ */
+ protected $roleContext = null;
+
+ /**
+ * @brief Cache for computed masks.
+ *
+ * This array contains computed mask results to avoid double checks
+ * for the same path.
+ *
+ * @var array $cachedResults
+ */
+ protected $cachedResults = array();
+
+ /**
+ * Constructor.
+ *
+ * @param RoleContextInterface $roleContext
+ */
+ public function __construct(RoleContextInterface $roleContext)
+ {
+ $this->roleContext = $roleContext;
+ }
+
+ /**
+ * Sets rules for Access Control Lists using configuration nodes.
+ *
+ * It is assumed that Acl configuration nodes used here have the following form:
+ *
+ * @code
+ * array(
+ * 'role' => 'foo',
+ * 'resourceType' => 'Images',
+ * 'folder' => '/bar',
+ *
+ * // Permissions
+ * 'FOLDER_VIEW' => true,
+ * 'FOLDER_CREATE' => true,
+ * 'FOLDER_RENAME' => true,
+ * 'FOLDER_DELETE' => true,
+ *
+ * 'FILE_VIEW' => true,
+ * 'FILE_CREATE' => true,
+ * 'FILE_RENAME' => true,
+ * 'FILE_DELETE' => true
+ * )
+ * @endcode
+ *
+ * If any permission is missing, it is inherited from the parent folder.
+ *
+ * @param array $aclConfigNodes Access Control Lists configuration nodes
+ *
+ */
+ public function setRules($aclConfigNodes)
+ {
+ foreach ($aclConfigNodes as $node) {
+ $role = isset($node['role']) ? $node['role'] : "*";
+
+ $resourceType = isset($node['resourceType']) ? $node['resourceType'] : "*";
+
+ $folder = isset($node['folder']) ? $node['folder'] : "/";
+
+ $permissions = Permission::getAll();
+
+ foreach ($permissions as $permissionName => $permissionValue) {
+ if (isset($node[$permissionName])) {
+ $allow = (bool) $node[$permissionName];
+
+ if ($allow) {
+ $this->allow($resourceType, $folder, $permissionValue, $role);
+ } else {
+ $this->disallow($resourceType, $folder, $permissionValue, $role);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Allows a permission for a given role.
+ *
+ * @param string $resourceType
+ * @param string $folderPath
+ * @param int $permission
+ * @param string $role
+ *
+ * @return $this|Acl
+ */
+ public function allow($resourceType, $folderPath, $permission, $role)
+ {
+ $folderPath = Path::normalize($folderPath);
+
+ if (!isset($this->rules[$folderPath][$role][$resourceType])) {
+ $this->rules[$folderPath][$role][$resourceType] = new MaskBuilder();
+ }
+
+ /* @var $ruleMask MaskBuilder */
+ $ruleMask = $this->rules[$folderPath][$role][$resourceType];
+
+ $ruleMask->allow($permission);
+
+ return $this;
+ }
+
+ /**
+ * Disallows a permission for a given role.
+ *
+ * @param string $resourceType
+ * @param string $folderPath
+ * @param int $permission
+ * @param string $role
+ *
+ * @return $this|Acl
+ */
+ public function disallow($resourceType, $folderPath, $permission, $role)
+ {
+ $folderPath = Path::normalize($folderPath);
+
+ if (!isset($this->rules[$folderPath][$role][$resourceType])) {
+ $this->rules[$folderPath][$role][$resourceType] = new MaskBuilder();
+ }
+
+ /* @var $ruleMask MaskBuilder */
+ $ruleMask = $this->rules[$folderPath][$role][$resourceType];
+
+ $ruleMask->disallow($permission);
+
+ return $this;
+ }
+
+ /**
+ * Checks if a given role has a permission.
+ *
+ * @param string $resourceType
+ * @param string $folderPath
+ * @param int $permission
+ * @param string|null $role
+ *
+ * @return bool
+ */
+ public function isAllowed($resourceType, $folderPath, $permission, $role = null)
+ {
+ $mask = $this->getComputedMask($resourceType, $folderPath, $role);
+
+ return ($mask & $permission) === $permission;
+ }
+
+ /**
+ * Returns a computed mask.
+ *
+ * @param string $resourceType
+ * @param string $folderPath
+ * @param string|null $role
+ *
+ * @return int
+ */
+ public function getComputedMask($resourceType, $folderPath, $role = null)
+ {
+ $computedMask = 0;
+
+ $role = $role ?: $this->roleContext->getRole();
+
+ $folderPath = trim($folderPath, "/");
+
+ if (isset($this->cachedResults[$resourceType][$folderPath])) {
+ return $this->cachedResults[$resourceType][$folderPath];
+ }
+
+ $pathParts = explode("/", $folderPath);
+
+ $currentPath = "/";
+
+ $pathPartsCount = count($pathParts);
+
+ for ($i = -1; $i < $pathPartsCount; $i++) {
+ if ($i >= 0) {
+ if (!strlen($pathParts[$i])) {
+ continue;
+ }
+
+ if (array_key_exists($currentPath . '*/', $this->rules)) {
+ $computedMask = $this->mergePathComputedMask($computedMask, $resourceType, $role, $currentPath . '*/');
+ }
+
+ $currentPath .= $pathParts[$i] . '/';
+ }
+
+ if (array_key_exists($currentPath, $this->rules)) {
+ $computedMask = $this->mergePathComputedMask($computedMask, $resourceType, $role, $currentPath);
+ }
+ }
+
+ $this->cachedResults[$resourceType][$folderPath] = $computedMask;
+
+ return $computedMask;
+ }
+
+ /**
+ * Merges permission masks to allow permission inheritance from parent folders.
+ *
+ * @param int $currentMask the current mask numeric value
+ * @param string $resourceType the resource type identifier
+ * @param string $role the user role name
+ * @param string $folderPath the folder path
+ *
+ * @return int computed mask numeric value
+ */
+ protected function mergePathComputedMask($currentMask, $resourceType, $role, $folderPath)
+ {
+ $folderRules = $this->rules[$folderPath];
+
+ $possibleRules = array(
+ array('*', '*'),
+ array('*', $resourceType),
+ array($role, '*'),
+ array($role, $resourceType),
+ );
+
+ foreach ($possibleRules as $rule) {
+ list($role, $resourceType) = $rule;
+
+ if (isset($folderRules[$role][$resourceType])) {
+ /* @var $ruleMask MaskBuilder */
+ $ruleMask = $folderRules[$role][$resourceType];
+
+ $currentMask = $ruleMask->mergeRules($currentMask);
+ }
+ }
+
+ return $currentMask;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/AclInterface.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/AclInterface.php
new file mode 100644
index 0000000..6b133cc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/AclInterface.php
@@ -0,0 +1,78 @@
+maskAllowed |= $permission;
+
+ return $this;
+ }
+
+ /**
+ * Enables the permission bit in the mask for disallowed permissions.
+ *
+ * @param int $permission permission numeric value
+ *
+ * @see Permission
+ *
+ * @return MaskBuilder $this
+ */
+ public function disallow($permission)
+ {
+ $this->maskDisallowed |= $permission;
+
+ return $this;
+ }
+
+ /**
+ * Merges mask permission rules to input mask numeric value.
+ *
+ * Modifies input mask numeric value to enable bits set in $maskAllowed
+ * and disable bits set in $maskDisallowed.
+ *
+ * @param int $inputMask mask numeric value
+ *
+ * @return int computed mask value
+ *
+ * @see Acl::getComputedMask()
+ */
+ public function mergeRules($inputMask)
+ {
+ $inputMask |= $this->maskAllowed;
+ $inputMask &= ~$this->maskDisallowed;
+
+ return $inputMask;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/Permission.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/Permission.php
new file mode 100644
index 0000000..a2ce160
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/Permission.php
@@ -0,0 +1,74 @@
+ value
+ */
+ public static function getAll()
+ {
+ $ref = new \ReflectionClass(__CLASS__);
+
+ return $ref->getConstants();
+ }
+
+ /**
+ * Returns a numeric value for the passed permission name.
+ *
+ * @param string $name permission constant name
+ *
+ * @return int permission value
+ *
+ * @throws \InvalidArgumentException when the permission with a given name was not found.
+ */
+ public static function byName($name)
+ {
+ $formattedName = sprintf('static::%s', strtoupper($name));
+
+ if (!defined($formattedName)) {
+ throw new \InvalidArgumentException(sprintf('The permission "%s" doesn\'t exist', $name));
+ }
+
+ return constant($formattedName);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/User/RoleContextInterface.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/User/RoleContextInterface.php
new file mode 100644
index 0000000..7a0c272
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Acl/User/RoleContextInterface.php
@@ -0,0 +1,34 @@
+sessionRoleField = $sessionRoleField;
+ }
+
+ /**
+ * Returns the role name of the current user.
+ *
+ * @return null|string
+ */
+ public function getRole()
+ {
+ if (strlen($this->sessionRoleField) && isset($_SESSION[$this->sessionRoleField])) {
+ return (string) $_SESSION[$this->sessionRoleField];
+ }
+
+ return null;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Authentication/AuthenticationInterface.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Authentication/AuthenticationInterface.php
new file mode 100644
index 0000000..d46635e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Authentication/AuthenticationInterface.php
@@ -0,0 +1,28 @@
+authCallable = $authCallable;
+ }
+
+ /**
+ * @return bool `true` if the current user was successfully authenticated within CKFinder.
+ */
+ public function authenticate()
+ {
+ return call_user_func($this->authCallable);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/AwsS3.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/AwsS3.php
new file mode 100644
index 0000000..e839d51
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/AwsS3.php
@@ -0,0 +1,146 @@
+app = $app;
+ }
+
+ /**
+ * Emulates changing of directory name.
+ *
+ * @param string $path
+ * @param string $newPath
+ *
+ * @return bool
+ */
+ public function renameDirectory($path, $newPath)
+ {
+ $sourcePath = $this->applyPathPrefix(rtrim($path, '/') . '/');
+
+ $objectsIterator = $this->client->getIterator('listObjects', [
+ 'Bucket' => $this->bucket,
+ 'Prefix' => $sourcePath,
+ ]);
+
+ $objects = array_filter(iterator_to_array($objectsIterator), function ($v) {
+ return isset($v['Key']);
+ });
+
+ if (!empty($objects)) {
+
+ /* @var OperationManager $operation */
+ $operation = $this->app['operation'];
+
+ $operation->start();
+
+ $total = count($objects);
+ $current = 0;
+
+ foreach ($objects as $entry) {
+ $this->client->copyObject(array(
+ 'Bucket' => $this->bucket,
+ 'Key' => $this->replacePath($entry['Key'], $path, $newPath),
+ 'CopySource' => urlencode($this->bucket . '/' . $entry['Key']),
+ ));
+
+ if ($operation->isAborted()) {
+ // Delete target folder in case if operation was aborted
+ $targetPath = $this->applyPathPrefix(rtrim($newPath, '/') . '/');
+
+ $this->client->deleteMatchingObjects($this->bucket, $targetPath);
+
+ return true;
+ }
+
+ $operation->updateStatus(array('total' => $total, 'current' => ++$current));
+ }
+
+ $this->client->deleteMatchingObjects($this->bucket, $sourcePath);
+ }
+
+ return true;
+ }
+
+ /**
+ * Helper method that replaces a part of the key (path).
+ *
+ * @param string $objectPath the bucket-relative object path
+ * @param string $path the old backend-relative path
+ * @param string $newPath the new backend-relative path
+ *
+ * @return string the new bucket-relative path
+ */
+ protected function replacePath($objectPath, $path, $newPath)
+ {
+ $objectPath = $this->removePathPrefix($objectPath);
+ $newPath = trim($newPath, '/') . '/';
+ $path = trim($path, '/') . '/';
+
+ return $this->applyPathPrefix($newPath . substr($objectPath, strlen($path)));
+ }
+
+ /**
+ * Returns a direct link to a file stored on S3.
+ *
+ * @param string $path
+ *
+ * @return string
+ */
+ public function getFileUrl($path)
+ {
+ $objectPath = $this->applyPathPrefix($path);
+
+ return $this->client->getObjectUrl($this->bucket, $objectPath);
+ }
+
+ /**
+ * Returns the file MIME type.
+ *
+ * @param string $path
+ *
+ * @return array|false|null|string
+ */
+ public function getMimeType($path)
+ {
+ $ext = pathinfo($path, PATHINFO_EXTENSION);
+
+ $mimeType = MimeType::detectByFileExtension($ext);
+
+ return $mimeType ? array('mimetype' => $mimeType) : parent::getMimetype($path);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/Azure.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/Azure.php
new file mode 100644
index 0000000..13c5ab3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/Azure.php
@@ -0,0 +1,71 @@
+applyPathPrefix(rtrim($path, '/') . '/');
+
+ $options = new ListBlobsOptions();
+ $options->setPrefix($sourcePath);
+
+ /** @var \WindowsAzure\Blob\Models\ListBlobsResult $listResults */
+ $listResults = $this->client->listBlobs($this->container, $options);
+
+ foreach ($listResults->getBlobs() as $blob) {
+ /** @var \WindowsAzure\Blob\Models\Blob $blob */
+ $this->client->copyBlob(
+ $this->container,
+ $this->replacePath($blob->getName(), $path, $newPath),
+ $this->container,
+ $blob->getName()
+ );
+ $this->client->deleteBlob($this->container, $blob->getName());
+ }
+
+ return true;
+ }
+
+ /**
+ * Helper method that replaces a part of the key (path).
+ *
+ * @param string $objectPath the bucket-relative object path
+ * @param string $path the old backend-relative path
+ * @param string $newPath the new backend-relative path
+ *
+ * @return string the new bucket-relative path
+ */
+ protected function replacePath($objectPath, $path, $newPath)
+ {
+ $objectPath = $this->removePathPrefix($objectPath);
+ $newPath = trim($newPath, '/') . '/';
+ $path = trim($path, '/') . '/';
+
+ return $this->applyPathPrefix($newPath . substr($objectPath, strlen($path)));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/Cache/Storage/Memory.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/Cache/Storage/Memory.php
new file mode 100644
index 0000000..2130731
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/Cache/Storage/Memory.php
@@ -0,0 +1,36 @@
+cache[$path]['contents']) && $this->cache[$path]['contents'] !== false) {
+ return $this->cache[$path];
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/Dropbox.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/Dropbox.php
new file mode 100644
index 0000000..c89319f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/Dropbox.php
@@ -0,0 +1,63 @@
+backendConfig = $backendConfig;
+
+ parent::__construct($client, isset($backendConfig['root']) ? $backendConfig['root'] : null);
+ }
+
+ /**
+ * Returns a direct link to a file stored in Dropbox.
+ *
+ * @param string $path
+ *
+ * @return string
+ */
+ public function getFileUrl($path)
+ {
+ $shareableLink = $this->client->createShareableLink($this->applyPathPrefix($path));
+
+ if (substr($shareableLink, -5) === '?dl=0') {
+ $shareableLink[strlen($shareableLink)-1] = '1';
+ }
+
+ return $shareableLink;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/EmulateRenameDirectoryInterface.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/EmulateRenameDirectoryInterface.php
new file mode 100644
index 0000000..1a8b753
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Adapter/EmulateRenameDirectoryInterface.php
@@ -0,0 +1,27 @@
+backendConfig = $backendConfig;
+
+ if (!isset($backendConfig['root']) || empty($backendConfig['root'])) {
+ $baseUrl = $backendConfig['baseUrl'];
+ $baseUrl = preg_replace("|^http(s)?://[^/]+|i", "", $baseUrl);
+ $backendConfig['root'] = Path::combine(Utils::getRootPath(), Utils::decodeURLParts($baseUrl));
+ }
+
+ if (!is_dir($backendConfig['root'])) {
+ @mkdir($backendConfig['root'], $backendConfig['chmodFolders'], true);
+ if (!is_dir($backendConfig['root'])) {
+ throw new FolderNotFoundException(sprintf('The root folder of backend "%s" not found (%s)', $backendConfig['name'], $backendConfig['root']));
+ }
+ }
+
+ if (!is_readable($backendConfig['root'])) {
+ throw new AccessDeniedException(sprintf('The root folder of backend "%s" is not readable (%s)', $backendConfig['name'], $backendConfig['root']));
+ }
+
+ parent::__construct($backendConfig['root']);
+ }
+
+ /**
+ * Creates a directory.
+ *
+ * @param string $dirname
+ * @param FSConfig $config
+ *
+ * @return array|bool|false
+ *
+ */
+ public function createDir($dirname, FSConfig $config)
+ {
+ $location = $this->applyPathPrefix($dirname);
+ $umask = umask(0);
+
+ $chmodFolders = $this->backendConfig['chmodFolders'];
+
+ if (!is_dir($location) && !mkdir($location, $chmodFolders, true)) {
+ $return = false;
+ } else {
+ $return = array('path' => $dirname, 'type' => 'dir');
+ }
+
+ umask($umask);
+
+ return $return;
+ }
+
+ /**
+ * Writes a file.
+ *
+ * @param string $path
+ * @param string $contents
+ * @param FSConfig $config
+ *
+ * @return array|bool
+ */
+ public function write($path, $contents, FSConfig $config)
+ {
+ $location = $this->applyPathPrefix($path);
+ $this->ensureDirectory(dirname($location));
+
+ $result = parent::write($path, $contents, $config);
+
+ $chmodFiles = $this->backendConfig['chmodFiles'];
+
+ $oldUmask = umask(0);
+ chmod($location, $chmodFiles);
+ umask($oldUmask);
+
+ return $result;
+ }
+
+ /**
+ * Writes a file using stream.
+ *
+ * @param string $path
+ * @param resource $resource
+ * @param FSConfig $config
+ *
+ * @return array|bool
+ */
+ public function writeStream($path, $resource, FSConfig $config)
+ {
+ $location = $this->applyPathPrefix($path);
+ $this->ensureDirectory(dirname($location));
+
+ $result = parent::writeStream($path, $resource, $config);
+
+ $chmodFiles = $this->backendConfig['chmodFiles'];
+
+ $oldUmask = umask(0);
+ chmod($location, $chmodFiles);
+ umask($oldUmask);
+
+ return $result;
+ }
+
+ /**
+ * Ensures that the root directory exists.
+ *
+ * @param string $root root directory path
+ *
+ * @return string real path to root
+ */
+ protected function ensureDirectory($root)
+ {
+ if (!is_dir($root)) {
+ $oldUmask = umask(0);
+ mkdir($root, $this->backendConfig['chmodFolders'], true);
+ umask($oldUmask);
+ }
+
+ return realpath($root);
+ }
+
+ /**
+ * Checks whether a file or directory is present.
+ *
+ * @param string $path
+ *
+ * @return bool
+ */
+ public function has($path)
+ {
+ $location = $this->applyPathPrefix($path);
+
+ return is_file($location) || is_dir($location);
+ }
+
+ /**
+ * Converts file or directory names to the file system encoding.
+ *
+ * @param string $fileName
+ *
+ * @return mixed|string
+ */
+ public function convertToFilesystemEncoding($fileName)
+ {
+ $encoding = $this->backendConfig['filesystemEncoding'];
+
+ if (null === $encoding || strcasecmp($encoding, "UTF-8") == 0 || strcasecmp($encoding, "UTF8") == 0) {
+ return $fileName;
+ }
+
+ if (!function_exists("iconv")) {
+ if (strcasecmp($encoding, "ISO-8859-1") == 0 || strcasecmp($encoding, "ISO8859-1") == 0 || strcasecmp($encoding, "Latin1") == 0) {
+ return str_replace("\0", "_", utf8_decode($fileName));
+ } elseif (function_exists('mb_convert_encoding')) {
+ /**
+ * @todo check whether charset is supported - mb_list_encodings
+ */
+ $encoded = @mb_convert_encoding($fileName, $encoding, 'UTF-8');
+ if (@mb_strlen($fileName, "UTF-8") != @mb_strlen($encoded, $encoding)) {
+ return str_replace("\0", "_", preg_replace("/[^[:ascii:]]/u", "_", $fileName));
+ } else {
+ return str_replace("\0", "_", $encoded);
+ }
+ } else {
+ return str_replace("\0", "_", preg_replace("/[^[:ascii:]]/u", "_", $fileName));
+ }
+ }
+
+ $converted = @iconv("UTF-8", $encoding . "//IGNORE//TRANSLIT", $fileName);
+ if ($converted === false) {
+ return str_replace("\0", "_", preg_replace("/[^[:ascii:]]/u", "_", $fileName));
+ }
+
+ return $converted;
+ }
+
+ /**
+ * Creates a stream for writing to a file.
+ *
+ * @param string $path
+ *
+ * @return resource
+ */
+ public function createWriteStream($path)
+ {
+ $location = $this->applyPathPrefix($path);
+ $this->ensureDirectory(dirname($location));
+ $chmodFiles = $this->backendConfig['chmodFiles'];
+
+ if (!$stream = fopen($location, 'a+')) {
+ return false;
+ }
+
+ $oldUmask = umask(0);
+ chmod($location, $chmodFiles);
+ umask($oldUmask);
+
+ return $stream;
+ }
+
+ /**
+ * Checks if the directory contains subdirectories.
+ *
+ * @param Backend $backend
+ * @param ResourceType $resourceType
+ * @param string $clientPath
+ * @param Acl $acl
+ *
+ * @return bool
+ */
+ public function containsDirectories(Backend $backend, ResourceType $resourceType, $clientPath, Acl $acl)
+ {
+ $location = rtrim($this->applyPathPrefix(Path::combine($resourceType->getDirectory(), $clientPath)), '/\\') . '/';
+
+ if (!is_dir($location) || (false === $fh = @opendir($location))) {
+ return false;
+ }
+
+ $hasChildren = false;
+ $resourceTypeName = $resourceType->getName();
+ $clientPath = rtrim($clientPath, '/\\') . '/';
+
+ while (false !== ($filename = readdir($fh))) {
+ if ($filename == '.' || $filename == '..') {
+ continue;
+ }
+
+ if (is_dir($location . $filename)) {
+ if (!$acl->isAllowed($resourceTypeName, $clientPath . $filename, Permission::FOLDER_VIEW)) {
+ continue;
+ }
+ if ($backend->isHiddenFolder($filename)) {
+ continue;
+ }
+ $hasChildren = true;
+ break;
+ }
+ }
+
+ closedir($fh);
+
+ return $hasChildren;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Backend.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Backend.php
new file mode 100644
index 0000000..cdfa05d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/Backend.php
@@ -0,0 +1,467 @@
+app = $app;
+ $this->backendConfig = $backendConfig;
+ $this->acl = $app['acl'];
+ $this->ckConfig = $app['config'];
+
+ parent::__construct($adapter, $filesystemConfig);
+
+ $this->addPlugin(new GetWithMetadata());
+ }
+
+ /**
+ * Returns the name of the backend.
+ *
+ * @return string name of the backend
+ */
+ public function getName()
+ {
+ return $this->backendConfig['name'];
+ }
+
+ /**
+ * Returns an array of commands that should use operation tracking.
+ *
+ * @return array
+ */
+ public function getTrackedOperations()
+ {
+ return isset($this->backendConfig['trackedOperations']) ? $this->backendConfig['trackedOperations'] : array();
+ }
+
+ /**
+ * Returns a path based on the resource type and the resource type relative path.
+ *
+ * @param ResourceType $resourceType the resource type
+ * @param string $path the resource type relative path
+ *
+ * @return string path to be used with the backend adapter.
+ */
+ public function buildPath(ResourceType $resourceType, $path)
+ {
+ return Path::combine($resourceType->getDirectory(), $path);
+ }
+
+ /**
+ * Returns a filtered list of directories for a given resource type and path.
+ *
+ * @param ResourceType $resourceType
+ * @param string $path
+ * @param bool $recursive
+ *
+ * @return array
+ */
+ public function directories(ResourceType $resourceType, $path = '', $recursive = false)
+ {
+ $directoryPath = $this->buildPath($resourceType, $path);
+ $contents = $this->listContents($directoryPath, $recursive);
+
+ foreach ($contents as &$entry) {
+ $entry['acl'] = $this->acl->getComputedMask($resourceType->getName(), Path::combine($path, $entry['basename']));
+ }
+
+ return array_filter($contents, function ($v) {
+ return isset($v['type']) &&
+ $v['type'] === 'dir' &&
+ !$this->isHiddenFolder($v['basename']) &&
+ $v['acl'] & Permission::FOLDER_VIEW;
+ });
+ }
+
+ /**
+ * Returns a filtered list of files for a given resource type and path.
+ *
+ * @param ResourceType $resourceType
+ * @param string $path
+ * @param bool $recursive
+ *
+ * @return array
+ */
+ public function files(ResourceType $resourceType, $path = '', $recursive = false)
+ {
+ $directoryPath = $this->buildPath($resourceType, $path);
+ $contents = $this->listContents($directoryPath, $recursive);
+
+ return array_filter($contents, function ($v) use ($resourceType) {
+ return isset($v['type']) &&
+ $v['type'] === 'file' &&
+ !$this->isHiddenFile($v['basename']) &&
+ $resourceType->isAllowedExtension(isset($v['extension']) ? $v['extension'] : '');
+ });
+ }
+
+ /**
+ * Check if the directory for a given path contains subdirectories.
+ *
+ * @param ResourceType $resourceType
+ * @param string $path
+ *
+ * @return bool `true` if the directory contains subdirectories.
+ */
+ public function containsDirectories(ResourceType $resourceType, $path = '')
+ {
+ $baseAdapter = $this->getBaseAdapter();
+ if (method_exists($baseAdapter, 'containsDirectories')) {
+ return $baseAdapter->containsDirectories($this, $resourceType, $path, $this->acl);
+ }
+
+ $directoryPath = $this->buildPath($resourceType, $path);
+ $contents = $this->listContents($directoryPath);
+
+ foreach ($contents as $entry) {
+ if ($entry['type'] === 'dir' &&
+ !$this->isHiddenFolder($entry['basename']) &&
+ $this->acl->isAllowed($resourceType->getName(), Path::combine($path, $entry['basename']), Permission::FOLDER_VIEW)
+ ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks if the file with a given name is hidden.
+ *
+ * @param string $fileName
+ *
+ * @return bool `true` if the file is hidden.
+ */
+ public function isHiddenFile($fileName)
+ {
+ $hideFilesRegex = $this->ckConfig->getHideFilesRegex();
+
+ if ($hideFilesRegex) {
+ return (bool) preg_match($hideFilesRegex, $fileName);
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks if the directory with a given name is hidden.
+ *
+ * @param string $folderName
+ *
+ * @return bool `true` if the directory is hidden.
+ */
+ public function isHiddenFolder($folderName)
+ {
+ $hideFoldersRegex = $this->ckConfig->getHideFoldersRegex();
+
+ if ($hideFoldersRegex) {
+ return (bool) preg_match($hideFoldersRegex, $folderName);
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks if the path is hidden.
+ *
+ * @param string $path
+ *
+ * @return bool `true` if the path is hidden.
+ */
+ public function isHiddenPath($path)
+ {
+ $pathParts = explode('/', trim($path, '/'));
+ if ($pathParts) {
+ foreach ($pathParts as $part) {
+ if ($this->isHiddenFolder($part)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Deletes a directory.
+ *
+ * @param string $dirname
+ *
+ * @return bool
+ */
+ public function deleteDir($dirname)
+ {
+ $baseAdapter = $this->getBaseAdapter();
+
+ // For FTP first remove recursively all directory contents
+ if ($baseAdapter instanceof Ftp) {
+ $this->deleteContents($dirname);
+ }
+
+ return parent::deleteDir($dirname);
+ }
+
+ /**
+ * Delete all contents of the given directory.
+ *
+ * @param string $dirname
+ */
+ public function deleteContents($dirname)
+ {
+ $contents = $this->listContents($dirname);
+
+ foreach ($contents as $entry) {
+ if ($entry['type'] === 'dir') {
+ $this->deleteContents($entry['path']);
+ $this->deleteDir($entry['path']);
+ } else {
+ $this->delete($entry['path']);
+ }
+ }
+ }
+
+ /**
+ * Checks if a backend contains a directory.
+ *
+ * The Backend::has() method is not always reliable and may
+ * work differently for various adapters. Checking for directory
+ * should be done with this method.
+ *
+ * @param string $directoryPath
+ *
+ * @return bool
+ */
+ public function hasDirectory($directoryPath)
+ {
+ $pathParts = array_filter(explode('/', $directoryPath), 'strlen');
+ $dirName = array_pop($pathParts);
+ $contents = $this->listContents(implode('/', $pathParts));
+
+ foreach ($contents as $c) {
+ if (isset($c['type']) && isset($c['basename']) && $c['type'] === 'dir' && $c['basename'] === $dirName) {
+ return true;
+ }
+ }
+ }
+
+ /**
+ * Returns a URL to a file.
+ *
+ * If the useProxyCommand option is set for a backend, the returned
+ * URL will point to the CKFinder connector Proxy command.
+ *
+ * @param ResourceType $resourceType the file resource type
+ * @param string $folderPath the resource-type relative folder path
+ * @param string $fileName the file name
+ * @param string|null $thumbnailFileName the thumbnail file name - if the file is a thumbnail
+ *
+ * @return string|null URL to a file or `null` if the backend does not support it.
+ */
+ public function getFileUrl(ResourceType $resourceType, $folderPath, $fileName, $thumbnailFileName = null)
+ {
+ if (isset($this->backendConfig['useProxyCommand'])) {
+ $connectorUrl = $this->app->getConnectorUrl();
+
+ $queryParameters = array(
+ 'command' => 'Proxy',
+ 'type' => $resourceType->getName(),
+ 'currentFolder' => $folderPath,
+ 'fileName' => $fileName
+ );
+
+ if ($thumbnailFileName) {
+ $queryParameters['thumbnail'] = $thumbnailFileName;
+ }
+
+ $proxyCacheLifetime = (int) $this->ckConfig->get('cache.proxyCommand');
+
+ if ($proxyCacheLifetime > 0) {
+ $queryParameters['cache'] = $proxyCacheLifetime;
+ }
+
+ return $connectorUrl . '?' . http_build_query($queryParameters, '', '&');
+ }
+
+ $path = $thumbnailFileName
+ ? Path::combine($resourceType->getDirectory(), $folderPath, ResizedImage::DIR, $fileName, $thumbnailFileName)
+ : Path::combine($resourceType->getDirectory(), $folderPath, $fileName);
+
+ if (isset($this->backendConfig['baseUrl'])) {
+ return Path::combine($this->backendConfig['baseUrl'], Utils::encodeURLParts($path));
+ }
+
+ $baseAdapter = $this->getBaseAdapter();
+
+ if (method_exists($baseAdapter, 'getFileUrl')) {
+ return $baseAdapter->getFileUrl($path);
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns the base URL used to build the direct URL to files stored
+ * in this backend.
+ *
+ * @return string|null base URL or `null` if the base URL for a backend
+ * was not defined.
+ */
+ public function getBaseUrl()
+ {
+ if (isset($this->backendConfig['baseUrl']) && !$this->usesProxyCommand()) {
+ return $this->backendConfig['baseUrl'];
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns the root directory defined for the backend.
+ *
+ * @return string|null root directory or `null` if the root directory
+ * was not defined.
+ */
+ public function getRootDirectory()
+ {
+ if (isset($this->backendConfig['root'])) {
+ return $this->backendConfig['root'];
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns a Boolean value telling if the backend uses the Proxy command.
+ *
+ * @return bool
+ */
+ public function usesProxyCommand()
+ {
+ return isset($this->backendConfig['useProxyCommand']) && $this->backendConfig['useProxyCommand'];
+ }
+
+ /**
+ * Creates a stream for writing.
+ *
+ * @param string $path file path
+ *
+ * @return resource|null a stream to a file or `null` if the backend does not
+ * support writing streams.
+ */
+ public function createWriteStream($path)
+ {
+ $baseAdapter = $this->getBaseAdapter();
+
+ if (method_exists($baseAdapter, 'createWriteStream')) {
+ return $baseAdapter->createWriteStream($path);
+ }
+
+ return null;
+ }
+
+ /**
+ * Renames the object for a given path.
+ *
+ * @param string $path
+ * @param string $newpath
+ *
+ * @return bool `true` on success, `false` on failure.
+ */
+ public function rename($path, $newpath)
+ {
+ $baseAdapter = $this->getBaseAdapter();
+
+ if (($baseAdapter instanceof EmulateRenameDirectoryInterface) && $this->hasDirectory($path)) {
+ return $baseAdapter->renameDirectory($path, $newpath);
+ }
+
+ return parent::rename($path, $newpath);
+ }
+
+ /**
+ * Returns a base adapter used by this backend.
+ *
+ * The used adapter might be decorated with CachedAdapter. In this
+ * case the returned adapter is the internal one used by CachedAdapter.
+ *
+ * @return AdapterInterface
+ */
+ public function getBaseAdapter()
+ {
+ if ($this->adapter instanceof CachedAdapter) {
+ return $this->adapter->getAdapter();
+ }
+
+ return $this->adapter;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/BackendFactory.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/BackendFactory.php
new file mode 100644
index 0000000..2bdf38e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Backend/BackendFactory.php
@@ -0,0 +1,266 @@
+ array('RenameFolder')
+ );
+
+ /**
+ * The CKFinder application container.
+ *
+ * @var CKFinder $app
+ */
+ protected $app;
+
+ /**
+ * Access Control Lists.
+ *
+ * @var AclInterface $acl
+ */
+ protected $acl;
+
+ /**
+ * Configuration.
+ *
+ * @var Config $config
+ */
+ protected $config;
+
+ /**
+ * Constructor.
+ *
+ * @param CKFinder $app
+ */
+ public function __construct(CKFinder $app)
+ {
+ $this->app = $app;
+ $this->acl = $app['acl'];
+ $this->config = $app['config'];
+
+ $this->registerDefaultAdapters();
+ }
+
+ protected function registerDefaultAdapters()
+ {
+ $this->registerAdapter('local', function ($backendConfig) {
+ return $this->createBackend($backendConfig, new LocalFilesystemAdapter($backendConfig));
+ });
+
+ $this->registerAdapter('ftp', function ($backendConfig) {
+
+ $configurable = array('host', 'port', 'username', 'password', 'ssl', 'timeout', 'root', 'permPrivate', 'permPublic', 'passive');
+
+ $config = array_intersect_key($backendConfig, array_flip($configurable));
+
+ return $this->createBackend($backendConfig, new FtpAdapter($config));
+ });
+
+ $this->registerAdapter('dropbox', function ($backendConfig) {
+
+ $client = new DropboxClient($backendConfig['token'], $backendConfig['username']);
+
+ return $this->createBackend($backendConfig, new DropboxAdapter($client, $backendConfig));
+ });
+
+ $this->registerAdapter('s3', function ($backendConfig) {
+ $clientConfig = array(
+ 'key' => $backendConfig['key'],
+ 'secret' => $backendConfig['secret'],
+ );
+
+ if (isset($backendConfig['region'])) {
+ $clientConfig['region'] = $backendConfig['region'];
+ }
+
+ $client = S3Client::factory($clientConfig);
+
+ $filesystemConfig = array(
+ 'visibility' => isset($backendConfig['visibility']) ? $backendConfig['visibility'] : 'private'
+ );
+
+ $prefix = isset($backendConfig['root']) ? trim($backendConfig['root'], '/ ') : null;
+
+ return $this->createBackend($backendConfig, new AwsS3Adapter($client, $backendConfig['bucket'], $prefix), $filesystemConfig);
+ });
+
+ $this->registerAdapter('azure', function ($backendConfig) {
+ $endpoint = sprintf('DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s', $backendConfig['account'], $backendConfig['key']);
+ $blobRestProxy = ServicesBuilder::getInstance()->createBlobService($endpoint);
+
+ $prefix = isset($backendConfig['root']) ? trim($backendConfig['root'], '/ ') : null;
+
+ return $this->createBackend($backendConfig, new AzureAdapter($blobRestProxy, $backendConfig['container'], $prefix));
+ });
+ }
+
+ /**
+ * @param string $adapterName
+ * @param callable $instantiationCallback
+ */
+ public function registerAdapter($adapterName, callable $instantiationCallback)
+ {
+ $this->registeredAdapters[$adapterName] = $instantiationCallback;
+ }
+
+ /**
+ * Creates a backend file system.
+ *
+ * @param array $backendConfig
+ * @param AdapterInterface $adapter
+ * @param array|null $filesystemConfig
+ * @param CacheInterface|null $cache
+ *
+ * @return Backend
+ */
+ public function createBackend(array $backendConfig, AdapterInterface $adapter, array $filesystemConfig = null, CacheInterface $cache = null)
+ {
+ if ($adapter instanceof ContainerAwareInterface) {
+ $adapter->setContainer($this->app);
+ }
+
+ if (null === $cache) {
+ $cache = new MemoryCache();
+ }
+
+ $cachedAdapter = new CachedAdapter($adapter, $cache);
+
+ if (array_key_exists($backendConfig['adapter'], static::$trackedOperations)) {
+ $backendConfig['trackedOperations'] = static::$trackedOperations[$backendConfig['adapter']];
+ }
+
+ return new Backend($backendConfig, $this->app, $cachedAdapter, $filesystemConfig);
+ }
+
+ /**
+ * Returns the backend object by name.
+ *
+ * @param string $backendName
+ *
+ * @return Backend
+ *
+ * @throws \InvalidArgumentException
+ * @throws CKFinderException
+ */
+ public function getBackend($backendName)
+ {
+ if (isset($this->backends[$backendName])) {
+ return $this->backends[$backendName];
+ }
+
+ $backendConfig = $this->config->getBackendNode($backendName);
+ $adapterName = $backendConfig['adapter'];
+
+ if (!isset($this->registeredAdapters[$adapterName])) {
+ throw new \InvalidArgumentException(sprintf('Backends adapter "%s" not found. Please check configuration file.', $adapterName));
+ }
+
+ if (!is_callable($this->registeredAdapters[$adapterName])) {
+ throw new \InvalidArgumentException(sprintf('Backend instantiation callback for adapter "%s" is not a callable.', $adapterName));
+ }
+
+ $backend = call_user_func($this->registeredAdapters[$adapterName], $backendConfig);
+
+ if (!$backend instanceof Backend) {
+ throw new CKFinderException(sprintf('The instantiation callback for adapter "%s" didn\'t return a valid Backend object.', $adapterName));
+ }
+
+ $this->backends[$backendName] = $backend;
+
+ return $backend;
+ }
+
+ /**
+ * Returns the backend object for a given private directory identifier.
+ *
+ * @param string $privateDirIdentifier
+ *
+ * @return Backend
+ */
+ public function getPrivateDirBackend($privateDirIdentifier)
+ {
+ $privateDirConfig = $this->config->get('privateDir');
+
+ if (!array_key_exists($privateDirIdentifier, $privateDirConfig)) {
+ throw new \InvalidArgumentException(sprintf('Private dir with identifier %s not found. Please check configuration file.', $privateDirIdentifier));
+ }
+
+ $privateDir = $privateDirConfig[$privateDirIdentifier];
+
+ $backend = null;
+
+ if (is_array($privateDir) && array_key_exists('backend', $privateDir)) {
+ $backend = $this->getBackend($privateDir['backend']);
+ } else {
+ $backend = $this->getBackend($privateDirConfig['backend']);
+ }
+
+ // Create a default .htaccess to disable access to current private directory
+ $privateDirPath = $this->config->getPrivateDirPath($privateDirIdentifier);
+ $htaccessPath = Path::combine($privateDirPath, '.htaccess');
+ if (!$backend->has($htaccessPath)) {
+ $backend->write($htaccessPath, "Order Deny,Allow\nDeny from all\n");
+ }
+
+ return $backend;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php
new file mode 100644
index 0000000..f493eee
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CKFinder.php
@@ -0,0 +1,614 @@
+Pimple
+ * so it also serves as a dependency injection container.
+ *
+ * @copyright 2016 CKSource - Frederico Knabben
+ */
+class CKFinder extends Container implements HttpKernelInterface
+{
+ const VERSION = '3.3.0';
+
+ const COMMANDS_NAMESPACE = 'CKSource\\CKFinder\\Command\\';
+ const PLUGINS_NAMESPACE = 'CKSource\\CKFinder\\Plugin\\';
+
+ const CHARS = '123456789ABCDEFGHJKLMNPQRSTUVWXYZ';
+
+ protected $plugins = array();
+
+ protected $booted = false;
+
+ /**
+ * Constructor.
+ *
+ * @param array|string $config an array containing configuration options or a path
+ * to the configuration file.
+ *
+ * @see config.php
+ */
+ public function __construct($config)
+ {
+ parent::__construct();
+
+ $app = $this;
+
+ $this['config'] = function () use ($config) {
+ return new Config($config);
+ };
+
+ $this['authentication'] = function () use ($app) {
+ $config = $app['config'];
+
+ return new CallableAuthentication($config->get('authentication'));
+ };
+
+ $this['exception_handler'] = function () use ($app) {
+ return new ExceptionHandler($app['translator'], $app['debug'], $app['logger']);
+ };
+
+ $this['dispatcher'] = function () use ($app) {
+ $eventDispatcher = new EventDispatcher();
+
+ $eventDispatcher->addListener(KernelEvents::VIEW, array($this, 'createResponse'), -512);
+ $eventDispatcher->addListener(KernelEvents::RESPONSE, array($this, 'afterCommand'), -512);
+
+ $eventDispatcher->addSubscriber($app['exception_handler']);
+
+ return $eventDispatcher;
+ };
+
+ $this['resolver'] = function () use ($app) {
+ $commandResolver = new CommandResolver($app);
+ $commandResolver->setCommandsNamespace(CKFinder::COMMANDS_NAMESPACE);
+ $commandResolver->setPluginsNamespace(CKFinder::PLUGINS_NAMESPACE);
+
+ return $commandResolver;
+ };
+
+ $this['request_stack'] = function () {
+ return new RequestStack();
+ };
+
+ $this['request_transformer'] = function () {
+ return new JsonTransformer();
+ };
+
+ $this['working_folder'] = function () use ($app) {
+ $workingFolder = new WorkingFolder($app);
+
+ $this['dispatcher']->addSubscriber($workingFolder);
+
+ return $workingFolder;
+ };
+
+ $this['operation'] = function () use ($app) {
+ return new OperationManager($app);
+ };
+
+ $this['kernel'] = function () use ($app) {
+ return new HttpKernel($app['dispatcher'], $app['resolver'], $app['request_stack']);
+ };
+
+ $this['acl'] = function () use ($app) {
+ $config = $app['config'];
+
+ $roleContext = new SessionRoleContext($config->get('roleSessionVar'));
+
+ $acl = new Acl($roleContext);
+ $acl->setRules($config->get('accessControl'));
+
+ return $acl;
+ };
+
+ $this['backend_factory'] = function () use ($app) {
+ return new BackendFactory($app);
+ };
+
+ $this['resource_type_factory'] = function () use ($app) {
+ return new ResourceTypeFactory($app);
+ };
+
+ $this['thumbnail_repository'] = function () use ($app) {
+ return new ThumbnailRepository($app);
+ };
+
+ $this['resized_image_repository'] = function () use ($app) {
+ return new ResizedImageRepository($app);
+ };
+
+ $this['cache'] = function () use ($app) {
+ $cacheBackend = $app['backend_factory']->getPrivateDirBackend('cache');
+ $cacheDir = $app['config']->getPrivateDirPath('cache') . '/data';
+
+ return new CacheManager(new BackendAdapter($cacheBackend, $cacheDir));
+ };
+
+ $this['translator'] = function () {
+ return new Translator();
+ };
+
+ $this['debug'] = $app['config']->get('debug');
+
+ $this['logger'] = function () use ($app) {
+ $logger = new Logger('CKFinder');
+
+ if ($app['config']->isDebugLoggerEnabled('firephp')) {
+ $logger->pushHandler(new FirePHPHandler());
+ }
+
+ if ($app['config']->isDebugLoggerEnabled('error_log')) {
+ $logger->pushHandler(new ErrorLogHandler());
+ }
+
+ return $logger;
+ };
+
+ if ($app['config']->get('csrfProtection')) {
+ $config = $app['config'];
+
+ $this['csrf_token_validator'] = function () use ($config) {
+ return new DoubleSubmitCookieTokenValidator();
+ };
+ }
+ }
+
+ /**
+ * Checks authentication.
+ */
+ public function checkAuth()
+ {
+ /* @var $authentication \CKSource\CKFinder\Authentication\AuthenticationInterface */
+ $authentication = $this['authentication'];
+
+ if (!$authentication->authenticate()) {
+ ini_set('display_errors', 0);
+ throw new CKFinderException('CKFinder is disabled', Error::CONNECTOR_DISABLED);
+ }
+ }
+
+ /**
+ * Validates the CSRF token.
+ *
+ * @param Request $request
+ *
+ * @throws InvalidCsrfTokenException
+ */
+ public function checkCsrfToken(Request $request)
+ {
+ if ($request->getMethod() === Request::METHOD_GET) {
+ return;
+ }
+
+ /* @var $csrfTokenValidator \CKSource\CKFinder\Security\Csrf\TokenValidatorInterface */
+ $csrfTokenValidator = $this['csrf_token_validator'];
+
+ if (!$csrfTokenValidator->validate($request)) {
+ throw new InvalidCsrfTokenException();
+ }
+ }
+
+ /**
+ * Creates a response.
+ *
+ * @param GetResponseForControllerResultEvent $event
+ */
+ public function createResponse(GetResponseForControllerResultEvent $event)
+ {
+ /* @var $dispatcher EventDispatcher */
+ $dispatcher = $this['dispatcher'];
+
+ $commandName = $event->getRequest()->get('command');
+ $eventName = CKFinderEvent::CREATE_RESPONSE_PREFIX . lcfirst($commandName);
+ $dispatcher->dispatch($eventName, $event);
+
+ $controllerResult = $event->getControllerResult();
+ $event->setResponse(JsonResponse::create($controllerResult));
+ }
+
+ /**
+ * Fires `afterCommand` events.
+ *
+ * @param FilterResponseEvent $event
+ *
+ * @return \Symfony\Component\HttpFoundation\Response|static
+ */
+ public function afterCommand(FilterResponseEvent $event)
+ {
+ /* @var $dispatcher EventDispatcher */
+ $dispatcher = $this['dispatcher'];
+
+ $commandName = $event->getRequest()->get('command');
+ $eventName = CKFinderEvent::AFTER_COMMAND_PREFIX . lcfirst($commandName);
+ $afterCommandEvent = new AfterCommandEvent($this, $commandName, $event->getResponse());
+ $dispatcher->dispatch($eventName, $afterCommandEvent);
+
+ // #161 Clear any garbage from the output
+ Response::closeOutputBuffers(0, false);
+
+ $event->setResponse($afterCommandEvent->getResponse());
+ }
+
+ /**
+ * Registers a listener for an event.
+ *
+ * @param string $eventName event name
+ * @param callable $listener listener callable
+ * @param int $priority priority
+ */
+ public function on($eventName, $listener, $priority = 0)
+ {
+ /* @var $dispatcher EventDispatcher */
+ $dispatcher = $this['dispatcher'];
+
+ $dispatcher->addListener($eventName, $listener, $priority);
+ }
+
+ /**
+ * Main method used to handle a request by CKFinder.
+ *
+ * @param Request $request request object
+ */
+ public function run(Request $request = null)
+ {
+ $request = null === $request ? Request::createFromGlobals() : $request;
+
+ /* @var $kernel HttpKernel */
+ $kernel = $this['kernel'];
+
+ $response = $this->handle($request);
+ $response->send();
+
+ $kernel->terminate($request, $response);
+ }
+
+ /**
+ * Returns the BackedFactory service.
+ *
+ * @return BackendFactory
+ */
+ public function getBackendFactory()
+ {
+ return $this['backend_factory'];
+ }
+
+ /**
+ * Returns the ACL service.
+ *
+ * @return Acl
+ */
+ public function getAcl()
+ {
+ return $this['acl'];
+ }
+
+ /**
+ * Returns the current WorkingFolder object.
+ *
+ * @return WorkingFolder
+ */
+ public function getWorkingFolder()
+ {
+ return $this['working_folder'];
+ }
+
+ /**
+ * Shorthand for debugging using the defined logger.
+ *
+ * @param string $message
+ * @param array $context
+ */
+ public function debug($message, array $context = array())
+ {
+ $logger = $this['logger'];
+
+ if ($logger) {
+ $logger->debug($message, $context);
+ }
+ }
+
+ /**
+ * Registers plugins defined in the configuration file.
+ *
+ * @throws \LogicException in case the plugin was not found or is invalid.
+ */
+ protected function registerPlugins()
+ {
+ $pluginsEntries = $this['config']->get('plugins');
+ $pluginsDirectory = $this['config']->get('pluginsDirectory');
+
+ foreach ($pluginsEntries as $pluginInfo) {
+ if (is_array($pluginInfo)) {
+ $pluginName = ucfirst($pluginInfo['name']);
+ if (isset($pluginInfo['path'])) {
+ require_once $pluginInfo['path'];
+ }
+ } else {
+ $pluginName = ucfirst($pluginInfo);
+ }
+
+ $pluginPath = Path::combine($pluginsDirectory, $pluginName, $pluginName . '.php');
+
+ if (file_exists($pluginPath) && is_readable($pluginPath)) {
+ require_once $pluginPath;
+ }
+
+ $pluginClassName = CKFinder::PLUGINS_NAMESPACE . $pluginName . '\\' . $pluginName;
+
+ if (!class_exists($pluginClassName)) {
+ throw new InvalidPluginException(sprintf('CKFinder plugin "%s" not found (%s)', $pluginName, $pluginClassName), array('pluginName' => $pluginName));
+ }
+
+ $pluginObject = new $pluginClassName($this);
+
+ if ($pluginObject instanceof PluginInterface) {
+ $this->registerPlugin($pluginObject);
+ } else {
+ throw new InvalidPluginException(sprintf('CKFinder plugin class must implement %sPluginInterface', CKFinder::PLUGINS_NAMESPACE), array('pluginName' => $pluginName));
+ }
+ }
+ }
+
+ /**
+ * Registers the plugin.
+ *
+ * @param PluginInterface $plugin
+ */
+ public function registerPlugin(PluginInterface $plugin)
+ {
+ $plugin->setContainer($this);
+
+ $pluginNameParts = explode('\\', get_class($plugin));
+ $pluginName = end($pluginNameParts);
+
+ $this['config']->extend($pluginName, $plugin->getDefaultConfig());
+
+ if ($plugin instanceof EventSubscriberInterface) {
+ $this['dispatcher']->addSubscriber($plugin);
+ }
+
+ $this->plugins[$pluginName] = $plugin;
+ }
+
+ /**
+ * Returns an array containing all registered plugins.
+ *
+ * @return array array of PluginInterface-s
+ */
+ public function getPlugins()
+ {
+ return $this->plugins;
+ }
+
+ /**
+ * Returns a plugin by the name.
+ *
+ * @param string $name plugin name
+ *
+ * @return null|PluginInterface
+ *
+ */
+ public function getPlugin($name)
+ {
+ if (isset($this->plugins[$name])) {
+ return $this->plugins[$name];
+ }
+
+ return null;
+ }
+
+ /**
+ * Checks PHP requirements.
+ *
+ * @throws CKFinderException
+ */
+ protected function checkRequirements()
+ {
+ $errorMessage = 'The PHP installation does not meet the minimum system requirements for CKFinder. %s Please refer to CKFinder documentation for more details.';
+
+ if (version_compare(PHP_VERSION, '5.4.0') < 0) {
+ throw new CKFinderException(sprintf($errorMessage, 'Your PHP version is too old. CKFinder 3.x requires PHP 5.4+.'), Error::CUSTOM_ERROR);
+ }
+
+ $missingExtensions = array();
+
+ if (!function_exists('gd_info')) {
+ $missingExtensions[] = 'GD';
+ }
+
+ if (!function_exists('finfo_file')) {
+ $missingExtensions[] = 'Fileinfo';
+ }
+
+ if (!empty($missingExtensions)) {
+ throw new CKFinderException(sprintf($errorMessage, 'Missing PHP extensions: ' . implode(', ', $missingExtensions) . '.'), Error::CUSTOM_ERROR);
+ }
+ }
+
+ /**
+ * Prepares application environment before the Request is dispatched.
+ *
+ * @param Request $request
+ *
+ * @throws CKFinderException
+ * @throws InvalidPluginException
+ */
+ public function boot(Request $request)
+ {
+ if ($this->booted) {
+ return;
+ }
+
+ $this->booted = true;
+
+ $config = $this['config'];
+
+ $this->checkRequirements();
+
+ if ($config->get('debug') && $config->isDebugLoggerEnabled('ckfinder_log')) {
+ $this->registerStreamLogger();
+ }
+
+ $this->checkAuth();
+
+ if ($config->get('csrfProtection')) {
+ $this->checkCsrfToken($request);
+ }
+
+ $this->registerPlugins();
+
+ $commandName = (string) $request->query->get('command');
+
+ if ($config->get('sessionWriteClose') && $commandName !== 'Init' && session_status() === PHP_SESSION_ACTIVE) {
+ session_write_close();
+ }
+ }
+
+ /**
+ * Registers a stream handler for error logging.
+ */
+ public function registerStreamLogger()
+ {
+ $app = $this;
+
+ /* @var $logsBackend \CKSource\CKFinder\Backend\Backend */
+ $logsBackend = $app['backend_factory']->getPrivateDirBackend('logs');
+
+ $adapter = $logsBackend->getBaseAdapter();
+
+ if ($adapter instanceof LocalFSAdapter) {
+ $logsDir = $app['config']->getPrivateDirPath('logs');
+
+ $errorLogPath = Path::combine($logsDir, 'error.log');
+
+ $logPath = $adapter->applyPathPrefix($errorLogPath);
+
+ $app['logger']->pushHandler(new StreamHandler($logPath));
+ }
+ }
+
+ /**
+ * @param Request $request
+ * @param int $type
+ * @param bool $catch
+ *
+ * @return \Symfony\Component\HttpFoundation\Response
+ * @throws \Exception
+ */
+ public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
+ {
+ /* @var $kernel HttpKernel */
+ $kernel = $this['kernel'];
+
+ /* @var $requestTransformer \CKSource\CKFinder\Request\Transformer\TransformerInterface */
+ $requestTransformer = $this['request_transformer'];
+
+ if ($requestTransformer) {
+ $request = $requestTransformer->transform($request);
+ }
+
+ // Handle early exceptions
+ if (!$this->booted) {
+ try {
+ $this->boot($request);
+ } catch (\Exception $e) {
+ $this['request_stack']->push($request);
+ $kernel->terminateWithException($e);
+ exit;
+ }
+ }
+
+ return $kernel->handle($request, $type, $catch);
+ }
+
+ /**
+ * Returns the current request object.
+ *
+ * @return Request
+ */
+ public function getRequest()
+ {
+ /* @var $requestStack RequestStack */
+ $requestStack = $this['request_stack'];
+
+ return $requestStack->getCurrentRequest();
+ }
+
+ /**
+ * Returns the resized image repository.
+ *
+ * @return ResizedImageRepository
+ */
+ public function getResizedImageRepository()
+ {
+ return $this['resized_image_repository'];
+ }
+
+ /**
+ * Returns the connector URL based on the current request.
+ *
+ * @param bool|true $full if set to `true`, the returned URL contains the scheme and host.
+ *
+ * @return string
+ */
+ public function getConnectorUrl($full = true)
+ {
+ $request = $this->getRequest();
+
+ return ($full ? $request->getSchemeAndHttpHost() : '').$request->getBaseUrl();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Cache/Adapter/AdapterInterface.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Cache/Adapter/AdapterInterface.php
new file mode 100644
index 0000000..a6bbe49
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Cache/Adapter/AdapterInterface.php
@@ -0,0 +1,64 @@
+backend = $backend;
+ $this->cachePath = $path;
+ }
+
+ /**
+ * Creates backend-relative path for cache file for given key
+ *
+ * @param string $key
+ * @param bool $prefix
+ *
+ * @return string
+ */
+ public function createCachePath($key, $prefix = false)
+ {
+ return Path::combine($this->cachePath, trim($key, '/') . ($prefix ? '' : '.cache'));
+ }
+
+ /**
+ * Sets the value in cache under given key
+ *
+ * @param string $key
+ * @param mixed $value
+ *
+ * @return bool true if successful
+ */
+ public function set($key, $value)
+ {
+ return $this->backend->put($this->createCachePath($key), serialize($value));
+ }
+
+ /**
+ * Returns value under given key from cache
+ *
+ * @param string $key
+ *
+ * @return null|array
+ */
+ public function get($key)
+ {
+ $cachePath = $this->createCachePath($key);
+
+ if (!$this->backend->has($cachePath)) {
+ return null;
+ }
+
+ return unserialize($this->backend->read($cachePath));
+ }
+
+ /**
+ * Deletes value under given key from cache
+ *
+ * @param string $key
+ *
+ * @return bool true if successful
+ */
+ public function delete($key)
+ {
+ $cachePath = $this->createCachePath($key);
+
+ if (!$this->backend->has($cachePath)) {
+ return false;
+ }
+
+ $this->backend->delete($cachePath);
+
+ $dirs = explode('/', dirname($cachePath));
+
+ do {
+ $dirPath = implode('/', $dirs);
+ $contents = $this->backend->listContents($dirPath);
+
+ if (!empty($contents)) {
+ break;
+ }
+
+ $this->backend->deleteDir($dirPath);
+ array_pop($dirs);
+ } while (!empty($dirs));
+ }
+
+ /**
+ * Deletes all cache entries with given key prefix
+ *
+ * @param string $keyPrefix
+ *
+ * @return bool true if successful
+ */
+ public function deleteByPrefix($keyPrefix)
+ {
+ $cachePath = $this->createCachePath($keyPrefix, true);
+ if ($this->backend->hasDirectory($cachePath)) {
+ return $this->backend->deleteDir($cachePath);
+ }
+
+ return false;
+ }
+
+ /**
+ * Changes prefix for all entries given key prefix
+ *
+ * @param string $sourcePrefix
+ * @param string $targetPrefix
+ *
+ * @return bool true if successful
+ */
+ public function changePrefix($sourcePrefix, $targetPrefix)
+ {
+ $sourceCachePath = $this->createCachePath($sourcePrefix, true);
+
+ if (!$this->backend->hasDirectory($sourceCachePath)) {
+ return false;
+ }
+
+ $targetCachePath = $this->createCachePath($targetPrefix, true);
+
+ return $this->backend->rename($sourceCachePath, $targetCachePath);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Cache/CacheManager.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Cache/CacheManager.php
new file mode 100644
index 0000000..1bad908
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Cache/CacheManager.php
@@ -0,0 +1,132 @@
+adapter = $adapter;
+ }
+
+ /**
+ * Sets the value in cache for a given key.
+ *
+ * @param string $key
+ * @param mixed $value
+ *
+ * @return bool `true` if successful.
+ */
+ public function set($key, $value)
+ {
+ return $this->adapter->set($key, $value);
+ }
+
+ /**
+ * Returns the value for a given key from cache.
+ *
+ * @param string $key
+ *
+ * @return array
+ */
+ public function get($key)
+ {
+ return $this->adapter->get($key);
+ }
+
+ /**
+ * Deletes the value under a given key from cache.
+ *
+ * @param string $key
+ *
+ * @return bool `true` if successful.
+ */
+ public function delete($key)
+ {
+ return $this->adapter->delete($key);
+ }
+
+ /**
+ * Copies the value for a given key to another key.
+ *
+ * @param string $sourceKey
+ * @param string $targetKey
+ *
+ * @return bool `true` if successful.
+ */
+ public function copy($sourceKey, $targetKey)
+ {
+ $value = $this->adapter->get($sourceKey);
+
+ if (null === $value) {
+ return false;
+ }
+
+ return $this->adapter->set($targetKey, $value);
+ }
+
+ /**
+ * Moves the value for a given key to another key.
+ *
+ * @param string $sourceKey
+ * @param string $targetKey
+ *
+ * @return bool `true` if successful.
+ */
+ public function move($sourceKey, $targetKey)
+ {
+ return $this->copy($sourceKey, $targetKey) && $this->delete($sourceKey);
+ }
+
+ /**
+ * Deletes all cache entries with a given key prefix.
+ *
+ * @param string $keyPrefix
+ *
+ * @return bool `true` if successful.
+ */
+ public function deleteByPrefix($keyPrefix)
+ {
+ return $this->adapter->deleteByPrefix($keyPrefix);
+ }
+
+ /**
+ * Changes the prefix for all entries given a key prefix.
+ *
+ * @param string $sourcePrefix
+ * @param string $targetPrefix
+ *
+ * @return bool `true` if successful.
+ */
+ public function changePrefix($sourcePrefix, $targetPrefix)
+ {
+ return $this->adapter->changePrefix($sourcePrefix, $targetPrefix);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/CommandAbstract.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/CommandAbstract.php
new file mode 100644
index 0000000..756ad9f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/CommandAbstract.php
@@ -0,0 +1,104 @@
+setContainer($app);
+ }
+
+ /**
+ * Injects dependency injection container to the command scope.
+ *
+ * @param CKFinder $app
+ */
+ public function setContainer(CKFinder $app)
+ {
+ $this->app = $app;
+ }
+
+ /**
+ * Checks permissions required by the command before it is executed.
+ *
+ * @throws \Exception if access is restricted.
+ */
+ public function checkPermissions()
+ {
+ if (!empty($this->requires)) {
+ $workingFolder = $this->app->getWorkingFolder();
+
+ $aclMask = $workingFolder->getAclMask();
+
+ $requiredPermissionsMask = array_sum($this->requires);
+
+ if (($aclMask & $requiredPermissionsMask) !== $requiredPermissionsMask) {
+ throw new UnauthorizedException();
+ }
+ }
+ }
+
+ /**
+ * Returns the name of the request method required by the command.
+ *
+ * @return string
+ */
+ public function getRequestMethod()
+ {
+ return $this->requestMethod;
+ }
+
+ /**
+ * This method is not defined as abstract to allow for parameter injection.
+ * @see CKSource\CKFinder\CommandResolver::getArguments()
+ */
+ // public abstract function execute();
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/CopyFiles.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/CopyFiles.php
new file mode 100644
index 0000000..0228b96
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/CopyFiles.php
@@ -0,0 +1,101 @@
+request->get('files');
+
+ $copied = 0;
+
+ $errors = array();
+
+ // Initial validation
+ foreach ($copiedFiles as $arr) {
+ if (!isset($arr['name'], $arr['type'], $arr['folder'])) {
+ throw new InvalidRequestException();
+ }
+
+ if (!$acl->isAllowed($arr['type'], $arr['folder'], Permission::FILE_VIEW)) {
+ throw new UnauthorizedException();
+ }
+ }
+
+ foreach ($copiedFiles as $arr) {
+ if (empty($arr['name'])) {
+ continue;
+ }
+
+ $name = $arr['name'];
+ $type = $arr['type'];
+ $folder = $arr['folder'];
+
+ $resourceType = $resourceTypeFactory->getResourceType($type);
+
+ $copiedFile = new CopiedFile($name, $folder, $resourceType, $this->app);
+
+ $options = isset($arr['options']) ? $arr['options'] : '';
+
+ $copiedFile->setCopyOptions($options);
+
+
+ if ($copiedFile->isValid()) {
+ $copyFileEvent = new CopyFileEvent($this->app, $copiedFile);
+ $dispatcher->dispatch(CKFinderEvent::COPY_FILE, $copyFileEvent);
+
+ if (!$copyFileEvent->isPropagationStopped()) {
+ if ($copiedFile->doCopy()) {
+ $copied++;
+ }
+ }
+ }
+
+ $errors = array_merge($errors, $copiedFile->getErrors());
+ }
+
+ $data = array('copied' => $copied);
+
+ if (!empty($errors)) {
+ $data['error'] = array(
+ 'number' => Error::COPY_FAILED,
+ 'errors' => $errors
+ );
+ }
+
+ return $data;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/CreateFolder.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/CreateFolder.php
new file mode 100644
index 0000000..5d50c87
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/CreateFolder.php
@@ -0,0 +1,47 @@
+query->get('newFolderName', '');
+
+ $createFolderEvent = new CreateFolderEvent($this->app, $workingFolder, $newFolderName);
+
+ $dispatcher->dispatch(CKFinderEvent::CREATE_FOLDER, $createFolderEvent);
+
+ $created = false;
+
+ if (!$createFolderEvent->isPropagationStopped()) {
+ $newFolderName = $createFolderEvent->getNewFolderName();
+ $created = $workingFolder->createDir($newFolderName);
+ }
+
+ return array('newFolder' => $newFolderName, 'created' => (int) $created);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/DeleteFiles.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/DeleteFiles.php
new file mode 100644
index 0000000..23559f3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/DeleteFiles.php
@@ -0,0 +1,94 @@
+request->get('files');
+
+ $deleted = 0;
+
+ $errors = array();
+
+ // Initial validation
+ foreach ($deletedFiles as $arr) {
+ if (!isset($arr['name'], $arr['type'], $arr['folder'])) {
+ throw new InvalidRequestException('Invalid request');
+ }
+
+ if (!$acl->isAllowed($arr['type'], $arr['folder'], Permission::FILE_DELETE)) {
+ throw new UnauthorizedException();
+ }
+ }
+
+ foreach ($deletedFiles as $arr) {
+ if (empty($arr['name'])) {
+ continue;
+ }
+
+ $name = $arr['name'];
+ $type = $arr['type'];
+ $folder = $arr['folder'];
+
+ $resourceType = $resourceTypeFactory->getResourceType($type);
+
+ $deletedFile = new DeletedFile($name, $folder, $resourceType, $this->app);
+
+ if ($deletedFile->isValid()) {
+ $deleteFileEvent = new DeleteFileEvent($this->app, $deletedFile);
+ $dispatcher->dispatch(CKFinderEvent::DELETE_FILE, $deleteFileEvent);
+
+ if (!$deleteFileEvent->isPropagationStopped()) {
+ if ($deletedFile->doDelete()) {
+ $deleted++;
+ }
+ }
+ }
+
+ $errors = array_merge($errors, $deletedFile->getErrors());
+ }
+
+ $data = array('deleted' => $deleted);
+
+ if (!empty($errors)) {
+ $data['error'] = array(
+ 'number' => Error::DELETE_FAILED,
+ 'errors' => $errors
+ );
+ }
+
+ return $data;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/DeleteFolder.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/DeleteFolder.php
new file mode 100644
index 0000000..6b2768b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/DeleteFolder.php
@@ -0,0 +1,55 @@
+getClientCurrentFolder() === '/') {
+ throw new InvalidRequestException('Cannot delete resource type root folder');
+ }
+
+ $deleteFolderEvent = new DeleteFolderEvent($this->app, $workingFolder);
+
+ $dispatcher->dispatch(CKFinderEvent::DELETE_FOLDER, $deleteFolderEvent);
+
+ $deleted = false;
+
+ if (!$deleteFolderEvent->isPropagationStopped()) {
+ $deleted = $workingFolder->delete();
+ }
+
+ if (!$deleted) {
+ throw new AccessDeniedException();
+ }
+
+ return array('deleted' => (int) $deleted);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/DownloadFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/DownloadFile.php
new file mode 100644
index 0000000..536545b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/DownloadFile.php
@@ -0,0 +1,85 @@
+query->get('fileName');
+
+ $downloadedFile = new DownloadedFile($fileName, $this->app);
+
+ $downloadedFile->isValid();
+
+ $downloadedFileEvent = new DownloadFileEvent($this->app, $downloadedFile);
+
+ $dispatcher->dispatch(CKFinderEvent::DOWNLOAD_FILE, $downloadedFileEvent);
+
+ if ($downloadedFileEvent->isPropagationStopped()) {
+ throw new AccessDeniedException();
+ }
+
+ $response = new StreamedResponse();
+
+ $response->headers->set('Cache-Control', 'cache, must-revalidate');
+ $response->headers->set('Pragma', 'public');
+ $response->headers->set('Expires', '0');
+
+ if ($request->get('format') === 'text') {
+ $response->headers->set('Content-Type', 'text/plain; charset=utf-8');
+ } else {
+ $userAgent = !empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
+ $encodedName = str_replace("\"", "\\\"", $fileName);
+ if (strpos($userAgent, 'MSIE') !== false) {
+ $encodedName = str_replace(array("+", "%2E"), array(" ", "."), urlencode($encodedName));
+ }
+ $response->headers->set('Content-Type', 'application/octet-stream; name="' . $fileName . '"');
+ $response->headers->set('Content-Disposition', 'attachment; filename="' . $encodedName. '"');
+ }
+
+ $response->headers->set('Content-Length', $downloadedFile->getSize());
+
+ $fileStream = $workingFolder->readStream($downloadedFile->getFilename());
+ $chunkSize = 1024 * 100; // how many bytes per chunk
+
+ $response->setCallback(function () use ($fileStream, $chunkSize) {
+ if ($fileStream === false) {
+ return false;
+ }
+ while (!feof($fileStream)) {
+ echo fread($fileStream, $chunkSize);
+ flush();
+ @set_time_limit(8);
+ }
+
+ return true;
+ });
+
+ return $response;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php
new file mode 100644
index 0000000..89682e3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/FileUpload.php
@@ -0,0 +1,173 @@
+get('asPlainText')) {
+ $uploadEvents = array(
+ CKFinderEvent::AFTER_COMMAND_FILE_UPLOAD,
+ CKFinderEvent::AFTER_COMMAND_QUICK_UPLOAD
+ );
+
+ foreach ($uploadEvents as $eventName) {
+ $dispatcher->addListener($eventName, function (AfterCommandEvent $event) {
+ $response = $event->getResponse();
+ $response->headers->set('Content-Type', 'text/plain');
+ });
+ }
+ }
+
+ $uploaded = 0;
+
+ $warningErrorCode = null;
+ $upload = $request->files->get('upload');
+
+ if (null === $upload) {
+ throw new InvalidUploadException();
+ }
+
+ $uploadedFile = new UploadedFile($upload, $this->app);
+
+ if (!$uploadedFile->isValid()) {
+ throw new InvalidUploadException($uploadedFile->getErrorMessage());
+ }
+
+ $uploadedFile->sanitizeFilename();
+
+ if ($uploadedFile->wasRenamed()) {
+ $warningErrorCode = Error::UPLOADED_INVALID_NAME_RENAMED;
+ }
+
+ if (!$uploadedFile->hasValidFilename() || $uploadedFile->isHiddenFile()) {
+ throw new InvalidNameException();
+ }
+
+ if (!$uploadedFile->hasAllowedExtension()) {
+ throw new InvalidExtensionException();
+ }
+
+ // Autorename if required
+ $overwriteOnUpload = $config->get('overwriteOnUpload');
+ if (!$overwriteOnUpload && $uploadedFile->autorename()) {
+ $warningErrorCode = Error::UPLOADED_FILE_RENAMED;
+ }
+
+ $fileName = $uploadedFile->getFilename();
+
+ if (!$uploadedFile->isAllowedHtmlFile() && $uploadedFile->containsHtml()) {
+ throw new InvalidUploadException('HTML detected in disallowed file type', Error::UPLOADED_WRONG_HTML_FILE);
+ }
+
+ if ($config->get('secureImageUploads') && $uploadedFile->isImage() && !$uploadedFile->isValidImage()) {
+ throw new InvalidUploadException('Invalid upload: corrupted image', Error::UPLOADED_CORRUPT);
+ }
+
+ $maxFileSize = $workingFolder->getResourceType()->getMaxSize();
+
+ if (!$config->get('checkSizeAfterScaling') && $maxFileSize && $uploadedFile->getSize() > $maxFileSize) {
+ throw new InvalidUploadException('Uploaded file is too big', Error::UPLOADED_TOO_BIG);
+ }
+
+ if (Image::isSupportedExtension($uploadedFile->getExtension())) {
+ $imagesConfig = $config->get('images');
+ $image = Image::create($uploadedFile->getContents());
+
+ if ($imagesConfig['maxWidth'] && $image->getWidth() > $imagesConfig['maxWidth'] ||
+ $imagesConfig['maxHeight'] && $image->getHeight() > $imagesConfig['maxHeight']) {
+ $image->resize($imagesConfig['maxWidth'], $imagesConfig['maxHeight'], $imagesConfig['quality']);
+ $imageData = $image->getData();
+ $uploadedFile->save($imageData);
+ }
+
+ $cache->set(
+ Path::combine(
+ $workingFolder->getResourceType()->getName(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName),
+ $image->getInfo()
+ );
+
+ unset($imageData);
+ unset($image);
+ }
+
+ if ($maxFileSize && $uploadedFile->getSize() > $maxFileSize) {
+ throw new InvalidUploadException('Uploaded file is too big', Error::UPLOADED_TOO_BIG);
+ }
+
+ $event = new FileUploadEvent($this->app, $uploadedFile);
+ $dispatcher->dispatch(CKFinderEvent::FILE_UPLOAD, $event);
+
+ if (!$event->isPropagationStopped()) {
+ $uploadedFileStream = $uploadedFile->getContentsStream();
+ $uploaded = (int) $workingFolder->putStream($fileName, $uploadedFileStream, $uploadedFile->getMimeType());
+
+ fclose($uploadedFileStream);
+
+ if ($overwriteOnUpload) {
+ $thumbsRepository->deleteThumbnails(
+ $workingFolder->getResourceType(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName
+ );
+ }
+
+ if (!$uploaded) {
+ $warningErrorCode = Error::ACCESS_DENIED;
+ }
+ }
+
+ $responseData = array(
+ 'fileName' => $fileName,
+ 'uploaded' => $uploaded
+ );
+
+ if ($warningErrorCode) {
+ $errorMessage = $this->app['translator']->translateErrorMessage($warningErrorCode, array('name' => $fileName));
+ $responseData['error'] = array(
+ 'number' => $warningErrorCode,
+ 'message' => $errorMessage
+ );
+ }
+
+ return $responseData;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetFileUrl.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetFileUrl.php
new file mode 100644
index 0000000..db6e5f5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetFileUrl.php
@@ -0,0 +1,46 @@
+get('fileName');
+ $thumbnail = (string) $request->get('thumbnail');
+
+ $fileNames = (array) $request->get('fileNames');
+
+ if (!empty($fileNames)) {
+ $urls = array();
+
+ foreach ($fileNames as $fileName) {
+ $urls[$fileName] = $workingFolder->getFileUrl($fileName);
+ }
+
+ return array('urls' => $urls);
+ }
+
+ return array(
+ 'url' => $workingFolder->getFileUrl($fileName, $thumbnail)
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetFiles.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetFiles.php
new file mode 100644
index 0000000..c743131
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetFiles.php
@@ -0,0 +1,49 @@
+listFiles();
+
+ $data->files = array();
+
+ foreach ($files as $file) {
+ $fileObject = array(
+ 'name' => $file['basename'],
+ 'date' => Utils::formatDate($file['timestamp']),
+ 'size' => Utils::formatSize($file['size'])
+ );
+
+ $data->files[] = $fileObject;
+ }
+
+ // Sort files
+ usort($data->files, function ($a, $b) {
+ return strnatcasecmp($a['name'], $b['name']);
+ });
+
+ return $data;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetFolders.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetFolders.php
new file mode 100644
index 0000000..36dea6b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetFolders.php
@@ -0,0 +1,51 @@
+listDirectories();
+
+ $data = new \stdClass();
+ $data->folders = array();
+
+ $backend = $workingFolder->getBackend();
+
+ $resourceType = $workingFolder->getResourceType();
+
+ foreach ($directories as $directory) {
+ $data->folders[] = array(
+ 'name' => $directory['basename'],
+ 'hasChildren' => $backend->containsDirectories($resourceType, Path::combine($workingFolder->getClientCurrentFolder(), $directory['basename'])),
+ 'acl' => $directory['acl']
+ );
+ }
+
+ // Sort folders
+ usort($data->folders, function ($a, $b) {
+ return strnatcasecmp($a['name'], $b['name']);
+ });
+
+ return $data;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetResizedImages.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetResizedImages.php
new file mode 100644
index 0000000..07f9801
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/GetResizedImages.php
@@ -0,0 +1,74 @@
+get('fileName');
+ $sizes = (string) $request->get('sizes');
+
+ $ext = pathinfo($fileName, PATHINFO_EXTENSION);
+
+ if (!Image::isSupportedExtension($ext)) {
+ throw new InvalidRequestException('Invalid file extension');
+ }
+
+ if ($sizes) {
+ $sizes = explode(',', $sizes);
+ if (array_diff($sizes, array_keys($config->get('images.sizes')))) {
+ throw new InvalidRequestException(sprintf('Invalid size requested'));
+ }
+ }
+
+ $data = array();
+
+ $cachedInfo = $cache->get(
+ Path::combine(
+ $workingFolder->getResourceType()->getName(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName
+ )
+ );
+
+ if ($cachedInfo && isset($cachedInfo['width']) && isset($cachedInfo['height'])) {
+ $data['originalSize'] = sprintf("%dx%d", $cachedInfo['width'], $cachedInfo['height']);
+ }
+
+ $resizedImages = $resizedImageRepository->getResizedImagesList(
+ $workingFolder->getResourceType(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName,
+ $sizes ?: array()
+ );
+
+ $data['resized'] = $resizedImages;
+
+ return $data;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImageEdit.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImageEdit.php
new file mode 100644
index 0000000..72eb5b0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImageEdit.php
@@ -0,0 +1,153 @@
+get('fileName');
+ $newFileName = (string) $request->get('newFileName');
+
+ $editedImage = new EditedImage($fileName, $this->app, $newFileName);
+
+ $resourceType = $workingFolder->getResourceType();
+
+ if (null === $newFileName) {
+ $resourceTypeName = $resourceType->getName();
+ $path = $workingFolder->getClientCurrentFolder();
+
+ if (!$acl->isAllowed($resourceTypeName, $path, Permission::FILE_DELETE)) {
+ throw new UnauthorizedException(sprintf('Unauthorized: no FILE_DELETE permission in %s:%s', $resourceTypeName, $path));
+ }
+ }
+
+ if (!Image::isSupportedExtension($editedImage->getExtension())) {
+ throw new InvalidExtensionException('Unsupported image type or not image file');
+ }
+
+ $image = Image::create($editedImage->getContents());
+
+ $actions = (array) $request->get('actions');
+
+ if (empty($actions)) {
+ throw new InvalidRequestException();
+ }
+
+ foreach ($actions as $actionInfo) {
+ if (!isset($actionInfo['action'])) {
+ throw new InvalidRequestException('ImageEdit: action name missing');
+ }
+
+ switch ($actionInfo['action']) {
+ case self::OPERATION_CROP:
+ if (!Utils::arrayContainsKeys($actionInfo, array('x', 'y', 'width', 'height'))) {
+ throw new InvalidRequestException();
+ }
+ $x = $actionInfo['x'];
+ $y = $actionInfo['y'];
+ $width = $actionInfo['width'];
+ $height = $actionInfo['height'];
+ $image->crop($x, $y, $width, $height);
+ break;
+
+ case self::OPERATION_ROTATE:
+ if (!isset($actionInfo['angle'])) {
+ throw new InvalidRequestException();
+ }
+ $degrees = $actionInfo['angle'];
+ $bgcolor = isset($actionInfo['bgcolor']) ? $actionInfo['bgcolor'] : 0;
+ $image->rotate($degrees, $bgcolor);
+ break;
+
+ case self::OPERATION_RESIZE:
+ if (!Utils::arrayContainsKeys($actionInfo, array('width', 'height'))) {
+ throw new InvalidRequestException();
+ }
+
+ $imagesConfig = $config->get('images');
+
+ $width = $imagesConfig['maxWidth'] && $actionInfo['width'] > $imagesConfig['maxWidth'] ? $imagesConfig['maxWidth'] : $actionInfo['width'];
+ $height = $imagesConfig['maxHeight'] && $actionInfo['height'] > $imagesConfig['maxHeight'] ? $imagesConfig['maxHeight'] : $actionInfo['height'];
+ $image->resize((int) $width, (int) $height, $imagesConfig['quality']);
+ break;
+ }
+ }
+
+ $editFileEvent = new EditFileEvent($this->app, $editedImage);
+
+ $editedImage->setNewContents($image->getData());
+ $editedImage->setNewDimensions($image->getWidth(), $image->getHeight());
+
+ if (!$editedImage->isValid()) {
+ throw new InvalidUploadException('Invalid file provided');
+ }
+
+ $dispatcher->dispatch(CKFinderEvent::EDIT_IMAGE, $editFileEvent);
+
+ $saved = false;
+
+ if (!$editFileEvent->isPropagationStopped()) {
+ $saved = $editedImage->save($editFileEvent->getNewContents());
+
+ //Remove thumbnails and resized images in case if file is overwritten
+ if ($newFileName === null && $saved) {
+ $thumbnailRepository->deleteThumbnails($resourceType, $workingFolder->getClientCurrentFolder(), $fileName);
+ $resizedImageRepository->deleteResizedImages($resourceType, $workingFolder->getClientCurrentFolder(), $fileName);
+ }
+ }
+
+ return array(
+ 'saved' => (int) $saved,
+ 'date' => Utils::formatDate(time())
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImageInfo.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImageInfo.php
new file mode 100644
index 0000000..0764e8b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImageInfo.php
@@ -0,0 +1,76 @@
+get('fileName');
+
+ if (null === $fileName || !File::isValidName($fileName, $config->get('disallowUnsafeCharacters'))) {
+ throw new InvalidRequestException('Invalid file name');
+ }
+
+ if (!Image::isSupportedExtension(pathinfo($fileName, PATHINFO_EXTENSION))) {
+ throw new InvalidNameException('Invalid source file name');
+ }
+
+ if (!$workingFolder->containsFile($fileName)) {
+ throw new FileNotFoundException();
+ }
+
+ $cachePath = Path::combine(
+ $workingFolder->getResourceType()->getName(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName
+ );
+
+ $imageInfo = array();
+
+ $cachedInfo = $cache->get($cachePath);
+
+ if ($cachedInfo && isset($cachedInfo['width']) && isset($cachedInfo['height'])) {
+ $imageInfo = $cachedInfo;
+ } else {
+ $file = new DownloadedFile($fileName, $this->app);
+
+ if ($file->isValid()) {
+ $image = Image::create($file->getContents());
+ $imageInfo = $image->getInfo();
+ $cache->set($cachePath, $imageInfo);
+ }
+ }
+
+ return $imageInfo;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImagePreview.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImagePreview.php
new file mode 100644
index 0000000..08bf682
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImagePreview.php
@@ -0,0 +1,123 @@
+query->get('fileName');
+ list($requestedWidth, $requestedHeight) = Image::parseSize((string) $request->get('size'));
+
+ $downloadedFile = new DownloadedFile($fileName, $this->app);
+ $downloadedFile->isValid();
+
+ if (!Image::isSupportedExtension(pathinfo($fileName, PATHINFO_EXTENSION), $config->get('thumbnails.bmpSupported'))) {
+ throw new InvalidExtensionException('Unsupported image type or not image file');
+ }
+
+ Utils::removeSessionCacheHeaders();
+
+ $response = new Response();
+ $response->setPublic();
+ $response->setEtag(dechex($downloadedFile->getTimestamp()) . "-" . dechex($downloadedFile->getSize()));
+
+ $lastModificationDate = new \DateTime();
+ $lastModificationDate->setTimestamp($downloadedFile->getTimestamp());
+
+ $response->setLastModified($lastModificationDate);
+
+ if ($response->isNotModified($request)) {
+ return $response;
+ }
+
+ $imagePreviewCacheExpires = (int) $config->get('cache.imagePreview');
+
+ if ($imagePreviewCacheExpires > 0) {
+ $response->setMaxAge($imagePreviewCacheExpires);
+
+ $expireTime = new \DateTime();
+ $expireTime->modify('+' . $imagePreviewCacheExpires . 'seconds');
+ $response->setExpires($expireTime);
+ }
+
+ $cachedInfoPath = Path::combine(
+ $workingFolder->getResourceType()->getName(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName
+ );
+
+ $cachedInfo = $cache->get($cachedInfoPath);
+
+ $resultImage = null;
+
+ // Try to reuse existing resized image
+ if ($cachedInfo && isset($cachedInfo['width']) && isset($cachedInfo['height'])) {
+ // Fix received aspect ratio
+ $size = Image::calculateAspectRatio($requestedWidth, $requestedHeight, $cachedInfo['width'], $cachedInfo['height']);
+ $resizedImage = $resizedImageRepository->getResizedImageBySize(
+ $workingFolder->getResourceType(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName,
+ $size['width'],
+ $size['height']
+ );
+ if ($resizedImage) {
+ $resultImage = Image::create($resizedImage->getImageData());
+ }
+ }
+
+ // Fallback - get and resize the original image
+ if (null === $resultImage) {
+ $resultImage = Image::create($downloadedFile->getContents(), $config->get('thumbnails.bmpSupported'));
+ $cache->set($cachedInfoPath, $resultImage->getInfo());
+ $resultImage->resize($requestedWidth, $requestedHeight);
+ }
+
+ $mimeType = $resultImage->getMimeType();
+
+ if (in_array($mimeType, array('image/bmp', 'image/x-ms-bmp'))) {
+ $mimeType = 'image/jpeg'; // Image::getData() by default converts resized images to JPG
+ }
+
+ $response->headers->set('Content-Type', $mimeType. '; name="' . $downloadedFile->getFileName() . '"');
+ $response->setContent($resultImage->getData());
+
+ return $response;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImageResize.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImageResize.php
new file mode 100644
index 0000000..3fbf6d0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/ImageResize.php
@@ -0,0 +1,64 @@
+query->get('fileName');
+
+ if (null === $fileName || !File::isValidName($fileName, $config->get('disallowUnsafeCharacters'))) {
+ throw new InvalidRequestException('Invalid file name');
+ }
+
+ $ext = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
+
+ if (!Image::isSupportedExtension($ext)) {
+ throw new InvalidNameException('Invalid source file name');
+ }
+
+ if (!$workingFolder->containsFile($fileName)) {
+ throw new FileNotFoundException();
+ }
+
+ list($requestedWidth, $requestedHeight) = Image::parseSize((string) $request->query->get('size'));
+
+ $resizedImage = $resizedImageRepository->getResizedImage(
+ $workingFolder->getResourceType(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName,
+ $requestedWidth,
+ $requestedHeight
+ );
+
+ return array('url' => $resizedImage->getUrl());
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Init.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Init.php
new file mode 100644
index 0000000..49bc206
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Init.php
@@ -0,0 +1,183 @@
+enabled = true;
+
+ $ln = '';
+ $lc = str_replace('-', '', ($config->get('licenseKey') ?: $config->get('LicenseKey')) . ' ');
+ $pos = strpos(CKFinder::CHARS, $lc[2]) % 5;
+
+ if ($pos == 1 || $pos == 2) {
+ $ln = $config->get('licenseName') ?: $config->get('LicenseName');
+ }
+
+ $data->s = $ln;
+ $data->c = trim($lc[1] . $lc[8] . $lc[17] . $lc[22] . $lc[3] . $lc[13] . $lc[11] . $lc[20] . $lc[5] . $lc[24] . $lc[27]);
+
+ // Thumbnails
+ $thumbnailsConfig = $config->get('thumbnails');
+
+ $thumbnailsEnabled = (bool) $thumbnailsConfig['enabled'];
+
+ if ($thumbnailsEnabled) {
+ $sizes = array();
+ foreach ($thumbnailsConfig['sizes'] as $sizeInfo) {
+ $sizes[] = sprintf("%dx%d", $sizeInfo['width'], $sizeInfo['height']);
+ }
+
+ $data->thumbs = $sizes;
+ }
+
+ // Images
+ $imagesConfig = $config->get('images');
+
+ $images = array(
+ 'max' => $imagesConfig['maxWidth'] . 'x' . $imagesConfig['maxHeight']
+ );
+
+ if (isset($imagesConfig['sizes'])) {
+ $resize = array();
+
+ foreach ($imagesConfig['sizes'] as $name => $sizeInfo) {
+ $resize[$name] = $sizeInfo['width'] . 'x' . $sizeInfo['height'];
+ }
+
+ $images['sizes'] = $resize;
+ }
+
+ $data->images = $images;
+
+ $resourceTypesNames = $config->getDefaultResourceTypes() ? : $config->getResourceTypes();
+
+ $data->resourceTypes = array();
+
+ if (!empty($resourceTypesNames)) {
+ $phpMaxSize = 0;
+
+ $maxUpload = Utils::returnBytes(ini_get('upload_max_filesize'));
+ if ($maxUpload) {
+ $phpMaxSize = $maxUpload;
+ }
+
+ $maxPost = Utils::returnBytes(ini_get('post_max_size'));
+ if ($maxPost) {
+ $phpMaxSize = $phpMaxSize ? min($phpMaxSize, $maxPost) : $maxPost;
+ }
+
+ //ini_get('memory_limit') only works if compiled with "--enable-memory-limit"
+ $memoryLimit = Utils::returnBytes(@ini_get('memory_limit'));
+ if ($memoryLimit && $memoryLimit != -1) {
+ $phpMaxSize = $phpMaxSize ? min($phpMaxSize, $memoryLimit) : $memoryLimit;
+ }
+
+ $data->uploadMaxSize = $phpMaxSize;
+ $data->uploadCheckImages = !$config->get('checkSizeAfterScaling');
+
+ $requestedType = (string) $request->query->get('type');
+
+ foreach ($resourceTypesNames as $resourceTypeName) {
+ if ($requestedType && $requestedType !== $resourceTypeName) {
+ continue;
+ }
+
+ $aclMask = $acl->getComputedMask($resourceTypeName, '/');
+
+ if (!(Permission::FOLDER_VIEW & $aclMask)) {
+ continue;
+ }
+
+ $resourceType = $resourceTypeFactory->getResourceType($resourceTypeName);
+
+ $resourceTypeObject = array(
+ 'name' => $resourceTypeName,
+ 'allowedExtensions' => implode(",", $resourceType->getAllowedExtensions()),
+ 'deniedExtensions' => implode(",", $resourceType->getDeniedExtensions()),
+ 'hash' => $resourceType->getHash(),
+ 'acl' => $aclMask,
+ 'maxSize' => $resourceType->getMaxSize() ? min($resourceType->getMaxSize(), $phpMaxSize) : $phpMaxSize
+ );
+
+ $resourceTypeBackend = $resourceType->getBackend();
+
+ if ($resourceType->isLazyLoaded()) {
+ $resourceTypeObject['hasChildren'] = false;
+ $resourceTypeObject['lazyLoad'] = true;
+ } else {
+ $resourceTypeObject['hasChildren'] = $resourceTypeBackend->containsDirectories($resourceType, $resourceType->getDirectory());
+ }
+
+ if ($label = $resourceType->getLabel()) {
+ $resourceTypeObject['label'] = $label;
+ }
+
+ $useProxyCommand = $resourceTypeBackend->usesProxyCommand();
+
+ if ($useProxyCommand) {
+ $resourceTypeObject['useProxyCommand'] = true;
+ } else {
+ $baseUrl = $resourceTypeBackend->getBaseUrl();
+
+ if ($baseUrl) {
+ $resourceTypeObject['url'] = rtrim(Path::combine($baseUrl, $resourceType->getDirectory()), '/') . '/';
+ }
+ }
+
+
+ $trackedOperations = $resourceTypeBackend->getTrackedOperations();
+
+ if (!empty($trackedOperations)) {
+ $resourceTypeObject['trackedOperations'] = $trackedOperations;
+ }
+
+ $data->resourceTypes[] = $resourceTypeObject;
+ }
+ }
+
+ $enabledPlugins = $config->get('plugins');
+
+ if (!empty($enabledPlugins)) {
+ $data->plugins = $enabledPlugins;
+ }
+
+ $proxyCacheLifetime = (int) $config->get('cache.proxyCommand');
+
+ if ($proxyCacheLifetime) {
+ $data->proxyCache = $proxyCacheLifetime;
+ }
+
+ return $data;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/MoveFiles.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/MoveFiles.php
new file mode 100644
index 0000000..eaadcd1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/MoveFiles.php
@@ -0,0 +1,101 @@
+request->get('files');
+
+ $moved = 0;
+
+ $errors = array();
+
+ // Initial validation
+ foreach ($movedFiles as $arr) {
+ if (!isset($arr['name'], $arr['type'], $arr['folder'])) {
+ throw new InvalidRequestException('Invalid request');
+ }
+
+ if (!$acl->isAllowed($arr['type'], $arr['folder'], Permission::FILE_VIEW | Permission::FILE_DELETE)) {
+ throw new UnauthorizedException('Unauthorized');
+ }
+ }
+
+ foreach ($movedFiles as $arr) {
+ if (empty($arr['name'])) {
+ continue;
+ }
+
+ $name = $arr['name'];
+ $type = $arr['type'];
+ $folder = $arr['folder'];
+
+ $resourceType = $resourceTypeFactory->getResourceType($type);
+
+ $movedFile = new MovedFile($name, $folder, $resourceType, $this->app);
+
+ $options = isset($arr['options']) ? $arr['options'] : '';
+
+ $movedFile->setCopyOptions($options);
+
+
+ if ($movedFile->isValid()) {
+ $moveFileEvent = new MoveFileEvent($this->app, $movedFile);
+ $dispatcher->dispatch(CKFinderEvent::MOVE_FILE, $moveFileEvent);
+
+ if (!$moveFileEvent->isPropagationStopped()) {
+ if ($movedFile->doMove()) {
+ $moved++;
+ }
+ }
+ }
+
+ $errors = array_merge($errors, $movedFile->getErrors());
+ }
+
+ $data = array('moved' => $moved);
+
+ if (!empty($errors)) {
+ $data['error'] = array(
+ 'number' => Error::MOVE_FAILED,
+ 'errors' => $errors
+ );
+ }
+
+ return $data;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Operation.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Operation.php
new file mode 100644
index 0000000..6a1d408
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Operation.php
@@ -0,0 +1,34 @@
+query->get('operationId');
+
+ /* @var \CKSource\CKFinder\Operation\OperationManager $operation */
+ $operation = $this->app['operation'];
+
+ if ($request->query->get('abort')) {
+ $operation->abort($operationId);
+ }
+
+ return $operation->getStatus($operationId);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Proxy.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Proxy.php
new file mode 100644
index 0000000..624c474
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Proxy.php
@@ -0,0 +1,128 @@
+query->get('fileName');
+ $thumbnailFileName = (string) $request->query->get('thumbnail');
+
+ if (!File::isValidName($fileName, $config->get('disallowUnsafeCharacters'))) {
+ throw new InvalidRequestException(sprintf('Invalid file name: %s', $fileName));
+ }
+
+ $cacheLifetime = (int) $request->query->get('cache');
+
+ if (!$workingFolder->containsFile($fileName)) {
+ throw new FileNotFoundException();
+ }
+
+ if ($thumbnailFileName) {
+ if (!File::isValidName($thumbnailFileName, $config->get('disallowUnsafeCharacters'))) {
+ throw new InvalidRequestException(sprintf('Invalid resized image file name: %s', $fileName));
+ }
+
+ if (!$workingFolder->getResourceType()->isAllowedExtension(pathinfo($thumbnailFileName, PATHINFO_EXTENSION))) {
+ throw new InvalidExtensionException();
+ }
+
+ $resizedImageRespository = $this->app->getResizedImageRepository();
+ $file = $resizedImageRespository->getExistingResizedImage(
+ $workingFolder->getResourceType(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName,
+ $thumbnailFileName
+ );
+ $dataStream = $file->readStream();
+ } else {
+ $file = new DownloadedFile($fileName, $this->app);
+ $file->isValid();
+ $dataStream = $workingFolder->readStream($file->getFilename());
+ }
+
+ $proxyDownload = new ProxyDownloadEvent($this->app, $file);
+
+ $dispatcher->dispatch(CKFinderEvent::PROXY_DOWNLOAD, $proxyDownload);
+
+ if ($proxyDownload->isPropagationStopped()) {
+ throw new AccessDeniedException();
+ }
+
+ $response = new StreamedResponse();
+ $response->headers->set('Content-Type', $file->getMimeType());
+ $response->headers->set('Content-Length', $file->getSize());
+ $response->headers->set('Content-Disposition', 'inline; filename="' . $fileName. '"');
+
+ if ($cacheLifetime > 0) {
+ Utils::removeSessionCacheHeaders();
+
+ $response->setPublic();
+ $response->setEtag(dechex($file->getTimestamp()) . "-" . dechex($file->getSize()));
+
+ $lastModificationDate = new \DateTime();
+ $lastModificationDate->setTimestamp($file->getTimestamp());
+
+ $response->setLastModified($lastModificationDate);
+
+ if ($response->isNotModified($request)) {
+ return $response;
+ }
+
+ $response->setMaxAge($cacheLifetime);
+
+ $expireTime = new \DateTime();
+ $expireTime->modify('+' . $cacheLifetime . 'seconds');
+ $response->setExpires($expireTime);
+ }
+
+ $chunkSize = 1024 * 100;
+
+ $response->setCallback(function () use ($dataStream, $chunkSize) {
+ if ($dataStream === false) {
+ return false;
+ }
+ while (!feof($dataStream)) {
+ echo fread($dataStream, $chunkSize);
+ flush();
+ @set_time_limit(8);
+ }
+
+ return true;
+ });
+
+ return $response;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/QuickUpload.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/QuickUpload.php
new file mode 100644
index 0000000..14a5d28
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/QuickUpload.php
@@ -0,0 +1,82 @@
+on(KernelEvents::RESPONSE, array($this, 'onQuickUploadResponse'));
+ }
+
+ public function execute(Request $request, WorkingFolder $workingFolder, EventDispatcher $dispatcher, Config $config, CacheManager $cache, ThumbnailRepository $thumbsRepository)
+ {
+ // Don't add info about current folder to this command response
+ $workingFolder->omitResponseInfo();
+
+ $responseData = parent::execute($request, $workingFolder, $dispatcher, $config, $cache, $thumbsRepository);
+
+ // Get url to a file
+ if (isset($responseData['fileName'])) {
+ $responseData['url'] = $workingFolder->getFileUrl($responseData['fileName']);
+ }
+
+ return $responseData;
+ }
+
+ public function onQuickUploadResponse(FilterResponseEvent $event)
+ {
+ $request = $event->getRequest();
+
+ if ($request->get('responseType') === 'json') {
+ return;
+ }
+
+ $response = $event->getResponse();
+
+ $funcNum = (string) $request->get('CKEditorFuncNum');
+ $funcNum = preg_replace('/[^0-9]/', '', $funcNum);
+
+ if ($response instanceof JsonResponse) {
+ $responseData = $response->getData();
+
+ $fileUrl = isset($responseData['url']) ? $responseData['url'] : '';
+ $errorMessage = isset($responseData['error']['message']) ? $responseData['error']['message'] : '';
+
+ ob_start();
+ ?>
+
+ setResponse(Response::create(ob_get_clean()));
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/RenameFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/RenameFile.php
new file mode 100644
index 0000000..baa79e6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/RenameFile.php
@@ -0,0 +1,68 @@
+query->get('fileName');
+ $newFileName = (string) $request->query->get('newFileName');
+
+ if (null === $fileName || null === $newFileName) {
+ throw new InvalidNameException('Invalid file name');
+ }
+
+ $renamedFile = new RenamedFile(
+ $newFileName,
+ $fileName,
+ $workingFolder->getClientCurrentFolder(),
+ $workingFolder->getResourceType(),
+ $this->app
+ );
+
+ $renamed = false;
+
+ if ($renamedFile->isValid()) {
+ $renamedFileEvent = new RenameFileEvent($this->app, $renamedFile);
+
+ $dispatcher->dispatch(CKFinderEvent::RENAME_FILE, $renamedFileEvent);
+
+ if (!$renamedFileEvent->isPropagationStopped()) {
+ $renamed = $renamedFile->doRename();
+ }
+ }
+
+ return array(
+ 'name' => $fileName,
+ 'newName' => $renamedFile->getNewFileName(),
+ 'renamed' => (int) $renamed
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/RenameFolder.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/RenameFolder.php
new file mode 100644
index 0000000..61486bc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/RenameFolder.php
@@ -0,0 +1,52 @@
+getClientCurrentFolder() === '/') {
+ throw new InvalidRequestException('Cannot rename resource type root folder');
+ }
+
+ $newFolderName = (string) $request->query->get('newFolderName');
+
+ $renameFolderEvent = new RenameFolderEvent($this->app, $workingFolder, $newFolderName);
+
+ $dispatcher->dispatch(CKFinderEvent::RENAME_FOLDER, $renameFolderEvent);
+
+ if (!$renameFolderEvent->isPropagationStopped()) {
+ $newFolderName = $renameFolderEvent->getNewFolderName();
+
+ return $workingFolder->rename($newFolderName);
+ }
+
+ return array('renamed' => 0);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/SaveImage.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/SaveImage.php
new file mode 100644
index 0000000..9e5b32d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/SaveImage.php
@@ -0,0 +1,142 @@
+query->get('fileName');
+
+ $editedImage = new EditedImage($fileName, $this->app);
+
+ $saveAsNew = false;
+
+ if (!$editedImage->exists()) {
+ $saveAsNew = true;
+ $editedImage->saveAsNew(true);
+ } else {
+ // If file exists check for FILE_DELETE permission
+ $resourceTypeName = $workingFolder->getResourceType()->getName();
+ $path = $workingFolder->getClientCurrentFolder();
+
+ if (!$acl->isAllowed($resourceTypeName, $path, Permission::FILE_DELETE)) {
+ throw new UnauthorizedException(sprintf('Unauthorized: no FILE_DELETE permission in %s:%s', $resourceTypeName, $path));
+ }
+ }
+
+ if (!Image::isSupportedExtension($editedImage->getExtension())) {
+ throw new InvalidExtensionException('Unsupported image type or not image file');
+ }
+
+ $imageFormat = Image::mimeTypeFromExtension($editedImage->getExtension());
+
+ $uploadedData = (string) $request->request->get('content');
+
+ if (null === $uploadedData || strpos($uploadedData, 'data:image/png;base64,') !== 0) {
+ throw new InvalidUploadException('Invalid upload. Expected base64 encoded PNG image.');
+ }
+
+ $data = explode(',', $uploadedData);
+ $data = isset($data[1]) ? base64_decode($data[1]) : false;
+
+ if (!$data) {
+ throw new InvalidUploadException();
+ }
+
+ try {
+ $uploadedImage = Image::create($data);
+ } catch (\Exception $e) {
+ // No need to check if secureImageUploads is enabled - image must be valid here
+ throw new InvalidUploadException('Invalid upload: corrupted image', Error::UPLOADED_CORRUPT, array(), $e);
+ }
+
+ $imagesConfig = $config->get('images');
+
+ if ($imagesConfig['maxWidth'] && $uploadedImage->getWidth() > $imagesConfig['maxWidth'] ||
+ $imagesConfig['maxHeight'] && $uploadedImage->getHeight() > $imagesConfig['maxHeight']) {
+ $uploadedImage->resize($imagesConfig['maxWidth'], $imagesConfig['maxHeight'], $imagesConfig['quality']);
+ }
+
+ $editedImage->setNewContents($uploadedImage->getData($imageFormat));
+ $editedImage->setNewDimensions($uploadedImage->getWidth(), $uploadedImage->getHeight());
+
+ if (!$editedImage->isValid()) {
+ throw new InvalidUploadException('Invalid file provided');
+ }
+
+ $editFileEvent = new EditFileEvent($this->app, $editedImage);
+
+ $imageInfo = $uploadedImage->getInfo();
+
+ $cache->set(
+ Path::combine(
+ $workingFolder->getResourceType()->getName(),
+ $workingFolder->getClientCurrentFolder(),
+ $fileName),
+ $uploadedImage->getInfo()
+ );
+
+ $dispatcher->dispatch(CKFinderEvent::SAVE_IMAGE, $editFileEvent);
+
+ $saved = false;
+
+ if (!$editFileEvent->isPropagationStopped()) {
+ $saved = $editedImage->save($editFileEvent->getNewContents());
+
+ if (!$saved) {
+ throw new AccessDeniedException("Couldn't save image file");
+ }
+
+ //Remove thumbnails and resized images in case if file is overwritten
+ if (!$saveAsNew && $saved) {
+ $resourceType = $workingFolder->getResourceType();
+ $thumbnailRepository->deleteThumbnails($resourceType, $workingFolder->getClientCurrentFolder(), $fileName);
+ $resizedImageRepository->deleteResizedImages($resourceType, $workingFolder->getClientCurrentFolder(), $fileName);
+ }
+ }
+
+ return array(
+ 'saved' => (int) $saved,
+ 'date' => Utils::formatDate(time()),
+ 'size' => Utils::formatSize($imageInfo['size'])
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Thumbnail.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Thumbnail.php
new file mode 100644
index 0000000..d4121c4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Thumbnail.php
@@ -0,0 +1,93 @@
+get('thumbnails.enabled')) {
+ throw new CKFinderException('Thumbnails feature is disabled', Error::THUMBNAILS_DISABLED);
+ }
+
+ $fileName = (string) $request->get('fileName');
+
+ $ext = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
+
+ if (!Image::isSupportedExtension($ext, $thumbnailRepository->isBitmapSupportEnabled())) {
+ throw new InvalidNameException('Invalid source file name');
+ }
+
+ if (null === $fileName || !File::isValidName($fileName, $config->get('disallowUnsafeCharacters'))) {
+ throw new InvalidRequestException('Invalid file name');
+ }
+
+ if (!$workingFolder->containsFile($fileName)) {
+ throw new FileNotFoundException();
+ }
+
+ list($requestedWidth, $requestedHeight) = Image::parseSize((string) $request->get('size'));
+
+ $thumbnail = $thumbnailRepository->getThumbnail($workingFolder->getResourceType(),
+ $workingFolder->getClientCurrentFolder(), $fileName, $requestedWidth, $requestedHeight);
+
+ Utils::removeSessionCacheHeaders();
+
+ $response = new Response();
+ $response->setPublic();
+ $response->setEtag(dechex($thumbnail->getTimestamp()) . "-" . dechex($thumbnail->getSize()));
+
+ $lastModificationDate = new \DateTime();
+ $lastModificationDate->setTimestamp($thumbnail->getTimestamp());
+
+ $response->setLastModified($lastModificationDate);
+
+ if ($response->isNotModified($request)) {
+ return $response;
+ }
+
+ $thumbnailsCacheExpires = (int) $config->get('cache.thumbnails');
+
+ if ($thumbnailsCacheExpires > 0) {
+ $response->setMaxAge($thumbnailsCacheExpires);
+
+ $expireTime = new \DateTime();
+ $expireTime->modify('+' . $thumbnailsCacheExpires . 'seconds');
+ $response->setExpires($expireTime);
+ }
+
+ $response->headers->set('Content-Type', $thumbnail->getMimeType() . '; name="' . $thumbnail->getFileName() . '"');
+ $response->setContent($thumbnail->getImageData());
+
+ return $response;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CommandResolver.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CommandResolver.php
new file mode 100644
index 0000000..ca03e5a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/CommandResolver.php
@@ -0,0 +1,236 @@
+$_GET['command'] request variable.
+ *
+ * @copyright 2016 CKSource - Frederico Knabben
+ */
+class CommandResolver implements ControllerResolverInterface
+{
+ /**
+ * The name of the method to execute in commands classes.
+ */
+ const COMMAND_EXECUTE_METHOD = 'execute';
+
+ /**
+ * The commands class namespace.
+ *
+ * @var string $commandsNamespace
+ */
+ protected $commandsNamespace;
+
+ /**
+ * The plugins class namespace.
+ *
+ * @var string $pluginsNamespace
+ */
+ protected $pluginsNamespace;
+
+ /**
+ * The app instance.
+ *
+ * @var CKFinder $app
+ */
+ protected $app;
+
+ /**
+ * Constructor.
+ *
+ * @param CKFinder $app
+ */
+ public function __construct(CKFinder $app)
+ {
+ $this->app = $app;
+ }
+
+ /**
+ * Sets the namespace used to resolve commands.
+ *
+ * @param string $namespace
+ */
+ public function setCommandsNamespace($namespace)
+ {
+ $this->commandsNamespace = $namespace;
+ }
+
+ /**
+ * Sets the namespace used to resolve plugin commands.
+ *
+ * @param string $namespace
+ */
+ public function setPluginsNamespace($namespace)
+ {
+ $this->pluginsNamespace = $namespace;
+ }
+
+ /**
+ * This method looks for a 'command' request attribute. An appropriate class
+ * is then instantiated and used to build a callable.
+ *
+ * @param Request $request current Request instance
+ *
+ * @return callable Callable built to execute the command.
+ *
+ * @throws InvalidCommandException if a valid command cannot be found.
+ * @throws MethodNotAllowedException if a command was called using an invalid HTTP method.
+ */
+ public function getController(Request $request)
+ {
+ $commandName = ucfirst((string) $request->get('command'));
+
+ /* @var Command\CommandAbstract $commandObject */
+ $commandObject = null;
+
+ // First check for regular command class
+ $commandClassName = $this->commandsNamespace . $commandName;
+
+ if (class_exists($commandClassName)) {
+ $reflectedClass = new \ReflectionClass($commandClassName);
+ if (!$reflectedClass->isInstantiable()) {
+ throw new InvalidCommandException(sprintf('CKFinder command class %s is not instantiable', $commandClassName));
+ }
+ $commandObject = new $commandClassName($this->app);
+ }
+
+ // If not found - check if command plugin with given name exists
+ if (null === $commandObject) {
+ $plugin = $this->app->getPlugin($commandName);
+ if ($plugin instanceof CommandAbstract) {
+ $commandObject = $plugin;
+ }
+ }
+
+ if (null === $commandObject) {
+ throw new InvalidCommandException(sprintf('CKFinder command %s not found', $commandName));
+ }
+
+ if (!$commandObject instanceof CommandAbstract) {
+ throw new InvalidCommandException(sprintf("CKFinder command must be a subclass of CommandAbstract (%s given)", get_class($commandObject)));
+ }
+
+ if (!method_exists($commandObject, self::COMMAND_EXECUTE_METHOD)) {
+ throw new InvalidCommandException(sprintf("CKFinder command class %s doesn't contain required 'execute' method", $commandClassName));
+ }
+
+ if ($commandObject->getRequestMethod() !== $request->getMethod()) {
+ throw new MethodNotAllowedException(sprintf('CKFinder command %s expects to be called with %s HTTP request. Actual method: %s',
+ $commandName, $commandObject->getRequestMethod(), $request->getMethod()));
+ }
+
+ /* @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcher */
+ $dispatcher = $this->app['dispatcher'];
+ $beforeCommandEvent = new BeforeCommandEvent($this->app, $commandName, $commandObject);
+
+ $eventName = CKFinderEvent::BEFORE_COMMAND_PREFIX . lcfirst($commandName);
+
+ $dispatcher->dispatch($eventName, $beforeCommandEvent);
+
+ $commandObject = $beforeCommandEvent->getCommandObject();
+
+
+ $commandObject->checkPermissions();
+
+ return array($commandObject, self::COMMAND_EXECUTE_METHOD);
+ }
+
+ /**
+ * This method is used to inject objects to controllers.
+ * It depends on arguments taken by the executed controller callable.
+ *
+ * Supported injected types:
+ * Request - current request object
+ * CKFinder - application object
+ * EventDispatcher - event dispatcher
+ * Config - Config object
+ * Acl - Acl object
+ * BackendManager - BackendManager object
+ * ResourceTypeFactory - ResourceTypeFactory object
+ * WorkingFolder - WorkingFolder object
+ *
+ * @param Request $request request object
+ * @param callable $command
+ *
+ * @return array arguments used during the command callable execution
+ */
+ public function getArguments(Request $request, $command)
+ {
+ $r = new \ReflectionMethod($command[0], $command[1]);
+
+ $parameters = $r->getParameters();
+
+ $arguments = array();
+
+ foreach ($parameters as $param) {
+ /* @var $param \ReflectionParameter */
+ if ($reflectionClass = $param->getClass()) {
+ if ($reflectionClass->isInstance($this->app)) {
+ $arguments[] = $this->app;
+ } elseif ($reflectionClass->isInstance($request)) {
+ $arguments[] = $request;
+ } elseif ($reflectionClass->isInstance($this->app['dispatcher'])) {
+ $arguments[] = $this->app['dispatcher'];
+ } elseif ($reflectionClass->isInstance($this->app['config'])) {
+ $arguments[] = $this->app['config'];
+ }
+
+ // Don't check isInstance to avoid unnecessary instantiation
+ $classShortName = $reflectionClass->getShortName();
+
+ switch ($classShortName) {
+ case 'BackendFactory':
+ $arguments[] = $this->app['backend_factory'];
+ break;
+ case 'ResourceTypeFactory':
+ $arguments[] = $this->app['resource_type_factory'];
+ break;
+ case 'Acl':
+ $arguments[] = $this->app['acl'];
+ break;
+ case 'WorkingFolder':
+ $arguments[] = $this->app['working_folder'];
+ break;
+ case 'ThumbnailRepository':
+ $arguments[] = $this->app['thumbnail_repository'];
+ break;
+ case 'ResizedImageRepository':
+ $arguments[] = $this->app['resized_image_repository'];
+ break;
+ case 'CacheManager':
+ $arguments[] = $this->app['cache'];
+ break;
+ }
+ } else {
+ $arguments[] = null;
+ }
+ }
+
+ return $arguments;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Config.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Config.php
new file mode 100644
index 0000000..afadebe
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Config.php
@@ -0,0 +1,535 @@
+Important: If you use a PHP file to store your config, remember to use
+ * the return statement inside the file scope to return
+ * the array.
+ *
+ * @param array|string $config
+ *
+ * @throws InvalidConfigException if config was not loaded properly.
+ */
+ public function __construct($config)
+ {
+ setlocale(LC_ALL, "en_US.utf8");
+
+ // Check if default timezone was set
+ try {
+ new \DateTime();
+ } catch (\Exception $e) {
+ date_default_timezone_set('UTC');
+ }
+
+ if (is_string($config) && is_readable($config)) {
+ $options = require $config;
+ } else {
+ $options = $config;
+ }
+
+ if (!is_array($options)) {
+ throw new InvalidConfigException("Couldn't load configuration. Please check configuration file.");
+ }
+
+ $this->options = $this->mergeDefaultOptions($options);
+
+ $this->validate();
+ $this->process();
+ }
+
+ /**
+ * Merges default or missing configuration options.
+ *
+ * @param array $options options passed to CKFinder
+ *
+ * @return array
+ */
+ protected function mergeDefaultOptions($options)
+ {
+ $defaults = array(
+ 'authentication' => function () {
+ return false;
+ },
+ 'licenseName' => '',
+ 'licenseKey' => '',
+ 'privateDir' => array(
+ 'backend' => 'default',
+ 'tags' => '.ckfinder/tags',
+ 'logs' => '.ckfinder/logs',
+ 'cache' => '.ckfinder/cache',
+ 'thumbs' => '.ckfinder/cache/thumbs'
+ ),
+ 'images' => array(
+ 'maxWidth' => 500,
+ 'maxHeight' => 400,
+ 'quality' => 80,
+ 'sizes' => array(
+ 'small' => array('width' => 480, 'height' => 320, 'quality' => 80),
+ 'medium' => array('width' => 600, 'height' => 480, 'quality' => 80),
+ 'large' => array('width' => 800, 'height' => 600, 'quality' => 80)
+ ),
+ 'threshold' => array('pixels'=> 80, 'percent' => 10)
+ ),
+ 'thumbnails' => array(
+ 'enabled' => true,
+ 'sizes' => array(
+ array('width' => '150', 'height' => '150', 'quality' => 80),
+ array('width' => '300', 'height' => '300', 'quality' => 80),
+ array('width' => '500', 'height' => '500', 'quality' => 80),
+ ),
+ 'bmpSupported' => true,
+ ),
+ 'backends' => array(
+ array(
+ 'name' => 'default',
+ 'adapter' => 'local',
+ 'baseUrl' => '/userfiles/',
+ 'chmodFiles' => 0777,
+ 'chmodFolders' => 0777,
+ 'filesystemEncoding' => 'UTF-8'
+ ),
+ ),
+ 'defaultResourceTypes' => '',
+ 'resourceTypes' =>array(
+ array(
+ 'name' => 'Files',
+ 'directory' => 'files',
+ 'maxSize' => 0,
+ 'allowedExtensions' => '7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xlsx,zip',
+ 'deniedExtensions' => '',
+ 'backend' => 'default'
+ ),
+ array(
+ 'name' => 'Images',
+ 'directory' => 'images',
+ 'maxSize' => 0,
+ 'allowedExtensions' => 'bmp,gif,jpeg,jpg,png',
+ 'deniedExtensions' => '',
+ 'backend' => 'default'
+ )
+ ),
+ 'roleSessionVar' => 'CKFinder_UserRole',
+ 'accessControl' => array(
+ array(
+ 'role' => '*',
+ 'resourceType' => '*',
+ 'folder' => '/',
+
+ 'FOLDER_VIEW' => true,
+ 'FOLDER_CREATE' => true,
+ 'FOLDER_RENAME' => true,
+ 'FOLDER_DELETE' => true,
+
+ 'FILE_VIEW' => true,
+ 'FILE_CREATE' => true,
+ 'FILE_RENAME' => true,
+ 'FILE_DELETE' => true,
+
+ 'IMAGE_RESIZE' => true,
+ 'IMAGE_RESIZE_CUSTOM' => true
+ ),
+ ),
+ 'overwriteOnUpload' => false,
+ 'checkDoubleExtension' => true,
+ 'disallowUnsafeCharacters' => false,
+ 'secureImageUploads' => true,
+ 'checkSizeAfterScaling' => true,
+ 'htmlExtensions' => array('html', 'htm', 'xml', 'js'),
+ 'hideFolders' => array(".*", "CVS", "__thumbs"),
+ 'hideFiles' => array(".*"),
+ 'forceAscii' => false,
+ 'xSendfile' => false,
+ 'debug' => false,
+ 'pluginsDirectory' => __DIR__ . '/plugins',
+ 'plugins' => array(),
+ 'debugLoggers' => array('ckfinder_log', 'error_log', 'firephp'),
+ 'tempDirectory' => sys_get_temp_dir(),
+ 'sessionWriteClose' => true,
+ 'csrfProtection' => true
+ );
+
+ $options = array_merge($defaults, $options);
+
+ foreach (array('privateDir', 'images', 'thumbnails') as $key) {
+ $options[$key] = array_merge($defaults[$key], $options[$key]);
+ }
+
+ $resourceTypeDefaults = array(
+ 'name' => '',
+ 'directory' => '',
+ 'maxSize' => 0,
+ 'allowedExtensions' => '',
+ 'deniedExtensions' => '',
+ 'backend' => 'default'
+ );
+
+ foreach ($options['resourceTypes'] as &$resourceType) {
+ $resourceType = array_merge($resourceTypeDefaults, $resourceType);
+ }
+
+ $localBackendDefaults = array(
+ 'chmodFiles' => 0755,
+ 'chmodFolders' => 0755,
+ 'filesystemEncoding' => 'UTF-8'
+ );
+
+ foreach ($options['backends'] as &$backend) {
+ if ($backend['adapter'] === 'local') {
+ $backend = array_merge($localBackendDefaults, $backend);
+ }
+ }
+
+ $cacheDefaults = array(
+ 'imagePreview' => 24 * 3600,
+ 'thumbnails' => 24 * 3600 * 365,
+ 'proxyCommand' => 0
+ );
+
+ $options['cache'] = array_replace($cacheDefaults, isset($options['cache']) ? $options['cache'] : array());
+
+ // #205 Backward compatibility for old debug_loggers option
+ if (isset($options['debug_loggers'])) {
+ $options['debugLoggers'] = $options['debug_loggers'];
+ }
+
+ return $options;
+ }
+
+ /**
+ * Returns the configuration node under the path defined in the parameter.
+ *
+ * For easier access to nested configuration options the config `$name`
+ * parameter can be passed also as a dot-separated path.
+ * For example, to check if thumbnails are enabled you can use:
+ *
+ * $config->get('thumbnails.enabled')
+ *
+ * @param string $name config node name
+ *
+ * @return mixed config node value
+ *
+ */
+ public function get($name)
+ {
+ if (isset($this->options[$name])) {
+ return $this->options[$name];
+ }
+
+ $keys = explode('.', $name);
+ $array = $this->options;
+
+ do {
+ $key = array_shift($keys);
+ if (isset($array[$key])) {
+ if ($keys) {
+ if (is_array($array[$key])) {
+ $array = $array[$key];
+ } else {
+ break;
+ }
+ } else {
+ return $array[$key];
+ }
+ } else {
+ break;
+ }
+ } while ($keys);
+
+ return null;
+ }
+
+ /**
+ * Validates the config array structure.
+ *
+ * @throws InvalidConfigException if config structure is invalid.
+ */
+ protected function validate()
+ {
+ $checkMissingNodes = function (array $required, array $actual, $prefix = '') {
+ $missing = array_keys(array_diff_key(array_flip($required), $actual));
+
+ if (!empty($missing)) {
+ throw new InvalidConfigException(sprintf(
+ "CKFinder configuration doesn't contain all required fields. " .
+ "Please check configuration file. Missing fields: %s",
+ ($prefix ? "{$prefix}: " : '') . implode(', ', $missing)));
+ }
+ };
+
+ $requiredRootNodes = array('authentication', 'licenseName', 'licenseKey', 'privateDir', 'images',
+ 'backends', 'defaultResourceTypes', 'resourceTypes', 'roleSessionVar', 'accessControl',
+ 'checkDoubleExtension', 'disallowUnsafeCharacters', 'secureImageUploads', 'checkSizeAfterScaling',
+ 'htmlExtensions', 'hideFolders', 'hideFiles', 'forceAscii', 'xSendfile', 'debug', 'pluginsDirectory', 'plugins');
+
+ $checkMissingNodes($requiredRootNodes, $this->options);
+ $checkMissingNodes(array('backend', 'tags', 'logs', 'cache', 'thumbs'), $this->options['privateDir'], '[privateDir]');
+ $checkMissingNodes(array('maxWidth', 'maxHeight', 'quality'), $this->options['images'], '[images]');
+
+ $backends = array();
+
+ foreach ($this->options['backends'] as $i => $backendConfig) {
+ $checkMissingNodes(array('name', 'adapter'), $backendConfig, "[backends][{$i}]");
+ $backends[] = $backendConfig['name'];
+ }
+
+ foreach ($this->options['resourceTypes'] as $i => $resourceTypeConfig) {
+ $checkMissingNodes(array('name', 'directory', 'maxSize', 'allowedExtensions', 'deniedExtensions', 'backend'),
+ $resourceTypeConfig, "[resourceTypes][{$i}]");
+
+ if (!in_array($resourceTypeConfig['backend'], $backends)) {
+ throw new InvalidConfigException("Backend '{$resourceTypeConfig['backend']}' is not defined: [resourceTypes][{$i}]");
+ }
+ }
+
+ foreach ($this->options['accessControl'] as $i => $aclConfig) {
+ $checkMissingNodes(array('role', 'resourceType', 'folder'), $aclConfig, "[accessControl][{$i}]");
+ }
+
+ if (!is_callable($this->options['authentication'])) {
+ throw new InvalidConfigException("CKFinder Authentication config field must be a PHP callable");
+ }
+
+ if (!is_writable($this->options['tempDirectory'])) {
+ throw new InvalidConfigException("The temporary folder is not writable for CKFinder");
+ }
+ }
+
+ /**
+ * Processes the configuration array.
+ */
+ protected function process()
+ {
+ $this->options['defaultResourceTypes'] =
+ array_filter(
+ array_map('trim',
+ explode(',', $this->options['defaultResourceTypes'])
+ ),
+ 'strlen');
+
+
+ $formatToArray = function ($input) {
+ $input = is_array($input) ? $input : explode(',', $input);
+
+ return
+ array_filter(
+ array_map('strtolower',
+ array_map('trim', $input)
+ ),
+ 'strlen');
+ };
+
+ foreach ($this->options['resourceTypes'] as $resourceTypeKey => $resourceTypeConfig) {
+ $resourceTypeConfig['allowedExtensions'] = $formatToArray($resourceTypeConfig['allowedExtensions']);
+ $resourceTypeConfig['deniedExtensions'] = $formatToArray($resourceTypeConfig['deniedExtensions']);
+ $resourceTypeConfig['maxSize'] = Utils::returnBytes((string) $resourceTypeConfig['maxSize']);
+
+ $this->options['resourceTypes'][$resourceTypeConfig['name']] = $resourceTypeConfig;
+
+ if ($resourceTypeKey !== $resourceTypeConfig['name']) {
+ unset($this->options['resourceTypes'][$resourceTypeKey]);
+ }
+ }
+
+ foreach ($this->options['backends'] as $backendKey => $backendConfig) {
+ $this->options['backends'][$backendConfig['name']] = $backendConfig;
+
+ if ($backendKey !== $backendConfig['name']) {
+ unset($this->options['backends'][$backendKey]);
+ }
+ }
+
+ $this->options['htmlExtensions'] = $formatToArray($this->options['htmlExtensions']);
+ }
+
+ /**
+ * Returns the default resource types names.
+ *
+ * @return array
+ */
+ public function getDefaultResourceTypes()
+ {
+ return $this->options['defaultResourceTypes'];
+ }
+
+ /**
+ * Returns all defined resource types names.
+ *
+ * @return array
+ */
+ public function getResourceTypes()
+ {
+ return array_keys($this->options['resourceTypes']);
+ }
+
+ /**
+ * Returns the configuration node for a given resource type.
+ *
+ * @param string $resourceType resource type name
+ *
+ * @return array configuration node for the resource type
+ *
+ * @throws InvalidResourceTypeException if the resource type does not exist
+ */
+ public function getResourceTypeNode($resourceType)
+ {
+ if (array_key_exists($resourceType, $this->options['resourceTypes'])) {
+ return $this->options['resourceTypes'][$resourceType];
+ } else {
+ throw new InvalidResourceTypeException("Invalid resource type: {$resourceType}");
+ }
+ }
+
+ /**
+ * Returns the regex used for hidden files check.
+ * @return string
+ */
+ public function getHideFilesRegex()
+ {
+ static $hideFilesRegex;
+
+ if (!isset($hideFilesRegex)) {
+ $hideFilesConfig = $this->options['hideFiles'];
+
+ if ($hideFilesConfig && is_array($hideFilesConfig)) {
+ $hideFilesRegex = join("|", $hideFilesConfig);
+ $hideFilesRegex = strtr($hideFilesRegex, array("?" => "__QMK__", "*" => "__AST__", "|" => "__PIP__"));
+ $hideFilesRegex = preg_quote($hideFilesRegex, "/");
+ $hideFilesRegex = strtr($hideFilesRegex, array("__QMK__" => ".", "__AST__" => ".*", "__PIP__" => "|"));
+ $hideFilesRegex = "/^(?:" . $hideFilesRegex . ")$/uim";
+ } else {
+ $hideFilesRegex = "";
+ }
+ }
+
+ return $hideFilesRegex;
+ }
+
+ /**
+ * Returns the regex used for hidden folders check.
+ * @return string
+ */
+ public function getHideFoldersRegex()
+ {
+ static $hideFoldersRegex;
+
+ if (!isset($hideFoldersRegex)) {
+ $hideFoldersConfig = $this->options['hideFolders'];
+
+ if ($hideFoldersConfig && is_array($hideFoldersConfig)) {
+ $hideFoldersRegex = join("|", $hideFoldersConfig);
+ $hideFoldersRegex = strtr($hideFoldersRegex, array("?" => "__QMK__", "*" => "__AST__", "|" => "__PIP__"));
+ $hideFoldersRegex = preg_quote($hideFoldersRegex, "/");
+ $hideFoldersRegex = strtr($hideFoldersRegex, array("__QMK__" => ".", "__AST__" => ".*", "__PIP__" => "|"));
+ $hideFoldersRegex = "/^(?:" . $hideFoldersRegex . ")$/uim";
+ } else {
+ $hideFoldersRegex = "";
+ }
+ }
+
+ return $hideFoldersRegex;
+ }
+
+ /**
+ * If the config node does not exist, creates the node with a given name and values.
+ * Otherwise extends the config node with additional (default) values.
+ *
+ * @param string $nodeName
+ * @param array $values
+ */
+ public function extend($nodeName, array $values)
+ {
+ if (!isset($this->options[$nodeName])) {
+ $this->options[$nodeName] = $values;
+ } else {
+ $this->options[$nodeName] = array_replace_recursive($values, $this->options[$nodeName]);
+ }
+ }
+
+ /**
+ * Returns the backend-relative private directory path.
+ *
+ * @param string $privateDirIdentifier
+ *
+ * @return mixed
+ */
+ public function getPrivateDirPath($privateDirIdentifier)
+ {
+ if (!array_key_exists($privateDirIdentifier, $this->options['privateDir'])) {
+ throw new \InvalidArgumentException(sprintf('Private dir with identifier %s not found. Please check configuration file.', $privateDirIdentifier));
+ }
+
+ $privateDir = $this->options['privateDir'][$privateDirIdentifier];
+
+ if (is_array($privateDir) && array_key_exists('path', $privateDir)) {
+ return $privateDir['path'];
+ }
+
+ return $privateDir;
+ }
+
+ /**
+ * Checks if the debug logger with a given name is enabled.
+ * @param string $loggerName debug logger name
+ *
+ * @return bool `true` if enabled
+ */
+ public function isDebugLoggerEnabled($loggerName)
+ {
+ return in_array($loggerName, $this->options['debugLoggers']);
+ }
+
+ /**
+ * Returns backend configuration by name.
+ *
+ * @param string $backendName
+ *
+ * @return array backend configuration node
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getBackendNode($backendName)
+ {
+ if (array_key_exists($backendName, $this->options['backends'])) {
+ return $this->options['backends'][$backendName];
+ } else {
+ throw new \InvalidArgumentException(sprintf('Backend %s not found. Please check configuration file.', $backendName));
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ContainerAwareInterface.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ContainerAwareInterface.php
new file mode 100644
index 0000000..35486f6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ContainerAwareInterface.php
@@ -0,0 +1,26 @@
+commandName = $commandName;
+ $this->response = $response;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the response object received from the command.
+ *
+ * @return Response
+ */
+ public function getResponse()
+ {
+ return $this->response;
+ }
+
+ /**
+ * Sets the response to be returned.
+ *
+ * @param Response $response
+ */
+ public function setResponse(Response $response)
+ {
+ $this->response = $response;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/BeforeCommandEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/BeforeCommandEvent.php
new file mode 100644
index 0000000..cbae027
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/BeforeCommandEvent.php
@@ -0,0 +1,83 @@
+commandName = $commandName;
+ $this->commandObject = $commandObject;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the command object.
+ *
+ * @return CommandAbstract
+ */
+ public function getCommandObject()
+ {
+ return $this->commandObject;
+ }
+
+ /**
+ * Sets the object of the command to be executed.
+ *
+ * @param CommandAbstract $commandObject
+ */
+ public function setCommandObject(CommandAbstract $commandObject)
+ {
+ $this->commandObject = $commandObject;
+ }
+
+ /**
+ * Returns the name of the command.
+ *
+ * @return string command name
+ */
+ public function getCommandName()
+ {
+ return $this->commandName;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/CKFinderEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/CKFinderEvent.php
new file mode 100644
index 0000000..dae3b13
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/CKFinderEvent.php
@@ -0,0 +1,145 @@
+app = $app;
+ }
+
+ /**
+ * Returns the application dependency injection container.
+ *
+ * @return CKFinder
+ */
+ public function getContainer()
+ {
+ return $this->app;
+ }
+
+ /**
+ * Returns the current request object.
+ *
+ * @return Request|null
+ */
+ public function getRequest()
+ {
+ return $this->app['request_stack']->getCurrentRequest();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/CopyFileEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/CopyFileEvent.php
new file mode 100644
index 0000000..261c45c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/CopyFileEvent.php
@@ -0,0 +1,64 @@
+copiedFile = $copiedFile;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the copied file object.
+ *
+ * @return CopiedFile
+ *
+ * @deprecated Please use getFile() instead.
+ */
+ public function getCopiedFile()
+ {
+ return $this->copiedFile;
+ }
+
+ /**
+ * Returns the copied file object.
+ *
+ * @return CopiedFile
+ */
+ public function getFile()
+ {
+ return $this->copiedFile;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/CreateFolderEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/CreateFolderEvent.php
new file mode 100644
index 0000000..1ebb786
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/CreateFolderEvent.php
@@ -0,0 +1,83 @@
+workingFolder = $workingFolder;
+ $this->newFolderName = $newFolderName;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the working folder where the new folder is going to be created.
+ *
+ * @return WorkingFolder
+ */
+ public function getWorkingFolder()
+ {
+ return $this->workingFolder;
+ }
+
+ /**
+ * Returns the name of the new folder.
+ *
+ * @return string
+ */
+ public function getNewFolderName()
+ {
+ return $this->newFolderName;
+ }
+
+ /**
+ * Sets the name for the new folder.
+ *
+ * @param string $newFolderName
+ */
+ public function setNewFolderName($newFolderName)
+ {
+ $this->newFolderName = $newFolderName;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/DeleteFileEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/DeleteFileEvent.php
new file mode 100644
index 0000000..3a5307f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/DeleteFileEvent.php
@@ -0,0 +1,64 @@
+deletedFile = $deletedFile;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the deleted file object.
+ *
+ * @return DeletedFile
+ *
+ * @deprecated Please use getFile() instead.
+ */
+ public function getDeletedFile()
+ {
+ return $this->deletedFile;
+ }
+
+ /**
+ * Returns the deleted file object.
+ *
+ * @return DeletedFile
+ */
+ public function getFile()
+ {
+ return $this->deletedFile;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/DeleteFolderEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/DeleteFolderEvent.php
new file mode 100644
index 0000000..cefe24d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/DeleteFolderEvent.php
@@ -0,0 +1,54 @@
+workingFolder = $workingFolder;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the working folder that is going to be deleted.
+ *
+ * @return WorkingFolder
+ */
+ public function getWorkingFolder()
+ {
+ return $this->workingFolder;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/DownloadFileEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/DownloadFileEvent.php
new file mode 100644
index 0000000..855df2d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/DownloadFileEvent.php
@@ -0,0 +1,64 @@
+downloadedFile = $downloadedFile;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the downloaded file object.
+ *
+ * @return DownloadedFile
+ *
+ * @deprecated Please use getFile() instead.
+ */
+ public function getDownloadedFile()
+ {
+ return $this->downloadedFile;
+ }
+
+ /**
+ * Returns the downloaded file object.
+ *
+ * @return DownloadedFile
+ */
+ public function getFile()
+ {
+ return $this->downloadedFile;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/EditFileEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/EditFileEvent.php
new file mode 100644
index 0000000..d7b04a8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/EditFileEvent.php
@@ -0,0 +1,89 @@
+editedFile = $editedFile;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the edited file object.
+ *
+ * @return EditedFile
+ *
+ * @deprecated Please use getFile() instead.
+ */
+ public function getEditedFile()
+ {
+ return $this->editedFile;
+ }
+
+ /**
+ * Returns the edited file object.
+ *
+ * @return EditedFile
+ */
+ public function getFile()
+ {
+ return $this->editedFile;
+ }
+
+ /**
+ * Returns new contents of the edited file.
+ *
+ * @return string
+ */
+ public function getNewContents()
+ {
+ return $this->editedFile->getNewContents();
+ }
+
+ /**
+ * Sets new contents for the edited file.
+ *
+ * @param string $newContents
+ */
+ public function setNewContents($newContents)
+ {
+ $this->editedFile->setNewContents($newContents);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/FileUploadEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/FileUploadEvent.php
new file mode 100644
index 0000000..0b54e76
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/FileUploadEvent.php
@@ -0,0 +1,64 @@
+uploadedFile = $uploadedFile;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the uploaded file object.
+ *
+ * @return UploadedFile
+ *
+ * @deprecated Please use getFile() instead.
+ */
+ public function getUploadedFile()
+ {
+ return $this->uploadedFile;
+ }
+
+ /**
+ * Returns the uploaded file object.
+ *
+ * @return UploadedFile
+ */
+ public function getFile()
+ {
+ return $this->uploadedFile;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/MoveFileEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/MoveFileEvent.php
new file mode 100644
index 0000000..28d672a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/MoveFileEvent.php
@@ -0,0 +1,64 @@
+movedFile = $movedFile;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the moved file object.
+ *
+ * @return MovedFile
+ *
+ * @deprecated Please use getFile() instead.
+ */
+ public function getMovedFile()
+ {
+ return $this->movedFile;
+ }
+
+ /**
+ * Returns the moved file object.
+ *
+ * @return MovedFile
+ */
+ public function getFile()
+ {
+ return $this->movedFile;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/ProxyDownloadEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/ProxyDownloadEvent.php
new file mode 100644
index 0000000..36f95a7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/ProxyDownloadEvent.php
@@ -0,0 +1,53 @@
+downloadedFile = $downloadedFile;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the downloaded file object.
+ *
+ * @return DownloadedFile|ResizedImage
+ */
+ public function getFile()
+ {
+ return $this->downloadedFile;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/RenameFileEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/RenameFileEvent.php
new file mode 100644
index 0000000..0eaed7f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/RenameFileEvent.php
@@ -0,0 +1,64 @@
+renamedFile = $renamedFile;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the renamed file object.
+ *
+ * @return RenamedFile
+ *
+ * @deprecated Please use getFile() instead.
+ */
+ public function getRenamedFile()
+ {
+ return $this->renamedFile;
+ }
+
+ /**
+ * Returns the renamed file object.
+ *
+ * @return RenamedFile
+ */
+ public function getFile()
+ {
+ return $this->renamedFile;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/RenameFolderEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/RenameFolderEvent.php
new file mode 100644
index 0000000..02992a6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/RenameFolderEvent.php
@@ -0,0 +1,83 @@
+workingFolder = $workingFolder;
+ $this->newFolderName = $newFolderName;
+
+ parent::__construct($app);
+ }
+
+ /**
+ * Returns the working folder where the new folder is going to be renamed.
+ *
+ * @return WorkingFolder
+ */
+ public function getWorkingFolder()
+ {
+ return $this->workingFolder;
+ }
+
+ /**
+ * Returns the new name of the folder.
+ *
+ * @return string
+ */
+ public function getNewFolderName()
+ {
+ return $this->newFolderName;
+ }
+
+ /**
+ * Sets the new name for the folder.
+ *
+ * @param string $newFolderName
+ */
+ public function setNewFolderName($newFolderName)
+ {
+ $this->newFolderName = $newFolderName;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/ResizeImageEvent.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/ResizeImageEvent.php
new file mode 100644
index 0000000..1ce3f6f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Event/ResizeImageEvent.php
@@ -0,0 +1,60 @@
+resizedImage = $resizedImage;
+ }
+
+ /**
+ * Returns the resized image object.
+ *
+ * @return ResizedImageAbstract
+ */
+ public function getResizedImage()
+ {
+ return $this->resizedImage;
+ }
+
+ /**
+ * Sets the resized image object.
+ *
+ * @param ResizedImageAbstract $resizedImage
+ */
+ public function setResizedImage(ResizedImageAbstract $resizedImage)
+ {
+ $this->resizedImage = $resizedImage;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Exception/AccessDeniedException.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Exception/AccessDeniedException.php
new file mode 100644
index 0000000..1803cad
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Exception/AccessDeniedException.php
@@ -0,0 +1,43 @@
+parameters = $parameters;
+
+ parent::__construct($message, $code, $previous);
+ }
+
+ /**
+ * Returns parameters used for replacements during translation.
+ *
+ * @return array
+ */
+ public function getParameters()
+ {
+ return $this->parameters;
+ }
+
+ /**
+ * Returns the HTTP status code for this exception.
+ *
+ * @return int HTTP status code for exception
+ */
+ public function getHttpStatusCode()
+ {
+ return $this->httpStatusCode;
+ }
+
+ /**
+ * Sets the HTTP status code for this exception.
+ *
+ * @param int $httpStatusCode
+ *
+ * @return $this
+ */
+ public function setHttpStatusCode($httpStatusCode)
+ {
+ $this->httpStatusCode = $httpStatusCode;
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Exception/FileNotFoundException.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Exception/FileNotFoundException.php
new file mode 100644
index 0000000..130ed2d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Exception/FileNotFoundException.php
@@ -0,0 +1,42 @@
+translator = $translator;
+ $this->debug = $debug;
+ $this->logger = $logger;
+
+ if ($debug) {
+ set_error_handler(array($this, 'errorHandler'));
+ }
+ }
+
+ public function onCKFinderError(GetResponseForExceptionEvent $event)
+ {
+ $exception = $event->getException();
+
+ $exceptionCode = $exception->getCode() ?: Error::UNKNOWN;
+
+ $replacements = array();
+
+ $httpStatusCode = 200;
+
+ if ($exception instanceof CKFinderException) {
+ $replacements = $exception->getParameters();
+ $httpStatusCode = $exception->getHttpStatusCode();
+ }
+
+ $message =
+ $exceptionCode === Error::CUSTOM_ERROR
+ ? $exception->getMessage()
+ : $this->translator->translateErrorMessage($exceptionCode, $replacements);
+
+ $response = JsonResponse::create()->withError($exceptionCode, $message);
+
+ $event->setException(new HttpException($httpStatusCode));
+
+ $event->setResponse($response);
+
+ if ($this->debug && $this->logger) {
+ $this->logger->error($exception);
+ }
+
+ if (filter_var(ini_get('display_errors'), FILTER_VALIDATE_BOOLEAN)) {
+ throw $exception;
+ }
+ }
+
+ /**
+ * Custom error handler to catch all errors in the debug mode.
+ *
+ * @param int $errno
+ * @param string $errstr
+ * @param string $errfile
+ * @param int $errline
+ *
+ * @throws \Exception
+ */
+ public function errorHandler($errno, $errstr, $errfile, $errline)
+ {
+ $wrapperException = new \ErrorException($errstr, 0, $errno, $errfile, $errline);
+ $this->logger->warning($wrapperException);
+
+ if (filter_var(ini_get('display_errors'), FILTER_VALIDATE_BOOLEAN)) {
+ throw $wrapperException;
+ }
+ }
+
+ /**
+ * Returns all events and callbacks.
+ *
+ * @see EventSubscriberInterface
+ *
+ * @return array
+ */
+ public static function getSubscribedEvents()
+ {
+ return array(KernelEvents::EXCEPTION => array('onCKFinderError', -255));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/CopiedFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/CopiedFile.php
new file mode 100644
index 0000000..4515b50
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/CopiedFile.php
@@ -0,0 +1,278 @@
+targetFolder = $app['working_folder'];
+
+ $this->sourceFileName = $fileName;
+
+ parent::__construct($fileName, $folder, $resourceType, $app);
+ }
+
+ /**
+ * Returns the target folder for a copied file.
+ *
+ * @return WorkingFolder
+ */
+ public function getTargetFolder()
+ {
+ return $this->targetFolder;
+ }
+
+ public function getFileName()
+ {
+ return $this->sourceFileName;
+ }
+
+ /**
+ * Sets copy options.
+ *
+ * @param string $copyOptions
+ *
+ * @see CopiedFile::$copyOptions
+ */
+ public function setCopyOptions($copyOptions)
+ {
+ $this->copyOptions = $copyOptions;
+ }
+
+ /**
+ * Checks if the file has an extension allowed in both source and target ResourceTypes.
+ *
+ * @return bool `true` if the file has an extension allowed in source and target directories.
+ */
+ public function hasAllowedExtension()
+ {
+ if (strpos($this->fileName, '.') === false) {
+ return true;
+ }
+
+ $extension = $this->getExtension();
+
+ return parent::hasAllowedExtension() &&
+ $this->targetFolder->getResourceType()->isAllowedExtension($extension);
+ }
+
+ /**
+ * Checks if the copied file size does not exceed the file size limit set for the target folder.
+ *
+ * @return bool
+ */
+ public function hasAllowedSize()
+ {
+ $filePath = $this->getFilePath();
+ $backend = $this->resourceType->getBackend();
+
+ if (!$backend->has($filePath)) {
+ return false;
+ }
+
+ $fileMetadata = $backend->getMetadata($filePath);
+
+ $fileSize = $fileMetadata['size'];
+
+ $maxSize = $this->targetFolder->getResourceType()->getMaxSize();
+
+ if ($maxSize && $fileSize > $maxSize) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * @copydoc File::autorename()
+ */
+ public function autorename(Backend $backend = null, $path = '')
+ {
+ return parent::autorename($this->targetFolder->getBackend(), $this->targetFolder->getPath());
+ }
+
+ /**
+ * Copies the current file.
+ *
+ * @return bool `true` if the file was copied successfully.
+ *
+ * @throws \Exception
+ */
+ public function doCopy()
+ {
+ $originalFileStream = $this->getContentsStream();
+
+ // Don't copy file to itself
+ if ($this->targetFolder->getBackend() === $this->resourceType->getBackend() &&
+ $this->targetFolder->getPath() === $this->getPath()) {
+ $this->addError(Error::SOURCE_AND_TARGET_PATH_EQUAL);
+
+ return false;
+ }
+
+ $targetFilename = $this->getTargetFilename();
+
+ if ($this->targetFolder->containsFile($targetFilename) && strpos($this->copyOptions, 'overwrite') === false) {
+ $this->addError(Error::ALREADY_EXIST);
+
+ return false;
+ }
+
+ if ($this->targetFolder->putStream($targetFilename, $originalFileStream)) {
+ $resizedImageRepository = $this->resourceType->getResizedImageRepository();
+ $resizedImageRepository->copyResizedImages(
+ $this->resourceType, $this->folder, $this->sourceFileName,
+ $this->targetFolder->getResourceType(), $this->targetFolder->getClientCurrentFolder(), $targetFilename
+ );
+
+ $this->getCache()->copy(
+ Path::combine($this->resourceType->getName(), $this->folder, $this->sourceFileName),
+ Path::combine($this->targetFolder->getResourceType()->getName(), $this->targetFolder->getClientCurrentFolder(), $targetFilename)
+ );
+
+ return true;
+ } else {
+ $this->addError(Error::ACCESS_DENIED);
+
+ return false;
+ }
+ }
+
+ /**
+ * Returns the target file name of the copied file.
+ *
+ * @return string
+ */
+ public function getTargetFilename()
+ {
+ if ($this->targetFolder->containsFile($this->getFilename()) &&
+ strpos($this->copyOptions, 'overwrite') === false &&
+ strpos($this->copyOptions, 'autorename') !== false) {
+ $this->autorename();
+ }
+
+ return $this->fileName;
+ }
+
+ /**
+ * Returns the source file name of the copied file.
+ *
+ * @return string
+ */
+ public function getSourceFilename()
+ {
+ return $this->sourceFileName;
+ }
+
+ /**
+ * Returns the target path of the copied file.
+ *
+ * @return string
+ */
+ public function getTargetFilePath()
+ {
+ return Path::combine($this->getTargetFolder()->getPath(), $this->getTargetFilename());
+ }
+
+ /**
+ * Returns the source file name of the copied file.
+ *
+ * @return string
+ */
+ public function getSourceFilePath()
+ {
+ return Path::combine($this->getPath(), $this->sourceFileName);
+ }
+
+ /**
+ * Validates the copied file.
+ *
+ * @return bool `true` if the copied file is valid and ready to be copied.
+ *
+ * @throws \Exception
+ */
+ public function isValid()
+ {
+ if (!$this->hasValidFilename() || !$this->hasValidPath()) {
+ throw new InvalidRequestException('Invalid filename or path');
+ }
+
+ if (!$this->hasAllowedExtension()) {
+ $this->addError(Error::INVALID_EXTENSION);
+
+ return false;
+ }
+
+ if ($this->isHidden() || $this->hasHiddenPath()) {
+ throw new InvalidRequestException('Copied file is hidden');
+ }
+
+ if (!$this->exists()) {
+ $this->addError(Error::FILE_NOT_FOUND);
+
+ return false;
+ }
+
+ if (!$this->hasAllowedSize()) {
+ $this->addError(Error::UPLOADED_TOO_BIG);
+
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/DeletedFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/DeletedFile.php
new file mode 100644
index 0000000..e3722cf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/DeletedFile.php
@@ -0,0 +1,73 @@
+resourceType->getBackend()->delete($this->getFilePath())) {
+ $this->deleteThumbnails();
+ $this->deleteResizedImages();
+ $this->getCache()->delete(Path::combine($this->resourceType->getName(), $this->folder, $this->getFilename()));
+
+ return true;
+ } else {
+ $this->addError(Error::ACCESS_DENIED);
+
+ return false;
+ }
+ }
+
+ public function isValid()
+ {
+ if (!$this->hasValidFilename() || !$this->hasValidPath()) {
+ throw new InvalidRequestException('Invalid filename or path');
+ }
+
+ if (!$this->hasAllowedExtension()) {
+ throw new InvalidExtensionException();
+ }
+
+ if ($this->isHidden() || $this->hasHiddenPath()) {
+ throw new InvalidRequestException('Deleted file is hidden');
+ }
+
+ if (!$this->exists()) {
+ $this->addError(Error::FILE_NOT_FOUND);
+
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/DownloadedFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/DownloadedFile.php
new file mode 100644
index 0000000..68930d7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/DownloadedFile.php
@@ -0,0 +1,117 @@
+workingFolder = $app['working_folder'];
+
+ parent::__construct($fileName, $this->workingFolder->getClientCurrentFolder(), $this->workingFolder->getResourceType(), $app);
+ }
+
+ /**
+ * Returns the folder of the downloaded file.
+ *
+ * @return WorkingFolder
+ */
+ public function getWorkingFolder()
+ {
+ return $this->workingFolder;
+ }
+
+ /**
+ * Validates the downloaded file.
+ *
+ * @throws \Exception
+ *
+ * @return boolean `true` if the file passed validation.
+ */
+ public function isValid()
+ {
+ if (!$this->hasValidFilename()) {
+ throw new InvalidNameException('Invalid file name');
+ }
+
+ if (!$this->hasAllowedExtension()) {
+ throw new InvalidExtensionException();
+ }
+
+ if ($this->isHidden() || !$this->exists()) {
+ throw new FileNotFoundException();
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks if the file extension is allowed.
+ *
+ * @return bool `true` if an extension is allowed.
+ */
+ public function hasAllowedExtension()
+ {
+ if (strpos($this->fileName, '.') === false) {
+ return true;
+ }
+
+ $extension = $this->getExtension();
+
+ return $this->workingFolder->getResourceType()->isAllowedExtension($extension);
+ }
+
+ /**
+ * Checks if the file is hidden.
+ *
+ * @return bool `true` if the file is hidden.
+ */
+ public function isHidden()
+ {
+ return $this->workingFolder->getBackend()->isHiddenFile($this->fileName);
+ }
+
+ /**
+ * Checks if the file exists.
+ *
+ * @return bool `true` if the file exists.
+ */
+ public function exists()
+ {
+ return $this->workingFolder->containsFile($this->fileName);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/EditedFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/EditedFile.php
new file mode 100644
index 0000000..5d4f2c9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/EditedFile.php
@@ -0,0 +1,234 @@
+workingFolder = $app['working_folder'];
+ $this->newFileName = $newFileName;
+
+ parent::__construct($fileName, $this->workingFolder->getClientCurrentFolder(), $this->workingFolder->getResourceType(), $app);
+ }
+
+ /**
+ * Validates the file.
+ *
+ * @return bool `true` if the file passed validation.
+ *
+ * @throws AlreadyExistsException
+ * @throws FileNotFoundException
+ * @throws InvalidExtensionException
+ * @throws InvalidNameException
+ * @throws InvalidRequestException
+ * @throws InvalidUploadException
+ */
+ public function isValid()
+ {
+ if ($this->newFileName) {
+ if (!File::isValidName($this->newFileName, $this->config->get('disallowUnsafeCharacters'))) {
+ throw new InvalidNameException('Invalid file name');
+ }
+
+ if ($this->resourceType->getBackend()->isHiddenFile($this->newFileName)) {
+ throw new InvalidRequestException('New provided file name is hidden');
+ }
+
+ if (!$this->resourceType->isAllowedExtension($this->getNewExtension())) {
+ throw new InvalidExtensionException();
+ }
+
+ if ($this->config->get('checkDoubleExtension') && !$this->areValidDoubleExtensions($this->newFileName)) {
+ throw new InvalidExtensionException();
+ }
+
+ if ($this->workingFolder->containsFile($this->newFileName)) {
+ throw new AlreadyExistsException('File already exists');
+ }
+ }
+
+ if (!$this->hasValidFilename() || !$this->hasValidPath()) {
+ throw new InvalidRequestException('Invalid filename or path');
+ }
+
+ if ($this->isHidden() || $this->hasHiddenPath()) {
+ throw new InvalidRequestException('Edited file is hidden');
+ }
+
+ if ($this->config->get('checkDoubleExtension') && !$this->areValidDoubleExtensions()) {
+ throw new InvalidExtensionException();
+ }
+
+ if (!$this->resourceType->isAllowedExtension($this->getExtension())) {
+ throw new InvalidExtensionException();
+ }
+
+ if (!$this->saveAsNew && !$this->exists()) {
+ throw new FileNotFoundException();
+ }
+
+ if ($this->newContents) {
+ if (Utils::containsHtml(substr($this->newContents, 0, 1024)) &&
+ !in_array(strtolower($this->newFileName ? $this->getNewExtension() : $this->getExtension()), $this->config->get('htmlExtensions'))) {
+ throw new InvalidUploadException('HTML detected in disallowed file type', Error::UPLOADED_WRONG_HTML_FILE);
+ }
+
+ $maxFileSize = $this->resourceType->getMaxSize();
+
+ if ($maxFileSize && strlen($this->newContents) > $maxFileSize) {
+ throw new InvalidUploadException('Uploaded file is too big', Error::UPLOADED_TOO_BIG);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks double extensions in a given file name.
+ *
+ * @param null|string $fileName file name or null if the current file name is checked.
+ *
+ * @return bool `true` if extensions are allowed for the current resource type.
+ */
+ protected function areValidDoubleExtensions($fileName = null)
+ {
+ $extensions = $this->getExtensions($fileName);
+
+ foreach ($extensions as $ext) {
+ if (!$this->resourceType->isAllowedExtension($ext)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the new file name of the edited file.
+ *
+ * @return null|string the new file name of the edited file.
+ */
+ public function getNewFilename()
+ {
+ return $this->newFileName;
+ }
+
+ /**
+ * Returns the new file extension.
+ */
+ public function getNewExtension()
+ {
+ return $this->newFileName ? pathinfo($this->newFileName, PATHINFO_EXTENSION) : null;
+ }
+
+ /**
+ * Sets the flag if the edited file is saved as new and does not exist in the file system yet.
+ *
+ * @param bool $saveAsNew
+ */
+ public function saveAsNew($saveAsNew)
+ {
+ $this->saveAsNew = $saveAsNew;
+ }
+
+ /**
+ * Sets new file contents.
+ *
+ * @param string $contents new file contents
+ * @param string|null $filePath optional path if new contents should be saved in a new file.
+ *
+ * @return bool
+ */
+ public function save($contents, $filePath = null)
+ {
+ return parent::save($contents, $this->newFileName ? Path::combine($this->getPath(), $this->newFileName) : null);
+ }
+
+ /**
+ * Sets new contents for the edited file.
+ *
+ * @param string $newContents
+ */
+ public function setNewContents($newContents)
+ {
+ $this->newContents = $newContents;
+ }
+
+ /**
+ * Returns new contents set for the edited file.
+ *
+ * @return string
+ */
+ public function getNewContents()
+ {
+ return $this->newContents;
+ }
+
+ /**
+ * Returns the folder of the edited file.
+ *
+ * @return WorkingFolder
+ */
+ public function getWorkingFolder()
+ {
+ return $this->workingFolder;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/EditedImage.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/EditedImage.php
new file mode 100644
index 0000000..cef3e83
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/EditedImage.php
@@ -0,0 +1,62 @@
+newWidth = $newWidth;
+ $this->newHeight = $newHeight;
+ }
+
+ /**
+ * @copydoc EditedFile::isValid()
+ */
+ public function isValid()
+ {
+ $imagesConfig = $this->config->get('images');
+
+ if ($imagesConfig['maxWidth'] && $this->newWidth > $imagesConfig['maxWidth'] ||
+ $imagesConfig['maxHeight'] && $this->newHeight > $imagesConfig['maxHeight']) {
+ throw new InvalidUploadException('The image dimensions exceeds images.maxWidth or images.maxHeight');
+ }
+
+ return parent::isValid();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/ExistingFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/ExistingFile.php
new file mode 100644
index 0000000..7590301
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/ExistingFile.php
@@ -0,0 +1,342 @@
+folder = $folder;
+ $this->resourceType = $resourceType;
+
+ parent::__construct($fileName, $app);
+ }
+
+ /**
+ * Returns backend-relative folder path (i.e. a path with a prepended resource type directory).
+ *
+ * @return string backend-relative path
+ */
+ public function getPath()
+ {
+ return Path::combine($this->resourceType->getDirectory(), $this->folder);
+ }
+
+ /**
+ * Returns backend-relative file path.
+ *
+ * @return string file path
+ */
+ public function getFilePath()
+ {
+ return Path::combine($this->getPath(), $this->getFilename());
+ }
+
+ /**
+ * Checks if the current file folder path is valid.
+ *
+ * @return bool `true` if the path is valid.
+ */
+ public function hasValidPath()
+ {
+ return Path::isValid($this->getPath());
+ }
+
+ /**
+ * Returns the resource type of the file.
+ *
+ * @return ResourceType
+ */
+ public function getResourceType()
+ {
+ return $this->resourceType;
+ }
+
+ /**
+ * Checks if the current file has an extension allowed in its resource type.
+ *
+ * @return bool `true` if the file has an allowed exception.
+ */
+ public function hasAllowedExtension()
+ {
+ if (strpos($this->getFilename(), '.') === false) {
+ return true;
+ }
+
+ $extension = $this->getExtension();
+
+ return $this->resourceType->isAllowedExtension($extension);
+ }
+
+ /**
+ * Checks if the current file is hidden.
+ *
+ * @return bool `true` if the file is hidden.
+ */
+ public function isHidden()
+ {
+ return $this->resourceType->getBackend()->isHiddenFile($this->getFilename());
+ }
+
+ /**
+ * Checks if the current file has a hidden path (i.e. if any of the parent folders is hidden).
+ *
+ * @return bool `true` if the path is hidden.
+ */
+ public function hasHiddenPath()
+ {
+ return $this->resourceType->getBackend()->isHiddenPath($this->getPath());
+ }
+
+ /**
+ * Checks if the current file exists.
+ *
+ * @return bool `true` if the file exists.
+ */
+ public function exists()
+ {
+ $filePath = $this->getFilePath();
+ $backend = $this->resourceType->getBackend();
+
+ if (!$backend->has($filePath)) {
+ return false;
+ }
+
+ $fileMetadata = $backend->getMetadata($filePath);
+
+ return isset($fileMetadata['type']) && $fileMetadata['type'] === 'file';
+ }
+
+ /**
+ * Returns file contents stream.
+ *
+ * @return resource contents stream
+ */
+ public function getContentsStream()
+ {
+ $filePath = $this->getFilePath();
+
+ return $this->resourceType->getBackend()->readStream($filePath);
+ }
+
+ /**
+ * Returns file contents.
+ *
+ * @return resource contents stream
+ */
+ public function getContents()
+ {
+ $filePath = $this->getFilePath();
+
+ return $this->resourceType->getBackend()->read($filePath);
+ }
+
+ /**
+ * Sets new file contents.
+ *
+ * @param string $contents file contents
+ * @param string $filePath path to save the file
+ *
+ * @return bool `true` if saved successfully.
+ *
+ * @throws \Exception if content size is too big.
+ */
+ public function save($contents, $filePath = null)
+ {
+ $filePath = $filePath ?: $this->getFilePath();
+
+ $maxSize = $this->resourceType->getMaxSize();
+
+ $contentsSize = strlen($contents);
+
+ if ($maxSize && $contentsSize > $maxSize) {
+ throw new InvalidUploadException('New file contents is too big for resource type limit', Error::UPLOADED_TOO_BIG);
+ }
+
+ $saved = $this->resourceType->getBackend()->put($filePath, $contents);
+
+ if ($saved) {
+ $this->deleteThumbnails();
+ }
+
+ return $saved;
+ }
+
+ /**
+ * Adds an error to the array of errors of the current file.
+ *
+ * @param int $number error number
+ *
+ * @see Error
+ */
+ public function addError($number)
+ {
+ $this->errors[] = array(
+ 'number' => $number,
+ 'name' => $this->getFilename(),
+ 'type' => $this->resourceType->getName(),
+ 'folder' => $this->folder
+ );
+ }
+
+ /**
+ * Returns an array of errors that occurred during file processing.
+ *
+ * @return array
+ */
+ public function getErrors()
+ {
+ return $this->errors;
+ }
+
+ /**
+ * Removes the thumbnail generated for the current file.
+ *
+ * @return `true` if the thumbnail was found and deleted.
+ */
+ public function deleteThumbnails()
+ {
+ $extension = $this->getExtension();
+
+ if (Image::isSupportedExtension($extension) || ($extension === 'bmp' && $this->config->get('thumbnails.bmpSupported'))) {
+ $thumbsRepository = $this->resourceType->getThumbnailRepository();
+
+ return $thumbsRepository->deleteThumbnails($this->resourceType, $this->folder, $this->getFilename());
+ }
+
+ return false;
+ }
+
+ /**
+ * Removes resized images generated for the current file.
+ *
+ * @return `true` if resized images were found and deleted.
+ */
+ public function deleteResizedImages()
+ {
+ $extension = $this->getExtension();
+
+ if (Image::isSupportedExtension($extension)) {
+ $resizedImageRepository = $this->resourceType->getResizedImageRepository();
+
+ return $resizedImageRepository->deleteResizedImages($this->resourceType, $this->folder, $this->getFilename());
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns last modification time.
+ *
+ * @return int Unix timestamp
+ */
+ public function getTimestamp()
+ {
+ $metadata = $this->getMetadata();
+
+ return $metadata['timestamp'];
+ }
+
+
+ /**
+ * Returns file MIME type.
+ *
+ * @return string file MIME type.
+ */
+ public function getMimeType()
+ {
+ $metadata = $this->getMetadata();
+
+ return $metadata['mimetype'];
+ }
+
+ /**
+ * Returns file size.
+ *
+ * @return int size in bytes.
+ */
+ public function getSize()
+ {
+ $metadata = $this->getMetadata();
+
+ return $metadata['size'];
+ }
+
+ /**
+ * Returns file metadata.
+ *
+ * @return array
+ */
+ public function getMetadata()
+ {
+ if (null === $this->metadata) {
+ $filePath = $this->getFilePath();
+
+ $this->metadata = $this->resourceType->getBackend()->getWithMetadata($filePath, array('mimetype', 'timestamp'));
+ }
+
+ return $this->metadata;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/File.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/File.php
new file mode 100644
index 0000000..b813df1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/File.php
@@ -0,0 +1,225 @@
+fileName = $fileName;
+ $this->config = $app['config'];
+ $this->app = $app;
+ }
+
+ /**
+ * Validates current file name.
+ *
+ * @return bool `true` if the file name is valid.
+ */
+ public function hasValidFilename()
+ {
+ return static::isValidName($this->fileName, $this->config->get('disallowUnsafeCharacters'));
+ }
+
+ /**
+ * Returns current file name.
+ *
+ * @return string
+ */
+ public function getFilename()
+ {
+ return $this->fileName;
+ }
+
+ /**
+ * Returns current file extension.
+ *
+ * @return string
+ */
+ public function getExtension()
+ {
+ return strtolower(pathinfo($this->fileName, PATHINFO_EXTENSION));
+ }
+
+ /**
+ * Returns a list of current file extensions.
+ *
+ * For example for a file named `file.foo.bar.baz` it will return an array containing
+ * `['foo', 'bar', 'baz']`.
+ *
+ * @param null $newFileName the file name to check if it is different than the current file name (for example for validation of
+ * a new file name in edited files).
+ *
+ * @return array
+ */
+ public function getExtensions($newFileName = null)
+ {
+ $fileName = $newFileName ?: $this->fileName;
+
+ if (strpos($fileName, '.') === false) {
+ return true;
+ }
+
+ $pieces = explode('.', $fileName);
+
+ array_shift($pieces); // Remove file base name
+
+ return array_map('strtolower', $pieces);
+ }
+
+ /**
+ * Renames the current file by adding a number to the file name.
+ *
+ * Renaming is done by adding a number in parenthesis provided that the file name does
+ * not collide with any other file existing in the target backend/path.
+ * For example, if the target backend path contains a file named `foo.txt`
+ * and the current file name is `foo.txt`, this method will change the current file
+ * name to `foo(1).txt`.
+ *
+ * @param Backend $backend target backend
+ * @param string $path target backend-relative path
+ *
+ * @return bool `true` if file was renamed.
+ */
+ public function autorename(Backend $backend = null, $path = '')
+ {
+ $filePath = Path::combine($path, $this->fileName);
+
+ if (!$backend->has($filePath)) {
+ return false;
+ }
+
+ $pieces = explode('.', $this->fileName);
+ $basename = array_shift($pieces);
+ $extension = implode('.', $pieces);
+
+ $i = 0;
+ while (true) {
+ $i++;
+ $this->fileName = "{$basename}({$i}).{$extension}";
+
+ $filePath = Path::combine($path, $this->fileName);
+
+ if (!$backend->has($filePath)) {
+ break;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Check whether `$fileName` is a valid file name. Returns `true` on success.
+ *
+ * @param string $fileName
+ * @param bool $disallowUnsafeCharacters
+ *
+ * @return boolean `true` if `$fileName` is a valid file name.
+ */
+ public static function isValidName($fileName, $disallowUnsafeCharacters = true)
+ {
+ if (null === $fileName || !strlen(trim($fileName)) || substr($fileName, -1, 1) == "." || false !== strpos($fileName, "..")) {
+ return false;
+ }
+
+ if (preg_match(',[[:cntrl:]]|[/\\\\:\*\?\"\<\>\|],', $fileName)) {
+ return false;
+ }
+
+ if ($disallowUnsafeCharacters) {
+ if (strpos($fileName, ";") !== false) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks if the current file has an image extension.
+ *
+ * @return bool `true` if the file name has an image extension.
+ */
+ public function isImage()
+ {
+ $imagesExtensions = array('gif', 'jpeg', 'jpg', 'png', 'psd', 'bmp', 'tiff', 'tif',
+ 'swc', 'iff', 'jpc', 'jp2', 'jpx', 'jb2', 'xbm', 'wbmp');
+
+ return in_array($this->getExtension(), $imagesExtensions);
+ }
+
+ /**
+ * Secures the file name from unsafe characters.
+ *
+ * @param string $fileName
+ * @param bool $disallowUnsafeCharacters
+ *
+ * @return string
+ */
+ public static function secureName($fileName, $disallowUnsafeCharacters)
+ {
+ $fileName = str_replace(array(":", "*", "?", "|", "/"), "_", $fileName);
+
+ if ($disallowUnsafeCharacters) {
+ $fileName = str_replace(";", "_", $fileName);
+ }
+
+ return $fileName;
+ }
+
+ /**
+ * @return CacheManager
+ */
+ public function getCache()
+ {
+ return $this->app['cache'];
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/MovedFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/MovedFile.php
new file mode 100644
index 0000000..a372f0b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/MovedFile.php
@@ -0,0 +1,64 @@
+getFilePath();
+ $originalFileName = $this->getFilename(); // Save original file name - it may be autorenamed when copied
+
+ if (parent::doCopy()) {
+ // Remove source file
+ $this->deleteThumbnails();
+ $this->resourceType->getResizedImageRepository()->deleteResizedImages($this->resourceType, $this->folder, $originalFileName);
+ $this->getCache()->delete(Path::combine($this->resourceType->getName(), $this->folder, $originalFileName));
+
+ return $this->resourceType->getBackend()->delete($originalFilePath);
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/RenamedFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/RenamedFile.php
new file mode 100644
index 0000000..dbbcc8d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/RenamedFile.php
@@ -0,0 +1,158 @@
+newFileName = static::secureName($newFileName, $this->config->get('disallowUnsafeCharacters'));
+
+ if ($this->config->get('checkDoubleExtension')) {
+ $this->newFileName = Utils::replaceDisallowedExtensions($this->newFileName, $resourceType);
+ }
+ }
+
+ /**
+ * Returns the new file name of the renamed file.
+ *
+ * @return string
+ */
+ public function getNewFileName()
+ {
+ return $this->newFileName;
+ }
+
+ /**
+ * Returns the new path of the renamed file.
+ *
+ * @return string
+ */
+ public function getNewFilePath()
+ {
+ return Path::combine($this->getPath(), $this->getNewFileName());
+ }
+
+ /**
+ * Sets the new file name of the renamed file.
+ *
+ * @param string $newFileName
+ */
+ public function setNewFileName($newFileName)
+ {
+ $this->newFileName = $newFileName;
+ }
+
+ /**
+ * Renames the current file.
+ *
+ * @return bool `true` if the file was renamed successfully.
+ *
+ * @throws \Exception
+ */
+ public function doRename()
+ {
+ $oldPath = Path::combine($this->getPath(), $this->getFilename());
+ $newPath = Path::combine($this->getPath(), $this->newFileName);
+
+ $backend = $this->resourceType->getBackend();
+
+ if ($backend->has($newPath)) {
+ throw new AlreadyExistsException('Target file already exists');
+ }
+
+ $this->deleteThumbnails();
+ $this->resourceType->getResizedImageRepository()->renameResizedImages(
+ $this->resourceType,
+ $this->folder,
+ $this->getFilename(),
+ $this->newFileName
+ );
+
+ $this->getCache()->move(
+ Path::combine($this->resourceType->getName(), $this->folder, $this->getFilename()),
+ Path::combine($this->resourceType->getName(), $this->folder, $this->newFileName));
+
+ return $backend->rename($oldPath, $newPath);
+ }
+
+ /**
+ * Validates the renamed file.
+ *
+ * @return bool
+ *
+ * @throws \Exception
+ */
+ public function isValid()
+ {
+ $newExtension = pathinfo($this->newFileName, PATHINFO_EXTENSION);
+
+ if (!$this->hasAllowedExtension()) {
+ throw new InvalidRequestException('Invalid source file extension');
+ }
+
+ if (!$this->resourceType->isAllowedExtension($newExtension)) {
+ throw new InvalidExtensionException('Invalid target file extension');
+ }
+
+ if (!$this->hasValidFilename() || $this->isHidden()) {
+ throw new InvalidRequestException('Invalid source file name');
+ }
+
+ if (!File::isValidName($this->newFileName, $this->config->get('disallowUnsafeCharacters')) ||
+ $this->resourceType->getBackend()->isHiddenFile($this->newFileName)) {
+ throw new InvalidNameException('Invalid target file name');
+ }
+
+ if (!$this->exists()) {
+ throw new FileNotFoundException();
+ }
+
+ return true;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/UploadedFile.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/UploadedFile.php
new file mode 100644
index 0000000..fdba5f1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/UploadedFile.php
@@ -0,0 +1,294 @@
+getClientOriginalName(), $app);
+
+ $this->uploadedFile = $uploadedFile;
+ $this->workingFolder = $app['working_folder'];
+
+ $this->tempFilePath = tempnam($this->config->get('tempDirectory'), 'ckf');
+ $pathinfo = pathinfo($this->tempFilePath);
+
+ if (!is_writable($this->tempFilePath)) {
+ throw new InvalidUploadException('The temporary folder is not writable for CKFinder');
+ }
+
+ try {
+ $uploadedFile->move($pathinfo['dirname'], $pathinfo['basename']);
+ } catch (\Exception $e) {
+ $errorMessage = $uploadedFile->getErrorMessage();
+ switch ($uploadedFile->getError()) {
+ case UPLOAD_ERR_INI_SIZE:
+ case UPLOAD_ERR_FORM_SIZE:
+ throw new InvalidUploadException($errorMessage, Error::UPLOADED_TOO_BIG, array(), $e);
+
+ case UPLOAD_ERR_PARTIAL:
+ case UPLOAD_ERR_NO_FILE:
+ throw new InvalidUploadException($errorMessage, Error::UPLOADED_CORRUPT, array(), $e);
+
+ case UPLOAD_ERR_NO_TMP_DIR:
+ throw new InvalidUploadException($errorMessage, Error::UPLOADED_NO_TMP_DIR, array(), $e);
+
+ case UPLOAD_ERR_CANT_WRITE:
+ case UPLOAD_ERR_EXTENSION:
+ throw new AccessDeniedException($errorMessage, array(), $e);
+ }
+ }
+ }
+
+ /**
+ * Checks if the file was uploaded properly.
+ *
+ * @return bool `true` if upload is valid.
+ */
+ public function isValid()
+ {
+ return $this->uploadedFile && $this->tempFilePath && is_readable($this->tempFilePath) && is_writable($this->tempFilePath);
+ }
+
+ /**
+ * Sanitizes current file name using options set in Config.
+ */
+ public function sanitizeFilename()
+ {
+ $this->fileName = static::secureName($this->fileName, $this->config->get('disallowUnsafeCharacters'));
+
+ $resourceType = $this->workingFolder->getResourceType();
+
+ if ($this->config->get('checkDoubleExtension')) {
+ $this->fileName = Utils::replaceDisallowedExtensions($this->fileName, $resourceType);
+ }
+ }
+
+ /**
+ * Checks if the file extension is allowed in the target folder.
+ *
+ * @return bool `true` if an extension is allowed in the target folder.
+ */
+ public function hasAllowedExtension()
+ {
+ if (strpos($this->fileName, '.') === false) {
+ return true;
+ }
+
+ return $this->workingFolder->getResourceType()->isAllowedExtension($this->getExtension());
+ }
+
+ /**
+ * @copydoc File::autorename()
+ */
+ public function autorename(Backend $backend = null, $path = '')
+ {
+ return parent::autorename($this->workingFolder->getBackend(), $this->workingFolder->getPath());
+ }
+
+ /**
+ * Checks if the file was renamed.
+ *
+ * @return bool `true` if the file was renamed.
+ */
+ public function wasRenamed()
+ {
+ return $this->fileName != $this->uploadedFile->getClientOriginalName();
+ }
+
+ /**
+ * Check if the current file name is defined as hidden in configuration settings.
+ *
+ * @return bool `true` if the file name is hidden.
+ */
+ public function isHiddenFile()
+ {
+ return $this->workingFolder->getBackend()->isHiddenFile($this->fileName);
+ }
+
+ /**
+ * Returns the upload error.
+ *
+ * If the upload was successful, the `UPLOAD_ERR_OK` constant is returned.
+ * Otherwise one of the other `UPLOAD_ERR_XXX` constants is returned.
+ *
+ * @return int upload error
+ */
+ public function getError()
+ {
+ return $this->uploadedFile->getError();
+ }
+
+ /**
+ * Returns the upload error message.
+ *
+ * @return string upload error
+ */
+ public function getErrorMessage()
+ {
+ return $this->uploadedFile->getErrorMessage();
+ }
+
+ /**
+ * Returns uploaded file contents.
+ *
+ * @return string uploaded file data
+ */
+ public function getContents()
+ {
+ return file_get_contents($this->tempFilePath);
+ }
+
+ /**
+ * Returns contents stream for the uploaded file.
+ *
+ * @return resource
+ */
+ public function getContentsStream()
+ {
+ return fopen($this->tempFilePath, 'r');
+ }
+
+ /**
+ * Returns uploaded file size in bytes.
+ *
+ * @return int file size in bytes
+ */
+ public function getSize()
+ {
+ clearstatcache();
+
+ return filesize($this->tempFilePath);
+ }
+
+ /**
+ * Returns uploaded file MIME type.
+ *
+ * @return string
+ */
+ public function getMimeType()
+ {
+ $guesser = MimeTypeGuesser::getInstance();
+
+ return $guesser->guess($this->tempFilePath);
+ }
+
+ /**
+ * Detects HTML in the first KB to prevent against a potential security issue with
+ * IE/Safari/Opera file type auto detection bug.
+ * Returns `true` if a file contains insecure HTML code at the beginning.
+ *
+ * @return boolean `true` if the uploaded file contains HTML in the first 1024 bytes.
+ */
+ public function containsHtml()
+ {
+ $fp = fopen($this->tempFilePath, 'rb');
+ $chunk = fread($fp, 1024);
+ fclose($fp);
+
+ return Utils::containsHtml($chunk);
+ }
+
+ /**
+ * Checks if a file with the current extension is allowed to contain any HTML/JS.
+ *
+ * @return bool `true` if a file is allowed to contain HTML chunks.
+ */
+ public function isAllowedHtmlFile()
+ {
+ return in_array(strtolower($this->getExtension()), $this->config->get('htmlExtensions'));
+ }
+
+ /**
+ * Checks if the file is a valid image.
+ *
+ * Internally `getimagesize` is used for validation.
+ *
+ * @return bool `true` if the file is a valid image.
+ */
+ public function isValidImage()
+ {
+ if (@getimagesize($this->tempFilePath) === false) {
+ return false ;
+ }
+
+ return true;
+ }
+
+ /**
+ * Saves the data as new file contents.
+ *
+ * @param string $data new file contents
+ */
+ public function save($data)
+ {
+ file_put_contents($this->tempFilePath, $data);
+ }
+
+ /**
+ * Destructor: Removes the temporary file, if required.
+ */
+ public function __destruct()
+ {
+ if (file_exists($this->tempFilePath)) {
+ unlink($this->tempFilePath);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/Folder/Folder.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/Folder/Folder.php
new file mode 100644
index 0000000..01b0c4a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/Folder/Folder.php
@@ -0,0 +1,68 @@
+resourceType = $resourceType;
+ $this->path = Path::combine($resourceType->getDirectory(), $path);
+ }
+
+ /**
+ * Checks whether `$folderName` is a valid folder name. Returns `true` on success.
+ *
+ * @param string $folderName
+ * @param bool $disallowUnsafeCharacters
+ *
+ * @return boolean
+ */
+ public static function isValidName($folderName, $disallowUnsafeCharacters)
+ {
+ if ($disallowUnsafeCharacters) {
+ if (strpos($folderName, ".") !== false) {
+ return false;
+ }
+ }
+
+ return File::isValidName($folderName, $disallowUnsafeCharacters);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/Folder/WorkingFolder.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/Folder/WorkingFolder.php
new file mode 100644
index 0000000..be634c2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/Folder/WorkingFolder.php
@@ -0,0 +1,549 @@
+app = $app;
+
+ /* @var $request \Symfony\Component\HttpFoundation\Request */
+ $request = $app['request_stack']->getCurrentRequest();
+
+ $resourceType = $app['resource_type_factory']->getResourceType((string) $request->get('type'));
+
+ $this->clientCurrentFolder = Path::normalize(trim((string) $request->get('currentFolder')));
+
+ if (!Path::isValid($this->clientCurrentFolder)) {
+ throw new InvalidNameException('Invalid path');
+ }
+
+ $resourceTypeDirectory = $resourceType->getDirectory();
+
+ parent::__construct($resourceType, $this->clientCurrentFolder);
+
+ $this->backend = $this->resourceType->getBackend();
+ $this->thumbnailRepository = $app['thumbnail_repository'];
+
+ $backend = $this->getBackend();
+
+ // Check if folder path is not hidden
+ if ($backend->isHiddenPath($this->getClientCurrentFolder())) {
+ throw new InvalidRequestException('Hidden folder path used');
+ }
+
+ // Check if resource type folder exists - if not then create it
+ $currentCommand = (string) $request->query->get('command');
+ $omitForCommands = array('Thumbnail');
+
+ if (!in_array($currentCommand, $omitForCommands) &&
+ !empty($resourceTypeDirectory) &&
+ !$backend->hasDirectory($this->path)) {
+ if ($this->clientCurrentFolder === '/') {
+ @$backend->createDir($resourceTypeDirectory);
+
+ if (!$backend->hasDirectory($resourceTypeDirectory)) {
+ throw new AccessDeniedException("Couldn't create resource type directory. Please check permissions.");
+ }
+ } else {
+ throw new FolderNotFoundException();
+ }
+ }
+ }
+
+ /**
+ * Returns the ResourceType object for the current working folder.
+ *
+ * @return ResourceType
+ */
+ public function getResourceType()
+ {
+ return $this->resourceType;
+ }
+
+ /**
+ * Returns the name of the current resource type.
+ *
+ * @return string
+ */
+ public function getResourceTypeName()
+ {
+ return $this->resourceType->getName();
+ }
+
+ /**
+ * Returns the client current folder path.
+ *
+ * @return string
+ */
+ public function getClientCurrentFolder()
+ {
+ return $this->clientCurrentFolder;
+ }
+
+ /**
+ * Returns the backend relative path with the resource type directory prefix.
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return $this->path;
+ }
+
+ /**
+ * Returns the backend assigned for the current resource type.
+ *
+ * @return Backend
+ */
+ public function getBackend()
+ {
+ return $this->resourceType->getBackend();
+ }
+
+ /**
+ * Returns the thumbnails repository object.
+ *
+ * @return ThumbnailRepository
+ */
+ public function getThumbnailsRepository()
+ {
+ return $this->thumbnailRepository;
+ }
+
+ /**
+ * Lists directories in the current working folder.
+ *
+ * @return array list of directories
+ */
+ public function listDirectories()
+ {
+ return $this->getBackend()->directories($this->getResourceType(), $this->getClientCurrentFolder());
+ }
+
+ /**
+ * Lists files in the current working folder.
+ *
+ * @return array list of files
+ */
+ public function listFiles()
+ {
+ return $this->getBackend()->files($this->getResourceType(), $this->getClientCurrentFolder());
+ }
+
+ /**
+ * Returns ACL mask computed for the current user and the current working folder.
+ *
+ * @return int
+ */
+ public function getAclMask()
+ {
+ if (null === $this->aclMask) {
+ $this->aclMask = $this->app->getAcl()->getComputedMask($this->getResourceTypeName(), $this->getClientCurrentFolder());
+ }
+
+ return $this->aclMask;
+ }
+
+ /**
+ * Creates a directory with a given name in the working folder.
+ *
+ * @param string $dirname directory name
+ *
+ * @return bool `true` if the folder was created successfully.
+ *
+ * @throws AccessDeniedException
+ * @throws AlreadyExistsException
+ * @throws InvalidNameException
+ */
+ public function createDir($dirname)
+ {
+ $backend = $this->getBackend();
+
+ if (!Folder::isValidName($dirname, $this->app['config']->get('disallowUnsafeCharacters')) || $backend->isHiddenFolder($dirname)) {
+ throw new InvalidNameException('Invalid folder name');
+ }
+
+ $dirPath = Path::combine($this->getPath(), $dirname);
+
+ if ($backend->hasDirectory($dirPath)) {
+ throw new AlreadyExistsException('Folder already exists');
+ }
+
+ $result = $backend->createDir($dirPath);
+
+ if (!$result) {
+ throw new AccessDeniedException("Couldn't create new folder. Please check permissions.");
+ }
+
+ return $result;
+ }
+
+ /**
+ * Creates a file inside the current working folder.
+ *
+ * @param string $fileName file name
+ * @param string $data file data
+ *
+ * @return bool `true` if created successfully.
+ */
+ public function write($fileName, $data)
+ {
+ $backend = $this->getBackend();
+ $filePath = Path::combine($this->getPath(), $fileName);
+
+ return $backend->write($filePath, $data);
+ }
+
+ /**
+ * Creates a file inside the current working folder using the stream.
+ *
+ * @param string $fileName file name
+ * @param resource $resource file data stream
+ *
+ * @return bool `true` if created successfully.
+ */
+ public function writeStream($fileName, $resource)
+ {
+ $backend = $this->getBackend();
+ $filePath = Path::combine($this->getPath(), $fileName);
+
+ return $backend->writeStream($filePath, $resource);
+ }
+
+ /**
+ * Creates or updates a file inside the current working folder using the stream.
+ *
+ * @param string $fileName file name
+ * @param resource $resource file data stream
+ * @param string $mimeType file MIME type
+ *
+ * @return bool `true` if updated successfully.
+ */
+ public function putStream($fileName, $resource, $mimeType = null)
+ {
+ $backend = $this->getBackend();
+ $filePath = Path::combine($this->getPath(), $fileName);
+
+ if (!$mimeType) {
+ $ext = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
+ $mimeType = MimeType::detectByFileExtension($ext);
+ }
+
+ $options = $mimeType ? array('mimetype' => $mimeType) : array();
+
+ return $backend->putStream($filePath, $resource, $options);
+ }
+
+ /**
+ * Checks if the current working folder contains a file with a given name.
+ *
+ * @param string $fileName
+ *
+ * @return bool
+ */
+ public function containsFile($fileName)
+ {
+ $backend = $this->getBackend();
+
+ if (!File::isValidName($fileName, $this->app['config']->get('disallowUnsafeCharacters')) ||
+ $backend->isHiddenFolder($this->getClientCurrentFolder()) ||
+ $backend->isHiddenFile($fileName) ||
+ !$this->resourceType->isAllowedExtension(pathinfo($fileName, PATHINFO_EXTENSION))) {
+ return false;
+ }
+
+ $filePath = Path::combine($this->getPath(), $fileName);
+
+ return $backend->has($filePath);
+ }
+
+ /**
+ * Returns contents of the file with a given name.
+ *
+ * @param string $fileName
+ *
+ * @return string
+ */
+ public function read($fileName)
+ {
+ $backend = $this->getBackend();
+ $filePath = Path::combine($this->getPath(), $fileName);
+
+ return $backend->read($filePath);
+ }
+
+ /**
+ * Returns contents stream of the file with a given name.
+ *
+ * @param string $fileName
+ *
+ * @return resource
+ */
+ public function readStream($fileName)
+ {
+ $backend = $this->getBackend();
+ $filePath = Path::combine($this->getPath(), $fileName);
+
+ return $backend->readStream($filePath);
+ }
+
+ /**
+ * Deletes the current working folder.
+ *
+ * @return bool `true` if the deletion was successful
+ */
+ public function delete()
+ {
+ // Delete related thumbs path
+ $this->thumbnailRepository->deleteThumbnails($this->resourceType, $this->getClientCurrentFolder());
+
+ $this->app['cache']->deleteByPrefix(Path::combine($this->resourceType->getName(), $this->getClientCurrentFolder()));
+
+ return $this->getBackend()->deleteDir($this->getPath());
+ }
+
+ /**
+ * Renames the current working folder.
+ *
+ * @param string $newName new folder name
+ *
+ * @return array containing newName and newPath
+ *
+ * @throws AccessDeniedException
+ * @throws AlreadyExistsException
+ * @throws InvalidNameException
+ */
+ public function rename($newName)
+ {
+ $disallowUnsafeCharacters = $this->app['config']->get('disallowUnsafeCharacters');
+
+ if (!Folder::isValidName($newName, $disallowUnsafeCharacters) || $this->backend->isHiddenFolder($newName)) {
+ throw new InvalidNameException('Invalid folder name');
+ }
+
+ $newBackendPath = dirname($this->getPath()) . '/' . $newName;
+
+ if ($this->backend->has($newBackendPath)) {
+ throw new AlreadyExistsException('File already exists');
+ }
+
+ $newClientPath = Path::normalize(dirname($this->getClientCurrentFolder()) . '/' . $newName);
+
+ if (!$this->getBackend()->rename($this->getPath(), $newBackendPath)) {
+ throw new AccessDeniedException();
+ }
+
+ /* @var OperationManager $currentRequestOperation */
+ $currentRequestOperation = $this->app['operation'];
+
+ if ($currentRequestOperation->isAborted()) {
+ // Don't continue in this case, no need to touch thumbs and cache entries
+ return array('aborted' => true);
+ }
+
+ // Delete related thumbs path
+ $this->thumbnailRepository->deleteThumbnails($this->resourceType, $this->getClientCurrentFolder());
+
+ $this->app['cache']->changePrefix(
+ Path::combine($this->resourceType->getName(), $this->getClientCurrentFolder()),
+ Path::combine($this->resourceType->getName(), $newClientPath));
+
+ return array(
+ 'newName' => $newName,
+ 'newPath' => $newClientPath,
+ 'renamed' => 1
+ );
+ }
+
+ /**
+ * Returns the URL to a given file.
+ *
+ * @param string $fileName
+ * @param string|null $thumbnailFileName
+ *
+ * @throws FileNotFoundException
+ * @throws InvalidExtensionException
+ * @throws InvalidRequestException
+ *
+ * @return null|string
+ */
+ public function getFileUrl($fileName, $thumbnailFileName = null)
+ {
+ $config = $this->app['config'];
+
+ if (!File::isValidName($fileName, $config->get('disallowUnsafeCharacters'))) {
+ throw new InvalidRequestException('Invalid file name');
+ }
+
+ if ($thumbnailFileName) {
+ if (!File::isValidName($thumbnailFileName, $config->get('disallowUnsafeCharacters'))) {
+ throw new InvalidRequestException('Invalid thumbnail file name');
+ }
+
+ if (!$this->resourceType->isAllowedExtension(pathinfo($thumbnailFileName, PATHINFO_EXTENSION))) {
+ throw new InvalidExtensionException('Invalid thumbnail file name');
+ }
+ }
+
+ if (!$this->containsFile($fileName)) {
+ throw new FileNotFoundException();
+ }
+
+ return $this->backend->getFileUrl($this->resourceType, $this->getClientCurrentFolder(), $fileName, $thumbnailFileName);
+ }
+
+ /**
+ * @return ResizedImageRepository
+ */
+ public function getResizedImageRepository()
+ {
+ return $this->app['resized_image_repository'];
+ }
+
+ /**
+ * Tells the current WorkingFolder object to not add the current folder
+ * to the response.
+ *
+ * By default the WorkingFolder object acts as an event subscriber and
+ * listens for the `KernelEvents::RESPONSE` event. The response given is
+ * then modified by adding information about the current folder.
+ *
+ * @see WorkingFolder::addCurrentFolderInfo()
+ */
+ public function omitResponseInfo()
+ {
+ $this->app['dispatcher']->removeSubscriber($this);
+ }
+
+ /**
+ * Adds the current folder information to the response.
+ *
+ * @param FilterResponseEvent $event
+ */
+ public function addCurrentFolderInfo(FilterResponseEvent $event)
+ {
+ /* @var JsonResponse $response */
+ $response = $event->getResponse();
+
+ if ($response instanceof JsonResponse) {
+ $responseData = (array) $response->getData();
+
+ $responseData = array(
+ 'resourceType' => $this->getResourceTypeName(),
+ 'currentFolder' => array(
+ 'path' => $this->getClientCurrentFolder(),
+ 'acl' => $this->getAclMask()
+ )
+ ) + $responseData;
+
+ $baseUrl = $this->backend->getBaseUrl();
+
+ if (null !== $baseUrl) {
+ $folderUrl = Path::combine($baseUrl, Utils::encodeURLParts(Path::combine($this->resourceType->getDirectory(), $this->getClientCurrentFolder())));
+ $responseData['currentFolder']['url'] = rtrim($folderUrl, '/') . '/';
+ }
+
+ $response->setData($responseData);
+ }
+ }
+
+ /**
+ * Returns listeners for the event dispatcher.
+ *
+ * @return array subscribed events
+ */
+ public static function getSubscribedEvents()
+ {
+ return array(KernelEvents::RESPONSE => array('addCurrentFolderInfo', 512));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/Path.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/Path.php
new file mode 100644
index 0000000..165acce
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/Path.php
@@ -0,0 +1,122 @@
+\|]),';
+
+ /**
+ * Checks if a given path is valid.
+ *
+ * @param string $path path to be validated
+ *
+ * @return bool true if the path is valid.
+ */
+ public static function isValid($path)
+ {
+ return !preg_match(static::REGEX_INVALID_PATH, $path);
+ }
+
+ /**
+ * Normalizes the path so it starts and ends end with a "/".
+ *
+ * @param string $path input path
+ *
+ * @return string normalized path
+ */
+ public static function normalize($path)
+ {
+ if (!strlen($path)) {
+ $path = '/';
+ } elseif ($path !== '/') {
+ $path = '/' . trim($path, '/') . '/';
+ }
+
+ return $path;
+ }
+
+ /**
+ * This function behaves similarly to `System.IO.Path.Combine` in C#, the only difference is that it also
+ * accepts null values and treats them as an empty string.
+ *
+ * @param string [$arg1, $arg2, ...]
+ *
+ * @return string
+ */
+ public static function combine()
+ {
+ $args = func_get_args();
+
+ if (!count($args)) {
+ return null;
+ }
+
+ $result = array_shift($args);
+
+ $isDirSeparator = function ($char) {
+ return $char === '/' || $char === '\\';
+ };
+
+ $argsCount = count($args);
+
+ for ($i = 0; $i < $argsCount; $i++) {
+ $path1 = $result;
+ $path2 = $args[$i];
+
+ if (null === $path1) {
+ $path1 = '';
+ }
+
+ if (null === $path2) {
+ $path2 = '';
+ }
+
+ if (!strlen($path2)) {
+ if (strlen($path1)) {
+ $_lastCharP1 = substr($path1, -1, 1);
+ if (!$isDirSeparator($_lastCharP1)) {
+ $path1 .= '/';
+ }
+ }
+ } else {
+ $_firstCharP2 = substr($path2, 0, 1);
+ if (strlen($path1)) {
+ if (strpos($path2, $path1) === 0) {
+ $result = $path2;
+ continue;
+ }
+ $_lastCharP1 = substr($path1, -1, 1);
+ if (!$isDirSeparator($_lastCharP1) && !$isDirSeparator($_firstCharP2)) {
+ $path1 .= '/';
+ } elseif ($isDirSeparator($_lastCharP1) && $isDirSeparator($_firstCharP2)) {
+ $path2 = substr($path2, 1);
+ }
+ } else {
+ $result = $path2;
+ continue;
+ }
+ }
+
+ $result = $path1 . $path2;
+ }
+
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Image.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Image.php
new file mode 100644
index 0000000..7e09f00
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Image.php
@@ -0,0 +1,704 @@
+ 'image/gif',
+ 'jpg' => 'image/jpeg',
+ 'jpeg' => 'image/jpeg',
+ 'bmp' => 'image/bmp',
+ 'png' => 'image/png',
+ 'wbmp' => 'image/wbmp'
+ );
+
+ $extension = strtolower($extension);
+
+ return array_key_exists($extension, $extensionMimeTypeMap) ? $extensionMimeTypeMap[$extension] : null;
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param string $imageData image data
+ * @param bool $bmpSupport `true` if bitmaps are supported (be aware of poor efficiency!).
+ *
+ * @throws CKFinderException in case the image could not be initialized properly.
+ */
+
+ public function __construct($imageData, $bmpSupport = false)
+ {
+ if (!extension_loaded('gd')) {
+ throw new CKFinderException('PHP GD library not found');
+ }
+
+ $imgInfo = @getimagesizefromstring($imageData);
+
+ if ($imgInfo === false) {
+ throw new CKFinderException('Unsupported image type');
+ }
+
+ $this->width = isset($imgInfo[0]) ? $imgInfo[0] : 0;
+ $this->height = isset($imgInfo[1]) ? $imgInfo[1] : 0;
+ $this->mime = isset($imgInfo['mime']) ? $imgInfo['mime'] : '';
+ $this->bits = isset($imgInfo['bits']) ? $imgInfo['bits'] : 8;
+ $this->channels = isset($imgInfo['channels']) ? $imgInfo['channels'] : 3;
+ $this->dataSize = strlen($imageData);
+
+ if (!$this->width || !$this->height || !$this->mime) {
+ throw new CKFinderException('Unsupported image type');
+ }
+
+ $this->setMemory($this->width, $this->height, $this->bits, $this->channels);
+
+ $gdSupportedTypes = @imagetypes();
+
+ $supportedFormats = array(
+ 'image/gif' => $gdSupportedTypes & IMG_GIF,
+ 'image/jpeg' => $gdSupportedTypes & IMG_JPG,
+ 'image/png' => $gdSupportedTypes & IMG_PNG,
+ 'image/wbmp' => $gdSupportedTypes & IMG_WBMP,
+ 'image/bmp' => $bmpSupport && ($gdSupportedTypes & IMG_JPG),
+ 'image/x-ms-bmp' => $bmpSupport && ($gdSupportedTypes & IMG_JPG)
+ );
+
+ if (!array_key_exists($this->mime, $supportedFormats) || !$supportedFormats[$this->mime]) {
+ throw new CKFinderException('Unsupported image type: ' . $this->mime);
+ }
+
+ if ($this->mime === 'image/bmp' || $this->mime === 'image/x-ms-bmp') {
+ $this->gdImage = $this->createFromBmp($imageData);
+ } else {
+ $this->gdImage = imagecreatefromstring($imageData);
+ }
+
+ if (!is_resource($this->gdImage)) {
+ throw new CKFinderException('Unsupported image type (not resource): ' . $this->mime);
+ }
+
+ unset($imageData);
+ }
+
+ /**
+ * Returns the aspect ratio size as associative array:
+ * @code
+ * array
+ * (
+ * [width] => 80
+ * [heigth] => 120
+ * )
+ * @endcode
+ *
+ * @param int $maxWidth requested width
+ * @param int $maxHeight requested height
+ * @param int $actualWidth original width
+ * @param int $actualHeight original height
+ * @param bool $useHigherFactor defines which factor should be used to calculate the new
+ * size. For example:
+ * - original image size 800x400
+ * - calculateAspectRatio(300, 200, 800, 400, false) will return 300x150
+ * - calculateAspectRatio(300, 200, 800, 400, true) will return 400x200
+ *
+ * @return array
+ */
+ public static function calculateAspectRatio($maxWidth, $maxHeight, $actualWidth, $actualHeight, $useHigherFactor = false)
+ {
+ $oSize = array('width' => $maxWidth, 'height' => $maxHeight);
+
+ // Calculates the X and Y resize factors
+ $iFactorX = (float) $maxWidth / (float) $actualWidth;
+ $iFactorY = (float) $maxHeight / (float) $actualHeight;
+
+ // If some dimension have to be resized
+ if ($iFactorX != 1 || $iFactorY != 1) {
+ if ($useHigherFactor) {
+ // Uses the higher Factor to change the opposite size
+ if ($iFactorX > $iFactorY) {
+ $oSize['height'] = (int) round($actualHeight * $iFactorX);
+ } elseif ($iFactorX < $iFactorY) {
+ $oSize['width'] = (int) round($actualWidth * $iFactorY);
+ }
+ } else {
+ // Uses the lower Factor to change the opposite size
+ if ($iFactorX < $iFactorY) {
+ $oSize['height'] = (int) round($actualHeight * $iFactorX);
+ } elseif ($iFactorX > $iFactorY) {
+ $oSize['width'] = (int) round($actualWidth * $iFactorY);
+ }
+ }
+ }
+
+ if ($oSize['height'] <= 0) {
+ $oSize['height'] = 1;
+ }
+
+ if ($oSize['width'] <= 0) {
+ $oSize['width'] = 1;
+ }
+
+ // Returns the Size
+ return $oSize;
+ }
+
+
+ /**
+ * @link http://pl.php.net/manual/pl/function.imagecreatefromjpeg.php
+ * function posted by e dot a dot schultz at gmail dot com
+ *
+ * @param $imageWidth
+ * @param $imageHeight
+ * @param $imageBits
+ * @param $imageChannels
+ *
+ * @return bool
+ */
+ public function setMemory($imageWidth, $imageHeight, $imageBits, $imageChannels)
+ {
+ $MB = 1048576; // number of bytes in 1M
+ $K64 = 65536; // number of bytes in 64K
+ $TWEAKFACTOR = 2.4; // Or whatever works for you
+ $memoryNeeded = round(($imageWidth * $imageHeight
+ * $imageBits
+ * $imageChannels / 8
+ + $K64
+ ) * $TWEAKFACTOR
+ ) + 3 * $MB;
+
+ //ini_get('memory_limit') only works if compiled with "--enable-memory-limit" also
+ //Default memory limit is 8MB so well stick with that.
+ //To find out what yours is, view your php.ini file.
+ $memoryLimit = Utils::returnBytes(@ini_get('memory_limit')) / $MB;
+ // There are no memory limits, nothing to do
+ if ($memoryLimit == -1) {
+ return true;
+ }
+ if (!$memoryLimit) {
+ $memoryLimit = 8;
+ }
+
+ $memoryLimitMB = $memoryLimit * $MB;
+ if (function_exists('memory_get_usage')) {
+ if (memory_get_usage() + $memoryNeeded > $memoryLimitMB) {
+ $newLimit = $memoryLimit + ceil((memory_get_usage()
+ + $memoryNeeded
+ - $memoryLimitMB
+ ) / $MB
+ );
+ if (@ini_set('memory_limit', $newLimit . 'M') === false) {
+ return false;
+ }
+ }
+ } else {
+ if ($memoryNeeded + 3 * $MB > $memoryLimitMB) {
+ $newLimit = $memoryLimit + ceil((3 * $MB
+ + $memoryNeeded
+ - $memoryLimitMB
+ ) / $MB
+ );
+ if (false === @ini_set('memory_limit', $newLimit . 'M')) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @link http://pl.php.net/manual/en/function.imagecopyresampled.php
+ * Replacement to `imagecopyresampled` that will deliver results that are almost identical except
+ * MUCH faster (very typically 30 times faster).
+ *
+ * @static
+ * @access public
+ * @param resource $dstImage
+ * @param resource $srcImage
+ * @param int $dstX
+ * @param int $dstY
+ * @param int $srcX
+ * @param int $srcY
+ * @param int $dstW
+ * @param int $dstH
+ * @param int $srcW
+ * @param int $srcH
+ * @param int $quality
+ *
+ * @return boolean
+ */
+ public function fastCopyResampled(&$dstImage, $srcImage, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH, $quality = 3)
+ {
+ if (empty($srcImage) || empty($dstImage)) {
+ return false;
+ }
+
+ if ($quality <= 1) {
+ $temp = imagecreatetruecolor($dstW + 1, $dstH + 1);
+ imagecopyresized($temp, $srcImage, $dstX, $dstY, $srcX, $srcY, $dstW + 1, $dstH + 1, $srcW, $srcH);
+ imagecopyresized($dstImage, $temp, 0, 0, 0, 0, $dstW, $dstH, $dstW, $dstH);
+ imagedestroy($temp);
+ } elseif ($quality < 5 && (($dstW * $quality) < $srcW || ($dstH * $quality) < $srcH)) {
+ $tmpW = $dstW * $quality;
+ $tmpH = $dstH * $quality;
+ $temp = imagecreatetruecolor($tmpW + 1, $tmpH + 1);
+ imagecopyresized($temp, $srcImage, 0, 0, $srcX, $srcY, $tmpW + 1, $tmpH + 1, $srcW, $srcH);
+ imagecopyresampled($dstImage, $temp, $dstX, $dstY, 0, 0, $dstW, $dstH, $tmpW, $tmpH);
+ imagedestroy($temp);
+ } else {
+ imagecopyresampled($dstImage, $srcImage, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH);
+ }
+
+ return true;
+ }
+
+ /**
+ * Source: http://pl.php.net/imagecreate
+ * (optimized for speed and memory usage, but yet not very efficient).
+ *
+ * @param string $data bitmap data
+ *
+ * @return resource
+ */
+ public function createFromBmp($data)
+ {
+ $stream = fopen('php://temp', 'r+');
+ fwrite($stream, $data);
+ rewind($stream);
+
+ //20 seconds seems to be a reasonable value to not kill a server and process images up to 1680x1050
+ @set_time_limit(20);
+
+ if (!is_resource($stream)) {
+ return false;
+ }
+
+ $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($stream, 14));
+ if ($FILE['file_type'] != 19778) {
+ return false;
+ }
+
+ $BMP = unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel' .
+ '/Vcompression/Vsize_bitmap/Vhoriz_resolution' .
+ '/Vvert_resolution/Vcolors_used/Vcolors_important', fread($stream, 40));
+
+ $BMP['colors'] = pow(2, $BMP['bits_per_pixel']);
+
+ if ($BMP['size_bitmap'] == 0) {
+ $BMP['size_bitmap'] = $FILE['file_size'] - $FILE['bitmap_offset'];
+ }
+
+ $BMP['bytes_per_pixel'] = $BMP['bits_per_pixel'] / 8;
+ $BMP['bytes_per_pixel2'] = ceil($BMP['bytes_per_pixel']);
+ $BMP['decal'] = ($BMP['width'] * $BMP['bytes_per_pixel'] / 4);
+ $BMP['decal'] -= floor($BMP['width'] * $BMP['bytes_per_pixel'] / 4);
+ $BMP['decal'] = 4 - (4 * $BMP['decal']);
+
+ if ($BMP['decal'] == 4) {
+ $BMP['decal'] = 0;
+ }
+
+ $PALETTE = array();
+ if ($BMP['colors'] < 16777216) {
+ $PALETTE = unpack('V' . $BMP['colors'], fread($stream, $BMP['colors'] * 4));
+ }
+
+ //2048x1536px@24bit don't even try to process larger files as it will probably fail
+ if ($BMP['size_bitmap'] > 3 * 2048 * 1536) {
+ return false;
+ }
+
+ $IMG = fread($stream, $BMP['size_bitmap']);
+ fclose($stream);
+ $VIDE = chr(0);
+
+ $res = imagecreatetruecolor($BMP['width'], $BMP['height']);
+ $P = 0;
+ $Y = $BMP['height'] - 1;
+
+ $line_length = $BMP['bytes_per_pixel'] * $BMP['width'];
+
+ if ($BMP['bits_per_pixel'] == 24) {
+ while ($Y >= 0) {
+ $X = 0;
+ $temp = unpack("C*", substr($IMG, $P, $line_length));
+
+ while ($X < $BMP['width']) {
+ $offset = $X * 3;
+ imagesetpixel($res, $X++, $Y, ($temp[$offset + 3] << 16) + ($temp[$offset + 2] << 8) + $temp[$offset + 1]);
+ }
+ $Y--;
+ $P += $line_length + $BMP['decal'];
+ }
+ } elseif ($BMP['bits_per_pixel'] == 8) {
+ while ($Y >= 0) {
+ $X = 0;
+
+ $temp = unpack("C*", substr($IMG, $P, $line_length));
+
+ while ($X < $BMP['width']) {
+ imagesetpixel($res, $X++, $Y, $PALETTE[$temp[$X] + 1]);
+ }
+ $Y--;
+ $P += $line_length + $BMP['decal'];
+ }
+ } elseif ($BMP['bits_per_pixel'] == 4) {
+ while ($Y >= 0) {
+ $X = 0;
+ $i = 1;
+ $low = true;
+
+ $temp = unpack("C*", substr($IMG, $P, $line_length));
+
+ while ($X < $BMP['width']) {
+ if ($low) {
+ $index = $temp[$i] >> 4;
+ } else {
+ $index = $temp[$i++] & 0x0F;
+ }
+ $low = !$low;
+
+ imagesetpixel($res, $X++, $Y, $PALETTE[$index + 1]);
+ }
+ $Y--;
+ $P += $line_length + $BMP['decal'];
+ }
+ } elseif ($BMP['bits_per_pixel'] == 1) {
+ $COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1));
+ if (($P * 8) % 8 == 0) {
+ $COLOR[1] = $COLOR[1] >> 7;
+ } elseif (($P * 8) % 8 == 1) {
+ $COLOR[1] = ($COLOR[1] & 0x40) >> 6;
+ } elseif (($P * 8) % 8 == 2) {
+ $COLOR[1] = ($COLOR[1] & 0x20) >> 5;
+ } elseif (($P * 8) % 8 == 3) {
+ $COLOR[1] = ($COLOR[1] & 0x10) >> 4;
+ } elseif (($P * 8) % 8 == 4) {
+ $COLOR[1] = ($COLOR[1] & 0x8) >> 3;
+ } elseif (($P * 8) % 8 == 5) {
+ $COLOR[1] = ($COLOR[1] & 0x4) >> 2;
+ } elseif (($P * 8) % 8 == 6) {
+ $COLOR[1] = ($COLOR[1] & 0x2) >> 1;
+ } elseif (($P * 8) % 8 == 7) {
+ $COLOR[1] = ($COLOR[1] & 0x1);
+ }
+ $COLOR[1] = $PALETTE[$COLOR[1] + 1];
+ } else {
+ return false;
+ }
+
+ return $res;
+ }
+
+ /**
+ * Resizes an image to a given size keeping the aspect ratio.
+ *
+ * @param int $maxWidth maximum width
+ * @param int $maxHeight maximum height
+ * @param int $quality quality
+ * @param bool $useHigherFactor
+ *
+ * @return Image $this
+ */
+ public function resize($maxWidth, $maxHeight, $quality = 80, $useHigherFactor = false)
+ {
+ $maxWidth = (int) $maxWidth ?: $this->width;
+ $maxHeight = (int) $maxHeight ?: $this->height;
+
+ if ($this->width <= $maxWidth && $this->height <= $maxHeight) {
+ return $this;
+ }
+
+ $targetSize = static::calculateAspectRatio($maxWidth, $maxHeight, $this->width, $this->height, $useHigherFactor);
+
+ $targetWidth = $targetSize['width'];
+ $targetHeight = $targetSize['height'];
+
+ $targetImage = imagecreatetruecolor($targetWidth, $targetHeight);
+
+ if ($this->mime === 'image/png') {
+ $bg = imagecolorallocatealpha($targetImage, 255, 255, 255, 127);
+ imagefill($targetImage, 0, 0, $bg);
+ imagealphablending($targetImage, false);
+ imagesavealpha($targetImage, true);
+ }
+
+ $this->fastCopyResampled($targetImage, $this->gdImage, 0, 0, 0, 0, $targetWidth, $targetHeight,
+ $this->width, $this->height, (int)max(floor($quality / 20), 6));
+
+ imagedestroy($this->gdImage);
+ $this->gdImage = $targetImage;
+ $this->width = $targetWidth;
+ $this->height = $targetHeight;
+
+ return $this;
+ }
+
+ /**
+ * Returns image data.
+ *
+ * @param string $format returned image format mimetype (current image mimetype is used if not set).
+ *
+ * @return string image data
+ */
+ public function getData($format = null)
+ {
+ $mime = $format ?: $this->mime;
+
+ ob_start();
+
+ switch ($mime) {
+ case 'image/gif':
+ imagegif($this->gdImage);
+ break;
+ case 'image/jpeg':
+ case 'image/bmp':
+ case 'image/x-ms-bmp':
+ imagejpeg($this->gdImage);
+ break;
+ case 'image/png':
+ imagealphablending($this->gdImage, false);
+ imagesavealpha($this->gdImage, true);
+ imagepng($this->gdImage);
+ break;
+ case 'image/wbmp':
+ imagewbmp($this->gdImage);
+ break;
+ }
+
+ $this->dataSize = ob_get_length();
+
+ return ob_get_clean();
+ }
+
+ /**
+ * Returns GD image resource.
+ *
+ * @return resource GD image resource
+ */
+ public function getGDImage()
+ {
+ return $this->gdImage;
+ }
+
+ /**
+ * Returns the size of image data produced by the `getData()` method.
+ *
+ * @return int image data size in bytes
+ */
+ public function getDataSize()
+ {
+ return $this->dataSize;
+ }
+
+ /**
+ * Returns image width in pixels.
+ *
+ * @return int image width
+ */
+ public function getWidth()
+ {
+ return $this->width;
+ }
+
+ /**
+ * Returns image height in pixels.
+ *
+ * @return int image height
+ */
+ public function getHeight()
+ {
+ return $this->height;
+ }
+
+ /**
+ * Returns image MIME type.
+ *
+ * @return string MIME type
+ */
+ public function getMimeType()
+ {
+ return $this->mime;
+ }
+
+ public function crop($x, $y, $width, $height)
+ {
+ $targetImage = imagecreatetruecolor($width, $height);
+
+ if ($this->mime === 'image/png') {
+ $bg = imagecolorallocatealpha($targetImage, 255, 255, 255, 127);
+ imagefill($targetImage, 0, 0, $bg);
+ imagealphablending($targetImage, false);
+ imagesavealpha($targetImage, true);
+ }
+
+ imagecopy($targetImage, $this->gdImage, 0, 0, $x, $y, $width, $height);
+
+ imagedestroy($this->gdImage);
+ $this->gdImage = $targetImage;
+ $this->width = $width;
+ $this->height = $height;
+
+ return $this;
+ }
+
+ public function rotate($degrees, $bgcolor = 0)
+ {
+ if ($this->mime === 'image/png') {
+ imagesavealpha($this->gdImage, true);
+ $bgcolor = imagecolorallocatealpha($this->gdImage, 0, 0, 0, 127);
+ }
+
+ $this->gdImage = imagerotate($this->gdImage, $degrees, $bgcolor);
+ $this->width = imagesx($this->gdImage);
+ $this->height = imagesy($this->gdImage);
+
+ return $this;
+ }
+
+ public function getInfo()
+ {
+ $info = array(
+ 'width' => $this->getWidth(),
+ 'height' => $this->getHeight(),
+ 'size' => $this->getDataSize()
+ );
+
+ return $info;
+ }
+
+ public function __destruct()
+ {
+ if (is_resource($this->gdImage)) {
+ imagedestroy($this->gdImage);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Operation/OperationManager.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Operation/OperationManager.php
new file mode 100644
index 0000000..abc5202
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Operation/OperationManager.php
@@ -0,0 +1,294 @@
+app = $app;
+ $this->tempDirectory = $app['config']->get('tempDirectory');
+ }
+
+ /**
+ * Validates the operation ID.
+ *
+ * @param string $operationId
+ *
+ * @return bool `true` if the operation ID format is valid.
+ */
+ protected function isValidOperationId($operationId)
+ {
+ return (bool) preg_match('/^[a-z0-9]{16}$/', $operationId);
+ }
+
+ /**
+ * Starts a time consuming operation in the current request.
+
+ * @return bool `true` if operation tracking was started.
+ */
+ public function start()
+ {
+ $request = $this->app->getRequest();
+ $operationId = (string) $request->query->get('operationId');
+
+ if (null === $operationId || !$this->isValidOperationId($operationId)) {
+ return false;
+ }
+
+ if (!mkdir($this->getFilePath($operationId, null))) {
+ return false;
+ }
+
+ $this->startedOperationId = $operationId;
+ $this->startTime = time();
+
+ ignore_user_abort();
+
+ // Session needs to be closed to not block probing requests
+ session_write_close();
+
+ return true;
+ }
+
+ /**
+ * Aborts an operation with a given ID.
+ *
+ * @param string $operationId
+ *
+ * @return bool `true` if the operation was aborted.
+ */
+ public function abort($operationId)
+ {
+ if (!$this->isValidOperationId($operationId) || !$this->operationStarted($operationId)) {
+ return false;
+ }
+
+ file_put_contents($this->getFilePath($operationId, 'abort'), serialize(true));
+
+ return true;
+ }
+
+ /**
+ * Checks if the operation started in the current request was aborted.
+ *
+ * @return bool `true` if the operation was aborted.
+ */
+ public function isAborted()
+ {
+ if (!$this->startedOperationId) {
+ return false;
+ }
+
+ clearstatcache();
+
+ return $this->operationStarted($this->startedOperationId) &&
+ file_exists($this->getFilePath($this->startedOperationId, 'abort'));
+ }
+
+ /**
+ * Updates the status of the current operation.
+ *
+ * @param array $status data describing the operation status.
+ */
+ public function updateStatus(array $status)
+ {
+ if ($this->startedOperationId) {
+ $currentTime = time();
+
+ if ($currentTime - $this->lastUpdateTime >= self::UPDATE_STATUS_INTERVAL) {
+ $this->extendExecutionTime($currentTime);
+
+ $this->lastUpdateTime = $currentTime;
+
+ file_put_contents($this->getFilePath($this->startedOperationId), serialize($status));
+ }
+ }
+ }
+
+ /**
+ * Extends the execution time of the script.
+ *
+ * @param int $currentTime current timestamp
+ */
+ protected function extendExecutionTime($currentTime)
+ {
+ if ($currentTime - $this->lastExtendExecutionTime >= self::EXTEND_EXECUTION_INTERVAL) {
+ set_time_limit(30);
+
+ $this->lastExtendExecutionTime = $currentTime;
+
+ // Emit some whitespaces for Nginx + FPM configuration to avoid 504 Gateway Timeout error
+ if (function_exists('fastcgi_finish_request')) {
+ // Clear the buffer to remove any garbage before flushing
+ Response::closeOutputBuffers(0, false);
+ echo ' ';
+ @ob_end_flush();
+ @flush();
+ }
+ }
+ }
+
+ /**
+ * Returns the status of the current operation.
+ *
+ * @param string $operationId
+ *
+ * @return array operation status data
+ */
+ public function getStatus($operationId)
+ {
+ if ($this->isValidOperationId($operationId)) {
+ $filePath = $this->getFilePath($operationId);
+ if (file_exists($filePath)) {
+ return unserialize(file_get_contents($filePath));
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns a path for a file located in the current operation temporary directory.
+ *
+ * @param string $operationId
+ * @param string $file
+ *
+ * @return string file path
+ */
+ protected function getFilePath($operationId, $file = 'status')
+ {
+ return Path::combine($this->tempDirectory, 'ckf-operation-' . $operationId, $file);
+ }
+
+ /**
+ * Checks if a temporary directory for an operation with a given ID exists.
+ *
+ * @param string $operationId
+ *
+ * @return bool `true` if the directory exists - the operation was started.
+ */
+ protected function operationStarted($operationId)
+ {
+ $directoryPath = $this->getFilePath($operationId, null);
+
+ return is_dir($directoryPath);
+ }
+
+ /**
+ * Adds information about aborting to the long running request response.
+ */
+ public function addInfoToResponse()
+ {
+ $this->app->on(KernelEvents::RESPONSE, function (FilterResponseEvent $event) {
+ $response = $event->getResponse();
+
+ if ($response instanceof JsonResponse) {
+ $responseData = (array) $response->getData();
+ $responseData = array('aborted' => $this->isAborted()) + $responseData;
+ $response->setData($responseData);
+ }
+ }, 512);
+ }
+
+ /**
+ * Destructor to remove temporary files if the operation was started for the current request.
+ */
+ public function __destruct()
+ {
+ if ($this->startedOperationId) {
+ $directoryPath = $this->getFilePath($this->startedOperationId, null);
+ $toRemove = array(
+ $statusFilePath = Path::combine($directoryPath, 'status'),
+ $abortFilePath = Path::combine($directoryPath, 'abort')
+ );
+
+ foreach ($toRemove as $filePath) {
+ if (file_exists($filePath)) {
+ unlink($filePath);
+ }
+ }
+
+ if (is_dir($directoryPath)) {
+ rmdir($directoryPath);
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Plugin/PluginInterface.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Plugin/PluginInterface.php
new file mode 100644
index 0000000..d3b3be4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Plugin/PluginInterface.php
@@ -0,0 +1,40 @@
+isMethod('POST')) {
+ return $request;
+ }
+
+ // Transform only if POST request contains jsonData field
+ $jsonData = $request->request->get('jsonData');
+
+ if (null === $jsonData) {
+ return $request;
+ }
+
+ $jsonParameters = json_decode((string) $jsonData, true);
+
+ if (is_array($jsonParameters)) {
+ $request->request->add($jsonParameters);
+ $request->request->remove('jsonData');
+ }
+
+ return $request;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Request/Transformer/TransformerInterface.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Request/Transformer/TransformerInterface.php
new file mode 100644
index 0000000..aa17187
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Request/Transformer/TransformerInterface.php
@@ -0,0 +1,35 @@
+resizedImageRepository = $resizedImageRepository;
+
+ $backend = $this->backend = $sourceFileResourceType->getBackend();
+
+ // Check if there's info about source image in cache
+ $app = $this->resizedImageRepository->getContainer();
+
+
+ if (!$forceRequestedSize) {
+ $cacheKey = Path::combine($sourceFileResourceType->getName(), $sourceFileDir, $sourceFileName);
+
+ $cachedInfo = $app['cache']->get($cacheKey);
+
+ // No info cached, get original image
+ if (null === $cachedInfo || !isset($cachedInfo['width']) || !isset($cachedInfo['height'])) {
+ $sourceFilePath = Path::combine($sourceFileResourceType->getDirectory(), $sourceFileDir, $sourceFileName);
+
+ if ($backend->isHiddenFile($sourceFileName) || !$backend->has($sourceFilePath)) {
+ throw new FileNotFoundException('ResizedImage::create(): Source file not found');
+ }
+
+ $originalImage = $this->image = Image::create($backend->read($sourceFilePath));
+
+ $app['cache']->set($cacheKey, $originalImage->getInfo());
+
+ $originalImageWidth = $originalImage->getWidth();
+ $originalImageHeight = $originalImage->getHeight();
+ } else {
+ $originalImageWidth = $cachedInfo['width'];
+ $originalImageHeight = $cachedInfo['height'];
+ }
+
+ $targetSize = Image::calculateAspectRatio($requestedWidth, $requestedHeight, $originalImageWidth, $originalImageHeight);
+
+ if ($targetSize['width'] >= $originalImageWidth || $targetSize['height'] >= $originalImageHeight) {
+ $this->width = $originalImageWidth;
+ $this->height = $originalImageHeight;
+ $this->requestedSizeIsValid = false;
+ } else {
+ $this->width = $targetSize['width'];
+ $this->height = $targetSize['height'];
+ }
+ } else {
+ $this->width = $requestedWidth;
+ $this->height = $requestedHeight;
+ }
+
+ $this->resizedImageFileName = static::createFilename($sourceFileName, $this->width, $this->height);
+ }
+
+ public static function createFilename($fileName, $width, $height)
+ {
+ $pathInfo = pathinfo($fileName);
+
+ return sprintf("%s__%dx%d%s", $pathInfo['filename'], $width, $height, isset($pathInfo['extension']) ? '.' . $pathInfo['extension'] : '');
+ }
+
+ public static function getSizeFromFilename($resizedImageFileName)
+ {
+ $pathInfo = pathinfo($resizedImageFileName);
+
+ preg_match('/^.*__(\d+)x(\d+)$/', $pathInfo['filename'], $matches);
+
+ if (count($matches) === 3) {
+ return array(
+ 'width' => (int) $matches[1],
+ 'height' => (int) $matches[2]
+ );
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns the directory of the resized image.
+ *
+ * @return string
+ */
+ public function getDirectory()
+ {
+ return Path::combine($this->sourceFileResourceType->getDirectory(),
+ $this->sourceFileDir,
+ ResizedImage::DIR,
+ $this->sourceFileName
+ );
+ }
+
+ /**
+ * Creates a resized image.
+ */
+ public function create()
+ {
+ if (null === $this->image) {
+ $sourceFilePath = Path::combine($this->sourceFileResourceType->getDirectory(), $this->sourceFileDir, $this->sourceFileName);
+
+ if ($this->backend->isHiddenFile($this->sourceFileName) || !$this->backend->has($sourceFilePath)) {
+ throw new FileNotFoundException('ResizedImage::create(): Source file not found');
+ }
+
+ $this->image = Image::create($this->backend->read($sourceFilePath));
+ }
+
+ $this->image->resize($this->width, $this->height);
+ $this->resizedImageData = $this->image->getData();
+ $this->resizedImageSize = $this->image->getDataSize();
+ $this->resizedImageMimeType = $this->image->getMimeType();
+ }
+
+ /**
+ * Returns the direct URL to the resized image.
+ *
+ * @return string
+ */
+ public function getUrl()
+ {
+ $backend = $this->sourceFileResourceType->getBackend();
+
+ /**
+ * In case the requested size is bigger than the size of the original image,
+ * the resized version was not created.
+ * This is a fallback that returns the URL to the original image.
+ */
+ if (!$this->requestedSizeIsValid()) {
+ return $backend->getFileUrl($this->getResourceType(), $this->sourceFileDir, $this->sourceFileName);
+ }
+
+ return $backend->getFileUrl($this->sourceFileResourceType, $this->sourceFileDir, $this->sourceFileName, $this->getFileName());
+ }
+
+ /**
+ * Checks if the size requested for the resized image is valid.
+ *
+ * @return bool `true` if the requested size is valid.
+ */
+ public function requestedSizeIsValid()
+ {
+ return $this->requestedSizeIsValid;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResizedImage/ResizedImageAbstract.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResizedImage/ResizedImageAbstract.php
new file mode 100644
index 0000000..cd6e7f0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResizedImage/ResizedImageAbstract.php
@@ -0,0 +1,280 @@
+sourceFileResourceType = $sourceFileResourceType;
+ $this->sourceFileDir = $sourceFileDir;
+ $this->sourceFileName = $sourceFileName;
+ $this->requestedWidth = $requestedWidth;
+ $this->requestedHeight = $requestedHeight;
+
+ $this->backend = $sourceFileResourceType->getBackend();
+ }
+
+ /**
+ * Returns the resized image resource type.
+ *
+ * @return ResourceType
+ */
+ public function getResourceType()
+ {
+ return $this->sourceFileResourceType;
+ }
+
+ /**
+ * Returns the resized image file name.
+ *
+ * @return string
+ */
+ public function getFileName()
+ {
+ return $this->resizedImageFileName;
+ }
+
+ /**
+ * Returns the backend-relative resized image file path.
+ *
+ * @return string
+ */
+ public function getFilePath()
+ {
+ return Path::combine($this->getDirectory(), $this->getFileName());
+ }
+
+ /**
+ * Returns the resized image MIME type.
+ *
+ * @return string
+ */
+ public function getMimeType()
+ {
+ return $this->resizedImageMimeType;
+ }
+
+ /**
+ * Returns a timestamp of the last modification of this resized image.
+ *
+ * @return int timestamp
+ */
+ public function getTimestamp()
+ {
+ return $this->timestamp;
+ }
+
+ /**
+ * Returns the resized image size in bytes.
+ *
+ * @return int
+ */
+ public function getSize()
+ {
+ return $this->resizedImageSize;
+ }
+
+ /**
+ * Returns the resized image binary data.
+ *
+ * @return string binary image date
+ */
+ public function getImageData()
+ {
+ return $this->resizedImageData;
+ }
+
+ /**
+ * Sets the image data.
+ *
+ * @param string $imageData binary image data
+ */
+ public function setImageData($imageData)
+ {
+ $image = Image::create($imageData);
+
+ $this->resizedImageSize = strlen($imageData);
+ $this->resizedImageMimeType = $image->getMimeType();
+ $this->resizedImageData = $imageData;
+
+ unset($image);
+ }
+
+ /**
+ * Checks if the resized image already exists.
+ *
+ * @return bool
+ */
+ public function exists()
+ {
+ return $this->backend->has($this->getFilePath());
+ }
+
+ /**
+ * Saves the resized image in the backend.
+ *
+ * @return bool `true` if saved successfully.
+ */
+ public function save()
+ {
+ if (!$this->backend->hasDirectory($this->getDirectory())) {
+ $this->backend->createDir($this->getDirectory());
+ }
+
+ $saved = $this->backend->put($this->getFilePath(), $this->resizedImageData, array('mimetype' => $this->getMimeType()));
+
+ if ($saved) {
+ $this->timestamp = time();
+ }
+
+ return $saved;
+ }
+
+ /**
+ * Loads an existing resized image from a backend.
+ */
+ public function load()
+ {
+ $thumbnailMetadata = $this->backend->getWithMetadata($this->getFilePath(), array('mimetype', 'timestamp'));
+ $this->timestamp = $thumbnailMetadata['timestamp'];
+ $this->resizedImageSize = $thumbnailMetadata['size'];
+ $this->resizedImageMimeType = $thumbnailMetadata['mimetype'];
+
+ $this->resizedImageData = $this->backend->read($this->getFilePath());
+ }
+
+ /**
+ * Returns image data stream.
+ *
+ * @return bool|false|resource
+ *
+ * @throws CKFinderException
+ */
+ public function readStream()
+ {
+ if (null === $this->resizedImageData) {
+ throw new CKFinderException('The resized image was not loaded from a backend yet. Please use ResizedImage::load() first.');
+ }
+
+ // The image should be already loaded the memory, no need to read stream from backend
+ $stream = fopen('php://temp', 'r+');
+ fwrite($stream, $this->resizedImageData);
+ rewind($stream);
+
+ return $stream;
+ }
+
+ /**
+ * Creates the resized image.
+ */
+ abstract public function create();
+
+ /**
+ * Returns a directory path for the resized image.
+ */
+ abstract public function getDirectory();
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResizedImage/ResizedImageRepository.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResizedImage/ResizedImageRepository.php
new file mode 100644
index 0000000..9db5e81
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResizedImage/ResizedImageRepository.php
@@ -0,0 +1,422 @@
+config = $app['config'];
+ $this->acl = $app['acl'];
+ $this->dispatcher = $app['dispatcher'];
+ $this->app = $app;
+ }
+
+ /**
+ * Returns a resized image for the provided source file.
+ *
+ * If an appropriate resized version already exists, it is reused.
+ *
+ * @param ResourceType $sourceFileResourceType
+ * @param string $sourceFileDir
+ * @param string $sourceFileName
+ * @param int $requestedWidth
+ * @param int $requestedHeight
+ *
+ * @return ResizedImage
+ *
+ * @throws \Exception
+ */
+ public function getResizedImage(ResourceType $sourceFileResourceType, $sourceFileDir, $sourceFileName, $requestedWidth, $requestedHeight)
+ {
+ $resizedImage = new ResizedImage(
+ $this,
+ $sourceFileResourceType,
+ $sourceFileDir,
+ $sourceFileName,
+ $requestedWidth,
+ $requestedHeight
+ );
+
+ if (!$this->acl->isAllowed($sourceFileResourceType->getName(), $sourceFileDir, Permission::IMAGE_RESIZE_CUSTOM) &&
+ !$this->isSizeAllowedInConfig($requestedWidth, $requestedHeight)) {
+ throw new UnauthorizedException('Provided size is not allowed in images.sizes configuration');
+ }
+
+ if (!$resizedImage->exists() && $resizedImage->requestedSizeIsValid()) {
+ $resizedImage->create();
+
+ $resizeImageEvent = new ResizeImageEvent($this->app, $resizedImage);
+ $this->dispatcher->dispatch(CKFinderEvent::CREATE_RESIZED_IMAGE, $resizeImageEvent);
+
+ if (!$resizeImageEvent->isPropagationStopped()) {
+ $resizedImage = $resizeImageEvent->getResizedImage();
+ $resizedImage->save();
+ }
+ }
+
+ return $resizedImage;
+ }
+
+ /**
+ * Returns an existing resized image.
+ *
+ * @param ResourceType $sourceFileResourceType
+ * @param string $sourceFileDir
+ * @param string $sourceFileName
+ * @param string $thumbnailFileName
+ *
+ * @return ResizedImage
+ *
+ * @throws FileNotFoundException
+ */
+ public function getExistingResizedImage(ResourceType $sourceFileResourceType, $sourceFileDir, $sourceFileName, $thumbnailFileName)
+ {
+ $size = ResizedImage::getSizeFromFilename($thumbnailFileName);
+
+ $resizedImage = new ResizedImage(
+ $this,
+ $sourceFileResourceType,
+ $sourceFileDir,
+ $sourceFileName,
+ $size['width'],
+ $size['height'],
+ true
+ );
+
+ if (!$resizedImage->exists()) {
+ throw new FileNotFoundException('Resized image not found');
+ }
+
+ $resizedImage->load();
+
+ return $resizedImage;
+ }
+
+ /**
+ * @return CKFinder
+ */
+ public function getContainer()
+ {
+ return $this->app;
+ }
+
+ /**
+ * Checks if the provided image size is allowed in the configuration.
+ *
+ * This is checked when `Permission::IMAGE_RESIZE_CUSTOM`
+ * is not allowed in the source file folder.
+ *
+ * @param int $width
+ * @param int $height
+ *
+ * @return bool `true` if the provided size is allowed in the configuration.
+ */
+ protected function isSizeAllowedInConfig($width, $height)
+ {
+ $configSizes = $this->config->get('images.sizes');
+
+ foreach ($configSizes as $size) {
+ if ($size['width'] === $width && $size['height'] === $height) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the size name defined in the configuration, where width
+ * or height are equal to those given in parameters.
+ *
+ * Resized images keep the original image aspect ratio.
+ * When an image is resized using the size from the configuration,
+ * at least one of the borders has the same length.
+ *
+ * @param int $width
+ * @param int $height
+ *
+ * @return bool `true` if the size from the configuration was used.
+ */
+ protected function getSizeNameFromConfig($width, $height)
+ {
+ $configSizes = $this->config->get('images.sizes');
+
+ foreach ($configSizes as $sizeName => $size) {
+ if ($size['width'] === $width || $size['height'] === $height) {
+ return $sizeName;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Deletes all resized images for a given file.
+ *
+ * @param ResourceType $sourceFileResourceType
+ * @param string $sourceFilePath
+ * @param string $sourceFileName
+ *
+ * @return bool `true` if deleted
+ */
+ public function deleteResizedImages(ResourceType $sourceFileResourceType, $sourceFilePath, $sourceFileName)
+ {
+ $resizedImagesPath = Path::combine($sourceFileResourceType->getDirectory(), $sourceFilePath, ResizedImage::DIR, $sourceFileName);
+
+ $backend = $sourceFileResourceType->getBackend();
+
+ if ($backend->hasDirectory($resizedImagesPath)) {
+ return $backend->deleteDir($resizedImagesPath);
+ }
+
+ return false;
+ }
+
+ /**
+ * Copies all resized images for a given file.
+ *
+ * @param ResourceType $sourceFileResourceType
+ * @param string $sourceFilePath
+ * @param string $sourceFileName
+ * @param ResourceType $targetFileResourceType
+ * @param string $targetFilePath
+ * @param string $targetFileName
+ */
+ public function copyResizedImages(ResourceType $sourceFileResourceType, $sourceFilePath, $sourceFileName,
+ ResourceType $targetFileResourceType, $targetFilePath, $targetFileName)
+ {
+ $sourceResizedImagesPath = Path::combine($sourceFileResourceType->getDirectory(), $sourceFilePath, ResizedImage::DIR, $sourceFileName);
+ $targetResizedImagesPath = Path::combine($targetFileResourceType->getDirectory(), $targetFilePath, ResizedImage::DIR, $targetFileName);
+
+ $sourceBackend = $sourceFileResourceType->getBackend();
+ $targetBackend = $targetFileResourceType->getBackend();
+
+ if ($sourceBackend->hasDirectory($sourceResizedImagesPath)) {
+ $resizedImages = $sourceBackend->listContents($sourceResizedImagesPath);
+
+ foreach ($resizedImages as $resizedImage) {
+ if (!isset($resizedImage['path'])) {
+ continue;
+ }
+
+ $resizedImageStream = $sourceBackend->readStream($resizedImage['path']);
+
+ $sourceImageSize = ResizedImage::getSizeFromFilename($resizedImage['basename']);
+ $targetImageFilename = ResizedImage::createFilename($targetFileName, $sourceImageSize['width'], $sourceImageSize['height']);
+
+ $targetBackend->putStream(Path::combine($targetResizedImagesPath, $targetImageFilename), $resizedImageStream);
+ }
+ }
+ }
+
+ /**
+ * Renames all resized images created for a given file.
+ *
+ * @param ResourceType $sourceFileResourceType
+ * @param string $sourceFilePath
+ * @param string $originalSourceFileName
+ * @param string $newSourceFileName
+ */
+ public function renameResizedImages(ResourceType $sourceFileResourceType, $sourceFilePath, $originalSourceFileName, $newSourceFileName)
+ {
+ $resizedImagesDir = Path::combine($sourceFileResourceType->getDirectory(), $sourceFilePath, ResizedImage::DIR);
+ $resizedImagesPath = Path::combine($resizedImagesDir, $originalSourceFileName);
+ $newResizedImagesPath = Path::combine($resizedImagesDir, $newSourceFileName);
+
+ $backend = $sourceFileResourceType->getBackend();
+
+ if ($backend->hasDirectory($resizedImagesPath)) {
+ if ($backend->rename($resizedImagesPath, $newResizedImagesPath)) {
+ $resizedImages = $backend->listContents($newResizedImagesPath);
+
+ foreach ($resizedImages as $resizedImage) {
+ if (!isset($resizedImage['path'])) {
+ continue;
+ }
+
+ $sourceImageSize = ResizedImage::getSizeFromFilename($resizedImage['basename']);
+ $newResizedImageFilename = ResizedImage::createFilename($newSourceFileName, $sourceImageSize['width'], $sourceImageSize['height']);
+
+ $backend->rename($resizedImage['path'], Path::combine($newResizedImagesPath, $newResizedImageFilename));
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns a list of resized images generated for a given file.
+ *
+ * @param ResourceType $sourceFileResourceType source file resource type
+ * @param string $sourceFilePath source file backend-relative path
+ * @param string $sourceFileName source file name
+ * @param array $filterSizes array containing names of sizes defined
+ * in the `images.sizes` configuration
+ *
+ * @return array
+ */
+ public function getResizedImagesList(ResourceType $sourceFileResourceType, $sourceFilePath, $sourceFileName, $filterSizes = array())
+ {
+ $resizedImagesPath = Path::combine($sourceFileResourceType->getDirectory(), $sourceFilePath, ResizedImage::DIR, $sourceFileName);
+
+ $backend = $sourceFileResourceType->getBackend();
+
+ $resizedImages = array();
+
+ if (!$backend->hasDirectory($resizedImagesPath)) {
+ return $resizedImages;
+ }
+
+ $resizedImagesFiles = array_filter(
+ $backend->listContents($resizedImagesPath),
+ function ($v) {
+ return isset($v['type']) && $v['type'] === 'file';
+ }
+ );
+
+ foreach ($resizedImagesFiles as $resizedImage) {
+ $size = ResizedImage::getSizeFromFilename($resizedImage['basename']);
+
+ if ($sizeName = $this->getSizeNameFromConfig($size['width'], $size['height'])) {
+ if (empty($filterSizes) || in_array($sizeName, $filterSizes)) {
+ $resizedImages[$sizeName] = $this->createNodeValue($resizedImage);
+ }
+ continue;
+ }
+
+ if (empty($filterSizes)) {
+ if (!isset($resizedImages['__custom'])) {
+ $resizedImages['__custom'] = array();
+ }
+
+ $resizedImages['__custom'][] = $this->createNodeValue($resizedImage);
+ }
+ }
+
+ return $resizedImages;
+ }
+
+ protected function createNodeValue($resizedImage)
+ {
+ if (isset($resizedImage['url'])) {
+ return array(
+ 'name' => $resizedImage['basename'],
+ 'url' => $resizedImage['url']
+ );
+ }
+
+ return $resizedImage['basename'];
+ }
+
+ /**
+ * @param ResourceType $sourceFileResourceType
+ * @param string $sourceFilePath
+ * @param string $sourceFileName
+ * @param int $width
+ * @param int $height
+ *
+ * @return ResizedImage|null
+ */
+ public function getResizedImageBySize(ResourceType $sourceFileResourceType, $sourceFilePath, $sourceFileName, $width, $height)
+ {
+ $resizedImagesPath = Path::combine($sourceFileResourceType->getDirectory(), $sourceFilePath, ResizedImage::DIR, $sourceFileName);
+
+ $backend = $sourceFileResourceType->getBackend();
+
+ if (!$backend->hasDirectory($resizedImagesPath)) {
+ return null;
+ }
+
+ $resizedImagesFiles = array_filter(
+ $backend->listContents($resizedImagesPath),
+ function ($v) {
+ return isset($v['type']) && $v['type'] === 'file';
+ }
+ );
+
+ $thresholdPixels = $this->config->get('images.threshold.pixels');
+ $thresholdPercent = (float) $this->config->get('images.threshold.percent') / 100;
+
+ foreach ($resizedImagesFiles as $resizedImage) {
+ $resizedImageSize = ResizedImage::getSizeFromFilename($resizedImage['basename']);
+ $resizedImageWidth = $resizedImageSize['width'];
+ $resizedImageHeight = $resizedImageSize['height'];
+ if ($resizedImageWidth >= $width && ($resizedImageWidth <= $width + $thresholdPixels || $resizedImageWidth <= $width + $width * $thresholdPercent)
+ && $resizedImageHeight >= $height && ($resizedImageHeight <= $height + $thresholdPixels || $resizedImageHeight <= $height + $height * $thresholdPercent)) {
+ $resizedImage = new ResizedImage(
+ $this,
+ $sourceFileResourceType,
+ $sourceFilePath,
+ $sourceFileName,
+ $resizedImageWidth,
+ $resizedImageHeight
+ );
+
+ if ($resizedImage->exists()) {
+ $resizedImage->load();
+
+ return $resizedImage;
+ }
+ }
+ }
+
+ return null;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResourceType/ResourceType.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResourceType/ResourceType.php
new file mode 100644
index 0000000..732db91
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResourceType/ResourceType.php
@@ -0,0 +1,113 @@
+name = $name;
+ $this->configNode = $configNode;
+ $this->backend = $backend;
+ $this->thumbnailRepository = $thumbnailRepository;
+ $this->resizedImageRepository = $resizedImageRepository;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ public function getDirectory()
+ {
+ return $this->configNode['directory'];
+ }
+
+ public function getBackend()
+ {
+ return $this->backend;
+ }
+
+ public function getThumbnailRepository()
+ {
+ return $this->thumbnailRepository;
+ }
+
+ public function getResizedImageRepository()
+ {
+ return $this->resizedImageRepository;
+ }
+
+ public function getMaxSize()
+ {
+ return $this->configNode['maxSize'];
+ }
+
+ public function getAllowedExtensions()
+ {
+ return $this->configNode['allowedExtensions'];
+ }
+
+ public function getDeniedExtensions()
+ {
+ return $this->configNode['deniedExtensions'];
+ }
+
+ public function getLabel()
+ {
+ return isset($this->configNode['label']) ? $this->configNode['label'] : null;
+ }
+
+ public function isLazyLoaded()
+ {
+ return isset($this->configNode['lazyLoad']) && $this->configNode['lazyLoad'];
+ }
+
+ public function isAllowedExtension($extension)
+ {
+ $extension = strtolower(ltrim($extension, '.'));
+
+ $allowed = $this->configNode['allowedExtensions'];
+ $denied = $this->configNode['deniedExtensions'];
+
+ if (!empty($allowed) && !in_array($extension, $allowed) ||
+ !empty($denied) && in_array($extension, $denied)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the resource type hash.
+ *
+ * @return string hash string
+ */
+ public function getHash()
+ {
+ return substr(md5($this->configNode['name'] . $this->configNode['backend'] . $this->configNode['directory'] . $this->backend->getBaseUrl() . $this->backend->getRootDirectory()), 0, 16);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResourceType/ResourceTypeFactory.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResourceType/ResourceTypeFactory.php
new file mode 100644
index 0000000..c40977f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/ResourceType/ResourceTypeFactory.php
@@ -0,0 +1,56 @@
+app = $app;
+ $this->config = $app['config'];
+ $this->backendFactory = $app['backend_factory'];
+ $this->thumbnailRepository = $app['thumbnail_repository'];
+ $this->resizedImageRepository = $app['resized_image_repository'];
+ }
+
+ /**
+ * Returns the resource type object with a given name.
+ *
+ * @param string $name resource type name
+ *
+ * @return ResourceType
+ */
+ public function getResourceType($name)
+ {
+ if (!$this->offsetExists($name)) {
+ $resourceTypeConfig = $this->config->getResourceTypeNode($name);
+ $backend = $this->backendFactory->getBackend($resourceTypeConfig['backend']);
+
+ $this[$name] = new ResourceType($name, $resourceTypeConfig, $backend, $this->thumbnailRepository, $this->resizedImageRepository);
+ }
+
+ return $this[$name];
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Response/JsonResponse.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Response/JsonResponse.php
new file mode 100644
index 0000000..21d13e3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Response/JsonResponse.php
@@ -0,0 +1,67 @@
+rawData = $data;
+ }
+
+ public function getData()
+ {
+ return $this->rawData;
+ }
+
+ public function setData($data = array())
+ {
+ $this->rawData = $data;
+
+ return parent::setData($this->rawData);
+ }
+
+ public function withError($errorNumber, $errorMessage = null)
+ {
+ $errorData = array('number' => $errorNumber);
+
+ if ($errorMessage) {
+ $errorData['message'] = $errorMessage;
+ }
+
+ $data = (array) $this->rawData;
+
+ $data = array('error' => $errorData) + $data;
+
+ $this->setData($data);
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Security/Csrf/DoubleSubmitCookieTokenValidator.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Security/Csrf/DoubleSubmitCookieTokenValidator.php
new file mode 100644
index 0000000..b726f7c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Security/Csrf/DoubleSubmitCookieTokenValidator.php
@@ -0,0 +1,80 @@
+tokenParamName = $tokenParamName;
+ $this->tokenCookieName = $tokenCookieName;
+ $this->minTokenLength = $minTokenLength;
+ }
+
+ /**
+ * Checks if the request contains a valid CSRF token.
+ *
+ * @param Request $request
+ *
+ * @return bool `true` if the token is valid, `false` otherwise.
+ */
+ public function validate(Request $request)
+ {
+ $paramToken = trim((string) $request->get($this->tokenParamName));
+ $cookieToken = trim((string) $request->cookies->get($this->tokenCookieName));
+
+ if (strlen($paramToken) >= $this->minTokenLength && strlen($cookieToken) >= $this->minTokenLength) {
+ return $paramToken === $cookieToken;
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Security/Csrf/TokenValidatorInterface.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Security/Csrf/TokenValidatorInterface.php
new file mode 100644
index 0000000..06e5083
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Security/Csrf/TokenValidatorInterface.php
@@ -0,0 +1,34 @@
+ '150', 'height' => '150', 'quality' => 80)
+ *
+ * @var array $adjustedSizeInfo
+ */
+ protected $adjustedSizeInfo;
+
+ /**
+ * @param ThumbnailRepository $thumbnailRepository
+ * @param ResourceType $sourceFileResourceType
+ * @param string $sourceFileDir
+ * @param string $sourceFileName
+ * @param int $requestedWidth
+ * @param int $requestedHeight
+ */
+ public function __construct(ThumbnailRepository $thumbnailRepository, ResourceType $sourceFileResourceType, $sourceFileDir, $sourceFileName, $requestedWidth, $requestedHeight)
+ {
+ parent::__construct($sourceFileResourceType, $sourceFileDir, $sourceFileName, $requestedWidth, $requestedHeight);
+
+ $this->thumbnailRepository = $thumbnailRepository;
+
+ $this->adjustDimensions();
+ $this->backend = $thumbnailRepository->getThumbnailBackend();
+
+ $width = $this->adjustedSizeInfo['width'];
+ $height = $this->adjustedSizeInfo['height'];
+
+ $this->resizedImageFileName = ResizedImage::createFilename($sourceFileName, $width, $height);
+ }
+
+ /**
+ * Adjusts thumbnail dimensions.
+ *
+ * Dimensions passed in `$requestedWidth` and `$requestedHeight`
+ * are adjusted to one of the allowed sizes. The smallest allowed
+ * thumbnail size that is bigger than the requested one is used.
+ */
+ protected function adjustDimensions()
+ {
+ $allowedSizes = $this->thumbnailRepository->getAllowedSizes();
+
+ $this->adjustedSizeInfo = end($allowedSizes);
+
+ foreach ($allowedSizes as $sizeInfo) {
+ if ($sizeInfo['width'] >= $this->requestedWidth && $sizeInfo['height'] >= $this->requestedHeight) {
+ $this->adjustedSizeInfo = $sizeInfo;
+ break;
+ }
+ }
+ }
+
+ /**
+ * Returns backend-relative thumbnails directory.
+ *
+ * @return string
+ */
+ public function getDirectory()
+ {
+ return Path::combine(
+ $this->thumbnailRepository->getThumbnailsPath(),
+ $this->sourceFileResourceType->getName(),
+ $this->sourceFileDir,
+ $this->sourceFileName);
+ }
+
+ /**
+ * Creates a thumbnail.
+ *
+ * @return bool
+ *
+ * @throws \Exception
+ */
+ public function create()
+ {
+ $sourceBackend = $this->sourceFileResourceType->getBackend();
+ $sourceFilePath = Path::combine($this->sourceFileResourceType->getDirectory(), $this->sourceFileDir, $this->sourceFileName);
+
+ if ($sourceBackend->isHiddenFile($this->sourceFileName) || !$sourceBackend->has($sourceFilePath)) {
+ throw new FileNotFoundException('Thumbnail::create(): Source file not found');
+ }
+
+ $image = Image::create($sourceBackend->read($sourceFilePath), $this->thumbnailRepository->isBitmapSupportEnabled());
+
+ // Update cached info about image
+ $app = $this->thumbnailRepository->getContainer();
+ $app['cache']->set(
+ Path::combine($this->sourceFileResourceType->getName(), $this->sourceFileDir, $this->sourceFileName),
+ $image->getInfo()
+ );
+
+ $image->resize($this->adjustedSizeInfo['width'], $this->adjustedSizeInfo['height'], $this->adjustedSizeInfo['quality']);
+
+ $this->resizedImageData = $image->getData();
+ $this->resizedImageSize = $image->getDataSize();
+ $this->resizedImageMimeType = $image->getMimeType();
+
+ unset($image);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Thumbnail/ThumbnailRepository.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Thumbnail/ThumbnailRepository.php
new file mode 100644
index 0000000..ea92e7f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Thumbnail/ThumbnailRepository.php
@@ -0,0 +1,178 @@
+app = $app;
+ $this->config = $app['config'];
+ $this->thumbsBackend = $app['backend_factory']->getPrivateDirBackend('thumbs');
+ $this->dispatcher = $app['dispatcher'];
+ }
+
+ /**
+ * Returns the Backend object where thumbnails are stored.
+ *
+ * @return Backend
+ */
+ public function getThumbnailBackend()
+ {
+ return $this->thumbsBackend;
+ }
+
+ /**
+ * @return CKFinder
+ */
+ public function getContainer()
+ {
+ return $this->app;
+ }
+
+ /**
+ * Returns backend-relative directory path where
+ * thumbnails are stored.
+ *
+ * @return string
+ */
+ public function getThumbnailsPath()
+ {
+ return $this->config->getPrivateDirPath('thumbs');
+ }
+
+ /**
+ * Returns an array of allowed sizes for thumbnails.
+ *
+ * @return array
+ */
+ public function getAllowedSizes()
+ {
+ return $this->config->get('thumbnails.sizes');
+ }
+
+ /**
+ * Returns information about bitmap support for thumbnails. If bitmap
+ * support is disabled, thumbnails for bitmaps will not be generated.
+ *
+ * @return bool `true` if bitmap support is enabled.
+ */
+ public function isBitmapSupportEnabled()
+ {
+ return $this->config->get('thumbnails.bmpSupported');
+ }
+
+ /**
+ * Returns a thumbnail object for a given file defined by the resource type,
+ * path and file name.
+ * The real size of the thumbnail image will be adjusted to one of the sizes
+ * allowed by the thumbnail configuration.
+ *
+ * @param ResourceType $resourceType source file resource type
+ * @param string $path source file directory path
+ * @param string $fileName source file name
+ * @param int $requestedWidth requested thumbnail height
+ * @param int $requestedHeight requested thumbnail height
+ *
+ * @return Thumbnail
+ *
+ * @throws \Exception
+ */
+ public function getThumbnail(ResourceType $resourceType, $path, $fileName, $requestedWidth, $requestedHeight)
+ {
+ $thumbnail = new Thumbnail($this, $resourceType, $path, $fileName, $requestedWidth, $requestedHeight);
+
+ if (!$thumbnail->exists()) {
+ $thumbnail->create();
+
+ $createThumbnailEvent = new ResizeImageEvent($this->app, $thumbnail);
+ $this->dispatcher->dispatch(CKFinderEvent::CREATE_THUMBNAIL, $createThumbnailEvent);
+
+ if (!$createThumbnailEvent->isPropagationStopped()) {
+ $thumbnail = $createThumbnailEvent->getResizedImage();
+ $thumbnail->save();
+ }
+ } else {
+ $thumbnail->load();
+ }
+
+ return $thumbnail;
+ }
+
+ /**
+ * Deletes all thumbnails under the given path defined by the resource type,
+ * path and file name.
+ *
+ * @param ResourceType $resourceType
+ * @param string $path
+ * @param string $fileName
+ *
+ * @return bool `true` if deleted successfully
+ */
+ public function deleteThumbnails(ResourceType $resourceType, $path, $fileName = null)
+ {
+ $path = Path::combine($this->getThumbnailsPath(), $resourceType->getName(), $path, $fileName);
+
+ if ($this->thumbsBackend->has($path)) {
+ return $this->thumbsBackend->deleteDir($path);
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Translator.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Translator.php
new file mode 100644
index 0000000..e4b1a40
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Translator.php
@@ -0,0 +1,85 @@
+setLocale($locale);
+ }
+
+ /**
+ * Sets locale for translations.
+ *
+ * @param string $locale
+ */
+ protected function setLocale($locale)
+ {
+ if (null === $locale || !preg_match('/^[a-z\-]{2,5}$/', $locale) || !file_exists(__DIR__ . "/locales/{$locale}.json")) {
+ $locale = 'en';
+ }
+
+ if (null === $this->translations) {
+ $this->translations = json_decode(file_get_contents(__DIR__ . "/locales/{$locale}.json"), true);
+ }
+ }
+
+ /**
+ * Translates an error message for a given error code.
+ *
+ * @param int $errorNumber error number
+ * @param array $replacements array of replacements to use in the translated message.
+ *
+ * @return string
+ */
+ public function translateErrorMessage($errorNumber, $replacements = array())
+ {
+ $errorMessage = '';
+
+ if ($errorNumber) {
+ if (isset($this->translations['errors'][$errorNumber])) {
+ $errorMessage = $this->translations['errors'][$errorNumber];
+
+ foreach ($replacements as $from => $to) {
+ $errorMessage = str_replace('{' . $from . '}', $to, $errorMessage);
+ }
+ } else {
+ $errorMessage = str_replace('{number}', $errorNumber, $this->translations['errorUnknown']);
+ }
+ }
+
+ return $errorMessage;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Utils.php b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Utils.php
new file mode 100644
index 0000000..1478a18
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Utils.php
@@ -0,0 +1,307 @@
+$_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user.
+ */
+ public static function getRootPath()
+ {
+ if (isset($_SERVER['SCRIPT_FILENAME'])) {
+ $sRealPath = dirname($_SERVER['SCRIPT_FILENAME']);
+ } else {
+ /**
+ * realpath — Returns canonicalized absolute pathname
+ */
+ $sRealPath = realpath('.');
+ }
+
+ $sRealPath = static::trimPathTrailingSlashes($sRealPath);
+
+ /**
+ * The file name of the currently executing script, relative to the document root.
+ * For instance, $_SERVER['PHP_SELF'] in a script at the address `http://example.com/test.php/foo.bar`
+ * would be `/test.php/foo.bar`.
+ */
+ $sSelfPath = dirname($_SERVER['PHP_SELF']);
+ $sSelfPath = static::trimPathTrailingSlashes($sSelfPath);
+
+ return static::trimPathTrailingSlashes(substr($sRealPath, 0, strlen($sRealPath) - strlen($sSelfPath)));
+ }
+
+ /**
+ * @param string $path
+ *
+ * @return string
+ */
+ protected static function trimPathTrailingSlashes($path)
+ {
+ return rtrim($path, DIRECTORY_SEPARATOR . '/\\');
+ }
+
+ /**
+ * Checks if an array contains all specified keys.
+ *
+ * @param array $array
+ * @param array $keys
+ *
+ * @return `true` if the array has all required keys, `false` otherwise.
+ */
+ public static function arrayContainsKeys(array $array, array $keys)
+ {
+ return count(array_intersect_key(array_flip($keys), $array)) === count($keys);
+ }
+
+ /**
+ * Simulates the `encodeURIComponent()` function available in JavaScript.
+ *
+ * @param string $str
+ *
+ * @return string
+ */
+ public static function encodeURLComponent($str)
+ {
+ $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')');
+
+ return strtr(rawurlencode($str), $revert);
+ }
+
+ /**
+ * Decodes the URL component.
+ *
+ * @param string $str
+ *
+ * @return string
+ */
+ public static function decodeURLComponent($str)
+ {
+ return rawurldecode($str);
+ }
+
+ /**
+ * Decodes URL parts.
+ *
+ * @param string $str
+ *
+ * @return string
+ */
+ public static function decodeURLParts($str)
+ {
+ return static::decodeURLComponent($str);
+ }
+
+ /**
+ * Encodes URL parts.
+ *
+ * @param string $str
+ *
+ * @return string
+ */
+ public static function encodeURLParts($str)
+ {
+ $revert = array('%2F'=>'/');
+
+ return strtr(static::encodeURLComponent($str), $revert);
+ }
+
+ /**
+ * Returns a formatted date string generated for a given timestamp.
+ *
+ * @param int $timestamp
+ *
+ * @return string
+ */
+ public static function formatDate($timestamp)
+ {
+ return date('YmdHis', $timestamp);
+ }
+
+ /**
+ * Returns formatted file size.
+ *
+ * @param int $size size in bytes
+ *
+ * @return int
+ */
+ public static function formatSize($size)
+ {
+ $size = (int) $size;
+
+ return ($size && $size < 1024) ? 1 : (int) round($size / 1024);
+ }
+
+ /**
+ * Removes any cache headers that might be set by the session cache limiter.
+ * See @link http://php.net/manual/en/function.session-cache-limiter.php
+ */
+ public static function removeSessionCacheHeaders()
+ {
+ $headersToRemove = array('Expires', 'Cache-Control', 'Last-Modified', 'Pragma');
+
+ foreach ($headersToRemove as $header) {
+ header_remove($header);
+ }
+ }
+
+ /**
+ * Checks if a given data chunk contains HTML-like data.
+ *
+ * If the `mbstring` extension is available, additionally the following encodings are checked:
+ * UTF-7, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE.
+ *
+ * @param string $chunk
+ *
+ * @return bool `true` if the provided code chunk contains HTML-like data.
+ */
+ public static function containsHtml($chunk)
+ {
+ if (extension_loaded('mbstring')) {
+ $encodingsToCheck = array('UTF-7', 'UTF-16BE', 'UTF-16LE', 'UTF-32BE', 'UTF-32LE');
+ $supportedEncodings = mb_list_encodings();
+
+ foreach ($encodingsToCheck as $encodingFrom) {
+ if (!in_array($encodingFrom, $supportedEncodings)) {
+ continue;
+ }
+
+ $chunkUtf8 = mb_convert_encoding($chunk, 'UTF-8', $encodingFrom);
+
+ if (static::containsHtmlUTF8($chunkUtf8)) {
+ return true;
+ }
+ }
+ }
+
+ return static::containsHtmlUTF8($chunk);
+ }
+
+ /**
+ * Checks if a given data chunk contains HTML-like data (assuming that the given chunk is encoded as UTF-8).
+ *
+ * @param string $chunk
+ *
+ * @return bool
+ */
+ public static function containsHtmlUTF8($chunk)
+ {
+ if (!$chunk) {
+ return false;
+ }
+
+ $chunk = strtolower($chunk);
+
+ $chunk = trim($chunk);
+
+ if (preg_match("/isAllowedExtension($ext) ? '.' : '_';
+ $basename .= $ext;
+ }
+
+ // Add the last extension to the final name.
+ return $basename . '.' . $lastExtension;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/bg.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/bg.json
new file mode 100644
index 0000000..c27d9f5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/bg.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Не е възможно да се извърши заявката. (ГРЕШКА {number})",
+ "errors": {
+ "10": "Невалидна команда.",
+ "11": "Типът на ресурса не е определен в заявката.",
+ "12": "Заявеният тип на ресурса не е намерен.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Невалиден файл или име на папка.",
+ "103": "Не е възможно да се извърши действието заради проблем с идентификацията.",
+ "104": "Не е възможно да се извърши действието заради проблем с правата.",
+ "105": "Невалидно файлово разширение.",
+ "109": "Невалидна заявка.",
+ "110": "Неизвестна грешка.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Файл или папка със същото име вече съществува.",
+ "116": "Папката не е намерена, опреснете и опитайте отново.",
+ "117": "Файлът не е намерен, опреснете и опитайте отново.",
+ "118": "Пътищата за цел и източник трябва да са еднакви.",
+ "201": "Файл с такова име съществува, каченият файл е преименуван на \"{name}\".",
+ "202": "Невалиден файл.",
+ "203": "Невалиден файл. Размерът е прекалено голям.",
+ "204": "Каченият файл е повреден.",
+ "205": "Няма временна папка за качените файлове.",
+ "206": "Качването е спряно заради проблеми със сигурността. Файлът съдържа HTML данни.",
+ "207": "Каченият файл е преименуван на \"{name}\".",
+ "300": "Преместването на файловете пропадна.",
+ "301": "Копирането на файловете пропадна.",
+ "302": "Deleting file(s) failed.",
+ "500": "Файловият браузър е изключен заради проблеми със сигурността. Моля свържете се с Вашия системен администратор и проверете конфигурацията.",
+ "501": "Поддръжката за миниатюри е изключена."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ca.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ca.json
new file mode 100644
index 0000000..1725e3b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ca.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "No ha estat possible completar la solicitut. (Error {number})",
+ "errors": {
+ "10": "Ordre incorrecte.",
+ "11": "El tipus de recurs no ha estat especificat a la solicitut.",
+ "12": "El tipus de recurs solicitat no és vàlid.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Nom de fitxer o carpeta no vàlids.",
+ "103": "No s'ha pogut completar la solicitut degut a les restriccions d'autorització.",
+ "104": "No s'ha pogut completar la solicitut degut a les restriccions en el sistema de fitxers.",
+ "105": "La extensió del fitxer no es vàlida.",
+ "109": "Petició invàlida.",
+ "110": "Error desconegut.",
+ "111": "No ha estat possible completar l'operació a causa de la grandària del fitxer resultant.",
+ "115": "Ja existeix un fitxer o carpeta amb aquest nom.",
+ "116": "No s'ha trobat la carpeta. Si us plau, actualitzi i torni-ho a provar.",
+ "117": "No s'ha trobat el fitxer. Si us plau, actualitzi i torni-ho a provar.",
+ "118": "Les rutes origen i destí són iguals.",
+ "201": "Ja existeix un fitxer amb aquest nom. El fitxer pujat ha estat renombrat com a \"{name}\".",
+ "202": "Fitxer invàlid.",
+ "203": "Fitxer invàlid. El pes és massa gran.",
+ "204": "El fitxer pujat està corrupte.",
+ "205": "La carpeta temporal no està disponible en el servidor per poder realitzar pujades.",
+ "206": "La pujada s'ha cancel·lat per raons de seguretat. El fitxer conté codi HTML.",
+ "207": "El fitxer pujat ha estat renombrat com a \"{name}\".",
+ "300": "Ha fallat el moure el(s) fitxer(s).",
+ "301": "Ha fallat el copiar el(s) fitxer(s).",
+ "302": "Deleting file(s) failed.",
+ "500": "El navegador de fitxers està deshabilitat per raons de seguretat. Si us plau, contacti amb l'administrador del sistema i comprovi el fitxer de configuració de CKFinder.",
+ "501": "El suport per a icones està deshabilitat."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/cs.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/cs.json
new file mode 100644
index 0000000..196f73e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/cs.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Příkaz nebylo možné dokončit. (Chyba {number})",
+ "errors": {
+ "10": "Neplatný příkaz.",
+ "11": "Typ zdroje nebyl v požadavku určen.",
+ "12": "Požadovaný typ zdroje není platný.",
+ "13": "Soubor s nastavením konektoru je neplatný.",
+ "14": "Neplatný zásuvný model konektoru: {pluginName}.",
+ "102": "Špatné název souboru, nebo složky.",
+ "103": "Nebylo možné příkaz dokončit kvůli omezení oprávnění.",
+ "104": "Nebylo možné příkaz dokončit kvůli omezení oprávnění souborového systému.",
+ "105": "Neplatná přípona souboru.",
+ "109": "Neplatný požadavek.",
+ "110": "Neznámá chyba.",
+ "111": "Požadavek nemohl být splněn kvůli výsledné velikosti souboru.",
+ "115": "Soubor nebo složka se stejným názvem již existuje.",
+ "116": "Složka nenalezena, prosím obnovte a zkuste znovu.",
+ "117": "Soubor nenalezen, prosím obnovte seznam souborů a zkuste znovu.",
+ "118": "Cesty zdroje a cíle jsou stejné.",
+ "201": "Soubor se stejným názvem je již dostupný, nahraný soubor byl přejmenován na \"{name}\".",
+ "202": "Neplatný soubor.",
+ "203": "Neplatný soubor. Velikost souboru je příliš velká.",
+ "204": "Nahraný soubor je poškozen.",
+ "205": "Na serveru není dostupná dočasná složka pro nahrávání.",
+ "206": "Nahrávání zrušeno z bezpečnostních důvodů. Soubor obsahuje data podobná HTML.",
+ "207": "Nahraný soubor byl přejmenován na \"{name}\".",
+ "300": "Přesunování souboru(ů) selhalo.",
+ "301": "Kopírování souboru(ů) selhalo.",
+ "302": "Mazání souborů selhalo.",
+ "500": "Průzkumník souborů je z bezpečnostních důvodů zakázán. Sdělte to prosím správci systému a zkontrolujte soubor nastavení CKFinder.",
+ "501": "Podpora náhledů je zakázána."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/cy.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/cy.json
new file mode 100644
index 0000000..f084dfa
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/cy.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Does dim modd cwblhau'r cais. (Gwall {number})",
+ "errors": {
+ "10": "Gorchymyn annilys.",
+ "11": "Doedd math yr adnodd heb ei benodi yn y cais.",
+ "12": "Dyw math yr adnodd ddim yn ddilys.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Enw ffeil neu ffolder annilys.",
+ "103": "Doedd dim modd cwblhau'r cais oherwydd cyfyngiadau awdurdodi.",
+ "104": "Doedd dim modd cwblhau'r cais oherwydd cyfyngiadau i hawliau'r system ffeilio.",
+ "105": "Estyniad ffeil annilys.",
+ "109": "Cais annilys.",
+ "110": "Gwall anhysbys.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Mae ffeil neu ffolder gyda'r un enw yn bodoli yn barod.",
+ "116": "Methu â darganfod y ffolder. Adfywiwch a cheisio eto.",
+ "117": "Methu â darganfod y ffeil. Adfywiwch y rhestr ffeiliau a cheisio eto.",
+ "118": "Mae'r llwybrau gwreiddiol a tharged yn unfath.",
+ "201": "Mae ffeil â'r enw hwnnw yn bodoli yn barod. Cafodd y ffeil a lanlwythwyd ei hailenwi i \"{name}\".",
+ "202": "Ffeil annilys.",
+ "203": "Ffeil annilys. Mae maint y ffeil yn rhy fawr.",
+ "204": "Mae'r ffeil a lanwythwyd wedi chwalu.",
+ "205": "Does dim ffolder dros dro ar gael er mwyn lanlwytho ffeiliau iddo ar y gweinydd hwn.",
+ "206": "Cafodd y lanlwythiad ei ddiddymu oherwydd rhesymau diogelwch. Mae'r ffeil yn cynnwys data yn debyg i HTML.",
+ "207": "Cafodd y ffeil a lanlwythwyd ei hailenwi i \"{name}\".",
+ "300": "Methodd symud y ffeil(iau).",
+ "301": "Methodd copïo'r ffeil(iau).",
+ "302": "Deleting file(s) failed.",
+ "500": "Cafodd y porwr ffeiliau ei anallogi oherwydd rhesymau diogelwch. Cysylltwch â'ch gweinyddwr system a gwirio'ch ffeil ffurfwedd CKFinder.",
+ "501": "Mae cynhaliaeth bawdluniau wedi'i hanalluogi."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/da.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/da.json
new file mode 100644
index 0000000..a68d201
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/da.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Det var ikke muligt at fuldføre handlingen. (Fejl: {number})",
+ "errors": {
+ "10": "Ugyldig handling.",
+ "11": "Ressourcetypen blev ikke angivet i anmodningen.",
+ "12": "Ressourcetypen er ikke gyldig.",
+ "13": "Konfigurationsfilen er ikke gyldig.",
+ "14": "Ugyldig connector plugin: {pluginName}.",
+ "102": "Ugyldig fil eller mappenavn.",
+ "103": "Det var ikke muligt at fuldføre handlingen på grund af en begrænsning i rettigheder.",
+ "104": "Det var ikke muligt at fuldføre handlingen på grund af en begrænsning i filsystem rettigheder.",
+ "105": "Ugyldig filtype.",
+ "109": "Ugyldig anmodning.",
+ "110": "Ukendt fejl.",
+ "111": "Det var ikke muligt at fuldføre handlingent possible på grund af filstørrelsen.",
+ "115": "En fil eller mappe med det samme navn eksisterer allerede.",
+ "116": "Mappen blev ikke fundet. Opdatér listen eller prøv igen.",
+ "117": "Filen blev ikke fundet. Opdatér listen eller prøv igen.",
+ "118": "Originalplacering og destination er ens.",
+ "201": "En fil med det samme filnavn eksisterer allerede. Den uploadede fil er blevet omdøbt til \"{name}\".",
+ "202": "Ugyldig fil.",
+ "203": "Ugyldig fil. Filstørrelsen er for stor.",
+ "204": "Den uploadede fil er korrupt.",
+ "205": "Der er ikke en midlertidig mappe til upload til rådighed på serveren.",
+ "206": "Upload annulleret af sikkerhedsmæssige årsager. Filen indeholder HTML-lignende data.",
+ "207": "Den uploadede fil er blevet omdøbt til \"{name}\".",
+ "300": "Flytning af fil(er) fejlede.",
+ "301": "Kopiering af fil(er) fejlede.",
+ "302": "Sletning af file(s) fejlede.",
+ "500": "Filbrowseren er deaktiveret af sikkerhedsmæssige årsager. Kontakt systemadministratoren eller kontrollér CKFinders konfigurationsfil.",
+ "501": "Understøttelse af thumbnails er deaktiveret."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/de.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/de.json
new file mode 100644
index 0000000..4f36077
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/de.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Ihre Anfrage konnte nicht bearbeitet werden. (Fehler {number})",
+ "errors": {
+ "10": "Unbekannter Befehl.",
+ "11": "Der Ressourcentyp wurde nicht spezifiziert.",
+ "12": "Der Ressourcentyp ist nicht gültig.",
+ "13": "Der Connector-Konfigurationsdatei ist ungültig.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Ungültiger Datei oder Verzeichnisname.",
+ "103": "Ihre Anfrage konnte wegen Authorisierungseinschränkungen nicht durchgeführt werden.",
+ "104": "Ihre Anfrage konnte wegen Dateisystemeinschränkungen nicht durchgeführt werden.",
+ "105": "Ungültige Dateierweiterung.",
+ "109": "Unbekannte Anfrage.",
+ "110": "Unbekannter Fehler.",
+ "111": "Es war nicht möglich die Anforderung aufgrund resultierende Dateigröße vervollständigen.",
+ "115": "Es existiert bereits eine Datei oder ein Ordner mit dem gleichen Namen.",
+ "116": "Verzeichnis nicht gefunden. Bitte aktualisieren Sie die Anzeige und versuchen es noch einmal.",
+ "117": "Datei nicht gefunden. Bitte aktualisieren Sie die Dateiliste und versuchen es noch einmal.",
+ "118": "Quell- und Zielpfad sind gleich.",
+ "201": "Es existiert bereits eine Datei unter gleichem Namen. Die hochgeladene Datei wurde unter \"{name}\" gespeichert.",
+ "202": "Ungültige Datei.",
+ "203": "ungültige Datei. Die Dateigröße ist zu groß.",
+ "204": "Die hochgeladene Datei ist korrupt.",
+ "205": "Es existiert kein temp. Ordner für das Hochladen auf den Server.",
+ "206": "Das Hochladen wurde aus Sicherheitsgründen abgebrochen. Die Datei enthält HTML-Daten.",
+ "207": "Die hochgeladene Datei wurde unter \"{name}\" gespeichert.",
+ "300": "Verschieben der Dateien fehlgeschlagen.",
+ "301": "Kopieren der Dateien fehlgeschlagen.",
+ "302": "Löschen der Dateien fehlgeschlagen.",
+ "500": "Der Dateibrowser wurde aus Sicherheitsgründen deaktiviert. Bitte benachrichtigen Sie Ihren Systemadministrator und prüfen Sie die Konfigurationsdatei.",
+ "501": "Die Miniaturansicht wurde deaktivert."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/el.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/el.json
new file mode 100644
index 0000000..2f4c2bf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/el.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Η ενέργεια δεν ήταν δυνατόν να εκτελεστεί. (Σφάλμα {number})",
+ "errors": {
+ "10": "Λανθασμένη Εντολή.",
+ "11": "Ο τύπος πόρου (resource type) δεν ήταν δυνατόν να προσδιοριστεί.",
+ "12": "Ο τύπος πόρου (resource type) δεν είναι έγκυρος.",
+ "13": "Το αρχείο ρυθμίσεων της λειτουργίας σύνδεσης είναι άκυρο.",
+ "14": "Άκυρο πρόσθετο (plugin) σύνδεσης: {pluginName}.",
+ "102": "Το όνομα αρχείου ή φακέλου δεν είναι έγκυρο.",
+ "103": "Δεν ήταν δυνατή η εκτέλεση της ενέργειας λόγω έλλειψης δικαιωμάτων ασφαλείας.",
+ "104": "Δεν ήταν δυνατή η εκτέλεση της ενέργειας λόγω περιορισμών του συστήματος αρχείων.",
+ "105": "Λανθασμένη επέκταση αρχείου.",
+ "109": "Λανθασμένη ενέργεια.",
+ "110": "Άγνωστο λάθος.",
+ "111": "Δεν ήταν δυνατή η ολοκλήρωση της ενέργειας λόγω του μεγέθους αρχείου που προκύπτει.",
+ "115": "Το αρχείο ή φάκελος υπάρχει ήδη.",
+ "116": "Ο φάκελος δεν βρέθηκε. Παρακαλούμε ανανεώστε τη σελίδα και προσπαθήστε ξανά.",
+ "117": "Το αρχείο δεν βρέθηκε. Παρακαλούμε ανανεώστε τη σελίδα και προσπαθήστε ξανά.",
+ "118": "Η αρχική και τελική διαδρομή είναι ίδιες.",
+ "201": "Ένα αρχείο με την ίδια ονομασία υπάρχει ήδη. Το μεταφορτωμένο αρχείο μετονομάστηκε σε \"{name}\".",
+ "202": "Λανθασμένο αρχείο.",
+ "203": "Λανθασμένο αρχείο. Το μέγεθος του αρχείου είναι πολύ μεγάλο.",
+ "204": "Το μεταφορτωμένο αρχείο είναι χαλασμένο.",
+ "205": "Δεν υπάρχει προσωρινός φάκελος για να χρησιμοποιηθεί για τις μεταφορτώσεις των αρχείων.",
+ "206": "Η μεταφόρτωση ακυρώθηκε για λόγους ασφαλείας. Το αρχείο περιέχει δεδομένα μορφής HTML.",
+ "207": "Το μεταφορτωμένο αρχείο μετονομάστηκε σε \"{name}\".",
+ "300": "Η μετακίνηση των αρχείων απέτυχε.",
+ "301": "Η αντιγραφή των αρχείων απέτυχε.",
+ "302": "Η διαγραφή αρχείων απέτυχε.",
+ "500": "Ο πλοηγός αρχείων έχει απενεργοποιηθεί για λόγους ασφαλείας. Παρακαλούμε επικοινωνήστε με τον διαχειριστή της ιστοσελίδας και ελέγξτε το αρχείο ρυθμίσεων του πλοηγού (CKFinder).",
+ "501": "Η υποστήριξη των μικρογραφιών έχει απενεργοποιηθεί."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/en.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/en.json
new file mode 100644
index 0000000..6a59dcf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/en.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "It was not possible to complete the request. (Error {number})",
+ "errors": {
+ "10": "Invalid command.",
+ "11": "The resource type was not specified in the request.",
+ "12": "The requested resource type is invalid.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Invalid file or folder name.",
+ "103": "It was not possible to complete the request due to authorization restrictions.",
+ "104": "It was not possible to complete the request due to file system permission restrictions.",
+ "105": "Invalid file extension.",
+ "109": "Invalid request.",
+ "110": "Unknown error.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "A file or folder with the same name already exists.",
+ "116": "Folder not found. Please refresh and try again.",
+ "117": "File not found. Please refresh the files list and try again.",
+ "118": "Source and target paths are equal.",
+ "201": "A file with the same name already exists. The uploaded file was renamed to \"{name}\".",
+ "202": "Invalid file.",
+ "203": "Invalid file. The file size is too big.",
+ "204": "The uploaded file is corrupt.",
+ "205": "No temporary folder is available for upload on the server.",
+ "206": "Upload canceled due to security reasons. The file contains HTML-like data.",
+ "207": "The uploaded file was renamed to \"{name}\".",
+ "300": "Moving file(s) failed.",
+ "301": "Copying file(s) failed.",
+ "302": "Deleting file(s) failed.",
+ "500": "The file browser is disabled for security reasons. Please contact your system administrator and check the CKFinder configuration file.",
+ "501": "Thumbnail support is disabled."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/eo.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/eo.json
new file mode 100644
index 0000000..d5bbfb2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/eo.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Ne eblis plenumi la peton. (Eraro {number})",
+ "errors": {
+ "10": "Nevalida komando.",
+ "11": "La risurctipo ne estas indikita en la komando.",
+ "12": "La risurctipo ne estas valida.",
+ "13": "La konektila agordodosiero estas ne valida.",
+ "14": "Nevalida konektilo: {pluginName}.",
+ "102": "La dosier- aŭ dosierujnomo ne estas valida.",
+ "103": "Ne eblis plenumi la peton pro rajtaj limigoj.",
+ "104": "Ne eblis plenumi la peton pro atingopermesaj limigoj.",
+ "105": "Nevalida dosiernoma finaĵo.",
+ "109": "Nevalida peto.",
+ "110": "Nekonata eraro.",
+ "111": "Ne eblis plenumi la peton pro dosiergrando.",
+ "115": "Dosiero aŭ dosierujo kun tiu nomo jam ekzistas.",
+ "116": "Tiu dosierujo ne ekzistas. Bonvolu aktualigi kaj reprovi.",
+ "117": "Tiu dosiero ne ekzistas. Bonvolu aktualigi kaj reprovi.",
+ "118": "La vojoj al la fonto kaj al la celo estas samaj.",
+ "201": "Dosiero kun la sama nomo jam ekzistas. La alŝutita dosiero estas renomita al \"{name}\".",
+ "202": "Nevalida dosiero.",
+ "203": "Nevalida dosiero. La grando estas tro alta.",
+ "204": "La alŝutita dosiero estas difektita.",
+ "205": "Neniu provizora dosierujo estas disponebla por alŝuto al la servilo.",
+ "206": "Alŝuto nuligita pro kialoj pri sekureco. La dosiero entenas datenojn de HTMLtipo.",
+ "207": "La alŝutita dosiero estas renomita al \"{name}\".",
+ "300": "La movo de la dosieroj malsukcesis.",
+ "301": "La kopio de la dosieroj malsukcesis.",
+ "302": "La forigo de la dosiero malsukcesis.",
+ "500": "La dosieradministra sistemo estas malvalidigita. Kontaktu vian administranton kaj kontrolu la agordodosieron de CKFinder.",
+ "501": "La eblo de miniaturoj estas malvalidigita."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/es-mx.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/es-mx.json
new file mode 100644
index 0000000..7366ba6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/es-mx.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "No ha sido posible completar la solicitud. (Error {number})",
+ "errors": {
+ "10": "Comando incorrecto.",
+ "11": "El tipo de recurso no ha sido especificado en la solicitud.",
+ "12": "El tipo de recurso solicitado no es válido.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Nombre de archivo o carpeta no válido.",
+ "103": "No se ha podido completar la solicitud debido a las restricciones de autorización.",
+ "104": "No ha sido posible completar la solicitud debido a restricciones en el sistema de archivos.",
+ "105": "La extensión del archivo no es válida.",
+ "109": "Petición inválida.",
+ "110": "Error desconocido.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Ya existe un archivo o carpeta con ese nombre.",
+ "116": "No se ha encontrado la carpeta. Por favor, actualice y pruebe de nuevo.",
+ "117": "No se ha encontrado el archivo. Por favor, actualice la lista de archivos y pruebe de nuevo.",
+ "118": "Las rutas origen y destino son iguales.",
+ "201": "Ya existía un archivo con ese nombre. El archivo subido ha sido renombrado como \"{name}\".",
+ "202": "Archivo inválido.",
+ "203": "Archivo inválido. El tamaño es demasiado grande.",
+ "204": "El archivo subido está corrupto.",
+ "205": "La carpeta temporal no está disponible en el servidor para las subidas.",
+ "206": "La subida se ha cancelado por razones de seguridad. El archivo contenía código HTML.",
+ "207": "El archivo subido ha sido renombrado como \"{name}\".",
+ "300": "Ha fallado el mover el(los) archivo(s).",
+ "301": "Ha fallado el copiar el(los) archivo(s).",
+ "302": "Deleting file(s) failed.",
+ "500": "El navegador de archivos está deshabilitado por razones de seguridad. Por favor, contacte con el administrador de su sistema y compruebe el archivo de configuración de CKFinder.",
+ "501": "El soporte para iconos está deshabilitado."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/es.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/es.json
new file mode 100644
index 0000000..2285b71
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/es.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "No ha sido posible completar la solicitud. (Error {number})",
+ "errors": {
+ "10": "Comando incorrecto.",
+ "11": "El tipo de recurso no ha sido especificado en la solicitud.",
+ "12": "El tipo de recurso solicitado no es válido.",
+ "13": "El archivo de configuración del conector no es válido.",
+ "14": "Plugin del conector inválido: {pluginName}.",
+ "102": "Nombre de fichero o carpeta no válido.",
+ "103": "No se ha podido completar la solicitud debido a las restricciones de autorización.",
+ "104": "No ha sido posible completar la solicitud debido a restricciones en el sistema de ficheros.",
+ "105": "La extensión del archivo no es válida.",
+ "109": "Petición inválida.",
+ "110": "Error desconocido.",
+ "111": "No fué posible completar la petición debido al tamaño del fichero.",
+ "115": "Ya existe un fichero o carpeta con ese nombre.",
+ "116": "No se ha encontrado la carpeta. Por favor, actualice y pruebe de nuevo.",
+ "117": "No se ha encontrado el fichero. Por favor, actualice la lista de ficheros y pruebe de nuevo.",
+ "118": "Las rutas origen y destino son iguales.",
+ "201": "Ya existía un fichero con ese nombre. El fichero subido ha sido renombrado como \"{name}\".",
+ "202": "Fichero inválido.",
+ "203": "Fichero inválido. El tamaño es demasiado grande.",
+ "204": "El fichero subido está corrupto.",
+ "205": "La carpeta temporal no está disponible en el servidor para las subidas.",
+ "206": "La subida se ha cancelado por razones de seguridad. El fichero contenía código HTML.",
+ "207": "El fichero subido ha sido renombrado como \"{name}\".",
+ "300": "Ha fallado el mover el(los) fichero(s).",
+ "301": "Ha fallado el copiar el(los) fichero(s).",
+ "302": "Ha fallado la eliminación de el\/los fichero(s).",
+ "500": "El navegador de archivos está deshabilitado por razones de seguridad. Por favor, contacte con el administrador de su sistema y compruebe el fichero de configuración de CKFinder.",
+ "501": "El soporte para iconos está deshabilitado."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/et.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/et.json
new file mode 100644
index 0000000..7b098f3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/et.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Päringu täitmine polnud võimalik. (Viga {number})",
+ "errors": {
+ "10": "Vigane käsk.",
+ "11": "Allika liik polnud päringus määratud.",
+ "12": "Päritud liik pole sobiv.",
+ "13": "Konnektori seadistusfail on vigane.",
+ "14": "Vigane konnektorplugin: {pluginName}.",
+ "102": "Sobimatu faili või kausta nimi.",
+ "103": "Piiratud õiguste tõttu polnud võimalik päringut lõpetada.",
+ "104": "Failisüsteemi piiratud õiguste tõttu polnud võimalik päringut lõpetada.",
+ "105": "Sobimatu faililaiend.",
+ "109": "Vigane päring.",
+ "110": "Tundmatu viga.",
+ "111": "Päringut polnud võimalik täita tekkiva faili suuruse tõttu.",
+ "115": "Sellenimeline fail või kaust on juba olemas.",
+ "116": "Kausta ei leitud. Palun värskenda lehte ja proovi uuesti.",
+ "117": "Faili ei leitud. Palun värskenda lehte ja proovi uuesti.",
+ "118": "Lähte- ja sihtasukoht on sama.",
+ "201": "Samanimeline fail on juba olemas. Üles laaditud faili nimeks pandi \"{name}\".",
+ "202": "Vigane fail.",
+ "203": "Vigane fail. Fail on liiga suur.",
+ "204": "Üleslaaditud fail on rikutud.",
+ "205": "Serverisse üleslaadimiseks pole ühtegi ajutiste failide kataloogi.",
+ "206": "Üleslaadimine katkestati turvakaalutlustel. Fail sisaldab HTMLi sarnaseid andmeid.",
+ "207": "Üleslaaditud faili nimeks pandi \"{name}\".",
+ "300": "Faili(de) liigutamine nurjus.",
+ "301": "Faili(de) kopeerimine nurjus.",
+ "302": "Faili(de) kustutamine nurjus.",
+ "500": "Failide sirvija on turvakaalutlustel keelatud. Palun võta ühendust oma süsteemi administraatoriga ja kontrolli CKFinderi seadistusfaili.",
+ "501": "Pisipiltide tugi on keelatud."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/eu.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/eu.json
new file mode 100644
index 0000000..ac863a9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/eu.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Ezin izan da eskaera burutu. (Errorea {number})",
+ "errors": {
+ "10": "Komando baliogabea.",
+ "11": "Ez da baliabide mota zehaztu eskaeran.",
+ "12": "Eskatutako baliabide mota baliogabea da.",
+ "13": "Konektorearen konfigurazio-fitxategia baliogabea da.",
+ "14": "Konektorearen plugin baliogabea: {pluginName}.",
+ "102": "Fitxategi edo karpetaren izen baliogabea.",
+ "103": "Ezin izan da eskaera burutu autorizazio murrizketen ondorioz.",
+ "104": "Ezin izan da eskaera burutu fitxategi-sistemako baimen murrizketen ondorioz.",
+ "105": "Fitxategi-luzapen baliogabea.",
+ "109": "Eskaera baliogabea.",
+ "110": "Errore ezezaguna.",
+ "111": "Ezin izan da eskaera burutu lortzen den fitxategiaren tamainaren ondorioz.",
+ "115": "Izen bereko fitxategi edo karpeta bat existitzen da dagoeneko.",
+ "116": "Ez da karpeta aurkitu. Mesedez freskatu eta saiatu berriz.",
+ "117": "Ez da fitxategia aurkitu. Mesedez freskatu fitxategi-zerrenda eta saiatu berriz.",
+ "118": "Iturburu eta helburuko bideak berdinak dira.",
+ "201": "Izen bereko fitxategi bat existitzen da dagoeneko. Kargatutako fitxategia honela berrizendatu da: \"{name}\".",
+ "202": "Fitxategi baliogabea.",
+ "203": "Fitxategi baliogabea. Fitxategi-tamaina handiegia da.",
+ "204": "Kargatutako fitxategia hondatuta dago.",
+ "205": "Zerbitzarian ez dago fitxategiak kargatzeko aldi baterako karpetarik erabilgarri.",
+ "206": "Segurtasun-arrazoiak direla eta, karga bertan behera geratu da. Fitxategiak HTML bezalako datuak dauzka.",
+ "207": "Kargatutako fitxategia honela berrizendatu da: \"{name}\".",
+ "300": "Fitxategia(k) lekuz aldatzeak huts egin du.",
+ "301": "Fitxategia(k) kopiatzeak huts egin du.",
+ "302": "Fitxategia(k) ezabatzeak huts egin du.",
+ "500": "Segurtasun-arrazoiak direla eta, fitxategi-arakatzailea desgaituta dago. Jarri sistemaren administratzailearekin harremanetan eta egiaztatu CKFinder konfigurazio-fitxategia.",
+ "501": "Koadro txikien euskarria desgaituta dago."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/fa.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/fa.json
new file mode 100644
index 0000000..a8139e6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/fa.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "امکان تکمیل درخواست فوق وجود ندارد (خطا: {number})",
+ "errors": {
+ "10": "دستور نامعتبر.",
+ "11": "نوع منبع در درخواست تعریف نشده است.",
+ "12": "نوع منبع درخواست شده معتبر نیست.",
+ "13": "پیکربندی فایل اتصال نامعتبر است.",
+ "14": "افزونهی اتصال نامعتبر: {pluginName}.",
+ "102": "نام فایل یا پوشه نامعتبر است.",
+ "103": "امکان کامل کردن این درخواست بخاطر محدودیت اختیارات وجود ندارد.",
+ "104": "امکان کامل کردن این درخواست بخاطر محدودیت دسترسی وجود ندارد.",
+ "105": "پسوند فایل نامعتبر است.",
+ "109": "درخواست نامعتبر است.",
+ "110": "خطای ناشناخته.",
+ "111": "انجام این عمل به دلیل اندازهی فایل ممکن نیست.",
+ "115": "فایل یا پوشه ای با این نام وجود دارد",
+ "116": "پوشه یافت نشد. لطفا بروزرسانی کرده و مجددا تلاش کنید.",
+ "117": "فایل یافت نشد. لطفا فهرست فایلها را بروزرسانی کرده و مجددا تلاش کنید.",
+ "118": "منبع و مقصد مسیر یکی است.",
+ "201": "یک فایل با همان نام از قبل موجود است. فایل آپلود شده به \"{name}\" تغییر نام یافت.",
+ "202": "فایل نامعتبر",
+ "203": "فایل نامعتبر. اندازه فایل بیش از حد بزرگ است.",
+ "204": "فایل آپلود شده خراب است.",
+ "205": "هیچ پوشه موقتی برای آپلود فایل در سرور موجود نیست.",
+ "206": "آپلود به دلایل امنیتی متوقف شد. فایل محتوی اطلاعات HTML است.",
+ "207": "فایل آپلود شده به \"{name}\" تغییر نام یافت.",
+ "300": "انتقال فایل(ها) شکست خورد.",
+ "301": "کپی فایل(ها) شکست خورد.",
+ "302": "حذف فایل(ها) شکست خورد.",
+ "500": "مرورگر فایل به دلایل امنیتی غیر فعال است. لطفا با مدیر سامانه تماس بگیرید تا تنظیمات این بخش را بررسی نماید.",
+ "501": "پشتیبانی از تصاویر کوچک غیرفعال شده است"
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/fi.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/fi.json
new file mode 100644
index 0000000..2453a01
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/fi.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Pyyntöä ei voitu suorittaa. (Virhe {number})",
+ "errors": {
+ "10": "Virheellinen komento.",
+ "11": "Pyynnön resurssityyppi on määrittelemättä.",
+ "12": "Pyynnön resurssityyppi on virheellinen.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Virheellinen tiedosto- tai kansionimi.",
+ "103": "Oikeutesi eivät riitä pyynnön suorittamiseen.",
+ "104": "Tiedosto-oikeudet eivät riitä pyynnön suorittamiseen.",
+ "105": "Virheellinen tiedostotarkenne.",
+ "109": "Virheellinen pyyntö.",
+ "110": "Tuntematon virhe.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Samanniminen tiedosto tai kansio on jo olemassa.",
+ "116": "Kansiota ei löydy. Yritä uudelleen kansiopäivityksen jälkeen.",
+ "117": "Tiedostoa ei löydy. Yritä uudelleen kansiopäivityksen jälkeen.",
+ "118": "Lähde- ja kohdekansio on sama!",
+ "201": "Samanniminen tiedosto on jo olemassa. Palvelimelle ladattu tiedosto on nimetty: \"{name}\".",
+ "202": "Virheellinen tiedosto.",
+ "203": "Virheellinen tiedosto. Tiedostokoko on liian suuri.",
+ "204": "Palvelimelle ladattu tiedosto on vioittunut.",
+ "205": "Väliaikaishakemistoa ei ole määritetty palvelimelle lataamista varten.",
+ "206": "Palvelimelle lataaminen on peruttu turvallisuussyistä. Tiedosto sisältää HTML-tyylistä dataa.",
+ "207": "Palvelimelle ladattu tiedosto on nimetty: \"{name}\".",
+ "300": "Tiedostosiirto epäonnistui.",
+ "301": "Tiedostokopiointi epäonnistui.",
+ "302": "Deleting file(s) failed.",
+ "500": "Tiedostoselain on kytketty käytöstä turvallisuussyistä. Pyydä pääkäyttäjää tarkastamaan CKFinderin asetustiedosto.",
+ "501": "Esikatselukuvien tuki on kytketty toiminnasta."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/fr.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/fr.json
new file mode 100644
index 0000000..c570c6b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/fr.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "La demande n'a pas abouti. (Erreur {number})",
+ "errors": {
+ "10": "Commande invalide.",
+ "11": "Le type de ressource n'a pas été spécifié dans la commande.",
+ "12": "Le type de ressource n'est pas valide.",
+ "13": "Le fichier de configuration du connecteur n'est pas valide.",
+ "14": "Connecteur plugin invalide: {pluginName}.",
+ "102": "Nom de fichier ou de dossier invalide.",
+ "103": "La demande n'a pas abouti: problème d'autorisations.",
+ "104": "La demande n'a pas abouti: problème de restrictions de permissions.",
+ "105": "Extension de fichier invalide.",
+ "109": "Demande invalide.",
+ "110": "Erreur inconnue.",
+ "111": "Il n'a pas été possible d'exécuter la requête à cause de la taille du fichier résultant.",
+ "115": "Un fichier ou un dossier avec ce nom existe déjà.",
+ "116": "Ce dossier n'existe pas. Veuillez rafraîchir la page et réessayer.",
+ "117": "Ce fichier n'existe pas. Veuillez rafraîchir la page et réessayer.",
+ "118": "Les chemins vers la source et la cible sont les mêmes.",
+ "201": "Un fichier avec ce nom existe déjà. Le fichier téléversé a été renommé en \"{name}\".",
+ "202": "Fichier invalide.",
+ "203": "Fichier invalide. La taille est trop grande.",
+ "204": "Le fichier téléversé est corrompu.",
+ "205": "Aucun dossier temporaire n'est disponible sur le serveur.",
+ "206": "Envoi interrompu pour raisons de sécurité. Le fichier contient des données de type HTML.",
+ "207": "Le fichier téléchargé a été renommé \"{name}\".",
+ "300": "Le déplacement des fichiers a échoué.",
+ "301": "La copie des fichiers a échoué.",
+ "302": "L'effacement des fichiers à échoué.",
+ "500": "L'interface de gestion des fichiers est désactivé. Contactez votre administrateur et vérifier le fichier de configuration de CKFinder.",
+ "501": "La fonction \"miniatures\" est désactivée."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/gu.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/gu.json
new file mode 100644
index 0000000..b7e5c5b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/gu.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "તમારી રીક્વેસ્ટ માન્ય નથી. (એરર {number})",
+ "errors": {
+ "10": "કમાંડ માન્ય નથી.",
+ "11": "તમારી રીક્વેસ્ટ માન્ય નથી.",
+ "12": "તમારી રીક્વેસ્ટ રિસોર્સ માન્ય નથી.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "ફાઈલ અથવા ફોલ્ડરનું નામ માન્ય નથી.",
+ "103": "ઓથોરીટી ન હોવાને કારણે, તમારી રીક્વેસ્ટ માન્ય નથી..",
+ "104": "સિસ્ટમ પરમીસન ન હોવાને કારણે, તમારી રીક્વેસ્ટ માન્ય નથી.",
+ "105": "ફાઈલ એક્ષટેનસન માન્ય નથી.",
+ "109": "ઇનવેલીડ રીક્વેસ્ટ.",
+ "110": "અન્નોન એરર.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "એજ નામ વાળું ફાઈલ અથવા ફોલ્ડર છે.",
+ "116": "ફોલ્ડર નથી. રીફ્રેશ દબાવી ફરી પ્રયત્ન કરો.",
+ "117": "ફાઈલ નથી. રીફ્રેશ દબાવી ફરી પ્રયત્ન કરો..",
+ "118": "સોર્સ અને ટાર્ગેટ ના પાથ સરખા નથી.",
+ "201": "એજ નામ વાળી ફાઈલ છે. અપલોડ કરેલી નવી ફાઈલનું નામ \"{name}\".",
+ "202": "ફાઈલ માન્ય નથી.",
+ "203": "ફાઈલ માન્ય નથી. ફાઈલની સાઈઝ ઘણી મોટી છે.",
+ "204": "અપલોડ કરેલી ફાઈલ કરપ્ટ છે.",
+ "205": "સર્વર પર અપલોડ કરવા માટે ટેમ્પરરી ફોલ્ડર નથી.",
+ "206": "સિક્યોરીટીના કારણે અપલોડ કેન્સલ કરેલ છે. ફાઈલમાં HTML જેવો ડેટા છે.",
+ "207": "અપલોડ ફાઈલનું નવું નામ \"{name}\".",
+ "300": "ફાઈલ મુવ શક્ય નથી.",
+ "301": "ફાઈલ કોપી શક્ય નથી.",
+ "302": "Deleting file(s) failed.",
+ "500": "સિક્યોરીટીના કારણે ફાઈલ બ્રાઉઝર બંધ કરેલ છે. તમારા સિક્યોરીટી એડ્મીનીસ્ટેટરની મદદથી CKFinder કોન્ફીગ્યુંરેષન ફાઈલ તપાસો.",
+ "501": "થમ્બનેલનો સપોર્ટ બંધ કરેલો છે."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/he.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/he.json
new file mode 100644
index 0000000..4535dc7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/he.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "לא היה ניתן להשלים את הבקשה. (שגיאה {number})",
+ "errors": {
+ "10": "הוראה לא תקינה.",
+ "11": "סוג המשאב לא צויין בבקשה לשרת.",
+ "12": "סוג המשאב המצויין לא תקין.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "שם הקובץ או התיקיה לא תקין.",
+ "103": "לא היה ניתן להשלים את הבקשה בשל הרשאות מוגבלות.",
+ "104": "לא היה ניתן להשלים את הבקשה בשל הרשאות מערכת קבצים מוגבלות.",
+ "105": "סיומת הקובץ לא תקינה.",
+ "109": "בקשה לא תקינה.",
+ "110": "שגיאה לא ידועה.",
+ "111": "לא ניתן היה להשלים את הבקשה בשל הגודל החריג של הקובץ הנוצר.",
+ "115": "כבר קיים\/ת קובץ או תיקיה באותו השם.",
+ "116": "התיקיה לא נמצאה. נא לרענן ולנסות שוב.",
+ "117": "הקובץ לא נמצא. נא לרענן ולנסות שוב.",
+ "118": "כתובות המקור והיעד זהות.",
+ "201": "קובץ עם אותו השם כבר קיים. שם הקובץ שהועלה שונה ל \"{name}\"",
+ "202": "הקובץ לא תקין.",
+ "203": "הקובץ לא תקין. גודל הקובץ גדול מדי.",
+ "204": "הקובץ המועלה לא תקין",
+ "205": "לא קיימת בשרת תיקיה זמנית להעלאת קבצים.",
+ "206": "ההעלאה בוטלה מסיבות אבטחה. הקובץ מכיל תוכן שדומה ל-HTML.",
+ "207": "שם הקובץ שהועלה שונה ל \"{name}\"",
+ "300": "העברת הקבצים נכשלה.",
+ "301": "העתקת הקבצים נכשלה.",
+ "302": "Deleting file(s) failed.",
+ "500": "דפדפן הקבצים מנוטרל מסיבות אבטחה. יש לפנות למנהל המערכת ולבדוק את קובץ התצורה של CKFinder.",
+ "501": "התמיכה בתמונות מוקטנות מבוטלת."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/hi.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/hi.json
new file mode 100644
index 0000000..4ff15d3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/hi.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "आपकी रिक्वेस्ट क्मप्लित नही कर सकते. (एरर {number})",
+ "errors": {
+ "10": "इन्वेलीड कमांड.",
+ "11": "यह रिसोर्स टाईप उपलब्ध नहीं है.",
+ "12": "यह रिसोर्स टाईप वेलिड नही हैं.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "फाएल या फोल्डर का नाम वेलिड नहीं है.",
+ "103": "ओथोरिसेसंन रिस्त्रिक्सं की वजह से, आपकी रिक्वेस्ट पूरी नही कर सकते.",
+ "104": "सिस्टम परमिशन रिस्त्रिक्सं की वजह से, आपकी रिक्वेस्ट पूरी नही कर सकते..",
+ "105": "फाएल एक्स्त्न्सं गलत है.",
+ "109": "इन्वेलीड रिक्वेस्ट.",
+ "110": "अननोन एरर.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "सेम नाम का फाएल या फोल्डर मोजूद है.",
+ "116": "फोल्डर नही मिला. रिफ्रेस करके वापिस प्रयत्न करे.",
+ "117": "फाएल नही मिला. फाएल लिस्टको रिफ्रेस करके वापिस प्रयत्न करे.",
+ "118": "सोर्स और टारगेट के पाथ एक जैसे है.",
+ "201": "वहि नाम की फाएल मोजोद है. अपलोड फाएल का नया नाम \"{name}\".",
+ "202": "इन्वेलीड फाएल.",
+ "203": "इन्वेलीड फाएल. फाएल बहुत बड़ी है.",
+ "204": "अपलोडकी गयी फाएल करप्ट हो गयी है.",
+ "205": "फाएल अपलोड करनेके लिये, सर्वरपे टेम्पररी फोल्डर उपलब्थ नही है..",
+ "206": "सिक्योरिटी कारण वष, फाएल अपलोड केन्सल किया है. फाएलमें HTML-जैसे डेटा है.",
+ "207": "अपलोडेड फाएल का नया नाम \"{name}\".",
+ "300": "फाएल मूव नहीं कर सके.",
+ "301": "फाएल कोपी नहीं कर सके.",
+ "302": "Deleting file(s) failed.",
+ "500": "सिक्योरिटी कारण वष, फाएल ब्राउजर डिसेबल किया गया है. आपके सिस्टम एडमिनिस्ट्रेटर का सम्पर्क करे और CKFinder कोंफिग्युरेसन फाएल तपासे.",
+ "501": "थम्बनेल सपोर्ट डिसेबल किया है."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/hr.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/hr.json
new file mode 100644
index 0000000..e638cd2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/hr.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Nije moguće završiti zahtjev. (Greška {number})",
+ "errors": {
+ "10": "Nepoznata naredba.",
+ "11": "Nije navedena vrsta u zahtjevu.",
+ "12": "Zatražena vrsta nije važeća.",
+ "13": "Connector konfiguracijski fajl nije valjan.",
+ "14": "Connector plugin nije ispravan: {pluginName}.",
+ "102": "Neispravan naziv datoteke ili direktorija.",
+ "103": "Nije moguće izvršiti zahtjev zbog ograničenja pristupa.",
+ "104": "Nije moguće izvršiti zahtjev zbog ograničenja postavki sustava.",
+ "105": "Nedozvoljena vrsta datoteke.",
+ "109": "Nedozvoljen zahtjev.",
+ "110": "Nepoznata greška.",
+ "111": "Nije moguće izvršiti zahtjev zbog resulting veličine datoteke.",
+ "115": "Datoteka ili direktorij s istim nazivom već postoji.",
+ "116": "Direktorij nije pronađen. Osvježite stranicu i pokušajte ponovo.",
+ "117": "Datoteka nije pronađena. Osvježite listu datoteka i pokušajte ponovo.",
+ "118": "Putanje izvora i odredišta su jednake.",
+ "201": "Datoteka s istim nazivom već postoji. Poslana datoteka je promijenjena u \"{name}\".",
+ "202": "Neispravna datoteka.",
+ "203": "Neispravna datoteka. Veličina datoteke je prevelika.",
+ "204": "Poslana datoteka je neispravna.",
+ "205": "Ne postoji privremeni direktorij za slanje na server.",
+ "206": "Slanje je poništeno zbog sigurnosnih postavki. Naziv datoteke sadrži HTML podatke.",
+ "207": "Poslana datoteka je promjenjena u \"{name}\".",
+ "300": "Premještanje datoteke(a) nije uspjelo.",
+ "301": "Kopiranje datoteke(a) nije uspjelo.",
+ "302": "Brisanje datoteke(a) nije uspjelo.",
+ "500": "Pretraživanje datoteka nije dozvoljeno iz sigurnosnih razloga. Molimo kontaktirajte administratora sustava kako bi provjerili postavke CKFinder konfiguracijske datoteke.",
+ "501": "Podrška za sličice je onemogućena."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/hu.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/hu.json
new file mode 100644
index 0000000..26e5297
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/hu.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "A parancsot nem sikerült végrehajtani. (Hiba: {number})",
+ "errors": {
+ "10": "Érvénytelen parancs.",
+ "11": "A fájl típusa nem lett a kérés során beállítva.",
+ "12": "A kívánt fájl típus érvénytelen.",
+ "13": "A kapcsolati konfiguráció érvénytelen.",
+ "14": "Érvénytelen kapcsolati plugin: {pluginName}.",
+ "102": "Érvénytelen fájl vagy könyvtárnév.",
+ "103": "Hitelesítési problémák miatt nem sikerült a kérést teljesíteni.",
+ "104": "Jogosultsági problémák miatt nem sikerült a kérést teljesíteni.",
+ "105": "Érvénytelen fájl kiterjesztés.",
+ "109": "Érvénytelen kérés.",
+ "110": "Ismeretlen hiba.",
+ "111": "A kérés nem teljesíthető a létrejövő fájl mérete miatt.",
+ "115": "A fálj vagy mappa már létezik ezen a néven.",
+ "116": "Mappa nem található. Kérem frissítsen és próbálja újra.",
+ "117": "Fájl nem található. Kérem frissítsen és próbálja újra.",
+ "118": "A forrás és a cél azonos.",
+ "201": "Ilyen nevű fájl már létezett. A feltöltött fájl a következőre lett átnevezve: \"{name}\".",
+ "202": "Érvénytelen fájl.",
+ "203": "Érvénytelen fájl. A fájl mérete túl nagy.",
+ "204": "A feltöltött fájl hibás.",
+ "205": "A szerveren nem található a feltöltéshez ideiglenes mappa.",
+ "206": "A fájl feltötése biztonsági okból megszakadt. A fájl HTML adatokat tartalmaz.",
+ "207": "El fichero subido ha sido renombrado como \"{name}\".",
+ "300": "A fájl(ok) áthelyezése sikertelen.",
+ "301": "A fájl(ok) másolása sikertelen.",
+ "302": "A fájl(ok) törlése sikertelen.",
+ "500": "A fájl-tallózó biztonsági okok miatt nincs engedélyezve. Kérem vegye fel a kapcsolatot a rendszer üzemeltetőjével és ellenőrizze a CKFinder konfigurációs fájlt.",
+ "501": "A bélyegkép támogatás nincs engedélyezve."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/id.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/id.json
new file mode 100644
index 0000000..6a59dcf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/id.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "It was not possible to complete the request. (Error {number})",
+ "errors": {
+ "10": "Invalid command.",
+ "11": "The resource type was not specified in the request.",
+ "12": "The requested resource type is invalid.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Invalid file or folder name.",
+ "103": "It was not possible to complete the request due to authorization restrictions.",
+ "104": "It was not possible to complete the request due to file system permission restrictions.",
+ "105": "Invalid file extension.",
+ "109": "Invalid request.",
+ "110": "Unknown error.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "A file or folder with the same name already exists.",
+ "116": "Folder not found. Please refresh and try again.",
+ "117": "File not found. Please refresh the files list and try again.",
+ "118": "Source and target paths are equal.",
+ "201": "A file with the same name already exists. The uploaded file was renamed to \"{name}\".",
+ "202": "Invalid file.",
+ "203": "Invalid file. The file size is too big.",
+ "204": "The uploaded file is corrupt.",
+ "205": "No temporary folder is available for upload on the server.",
+ "206": "Upload canceled due to security reasons. The file contains HTML-like data.",
+ "207": "The uploaded file was renamed to \"{name}\".",
+ "300": "Moving file(s) failed.",
+ "301": "Copying file(s) failed.",
+ "302": "Deleting file(s) failed.",
+ "500": "The file browser is disabled for security reasons. Please contact your system administrator and check the CKFinder configuration file.",
+ "501": "Thumbnail support is disabled."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/it.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/it.json
new file mode 100644
index 0000000..8071abd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/it.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Non è stato possibile completare la richiesta (errore {number}).",
+ "errors": {
+ "10": "Comando non valido.",
+ "11": "Il tipo di risorsa non è stato specificato nella richiesta.",
+ "12": "Il tipo di risorsa richiesto non è valido.",
+ "13": "La configurazione del connettore non è valida.",
+ "14": "Estensione del connettore non valida: {pluginName}.",
+ "102": "Il nome del file o della cartella non è valido.",
+ "103": "Non è stato possibile completare la richiesta a causa di restrizioni di autorizzazione.",
+ "104": "Non è stato possibile completare la richiesta a causa di restrizioni nei permessi del file system.",
+ "105": "L'estensione del file non è valida.",
+ "109": "Richiesta non valida.",
+ "110": "Errore sconosciuto.",
+ "111": "Non è stato possibile completare la richiesta a causa della dimensione finale del file.",
+ "115": "Esiste già un file o una cartella con lo stesso nome.",
+ "116": "Cartella non trovata. Aggiornare e riprovare.",
+ "117": "File non trovato. Aggiornare la lista dei file e riprovare.",
+ "118": "Il percorso di origine e quello di destinazione sono uguali.",
+ "201": "Un file con lo stesso nome esiste già. Il file caricato è stato rinominato in \"{name}\".",
+ "202": "File non valido.",
+ "203": "File non valido. Il file è troppo grande.",
+ "204": "Il file caricato è corrotto.",
+ "205": "Non è disponibile alcuna cartella temporanea per il caricamento dei file sul server.",
+ "206": "Caricamento annullato per motivi di sicurezza. Il file contiene dati in formato HTML.",
+ "207": "Il file caricato è stato rinominato in \"{name}\".",
+ "300": "Non è stato possibile spostare i file.",
+ "301": "Non è stato possibile copiare i file.",
+ "302": "Non è stato possibile eliminare i file.",
+ "500": "Il gestore dei file è disabilitato per motivi di sicurezza. Contattare l'amministratore del sistema e verificare la configurazione di CKFinder.",
+ "501": "Il supporto alle miniature non è attivo."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ja.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ja.json
new file mode 100644
index 0000000..cd2ef1f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ja.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "リクエストの処理に失敗しました。 (Error {number})",
+ "errors": {
+ "10": "不正なコマンドです。",
+ "11": "リソースタイプが特定できませんでした。",
+ "12": "要求されたリソースのタイプが正しくありません。",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "ファイル名\/フォルダ名が正しくありません。",
+ "103": "リクエストを完了できませんでした。認証エラーです。",
+ "104": "リクエストを完了できませんでした。ファイルのパーミッションが許可されていません。",
+ "105": "拡張子が正しくありません。",
+ "109": "不正なリクエストです。",
+ "110": "不明なエラーが発生しました。",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "同じ名前のファイル\/フォルダがすでに存在しています。",
+ "116": "フォルダが見つかりませんでした。ページを更新して再度お試し下さい。",
+ "117": "ファイルが見つかりませんでした。ページを更新して再度お試し下さい。",
+ "118": "対象が移動元と同じ場所を指定されています。",
+ "201": "同じ名前のファイルがすでに存在しています。\"{name}\" にリネームして保存されました。",
+ "202": "不正なファイルです。",
+ "203": "ファイルのサイズが大きすぎます。",
+ "204": "アップロードされたファイルは壊れています。",
+ "205": "サーバ内の一時作業フォルダが利用できません。",
+ "206": "セキュリティ上の理由からアップロードが取り消されました。このファイルにはHTMLに似たデータが含まれています。",
+ "207": "ファイルは \"{name}\" にリネームして保存されました。",
+ "300": "ファイルの移動に失敗しました。",
+ "301": "ファイルのコピーに失敗しました。",
+ "302": "Deleting file(s) failed.",
+ "500": "ファイルブラウザはセキュリティ上の制限から無効になっています。システム担当者に連絡をして、CKFinderの設定をご確認下さい。",
+ "501": "サムネイル機能は無効になっています。"
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ko.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ko.json
new file mode 100644
index 0000000..6e7d779
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ko.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "요청을 완료할 수 없었습니다. (오류 {number})",
+ "errors": {
+ "10": "올바르지 않은 명령.",
+ "11": "요청에서 리소스 유형이 특정되지 않았습니다.",
+ "12": "요청한 리소스 유형이 올바르지 않습니다.",
+ "13": "연결 설정 파일이 올바르지 않습니다.",
+ "14": "올바르지 않은 연결 플러그인: {pluginName}.",
+ "102": "올바르지 않은 파일 또는 폴더 이름.",
+ "103": "인증 제한 때문에 작업을 완료할 수 없었습니다.",
+ "104": "파일 시스템 권한 제한 때문에 작업을 완료할 수 없었습니다.",
+ "105": "올바르지 않은 파일 확장자.",
+ "109": "올바르지 않은 요청.",
+ "110": "알 수 없는 오류.",
+ "111": "파일 크기 때문에 요청을 완료할 수 없습니다.",
+ "115": "이미 같은 이름의 파일이나 폴더가 존재합니다.",
+ "116": "폴더를 찾지 못하였습니다. 새로고침을 해 보시고 다시 시도해 주십시오.",
+ "117": "파일을 찾지 못하였습니다. 새로고침을 해 보시고 다시 시도해 주십시오.",
+ "118": "원본 폴더와 대상 폴더가 동일합니다.",
+ "201": "이미 같은 이름의 파일이 존재합니다. 해당 업로드 파일의 이름이 \"{name}\" 로 변경되었습니다.",
+ "202": "올바르지 않은 파일.",
+ "203": "올바르지 않은 파일. 파일 용량이 너무 큽니다.",
+ "204": "업로드한 파일이 손상되어 있습니다.",
+ "205": "서버에 업로드를 위한 임시 폴더가 사용가능하지 않습니다.",
+ "206": "보안상의 이유로 업로드가 중단되었습니다. 해당 파일은 HTML 같은 데이터가 포함되어 있습니다.",
+ "207": "업로드한 파일의 이름이 \"{name}\" 로 변경되었습니다.",
+ "300": "파일 이동 실패.",
+ "301": "파일 복사 실패.",
+ "302": "파일 삭제 실패.",
+ "500": "파일 브라우저가 보안상의 이유로 비활성화 되어있습니다. 당신의 시스템 관리자에게 연락을 해 보시고 CKFinder의 설정 파일을 확인해 주십시오.",
+ "501": "미리 보기 지원이 비활성화 되어 있습니다."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ku.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ku.json
new file mode 100644
index 0000000..54e590e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ku.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "ئەستەم بوو داواکاریەکەت بە تەواوی جێبەجێبکرێت. (هەڵە {number})",
+ "errors": {
+ "10": "فەرمانێکی نادروست.",
+ "11": "جۆری کەرستەکە دەستنیشان نەکراوە لە داواکاریەکە.",
+ "12": "جۆری کەرستەی داواکراو نادرووستە.",
+ "13": "شێوەپێدانی لکێنەری پەرگەکە نادروستە.",
+ "14": "پێوەکاری لکێنەر نادرووستە: {pluginName}.",
+ "102": "ناوێکی نادروستی پەڕگە یان بوخچە.",
+ "103": "ئەستەم بوو لە جێبەجێکردنی داواکاریەکەت دەربارەی ڕێگەپێدانی سنووری.",
+ "104": "ئەستەم بوو لە جێبەجێکردنی داواکاریەکەت دەربارەی ڕێگەپێدانی سنووری سیستەم.",
+ "105": "پێوەکاری پەڕگە نادروستە.",
+ "109": "داوایەکی نادروست.",
+ "110": "هەڵەی نەناسراو.",
+ "111": "ئەستەم بوو لە جێبەجێکردنی داواکاریەکەت دەربارەی ئەنجامی قەبارەی پەڕگەکە.",
+ "115": "ئەم ناوە پێشوتر هەیە لە پەرگە یان لە بوخچە.",
+ "116": "بوخچەکە نەدرۆزراوە. تکایە دووبارە هەوڵبدەوە.",
+ "117": "پەرگە نەدرۆزراوە. تکایە لیستی پەڕگەکان نوێبکەوەو ئینجا دووبارە هەوڵبدەوە.",
+ "118": "سەرچاوەو ئامانجی ڕێڕەوە یەکسانن.",
+ "201": "پەڕگەیەک بەهەمان ناو هەیە. پەڕگەی بارکراو ناوەکەی خۆکارانە گۆڕدرا بۆ \"{name}\".",
+ "202": "پەڕگەی نادروست.",
+ "203": "پەڕگەی نادروست. قەبارەی پەڕگەکە زۆر گەورەیە.",
+ "204": "پەڕگەی بارکراو تێکدرا.",
+ "205": "کاتی بارکردنی بوخچە بەردەست نیە لەسەر ئەم سێرڤەرە.",
+ "206": "بارکردنەکە هەڵوەشیندراوە بۆهۆی پارێزگاری. پەڕگەکە زانیاری HTML لەخۆدەگرێت.",
+ "207": "پەڕگەی بارکراو ناوەکەی گۆڕدرا بۆ \"{name}\".",
+ "300": "گواستنەوەی پەرگە سەرکەوتونەبوو.",
+ "301": "کۆپیکردنی پەڕگەکە سەرکەوتونەبوو.",
+ "302": "سڕینەوەی پەرگەکە سەرکەوتونەبوو.",
+ "500": "گەڕۆککردنی پەڕگەکان ناچالاککراوە. بەهۆیی پارێزی. تکایە پەیوەندی بکە بە بەڕێوەبەری سیستمەکە بۆ پشکنینی شێوەپێدانی پەرگەی CKFinder.",
+ "501": "پشتیوانکردنی وێنۆچکە ناچالاککراوە."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/lt.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/lt.json
new file mode 100644
index 0000000..1595fc1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/lt.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Užklausos įvykdyti nepavyko. (Klaida {number})",
+ "errors": {
+ "10": "Neteisinga komanda.",
+ "11": "Resurso rūšis nenurodyta užklausoje.",
+ "12": "Neteisinga resurso rūšis.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Netinkamas failas arba segtuvo pavadinimas.",
+ "103": "Nepavyko įvykdyti užklausos dėl autorizavimo apribojimų.",
+ "104": "Nepavyko įvykdyti užklausos dėl failų sistemos leidimų apribojimų.",
+ "105": "Netinkamas failo plėtinys.",
+ "109": "Netinkama užklausa.",
+ "110": "Nežinoma klaida.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Failas arba segtuvas su tuo pačiu pavadinimu jau yra.",
+ "116": "Segtuvas nerastas. Pabandykite atnaujinti.",
+ "117": "Failas nerastas. Pabandykite atnaujinti failų sąrašą.",
+ "118": "Šaltinio ir nurodomos vietos nuorodos yra vienodos.",
+ "201": "Failas su tuo pačiu pavadinimu jau tra. Įkeltas failas buvo pervadintas į \"{name}\"",
+ "202": "Netinkamas failas",
+ "203": "Netinkamas failas. Failo apimtis yra per didelė.",
+ "204": "Įkeltas failas yra pažeistas.",
+ "205": "Nėra laikinojo segtuvo skirto failams įkelti.",
+ "206": "Įkėlimas bus nutrauktas dėl saugumo sumetimų. Šiame faile yra HTML duomenys.",
+ "207": "Įkeltas failas buvo pervadintas į \"{name}\"",
+ "300": "Failų perkėlimas nepavyko.",
+ "301": "Failų kopijavimas nepavyko.",
+ "302": "Deleting file(s) failed.",
+ "500": "Failų naršyklė yra išjungta dėl saugumo nustaymų. Prašau susisiekti su sistemų administratoriumi ir patikrinkite CKFinder konfigūracinį failą.",
+ "501": "Miniatiūrų palaikymas išjungtas."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/lv.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/lv.json
new file mode 100644
index 0000000..cbfac03
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/lv.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Nebija iespējams pabeigt pieprasījumu. (Kļūda {number})",
+ "errors": {
+ "10": "Nederīga komanda.",
+ "11": "Resursa veids netika norādīts pieprasījumā.",
+ "12": "Pieprasītais resursa veids nav derīgs.",
+ "13": "Savienojuma konfigurācijas fails nav korekts.",
+ "14": "Nekorekts savienojuma spraudnis: {pluginName}.",
+ "102": "Nederīgs faila vai mapes nosaukums.",
+ "103": "Nav iespējams pabeigt pieprasījumu, autorizācijas aizliegumu dēļ.",
+ "104": "Nav iespējams pabeigt pieprasījumu, failu sistēmas atļauju ierobežojumu dēļ.",
+ "105": "Neatļauts faila paplašinājums.",
+ "109": "Nederīgs pieprasījums.",
+ "110": "Nezināma kļūda.",
+ "111": "Pieprasījums neizdevās, dēļ rezultāta faila izmēra.",
+ "115": "Fails vai mape ar šādu nosaukumu jau pastāv.",
+ "116": "Mape nav atrasta. Lūdzu pārlādējiet šo logu un mēģiniet vēlreiz.",
+ "117": "Fails nav atrasts. Lūdzu pārlādējiet failu sarakstu un mēģiniet vēlreiz.",
+ "118": "Abas mapes ir viena un tā pati.",
+ "201": "Fails ar šādu nosaukumu jau eksistē. Augšupielādētais fails tika pārsaukts par \"{name}\".",
+ "202": "Nederīgs fails.",
+ "203": "Nederīgs fails. Faila izmērs pārsniedz pieļaujamo.",
+ "204": "Augšupielādētais fails ir bojāts.",
+ "205": "Neviena pagaidu mape nav pieejama priekš augšupielādēšanas uz servera.",
+ "206": "Augšupielāde atcelta drošības apsvērumu dēļ. Fails satur HTML veida datus.",
+ "207": "Augšupielādētais fails tika pārsaukts par \"{name}\".",
+ "300": "Pārvietot failu(s) neizdevās.",
+ "301": "Pārkopēt failu(s) neizdevās.",
+ "302": "Dzēst failu(s) neizdevās.",
+ "500": "Failu pārlūks ir atslēgts drošības apsvērumu dēļ. Lūdzu sazinieties ar šīs sistēmas tehnisko administratoru vai pārbaudiet CKFinder konfigurācijas failu.",
+ "501": "Sīkbilžu atbalsts ir atslēgts."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/nb.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/nb.json
new file mode 100644
index 0000000..0536bea
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/nb.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Det var ikke mulig å utføre forespørselen. (Feil {number})",
+ "errors": {
+ "10": "Ugyldig kommando.",
+ "11": "Ressurstypen ble ikke spesifisert i forespørselen.",
+ "12": "Ugyldig ressurstype.",
+ "13": "Konfigurasjonsfilen for forbindelsen er ugyldig.",
+ "14": "Ugyldig programvareutvidelse: {pluginName}.",
+ "102": "Ugyldig fil- eller mappenavn.",
+ "103": "Kunne ikke utføre forespørselen grunnet manglende tilgang.",
+ "104": "Kunne ikke utføre forespørselen grunnet manglende tilgang til filsystemet.",
+ "105": "Ugyldig filtype.",
+ "109": "Ugyldig forespørsel.",
+ "110": "Ukjent feil.",
+ "111": "Det var ikke mulig å fullføre handlingen på grunn av filstørrelsen.",
+ "115": "Det finnes allerede en fil eller mappe med dette navnet.",
+ "116": "Kunne ikke finne mappen. Last vinduet på nytt og prøv igjen.",
+ "117": "Kunne ikke finne filen. Last vinduet på nytt og prøv igjen.",
+ "118": "Kilde- og mål-bane er like.",
+ "201": "Det fantes allerede en fil med dette navnet. Den opplastede filens navn har blitt endret til \"{name}\".",
+ "202": "Ugyldig fil.",
+ "203": "Ugyldig fil. Filen er for stor.",
+ "204": "Den opplastede filen er korrupt.",
+ "205": "Det finnes ingen midlertidig mappe for filopplastinger.",
+ "206": "Opplastingen ble avbrutt av sikkerhetshensyn. Filen inneholder HTML-aktige data.",
+ "207": "Den opplastede filens navn har blitt endret til \"{name}\".",
+ "300": "Klarte ikke å flytte fil(er).",
+ "301": "Klarte ikke å kopiere fil(er).",
+ "302": "Sletting av fil(er) feilet.",
+ "500": "Filvelgeren ikke tilgjengelig av sikkerhetshensyn. Kontakt systemansvarlig og be ham sjekke CKFinders konfigurasjonsfil.",
+ "501": "Funksjon for miniatyrbilder er skrudd av."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/nl.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/nl.json
new file mode 100644
index 0000000..b5a4317
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/nl.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Het was niet mogelijk om deze actie uit te voeren. (Fout {number})",
+ "errors": {
+ "10": "Ongeldig commando.",
+ "11": "Het bestandstype komt niet voor in de aanvraag.",
+ "12": "Het gevraagde brontype is niet geldig.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Ongeldige bestands- of mapnaam.",
+ "103": "Het verzoek kon niet worden voltooid vanwege autorisatie beperkingen.",
+ "104": "Het verzoek kon niet worden voltooid door beperkingen in de rechten op het bestandssysteem.",
+ "105": "Ongeldige bestandsextensie.",
+ "109": "Ongeldige aanvraag.",
+ "110": "Onbekende fout.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Er bestaat al een bestand of map met deze naam.",
+ "116": "Map niet gevonden, vernieuw de mappenlijst of kies een andere map.",
+ "117": "Bestand niet gevonden, vernieuw de mappenlijst of kies een andere map.",
+ "118": "Bron- en doelmap zijn gelijk.",
+ "201": "Er bestaat al een bestand met dezelfde naam. Het geüploade bestand is hernoemd naar: \"{name}\".",
+ "202": "Ongeldige bestand.",
+ "203": "Ongeldige bestand. Het bestand is te groot.",
+ "204": "De geüploade file is kapot.",
+ "205": "Er is geen hoofdmap gevonden.",
+ "206": "Het uploaden van het bestand is om veiligheidsredenen afgebroken. Er is HTML code in het bestand aangetroffen.",
+ "207": "Het geüploade bestand is hernoemd naar: \"{name}\".",
+ "300": "Bestand(en) verplaatsen is mislukt.",
+ "301": "Bestand(en) kopiëren is mislukt.",
+ "302": "Deleting file(s) failed.",
+ "500": "Het uploaden van een bestand is momenteel niet mogelijk. Contacteer de beheerder en controleer het CKFinder configuratiebestand.",
+ "501": "De ondersteuning voor miniatuurafbeeldingen is uitgeschakeld."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/nn.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/nn.json
new file mode 100644
index 0000000..ada2ea5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/nn.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Det var ikke mulig å utføre forespørselen. (Feil {number})",
+ "errors": {
+ "10": "Ugyldig kommando.",
+ "11": "Ressurstypen ble ikke spesifisert i forepørselen.",
+ "12": "Ugyldig ressurstype.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Ugyldig fil- eller mappenavn.",
+ "103": "Kunne ikke utføre forespørselen pga manglende autorisasjon.",
+ "104": "Kunne ikke utføre forespørselen pga manglende tilgang til filsystemet.",
+ "105": "Ugyldig filtype.",
+ "109": "Ugyldig forespørsel.",
+ "110": "Ukjent feil.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Det finnes allerede en fil eller mappe med dette navnet.",
+ "116": "Kunne ikke finne mappen. Oppdater vinduet og prøv igjen.",
+ "117": "Kunne ikke finne filen. Oppdater vinduet og prøv igjen.",
+ "118": "Kilde- og mål-bane er like.",
+ "201": "Det fantes allerede en fil med dette navnet. Den opplastede filens navn har blitt endret til \"{name}\".",
+ "202": "Ugyldig fil.",
+ "203": "Ugyldig fil. Filen er for stor.",
+ "204": "Den opplastede filen er korrupt.",
+ "205": "Det finnes ingen midlertidig mappe for filopplastinger.",
+ "206": "Opplastingen ble avbrutt av sikkerhetshensyn. Filen inneholder HTML-aktig data.",
+ "207": "Den opplastede filens navn har blitt endret til \"{name}\".",
+ "300": "Klarte ikke å flytte fil(er).",
+ "301": "Klarte ikke å kopiere fil(er).",
+ "302": "Deleting file(s) failed.",
+ "500": "Filvelgeren ikke tilgjengelig av sikkerhetshensyn. Kontakt systemansvarlig og be han sjekke CKFinder's konfigurasjonsfil.",
+ "501": "Funksjon for minityrbilder er skrudd av."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/pl.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/pl.json
new file mode 100644
index 0000000..49678e5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/pl.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Wykonanie operacji zakończyło się niepowodzeniem. (Błąd {number})",
+ "errors": {
+ "10": "Nieprawidłowe polecenie (command).",
+ "11": "Brak wymaganego parametru: typ danych (resource type).",
+ "12": "Nieprawidłowy typ danych (resource type).",
+ "13": "Plik konfiguracyjny connectora jest nieprawidłowy.",
+ "14": "Nieprawidłowy plugin: {pluginName}.",
+ "102": "Nieprawidłowa nazwa pliku lub folderu.",
+ "103": "Wykonanie operacji nie jest możliwe: brak uprawnień.",
+ "104": "Wykonanie operacji nie powiodło się z powodu niewystarczających uprawnień do systemu plików.",
+ "105": "Nieprawidłowe rozszerzenie.",
+ "109": "Nieprawidłowe żądanie.",
+ "110": "Niezidentyfikowany błąd.",
+ "111": "Wykonanie operacji nie powiodło się z powodu zbyt dużego rozmiaru pliku wynikowego.",
+ "115": "Plik lub folder o podanej nazwie już istnieje.",
+ "116": "Nie znaleziono folderu. Odśwież panel i spróbuj ponownie.",
+ "117": "Nie znaleziono pliku. Odśwież listę plików i spróbuj ponownie.",
+ "118": "Ścieżki źródłowa i docelowa są jednakowe.",
+ "201": "Plik o podanej nazwie już istnieje. Nazwa przesłanego pliku została zmieniona na \"{name}\".",
+ "202": "Nieprawidłowy plik.",
+ "203": "Nieprawidłowy plik. Plik przekracza dozwolony rozmiar.",
+ "204": "Przesłany plik jest uszkodzony.",
+ "205": "Brak folderu tymczasowego na serwerze do przesyłania plików.",
+ "206": "Przesyłanie pliku zakończyło się niepowodzeniem z powodów bezpieczeństwa. Plik zawiera dane przypominające HTML.",
+ "207": "Nazwa przesłanego pliku została zmieniona na \"{name}\".",
+ "300": "Przenoszenie nie powiodło się.",
+ "301": "Kopiowanie nie powiodło się.",
+ "302": "Usuwanie nie powiodło się.",
+ "500": "Menedżer plików jest wyłączony z powodów bezpieczeństwa. Skontaktuj się z administratorem oraz sprawdź plik konfiguracyjny CKFindera.",
+ "501": "Tworzenie miniatur jest wyłączone."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/pt-br.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/pt-br.json
new file mode 100644
index 0000000..59760cf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/pt-br.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Não foi possível completer o seu pedido. (Erro {number})",
+ "errors": {
+ "10": "Comando inválido.",
+ "11": "O tipo de recurso não foi especificado na solicitação.",
+ "12": "O tipo de recurso solicitado não é válido.",
+ "13": "O arquivo de configuração do conector não é válido.",
+ "14": "Plugin para o conector inválido: {pluginName}.",
+ "102": "Nome do arquivo ou pasta inválido.",
+ "103": "Não foi possível completar a solicitação por restrições de acesso.",
+ "104": "Não foi possível completar a solicitação por restrições de acesso do sistema de arquivos.",
+ "105": "Extensão de arquivo inválida.",
+ "109": "Solicitação inválida.",
+ "110": "Erro desconhecido.",
+ "111": "Impossível completar o pedido devido ao tamanho final do arquivo.",
+ "115": "Um arquivo ou pasta já existe com esse nome.",
+ "116": "Pasta não encontrada. Atualize e tente novamente.",
+ "117": "Arquivo não encontrado. Atualize a lista de arquivos e tente novamente.",
+ "118": "A origem e o destino são os mesmos.",
+ "201": "Um arquivo com o mesmo nome já está disponível. O arquivo enviado foi renomeado para \"{name}\".",
+ "202": "Arquivo inválido.",
+ "203": "Arquivo inválido. O tamanho é muito grande.",
+ "204": "O arquivo enviado está corrompido.",
+ "205": "Nenhuma pasta temporária para envio está disponível no servidor.",
+ "206": "Transmissão cancelada por razões de segurança. O arquivo contém dados HTML.",
+ "207": "O arquivo enviado foi renomeado para \"{name}\".",
+ "300": "Não foi possível mover o(s) arquivo(s).",
+ "301": "Não foi possível copiar o(s) arquivo(s).",
+ "302": "Não for possível apagar o(s) arquivo(s).",
+ "500": "A navegação de arquivos está desativada por razões de segurança. Contacte o administrador do sistema para controlar as configurações do CKFinder.",
+ "501": "O suporte a miniaturas está desabilitado."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ro.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ro.json
new file mode 100644
index 0000000..e37a1e6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ro.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Nu a fost posibilă finalizarea cererii. (Eroare {number})",
+ "errors": {
+ "10": "Comandă invalidă.",
+ "11": "Tipul de resursă nu a fost specificat în cerere.",
+ "12": "Tipul de resursă cerut nu este valid.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Nume fișier sau nume dosar invalid.",
+ "103": "Nu a fost posibiliă finalizarea cererii din cauza restricțiilor de autorizare.",
+ "104": "Nu a fost posibiliă finalizarea cererii din cauza restricțiilor de permisiune la sistemul de fișiere.",
+ "105": "Extensie fișier invalidă.",
+ "109": "Cerere invalidă.",
+ "110": "Eroare necunoscută.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Există deja un fișier sau un dosar cu același nume.",
+ "116": "Dosar negăsit. Te rog împrospătează și încearcă din nou.",
+ "117": "Fișier negăsit. Te rog împrospătează lista de fișiere și încearcă din nou.",
+ "118": "Calea sursei și a țintei sunt egale.",
+ "201": "Un fișier cu același nume este deja disponibil. Fișierul încărcat a fost redenumit cu \"{name}\".",
+ "202": "Fișier invalid.",
+ "203": "Fișier invalid. Mărimea fișierului este prea mare.",
+ "204": "Fișierul încărcat este corupt.",
+ "205": "Niciun dosar temporar nu este disponibil pentru încărcarea pe server.",
+ "206": "Încărcare anulată din motive de securitate. Fișierul conține date asemănătoare cu HTML.",
+ "207": "Fișierul încărcat a fost redenumit cu \"{name}\".",
+ "300": "Mutare fișier(e) eșuată.",
+ "301": "Copiere fișier(e) eșuată.",
+ "302": "Deleting file(s) failed.",
+ "500": "Browser-ul de fișiere este dezactivat din motive de securitate. Te rog contactează administratorul de sistem și verifică configurarea de fișiere CKFinder.",
+ "501": "Funcționalitatea de creat thumbnails este dezactivată."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ru.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ru.json
new file mode 100644
index 0000000..7315b51
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/ru.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Невозможно завершить запрос. (Ошибка {number})",
+ "errors": {
+ "10": "Неверная команда.",
+ "11": "Тип ресурса не указан в запросе.",
+ "12": "Неверный запрошенный тип ресурса.",
+ "13": "Ошибка в конфигурационном файле.",
+ "14": "Ошибка в плагине: {pluginName}.",
+ "102": "Неверное имя файла или папки.",
+ "103": "Невозможно завершить запрос из-за ограничений авторизации.",
+ "104": "Невозможно завершить запрос из-за ограничения разрешений файловой системы.",
+ "105": "Неверное расширение файла.",
+ "109": "Неверный запрос.",
+ "110": "Неизвестная ошибка.",
+ "111": "Невозможно завершить запрос из-за размера конечного файла.",
+ "115": "Файл или папка с таким именем уже существует.",
+ "116": "Папка не найдена. Пожалуйста, обновите вид папок и попробуйте еще раз.",
+ "117": "Файл не найден. Пожалуйста, обновите список файлов и попробуйте еще раз.",
+ "118": "Исходное расположение файла совпадает с указанным.",
+ "201": "Файл с таким именем уже существует. Загруженный файл был переименован в \"{name}\".",
+ "202": "Неверный файл.",
+ "203": "Неверный файл. Размер файла слишком большой.",
+ "204": "Загруженный файл поврежден.",
+ "205": "Недоступна временная папка для загрузки файлов на сервер.",
+ "206": "Загрузка отменена из-за соображений безопасности. Файл содержит похожие на HTML данные.",
+ "207": "Загруженный файл был переименован в \"{name}\".",
+ "300": "Произошла ошибка при перемещении файла(ов).",
+ "301": "Произошла ошибка при копировании файла(ов).",
+ "302": "Произошла ошибка при удалении файла(ов).",
+ "500": "Браузер файлов отключен из-за соображений безопасности. Пожалуйста, сообщите вашему системному администратру и проверьте конфигурационный файл CKFinder.",
+ "501": "Поддержка миниатюр отключена."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sk.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sk.json
new file mode 100644
index 0000000..3225ccc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sk.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Server nemohol dokončiť spracovanie požiadavky. (Chyba {number})",
+ "errors": {
+ "10": "Neplatný príkaz.",
+ "11": "V požiadavke nebol špecifikovaný typ súboru.",
+ "12": "Nepodporovaný typ súboru.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Neplatný názov súboru alebo adresára.",
+ "103": "Nebolo možné dokončiť spracovanie požiadavky kvôli nepostačujúcej úrovni oprávnení.",
+ "104": "Nebolo možné dokončiť spracovanie požiadavky kvôli obmedzeniam v prístupových právach k súborom.",
+ "105": "Neplatná prípona súboru.",
+ "109": "Neplatná požiadavka.",
+ "110": "Neidentifikovaná chyba.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Zadaný súbor alebo adresár už existuje.",
+ "116": "Adresár nebol nájdený. Aktualizujte obsah adresára (Znovunačítať) a skúste znovu.",
+ "117": "Súbor nebol nájdený. Aktualizujte obsah adresára (Znovunačítať) a skúste znovu.",
+ "118": "Zdrojové a cieľové cesty sú rovnaké.",
+ "201": "Súbor so zadaným názvom už existuje. Prekopírovaný súbor bol premenovaný na \"{name}\".",
+ "202": "Neplatný súbor.",
+ "203": "Neplatný súbor - súbor presahuje maximálnu povolenú veľkosť.",
+ "204": "Kopírovaný súbor je poškodený.",
+ "205": "Server nemá špecifikovaný dočasný adresár pre kopírované súbory.",
+ "206": "Kopírovanie prerušené kvôli nedostatočnému zabezpečeniu. Súbor obsahuje HTML data.",
+ "207": "Prekopírovaný súbor bol premenovaný na \"{name}\".",
+ "300": "Presunutie súborov zlyhalo.",
+ "301": "Kopírovanie súborov zlyhalo.",
+ "302": "Deleting file(s) failed.",
+ "500": "Prehliadanie súborov je zakázané kvôli bezpečnosti. Kontaktujte prosím administrátora a overte nastavenia v konfiguračnom súbore pre CKFinder.",
+ "501": "Momentálne nie je zapnutá podpora pre generáciu miniobrázkov."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sl.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sl.json
new file mode 100644
index 0000000..68be5fb
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sl.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Prišlo je do napake. (Napaka {number})",
+ "errors": {
+ "10": "Napačen ukaz.",
+ "11": "V poizvedbi ni bil jasen tip (resource type).",
+ "12": "Tip datoteke ni primeren.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Napačno ime mape ali datoteke.",
+ "103": "Vašega ukaza se ne da izvesti zaradi težav z avtorizacijo.",
+ "104": "Vašega ukaza se ne da izvesti zaradi težav z nastavitvami pravic v datotečnem sistemu.",
+ "105": "Napačna končnica datoteke.",
+ "109": "Napačna zahteva.",
+ "110": "Neznana napaka.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Datoteka ali mapa s tem imenom že obstaja.",
+ "116": "Mapa ni najdena. Prosimo osvežite okno in poskusite znova.",
+ "117": "Datoteka ni najdena. Prosimo osvežite seznam datotek in poskusite znova.",
+ "118": "Začetna in končna pot je ista.",
+ "201": "Datoteka z istim imenom že obstaja. Naložena datoteka je bila preimenovana v \"{name}\".",
+ "202": "Neprimerna datoteka.",
+ "203": "Datoteka je prevelika in zasede preveč prostora.",
+ "204": "Naložena datoteka je okvarjena.",
+ "205": "Na strežniku ni na voljo začasna mapa za prenos datotek.",
+ "206": "Nalaganje je bilo prekinjeno zaradi varnostnih razlogov. Datoteka vsebuje podatke, ki spominjajo na HTML kodo.",
+ "207": "Naložena datoteka je bila preimenovana v \"{name}\".",
+ "300": "Premikanje datotek(e) ni uspelo.",
+ "301": "Kopiranje datotek(e) ni uspelo.",
+ "302": "Deleting file(s) failed.",
+ "500": "Brskalnik je onemogočen zaradi varnostnih razlogov. Prosimo kontaktirajte upravljalca spletnih strani.",
+ "501": "Ni podpore za majhne sličice (predogled)."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sr.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sr.json
new file mode 100644
index 0000000..1aab778
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sr.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Није могуће изавршити захтев. (Грешка {number})",
+ "errors": {
+ "10": "Непозната наредба.",
+ "11": "Није наведена врста у захтеву.",
+ "12": "Затражена врста није важећа.",
+ "13": "Неисправна датотека за конфигурацију конектора.",
+ "14": "Неисправан конектор за прикључење: {pluginName}.",
+ "102": "Неисправан назив датотеке или фасцикле.",
+ "103": "Није могуће извршити захтев због ограничења приступа.",
+ "104": "Није могуће извршити захтев због ограничења поставке система.",
+ "105": "Недозвољена врста датотеке.",
+ "109": "Недозвољен захтев.",
+ "110": "Непозната грешка.",
+ "111": "Није могуће извршити захтев због резултујуће величине датотеке.",
+ "115": "Датотека или фасцикла са истим називом већ постоји.",
+ "116": "Фасцикла није пронађена. Освежите страницу и покушајте поново.",
+ "117": "Датотека није пронађена. Освежите листу датотека и покушајте поново.",
+ "118": "Путања извора и одредишта су исте.",
+ "201": "Датотека са истим називом већ постоји. Учитана датотека је промењена у \"{name}\".",
+ "202": "Неисправна датотека.",
+ "203": "Неисправна датотека. Величина датотеке је превелика.",
+ "204": "Учитана датотека је неисправна.",
+ "205": "Не постоји привремена фасцикла за учитавање на серверe.",
+ "206": "Слање је поништено због сигурносних поставки. Назив датотеке садржи HTML податке.",
+ "207": "Учитана датотека је промењена у \"{name}\".",
+ "300": "Премештање датотеке(а) није успело.",
+ "301": "Копирање датотеке(а) није успело.",
+ "302": "Брисање датотеке(а) није успело.",
+ "500": "Претраживање датотека није дозвољено из сигурносних разлога. Молимо контактирајте администратора система како би проверили поставке CKFinder конфигурационе датотеке.",
+ "501": "Подршка за приказ није омогућена."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sv.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sv.json
new file mode 100644
index 0000000..6bbed2a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/sv.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Begäran kunde inte utföras eftersom ett fel uppstod. (Fel {number})",
+ "errors": {
+ "10": "Ogiltig begäran.",
+ "11": "Resursens typ var inte specificerad i förfrågan.",
+ "12": "Den efterfrågade resurstypen är inte giltig.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Ogiltigt fil- eller mappnamn.",
+ "103": "Begäran kunde inte utföras p.g.a. restriktioner av rättigheterna.",
+ "104": "Begäran kunde inte utföras p.g.a. restriktioner av rättigheter i filsystemet.",
+ "105": "Ogiltig filändelse.",
+ "109": "Ogiltig begäran.",
+ "110": "Okänt fel.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "En fil eller mapp med aktuellt namn finns redan.",
+ "116": "Mappen kunde inte hittas. Var god uppdatera sidan och försök igen.",
+ "117": "Filen kunde inte hittas. Var god uppdatera sidan och försök igen.",
+ "118": "Sökväg till källa och mål är identisk.",
+ "201": "En fil med aktuellt namn fanns redan. Den uppladdade filen har döpts om till \"{name}\".",
+ "202": "Ogiltig fil.",
+ "203": "Ogiltig fil. Filen var för stor.",
+ "204": "Den uppladdade filen var korrupt.",
+ "205": "En tillfällig mapp för uppladdning är inte tillgänglig på servern.",
+ "206": "Uppladdningen stoppades av säkerhetsskäl. Filen innehåller HTML-liknande data.",
+ "207": "Den uppladdade filen har döpts om till \"{name}\".",
+ "300": "Flytt av fil(er) misslyckades.",
+ "301": "Kopiering av fil(er) misslyckades.",
+ "302": "Radering av fil(er) misslyckades.",
+ "500": "Filhanteraren har stoppats av säkerhetsskäl. Var god kontakta administratören för att kontrollera konfigurationsfilen för CKFinder.",
+ "501": "Stöd för tumnaglar har stängts av."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/tr.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/tr.json
new file mode 100644
index 0000000..c135d98
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/tr.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "İsteğinizi yerine getirmek mümkün değil. (Hata {number})",
+ "errors": {
+ "10": "Geçersiz komut.",
+ "11": "İstekte kaynak türü belirtilmemiş.",
+ "12": "Talep edilen kaynak türü geçersiz.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Geçersiz dosya ya da klasör adı.",
+ "103": "Kimlik doğrulama kısıtlamaları nedeni ile talebinizi yerine getiremiyoruz.",
+ "104": "Dosya sistemi kısıtlamaları nedeni ile talebinizi yerine getiremiyoruz.",
+ "105": "Geçersiz dosya uzantısı.",
+ "109": "Geçersiz istek.",
+ "110": "Bilinmeyen hata.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Aynı isimde bir dosya ya da klasör zaten var.",
+ "116": "Klasör bulunamadı. Lütfen yenileyin ve tekrar deneyin.",
+ "117": "Dosya bulunamadı. Lütfen dosya listesini yenileyin ve tekrar deneyin.",
+ "118": "Kaynak ve hedef yol aynı!",
+ "201": "Aynı ada sahip bir dosya zaten var. Yüklenen dosyanın adı \"{name}\" olarak değiştirildi.",
+ "202": "Geçersiz dosya",
+ "203": "Geçersiz dosya. Dosya boyutu çok büyük.",
+ "204": "Yüklenen dosya bozuk.",
+ "205": "Dosyaları yüklemek için gerekli geçici klasör sunucuda bulunamadı.",
+ "206": "Güvenlik nedeni ile yükleme iptal edildi. Dosya HTML benzeri veri içeriyor.",
+ "207": "Yüklenen dosyanın adı \"{name}\" olarak değiştirildi.",
+ "300": "Dosya taşıma işlemi başarısız.",
+ "301": "Dosya kopyalama işlemi başarısız.",
+ "302": "Deleting file(s) failed.",
+ "500": "Güvenlik nedeni ile dosya gezgini devredışı bırakıldı. Lütfen sistem yöneticiniz ile irtibata geçin ve CKFinder yapılandırma dosyasını kontrol edin.",
+ "501": "Önizleme desteği devredışı."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/vi.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/vi.json
new file mode 100644
index 0000000..ef3b9d4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/vi.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "Không thể hoàn tất yêu cầu. (Lỗi {number})",
+ "errors": {
+ "10": "Lệnh không hợp lệ.",
+ "11": "Kiểu tài nguyên không được chỉ định trong yêu cầu.",
+ "12": "Kiểu tài nguyên yêu cầu không hợp lệ.",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "Tên tập tin hay thư mục không hợp lệ.",
+ "103": "Không thể hoàn tất yêu cầu vì giới hạn quyền.",
+ "104": "Không thể hoàn tất yêu cầu vì giới hạn quyền của hệ thống tập tin.",
+ "105": "Phần mở rộng tập tin không hợp lệ.",
+ "109": "Yêu cầu không hợp lệ.",
+ "110": "Lỗi không xác định.",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "Tập tin hoặc thư mục cùng tên đã tồn tại.",
+ "116": "Không thấy thư mục. Hãy làm tươi và thử lại.",
+ "117": "Không thấy tập tin. Hãy làm tươi và thử lại.",
+ "118": "Đường dẫn nguồn và đích giống nhau.",
+ "201": "Tập tin cùng tên đã tồn tại. Tập tin vừa tải lên được đổi tên thành \"{name}\".",
+ "202": "Tập tin không hợp lệ.",
+ "203": "Tập tin không hợp lệ. Dung lượng quá lớn.",
+ "204": "Tập tin tải lên bị hỏng.",
+ "205": "Không có thư mục tạm để tải tập tin.",
+ "206": "Huỷ tải lên vì lí do bảo mật. Tập tin chứa dữ liệu giống HTML.",
+ "207": "Tập tin được đổi tên thành \"{name}\".",
+ "300": "Di chuyển tập tin thất bại.",
+ "301": "Chép tập tin thất bại.",
+ "302": "Deleting file(s) failed.",
+ "500": "Trình duyệt tập tin bị vô hiệu vì lí do bảo mật. Xin liên hệ quản trị hệ thống và kiểm tra tập tin cấu hình CKFinder.",
+ "501": "Chức năng hỗ trợ ảnh mẫu bị vô hiệu."
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/zh-cn.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/zh-cn.json
new file mode 100644
index 0000000..a395013
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/zh-cn.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "请求的操作未能完成。(错误 {number})",
+ "errors": {
+ "10": "无效的指令。",
+ "11": "文件类型不在许可范围之内。",
+ "12": "文件类型无效。",
+ "13": "无效的连接器设置文件。",
+ "14": "无效的连接器插件: {pluginName}。",
+ "102": "无效的文件名或文件夹名称。",
+ "103": "由于作者限制,该请求不能完成。",
+ "104": "由于文件系统的限制,该请求不能完成。",
+ "105": "无效的扩展名。",
+ "109": "无效请求。",
+ "110": "未知错误。",
+ "111": "由于文件大小原因,此请求无法完成。",
+ "115": "存在重名的文件或文件夹。",
+ "116": "文件夹不存在,请刷新后再试。",
+ "117": "文件不存在,请刷新列表后再试。",
+ "118": "目标位置与当前位置相同。",
+ "201": "文件与现有的重名,新上传的文件改名为 \"{name}\"。",
+ "202": "无效的文件。",
+ "203": "无效的文件,文件尺寸太大。",
+ "204": "上传文件已损失。",
+ "205": "服务器中的上传临时文件夹无效。",
+ "206": "因为安全原因,上传中断。上传文件包含不能 HTML 类型数据。",
+ "207": "新上传的文件改名为 \"{name}\"。",
+ "300": "移动文件失败。",
+ "301": "复制文件失败。",
+ "302": "删除文件失败。",
+ "500": "因为安全原因,文件不可浏览。请联系系统管理员并检查 CKFinder 配置文件。",
+ "501": "不支持缩略图方式。"
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/zh-tw.json b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/zh-tw.json
new file mode 100644
index 0000000..a29be83
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/locales/zh-tw.json
@@ -0,0 +1,33 @@
+{
+ "errorUnknown": "無法連接到伺服器 ! (錯誤代碼 {number})",
+ "errors": {
+ "10": "不合法的指令.",
+ "11": "連接過程中 , 未指定資源形態 !",
+ "12": "連接過程中出現不合法的資源形態 !",
+ "13": "The connector configuration file is invalid.",
+ "14": "Invalid connector plugin: {pluginName}.",
+ "102": "不合法的檔案或目錄名稱 !",
+ "103": "無法連接:可能是使用者權限設定錯誤 !",
+ "104": "無法連接:可能是伺服器檔案權限設定錯誤 !",
+ "105": "無法上傳:不合法的副檔名 !",
+ "109": "不合法的請求 !",
+ "110": "不明錯誤 !",
+ "111": "It was not possible to complete the request due to resulting file size.",
+ "115": "檔案或目錄名稱重複 !",
+ "116": "找不到目錄 ! 請先重新整理 , 然後再試一次 !",
+ "117": "找不到檔案 ! 請先重新整理 , 然後再試一次 !",
+ "118": "Source and target paths are equal.",
+ "201": "伺服器上已有相同的檔案名稱 ! 您上傳的檔案名稱將會自動更改為 \"{name}\".",
+ "202": "不合法的檔案 !",
+ "203": "不合法的檔案 ! 檔案大小超過預設值 !",
+ "204": "您上傳的檔案已經損毀 !",
+ "205": "伺服器上沒有預設的暫存目錄 !",
+ "206": "檔案上傳程序因為安全因素已被系統自動取消 ! 可能是上傳的檔案內容包含 HTML 碼 !",
+ "207": "您上傳的檔案名稱將會自動更改為 \"{name}\".",
+ "300": "Moving file(s) failed.",
+ "301": "Copying file(s) failed.",
+ "302": "Deleting file(s) failed.",
+ "500": "因為安全因素 , 檔案瀏覽器已被停用 ! 請聯絡您的系統管理者並檢查 CKFinder 的設定檔 config.php !",
+ "501": "縮圖預覽功能已被停用 !"
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/composer/ClassLoader.php b/lib/ckfinder/core/connector/php/vendor/composer/ClassLoader.php
new file mode 100644
index 0000000..ff6ecfb
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/composer/ClassLoader.php
@@ -0,0 +1,413 @@
+
+ * Jordi Boggiano
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier
+ * @author Jordi Boggiano
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+
+ private $classMapAuthoritative = false;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
+ if ('\\' == $class[0]) {
+ $class = substr($class, 1);
+ }
+
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative) {
+ return false;
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if ($file === null && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if ($file === null) {
+ // Remember that this class does not exist.
+ return $this->classMap[$class] = false;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/composer/LICENSE b/lib/ckfinder/core/connector/php/vendor/composer/LICENSE
new file mode 100644
index 0000000..1a28124
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) 2016 Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/lib/ckfinder/core/connector/php/vendor/composer/autoload_classmap.php b/lib/ckfinder/core/connector/php/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000..2d3805e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/composer/autoload_classmap.php
@@ -0,0 +1,110 @@
+ $vendorDir . '/pear-pear.php.net/Archive_Tar/Archive/Tar.php',
+ 'Console_Getopt' => $vendorDir . '/pear-pear.php.net/Console_Getopt/Console/Getopt.php',
+ 'HTTP_Request2' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2.php',
+ 'HTTP_Request2_Adapter' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Adapter.php',
+ 'HTTP_Request2_Adapter_Curl' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Adapter/Curl.php',
+ 'HTTP_Request2_Adapter_Mock' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Adapter/Mock.php',
+ 'HTTP_Request2_Adapter_Socket' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Adapter/Socket.php',
+ 'HTTP_Request2_ConnectionException' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_CookieJar' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/CookieJar.php',
+ 'HTTP_Request2_Exception' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_LogicException' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_MessageException' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_MultipartBody' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/MultipartBody.php',
+ 'HTTP_Request2_NotImplementedException' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_Observer_Log' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Observer/Log.php',
+ 'HTTP_Request2_Observer_UncompressingDownload' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Observer/UncompressingDownload.php',
+ 'HTTP_Request2_Response' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Response.php',
+ 'HTTP_Request2_SOCKS5' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/SOCKS5.php',
+ 'HTTP_Request2_SocketWrapper' => $vendorDir . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/SocketWrapper.php',
+ 'Mail_mime' => $vendorDir . '/pear-pear.php.net/Mail_Mime/Mail/mime.php',
+ 'Mail_mimeDecode' => $vendorDir . '/pear-pear.php.net/Mail_mimeDecode/Mail/mimeDecode.php',
+ 'Mail_mimePart' => $vendorDir . '/pear-pear.php.net/Mail_Mime/Mail/mimePart.php',
+ 'Net_URL2' => $vendorDir . '/pear-pear.php.net/Net_URL2/Net/URL2.php',
+ 'OS_Guess' => $vendorDir . '/pear-pear.php.net/PEAR/OS/Guess.php',
+ 'PEAR' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR.php',
+ 'PEAR_Autoloader' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Autoloader.php',
+ 'PEAR_Builder' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Builder.php',
+ 'PEAR_ChannelFile' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/ChannelFile.php',
+ 'PEAR_ChannelFile_Parser' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/ChannelFile/Parser.php',
+ 'PEAR_Command' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command.php',
+ 'PEAR_Command_Auth' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Auth.php',
+ 'PEAR_Command_Build' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Build.php',
+ 'PEAR_Command_Channels' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Channels.php',
+ 'PEAR_Command_Common' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Common.php',
+ 'PEAR_Command_Config' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Config.php',
+ 'PEAR_Command_Install' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Install.php',
+ 'PEAR_Command_Mirror' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Mirror.php',
+ 'PEAR_Command_Package' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Package.php',
+ 'PEAR_Command_Pickle' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Pickle.php',
+ 'PEAR_Command_Registry' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Registry.php',
+ 'PEAR_Command_Remote' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Remote.php',
+ 'PEAR_Command_Test' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Test.php',
+ 'PEAR_Common' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Common.php',
+ 'PEAR_Config' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Config.php',
+ 'PEAR_Dependency2' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Dependency2.php',
+ 'PEAR_DependencyDB' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/DependencyDB.php',
+ 'PEAR_Downloader' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Downloader.php',
+ 'PEAR_Downloader_Package' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Downloader/Package.php',
+ 'PEAR_Error' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR.php',
+ 'PEAR_ErrorStack' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/ErrorStack.php',
+ 'PEAR_Exception' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Exception.php',
+ 'PEAR_Frontend' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Frontend.php',
+ 'PEAR_Frontend_CLI' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Frontend/CLI.php',
+ 'PEAR_Installer' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer.php',
+ 'PEAR_Installer_Role' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role.php',
+ 'PEAR_Installer_Role_Cfg' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Cfg.php',
+ 'PEAR_Installer_Role_Common' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Common.php',
+ 'PEAR_Installer_Role_Data' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Data.php',
+ 'PEAR_Installer_Role_Doc' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Doc.php',
+ 'PEAR_Installer_Role_Ext' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Ext.php',
+ 'PEAR_Installer_Role_Man' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Man.php',
+ 'PEAR_Installer_Role_Php' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Php.php',
+ 'PEAR_Installer_Role_Script' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Script.php',
+ 'PEAR_Installer_Role_Src' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Src.php',
+ 'PEAR_Installer_Role_Test' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Test.php',
+ 'PEAR_Installer_Role_Www' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Www.php',
+ 'PEAR_PackageFile' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile.php',
+ 'PEAR_PackageFile_Generator_v1' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v1.php',
+ 'PEAR_PackageFile_Generator_v2' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v2.php',
+ 'PEAR_PackageFile_Parser_v1' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Parser/v1.php',
+ 'PEAR_PackageFile_Parser_v2' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Parser/v2.php',
+ 'PEAR_PackageFile_v1' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v1.php',
+ 'PEAR_PackageFile_v2' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2.php',
+ 'PEAR_PackageFile_v2_Validator' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/Validator.php',
+ 'PEAR_PackageFile_v2_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/rw.php',
+ 'PEAR_Packager' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Packager.php',
+ 'PEAR_REST' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/REST.php',
+ 'PEAR_REST_10' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/REST/10.php',
+ 'PEAR_REST_11' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/REST/11.php',
+ 'PEAR_REST_13' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/REST/13.php',
+ 'PEAR_Registry' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Registry.php',
+ 'PEAR_RunTest' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/RunTest.php',
+ 'PEAR_Task_Common' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Common.php',
+ 'PEAR_Task_Postinstallscript' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript.php',
+ 'PEAR_Task_Postinstallscript_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript/rw.php',
+ 'PEAR_Task_Replace' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Replace.php',
+ 'PEAR_Task_Replace_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Replace/rw.php',
+ 'PEAR_Task_Unixeol' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Unixeol.php',
+ 'PEAR_Task_Unixeol_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Unixeol/rw.php',
+ 'PEAR_Task_Windowseol' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Windowseol.php',
+ 'PEAR_Task_Windowseol_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Windowseol/rw.php',
+ 'PEAR_Validate' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Validate.php',
+ 'PEAR_Validator_PECL' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Validator/PECL.php',
+ 'PEAR_XMLParser' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/XMLParser.php',
+ 'SessionHandlerInterface' => $vendorDir . '/symfony/http-foundation/Resources/stubs/SessionHandlerInterface.php',
+ 'Structures_Graph' => $vendorDir . '/pear-pear.php.net/Structures_Graph/Structures/Graph.php',
+ 'Structures_Graph_Manipulator_AcyclicTest' => $vendorDir . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Manipulator/AcyclicTest.php',
+ 'Structures_Graph_Manipulator_TopologicalSorter' => $vendorDir . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Manipulator/TopologicalSorter.php',
+ 'Structures_Graph_Node' => $vendorDir . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Node.php',
+ 'System' => $vendorDir . '/pear-pear.php.net/PEAR/System.php',
+ 'XML_Util' => $vendorDir . '/pear-pear.php.net/XML_Util/XML/Util.php',
+);
diff --git a/lib/ckfinder/core/connector/php/vendor/composer/autoload_files.php b/lib/ckfinder/core/connector/php/vendor/composer/autoload_files.php
new file mode 100644
index 0000000..315ab83
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/composer/autoload_files.php
@@ -0,0 +1,10 @@
+ $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
+);
diff --git a/lib/ckfinder/core/connector/php/vendor/composer/autoload_namespaces.php b/lib/ckfinder/core/connector/php/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000..d7cc83c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,16 @@
+ array($vendorDir . '/microsoft/windowsazure'),
+ 'Pimple' => array($vendorDir . '/pimple/pimple/src'),
+ 'Guzzle\\Tests' => array($vendorDir . '/guzzle/guzzle/tests'),
+ 'Guzzle' => array($vendorDir . '/guzzle/guzzle/src'),
+ 'Dropbox' => array($vendorDir . '/dropbox/dropbox-sdk/lib'),
+ 'CKSource' => array($vendorDir . '/cksource/ckfinder/src'),
+ 'Aws' => array($vendorDir . '/aws/aws-sdk-php/src'),
+);
diff --git a/lib/ckfinder/core/connector/php/vendor/composer/autoload_psr4.php b/lib/ckfinder/core/connector/php/vendor/composer/autoload_psr4.php
new file mode 100644
index 0000000..2713a38
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/composer/autoload_psr4.php
@@ -0,0 +1,23 @@
+ array($vendorDir . '/symfony/polyfill-mbstring'),
+ 'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'),
+ 'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
+ 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
+ 'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'),
+ 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
+ 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
+ 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
+ 'League\\Flysystem\\Dropbox\\' => array($vendorDir . '/league/flysystem-dropbox/src'),
+ 'League\\Flysystem\\Cached\\' => array($vendorDir . '/league/flysystem-cached-adapter/src'),
+ 'League\\Flysystem\\Azure\\' => array($vendorDir . '/league/flysystem-azure/src'),
+ 'League\\Flysystem\\AwsS3v2\\' => array($vendorDir . '/league/flysystem-aws-s3-v2/src'),
+ 'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'),
+ 'CKSource\\CKFinder\\Plugin\\' => array($vendorDir . '/cksource/ckfinder/plugins'),
+);
diff --git a/lib/ckfinder/core/connector/php/vendor/composer/autoload_real.php b/lib/ckfinder/core/connector/php/vendor/composer/autoload_real.php
new file mode 100644
index 0000000..41d65cb
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/composer/autoload_real.php
@@ -0,0 +1,74 @@
+= 50600 && !defined('HHVM_VERSION');
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitc8ccb46a47efb4379a7eebb3f851e19d::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ if ($useStaticLoader) {
+ $includeFiles = Composer\Autoload\ComposerStaticInitc8ccb46a47efb4379a7eebb3f851e19d::$files;
+ } else {
+ $includeFiles = require __DIR__ . '/autoload_files.php';
+ }
+ foreach ($includeFiles as $fileIdentifier => $file) {
+ composerRequirec8ccb46a47efb4379a7eebb3f851e19d($fileIdentifier, $file);
+ }
+
+ return $loader;
+ }
+}
+
+function composerRequirec8ccb46a47efb4379a7eebb3f851e19d($fileIdentifier, $file)
+{
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+ require $file;
+
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/composer/autoload_static.php b/lib/ckfinder/core/connector/php/vendor/composer/autoload_static.php
new file mode 100644
index 0000000..9e4a5df
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/composer/autoload_static.php
@@ -0,0 +1,267 @@
+ __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
+ );
+
+ public static $prefixLengthsPsr4 = array (
+ 'S' =>
+ array (
+ 'Symfony\\Polyfill\\Mbstring\\' => 26,
+ 'Symfony\\Component\\HttpKernel\\' => 29,
+ 'Symfony\\Component\\HttpFoundation\\' => 33,
+ 'Symfony\\Component\\EventDispatcher\\' => 34,
+ 'Symfony\\Component\\Debug\\' => 24,
+ ),
+ 'P' =>
+ array (
+ 'Psr\\Log\\' => 8,
+ 'Psr\\Cache\\' => 10,
+ ),
+ 'M' =>
+ array (
+ 'Monolog\\' => 8,
+ ),
+ 'L' =>
+ array (
+ 'League\\Flysystem\\Dropbox\\' => 25,
+ 'League\\Flysystem\\Cached\\' => 24,
+ 'League\\Flysystem\\Azure\\' => 23,
+ 'League\\Flysystem\\AwsS3v2\\' => 25,
+ 'League\\Flysystem\\' => 17,
+ ),
+ 'C' =>
+ array (
+ 'CKSource\\CKFinder\\Plugin\\' => 25,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'Symfony\\Polyfill\\Mbstring\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
+ ),
+ 'Symfony\\Component\\HttpKernel\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/symfony/http-kernel',
+ ),
+ 'Symfony\\Component\\HttpFoundation\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/symfony/http-foundation',
+ ),
+ 'Symfony\\Component\\EventDispatcher\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/symfony/event-dispatcher',
+ ),
+ 'Symfony\\Component\\Debug\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/symfony/debug',
+ ),
+ 'Psr\\Log\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
+ ),
+ 'Psr\\Cache\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/psr/cache/src',
+ ),
+ 'Monolog\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
+ ),
+ 'League\\Flysystem\\Dropbox\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/league/flysystem-dropbox/src',
+ ),
+ 'League\\Flysystem\\Cached\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/league/flysystem-cached-adapter/src',
+ ),
+ 'League\\Flysystem\\Azure\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/league/flysystem-azure/src',
+ ),
+ 'League\\Flysystem\\AwsS3v2\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/league/flysystem-aws-s3-v2/src',
+ ),
+ 'League\\Flysystem\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/league/flysystem/src',
+ ),
+ 'CKSource\\CKFinder\\Plugin\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/cksource/ckfinder/plugins',
+ ),
+ );
+
+ public static $prefixesPsr0 = array (
+ 'W' =>
+ array (
+ 'WindowsAzure\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/microsoft/windowsazure',
+ ),
+ ),
+ 'P' =>
+ array (
+ 'Pimple' =>
+ array (
+ 0 => __DIR__ . '/..' . '/pimple/pimple/src',
+ ),
+ ),
+ 'G' =>
+ array (
+ 'Guzzle\\Tests' =>
+ array (
+ 0 => __DIR__ . '/..' . '/guzzle/guzzle/tests',
+ ),
+ 'Guzzle' =>
+ array (
+ 0 => __DIR__ . '/..' . '/guzzle/guzzle/src',
+ ),
+ ),
+ 'D' =>
+ array (
+ 'Dropbox' =>
+ array (
+ 0 => __DIR__ . '/..' . '/dropbox/dropbox-sdk/lib',
+ ),
+ ),
+ 'C' =>
+ array (
+ 'CKSource' =>
+ array (
+ 0 => __DIR__ . '/..' . '/cksource/ckfinder/src',
+ ),
+ ),
+ 'A' =>
+ array (
+ 'Aws' =>
+ array (
+ 0 => __DIR__ . '/..' . '/aws/aws-sdk-php/src',
+ ),
+ ),
+ );
+
+ public static $classMap = array (
+ 'Archive_Tar' => __DIR__ . '/..' . '/pear-pear.php.net/Archive_Tar/Archive/Tar.php',
+ 'Console_Getopt' => __DIR__ . '/..' . '/pear-pear.php.net/Console_Getopt/Console/Getopt.php',
+ 'HTTP_Request2' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2.php',
+ 'HTTP_Request2_Adapter' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Adapter.php',
+ 'HTTP_Request2_Adapter_Curl' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Adapter/Curl.php',
+ 'HTTP_Request2_Adapter_Mock' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Adapter/Mock.php',
+ 'HTTP_Request2_Adapter_Socket' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Adapter/Socket.php',
+ 'HTTP_Request2_ConnectionException' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_CookieJar' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/CookieJar.php',
+ 'HTTP_Request2_Exception' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_LogicException' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_MessageException' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_MultipartBody' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/MultipartBody.php',
+ 'HTTP_Request2_NotImplementedException' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Exception.php',
+ 'HTTP_Request2_Observer_Log' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Observer/Log.php',
+ 'HTTP_Request2_Observer_UncompressingDownload' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Observer/UncompressingDownload.php',
+ 'HTTP_Request2_Response' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/Response.php',
+ 'HTTP_Request2_SOCKS5' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/SOCKS5.php',
+ 'HTTP_Request2_SocketWrapper' => __DIR__ . '/..' . '/pear-pear.php.net/HTTP_Request2/HTTP/Request2/SocketWrapper.php',
+ 'Mail_mime' => __DIR__ . '/..' . '/pear-pear.php.net/Mail_Mime/Mail/mime.php',
+ 'Mail_mimeDecode' => __DIR__ . '/..' . '/pear-pear.php.net/Mail_mimeDecode/Mail/mimeDecode.php',
+ 'Mail_mimePart' => __DIR__ . '/..' . '/pear-pear.php.net/Mail_Mime/Mail/mimePart.php',
+ 'Net_URL2' => __DIR__ . '/..' . '/pear-pear.php.net/Net_URL2/Net/URL2.php',
+ 'OS_Guess' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/OS/Guess.php',
+ 'PEAR' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR.php',
+ 'PEAR_Autoloader' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Autoloader.php',
+ 'PEAR_Builder' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Builder.php',
+ 'PEAR_ChannelFile' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/ChannelFile.php',
+ 'PEAR_ChannelFile_Parser' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/ChannelFile/Parser.php',
+ 'PEAR_Command' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command.php',
+ 'PEAR_Command_Auth' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Auth.php',
+ 'PEAR_Command_Build' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Build.php',
+ 'PEAR_Command_Channels' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Channels.php',
+ 'PEAR_Command_Common' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Common.php',
+ 'PEAR_Command_Config' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Config.php',
+ 'PEAR_Command_Install' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Install.php',
+ 'PEAR_Command_Mirror' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Mirror.php',
+ 'PEAR_Command_Package' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Package.php',
+ 'PEAR_Command_Pickle' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Pickle.php',
+ 'PEAR_Command_Registry' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Registry.php',
+ 'PEAR_Command_Remote' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Remote.php',
+ 'PEAR_Command_Test' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Test.php',
+ 'PEAR_Common' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Common.php',
+ 'PEAR_Config' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Config.php',
+ 'PEAR_Dependency2' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Dependency2.php',
+ 'PEAR_DependencyDB' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/DependencyDB.php',
+ 'PEAR_Downloader' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Downloader.php',
+ 'PEAR_Downloader_Package' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Downloader/Package.php',
+ 'PEAR_Error' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR.php',
+ 'PEAR_ErrorStack' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/ErrorStack.php',
+ 'PEAR_Exception' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Exception.php',
+ 'PEAR_Frontend' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Frontend.php',
+ 'PEAR_Frontend_CLI' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Frontend/CLI.php',
+ 'PEAR_Installer' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer.php',
+ 'PEAR_Installer_Role' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role.php',
+ 'PEAR_Installer_Role_Cfg' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Cfg.php',
+ 'PEAR_Installer_Role_Common' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Common.php',
+ 'PEAR_Installer_Role_Data' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Data.php',
+ 'PEAR_Installer_Role_Doc' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Doc.php',
+ 'PEAR_Installer_Role_Ext' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Ext.php',
+ 'PEAR_Installer_Role_Man' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Man.php',
+ 'PEAR_Installer_Role_Php' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Php.php',
+ 'PEAR_Installer_Role_Script' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Script.php',
+ 'PEAR_Installer_Role_Src' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Src.php',
+ 'PEAR_Installer_Role_Test' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Test.php',
+ 'PEAR_Installer_Role_Www' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Www.php',
+ 'PEAR_PackageFile' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile.php',
+ 'PEAR_PackageFile_Generator_v1' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v1.php',
+ 'PEAR_PackageFile_Generator_v2' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v2.php',
+ 'PEAR_PackageFile_Parser_v1' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Parser/v1.php',
+ 'PEAR_PackageFile_Parser_v2' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Parser/v2.php',
+ 'PEAR_PackageFile_v1' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v1.php',
+ 'PEAR_PackageFile_v2' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2.php',
+ 'PEAR_PackageFile_v2_Validator' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/Validator.php',
+ 'PEAR_PackageFile_v2_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/rw.php',
+ 'PEAR_Packager' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Packager.php',
+ 'PEAR_REST' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/REST.php',
+ 'PEAR_REST_10' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/REST/10.php',
+ 'PEAR_REST_11' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/REST/11.php',
+ 'PEAR_REST_13' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/REST/13.php',
+ 'PEAR_Registry' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Registry.php',
+ 'PEAR_RunTest' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/RunTest.php',
+ 'PEAR_Task_Common' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Common.php',
+ 'PEAR_Task_Postinstallscript' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript.php',
+ 'PEAR_Task_Postinstallscript_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript/rw.php',
+ 'PEAR_Task_Replace' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Replace.php',
+ 'PEAR_Task_Replace_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Replace/rw.php',
+ 'PEAR_Task_Unixeol' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Unixeol.php',
+ 'PEAR_Task_Unixeol_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Unixeol/rw.php',
+ 'PEAR_Task_Windowseol' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Windowseol.php',
+ 'PEAR_Task_Windowseol_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Windowseol/rw.php',
+ 'PEAR_Validate' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Validate.php',
+ 'PEAR_Validator_PECL' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Validator/PECL.php',
+ 'PEAR_XMLParser' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/XMLParser.php',
+ 'SessionHandlerInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Resources/stubs/SessionHandlerInterface.php',
+ 'Structures_Graph' => __DIR__ . '/..' . '/pear-pear.php.net/Structures_Graph/Structures/Graph.php',
+ 'Structures_Graph_Manipulator_AcyclicTest' => __DIR__ . '/..' . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Manipulator/AcyclicTest.php',
+ 'Structures_Graph_Manipulator_TopologicalSorter' => __DIR__ . '/..' . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Manipulator/TopologicalSorter.php',
+ 'Structures_Graph_Node' => __DIR__ . '/..' . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Node.php',
+ 'System' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/System.php',
+ 'XML_Util' => __DIR__ . '/..' . '/pear-pear.php.net/XML_Util/XML/Util.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitc8ccb46a47efb4379a7eebb3f851e19d::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitc8ccb46a47efb4379a7eebb3f851e19d::$prefixDirsPsr4;
+ $loader->prefixesPsr0 = ComposerStaticInitc8ccb46a47efb4379a7eebb3f851e19d::$prefixesPsr0;
+ $loader->classMap = ComposerStaticInitc8ccb46a47efb4379a7eebb3f851e19d::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/composer/include_paths.php b/lib/ckfinder/core/connector/php/vendor/composer/include_paths.php
new file mode 100644
index 0000000..17c4657
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/composer/include_paths.php
@@ -0,0 +1,18 @@
+=5.0.0.0"
+ },
+ "replace": {
+ "pear-pear/mail_mime": "== 1.10.0.0"
+ },
+ "type": "pear-library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "include-path": [
+ "/"
+ ],
+ "license": [
+ "BSD Style"
+ ],
+ "description": "Mail_Mime provides classes to deal with the creation and manipulation of MIME messages.\nIt allows people to create e-mail messages consisting of:\n* Text Parts\n* HTML Parts\n* Inline HTML Images\n* Attachments\n* Attached messages\n\nIt supports big messages, base64 and quoted-printable encodings and\nnon-ASCII characters in filenames, subjects, recipients, etc. encoded\nusing RFC2047 and/or RFC2231."
+ },
+ {
+ "name": "pear-pear.php.net/Mail_mimeDecode",
+ "version": "1.5.6",
+ "version_normalized": "1.5.6.0",
+ "dist": {
+ "type": "file",
+ "url": "https://pear.php.net/get/Mail_mimeDecode-1.5.6.tgz",
+ "reference": null,
+ "shasum": null
+ },
+ "require": {
+ "pear-pear.php.net/mail_mime": ">1.4.0.0",
+ "php": ">=4.3.0.0"
+ },
+ "replace": {
+ "pear-pear/mail_mimedecode": "== 1.5.6.0"
+ },
+ "type": "pear-library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "include-path": [
+ "/"
+ ],
+ "license": [
+ "BSD Style"
+ ],
+ "description": "Provides a class to deal with the decoding and interpreting of mime messages.\n This package used to be part of the Mail_Mime package, but has been split off."
+ },
+ {
+ "name": "pear-pear.php.net/Net_URL2",
+ "version": "2.2.1",
+ "version_normalized": "2.2.1.0",
+ "dist": {
+ "type": "file",
+ "url": "https://pear.php.net/get/Net_URL2-2.2.1.tgz",
+ "reference": null,
+ "shasum": null
+ },
+ "require": {
+ "php": ">=5.1.4.0"
+ },
+ "replace": {
+ "pear-pear/net_url2": "== 2.2.1.0"
+ },
+ "type": "pear-library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "include-path": [
+ "/"
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "Provides parsing of URLs into their constituent parts (scheme, host, path etc.), URL generation, and resolving of\n relative URLs."
+ },
+ {
+ "name": "pear-pear.php.net/XML_Util",
+ "version": "1.3.0",
+ "version_normalized": "1.3.0.0",
+ "dist": {
+ "type": "file",
+ "url": "https://pear.php.net/get/XML_Util-1.3.0.tgz",
+ "reference": null,
+ "shasum": null
+ },
+ "require": {
+ "ext-pcre": "*",
+ "php": ">=5.3.0.0"
+ },
+ "replace": {
+ "pear-pear/xml_util": "== 1.3.0.0"
+ },
+ "type": "pear-library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "include-path": [
+ "/"
+ ],
+ "license": [
+ "BSD License"
+ ],
+ "description": "Selection of methods that are often needed when working with XML documents. Functionality includes creating of attribute lists from arrays, creation of tags, validation of XML names and more."
+ },
+ {
+ "name": "pear-pear.php.net/Console_Getopt",
+ "version": "1.4.1",
+ "version_normalized": "1.4.1.0",
+ "dist": {
+ "type": "file",
+ "url": "https://pear.php.net/get/Console_Getopt-1.4.1.tgz",
+ "reference": null,
+ "shasum": null
+ },
+ "require": {
+ "php": ">=5.4.0.0"
+ },
+ "replace": {
+ "pear-pear/console_getopt": "== 1.4.1.0"
+ },
+ "type": "pear-library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "include-path": [
+ "/"
+ ],
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "description": "This is a PHP implementation of \"getopt\" supporting both\nshort and long options."
+ },
+ {
+ "name": "pear-pear.php.net/Structures_Graph",
+ "version": "1.1.1",
+ "version_normalized": "1.1.1.0",
+ "dist": {
+ "type": "file",
+ "url": "https://pear.php.net/get/Structures_Graph-1.1.1.tgz",
+ "reference": null,
+ "shasum": null
+ },
+ "require": {
+ "php": ">=5.3.0.0"
+ },
+ "replace": {
+ "pear-pear/structures_graph": "== 1.1.1.0"
+ },
+ "type": "pear-library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "include-path": [
+ "/"
+ ],
+ "license": [
+ "LGPL-3.0+"
+ ],
+ "description": "Structures_Graph is a package for creating and manipulating graph datastructures. It allows building of directed\nand undirected graphs, with data and metadata stored in nodes. The library provides functions for graph traversing\nas well as for characteristic extraction from the graph topology."
+ },
+ {
+ "name": "pear-pear.php.net/Archive_Tar",
+ "version": "1.4.2",
+ "version_normalized": "1.4.2.0",
+ "dist": {
+ "type": "file",
+ "url": "https://pear.php.net/get/Archive_Tar-1.4.2.tgz",
+ "reference": null,
+ "shasum": null
+ },
+ "require": {
+ "php": ">=5.2.0.0"
+ },
+ "replace": {
+ "pear-pear/archive_tar": "== 1.4.2.0"
+ },
+ "type": "pear-library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "include-path": [
+ "/"
+ ],
+ "license": [
+ "New BSD License"
+ ],
+ "description": "This class provides handling of tar files in PHP.\nIt supports creating, listing, extracting and adding to tar files.\nGzip support is available if PHP has the zlib extension built-in or\nloaded. Bz2 compression is also supported with the bz2 extension loaded."
+ },
+ {
+ "name": "pear-pear.php.net/PEAR",
+ "version": "1.10.1",
+ "version_normalized": "1.10.1.0",
+ "dist": {
+ "type": "file",
+ "url": "https://pear.php.net/get/PEAR-1.10.1.tgz",
+ "reference": null,
+ "shasum": null
+ },
+ "require": {
+ "ext-pcre": "*",
+ "ext-xml": "*",
+ "pear-pear.php.net/archive_tar": ">=1.4.0.0",
+ "pear-pear.php.net/console_getopt": ">=1.4.1.0",
+ "pear-pear.php.net/structures_graph": ">=1.1.0.0",
+ "pear-pear.php.net/xml_util": ">=1.3.0.0",
+ "php": ">=5.4.0.0"
+ },
+ "conflict": {
+ "pear-pear.php.net/pear_frontend_gtk": "<0.4.0.0",
+ "pear-pear.php.net/pear_frontend_web": "<=0.4.0.0"
+ },
+ "replace": {
+ "pear-pear/pear": "== 1.10.1.0"
+ },
+ "type": "pear-library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "include-path": [
+ "/"
+ ],
+ "license": [
+ "New BSD License"
+ ],
+ "description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n where PHP is running on\n * the System class for quick handling of common operations\n with files and directories\n * the PEAR base class\n Features in a nutshell:\n * full support for channels\n * pre-download dependency validation\n * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n * support for optional dependency groups and limited support for sub-packaging\n * robust dependency support\n * full dependency validation on uninstall\n * remote install for hosts with only ftp access - no more problems with\n restricted host installation\n * full support for mirroring\n * support for bundling several packages into a single tarball\n * support for static dependencies on a url-based package\n * support for custom file roles and installation tasks"
+ },
+ {
+ "name": "pear-pear.php.net/HTTP_Request2",
+ "version": "2.3.0",
+ "version_normalized": "2.3.0.0",
+ "dist": {
+ "type": "file",
+ "url": "https://pear.php.net/get/HTTP_Request2-2.3.0.tgz",
+ "reference": null,
+ "shasum": null
+ },
+ "require": {
+ "pear-pear.php.net/net_url2": ">=2.2.0.0",
+ "pear-pear.php.net/pear": ">=1.9.2.0",
+ "php": ">=5.2.0.0"
+ },
+ "replace": {
+ "pear-pear/http_request2": "== 2.3.0.0"
+ },
+ "type": "pear-library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ ""
+ ]
+ },
+ "include-path": [
+ "/"
+ ],
+ "license": [
+ "BSD 3-Clause License"
+ ],
+ "description": "PHP5 rewrite of HTTP_Request package (with parts of HTTP_Client). Provides\ncleaner API and pluggable Adapters:\n * Socket adapter, based on old HTTP_Request code,\n * Curl adapter, wraps around PHP's cURL extension,\n * Mock adapter, to use for testing packages dependent on HTTP_Request2.\nSupports POST requests with data and file uploads, basic and digest\nauthentication, cookies, managing cookies across requests, proxies, gzip and\ndeflate encodings, redirects, monitoring the request progress with Observers..."
+ },
+ {
+ "name": "microsoft/windowsazure",
+ "version": "v0.4.0",
+ "version_normalized": "0.4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Azure/azure-sdk-for-php.git",
+ "reference": "61d4e12495358491f62cc5bd8716335b0b313488"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Azure/azure-sdk-for-php/zipball/61d4e12495358491f62cc5bd8716335b0b313488",
+ "reference": "61d4e12495358491f62cc5bd8716335b0b313488",
+ "shasum": ""
+ },
+ "require": {
+ "pear-pear/http_request2": "*",
+ "pear-pear/mail_mime": "*",
+ "pear-pear/mail_mimedecode": "*"
+ },
+ "time": "2014-01-23 05:45:10",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "WindowsAzure\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Azure PHP SDK",
+ "email": "azurephpsdk@microsoft.com"
+ }
+ ],
+ "description": "This project provides a set of PHP client libraries that make it easy to access Windows Azure tables, blobs, queues, service runtime and service management APIs.",
+ "keywords": [
+ "azure",
+ "php",
+ "sdk"
+ ]
+ },
+ {
+ "name": "league/flysystem",
+ "version": "1.0.27",
+ "version_normalized": "1.0.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/50e2045ed70a7e75a5e30bc3662904f3b67af8a9",
+ "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "conflict": {
+ "league/flysystem-sftp": "<1.0.6"
+ },
+ "require-dev": {
+ "ext-fileinfo": "*",
+ "mockery/mockery": "~0.9",
+ "phpspec/phpspec": "^2.2",
+ "phpunit/phpunit": "~4.8"
+ },
+ "suggest": {
+ "ext-fileinfo": "Required for MimeType",
+ "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
+ "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
+ "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
+ "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
+ "league/flysystem-copy": "Allows you to use Copy.com storage",
+ "league/flysystem-dropbox": "Allows you to use Dropbox storage",
+ "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
+ "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
+ "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
+ "league/flysystem-webdav": "Allows you to use WebDAV storage",
+ "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter"
+ },
+ "time": "2016-08-10 08:55:11",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Filesystem abstraction: Many filesystems, one API.",
+ "keywords": [
+ "Cloud Files",
+ "WebDAV",
+ "abstraction",
+ "aws",
+ "cloud",
+ "copy.com",
+ "dropbox",
+ "file systems",
+ "files",
+ "filesystem",
+ "filesystems",
+ "ftp",
+ "rackspace",
+ "remote",
+ "s3",
+ "sftp",
+ "storage"
+ ]
+ },
+ {
+ "name": "league/flysystem-azure",
+ "version": "dev-master",
+ "version_normalized": "9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zaak/flysystem-azure",
+ "reference": "d6556e9aea541e50577ae0f48164e482622ff099"
+ },
+ "require": {
+ "league/flysystem": "~1.0",
+ "microsoft/windowsazure": "~0.4.0",
+ "pear-pear.php.net/http_request2": "*",
+ "pear-pear.php.net/mail_mime": "*",
+ "pear-pear.php.net/mail_mimedecode": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~0.9",
+ "phpunit/phpunit": "~4.0"
+ },
+ "time": "2016-01-22 10:39:07",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\Azure\\": "src/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Flysystem adapter for Windows Azure"
+ },
+ {
+ "name": "psr/cache",
+ "version": "1.0.0",
+ "version_normalized": "1.0.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/cache.git",
+ "reference": "9e66031f41fbbdda45ee11e93c45d480ccba3eb3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/9e66031f41fbbdda45ee11e93c45d480ccba3eb3",
+ "reference": "9e66031f41fbbdda45ee11e93c45d480ccba3eb3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "time": "2015-12-11 02:52:07",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for caching libraries",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr-6"
+ ]
+ },
+ {
+ "name": "league/flysystem-cached-adapter",
+ "version": "1.0.3",
+ "version_normalized": "1.0.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem-cached-adapter.git",
+ "reference": "f006cb3c355ae596c72ba8ca4cf3aa4bb545bc0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/f006cb3c355ae596c72ba8ca4cf3aa4bb545bc0c",
+ "reference": "f006cb3c355ae596c72ba8ca4cf3aa4bb545bc0c",
+ "shasum": ""
+ },
+ "require": {
+ "league/flysystem": "~1.0",
+ "psr/cache": "1.0.0"
+ },
+ "require-dev": {
+ "henrikbjorn/phpspec-code-coverage": "~1.0@dev",
+ "mockery/mockery": "~0.9",
+ "phpspec/phpspec": "~2.1",
+ "phpunit/phpunit": "~4.1",
+ "predis/predis": "~1.0",
+ "tedivm/stash": "~0.12"
+ },
+ "suggest": {
+ "ext-phpredis": "Pure C implemented extension for PHP"
+ },
+ "time": "2016-01-25 08:21:11",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\Cached\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "frankdejonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "An adapter decorator to enable meta-data caching."
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "2.7.x-dev",
+ "version_normalized": "2.7.9999999.9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "2b096845cbe49f4616dc90494e1a68d48e9bba23"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2b096845cbe49f4616dc90494e1a68d48e9bba23",
+ "reference": "2b096845cbe49f4616dc90494e1a68d48e9bba23",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "~2.0,>=2.0.5",
+ "symfony/dependency-injection": "~2.6",
+ "symfony/expression-language": "~2.6",
+ "symfony/stopwatch": "~2.3"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "time": "2016-08-09 09:00:18",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony EventDispatcher Component",
+ "homepage": "https://symfony.com"
+ },
+ {
+ "name": "guzzle/guzzle",
+ "version": "dev-master",
+ "version_normalized": "9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle3.git",
+ "reference": "b3f5050cb6270c7a728a0b74ac2de50a262b3e02"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/b3f5050cb6270c7a728a0b74ac2de50a262b3e02",
+ "reference": "b3f5050cb6270c7a728a0b74ac2de50a262b3e02",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "php": ">=5.3.3",
+ "symfony/event-dispatcher": "~2.1"
+ },
+ "replace": {
+ "guzzle/batch": "self.version",
+ "guzzle/cache": "self.version",
+ "guzzle/common": "self.version",
+ "guzzle/http": "self.version",
+ "guzzle/inflection": "self.version",
+ "guzzle/iterator": "self.version",
+ "guzzle/log": "self.version",
+ "guzzle/parser": "self.version",
+ "guzzle/plugin": "self.version",
+ "guzzle/plugin-async": "self.version",
+ "guzzle/plugin-backoff": "self.version",
+ "guzzle/plugin-cache": "self.version",
+ "guzzle/plugin-cookie": "self.version",
+ "guzzle/plugin-curlauth": "self.version",
+ "guzzle/plugin-error-response": "self.version",
+ "guzzle/plugin-history": "self.version",
+ "guzzle/plugin-log": "self.version",
+ "guzzle/plugin-md5": "self.version",
+ "guzzle/plugin-mock": "self.version",
+ "guzzle/plugin-oauth": "self.version",
+ "guzzle/service": "self.version",
+ "guzzle/stream": "self.version"
+ },
+ "require-dev": {
+ "doctrine/cache": "~1.3",
+ "monolog/monolog": "~1.0",
+ "phpunit/phpunit": "3.7.*",
+ "psr/log": "~1.0",
+ "symfony/class-loader": "~2.1",
+ "zendframework/zend-cache": "2.*,<2.3",
+ "zendframework/zend-log": "2.*,<2.3"
+ },
+ "suggest": {
+ "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
+ },
+ "time": "2015-04-29 17:06:53",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.9-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Guzzle": "src/",
+ "Guzzle\\Tests": "tests/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Guzzle Community",
+ "homepage": "https://github.com/guzzle/guzzle/contributors"
+ }
+ ],
+ "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "rest",
+ "web service"
+ ],
+ "abandoned": "guzzlehttp/guzzle"
+ },
+ {
+ "name": "aws/aws-sdk-php",
+ "version": "2.8.31",
+ "version_normalized": "2.8.31.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/aws/aws-sdk-php.git",
+ "reference": "64fa4b07f056e338a5f0f29eece75babaa83af68"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/64fa4b07f056e338a5f0f29eece75babaa83af68",
+ "reference": "64fa4b07f056e338a5f0f29eece75babaa83af68",
+ "shasum": ""
+ },
+ "require": {
+ "guzzle/guzzle": "~3.7",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "doctrine/cache": "~1.0",
+ "ext-openssl": "*",
+ "monolog/monolog": "~1.4",
+ "phpunit/phpunit": "~4.0",
+ "phpunit/phpunit-mock-objects": "2.3.1",
+ "symfony/yaml": "~2.1"
+ },
+ "suggest": {
+ "doctrine/cache": "Adds support for caching of credentials and responses",
+ "ext-apc": "Allows service description opcode caching, request and response caching, and credentials caching",
+ "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
+ "monolog/monolog": "Adds support for logging HTTP requests and responses",
+ "symfony/yaml": "Eases the ability to write manifests for creating jobs in AWS Import/Export"
+ },
+ "time": "2016-07-25 18:03:20",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Aws": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Amazon Web Services",
+ "homepage": "http://aws.amazon.com"
+ }
+ ],
+ "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
+ "homepage": "http://aws.amazon.com/sdkforphp",
+ "keywords": [
+ "amazon",
+ "aws",
+ "cloud",
+ "dynamodb",
+ "ec2",
+ "glacier",
+ "s3",
+ "sdk"
+ ]
+ },
+ {
+ "name": "league/flysystem-aws-s3-v2",
+ "version": "1.0.3",
+ "version_normalized": "1.0.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem-aws-s3-v2.git",
+ "reference": "e464a35e34abed572c76b76aa2f278d178e141c6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v2/zipball/e464a35e34abed572c76b76aa2f278d178e141c6",
+ "reference": "e464a35e34abed572c76b76aa2f278d178e141c6",
+ "shasum": ""
+ },
+ "require": {
+ "aws/aws-sdk-php": "~2.7",
+ "league/flysystem": "~1.0",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "0.9.*",
+ "phpunit/phpunit": "~4.0"
+ },
+ "time": "2015-10-15 15:55:48",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\AwsS3v2\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Flysystem adapter for AWS S3 SDK v2"
+ },
+ {
+ "name": "dropbox/dropbox-sdk",
+ "version": "v1.1.7",
+ "version_normalized": "1.1.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dropbox/dropbox-sdk-php.git",
+ "reference": "0f1a178ca9c0271bca6426dde8f5a2241578deae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dropbox/dropbox-sdk-php/zipball/0f1a178ca9c0271bca6426dde8f5a2241578deae",
+ "reference": "0f1a178ca9c0271bca6426dde8f5a2241578deae",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "php": ">= 5.3"
+ },
+ "require-dev": {
+ "apigen/apigen": "4.1.2",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "2.0.0RC3"
+ },
+ "time": "2016-08-08 23:48:49",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Dropbox": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Dropbox SDK for PHP",
+ "keywords": [
+ "dropbox"
+ ]
+ },
+ {
+ "name": "league/flysystem-dropbox",
+ "version": "1.0.0",
+ "version_normalized": "1.0.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem-dropbox.git",
+ "reference": "96c37124590bef6277c0e68a12e2dc40e5f82baa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-dropbox/zipball/96c37124590bef6277c0e68a12e2dc40e5f82baa",
+ "reference": "96c37124590bef6277c0e68a12e2dc40e5f82baa",
+ "shasum": ""
+ },
+ "require": {
+ "dropbox/dropbox-sdk": "~1.1",
+ "league/flysystem": "~1.0",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "0.9.*",
+ "phpunit/phpunit": "~4.0"
+ },
+ "time": "2015-05-30 09:18:29",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\Dropbox\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Flysystem adapter for Dropbox"
+ },
+ {
+ "name": "psr/log",
+ "version": "dev-master",
+ "version_normalized": "9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "5277094ed527a1c4477177d102fe4c53551953e0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/5277094ed527a1c4477177d102fe4c53551953e0",
+ "reference": "5277094ed527a1c4477177d102fe4c53551953e0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "time": "2016-09-19 16:02:08",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ]
+ },
+ {
+ "name": "pimple/pimple",
+ "version": "dev-master",
+ "version_normalized": "9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silexphp/Pimple.git",
+ "reference": "44515c40a4c4effc53c1e6c0e7158f711473dc98"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silexphp/Pimple/zipball/44515c40a4c4effc53c1e6c0e7158f711473dc98",
+ "reference": "44515c40a4c4effc53c1e6c0e7158f711473dc98",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "time": "2016-09-10 19:36:25",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Pimple": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Pimple, a simple Dependency Injection Container",
+ "homepage": "http://pimple.sensiolabs.org",
+ "keywords": [
+ "container",
+ "dependency injection"
+ ]
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "dev-master",
+ "version_normalized": "9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c",
+ "reference": "53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "time": "2016-08-30 17:06:17",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ]
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "2.7.x-dev",
+ "version_normalized": "2.7.9999999.9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "4b590c1e6f8045befac815b41a924b9b815f97bd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4b590c1e6f8045befac815b41a924b9b815f97bd",
+ "reference": "4b590c1e6f8045befac815b41a924b9b815f97bd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9",
+ "symfony/polyfill-mbstring": "~1.1"
+ },
+ "require-dev": {
+ "symfony/expression-language": "~2.4"
+ },
+ "time": "2016-09-06 09:29:51",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpFoundation\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ],
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony HttpFoundation Component",
+ "homepage": "https://symfony.com"
+ },
+ {
+ "name": "symfony/debug",
+ "version": "2.8.x-dev",
+ "version_normalized": "2.8.9999999.9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/debug.git",
+ "reference": "8c29235936a47473af16fb91c7c4b7b193c5693c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/8c29235936a47473af16fb91c7c4b7b193c5693c",
+ "reference": "8c29235936a47473af16fb91c7c4b7b193c5693c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9",
+ "psr/log": "~1.0"
+ },
+ "conflict": {
+ "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+ },
+ "require-dev": {
+ "symfony/class-loader": "~2.2|~3.0.0",
+ "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2|~3.0.0"
+ },
+ "time": "2016-09-06 10:55:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.8-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Debug\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Debug Component",
+ "homepage": "https://symfony.com"
+ },
+ {
+ "name": "cksource/ckfinder",
+ "version": "dev-master",
+ "version_normalized": "9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "git@github.com:cksource/ckfinder-connector-php.git",
+ "reference": "e0172e81317218a4649eb50814c4bb10c5706619"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cksource/ckfinder-connector-php/zipball/e0172e81317218a4649eb50814c4bb10c5706619",
+ "reference": "e0172e81317218a4649eb50814c4bb10c5706619",
+ "shasum": ""
+ },
+ "require": {
+ "aws/aws-sdk-php": "2.8.31",
+ "dropbox/dropbox-sdk": "~1.1.1",
+ "league/flysystem": "1.0.27",
+ "league/flysystem-aws-s3-v2": "1.0.3",
+ "league/flysystem-azure": "dev-master",
+ "league/flysystem-cached-adapter": "1.0.3",
+ "league/flysystem-dropbox": "1.0.0",
+ "microsoft/windowsazure": "0.4.0",
+ "monolog/monolog": "~1.4,>=1.4.1",
+ "pear-pear.php.net/http_request2": "*",
+ "pear-pear.php.net/mail_mime": "*",
+ "pear-pear.php.net/mail_mimedecode": "*",
+ "php": ">=5.4.0",
+ "pimple/pimple": "~3.0",
+ "symfony/event-dispatcher": ">=2.4,<=2.8-dev",
+ "symfony/http-foundation": ">=2.4,<=2.8-dev",
+ "symfony/http-kernel": ">=2.4,<=2.8-dev"
+ },
+ "require-dev": {
+ "mikey179/vfsstream": "~1.4",
+ "phpunit/phpunit": "~4.0"
+ },
+ "time": "2016-09-07 12:03:36",
+ "type": "library",
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "CKSource": "src/"
+ },
+ "psr-4": {
+ "CKSource\\CKFinder\\Plugin\\": "plugins/"
+ }
+ },
+ "scripts": {
+ "fix-code-style": [
+ "php-cs-fixer fix"
+ ],
+ "build-doc": [
+ "sh dev/doc/builddoc.sh"
+ ],
+ "update-locales": [
+ "git subtree pull --prefix src/CKSource/CKFinder/locales translations master --squash"
+ ]
+ },
+ "license": [
+ "proprietary"
+ ],
+ "authors": [
+ {
+ "name": "CKSource",
+ "homepage": "http://cksource.com"
+ }
+ ],
+ "description": "CKFinder PHP 5.3+ connector",
+ "support": {
+ "source": "https://github.com/cksource/ckfinder-connector-php/tree/master",
+ "issues": "https://github.com/cksource/ckfinder-connector-php/issues"
+ }
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "1.x-dev",
+ "version_normalized": "1.9999999.9999999.9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "dacec2fe1ead778f90d0149caa8f047a0856571b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/dacec2fe1ead778f90d0149caa8f047a0856571b",
+ "reference": "dacec2fe1ead778f90d0149caa8f047a0856571b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "psr/log": "~1.0"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0.0"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^2.4.9",
+ "doctrine/couchdb": "~1.0@dev",
+ "graylog2/gelf-php": "~1.0",
+ "jakub-onderka/php-parallel-lint": "0.9",
+ "php-amqplib/php-amqplib": "~2.4",
+ "php-console/php-console": "^3.1.3",
+ "phpunit/phpunit": "~4.5",
+ "phpunit/phpunit-mock-objects": "2.3.0",
+ "ruflin/elastica": ">=0.90 <3.0",
+ "sentry/sentry": "^0.13",
+ "swiftmailer/swiftmailer": "~5.3"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-mongo": "Allow sending log messages to a MongoDB server",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+ "php-console/php-console": "Allow sending log messages to Google Chrome",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
+ "sentry/sentry": "Allow sending log messages to a Sentry server"
+ },
+ "time": "2016-09-18 16:07:11",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-4": {
+ "Monolog\\": "src/Monolog"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "http://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging",
+ "psr-3"
+ ]
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "2.7.x-dev",
+ "version_normalized": "2.7.9999999.9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-kernel.git",
+ "reference": "0f99ec91247e20f7b1a6d31dc80e70289bc2b17a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/0f99ec91247e20f7b1a6d31dc80e70289bc2b17a",
+ "reference": "0f99ec91247e20f7b1a6d31dc80e70289bc2b17a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9",
+ "psr/log": "~1.0",
+ "symfony/debug": "~2.6,>=2.6.2",
+ "symfony/event-dispatcher": "~2.6,>=2.6.7",
+ "symfony/http-foundation": "~2.7.15|~2.8.8"
+ },
+ "conflict": {
+ "symfony/config": "<2.7"
+ },
+ "require-dev": {
+ "symfony/browser-kit": "~2.3",
+ "symfony/class-loader": "~2.1",
+ "symfony/config": "~2.7",
+ "symfony/console": "~2.3",
+ "symfony/css-selector": "~2.0,>=2.0.5",
+ "symfony/dependency-injection": "~2.2",
+ "symfony/dom-crawler": "~2.0,>=2.0.5",
+ "symfony/expression-language": "~2.4",
+ "symfony/finder": "~2.0,>=2.0.5",
+ "symfony/process": "~2.0,>=2.0.5",
+ "symfony/routing": "~2.2",
+ "symfony/stopwatch": "~2.3",
+ "symfony/templating": "~2.2",
+ "symfony/translation": "~2.0,>=2.0.5",
+ "symfony/var-dumper": "~2.6"
+ },
+ "suggest": {
+ "symfony/browser-kit": "",
+ "symfony/class-loader": "",
+ "symfony/config": "",
+ "symfony/console": "",
+ "symfony/dependency-injection": "",
+ "symfony/finder": "",
+ "symfony/var-dumper": ""
+ },
+ "time": "2016-09-14 19:08:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpKernel\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony HttpKernel Component",
+ "homepage": "https://symfony.com"
+ }
+]
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AppInfo.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AppInfo.php
new file mode 100644
index 0000000..ba91bfe
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AppInfo.php
@@ -0,0 +1,228 @@
+app key (OAuth calls this the consumer key). You can
+ * create an app key and secret on the Dropbox developer website.
+ *
+ * @return string
+ */
+ function getKey() { return $this->key; }
+
+ /** @var string */
+ private $key;
+
+ /**
+ * Your Dropbox app secret (OAuth calls this the consumer secret). You can
+ * create an app key and secret on the Dropbox developer website.
+ *
+ * Make sure that this is kept a secret. Someone with your app secret can impesonate your
+ * application. People sometimes ask for help on the Dropbox API forums and
+ * copy/paste code that includes their app secret. Do not do that.
+ *
+ * @return string
+ */
+ function getSecret() { return $this->secret; }
+
+ /** @var string */
+ private $secret;
+
+ /**
+ * The set of servers your app will use. This defaults to the standard Dropbox servers
+ * {@link Host::getDefault}.
+ *
+ * @return Host
+ *
+ * @internal
+ */
+ function getHost() { return $this->host; }
+
+ /** @var Host */
+ private $host;
+
+ /**
+ * Constructor.
+ *
+ * @param string $key
+ * See {@link getKey()}
+ * @param string $secret
+ * See {@link getSecret()}
+ */
+ function __construct($key, $secret)
+ {
+ self::checkKeyArg($key);
+ self::checkSecretArg($secret);
+
+ $this->key = $key;
+ $this->secret = $secret;
+
+ // The $host parameter is sort of internal. We don't include it in the param list because
+ // we don't want it to be included in the documentation. Use PHP arg list hacks to get at
+ // it.
+ $host = null;
+ if (\func_num_args() == 3) {
+ $host = \func_get_arg(2);
+ Host::checkArgOrNull("host", $host);
+ }
+ if ($host === null) {
+ $host = Host::getDefault();
+ }
+ $this->host = $host;
+ }
+
+ /**
+ * Loads a JSON file containing information about your app. At a minimum, the file must include
+ * the "key" and "secret" fields. Run 'php authorize.php' in the examples directory
+ * for details about what this file should look like.
+ *
+ * @param string $path
+ * Path to a JSON file
+ *
+ * @return AppInfo
+ *
+ * @throws AppInfoLoadException
+ */
+ static function loadFromJsonFile($path)
+ {
+ list($rawJson, $appInfo) = self::loadFromJsonFileWithRaw($path);
+ return $appInfo;
+ }
+
+ /**
+ * Loads a JSON file containing information about your app. At a minimum, the file must include
+ * the "key" and "secret" fields. Run 'php authorize.php' in the examples directory
+ * for details about what this file should look like.
+ *
+ * @param string $path
+ * Path to a JSON file
+ *
+ * @return array
+ * A list of two items. The first is a PHP array representation of the raw JSON, the second
+ * is an AppInfo object that is the parsed version of the JSON.
+ *
+ * @throws AppInfoLoadException
+ *
+ * @internal
+ */
+ static function loadFromJsonFileWithRaw($path)
+ {
+ if (!file_exists($path)) {
+ throw new AppInfoLoadException("File doesn't exist: \"$path\"");
+ }
+
+ $str = Util::stripUtf8Bom(file_get_contents($path));
+ $jsonArr = json_decode($str, true, 10);
+
+ if (is_null($jsonArr)) {
+ throw new AppInfoLoadException("JSON parse error: \"$path\"");
+ }
+
+ $appInfo = self::loadFromJson($jsonArr);
+
+ return array($jsonArr, $appInfo);
+ }
+
+ /**
+ * Parses a JSON object to build an AppInfo object. If you would like to load this from a file,
+ * use the loadFromJsonFile() method.
+ *
+ * @param array $jsonArr Output from json_decode($str, true)
+ *
+ * @return AppInfo
+ *
+ * @throws AppInfoLoadException
+ */
+ static function loadFromJson($jsonArr)
+ {
+ if (!is_array($jsonArr)) {
+ throw new AppInfoLoadException("Expecting JSON object, got something else");
+ }
+
+ $requiredKeys = array("key", "secret");
+ foreach ($requiredKeys as $key) {
+ if (!array_key_exists($key, $jsonArr)) {
+ throw new AppInfoLoadException("Missing field \"$key\"");
+ }
+
+ if (!is_string($jsonArr[$key])) {
+ throw new AppInfoLoadException("Expecting field \"$key\" to be a string");
+ }
+ }
+
+ // Check app_key and app_secret
+ $appKey = $jsonArr["key"];
+ $appSecret = $jsonArr["secret"];
+
+ $tokenErr = self::getTokenPartError($appKey);
+ if (!is_null($tokenErr)) {
+ throw new AppInfoLoadException("Field \"key\" doesn't look like a valid app key: $tokenErr");
+ }
+
+ $tokenErr = self::getTokenPartError($appSecret);
+ if (!is_null($tokenErr)) {
+ throw new AppInfoLoadException("Field \"secret\" doesn't look like a valid app secret: $tokenErr");
+ }
+
+ try {
+ $host = Host::loadFromJson($jsonArr);
+ }
+ catch (HostLoadException $ex) {
+ throw new AppInfoLoadException($ex->getMessage());
+ }
+
+ return new AppInfo($appKey, $appSecret, $host);
+ }
+
+ /**
+ * Use this to check that a function argument is of type `AppInfo`
+ *
+ * @internal
+ */
+ static function checkArg($argName, $argValue)
+ {
+ if (!($argValue instanceof self)) Checker::throwError($argName, $argValue, __CLASS__);
+ }
+
+ /**
+ * Use this to check that a function argument is either `null` or of type
+ * `AppInfo`.
+ *
+ * @internal
+ */
+ static function checkArgOrNull($argName, $argValue)
+ {
+ if ($argValue === null) return;
+ if (!($argValue instanceof self)) Checker::throwError($argName, $argValue, __CLASS__);
+ }
+
+ /** @internal */
+ static function getTokenPartError($s)
+ {
+ if ($s === null) return "can't be null";
+ if (strlen($s) === 0) return "can't be empty";
+ if (strstr($s, ' ')) return "can't contain a space";
+ return null; // 'null' means "no error"
+ }
+
+ /** @internal */
+ static function checkKeyArg($key)
+ {
+ $error = self::getTokenPartError($key);
+ if ($error === null) return;
+ throw new \InvalidArgumentException("Bad 'key': \"$key\": $error.");
+ }
+
+ /** @internal */
+ static function checkSecretArg($secret)
+ {
+ $error = self::getTokenPartError($secret);
+ if ($error === null) return;
+ throw new \InvalidArgumentException("Bad 'secret': \"$secret\": $error.");
+ }
+
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AppInfoLoadException.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AppInfoLoadException.php
new file mode 100644
index 0000000..730a1e0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AppInfoLoadException.php
@@ -0,0 +1,18 @@
+array = &$array;
+ $this->key = $key;
+ }
+
+ /**
+ * Returns the entry's current value or `null` if nothing is set.
+ *
+ * @return object
+ */
+ function get()
+ {
+ if (isset($this->array[$this->key])) {
+ return $this->array[$this->key];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the array entry to the given value.
+ *
+ * @param object $value
+ */
+ function set($value)
+ {
+ $this->array[$this->key] = $value;
+ }
+
+ /**
+ * Clear the entry.
+ */
+ function clear()
+ {
+ unset($this->array[$this->key]);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AuthBase.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AuthBase.php
new file mode 100644
index 0000000..2422388
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AuthBase.php
@@ -0,0 +1,75 @@
+appInfo; }
+
+ /** @var AppInfo */
+ protected $appInfo;
+
+ /**
+ * An identifier for the API client, typically of the form "Name/Version".
+ * This is used to set the HTTP `User-Agent` header when making API requests.
+ * Example: `"PhotoEditServer/1.3"`
+ *
+ * If you're the author a higher-level library on top of the basic SDK, and the
+ * "Photo Edit" app's server code is using your library to access Dropbox, you should append
+ * your library's name and version to form the full identifier. For example,
+ * if your library is called "File Picker", you might set this field to:
+ * `"PhotoEditServer/1.3 FilePicker/0.1-beta"`
+ *
+ * The exact format of the `User-Agent` header is described in
+ * section 3.8 of the HTTP specification.
+ *
+ * Note that underlying HTTP client may append other things to the `User-Agent`, such as
+ * the name of the library being used to actually make the HTTP request (such as cURL).
+ *
+ * @return string
+ */
+ function getClientIdentifier() { return $this->clientIdentifier; }
+
+ /** @var string */
+ protected $clientIdentifier;
+
+ /**
+ * The locale of the user of your application. Some API calls return localized
+ * data and error messages; this "user locale" setting determines which locale
+ * the server should use to localize those strings.
+ *
+ * @return null|string
+ */
+ function getUserLocale() { return $this->userLocale; }
+
+ /** @var string */
+ protected $userLocale;
+
+ /**
+ * Constructor.
+ *
+ * @param AppInfo $appInfo
+ * See {@link getAppInfo()}
+ * @param string $clientIdentifier
+ * See {@link getClientIdentifier()}
+ * @param null|string $userLocale
+ * See {@link getUserLocale()}
+ */
+ function __construct($appInfo, $clientIdentifier, $userLocale = null)
+ {
+ AppInfo::checkArg("appInfo", $appInfo);
+ Client::checkClientIdentifierArg("clientIdentifier", $clientIdentifier);
+ Checker::argStringNonEmptyOrNull("userLocale", $userLocale);
+
+ $this->appInfo = $appInfo;
+ $this->clientIdentifier = $clientIdentifier;
+ $this->userLocale = $userLocale;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AuthInfo.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AuthInfo.php
new file mode 100644
index 0000000..d020471
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AuthInfo.php
@@ -0,0 +1,75 @@
+getMessage());
+ }
+
+ return array($accessToken, $host);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AuthInfoLoadException.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AuthInfoLoadException.php
new file mode 100644
index 0000000..820cda0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/AuthInfoLoadException.php
@@ -0,0 +1,18 @@
+accessToken; }
+
+ /** @var AccessToken */
+ private $accessToken;
+
+ /**
+ * An identifier for the API client, typically of the form "Name/Version".
+ * This is used to set the HTTP `User-Agent` header when making API requests.
+ * Example: `"PhotoEditServer/1.3"`
+ *
+ * If you're the author a higher-level library on top of the basic SDK, and the
+ * "Photo Edit" app's server code is using your library to access Dropbox, you should append
+ * your library's name and version to form the full identifier. For example,
+ * if your library is called "File Picker", you might set this field to:
+ * `"PhotoEditServer/1.3 FilePicker/0.1-beta"`
+ *
+ * The exact format of the `User-Agent` header is described in
+ * section 3.8 of the HTTP specification.
+ *
+ * Note that underlying HTTP client may append other things to the `User-Agent`, such as
+ * the name of the library being used to actually make the HTTP request (such as cURL).
+ *
+ * @return string
+ */
+ function getClientIdentifier() { return $this->clientIdentifier; }
+
+ /** @var string */
+ private $clientIdentifier;
+
+ /**
+ * The locale of the user of your application. Some API calls return localized
+ * data and error messages; this "user locale" setting determines which locale
+ * the server should use to localize those strings.
+ *
+ * @return null|string
+ */
+ function getUserLocale() { return $this->userLocale; }
+
+ /** @var null|string */
+ private $userLocale;
+
+ /**
+ * The {@link Host} object that determines the hostnames we make requests to.
+ *
+ * @return Host
+ */
+ function getHost() { return $this->host; }
+
+ /**
+ * Constructor.
+ *
+ * @param string $accessToken
+ * See {@link getAccessToken()}
+ * @param string $clientIdentifier
+ * See {@link getClientIdentifier()}
+ * @param null|string $userLocale
+ * See {@link getUserLocale()}
+ */
+ function __construct($accessToken, $clientIdentifier, $userLocale = null)
+ {
+ self::checkAccessTokenArg("accessToken", $accessToken);
+ self::checkClientIdentifierArg("clientIdentifier", $clientIdentifier);
+ Checker::argStringNonEmptyOrNull("userLocale", $userLocale);
+
+ $this->accessToken = $accessToken;
+ $this->clientIdentifier = $clientIdentifier;
+ $this->userLocale = $userLocale;
+
+ // The $host parameter is sort of internal. We don't include it in the param list because
+ // we don't want it to be included in the documentation. Use PHP arg list hacks to get at
+ // it.
+ $host = null;
+ if (\func_num_args() == 4) {
+ $host = \func_get_arg(3);
+ Host::checkArgOrNull("host", $host);
+ }
+ if ($host === null) {
+ $host = Host::getDefault();
+ }
+ $this->host = $host;
+
+ // These fields are redundant, but it makes these values a little more convenient
+ // to access.
+ $this->apiHost = $host->getApi();
+ $this->contentHost = $host->getContent();
+ }
+
+ /** @var string */
+ private $apiHost;
+ /** @var string */
+ private $contentHost;
+
+ /**
+ * Given a `$base` path for an API endpoint (for example, "/files"), append
+ * a Dropbox API file path to the end of that URL. Special characters in the file will
+ * be encoded properly.
+ *
+ * This is for endpoints like "/files" takes the path on the URL and not as a separate
+ * query or POST parameter.
+ *
+ * @param string $base
+ * @param string $path
+ * @return string
+ */
+ function appendFilePath($base, $path)
+ {
+ return $base . "/auto/" . rawurlencode(substr($path, 1));
+ }
+
+ /**
+ * Make an API call to disable the access token that you constructed this `Client`
+ * with. After calling this, API calls made with this `Client` will fail.
+ *
+ * See /disable_access_token.
+ *
+ * @throws Exception
+ */
+ function disableAccessToken()
+ {
+ $response = $this->doPost($this->apiHost, "1/disable_access_token");
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+ }
+
+ /**
+ * Make an API call to get basic account and quota information.
+ *
+ *
+ * $client = ...
+ * $accountInfo = $client->getAccountInfo();
+ * print_r($accountInfo);
+ *
+ *
+ * @return array
+ * See /account/info.
+ *
+ * @throws Exception
+ */
+ function getAccountInfo()
+ {
+ $response = $this->doGet($this->apiHost, "1/account/info");
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Downloads a file from Dropbox. The file's contents are written to the
+ * given `$outStream` and the file's metadata is returned.
+ *
+ *
+ * $client = ...;
+ * $fd = fopen("./Frog.jpeg", "wb");
+ * $metadata = $client->getFile("/Photos/Frog.jpeg", $fd);
+ * fclose($fd);
+ * print_r($metadata);
+ *
+ *
+ * @param string $path
+ * The path to the file on Dropbox (UTF-8).
+ *
+ * @param resource $outStream
+ * If the file exists, the file contents will be written to this stream.
+ *
+ * @param string|null $rev
+ * If you want the latest revision of the file at the given path, pass in `null`.
+ * If you want a specific version of a file, pass in value of the file metadata's "rev" field.
+ *
+ * @return null|array
+ * The metadata
+ * object for the file at the given $path and $rev, or `null` if the file
+ * doesn't exist,
+ *
+ * @throws Exception
+ */
+ function getFile($path, $outStream, $rev = null)
+ {
+ Path::checkArgNonRoot("path", $path);
+ Checker::argResource("outStream", $outStream);
+ Checker::argStringNonEmptyOrNull("rev", $rev);
+
+ $url = $this->buildUrlForGetOrPut(
+ $this->contentHost,
+ $this->appendFilePath("1/files", $path),
+ array("rev" => $rev));
+
+ $curl = $this->mkCurl($url);
+ $metadataCatcher = new DropboxMetadataHeaderCatcher($curl->handle);
+ $streamRelay = new CurlStreamRelay($curl->handle, $outStream);
+
+ $response = $curl->exec();
+
+ if ($response->statusCode === 404) return null;
+
+ if ($response->statusCode !== 200) {
+ $response->body = $streamRelay->getErrorBody();
+ throw RequestUtil::unexpectedStatus($response);
+ }
+
+ return $metadataCatcher->getMetadata();
+ }
+
+ /**
+ * Calling 'uploadFile' with `$numBytes` less than this value, will cause this SDK
+ * to use the standard /files_put endpoint. When `$numBytes` is greater than this
+ * value, we'll use the /chunked_upload endpoint.
+ *
+ * @var int
+ */
+ private static $AUTO_CHUNKED_UPLOAD_THRESHOLD = 9863168; // 8 MB
+
+ /**
+ * @var int
+ */
+ private static $DEFAULT_CHUNK_SIZE = 4194304; // 4 MB
+
+ /**
+ * Creates a file on Dropbox, using the data from `$inStream` for the file contents.
+ *
+ *
+ * use \Dropbox as dbx;
+ * $client = ...;
+ * $fd = fopen("./frog.jpeg", "rb");
+ * $md1 = $client->uploadFile("/Photos/Frog.jpeg",
+ * dbx\WriteMode::add(), $fd);
+ * fclose($fd);
+ * print_r($md1);
+ * $rev = $md1["rev"];
+ *
+ * // Re-upload with WriteMode::update(...), which will overwrite the
+ * // file if it hasn't been modified from our original upload.
+ * $fd = fopen("./frog-new.jpeg", "rb");
+ * $md2 = $client->uploadFile("/Photos/Frog.jpeg",
+ * dbx\WriteMode::update($rev), $fd);
+ * fclose($fd);
+ * print_r($md2);
+ *
+ *
+ * @param string $path
+ * The Dropbox path to save the file to (UTF-8).
+ *
+ * @param WriteMode $writeMode
+ * What to do if there's already a file at the given path.
+ *
+ * @param resource $inStream
+ * The data to use for the file contents.
+ *
+ * @param int|null $numBytes
+ * You can pass in `null` if you don't know. If you do provide the size, we can
+ * perform a slightly more efficient upload (fewer network round-trips) for files smaller
+ * than 8 MB.
+ *
+ * @return mixed
+ * The self::$AUTO_CHUNKED_UPLOAD_THRESHOLD) {
+ $metadata = $this->_uploadFileChunked($path, $writeMode, $inStream, $numBytes,
+ self::$DEFAULT_CHUNK_SIZE);
+ } else {
+ $metadata = $this->_uploadFile($path, $writeMode,
+ function(Curl $curl) use ($inStream, $numBytes) {
+ $curl->set(CURLOPT_PUT, true);
+ $curl->set(CURLOPT_INFILE, $inStream);
+ $curl->set(CURLOPT_INFILESIZE, $numBytes);
+ });
+ }
+
+ return $metadata;
+ }
+
+ /**
+ * Creates a file on Dropbox, using the given $data string as the file contents.
+ *
+ *
+ * use \Dropbox as dbx;
+ * $client = ...;
+ * $md = $client->uploadFileFromString("/Grocery List.txt",
+ * dbx\WriteMode::add(),
+ * "1. Coke\n2. Popcorn\n3. Toothpaste\n");
+ * print_r($md);
+ *
+ *
+ * @param string $path
+ * The Dropbox path to save the file to (UTF-8).
+ *
+ * @param WriteMode $writeMode
+ * What to do if there's already a file at the given path.
+ *
+ * @param string $data
+ * The data to use for the contents of the file.
+ *
+ * @return mixed
+ * The _uploadFile($path, $writeMode, function(Curl $curl) use ($data) {
+ $curl->set(CURLOPT_CUSTOMREQUEST, "PUT");
+ $curl->set(CURLOPT_POSTFIELDS, $data);
+ $curl->addHeader("Content-Type: application/octet-stream");
+ });
+ }
+
+ /**
+ * Creates a file on Dropbox, using the data from `$inStream` as the file contents.
+ *
+ * This version of `uploadFile` splits uploads the file ~4MB chunks at a time and
+ * will retry a few times if one chunk fails to upload. Uses {@link chunkedUploadStart()},
+ * {@link chunkedUploadContinue()}, and {@link chunkedUploadFinish()}.
+ *
+ * @param string $path
+ * The Dropbox path to save the file to (UTF-8).
+ *
+ * @param WriteMode $writeMode
+ * What to do if there's already a file at the given path.
+ *
+ * @param resource $inStream
+ * The data to use for the file contents.
+ *
+ * @param int|null $numBytes
+ * The number of bytes available from $inStream.
+ * You can pass in `null` if you don't know.
+ *
+ * @param int|null $chunkSize
+ * The number of bytes to upload in each chunk. You can omit this (or pass in
+ * `null` and the library will use a reasonable default.
+ *
+ * @return mixed
+ * The _uploadFileChunked($path, $writeMode, $inStream, $numBytes, $chunkSize);
+ }
+
+ /**
+ * @param string $path
+ *
+ * @param WriteMode $writeMode
+ * What to do if there's already a file at the given path (UTF-8).
+ *
+ * @param resource $inStream
+ * The source of data to upload.
+ *
+ * @param int|null $numBytes
+ * You can pass in `null`. But if you know how many bytes you expect, pass in
+ * that value and this function will do a sanity check at the end to make sure the number of
+ * bytes read from `$inStream` matches up.
+ *
+ * @param int $chunkSize
+ *
+ * @return array
+ * The 0);
+
+ $data = self::readFully($inStream, $chunkSize);
+ $len = strlen($data);
+
+ $client = $this;
+ $uploadId = RequestUtil::runWithRetry(3, function() use ($data, $client) {
+ return $client->chunkedUploadStart($data);
+ });
+
+ $byteOffset = $len;
+
+ while (!feof($inStream)) {
+ $data = self::readFully($inStream, $chunkSize);
+ $len = strlen($data);
+
+ while (true) {
+ $r = RequestUtil::runWithRetry(3,
+ function() use ($client, $uploadId, $byteOffset, $data) {
+ return $client->chunkedUploadContinue($uploadId, $byteOffset, $data);
+ });
+
+ if ($r === true) { // Chunk got uploaded!
+ $byteOffset += $len;
+ break;
+ }
+ if ($r === false) { // Server didn't recognize our upload ID
+ // This is very unlikely since we're uploading all the chunks in sequence.
+ throw new Exception_BadResponse("Server forgot our uploadId");
+ }
+
+ // Otherwise, the server is at a different byte offset from us.
+ $serverByteOffset = $r;
+ assert($serverByteOffset !== $byteOffset); // chunkedUploadContinue ensures this.
+ // An earlier byte offset means the server has lost data we sent earlier.
+ if ($serverByteOffset < $byteOffset) throw new Exception_BadResponse(
+ "Server is at an ealier byte offset: us=$byteOffset, server=$serverByteOffset");
+ $diff = $serverByteOffset - $byteOffset;
+ // If the server is past where we think it could possibly be, something went wrong.
+ if ($diff > $len) throw new Exception_BadResponse(
+ "Server is more than a chunk ahead: us=$byteOffset, server=$serverByteOffset");
+ // The normal case is that the server is a bit further along than us because of a
+ // partially-uploaded chunk. Finish it off.
+ $byteOffset += $diff;
+ if ($diff === $len) break; // If the server is at the end, we're done.
+ $data = substr($data, $diff);
+ }
+ }
+
+ if ($numBytes !== null && $byteOffset !== $numBytes) throw new \InvalidArgumentException(
+ "You passed numBytes=$numBytes but the stream had $byteOffset bytes.");
+
+ $metadata = RequestUtil::runWithRetry(3,
+ function() use ($client, $uploadId, $path, $writeMode) {
+ return $client->chunkedUploadFinish($uploadId, $path, $writeMode);
+ });
+
+ return $metadata;
+ }
+
+ /**
+ * Sometimes fread() returns less than the request number of bytes (for example, when reading
+ * from network streams). This function repeatedly calls fread until the requested number of
+ * bytes have been read or we've reached EOF.
+ *
+ * @param resource $inStream
+ * @param int $numBytes
+ * @throws StreamReadException
+ * @return string
+ */
+ private static function readFully($inStream, $numBytes)
+ {
+ Checker::argNat("numBytes", $numBytes);
+
+ $full = '';
+ $bytesRemaining = $numBytes;
+ while (!feof($inStream) && $bytesRemaining > 0) {
+ $part = fread($inStream, $bytesRemaining);
+ if ($part === false) throw new StreamReadException("Error reading from \$inStream.");
+ $full .= $part;
+ $bytesRemaining -= strlen($part);
+ }
+ return $full;
+ }
+
+ /**
+ * @param string $path
+ * @param WriteMode $writeMode
+ * @param callable $curlConfigClosure
+ * @return array
+ */
+ private function _uploadFile($path, $writeMode, $curlConfigClosure)
+ {
+ Path::checkArg("path", $path);
+ WriteMode::checkArg("writeMode", $writeMode);
+ Checker::argCallable("curlConfigClosure", $curlConfigClosure);
+
+ $url = $this->buildUrlForGetOrPut(
+ $this->contentHost,
+ $this->appendFilePath("1/files_put", $path),
+ $writeMode->getExtraParams());
+
+ $curl = $this->mkCurl($url);
+
+ $curlConfigClosure($curl);
+
+ $curl->set(CURLOPT_RETURNTRANSFER, true);
+ $response = $curl->exec();
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Start a new chunked upload session and upload the first chunk of data.
+ *
+ * @param string $data
+ * The data to start off the chunked upload session.
+ *
+ * @return array
+ * A pair of `(string $uploadId, int $byteOffset)`. `$uploadId`
+ * is a unique identifier for this chunked upload session. You pass this in to
+ * {@link chunkedUploadContinue} and {@link chuunkedUploadFinish}. `$byteOffset`
+ * is the number of bytes that were successfully uploaded.
+ *
+ * @throws Exception
+ */
+ function chunkedUploadStart($data)
+ {
+ Checker::argString("data", $data);
+
+ $response = $this->_chunkedUpload(array(), $data);
+
+ if ($response->statusCode === 404) {
+ throw new Exception_BadResponse("Got a 404, but we didn't send up an 'upload_id'");
+ }
+
+ $correction = self::_chunkedUploadCheckForOffsetCorrection($response);
+ if ($correction !== null) throw new Exception_BadResponse(
+ "Got an offset-correcting 400 response, but we didn't send an offset");
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ list($uploadId, $byteOffset) = self::_chunkedUploadParse200Response($response->body);
+ $len = strlen($data);
+ if ($byteOffset !== $len) throw new Exception_BadResponse(
+ "We sent $len bytes, but server returned an offset of $byteOffset");
+
+ return $uploadId;
+ }
+
+ /**
+ * Append another chunk data to a previously-started chunked upload session.
+ *
+ * @param string $uploadId
+ * The unique identifier for the chunked upload session. This is obtained via
+ * {@link chunkedUploadStart}.
+ *
+ * @param int $byteOffset
+ * The number of bytes you think you've already uploaded to the given chunked upload
+ * session. The server will append the new chunk of data after that point.
+ *
+ * @param string $data
+ * The data to append to the existing chunked upload session.
+ *
+ * @return int|bool
+ * If `false`, it means the server didn't know about the given
+ * `$uploadId`. This may be because the chunked upload session has expired
+ * (they last around 24 hours).
+ * If `true`, the chunk was successfully uploaded. If an integer, it means
+ * you and the server don't agree on the current `$byteOffset`. The returned
+ * integer is the server's internal byte offset for the chunked upload session. You need
+ * to adjust your input to match.
+ *
+ * @throws Exception
+ */
+ function chunkedUploadContinue($uploadId, $byteOffset, $data)
+ {
+ Checker::argStringNonEmpty("uploadId", $uploadId);
+ Checker::argNat("byteOffset", $byteOffset);
+ Checker::argString("data", $data);
+
+ $response = $this->_chunkedUpload(
+ array("upload_id" => $uploadId, "offset" => $byteOffset), $data);
+
+ if ($response->statusCode === 404) {
+ // The server doesn't know our upload ID. Maybe it expired?
+ return false;
+ }
+
+ $correction = self::_chunkedUploadCheckForOffsetCorrection($response);
+ if ($correction !== null) {
+ list($correctedUploadId, $correctedByteOffset) = $correction;
+ if ($correctedUploadId !== $uploadId) throw new Exception_BadResponse(
+ "Corrective 400 upload_id mismatch: us=".
+ Util::q($uploadId)." server=".Util::q($correctedUploadId));
+ if ($correctedByteOffset === $byteOffset) throw new Exception_BadResponse(
+ "Corrective 400 offset is the same as ours: $byteOffset");
+ return $correctedByteOffset;
+ }
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+ list($retUploadId, $retByteOffset) = self::_chunkedUploadParse200Response($response->body);
+
+ $nextByteOffset = $byteOffset + strlen($data);
+ if ($uploadId !== $retUploadId) throw new Exception_BadResponse(
+ "upload_id mismatch: us=".Util::q($uploadId) .", server=".Util::q($uploadId));
+ if ($nextByteOffset !== $retByteOffset) throw new Exception_BadResponse(
+ "next-offset mismatch: us=$nextByteOffset, server=$retByteOffset");
+
+ return true;
+ }
+
+ /**
+ * @param string $body
+ * @return array
+ */
+ private static function _chunkedUploadParse200Response($body)
+ {
+ $j = RequestUtil::parseResponseJson($body);
+ $uploadId = self::getField($j, "upload_id");
+ $byteOffset = self::getField($j, "offset");
+ return array($uploadId, $byteOffset);
+ }
+
+ /**
+ * @param HttpResponse $response
+ * @return array|null
+ */
+ private static function _chunkedUploadCheckForOffsetCorrection($response)
+ {
+ if ($response->statusCode !== 400) return null;
+ $j = json_decode($response->body, true, 10);
+ if ($j === null) return null;
+ if (!array_key_exists("upload_id", $j) || !array_key_exists("offset", $j)) return null;
+ $uploadId = $j["upload_id"];
+ $byteOffset = $j["offset"];
+ return array($uploadId, $byteOffset);
+ }
+
+ /**
+ * Creates a file on Dropbox using the accumulated contents of the given chunked upload session.
+ *
+ * See /commit_chunked_upload.
+ *
+ * @param string $uploadId
+ * The unique identifier for the chunked upload session. This is obtained via
+ * {@link chunkedUploadStart}.
+ *
+ * @param string $path
+ * The Dropbox path to save the file to.
+ *
+ * @param WriteMode $writeMode
+ * What to do if there's already a file at the given path.
+ *
+ * @return array|null
+ * If `null`, it means the Dropbox server wasn't aware of the
+ * `$uploadId` you gave it.
+ * Otherwise, you get back the
+ * metadata object
+ * for the newly-created file.
+ *
+ * @throws Exception
+ */
+ function chunkedUploadFinish($uploadId, $path, $writeMode)
+ {
+ Checker::argStringNonEmpty("uploadId", $uploadId);
+ Path::checkArgNonRoot("path", $path);
+ WriteMode::checkArg("writeMode", $writeMode);
+
+ $params = array_merge(array("upload_id" => $uploadId), $writeMode->getExtraParams());
+
+ $response = $this->doPost(
+ $this->contentHost,
+ $this->appendFilePath("1/commit_chunked_upload", $path),
+ $params);
+
+ if ($response->statusCode === 404) return null;
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * @param array $params
+ * @param string $data
+ * @return HttpResponse
+ */
+ protected function _chunkedUpload($params, $data)
+ // Marked 'protected' so I can override it in testing.
+ {
+ $url = $this->buildUrlForGetOrPut(
+ $this->contentHost, "1/chunked_upload", $params);
+
+ $curl = $this->mkCurl($url);
+
+ // We can't use CURLOPT_PUT because it wants a stream, but we already have $data in memory.
+ $curl->set(CURLOPT_CUSTOMREQUEST, "PUT");
+ $curl->set(CURLOPT_POSTFIELDS, $data);
+ $curl->addHeader("Content-Type: application/octet-stream");
+
+ $curl->set(CURLOPT_RETURNTRANSFER, true);
+ return $curl->exec();
+ }
+
+ /**
+ * Returns the metadata for whatever file or folder is at the given path.
+ *
+ *
+ * $client = ...;
+ * $md = $client->getMetadata("/Photos/Frog.jpeg");
+ * print_r($md);
+ *
+ *
+ * @param string $path
+ * The Dropbox path to a file or folder (UTF-8).
+ *
+ * @return array|null
+ * If there is a file or folder at the given path, you'll get back the
+ * metadata object
+ * for that file or folder. If not, you'll get back `null`.
+ *
+ * @throws Exception
+ */
+ function getMetadata($path)
+ {
+ Path::checkArg("path", $path);
+
+ return $this->_getMetadata($path, array("list" => "false"));
+ }
+
+ /**
+ * Returns the metadata for whatever file or folder is at the given path and, if it's a folder,
+ * also include the metadata for all the immediate children of that folder.
+ *
+ *
+ * $client = ...;
+ * $md = $client->getMetadataWithChildren("/Photos");
+ * print_r($md);
+ *
+ *
+ * @param string $path
+ * The Dropbox path to a file or folder (UTF-8).
+ *
+ * @return array|null
+ * If there is a file or folder at the given path, you'll get back the
+ * metadata object
+ * for that file or folder, along with all immediate children if it's a folder. If not,
+ * you'll get back `null`.
+ *
+ * @throws Exception
+ */
+ function getMetadataWithChildren($path)
+ {
+ Path::checkArg("path", $path);
+
+ return $this->_getMetadata($path, array("list" => "true", "file_limit" => "25000"));
+ }
+
+ /**
+ * @param string $path
+ * @param array $params
+ * @return array
+ */
+ private function _getMetadata($path, $params)
+ {
+ $response = $this->doGet(
+ $this->apiHost,
+ $this->appendFilePath("1/metadata", $path),
+ $params);
+
+ if ($response->statusCode === 404) return null;
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ $metadata = RequestUtil::parseResponseJson($response->body);
+ if (array_key_exists("is_deleted", $metadata) && $metadata["is_deleted"]) return null;
+ return $metadata;
+ }
+
+ /**
+ * If you've previously retrieved the metadata for a folder and its children, this method will
+ * retrieve updated metadata only if something has changed. This is more efficient than
+ * calling {@link getMetadataWithChildren} if you have a cache of previous results.
+ *
+ *
+ * $client = ...;
+ * $md = $client->getMetadataWithChildren("/Photos");
+ * print_r($md);
+ * assert($md["is_dir"], "expecting \"/Photos\" to be a folder");
+ *
+ * sleep(10);
+ *
+ * // Now see if anything changed...
+ * list($changed, $new_md) = $client->getMetadataWithChildrenIfChanged(
+ * "/Photos", $md["hash"]);
+ * if ($changed) {
+ * echo "Folder changed.\n";
+ * print_r($new_md);
+ * } else {
+ * echo "Folder didn't change.\n";
+ * }
+ *
+ *
+ * @param string $path
+ * The Dropbox path to a folder (UTF-8).
+ *
+ * @param string $previousFolderHash
+ * The "hash" field from the previously retrieved folder metadata.
+ *
+ * @return array
+ * A `list(boolean $changed, array $metadata)`. If the metadata hasn't changed,
+ * you'll get `list(false, null)`. If the metadata of the folder or any of its
+ * children has changed, you'll get `list(true, $newMetadata)`. $metadata is a
+ * metadata object.
+ *
+ * @throws Exception
+ */
+ function getMetadataWithChildrenIfChanged($path, $previousFolderHash)
+ {
+ Path::checkArg("path", $path);
+ Checker::argStringNonEmpty("previousFolderHash", $previousFolderHash);
+
+ $params = array("list" => "true", "file_limit" => "25000", "hash" => $previousFolderHash);
+
+ $response = $this->doGet(
+ $this->apiHost,
+ $this->appendFilePath("1/metadata", $path),
+ $params);
+
+ if ($response->statusCode === 304) return array(false, null);
+ if ($response->statusCode === 404) return array(true, null);
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ $metadata = RequestUtil::parseResponseJson($response->body);
+ if (array_key_exists("is_deleted", $metadata) && $metadata["is_deleted"]) {
+ return array(true, null);
+ }
+ return array(true, $metadata);
+ }
+
+ /**
+ * A way of letting you keep up with changes to files and folders in a user's Dropbox.
+ *
+ * @param string|null $cursor
+ * If this is the first time you're calling this, pass in `null`. Otherwise,
+ * pass in whatever cursor was returned by the previous call.
+ *
+ * @param string|null $pathPrefix
+ * If `null`, you'll get results for the entire folder (either the user's
+ * entire Dropbox or your App Folder). If you set `$path_prefix` to
+ * "/Photos/Vacation", you'll only get results for that path and any files and folders
+ * under it.
+ *
+ * @return array
+ * A delta page, which
+ * contains a list of changes to apply along with a new "cursor" that should be passed into
+ * future `getDelta` calls. If the "reset" field is `true`, you
+ * should clear your local state before applying the changes. If the "has_more" field is
+ * `true`, call `getDelta` immediately to get more results, otherwise
+ * wait a while (at least 5 minutes) before calling `getDelta` again.
+ *
+ * @throws Exception
+ */
+ function getDelta($cursor = null, $pathPrefix = null)
+ {
+ Checker::argStringNonEmptyOrNull("cursor", $cursor);
+ Path::checkArgOrNull("pathPrefix", $pathPrefix);
+
+ $response = $this->doPost($this->apiHost, "1/delta", array(
+ "cursor" => $cursor,
+ "path_prefix" => $pathPrefix));
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Gets the metadata for all the file revisions (up to a limit) for a given path.
+ *
+ * See /revisions.
+ *
+ * @param string path
+ * The Dropbox path that you want file revision metadata for (UTF-8).
+ *
+ * @param int|null limit
+ * The maximum number of revisions to return.
+ *
+ * @return array|null
+ * A list of doGet(
+ $this->apiHost,
+ $this->appendFilePath("1/revisions", $path),
+ array("rev_limit" => $limit));
+
+ if ($response->statusCode === 406) return null;
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Takes a copy of the file at the given revision and saves it over the current copy. This
+ * will create a new revision, but the file contents will match the revision you specified.
+ *
+ * See /restore.
+ *
+ * @param string $path
+ * The Dropbox path of the file to restore (UTF-8).
+ *
+ * @param string $rev
+ * The revision to restore the contents to.
+ *
+ * @return mixed
+ * The metadata
+ * object
+ *
+ * @throws Exception
+ */
+ function restoreFile($path, $rev)
+ {
+ Path::checkArgNonRoot("path", $path);
+ Checker::argStringNonEmpty("rev", $rev);
+
+ $response = $this->doPost(
+ $this->apiHost,
+ $this->appendFilePath("1/restore", $path),
+ array("rev" => $rev));
+
+ if ($response->statusCode === 404) return null;
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Returns metadata for all files and folders whose filename matches the query string.
+ *
+ * See /search.
+ *
+ * @param string $basePath
+ * The path to limit the search to (UTF-8). Pass in "/" to search everything.
+ *
+ * @param string $query
+ * A space-separated list of substrings to search for. A file matches only if it contains
+ * all the substrings.
+ *
+ * @param int|null $limit
+ * The maximum number of results to return.
+ *
+ * @param bool $includeDeleted
+ * Whether to include deleted files in the results.
+ *
+ * @return mixed
+ * A list of doPost(
+ $this->apiHost,
+ $this->appendFilePath("1/search", $basePath),
+ array(
+ "query" => $query,
+ "file_limit" => $limit,
+ "include_deleted" => $includeDeleted,
+ ));
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Creates and returns a public link to a file or folder's "preview page". This link can be
+ * used without authentication. The preview page may contain a thumbnail or some other
+ * preview of the file, along with a download link to download the actual file.
+ *
+ * See /shares.
+ *
+ * @param string $path
+ * The Dropbox path to the file or folder you want to create a shareable link to (UTF-8).
+ *
+ * @return string
+ * The URL of the preview page.
+ *
+ * @throws Exception
+ */
+ function createShareableLink($path)
+ {
+ Path::checkArg("path", $path);
+
+ $response = $this->doPost(
+ $this->apiHost,
+ $this->appendFilePath("1/shares", $path),
+ array(
+ "short_url" => "false",
+ ));
+
+ if ($response->statusCode === 404) return null;
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ $j = RequestUtil::parseResponseJson($response->body);
+ return self::getField($j, "url");
+ }
+
+ /**
+ * Creates and returns a direct link to a file. This link can be used without authentication.
+ * This link will expire in a few hours.
+ *
+ * See /media.
+ *
+ * @param string $path
+ * The Dropbox path to a file or folder (UTF-8).
+ *
+ * @return array
+ * A `list(string $url, \DateTime $expires)` where `$url` is a direct
+ * link to the requested file and `$expires` is a standard PHP
+ * `\DateTime` representing when `$url` will stop working.
+ *
+ * @throws Exception
+ */
+ function createTemporaryDirectLink($path)
+ {
+ Path::checkArgNonRoot("path", $path);
+
+ $response = $this->doPost(
+ $this->apiHost,
+ $this->appendFilePath("1/media", $path));
+
+ if ($response->statusCode === 404) return null;
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ $j = RequestUtil::parseResponseJson($response->body);
+ $url = self::getField($j, "url");
+ $expires = self::parseDateTime(self::getField($j, "expires"));
+ return array($url, $expires);
+ }
+
+ /**
+ * Creates and returns a "copy ref" to a file. A copy ref can be used to copy a file across
+ * different Dropbox accounts without downloading and re-uploading.
+ *
+ * For example: Create a `Client` using the access token from one account and call
+ * `createCopyRef`. Then, create a `Client` using the access token for
+ * another account and call `copyFromCopyRef` using the copy ref. (You need to use
+ * the same app key both times.)
+ *
+ * See /copy_ref.
+ *
+ * @param string path
+ * The Dropbox path of the file or folder you want to create a copy ref for (UTF-8).
+ *
+ * @return string
+ * The copy ref (just a string that you keep track of).
+ *
+ * @throws Exception
+ */
+ function createCopyRef($path)
+ {
+ Path::checkArg("path", $path);
+
+ $response = $this->doGet(
+ $this->apiHost,
+ $this->appendFilePath("1/copy_ref", $path));
+
+ if ($response->statusCode === 404) return null;
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ $j = RequestUtil::parseResponseJson($response->body);
+ return self::getField($j, "copy_ref");
+ }
+
+ /**
+ * Gets a thumbnail image representation of the file at the given path.
+ *
+ * See /thumbnails.
+ *
+ * @param string $path
+ * The path to the file you want a thumbnail for (UTF-8).
+ *
+ * @param string $format
+ * One of the two image formats: "jpeg" or "png".
+ *
+ * @param string $size
+ * One of the predefined image size names, as a string:
+ *
+ *
"xs" - 32x32
+ *
"s" - 64x64
+ *
"m" - 128x128
+ *
"l" - 640x480
+ *
"xl" - 1024x768
+ *
+ *
+ * @return array|null
+ * If the file exists, you'll get `list(array $metadata, string $data)` where
+ * `$metadata` is the file's
+ * metadata object
+ * and $data is the raw data for the thumbnail image. If the file doesn't exist, you'll
+ * get `null`.
+ *
+ * @throws Exception
+ */
+ function getThumbnail($path, $format, $size)
+ {
+ Path::checkArgNonRoot("path", $path);
+ Checker::argString("format", $format);
+ Checker::argString("size", $size);
+ if (!in_array($format, array("jpeg", "png"))) {
+ throw new \InvalidArgumentException("Invalid 'format': ".Util::q($format));
+ }
+ if (!in_array($size, array("xs", "s", "m", "l", "xl"))) {
+ throw new \InvalidArgumentException("Invalid 'size': ".Util::q($size));
+ }
+
+ $url = $this->buildUrlForGetOrPut(
+ $this->contentHost,
+ $this->appendFilePath("1/thumbnails", $path),
+ array("size" => $size, "format" => $format));
+
+ $curl = $this->mkCurl($url);
+ $metadataCatcher = new DropboxMetadataHeaderCatcher($curl->handle);
+
+ $curl->set(CURLOPT_RETURNTRANSFER, true);
+ $response = $curl->exec();
+
+ if ($response->statusCode === 404) return null;
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ $metadata = $metadataCatcher->getMetadata();
+ return array($metadata, $response->body);
+ }
+
+ /**
+ * Copies a file or folder to a new location
+ *
+ * See /fileops/copy.
+ *
+ * @param string $fromPath
+ * The Dropbox path of the file or folder you want to copy (UTF-8).
+ *
+ * @param string $toPath
+ * The destination Dropbox path (UTF-8).
+ *
+ * @return mixed
+ * The metadata
+ * object for the new file or folder.
+ *
+ * @throws Exception
+ */
+ function copy($fromPath, $toPath)
+ {
+ Path::checkArg("fromPath", $fromPath);
+ Path::checkArgNonRoot("toPath", $toPath);
+
+ $response = $this->doPost(
+ $this->apiHost,
+ "1/fileops/copy",
+ array(
+ "root" => "auto",
+ "from_path" => $fromPath,
+ "to_path" => $toPath,
+ ));
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Creates a file or folder based on an existing copy ref (possibly from a different Dropbox
+ * account).
+ *
+ * See /fileops/copy.
+ *
+ * @param string $copyRef
+ * A copy ref obtained via the {@link createCopyRef()} call.
+ *
+ * @param string $toPath
+ * The Dropbox path you want to copy the file or folder to (UTF-8).
+ *
+ * @return mixed
+ * The metadata
+ * object for the new file or folder.
+ *
+ * @throws Exception
+ */
+ function copyFromCopyRef($copyRef, $toPath)
+ {
+ Checker::argStringNonEmpty("copyRef", $copyRef);
+ Path::checkArgNonRoot("toPath", $toPath);
+
+ $response = $this->doPost(
+ $this->apiHost,
+ "1/fileops/copy",
+ array(
+ "root" => "auto",
+ "from_copy_ref" => $copyRef,
+ "to_path" => $toPath,
+ )
+ );
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Creates a folder.
+ *
+ * See /fileops/create_folder.
+ *
+ * @param string $path
+ * The Dropbox path at which to create the folder (UTF-8).
+ *
+ * @return array|null
+ * If successful, you'll get back the
+ * metadata object
+ * for the newly-created folder. If not successful, you'll get `null`.
+ *
+ * @throws Exception
+ */
+ function createFolder($path)
+ {
+ Path::checkArgNonRoot("path", $path);
+
+ $response = $this->doPost(
+ $this->apiHost,
+ "1/fileops/create_folder",
+ array(
+ "root" => "auto",
+ "path" => $path,
+ ));
+
+ if ($response->statusCode === 403) return null;
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Deletes a file or folder
+ *
+ * See /fileops/delete.
+ *
+ * @param string $path
+ * The Dropbox path of the file or folder to delete (UTF-8).
+ *
+ * @return mixed
+ * The metadata
+ * object for the deleted file or folder.
+ *
+ * @throws Exception
+ */
+ function delete($path)
+ {
+ Path::checkArgNonRoot("path", $path);
+
+ $response = $this->doPost(
+ $this->apiHost,
+ "1/fileops/delete",
+ array(
+ "root" => "auto",
+ "path" => $path,
+ ));
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Moves a file or folder to a new location.
+ *
+ * See /fileops/move.
+ *
+ * @param string $fromPath
+ * The source Dropbox path (UTF-8).
+ *
+ * @param string $toPath
+ * The destination Dropbox path (UTF-8).
+ *
+ * @return mixed
+ * The metadata
+ * object for the destination file or folder.
+ *
+ * @throws Exception
+ */
+ function move($fromPath, $toPath)
+ {
+ Path::checkArgNonRoot("fromPath", $fromPath);
+ Path::checkArgNonRoot("toPath", $toPath);
+
+ $response = $this->doPost(
+ $this->apiHost,
+ "1/fileops/move",
+ array(
+ "root" => "auto",
+ "from_path" => $fromPath,
+ "to_path" => $toPath,
+ ));
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ return RequestUtil::parseResponseJson($response->body);
+ }
+
+ /**
+ * Build a URL for making a GET or PUT request. Will add the "locale"
+ * parameter.
+ *
+ * @param string $host
+ * Either the "API" or "API content" hostname from {@link getHost()}.
+ * @param string $path
+ * The "path" part of the URL. For example, "/account/info".
+ * @param array|null $params
+ * URL parameters. For POST requests, do not put the parameters here.
+ * Include them in the request body instead.
+ *
+ * @return string
+ */
+ function buildUrlForGetOrPut($host, $path, $params = null)
+ {
+ return RequestUtil::buildUrlForGetOrPut($this->userLocale, $host, $path, $params);
+ }
+
+ /**
+ * Perform an OAuth-2-authorized GET request to the Dropbox API. Will automatically
+ * fill in "User-Agent" and "locale" as well.
+ *
+ * @param string $host
+ * Either the "API" or "API content" hostname from {@link getHost()}.
+ * @param string $path
+ * The "path" part of the URL. For example, "/account/info".
+ * @param array|null $params
+ * GET parameters.
+ * @return HttpResponse
+ *
+ * @throws Exception
+ */
+ function doGet($host, $path, $params = null)
+ {
+ Checker::argString("host", $host);
+ Checker::argString("path", $path);
+ return RequestUtil::doGet($this->clientIdentifier, $this->accessToken, $this->userLocale,
+ $host, $path, $params);
+ }
+
+ /**
+ * Perform an OAuth-2-authorized POST request to the Dropbox API. Will automatically
+ * fill in "User-Agent" and "locale" as well.
+ *
+ * @param string $host
+ * Either the "API" or "API content" hostname from {@link getHost()}.
+ * @param string $path
+ * The "path" part of the URL. For example, "/commit_chunked_upload".
+ * @param array|null $params
+ * POST parameters.
+ * @return HttpResponse
+ *
+ * @throws Exception
+ */
+ function doPost($host, $path, $params = null)
+ {
+ Checker::argString("host", $host);
+ Checker::argString("path", $path);
+ return RequestUtil::doPost($this->clientIdentifier, $this->accessToken, $this->userLocale,
+ $host, $path, $params);
+ }
+
+ /**
+ * Create a {@link Curl} object that is pre-configured with {@link getClientIdentifier()},
+ * and the proper OAuth 2 "Authorization" header.
+ *
+ * @param string $url
+ * Generate this URL using {@link buildUrl()}.
+ *
+ * @return Curl
+ */
+ function mkCurl($url)
+ {
+ return RequestUtil::mkCurlWithOAuth($this->clientIdentifier, $url, $this->accessToken);
+ }
+
+ /**
+ * Parses date/time strings returned by the Dropbox API. The Dropbox API returns date/times
+ * formatted like: `"Sat, 21 Aug 2010 22:31:20 +0000"`.
+ *
+ * @param string $apiDateTimeString
+ * A date/time string returned by the API.
+ *
+ * @return \DateTime
+ * A standard PHP `\DateTime` instance.
+ *
+ * @throws Exception_BadResponse
+ * Thrown if `$apiDateTimeString` isn't correctly formatted.
+ */
+ static function parseDateTime($apiDateTimeString)
+ {
+ $dt = \DateTime::createFromFormat(self::$dateTimeFormat, $apiDateTimeString);
+ if ($dt === false) throw new Exception_BadResponse(
+ "Bad date/time from server: ".Util::q($apiDateTimeString));
+ return $dt;
+ }
+
+ private static $dateTimeFormat = "D, d M Y H:i:s T";
+
+ /**
+ * @internal
+ */
+ static function getField($j, $fieldName)
+ {
+ if (!array_key_exists($fieldName, $j)) throw new Exception_BadResponse(
+ "missing field \"$fieldName\" in ".Util::q($j));
+ return $j[$fieldName];
+ }
+
+ /**
+ * Given an OAuth 2 access token, returns `null` if it is well-formed (though
+ * not necessarily valid). Otherwise, returns a string describing what's wrong with it.
+ *
+ * @param string $s
+ *
+ * @return string
+ */
+ static function getAccessTokenError($s)
+ {
+ if ($s === null) return "can't be null";
+ if (strlen($s) === 0) return "can't be empty";
+ if (preg_match('@[^-=_~/A-Za-z0-9\.\+]@', $s) === 1) return "contains invalid character";
+ return null;
+ }
+
+ /**
+ * @internal
+ */
+ static function checkAccessTokenArg($argName, $accessToken)
+ {
+ $error = self::getAccessTokenError($accessToken);
+ if ($error !== null) throw new \InvalidArgumentException("'$argName' invalid: $error");
+ }
+
+ /**
+ * @internal
+ */
+ static function getClientIdentifierError($s)
+ {
+ if ($s === null) return "can't be null";
+ if (strlen($s) === 0) return "can't be empty";
+ if (preg_match('@[\x00-\x1f\x7f]@', $s) === 1) return "contains control character";
+ return null;
+ }
+
+ /**
+ * @internal
+ */
+ static function checkClientIdentifierArg($argName, $accessToken)
+ {
+ $error = self::getClientIdentifierError($accessToken);
+ if ($error !== null) throw new \InvalidArgumentException("'$argName' invalid: $error");
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Curl.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Curl.php
new file mode 100644
index 0000000..dcfe1fd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Curl.php
@@ -0,0 +1,126 @@
+handle = curl_init($url);
+
+ // NOTE: Though we turn on all the correct SSL settings, many PHP installations
+ // don't respect these settings. Run "examples/test-ssl.php" to run some basic
+ // SSL tests to see how well your PHP implementation behaves.
+
+ // Use our own certificate list.
+ $this->set(CURLOPT_SSL_VERIFYPEER, true); // Enforce certificate validation
+ $this->set(CURLOPT_SSL_VERIFYHOST, 2); // Enforce hostname validation
+
+ // Force the use of TLS (SSL v2 and v3 are not secure).
+ // TODO: Use "CURL_SSLVERSION_TLSv1" instead of "1" once we can rely on PHP 5.5+.
+ $this->set(CURLOPT_SSLVERSION, 1);
+
+ // Limit the set of ciphersuites used.
+ global $sslCiphersuiteList;
+ if ($sslCiphersuiteList !== null) {
+ $this->set(CURLOPT_SSL_CIPHER_LIST, $sslCiphersuiteList);
+ }
+
+ list($rootCertsFilePath, $rootCertsFolderPath) = RootCertificates::getPaths();
+ // Certificate file.
+ $this->set(CURLOPT_CAINFO, $rootCertsFilePath);
+ // Certificate folder. If not specified, some PHP installations will use
+ // the system default, even when CURLOPT_CAINFO is specified.
+ $this->set(CURLOPT_CAPATH, $rootCertsFolderPath);
+
+ // Limit vulnerability surface area. Supported in cURL 7.19.4+
+ if (defined('CURLOPT_PROTOCOLS')) $this->set(CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);
+ if (defined('CURLOPT_REDIR_PROTOCOLS')) $this->set(CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS);
+ }
+
+ /**
+ * @param string $header
+ */
+ function addHeader($header)
+ {
+ $this->headers[] = $header;
+ }
+
+ function exec()
+ {
+ $this->set(CURLOPT_HTTPHEADER, $this->headers);
+
+ $body = curl_exec($this->handle);
+ if ($body === false) {
+ throw new Exception_NetworkIO("Error executing HTTP request: " . curl_error($this->handle));
+ }
+
+ $statusCode = curl_getinfo($this->handle, CURLINFO_HTTP_CODE);
+
+ return new HttpResponse($statusCode, $body);
+ }
+
+ /**
+ * @param int $option
+ * @param mixed $value
+ */
+ function set($option, $value)
+ {
+ curl_setopt($this->handle, $option, $value);
+ }
+
+ function __destruct()
+ {
+ curl_close($this->handle);
+ }
+}
+
+// Different cURL SSL backends use different names for ciphersuites.
+$curlVersion = \curl_version();
+$curlSslBackend = $curlVersion['ssl_version'];
+if (Util::startsWith($curlSslBackend, "NSS/")) {
+ // Can't figure out how to reliably set ciphersuites for NSS.
+ $sslCiphersuiteList = null;
+}
+else {
+ // Use the OpenSSL names for all other backends. We may have to
+ // refine this if users report errors.
+ $sslCiphersuiteList =
+ 'ECDHE-RSA-AES256-GCM-SHA384:'.
+ 'ECDHE-RSA-AES128-GCM-SHA256:'.
+ 'ECDHE-RSA-AES256-SHA384:'.
+ 'ECDHE-RSA-AES128-SHA256:'.
+ 'ECDHE-RSA-AES256-SHA:'.
+ 'ECDHE-RSA-AES128-SHA:'.
+ 'ECDHE-RSA-RC4-SHA:'.
+ 'DHE-RSA-AES256-GCM-SHA384:'.
+ 'DHE-RSA-AES128-GCM-SHA256:'.
+ 'DHE-RSA-AES256-SHA256:'.
+ 'DHE-RSA-AES128-SHA256:'.
+ 'DHE-RSA-AES256-SHA:'.
+ 'DHE-RSA-AES128-SHA:'.
+ 'AES256-GCM-SHA384:'.
+ 'AES128-GCM-SHA256:'.
+ 'AES256-SHA256:'.
+ 'AES128-SHA256:'.
+ 'AES256-SHA:'.
+ 'AES128-SHA';
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/CurlStreamRelay.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/CurlStreamRelay.php
new file mode 100644
index 0000000..c42f18a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/CurlStreamRelay.php
@@ -0,0 +1,45 @@
+outStream = $outStream;
+ $this->errorData = array();
+ $isError = null;
+ curl_setopt($ch, CURLOPT_WRITEFUNCTION, array($this, 'writeData'));
+ }
+
+ function writeData($ch, $data)
+ {
+ if ($this->isError === null) {
+ $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+ $this->isError = ($statusCode !== 200);
+ }
+
+ if ($this->isError) {
+ $this->errorData[] = $data;
+ } else {
+ fwrite($this->outStream, $data);
+ }
+
+ return strlen($data);
+ }
+
+ function getErrorBody()
+ {
+ return implode($this->errorData);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/DeserializeException.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/DeserializeException.php
new file mode 100644
index 0000000..bb2fa23
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/DeserializeException.php
@@ -0,0 +1,19 @@
+skippedFirstLine) {
+ $this->skippedFirstLine = true;
+ return strlen($header);
+ }
+
+ // If we've encountered an error on a previous callback, then there's nothing left to do.
+ if ($this->error !== null) {
+ return strlen($header);
+ }
+
+ // case-insensitive starts-with check.
+ $headerValue = Util::stripPrefix($header, "x-dropbox-metadata:");
+ if ($headerValue === null) {
+ return strlen($header);
+ }
+
+ if ($this->metadata !== null) {
+ $this->error = "Duplicate X-Dropbox-Metadata header";
+ return strlen($header);
+ }
+
+ $parsed = json_decode($headerValue, true, 10);
+
+ if ($parsed === null) {
+ $this->error = "Bad JSON in X-Dropbox-Metadata header";
+ return strlen($header);
+ }
+
+ $this->metadata = $parsed;
+ return strlen($header);
+ }
+
+ function getMetadata()
+ {
+ if ($this->error !== null) {
+ throw new Exception_BadResponse($this->error);
+ }
+ if ($this->metadata === null) {
+ throw new Exception_BadResponse("Missing X-Dropbox-Metadata header");
+ }
+ return $this->metadata;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Exception.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Exception.php
new file mode 100644
index 0000000..fcd0b61
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Exception.php
@@ -0,0 +1,16 @@
+statusCode = $statusCode;
+ }
+
+ /**
+ * The HTTP status code returned by the Dropbox server.
+ *
+ * @return int
+ */
+ public function getStatusCode()
+ {
+ return $this->statusCode;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Exception/InvalidAccessToken.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Exception/InvalidAccessToken.php
new file mode 100644
index 0000000..bd9ac9b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Exception/InvalidAccessToken.php
@@ -0,0 +1,18 @@
+api = $api;
+ $this->content = $content;
+ $this->web = $web;
+ }
+
+ /**
+ * Returns the host name of the main Dropbox API server.
+ * The default is "api.dropbox.com".
+ *
+ * @return string
+ */
+ function getApi() { return $this->api; }
+
+ /**
+ * Returns the host name of the Dropbox API content server.
+ * The default is "api-content.dropbox.com".
+ *
+ * @return string
+ */
+ function getContent() { return $this->content; }
+
+ /**
+ * Returns the host name of the Dropbox web server. Used during user authorization.
+ * The default is "www.dropbox.com".
+ *
+ * @return string
+ */
+ function getWeb() { return $this->web; }
+
+ /**
+ * Check that a function argument is of type `Host`.
+ *
+ * @internal
+ */
+ static function checkArg($argName, $argValue)
+ {
+ if (!($argValue instanceof self)) Checker::throwError($argName, $argValue, __CLASS__);
+ }
+
+ /**
+ * Check that a function argument is either `null` or of type
+ * `Host`.
+ *
+ * @internal
+ */
+ static function checkArgOrNull($argName, $argValue)
+ {
+ if ($argValue === null) return;
+ if (!($argValue instanceof self)) Checker::throwError($argName, $argValue, __CLASS__);
+ }
+
+ /**
+ * Loads a Host object from the 'auth_host' and 'host_suffix' fields of a JSON object.
+ * If those fields aren't present, return `null`.
+ *
+ * @return Host|null
+ *
+ * @throws HostLoadException
+ */
+ static function loadFromJson($jsonObj)
+ {
+ // Check for the optional 'auth_host' and 'host_suffix' fields.
+ $authHost = null;
+ if (array_key_exists('auth_host', $jsonObj)) {
+ $authHost = $jsonObj["auth_host"];
+ if (!is_string($authHost)) {
+ throw new HostLoadException("Optional field \"auth_host\" must be a string");
+ }
+ }
+ $hostSuffix = null;
+ if (array_key_exists('host_suffix', $jsonObj)) {
+ $hostSuffix = $jsonObj["host_suffix"];
+ if (!is_string($hostSuffix)) {
+ throw new HostLoadException("Optional field \"host_suffix\" must be a string");
+ }
+ }
+
+ if ($authHost === null && $hostSuffix === null) return null;
+
+ if ($authHost === null) {
+ throw new HostLoadException("Can't provide \"host_suffix\" without providing \"auth_host\".");
+ }
+ if ($hostSuffix === null) {
+ throw new HostLoadException("Can't provide \"auth_host\" without providing \"host_suffix\".");
+ }
+ $api = "api".$hostSuffix;
+ $content = "content".$hostSuffix;
+ $web = $authHost;
+ return new Host($api, $content, $web);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/HostLoadException.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/HostLoadException.php
new file mode 100644
index 0000000..f3ac39f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/HostLoadException.php
@@ -0,0 +1,18 @@
+statusCode = $statusCode;
+ $this->body = $body;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/OAuth1AccessToken.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/OAuth1AccessToken.php
new file mode 100644
index 0000000..0d3517e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/OAuth1AccessToken.php
@@ -0,0 +1,61 @@
+key; }
+
+ /** @var string */
+ private $key;
+
+ /**
+ * The OAuth 1 access token secret.
+ *
+ * Make sure that this is kept a secret. Someone with your app secret can impesonate your
+ * application. People sometimes ask for help on the Dropbox API forums and
+ * copy/paste code that includes their app secret. Do not do that.
+ *
+ * @return string
+ */
+ function getSecret() { return $this->secret; }
+
+ /** @var secret */
+ private $secret;
+
+ /**
+ * Constructor.
+ *
+ * @param string $key
+ * {@link getKey()}
+ * @param string $secret
+ * {@link getSecret()}
+ */
+ function __construct($key, $secret)
+ {
+ AppInfo::checkKeyArg($key);
+ AppInfo::checkSecretArg($secret);
+
+ $this->key = $key;
+ $this->secret = $secret;
+ }
+
+ /**
+ * Use this to check that a function argument is of type `AppInfo`
+ *
+ * @internal
+ */
+ static function checkArg($argName, $argValue)
+ {
+ if (!($argValue instanceof self)) Checker::throwError($argName, $argValue, __CLASS__);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/OAuth1Upgrader.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/OAuth1Upgrader.php
new file mode 100644
index 0000000..d012ae6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/OAuth1Upgrader.php
@@ -0,0 +1,104 @@
+
+ * use \Dropbox as dbx;
+ * $appInfo = dbx\AppInfo::loadFromJsonFile(...);
+ * $clientIdentifier = "my-app/1.0";
+ * $oauth1AccessToken = dbx\OAuth1AccessToken(...);
+ *
+ * $upgrader = new dbx\OAuth1AccessTokenUpgrader($appInfo, $clientIdentifier, ...);
+ * $oauth2AccessToken = $upgrader->getOAuth2AccessToken($oauth1AccessToken);
+ * $upgrader->disableOAuth1AccessToken($oauth1AccessToken);
+ *
+ */
+class OAuth1Upgrader extends AuthBase
+{
+ /**
+ * Given an existing active OAuth 1 access token, make a Dropbox API call to get a new OAuth 2
+ * access token that represents the same user and app.
+ *
+ * See /oauth2/token_from_oauth1.
+ *
+ * @param OAuth1AccessToken $oauth1AccessToken
+ *
+ * @return string
+ * The OAuth 2 access token.
+ *
+ * @throws Exception
+ */
+ function createOAuth2AccessToken($oauth1AccessToken)
+ {
+ OAuth1AccessToken::checkArg("oauth1AccessToken", $oauth1AccessToken);
+
+ $response = self::doPost($oauth1AccessToken, "1/oauth2/token_from_oauth1");
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ $parts = RequestUtil::parseResponseJson($response->body);
+
+ if (!array_key_exists('token_type', $parts) || !is_string($parts['token_type'])) {
+ throw new Exception_BadResponse("Missing \"token_type\" field.");
+ }
+ $tokenType = $parts['token_type'];
+ if (!array_key_exists('access_token', $parts) || !is_string($parts['access_token'])) {
+ throw new Exception_BadResponse("Missing \"access_token\" field.");
+ }
+ $accessToken = $parts['access_token'];
+
+ if ($tokenType !== "Bearer" && $tokenType !== "bearer") {
+ throw new Exception_BadResponse("Unknown \"token_type\"; expecting \"Bearer\", got "
+ . Util::q($tokenType));
+ }
+
+ return $accessToken;
+ }
+
+ /**
+ * Make a Dropbox API call to disable the given OAuth 1 access token.
+ *
+ * See /disable_access_token.
+ *
+ * @param OAuth1AccessToken $oauth1AccessToken
+ *
+ * @throws Exception
+ */
+ function disableOAuth1AccessToken($oauth1AccessToken)
+ {
+ OAuth1AccessToken::checkArg("oauth1AccessToken", $oauth1AccessToken);
+
+ $response = self::doPost($oauth1AccessToken, "1/disable_access_token");
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+ }
+
+ /**
+ * @param OAuth1AccessToken $oauth1AccessToken
+ * @param string $path
+ *
+ * @return HttpResponse
+ *
+ * @throws Exception
+ */
+ private function doPost($oauth1AccessToken, $path)
+ {
+ // Construct the OAuth 1 header.
+ $signature = rawurlencode($this->appInfo->getSecret()) . "&" . rawurlencode($oauth1AccessToken->getSecret());
+ $authHeaderValue = "OAuth oauth_signature_method=\"PLAINTEXT\""
+ . ", oauth_consumer_key=\"" . rawurlencode($this->appInfo->getKey()) . "\""
+ . ", oauth_token=\"" . rawurlencode($oauth1AccessToken->getKey()) . "\""
+ . ", oauth_signature=\"" . $signature . "\"";
+
+ return RequestUtil::doPostWithSpecificAuth(
+ $this->clientIdentifier, $authHeaderValue, $this->userLocale,
+ $this->appInfo->getHost()->getApi(),
+ $path,
+ null);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Path.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Path.php
new file mode 100644
index 0000000..45281f0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/Path.php
@@ -0,0 +1,171 @@
+
+ * Path::getName("/Misc/Notes.txt") // "Notes.txt"
+ * Path::getName("/Misc") // "Misc"
+ * Path::getName("/") // null
+ *
+ *
+ * @param string $path
+ * The full path you want to get the last component of.
+ *
+ * @return null|string
+ * The last component of `$path` or `null` if the given
+ * `$path` was `"/"`.
+ */
+ static function getName($path)
+ {
+ Checker::argStringNonEmpty("path", $path);
+
+ if ($path[0] !== "/") {
+ throw new \InvalidArgumentException("'path' must start with \"/\"");
+ }
+ $l = strlen($path);
+ if ($l === 1) return null;
+ if ($path[$l-1] === "/") {
+ throw new \InvalidArgumentException("'path' must not end with \"/\"");
+ }
+
+ $lastSlash = strrpos($path, "/");
+ return substr($path, $lastSlash+1);
+ }
+
+ /**
+ * @internal
+ *
+ * @param string $argName
+ * @param mixed $value
+ * @throws \InvalidArgumentException
+ */
+ static function checkArg($argName, $value)
+ {
+ Checker::argStringNonEmpty($argName, $value);
+
+ $error = self::findError($value);
+ if ($error !== null) throw new \InvalidArgumentException("'$argName': bad path: $error: ".Util::q($value));
+ }
+
+ /**
+ * @internal
+ *
+ * @param string $argName
+ * @param mixed $value
+ * @throws \InvalidArgumentException
+ */
+ static function checkArgOrNull($argName, $value)
+ {
+ if ($value === null) return;
+ self::checkArg($argName, $value);
+ }
+
+ /**
+ * @internal
+ *
+ * @param string $argName
+ * @param mixed $value
+ * @throws \InvalidArgumentException
+ */
+ static function checkArgNonRoot($argName, $value)
+ {
+ Checker::argStringNonEmpty($argName, $value);
+
+ $error = self::findErrorNonRoot($value);
+ if ($error !== null) throw new \InvalidArgumentException("'$argName': bad path: $error: ".Util::q($value));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/RequestUtil.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/RequestUtil.php
new file mode 100644
index 0000000..d381d0e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/RequestUtil.php
@@ -0,0 +1,298 @@
+ $value) {
+ Checker::argStringNonEmpty("key in 'params'", $key);
+ if ($value !== null) {
+ if (is_bool($value)) {
+ $value = $value ? "true" : "false";
+ }
+ else if (is_int($value)) {
+ $value = (string) $value;
+ }
+ else if (!is_string($value)) {
+ throw new \InvalidArgumentException("params['$key'] is not a string, int, or bool");
+ }
+ $url .= "&" . rawurlencode($key) . "=" . rawurlencode($value);
+ }
+ }
+ }
+ return $url;
+ }
+
+ /**
+ * @param string $host
+ * @param string $path
+ * @return string
+ */
+ static function buildUri($host, $path)
+ {
+ Checker::argStringNonEmpty("host", $host);
+ Checker::argStringNonEmpty("path", $path);
+ return "https://" . $host . "/" . $path;
+ }
+
+ /**
+ * @param string $clientIdentifier
+ * @param string $url
+ * @return Curl
+ */
+ static function mkCurl($clientIdentifier, $url)
+ {
+ $curl = new Curl($url);
+
+ $curl->set(CURLOPT_CONNECTTIMEOUT, 10);
+
+ // If the transfer speed is below 1kB/sec for 10 sec, abort.
+ $curl->set(CURLOPT_LOW_SPEED_LIMIT, 1024);
+ $curl->set(CURLOPT_LOW_SPEED_TIME, 10);
+
+ //$curl->set(CURLOPT_VERBOSE, true); // For debugging.
+ // TODO: Figure out how to encode clientIdentifier (urlencode?)
+ $curl->addHeader("User-Agent: ".$clientIdentifier." Dropbox-PHP-SDK/".SdkVersion::VERSION);
+
+ return $curl;
+ }
+
+ /**
+ * @param string $clientIdentifier
+ * @param string $url
+ * @param string $authHeaderValue
+ * @return Curl
+ */
+ static function mkCurlWithAuth($clientIdentifier, $url, $authHeaderValue)
+ {
+ $curl = self::mkCurl($clientIdentifier, $url);
+ $curl->addHeader("Authorization: $authHeaderValue");
+ return $curl;
+ }
+
+ /**
+ * @param string $clientIdentifier
+ * @param string $url
+ * @param string $accessToken
+ * @return Curl
+ */
+ static function mkCurlWithOAuth($clientIdentifier, $url, $accessToken)
+ {
+ return self::mkCurlWithAuth($clientIdentifier, $url, "Bearer $accessToken");
+ }
+
+ static function buildPostBody($params)
+ {
+ if ($params === null) return "";
+
+ $pairs = array();
+ foreach ($params as $key => $value) {
+ Checker::argStringNonEmpty("key in 'params'", $key);
+ if ($value !== null) {
+ if (is_bool($value)) {
+ $value = $value ? "true" : "false";
+ }
+ else if (is_int($value)) {
+ $value = (string) $value;
+ }
+ else if (!is_string($value)) {
+ throw new \InvalidArgumentException("params['$key'] is not a string, int, or bool");
+ }
+ $pairs[] = rawurlencode($key) . "=" . rawurlencode((string) $value);
+ }
+ }
+ return implode("&", $pairs);
+ }
+
+ /**
+ * @param string $clientIdentifier
+ * @param string $accessToken
+ * @param string $userLocale
+ * @param string $host
+ * @param string $path
+ * @param array|null $params
+ *
+ * @return HttpResponse
+ *
+ * @throws Exception
+ */
+ static function doPost($clientIdentifier, $accessToken, $userLocale, $host, $path, $params = null)
+ {
+ Checker::argStringNonEmpty("accessToken", $accessToken);
+
+ $url = self::buildUri($host, $path);
+
+ if ($params === null) $params = array();
+ $params['locale'] = $userLocale;
+
+ $curl = self::mkCurlWithOAuth($clientIdentifier, $url, $accessToken);
+ $curl->set(CURLOPT_POST, true);
+ $curl->set(CURLOPT_POSTFIELDS, self::buildPostBody($params));
+
+ $curl->set(CURLOPT_RETURNTRANSFER, true);
+ return $curl->exec();
+ }
+
+ /**
+ * @param string $clientIdentifier
+ * @param string $authHeaderValue
+ * @param string $userLocale
+ * @param string $host
+ * @param string $path
+ * @param array|null $params
+ *
+ * @return HttpResponse
+ *
+ * @throws Exception
+ */
+ static function doPostWithSpecificAuth($clientIdentifier, $authHeaderValue, $userLocale, $host, $path, $params = null)
+ {
+ Checker::argStringNonEmpty("authHeaderValue", $authHeaderValue);
+
+ $url = self::buildUri($host, $path);
+
+ if ($params === null) $params = array();
+ $params['locale'] = $userLocale;
+
+ $curl = self::mkCurlWithAuth($clientIdentifier, $url, $authHeaderValue);
+ $curl->set(CURLOPT_POST, true);
+ $curl->set(CURLOPT_POSTFIELDS, self::buildPostBody($params));
+
+ $curl->set(CURLOPT_RETURNTRANSFER, true);
+ return $curl->exec();
+ }
+
+ /**
+ * @param string $clientIdentifier
+ * @param string $accessToken
+ * @param string $userLocale
+ * @param string $host
+ * @param string $path
+ * @param array|null $params
+ *
+ * @return HttpResponse
+ *
+ * @throws Exception
+ */
+ static function doGet($clientIdentifier, $accessToken, $userLocale, $host, $path, $params = null)
+ {
+ Checker::argStringNonEmpty("accessToken", $accessToken);
+
+ $url = self::buildUrlForGetOrPut($userLocale, $host, $path, $params);
+
+ $curl = self::mkCurlWithOAuth($clientIdentifier, $url, $accessToken);
+ $curl->set(CURLOPT_HTTPGET, true);
+ $curl->set(CURLOPT_RETURNTRANSFER, true);
+
+ return $curl->exec();
+ }
+
+ /**
+ * @param string $responseBody
+ * @return mixed
+ * @throws Exception_BadResponse
+ */
+ static function parseResponseJson($responseBody)
+ {
+ $obj = json_decode($responseBody, true, 10);
+ if ($obj === null) {
+ throw new Exception_BadResponse("Got bad JSON from server: $responseBody");
+ }
+ return $obj;
+ }
+
+ static function unexpectedStatus($httpResponse)
+ {
+ $sc = $httpResponse->statusCode;
+
+ $message = "HTTP status $sc";
+ if (is_string($httpResponse->body)) {
+ // TODO: Maybe only include the first ~200 chars of the body?
+ $message .= "\n".$httpResponse->body;
+ }
+
+ if ($sc === 400) return new Exception_BadRequest($message);
+ if ($sc === 401) return new Exception_InvalidAccessToken($message);
+ if ($sc === 500 || $sc === 502) return new Exception_ServerError($message);
+ if ($sc === 503) return new Exception_RetryLater($message);
+ if ($sc === 507) return new Exception_OverQuota($message);
+
+ return new Exception_BadResponseCode("Unexpected $message", $sc);
+ }
+
+ /**
+ * @param int $maxRetries
+ * The number of times to retry it the action if it fails with one of the transient
+ * API errors. A value of 1 means we'll try the action once and if it fails, we
+ * will retry once.
+ *
+ * @param callable $action
+ * The the action you want to retry.
+ *
+ * @return mixed
+ * Whatever is returned by the $action callable.
+ */
+ static function runWithRetry($maxRetries, $action)
+ {
+ Checker::argNat("maxRetries", $maxRetries);
+
+ $retryDelay = 1;
+ $numRetries = 0;
+ while (true) {
+ try {
+ return $action();
+ }
+ // These exception types are the ones we think are possibly transient errors.
+ catch (Exception_NetworkIO $ex) {
+ $savedEx = $ex;
+ }
+ catch (Exception_ServerError $ex) {
+ $savedEx = $ex;
+ }
+ catch (Exception_RetryLater $ex) {
+ $savedEx = $ex;
+ }
+
+ // We maxed out our retries. Propagate the last exception we got.
+ if ($numRetries >= $maxRetries) throw $savedEx;
+
+ $numRetries++;
+ sleep($retryDelay);
+ $retryDelay *= 2; // Exponential back-off.
+ }
+ throw new \RuntimeException("unreachable");
+ }
+
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/RootCertificates.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/RootCertificates.php
new file mode 100644
index 0000000..c5f251b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/RootCertificates.php
@@ -0,0 +1,144 @@
+getMessage());
+ }
+ }
+ else {
+ if (substr(__DIR__, 0, 7) === 'phar://') {
+ throw new \Exception("The code appears to be running in a PHAR. You need to call \\Dropbox\\RootCertificates\\useExternalPaths() before making any API calls.");
+ }
+ $file = __DIR__.self::$originalPath;
+ $folder = \dirname($file);
+ }
+ self::$paths = array($file, $folder);
+ }
+
+ return self::$paths;
+ }
+
+ /**
+ * @param string $baseFolder
+ *
+ * @return string
+ */
+ private static function createExternalCaFolder($baseFolder)
+ {
+ // This is hacky, but I can't find a simple way to do this.
+
+ // This process isn't atomic, so give it three tries.
+ for ($i = 0; $i < 3; $i++) {
+ $path = \tempnam($baseFolder, "dropbox-php-sdk-trusted-certs-empty-dir");
+ if ($path === false) {
+ throw new \Exception("Couldn't create temp file in folder ".Util::q($baseFolder).".");
+ }
+ if (!\unlink($path)) {
+ throw new \Exception("Couldn't remove temp file to make way for temp dir: ".Util::q($path));
+ }
+ // TODO: Figure out how to make the folder private on Windows. The '700' only works on Unix.
+ if (!\mkdir($path, 700)) {
+ // Someone snuck in between the unlink() and the mkdir() and stole our path.
+ throw new \Exception("Couldn't create temp dir: ".Util::q($path));
+ }
+ \register_shutdown_function(function() use ($path) {
+ \rmdir($path);
+ });
+ return $path;
+ }
+
+ throw new \Exception("Unable to create temp dir in ".Util::q($baseFolder).", there's always something in the way.");
+ }
+
+ /**
+ * @param string $baseFolder
+ *
+ * @return string
+ */
+ private static function createExternalCaFile($baseFolder)
+ {
+ $path = \tempnam($baseFolder, "dropbox-php-sdk-trusted-certs");
+ if ($path === false) {
+ throw new \Exception("Couldn't create temp file in folder ".Util::q($baseFolder).".");
+ }
+ \register_shutdown_function(function() use ($path) {
+ \unlink($path);
+ });
+
+ // NOTE: Can't use the standard PHP copy(). That would clobber the locked-down
+ // permissions set by tempnam().
+ self::copyInto(__DIR__.self::$originalPath, $path);
+
+ return $path;
+ }
+
+ /**
+ * @param string $src
+ * @param string $dest
+ */
+ private static function copyInto($src, $dest)
+ {
+ $srcFd = \fopen($src, "r");
+ if ($srcFd === false) {
+ throw new \Exception("Couldn't open " . Util::q($src) . " for reading.");
+ }
+ $destFd = \fopen($dest, "w");
+ if ($destFd === false) {
+ \fclose($srcFd);
+ throw new \Exception("Couldn't open " . Util::q($dest) . " for writing.");
+ }
+
+ \stream_copy_to_stream($srcFd, $destFd);
+
+ fclose($srcFd);
+ if (!\fclose($destFd)) {
+ throw new \Exception("Error closing file ".Util::q($dest).".");
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/SSLTester.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/SSLTester.php
new file mode 100644
index 0000000..30cb76d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/SSLTester.php
@@ -0,0 +1,128 @@
+set(CURLOPT_RETURNTRANSFER, true);
+ $curl->exec();
+ return true;
+ }
+
+ private static function testUntrustedCert($url)
+ {
+ return self::testDisallowed($url, 'Error executing HTTP request: SSL certificate problem, verify that the CA cert is OK');
+ }
+
+ private static function testHostnameMismatch($url)
+ {
+ return self::testDisallowed($url, 'Error executing HTTP request: SSL certificate problem: Invalid certificate chain');
+ }
+
+ private static function testDisallowed($url, $expectedExceptionMessage)
+ {
+ $curl = RequestUtil::mkCurl("test-ssl", $url);
+ $curl->set(CURLOPT_RETURNTRANSFER, true);
+ try {
+ $curl->exec();
+ }
+ catch (Exception_NetworkIO $ex) {
+ if (strpos($ex->getMessage(), $expectedExceptionMessage) == 0) {
+ return true;
+ } else {
+ throw $ex;
+ }
+ }
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/SdkVersion.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/SdkVersion.php
new file mode 100644
index 0000000..ee72932
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/SdkVersion.php
@@ -0,0 +1,13 @@
+= 0) {
+ $s = openssl_random_pseudo_bytes($numBytes, $isCryptoStrong);
+ if ($isCryptoStrong) return $s;
+ }
+
+ if (function_exists('mcrypt_create_iv')) {
+ return mcrypt_create_iv($numBytes);
+ }
+
+ // Hopefully the above two options cover all our users. But if not, there are
+ // other platform-specific options we could add.
+ throw new \Exception("no suitable random number source available");
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/StreamReadException.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/StreamReadException.php
new file mode 100644
index 0000000..fdc3cb7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/StreamReadException.php
@@ -0,0 +1,16 @@
+= "\x20" and $c <= "\x7e") {
+ // Printable characters.
+ $r .= $c;
+ }
+ else {
+ // Generic hex escape code.
+ $r .= "\\x";
+ $r .= \bin2hex($c);
+ }
+ }
+ $r .= "\"";
+ return $r;
+ }
+
+ /**
+ * If the given string begins with the UTF-8 BOM (byte order mark), remove it and
+ * return whatever is left. Otherwise, return the original string untouched.
+ *
+ * Though it's not recommended for UTF-8 to have a BOM, the standard allows it to
+ * support software that isn't Unicode-aware.
+ *
+ * @param string $string
+ * A UTF-8 encoded string.
+ *
+ * @return string
+ */
+ public static function stripUtf8Bom($string)
+ {
+ if (strlen($string) == 0) return $string;
+
+ if (\substr_compare($string, "\xEF\xBB\xBF", 0, 3) === 0) {
+ $string = \substr($string, 3);
+ }
+ return $string;
+ }
+
+ /**
+ * Return whether `$s` starts with `$prefix`.
+ *
+ * @param string $s
+ * @param string $prefix
+ * @param bool $caseInsensitive
+ *
+ * @return bool
+ */
+ public static function startsWith($s, $prefix, $caseInsensitive = false)
+ {
+ // substr_compare errors if $main_str is zero-length, so handle that
+ // case specially here.
+ if (\strlen($s) == 0) {
+ return strlen($prefix) == 0;
+ }
+
+ return \substr_compare($s, $prefix, 0, strlen($prefix), $caseInsensitive) == 0;
+ }
+
+ /**
+ * If `$s` starts with `$prefix`, return `$s` with `$prefix` removed. Otherwise,
+ * return `null`.
+ *
+ * @param string $s
+ * @param string $prefix
+ * @param bool $caseInsensitive
+ *
+ * @return string|null
+ */
+ public static function stripPrefix($s, $prefix, $caseInsensitive = false)
+ {
+ // substr_compare errors if $main_str is zero-length, so handle that
+ // case specially here.
+ if (strlen($s) == 0) {
+ if (strlen($prefix) == 0) {
+ return $s;
+ } else {
+ return null;
+ }
+ }
+
+ $prefix_length = strlen($prefix);
+ if (\substr_compare($s, $prefix, 0, strlen($prefix), $caseInsensitive) == 0) {
+ return substr($s, $prefix_length);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/ValueStore.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/ValueStore.php
new file mode 100644
index 0000000..a97ac96
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/ValueStore.php
@@ -0,0 +1,61 @@
+
+ * class MemcacheValueStore implements ValueStore
+ * {
+ * private $key;
+ * private $memcache;
+ *
+ * function __construct($memcache, $key)
+ * {
+ * $this->memcache = $memcache;
+ * $this->key = $key;
+ * }
+ *
+ * function get()
+ * {
+ * $value = $this->memcache->get($this->getKey());
+ * return $value === false ? null : base64_decode($value);
+ * }
+ *
+ * function set($value)
+ * {
+ * $this->memcache->set($this->key, base64_encode($value));
+ * }
+ *
+ * function clear()
+ * {
+ * $this->memcache->delete($this->key);
+ * }
+ * }
+ *
+ */
+interface ValueStore
+{
+ /**
+ * Returns the entry's current value or `null` if nothing is set.
+ *
+ * @return string
+ */
+ function get();
+
+ /**
+ * Set the entry to the given value.
+ *
+ * @param string $value
+ */
+ function set($value);
+
+ /**
+ * Remove the value.
+ */
+ function clear();
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuth.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuth.php
new file mode 100644
index 0000000..a448ff1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuth.php
@@ -0,0 +1,278 @@
+
+ * use \Dropbox as dbx;
+ *
+ * function getWebAuth()
+ * {
+ * $appInfo = dbx\AppInfo::loadFromJsonFile(...);
+ * $clientIdentifier = "my-app/1.0";
+ * $redirectUri = "https://example.org/dropbox-auth-finish";
+ * $csrfTokenStore = new dbx\ArrayEntryStore($_SESSION, 'dropbox-auth-csrf-token');
+ * return new dbx\WebAuth($appInfo, $clientIdentifier, $redirectUri, $csrfTokenStore, ...);
+ * }
+ *
+ * // ----------------------------------------------------------
+ * // In the URL handler for "/dropbox-auth-start"
+ *
+ * $authorizeUrl = getWebAuth()->start();
+ * header("Location: $authorizeUrl");
+ *
+ * // ----------------------------------------------------------
+ * // In the URL handler for "/dropbox-auth-finish"
+ *
+ * try {
+ * list($accessToken, $userId, $urlState) = getWebAuth()->finish($_GET);
+ * assert($urlState === null); // Since we didn't pass anything in start()
+ * }
+ * catch (dbx\WebAuthException_BadRequest $ex) {
+ * error_log("/dropbox-auth-finish: bad request: " . $ex->getMessage());
+ * // Respond with an HTTP 400 and display error page...
+ * }
+ * catch (dbx\WebAuthException_BadState $ex) {
+ * // Auth session expired. Restart the auth process.
+ * header('Location: /dropbox-auth-start');
+ * }
+ * catch (dbx\WebAuthException_Csrf $ex) {
+ * error_log("/dropbox-auth-finish: CSRF mismatch: " . $ex->getMessage());
+ * // Respond with HTTP 403 and display error page...
+ * }
+ * catch (dbx\WebAuthException_NotApproved $ex) {
+ * error_log("/dropbox-auth-finish: not approved: " . $ex->getMessage());
+ * }
+ * catch (dbx\WebAuthException_Provider $ex) {
+ * error_log("/dropbox-auth-finish: error redirect from Dropbox: " . $ex->getMessage());
+ * }
+ * catch (dbx\Exception $ex) {
+ * error_log("/dropbox-auth-finish: error communicating with Dropbox API: " . $ex->getMessage());
+ * }
+ *
+ * // We can now use $accessToken to make API requests.
+ * $client = dbx\Client($accessToken, ...);
+ *
+ *
+ */
+class WebAuth extends WebAuthBase
+{
+ /**
+ * The URI that the Dropbox server will redirect the user to after the user finishes
+ * authorizing your app. This URI must be HTTPS-based and
+ * pre-registered with Dropbox,
+ * though "localhost"-based and "127.0.0.1"-based URIs are allowed without pre-registration
+ * and can be either HTTP or HTTPS.
+ *
+ * @return string
+ */
+ function getRedirectUri() { return $this->redirectUri; }
+
+ /** @var string */
+ private $redirectUri;
+
+ /**
+ * A object that lets us save CSRF token string to the user's session. If you're using the
+ * standard PHP `$_SESSION`, you can pass in something like
+ * `new ArrayEntryStore($_SESSION, 'dropbox-auth-csrf-token')`.
+ *
+ * If you're not using $_SESSION, you might have to create your own class that provides
+ * the same `get()`/`set()`/`clear()` methods as
+ * {@link ArrayEntryStore}.
+ *
+ * @return ValueStore
+ */
+ function getCsrfTokenStore() { return $this->csrfTokenStore; }
+
+ /** @var object */
+ private $csrfTokenStore;
+
+ /**
+ * Constructor.
+ *
+ * @param AppInfo $appInfo
+ * See {@link getAppInfo()}
+ * @param string $clientIdentifier
+ * See {@link getClientIdentifier()}
+ * @param null|string $redirectUri
+ * See {@link getRedirectUri()}
+ * @param null|ValueStore $csrfTokenStore
+ * See {@link getCsrfTokenStore()}
+ * @param null|string $userLocale
+ * See {@link getUserLocale()}
+ */
+ function __construct($appInfo, $clientIdentifier, $redirectUri, $csrfTokenStore, $userLocale = null)
+ {
+ parent::__construct($appInfo, $clientIdentifier, $userLocale);
+
+ Checker::argStringNonEmpty("redirectUri", $redirectUri);
+
+ $this->csrfTokenStore = $csrfTokenStore;
+ $this->redirectUri = $redirectUri;
+ }
+
+ /**
+ * Starts the OAuth 2 authorization process, which involves redirecting the user to the
+ * returned authorization URL (a URL on the Dropbox website). When the user then
+ * either approves or denies your app access, Dropbox will redirect them to the
+ * `$redirectUri` given to constructor, at which point you should
+ * call {@link finish()} to complete the authorization process.
+ *
+ * This function will also save a CSRF token using the `$csrfTokenStore` given to
+ * the constructor. This CSRF token will be checked on {@link finish()} to prevent
+ * request forgery.
+ *
+ * See /oauth2/authorize.
+ *
+ * @param string|null $urlState
+ * Any data you would like to keep in the URL through the authorization process.
+ * This exact state will be returned to you by {@link finish()}.
+ *
+ * @param boolean|null $forceReapprove
+ * If a user has already approved your app, Dropbox may skip the "approve" step and
+ * redirect immediately to your callback URL. Setting this to `true` tells
+ * Dropbox to never skip the "approve" step.
+ *
+ * @return array
+ * The URL to redirect the user to.
+ *
+ * @throws Exception
+ */
+ function start($urlState = null, $forceReapprove = false)
+ {
+ Checker::argStringOrNull("urlState", $urlState);
+
+ $csrfToken = self::encodeCsrfToken(Security::getRandomBytes(16));
+ $state = $csrfToken;
+ if ($urlState !== null) {
+ $state .= "|";
+ $state .= $urlState;
+ }
+ $this->csrfTokenStore->set($csrfToken);
+
+ return $this->_getAuthorizeUrl($this->redirectUri, $state, $forceReapprove);
+ }
+
+ private static function encodeCsrfToken($string)
+ {
+ return strtr(base64_encode($string), '+/', '-_');
+ }
+
+ /**
+ * Call this after the user has visited the authorize URL ({@link start()}), approved your app,
+ * and was redirected to your redirect URI.
+ *
+ * See /oauth2/token.
+ *
+ * @param array $queryParams
+ * The query parameters on the GET request to your redirect URI.
+ *
+ * @return array
+ * A `list(string $accessToken, string $userId, string $urlState)`, where
+ * `$accessToken` can be used to construct a {@link Client}, `$userId`
+ * is the user ID of the user's Dropbox account, and `$urlState` is the
+ * value you originally passed in to {@link start()}.
+ *
+ * @throws Exception
+ * Thrown if there's an error getting the access token from Dropbox.
+ * @throws WebAuthException_BadRequest
+ * @throws WebAuthException_BadState
+ * @throws WebAuthException_Csrf
+ * @throws WebAuthException_NotApproved
+ * @throws WebAuthException_Provider
+ */
+ function finish($queryParams)
+ {
+ Checker::argArray("queryParams", $queryParams);
+
+ $csrfTokenFromSession = $this->csrfTokenStore->get();
+ Checker::argStringOrNull("this->csrfTokenStore->get()", $csrfTokenFromSession);
+
+ // Check well-formedness of request.
+
+ if (!isset($queryParams['state'])) {
+ throw new WebAuthException_BadRequest("Missing query parameter 'state'.");
+ }
+ $state = $queryParams['state'];
+ Checker::argString("queryParams['state']", $state);
+
+ $error = null;
+ $errorDescription = null;
+ if (isset($queryParams['error'])) {
+ $error = $queryParams['error'];
+ Checker::argString("queryParams['error']", $error);
+ if (isset($queryParams['error_description'])) {
+ $errorDescription = $queryParams['error_description'];
+ Checker::argString("queryParams['error_description']", $errorDescription);
+ }
+ }
+
+ $code = null;
+ if (isset($queryParams['code'])) {
+ $code = $queryParams['code'];
+ Checker::argString("queryParams['code']", $code);
+ }
+
+ if ($code !== null && $error !== null) {
+ throw new WebAuthException_BadRequest("Query parameters 'code' and 'error' are both set;".
+ " only one must be set.");
+ }
+ if ($code === null && $error === null) {
+ throw new WebAuthException_BadRequest("Neither query parameter 'code' or 'error' is set.");
+ }
+
+ // Check CSRF token
+
+ if ($csrfTokenFromSession === null) {
+ throw new WebAuthException_BadState();
+ }
+
+ $splitPos = strpos($state, "|");
+ if ($splitPos === false) {
+ $givenCsrfToken = $state;
+ $urlState = null;
+ } else {
+ $givenCsrfToken = substr($state, 0, $splitPos);
+ $urlState = substr($state, $splitPos + 1);
+ }
+ if (!Security::stringEquals($csrfTokenFromSession, $givenCsrfToken)) {
+ throw new WebAuthException_Csrf("Expected ".Util::q($csrfTokenFromSession) .
+ ", got ".Util::q($givenCsrfToken) .".");
+ }
+ $this->csrfTokenStore->clear();
+
+ // Check for error identifier
+
+ if ($error !== null) {
+ if ($error === 'access_denied') {
+ // When the user clicks "Deny".
+ if ($errorDescription === null) {
+ throw new WebAuthException_NotApproved("No additional description from Dropbox.");
+ } else {
+ throw new WebAuthException_NotApproved("Additional description from Dropbox: $errorDescription");
+ }
+ } else {
+ // All other errors.
+ $fullMessage = $error;
+ if ($errorDescription !== null) {
+ $fullMessage .= ": ";
+ $fullMessage .= $errorDescription;
+ }
+ throw new WebAuthException_Provider($fullMessage);
+ }
+ }
+
+ // If everything went ok, make the network call to get an access token.
+
+ list($accessToken, $userId) = $this->_finish($code, $this->redirectUri);
+ return array($accessToken, $userId, $urlState);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuthBase.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuthBase.php
new file mode 100644
index 0000000..366bc32
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuthBase.php
@@ -0,0 +1,67 @@
+userLocale,
+ $this->appInfo->getHost()->getWeb(),
+ "1/oauth2/authorize",
+ array(
+ "client_id" => $this->appInfo->getKey(),
+ "response_type" => "code",
+ "redirect_uri" => $redirectUri,
+ "state" => $state,
+ "force_reapprove" => $forceReapprove,
+ ));
+ }
+
+ protected function _finish($code, $originalRedirectUri)
+ {
+ // This endpoint requires "Basic" auth.
+ $clientCredentials = $this->appInfo->getKey().":".$this->appInfo->getSecret();
+ $authHeaderValue = "Basic ".base64_encode($clientCredentials);
+
+ $response = RequestUtil::doPostWithSpecificAuth(
+ $this->clientIdentifier, $authHeaderValue, $this->userLocale,
+ $this->appInfo->getHost()->getApi(),
+ "1/oauth2/token",
+ array(
+ "grant_type" => "authorization_code",
+ "code" => $code,
+ "redirect_uri" => $originalRedirectUri,
+ ));
+
+ if ($response->statusCode !== 200) throw RequestUtil::unexpectedStatus($response);
+
+ $parts = RequestUtil::parseResponseJson($response->body);
+
+ if (!array_key_exists('token_type', $parts) || !is_string($parts['token_type'])) {
+ throw new Exception_BadResponse("Missing \"token_type\" field.");
+ }
+ $tokenType = $parts['token_type'];
+ if (!array_key_exists('access_token', $parts) || !is_string($parts['access_token'])) {
+ throw new Exception_BadResponse("Missing \"access_token\" field.");
+ }
+ $accessToken = $parts['access_token'];
+ if (!array_key_exists('uid', $parts) || !is_string($parts['uid'])) {
+ throw new Exception_BadResponse("Missing \"uid\" string field.");
+ }
+ $userId = $parts['uid'];
+
+ if ($tokenType !== "Bearer" && $tokenType !== "bearer") {
+ throw new Exception_BadResponse("Unknown \"token_type\"; expecting \"Bearer\", got "
+ .Util::q($tokenType));
+ }
+
+ return array($accessToken, $userId);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuthException/BadRequest.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuthException/BadRequest.php
new file mode 100644
index 0000000..d77986f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WebAuthException/BadRequest.php
@@ -0,0 +1,20 @@
+
+ * use \Dropbox as dbx;
+ * $appInfo = dbx\AppInfo::loadFromJsonFile(...);
+ * $clientIdentifier = "my-app/1.0";
+ * $webAuth = new dbx\WebAuthNoRedirect($appInfo, $clientIdentifier, ...);
+ *
+ * $authorizeUrl = $webAuth->start();
+ *
+ * print("1. Go to: $authorizeUrl\n");
+ * print("2. Click "Allow" (you might have to log in first).\n");
+ * print("3. Copy the authorization code.\n");
+ * print("Enter the authorization code here: ");
+ * $code = \trim(\fgets(STDIN));
+ *
+ * try {
+ * list($accessToken, $userId) = $webAuth->finish($code);
+ * }
+ * catch (dbx\Exception $ex) {
+ * print("Error communicating with Dropbox API: " . $ex->getMessage() . "\n");
+ * }
+ *
+ * $client = dbx\Client($accessToken, $clientIdentifier, ...);
+ *
+ */
+class WebAuthNoRedirect extends WebAuthBase
+{
+ /**
+ * Returns the URL of the authorization page the user must visit. If the user approves
+ * your app, they will be shown the authorization code on the web page. They will need to
+ * copy/paste that code into your application so your app can pass it to
+ * {@link finish}.
+ *
+ * See /oauth2/authorize.
+ *
+ * @return string
+ * An authorization URL. Direct the user's browser to this URL. After the user decides
+ * whether to authorize your app or not, Dropbox will show the user an authorization code,
+ * which the user will need to give to your application (e.g. via copy/paste).
+ */
+ function start()
+ {
+ return $this->_getAuthorizeUrl(null, null);
+ }
+
+ /**
+ * Call this after the user has visited the authorize URL returned by {@link start()},
+ * approved your app, was presented with an authorization code by Dropbox, and has copy/paste'd
+ * that authorization code into your app.
+ *
+ * See /oauth2/token.
+ *
+ * @param string $code
+ * The authorization code provided to the user by Dropbox.
+ *
+ * @return array
+ * A `list(string $accessToken, string $userId)`, where
+ * `$accessToken` can be used to construct a {@link Client} and
+ * `$userId` is the user ID of the user's Dropbox account.
+ *
+ * @throws Exception
+ * Thrown if there's an error getting the access token from Dropbox.
+ */
+ function finish($code)
+ {
+ Checker::argStringNonEmpty("code", $code);
+ return $this->_finish($code, null);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WriteMode.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WriteMode.php
new file mode 100644
index 0000000..23bd23d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/WriteMode.php
@@ -0,0 +1,116 @@
+extraParams = $extraParams;
+ }
+
+ /**
+ * @internal
+ */
+ function getExtraParams()
+ {
+ return $this->extraParams;
+ }
+
+ /**
+ * Returns a {@link WriteMode} for adding a new file. If a file at the specified path already
+ * exists, the new file will be renamed automatically.
+ *
+ * For example, if you're trying to upload a file to "/Notes/Groceries.txt", but there's
+ * already a file there, your file will be written to "/Notes/Groceries (1).txt".
+ *
+ * You can determine whether your file was renamed by checking the "path" field of the
+ * metadata object returned by the API call.
+ *
+ * @return WriteMode
+ */
+ static function add()
+ {
+ if (self::$addInstance === null) {
+ self::$addInstance = new WriteMode(array("overwrite" => "false"));
+ }
+ return self::$addInstance;
+ }
+ private static $addInstance = null;
+
+ /**
+ * Returns a {@link WriteMode} for forcing a file to be at a certain path. If there's already
+ * a file at that path, the existing file will be overwritten. If there's a folder at that
+ * path, however, it will not be overwritten and the API call will fail.
+ *
+ * @return WriteMode
+ */
+ static function force()
+ {
+ if (self::$forceInstance === null) {
+ self::$forceInstance = new WriteMode(array("overwrite" => "true"));
+ }
+ return self::$forceInstance;
+ }
+ private static $forceInstance = null;
+
+ /**
+ * Returns a {@link WriteMode} for updating an existing file. This is useful for when you
+ * have downloaded a file, made modifications, and want to save your modifications back to
+ * Dropbox. You need to specify the revision of the copy of the file you downloaded (it's
+ * the "rev" parameter of the file's metadata object).
+ *
+ * If, when you attempt to save, the revision of the file currently on Dropbox matches
+ * $revToReplace, the file on Dropbox will be overwritten with the new contents you provide.
+ *
+ * If the revision of the file currently on Dropbox doesn't match $revToReplace, Dropbox will
+ * create a new file and save your contents to that file. For example, if the original file
+ * path is "/Notes/Groceries.txt", the new file's path might be
+ * "/Notes/Groceries (conflicted copy).txt".
+ *
+ * You can determine whether your file was renamed by checking the "path" field of the
+ * metadata object returned by the API call.
+ *
+ * @param string $revToReplace
+ * @return WriteMode
+ */
+ static function update($revToReplace)
+ {
+ return new WriteMode(array("parent_rev" => $revToReplace));
+ }
+
+ /**
+ * Check that a function argument is of type `WriteMode`.
+ *
+ * @internal
+ */
+ static function checkArg($argName, $argValue)
+ {
+ if (!($argValue instanceof self)) Checker::throwError($argName, $argValue, __CLASS__);
+ }
+
+ /**
+ * Check that a function argument is either `null` or of type
+ * `WriteMode`.
+ *
+ * @internal
+ */
+ static function checkArgOrNull($argName, $argValue)
+ {
+ if ($argValue === null) return;
+ if (!($argValue instanceof self)) Checker::throwError($argName, $argValue, __CLASS__);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/autoload.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/autoload.php
new file mode 100644
index 0000000..abb3cd8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/autoload.php
@@ -0,0 +1,31 @@
+/Dropbox/autoload.php"
+
+/**
+ * @internal
+ */
+function autoload($name)
+{
+ // If the name doesn't start with "Dropbox\", then its not once of our classes.
+ if (\substr_compare($name, "Dropbox\\", 0, 8) !== 0) return;
+
+ // Take the "Dropbox\" prefix off.
+ $stem = \substr($name, 8);
+
+ // Convert "\" and "_" to path separators.
+ $pathified_stem = \str_replace(array("\\", "_"), '/', $stem);
+
+ $path = __DIR__ . "/" . $pathified_stem . ".php";
+ if (\is_file($path)) {
+ require_once $path;
+ }
+}
+
+\spl_autoload_register('Dropbox\autoload');
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/certs/trusted-certs.crt b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/certs/trusted-certs.crt
new file mode 100644
index 0000000..00c2f2e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/certs/trusted-certs.crt
@@ -0,0 +1,1396 @@
+# DigiCert Assured ID Root CA.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# 0c:e7:e0:e5:17:d8:46:fe:8f:e5:60:fc:1b:f0:30:39
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA
+# Validity
+# Not Before: Nov 10 00:00:00 2006 GMT
+# Not After : Nov 10 00:00:00 2031 GMT
+# Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:ad:0e:15:ce:e4:43:80:5c:b1:87:f3:b7:60:f9:
+# 71:12:a5:ae:dc:26:94:88:aa:f4:ce:f5:20:39:28:
+# 58:60:0c:f8:80:da:a9:15:95:32:61:3c:b5:b1:28:
+# 84:8a:8a:dc:9f:0a:0c:83:17:7a:8f:90:ac:8a:e7:
+# 79:53:5c:31:84:2a:f6:0f:98:32:36:76:cc:de:dd:
+# 3c:a8:a2:ef:6a:fb:21:f2:52:61:df:9f:20:d7:1f:
+# e2:b1:d9:fe:18:64:d2:12:5b:5f:f9:58:18:35:bc:
+# 47:cd:a1:36:f9:6b:7f:d4:b0:38:3e:c1:1b:c3:8c:
+# 33:d9:d8:2f:18:fe:28:0f:b3:a7:83:d6:c3:6e:44:
+# c0:61:35:96:16:fe:59:9c:8b:76:6d:d7:f1:a2:4b:
+# 0d:2b:ff:0b:72:da:9e:60:d0:8e:90:35:c6:78:55:
+# 87:20:a1:cf:e5:6d:0a:c8:49:7c:31:98:33:6c:22:
+# e9:87:d0:32:5a:a2:ba:13:82:11:ed:39:17:9d:99:
+# 3a:72:a1:e6:fa:a4:d9:d5:17:31:75:ae:85:7d:22:
+# ae:3f:01:46:86:f6:28:79:c8:b1:da:e4:57:17:c4:
+# 7e:1c:0e:b0:b4:92:a6:56:b3:bd:b2:97:ed:aa:a7:
+# f0:b7:c5:a8:3f:95:16:d0:ff:a1:96:eb:08:5f:18:
+# 77:4f
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Key Usage: critical
+# Digital Signature, Certificate Sign, CRL Sign
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Subject Key Identifier:
+# 45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F
+# X509v3 Authority Key Identifier:
+# keyid:45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F
+#
+# Signature Algorithm: sha1WithRSAEncryption
+# a2:0e:bc:df:e2:ed:f0:e3:72:73:7a:64:94:bf:f7:72:66:d8:
+# 32:e4:42:75:62:ae:87:eb:f2:d5:d9:de:56:b3:9f:cc:ce:14:
+# 28:b9:0d:97:60:5c:12:4c:58:e4:d3:3d:83:49:45:58:97:35:
+# 69:1a:a8:47:ea:56:c6:79:ab:12:d8:67:81:84:df:7f:09:3c:
+# 94:e6:b8:26:2c:20:bd:3d:b3:28:89:f7:5f:ff:22:e2:97:84:
+# 1f:e9:65:ef:87:e0:df:c1:67:49:b3:5d:eb:b2:09:2a:eb:26:
+# ed:78:be:7d:3f:2b:f3:b7:26:35:6d:5f:89:01:b6:49:5b:9f:
+# 01:05:9b:ab:3d:25:c1:cc:b6:7f:c2:f1:6f:86:c6:fa:64:68:
+# eb:81:2d:94:eb:42:b7:fa:8c:1e:dd:62:f1:be:50:67:b7:6c:
+# bd:f3:f1:1f:6b:0c:36:07:16:7f:37:7c:a9:5b:6d:7a:f1:12:
+# 46:60:83:d7:27:04:be:4b:ce:97:be:c3:67:2a:68:11:df:80:
+# e7:0c:33:66:bf:13:0d:14:6e:f3:7f:1f:63:10:1e:fa:8d:1b:
+# 25:6d:6c:8f:a5:b7:61:01:b1:d2:a3:26:a1:10:71:9d:ad:e2:
+# c3:f9:c3:99:51:b7:2b:07:08:ce:2e:e6:50:b2:a7:fa:0a:45:
+# 2f:a2:f0:f2
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
+b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
+cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
+JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
+mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
+VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
+AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
+AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
+pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
+dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
+fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
+NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
+H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
+# DigiCert Global Root CA.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# 08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
+# Validity
+# Not Before: Nov 10 00:00:00 2006 GMT
+# Not After : Nov 10 00:00:00 2031 GMT
+# Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:e2:3b:e1:11:72:de:a8:a4:d3:a3:57:aa:50:a2:
+# 8f:0b:77:90:c9:a2:a5:ee:12:ce:96:5b:01:09:20:
+# cc:01:93:a7:4e:30:b7:53:f7:43:c4:69:00:57:9d:
+# e2:8d:22:dd:87:06:40:00:81:09:ce:ce:1b:83:bf:
+# df:cd:3b:71:46:e2:d6:66:c7:05:b3:76:27:16:8f:
+# 7b:9e:1e:95:7d:ee:b7:48:a3:08:da:d6:af:7a:0c:
+# 39:06:65:7f:4a:5d:1f:bc:17:f8:ab:be:ee:28:d7:
+# 74:7f:7a:78:99:59:85:68:6e:5c:23:32:4b:bf:4e:
+# c0:e8:5a:6d:e3:70:bf:77:10:bf:fc:01:f6:85:d9:
+# a8:44:10:58:32:a9:75:18:d5:d1:a2:be:47:e2:27:
+# 6a:f4:9a:33:f8:49:08:60:8b:d4:5f:b4:3a:84:bf:
+# a1:aa:4a:4c:7d:3e:cf:4f:5f:6c:76:5e:a0:4b:37:
+# 91:9e:dc:22:e6:6d:ce:14:1a:8e:6a:cb:fe:cd:b3:
+# 14:64:17:c7:5b:29:9e:32:bf:f2:ee:fa:d3:0b:42:
+# d4:ab:b7:41:32:da:0c:d4:ef:f8:81:d5:bb:8d:58:
+# 3f:b5:1b:e8:49:28:a2:70:da:31:04:dd:f7:b2:16:
+# f2:4c:0a:4e:07:a8:ed:4a:3d:5e:b5:7f:a3:90:c3:
+# af:27
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Key Usage: critical
+# Digital Signature, Certificate Sign, CRL Sign
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Subject Key Identifier:
+# 03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
+# X509v3 Authority Key Identifier:
+# keyid:03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
+#
+# Signature Algorithm: sha1WithRSAEncryption
+# cb:9c:37:aa:48:13:12:0a:fa:dd:44:9c:4f:52:b0:f4:df:ae:
+# 04:f5:79:79:08:a3:24:18:fc:4b:2b:84:c0:2d:b9:d5:c7:fe:
+# f4:c1:1f:58:cb:b8:6d:9c:7a:74:e7:98:29:ab:11:b5:e3:70:
+# a0:a1:cd:4c:88:99:93:8c:91:70:e2:ab:0f:1c:be:93:a9:ff:
+# 63:d5:e4:07:60:d3:a3:bf:9d:5b:09:f1:d5:8e:e3:53:f4:8e:
+# 63:fa:3f:a7:db:b4:66:df:62:66:d6:d1:6e:41:8d:f2:2d:b5:
+# ea:77:4a:9f:9d:58:e2:2b:59:c0:40:23:ed:2d:28:82:45:3e:
+# 79:54:92:26:98:e0:80:48:a8:37:ef:f0:d6:79:60:16:de:ac:
+# e8:0e:cd:6e:ac:44:17:38:2f:49:da:e1:45:3e:2a:b9:36:53:
+# cf:3a:50:06:f7:2e:e8:c4:57:49:6c:61:21:18:d5:04:ad:78:
+# 3c:2c:3a:80:6b:a7:eb:af:15:14:e9:d8:89:c1:b9:38:6c:e2:
+# 91:6c:8a:ff:64:b9:77:25:57:30:c0:1b:24:a3:e1:dc:e9:df:
+# 47:7c:b5:b4:24:08:05:30:ec:2d:bd:0b:bf:45:bf:50:b9:a9:
+# f3:eb:98:01:12:ad:c8:88:c6:98:34:5f:8d:0a:3c:c6:e9:d5:
+# 95:95:6d:de
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+# DigiCert High Assurance EV Root CA.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# 02:ac:5c:26:6a:0b:40:9b:8f:0b:79:f2:ae:46:25:77
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA
+# Validity
+# Not Before: Nov 10 00:00:00 2006 GMT
+# Not After : Nov 10 00:00:00 2031 GMT
+# Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:c6:cc:e5:73:e6:fb:d4:bb:e5:2d:2d:32:a6:df:
+# e5:81:3f:c9:cd:25:49:b6:71:2a:c3:d5:94:34:67:
+# a2:0a:1c:b0:5f:69:a6:40:b1:c4:b7:b2:8f:d0:98:
+# a4:a9:41:59:3a:d3:dc:94:d6:3c:db:74:38:a4:4a:
+# cc:4d:25:82:f7:4a:a5:53:12:38:ee:f3:49:6d:71:
+# 91:7e:63:b6:ab:a6:5f:c3:a4:84:f8:4f:62:51:be:
+# f8:c5:ec:db:38:92:e3:06:e5:08:91:0c:c4:28:41:
+# 55:fb:cb:5a:89:15:7e:71:e8:35:bf:4d:72:09:3d:
+# be:3a:38:50:5b:77:31:1b:8d:b3:c7:24:45:9a:a7:
+# ac:6d:00:14:5a:04:b7:ba:13:eb:51:0a:98:41:41:
+# 22:4e:65:61:87:81:41:50:a6:79:5c:89:de:19:4a:
+# 57:d5:2e:e6:5d:1c:53:2c:7e:98:cd:1a:06:16:a4:
+# 68:73:d0:34:04:13:5c:a1:71:d3:5a:7c:55:db:5e:
+# 64:e1:37:87:30:56:04:e5:11:b4:29:80:12:f1:79:
+# 39:88:a2:02:11:7c:27:66:b7:88:b7:78:f2:ca:0a:
+# a8:38:ab:0a:64:c2:bf:66:5d:95:84:c1:a1:25:1e:
+# 87:5d:1a:50:0b:20:12:cc:41:bb:6e:0b:51:38:b8:
+# 4b:cb
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Key Usage: critical
+# Digital Signature, Certificate Sign, CRL Sign
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Subject Key Identifier:
+# B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3
+# X509v3 Authority Key Identifier:
+# keyid:B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3
+#
+# Signature Algorithm: sha1WithRSAEncryption
+# 1c:1a:06:97:dc:d7:9c:9f:3c:88:66:06:08:57:21:db:21:47:
+# f8:2a:67:aa:bf:18:32:76:40:10:57:c1:8a:f3:7a:d9:11:65:
+# 8e:35:fa:9e:fc:45:b5:9e:d9:4c:31:4b:b8:91:e8:43:2c:8e:
+# b3:78:ce:db:e3:53:79:71:d6:e5:21:94:01:da:55:87:9a:24:
+# 64:f6:8a:66:cc:de:9c:37:cd:a8:34:b1:69:9b:23:c8:9e:78:
+# 22:2b:70:43:e3:55:47:31:61:19:ef:58:c5:85:2f:4e:30:f6:
+# a0:31:16:23:c8:e7:e2:65:16:33:cb:bf:1a:1b:a0:3d:f8:ca:
+# 5e:8b:31:8b:60:08:89:2d:0c:06:5c:52:b7:c4:f9:0a:98:d1:
+# 15:5f:9f:12:be:7c:36:63:38:bd:44:a4:7f:e4:26:2b:0a:c4:
+# 97:69:0d:e9:8c:e2:c0:10:57:b8:c8:76:12:91:55:f2:48:69:
+# d8:bc:2a:02:5b:0f:44:d4:20:31:db:f4:ba:70:26:5d:90:60:
+# 9e:bc:4b:17:09:2f:b4:cb:1e:43:68:c9:07:27:c1:d2:5c:f7:
+# ea:21:b9:68:12:9c:3c:9c:bf:9e:fc:80:5c:9b:63:cd:ec:47:
+# aa:25:27:67:a0:37:f3:00:82:7d:54:d7:a9:f8:e9:2e:13:a3:
+# 77:e8:1f:4a
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
+ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
+LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
+RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
+PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
+xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
+Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
+hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
+EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
+FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
+nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
+eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
+hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
+Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
++OkuE6N36B9K
+-----END CERTIFICATE-----
+# Entrust Root Certification Authority - EC1.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# a6:8b:79:29:00:00:00:00:50:d0:91:f9
+# Signature Algorithm: ecdsa-with-SHA384
+# Issuer: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2012 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - EC1
+# Validity
+# Not Before: Dec 18 15:25:36 2012 GMT
+# Not After : Dec 18 15:55:36 2037 GMT
+# Subject: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2012 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - EC1
+# Subject Public Key Info:
+# Public Key Algorithm: id-ecPublicKey
+# Public-Key: (384 bit)
+# pub:
+# 04:84:13:c9:d0:ba:6d:41:7b:e2:6c:d0:eb:55:5f:
+# 66:02:1a:24:f4:5b:89:69:47:e3:b8:c2:7d:f1:f2:
+# 02:c5:9f:a0:f6:5b:d5:8b:06:19:86:4f:53:10:6d:
+# 07:24:27:a1:a0:f8:d5:47:19:61:4c:7d:ca:93:27:
+# ea:74:0c:ef:6f:96:09:fe:63:ec:70:5d:36:ad:67:
+# 77:ae:c9:9d:7c:55:44:3a:a2:63:51:1f:f5:e3:62:
+# d4:a9:47:07:3e:cc:20
+# ASN1 OID: secp384r1
+# X509v3 extensions:
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Subject Key Identifier:
+# B7:63:E7:1A:DD:8D:E9:08:A6:55:83:A4:E0:6A:50:41:65:11:42:49
+# Signature Algorithm: ecdsa-with-SHA384
+# 30:64:02:30:61:79:d8:e5:42:47:df:1c:ae:53:99:17:b6:6f:
+# 1c:7d:e1:bf:11:94:d1:03:88:75:e4:8d:89:a4:8a:77:46:de:
+# 6d:61:ef:02:f5:fb:b5:df:cc:fe:4e:ff:fe:a9:e6:a7:02:30:
+# 5b:99:d7:85:37:06:b5:7b:08:fd:eb:27:8b:4a:94:f9:e1:fa:
+# a7:8e:26:08:e8:7c:92:68:6d:73:d8:6f:26:ac:21:02:b8:99:
+# b7:26:41:5b:25:60:ae:d0:48:1a:ee:06
+-----BEGIN CERTIFICATE-----
+MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG
+A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3
+d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu
+dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq
+RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy
+MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD
+VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
+L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g
+Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi
+A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt
+ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH
+Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
+BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC
+R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX
+hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
+-----END CERTIFICATE-----
+# Entrust Root Certification Authority - G2.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number: 1246989352 (0x4a538c28)
+# Signature Algorithm: sha256WithRSAEncryption
+# Issuer: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2009 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - G2
+# Validity
+# Not Before: Jul 7 17:25:54 2009 GMT
+# Not After : Dec 7 17:55:54 2030 GMT
+# Subject: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2009 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - G2
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:ba:84:b6:72:db:9e:0c:6b:e2:99:e9:30:01:a7:
+# 76:ea:32:b8:95:41:1a:c9:da:61:4e:58:72:cf:fe:
+# f6:82:79:bf:73:61:06:0a:a5:27:d8:b3:5f:d3:45:
+# 4e:1c:72:d6:4e:32:f2:72:8a:0f:f7:83:19:d0:6a:
+# 80:80:00:45:1e:b0:c7:e7:9a:bf:12:57:27:1c:a3:
+# 68:2f:0a:87:bd:6a:6b:0e:5e:65:f3:1c:77:d5:d4:
+# 85:8d:70:21:b4:b3:32:e7:8b:a2:d5:86:39:02:b1:
+# b8:d2:47:ce:e4:c9:49:c4:3b:a7:de:fb:54:7d:57:
+# be:f0:e8:6e:c2:79:b2:3a:0b:55:e2:50:98:16:32:
+# 13:5c:2f:78:56:c1:c2:94:b3:f2:5a:e4:27:9a:9f:
+# 24:d7:c6:ec:d0:9b:25:82:e3:cc:c2:c4:45:c5:8c:
+# 97:7a:06:6b:2a:11:9f:a9:0a:6e:48:3b:6f:db:d4:
+# 11:19:42:f7:8f:07:bf:f5:53:5f:9c:3e:f4:17:2c:
+# e6:69:ac:4e:32:4c:62:77:ea:b7:e8:e5:bb:34:bc:
+# 19:8b:ae:9c:51:e7:b7:7e:b5:53:b1:33:22:e5:6d:
+# cf:70:3c:1a:fa:e2:9b:67:b6:83:f4:8d:a5:af:62:
+# 4c:4d:e0:58:ac:64:34:12:03:f8:b6:8d:94:63:24:
+# a4:71
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Subject Key Identifier:
+# 6A:72:26:7A:D0:1E:EF:7D:E7:3B:69:51:D4:6C:8D:9F:90:12:66:AB
+# Signature Algorithm: sha256WithRSAEncryption
+# 79:9f:1d:96:c6:b6:79:3f:22:8d:87:d3:87:03:04:60:6a:6b:
+# 9a:2e:59:89:73:11:ac:43:d1:f5:13:ff:8d:39:2b:c0:f2:bd:
+# 4f:70:8c:a9:2f:ea:17:c4:0b:54:9e:d4:1b:96:98:33:3c:a8:
+# ad:62:a2:00:76:ab:59:69:6e:06:1d:7e:c4:b9:44:8d:98:af:
+# 12:d4:61:db:0a:19:46:47:f3:eb:f7:63:c1:40:05:40:a5:d2:
+# b7:f4:b5:9a:36:bf:a9:88:76:88:04:55:04:2b:9c:87:7f:1a:
+# 37:3c:7e:2d:a5:1a:d8:d4:89:5e:ca:bd:ac:3d:6c:d8:6d:af:
+# d5:f3:76:0f:cd:3b:88:38:22:9d:6c:93:9a:c4:3d:bf:82:1b:
+# 65:3f:a6:0f:5d:aa:fc:e5:b2:15:ca:b5:ad:c6:bc:3d:d0:84:
+# e8:ea:06:72:b0:4d:39:32:78:bf:3e:11:9c:0b:a4:9d:9a:21:
+# f3:f0:9b:0b:30:78:db:c1:dc:87:43:fe:bc:63:9a:ca:c5:c2:
+# 1c:c9:c7:8d:ff:3b:12:58:08:e6:b6:3d:ec:7a:2c:4e:fb:83:
+# 96:ce:0c:3c:69:87:54:73:a4:73:c2:93:ff:51:10:ac:15:54:
+# 01:d8:fc:05:b1:89:a1:7f:74:83:9a:49:d7:dc:4e:7b:8a:48:
+# 6f:8b:45:f6
+-----BEGIN CERTIFICATE-----
+MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50
+cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs
+IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz
+dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy
+NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu
+dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt
+dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0
+aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T
+RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN
+cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW
+wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1
+U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0
+jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN
+BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/
+jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
+Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v
+1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R
+nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH
+VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==
+-----END CERTIFICATE-----
+# Entrust Root Certification Authority.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number: 1164660820 (0x456b5054)
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority
+# Validity
+# Not Before: Nov 27 20:23:42 2006 GMT
+# Not After : Nov 27 20:53:42 2026 GMT
+# Subject: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:b6:95:b6:43:42:fa:c6:6d:2a:6f:48:df:94:4c:
+# 39:57:05:ee:c3:79:11:41:68:36:ed:ec:fe:9a:01:
+# 8f:a1:38:28:fc:f7:10:46:66:2e:4d:1e:1a:b1:1a:
+# 4e:c6:d1:c0:95:88:b0:c9:ff:31:8b:33:03:db:b7:
+# 83:7b:3e:20:84:5e:ed:b2:56:28:a7:f8:e0:b9:40:
+# 71:37:c5:cb:47:0e:97:2a:68:c0:22:95:62:15:db:
+# 47:d9:f5:d0:2b:ff:82:4b:c9:ad:3e:de:4c:db:90:
+# 80:50:3f:09:8a:84:00:ec:30:0a:3d:18:cd:fb:fd:
+# 2a:59:9a:23:95:17:2c:45:9e:1f:6e:43:79:6d:0c:
+# 5c:98:fe:48:a7:c5:23:47:5c:5e:fd:6e:e7:1e:b4:
+# f6:68:45:d1:86:83:5b:a2:8a:8d:b1:e3:29:80:fe:
+# 25:71:88:ad:be:bc:8f:ac:52:96:4b:aa:51:8d:e4:
+# 13:31:19:e8:4e:4d:9f:db:ac:b3:6a:d5:bc:39:54:
+# 71:ca:7a:7a:7f:90:dd:7d:1d:80:d9:81:bb:59:26:
+# c2:11:fe:e6:93:e2:f7:80:e4:65:fb:34:37:0e:29:
+# 80:70:4d:af:38:86:2e:9e:7f:57:af:9e:17:ae:eb:
+# 1c:cb:28:21:5f:b6:1c:d8:e7:a2:04:22:f9:d3:da:
+# d8:cb
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Private Key Usage Period:
+# Not Before: Nov 27 20:23:42 2006 GMT, Not After: Nov 27 20:53:42 2026 GMT
+# X509v3 Authority Key Identifier:
+# keyid:68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D
+#
+# X509v3 Subject Key Identifier:
+# 68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D
+# 1.2.840.113533.7.65.0:
+# 0...V7.1:4.0....
+# Signature Algorithm: sha1WithRSAEncryption
+# 93:d4:30:b0:d7:03:20:2a:d0:f9:63:e8:91:0c:05:20:a9:5f:
+# 19:ca:7b:72:4e:d4:b1:db:d0:96:fb:54:5a:19:2c:0c:08:f7:
+# b2:bc:85:a8:9d:7f:6d:3b:52:b3:2a:db:e7:d4:84:8c:63:f6:
+# 0f:cb:26:01:91:50:6c:f4:5f:14:e2:93:74:c0:13:9e:30:3a:
+# 50:e3:b4:60:c5:1c:f0:22:44:8d:71:47:ac:c8:1a:c9:e9:9b:
+# 9a:00:60:13:ff:70:7e:5f:11:4d:49:1b:b3:15:52:7b:c9:54:
+# da:bf:9d:95:af:6b:9a:d8:9e:e9:f1:e4:43:8d:e2:11:44:3a:
+# bf:af:bd:83:42:73:52:8b:aa:bb:a7:29:cf:f5:64:1c:0a:4d:
+# d1:bc:aa:ac:9f:2a:d0:ff:7f:7f:da:7d:ea:b1:ed:30:25:c1:
+# 84:da:34:d2:5b:78:83:56:ec:9c:36:c3:26:e2:11:f6:67:49:
+# 1d:92:ab:8c:fb:eb:ff:7a:ee:85:4a:a7:50:80:f0:a7:5c:4a:
+# 94:2e:5f:05:99:3c:52:41:e0:cd:b4:63:cf:01:43:ba:9c:83:
+# dc:8f:60:3b:f3:5a:b4:b4:7b:ae:da:0b:90:38:75:ef:81:1d:
+# 66:d2:f7:57:70:36:b3:bf:fc:28:af:71:25:85:5b:13:fe:1e:
+# 7f:5a:b4:3c
+-----BEGIN CERTIFICATE-----
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
+NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
+NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
+ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
+BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
+Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
+4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
+KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
+rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
+94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
+sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
+gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
+kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
+vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
+O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
+AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
+9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
+eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
+0vdXcDazv/wor3ElhVsT/h5/WrQ8
+-----END CERTIFICATE-----
+# Entrust.net Certification Authority (2048).pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number: 946069240 (0x3863def8)
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
+# Validity
+# Not Before: Dec 24 17:50:51 1999 GMT
+# Not After : Jul 24 14:15:12 2029 GMT
+# Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64:
+# 2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7:
+# 78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76:
+# 98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf:
+# e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1:
+# 02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29:
+# b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64:
+# ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c:
+# e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89:
+# a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90:
+# 76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2:
+# cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a:
+# fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55:
+# 60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86:
+# 5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26:
+# 93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e:
+# 4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0:
+# 07:e1
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Subject Key Identifier:
+# 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70
+# Signature Algorithm: sha1WithRSAEncryption
+# 3b:9b:8f:56:9b:30:e7:53:99:7c:7a:79:a7:4d:97:d7:19:95:
+# 90:fb:06:1f:ca:33:7c:46:63:8f:96:66:24:fa:40:1b:21:27:
+# ca:e6:72:73:f2:4f:fe:31:99:fd:c8:0c:4c:68:53:c6:80:82:
+# 13:98:fa:b6:ad:da:5d:3d:f1:ce:6e:f6:15:11:94:82:0c:ee:
+# 3f:95:af:11:ab:0f:d7:2f:de:1f:03:8f:57:2c:1e:c9:bb:9a:
+# 1a:44:95:eb:18:4f:a6:1f:cd:7d:57:10:2f:9b:04:09:5a:84:
+# b5:6e:d8:1d:3a:e1:d6:9e:d1:6c:79:5e:79:1c:14:c5:e3:d0:
+# 4c:93:3b:65:3c:ed:df:3d:be:a6:e5:95:1a:c3:b5:19:c3:bd:
+# 5e:5b:bb:ff:23:ef:68:19:cb:12:93:27:5c:03:2d:6f:30:d0:
+# 1e:b6:1a:ac:de:5a:f7:d1:aa:a8:27:a6:fe:79:81:c4:79:99:
+# 33:57:ba:12:b0:a9:e0:42:6c:93:ca:56:de:fe:6d:84:0b:08:
+# 8b:7e:8d:ea:d7:98:21:c6:f3:e7:3c:79:2f:5e:9c:d1:4c:15:
+# 8d:e1:ec:22:37:cc:9a:43:0b:97:dc:80:90:8d:b3:67:9b:6f:
+# 48:08:15:56:cf:bf:f1:2b:7c:5e:9a:76:e9:59:90:c5:7c:83:
+# 35:11:65:51
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
+MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
+HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
+j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
+U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
+zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
+u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
+bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
+fF6adulZkMV8gzURZVE=
+-----END CERTIFICATE-----
+# GeoTrust Global CA.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number: 144470 (0x23456)
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
+# Validity
+# Not Before: May 21 04:00:00 2002 GMT
+# Not After : May 21 04:00:00 2022 GMT
+# Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:da:cc:18:63:30:fd:f4:17:23:1a:56:7e:5b:df:
+# 3c:6c:38:e4:71:b7:78:91:d4:bc:a1:d8:4c:f8:a8:
+# 43:b6:03:e9:4d:21:07:08:88:da:58:2f:66:39:29:
+# bd:05:78:8b:9d:38:e8:05:b7:6a:7e:71:a4:e6:c4:
+# 60:a6:b0:ef:80:e4:89:28:0f:9e:25:d6:ed:83:f3:
+# ad:a6:91:c7:98:c9:42:18:35:14:9d:ad:98:46:92:
+# 2e:4f:ca:f1:87:43:c1:16:95:57:2d:50:ef:89:2d:
+# 80:7a:57:ad:f2:ee:5f:6b:d2:00:8d:b9:14:f8:14:
+# 15:35:d9:c0:46:a3:7b:72:c8:91:bf:c9:55:2b:cd:
+# d0:97:3e:9c:26:64:cc:df:ce:83:19:71:ca:4e:e6:
+# d4:d5:7b:a9:19:cd:55:de:c8:ec:d2:5e:38:53:e5:
+# 5c:4f:8c:2d:fe:50:23:36:fc:66:e6:cb:8e:a4:39:
+# 19:00:b7:95:02:39:91:0b:0e:fe:38:2e:d1:1d:05:
+# 9a:f6:4d:3e:6f:0f:07:1d:af:2c:1e:8f:60:39:e2:
+# fa:36:53:13:39:d4:5e:26:2b:db:3d:a8:14:bd:32:
+# eb:18:03:28:52:04:71:e5:ab:33:3d:e1:38:bb:07:
+# 36:84:62:9c:79:ea:16:30:f4:5f:c0:2b:e8:71:6b:
+# e4:f9
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Subject Key Identifier:
+# C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
+# X509v3 Authority Key Identifier:
+# keyid:C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
+#
+# Signature Algorithm: sha1WithRSAEncryption
+# 35:e3:29:6a:e5:2f:5d:54:8e:29:50:94:9f:99:1a:14:e4:8f:
+# 78:2a:62:94:a2:27:67:9e:d0:cf:1a:5e:47:e9:c1:b2:a4:cf:
+# dd:41:1a:05:4e:9b:4b:ee:4a:6f:55:52:b3:24:a1:37:0a:eb:
+# 64:76:2a:2e:2c:f3:fd:3b:75:90:bf:fa:71:d8:c7:3d:37:d2:
+# b5:05:95:62:b9:a6:de:89:3d:36:7b:38:77:48:97:ac:a6:20:
+# 8f:2e:a6:c9:0c:c2:b2:99:45:00:c7:ce:11:51:22:22:e0:a5:
+# ea:b6:15:48:09:64:ea:5e:4f:74:f7:05:3e:c7:8a:52:0c:db:
+# 15:b4:bd:6d:9b:e5:c6:b1:54:68:a9:e3:69:90:b6:9a:a5:0f:
+# b8:b9:3f:20:7d:ae:4a:b5:b8:9c:e4:1d:b6:ab:e6:94:a5:c1:
+# c7:83:ad:db:f5:27:87:0e:04:6c:d5:ff:dd:a0:5d:ed:87:52:
+# b7:2b:15:02:ae:39:a6:6a:74:e9:da:c4:e7:bc:4d:34:1e:a9:
+# 5c:4d:33:5f:92:09:2f:88:66:5d:77:97:c7:1d:76:13:a9:d5:
+# e5:f1:16:09:11:35:d5:ac:db:24:71:70:2c:98:56:0b:d9:17:
+# b4:d1:e3:51:2b:5e:75:e8:d5:d0:dc:4f:34:ed:c2:05:66:80:
+# a1:cb:e6:33
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
+R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
+9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
+fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
+iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
+1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
+MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
+ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
+uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
+Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
+tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
+PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
+hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
+5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
+-----END CERTIFICATE-----
+# GeoTrust Primary Certification Authority - G2.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# 3c:b2:f4:48:0a:00:e2:fe:eb:24:3b:5e:60:3e:c3:6b
+# Signature Algorithm: ecdsa-with-SHA384
+# Issuer: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2
+# Validity
+# Not Before: Nov 5 00:00:00 2007 GMT
+# Not After : Jan 18 23:59:59 2038 GMT
+# Subject: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2
+# Subject Public Key Info:
+# Public Key Algorithm: id-ecPublicKey
+# Public-Key: (384 bit)
+# pub:
+# 04:15:b1:e8:fd:03:15:43:e5:ac:eb:87:37:11:62:
+# ef:d2:83:36:52:7d:45:57:0b:4a:8d:7b:54:3b:3a:
+# 6e:5f:15:02:c0:50:a6:cf:25:2f:7d:ca:48:b8:c7:
+# 50:63:1c:2a:21:08:7c:9a:36:d8:0b:fe:d1:26:c5:
+# 58:31:30:28:25:f3:5d:5d:a3:b8:b6:a5:b4:92:ed:
+# 6c:2c:9f:eb:dd:43:89:a2:3c:4b:48:91:1d:50:ec:
+# 26:df:d6:60:2e:bd:21
+# ASN1 OID: secp384r1
+# X509v3 extensions:
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Subject Key Identifier:
+# 15:5F:35:57:51:55:FB:25:B2:AD:03:69:FC:01:A3:FA:BE:11:55:D5
+# Signature Algorithm: ecdsa-with-SHA384
+# 30:64:02:30:64:96:59:a6:e8:09:de:8b:ba:fa:5a:88:88:f0:
+# 1f:91:d3:46:a8:f2:4a:4c:02:63:fb:6c:5f:38:db:2e:41:93:
+# a9:0e:e6:9d:dc:31:1c:b2:a0:a7:18:1c:79:e1:c7:36:02:30:
+# 3a:56:af:9a:74:6c:f6:fb:83:e0:33:d3:08:5f:a1:9c:c2:5b:
+# 9f:46:d6:b6:cb:91:06:63:a2:06:e7:33:ac:3e:a8:81:12:d0:
+# cb:ba:d0:92:0b:b6:9e:96:aa:04:0f:8a
+-----BEGIN CERTIFICATE-----
+MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
+MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
+KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
+MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
+BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
+NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
+BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
+So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
+tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
+CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
+qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
+rD6ogRLQy7rQkgu2npaqBA+K
+-----END CERTIFICATE-----
+# GeoTrust Primary Certification Authority - G3.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# 15:ac:6e:94:19:b2:79:4b:41:f6:27:a9:c3:18:0f:1f
+# Signature Algorithm: sha256WithRSAEncryption
+# Issuer: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3
+# Validity
+# Not Before: Apr 2 00:00:00 2008 GMT
+# Not After : Dec 1 23:59:59 2037 GMT
+# Subject: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:dc:e2:5e:62:58:1d:33:57:39:32:33:fa:eb:cb:
+# 87:8c:a7:d4:4a:dd:06:88:ea:64:8e:31:98:a5:38:
+# 90:1e:98:cf:2e:63:2b:f0:46:bc:44:b2:89:a1:c0:
+# 28:0c:49:70:21:95:9f:64:c0:a6:93:12:02:65:26:
+# 86:c6:a5:89:f0:fa:d7:84:a0:70:af:4f:1a:97:3f:
+# 06:44:d5:c9:eb:72:10:7d:e4:31:28:fb:1c:61:e6:
+# 28:07:44:73:92:22:69:a7:03:88:6c:9d:63:c8:52:
+# da:98:27:e7:08:4c:70:3e:b4:c9:12:c1:c5:67:83:
+# 5d:33:f3:03:11:ec:6a:d0:53:e2:d1:ba:36:60:94:
+# 80:bb:61:63:6c:5b:17:7e:df:40:94:1e:ab:0d:c2:
+# 21:28:70:88:ff:d6:26:6c:6c:60:04:25:4e:55:7e:
+# 7d:ef:bf:94:48:de:b7:1d:dd:70:8d:05:5f:88:a5:
+# 9b:f2:c2:ee:ea:d1:40:41:6d:62:38:1d:56:06:c5:
+# 03:47:51:20:19:fc:7b:10:0b:0e:62:ae:76:55:bf:
+# 5f:77:be:3e:49:01:53:3d:98:25:03:76:24:5a:1d:
+# b4:db:89:ea:79:e5:b6:b3:3b:3f:ba:4c:28:41:7f:
+# 06:ac:6a:8e:c1:d0:f6:05:1d:7d:e6:42:86:e3:a5:
+# d5:47
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Subject Key Identifier:
+# C4:79:CA:8E:A1:4E:03:1D:1C:DC:6B:DB:31:5B:94:3E:3F:30:7F:2D
+# Signature Algorithm: sha256WithRSAEncryption
+# 2d:c5:13:cf:56:80:7b:7a:78:bd:9f:ae:2c:99:e7:ef:da:df:
+# 94:5e:09:69:a7:e7:6e:68:8c:bd:72:be:47:a9:0e:97:12:b8:
+# 4a:f1:64:d3:39:df:25:34:d4:c1:cd:4e:81:f0:0f:04:c4:24:
+# b3:34:96:c6:a6:aa:30:df:68:61:73:d7:f9:8e:85:89:ef:0e:
+# 5e:95:28:4a:2a:27:8f:10:8e:2e:7c:86:c4:02:9e:da:0c:77:
+# 65:0e:44:0d:92:fd:fd:b3:16:36:fa:11:0d:1d:8c:0e:07:89:
+# 6a:29:56:f7:72:f4:dd:15:9c:77:35:66:57:ab:13:53:d8:8e:
+# c1:40:c5:d7:13:16:5a:72:c7:b7:69:01:c4:7a:b1:83:01:68:
+# 7d:8d:41:a1:94:18:c1:25:5c:fc:f0:fe:83:02:87:7c:0d:0d:
+# cf:2e:08:5c:4a:40:0d:3e:ec:81:61:e6:24:db:ca:e0:0e:2d:
+# 07:b2:3e:56:dc:8d:f5:41:85:07:48:9b:0c:0b:cb:49:3f:7d:
+# ec:b7:fd:cb:8d:67:89:1a:ab:ed:bb:1e:a3:00:08:08:17:2a:
+# 82:5c:31:5d:46:8a:2d:0f:86:9b:74:d9:45:fb:d4:40:b1:7a:
+# aa:68:2d:86:b2:99:22:e1:c1:2b:c7:9c:f8:f3:5f:a8:82:12:
+# eb:19:11:2d
+-----BEGIN CERTIFICATE-----
+MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
+mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
+MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
+BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
+MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
+BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
+hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
+5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
+JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
+DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
+huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
+HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
+AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
+zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
+kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
+AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
+SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
+spki4cErx5z481+oghLrGREt
+-----END CERTIFICATE-----
+# GeoTrust Primary Certification Authority.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# 18:ac:b5:6a:fd:69:b6:15:3a:63:6c:af:da:fa:c4:a1
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
+# Validity
+# Not Before: Nov 27 00:00:00 2006 GMT
+# Not After : Jul 16 23:59:59 2036 GMT
+# Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:be:b8:15:7b:ff:d4:7c:7d:67:ad:83:64:7b:c8:
+# 42:53:2d:df:f6:84:08:20:61:d6:01:59:6a:9c:44:
+# 11:af:ef:76:fd:95:7e:ce:61:30:bb:7a:83:5f:02:
+# bd:01:66:ca:ee:15:8d:6f:a1:30:9c:bd:a1:85:9e:
+# 94:3a:f3:56:88:00:31:cf:d8:ee:6a:96:02:d9:ed:
+# 03:8c:fb:75:6d:e7:ea:b8:55:16:05:16:9a:f4:e0:
+# 5e:b1:88:c0:64:85:5c:15:4d:88:c7:b7:ba:e0:75:
+# e9:ad:05:3d:9d:c7:89:48:e0:bb:28:c8:03:e1:30:
+# 93:64:5e:52:c0:59:70:22:35:57:88:8a:f1:95:0a:
+# 83:d7:bc:31:73:01:34:ed:ef:46:71:e0:6b:02:a8:
+# 35:72:6b:97:9b:66:e0:cb:1c:79:5f:d8:1a:04:68:
+# 1e:47:02:e6:9d:60:e2:36:97:01:df:ce:35:92:df:
+# be:67:c7:6d:77:59:3b:8f:9d:d6:90:15:94:bc:42:
+# 34:10:c1:39:f9:b1:27:3e:7e:d6:8a:75:c5:b2:af:
+# 96:d3:a2:de:9b:e4:98:be:7d:e1:e9:81:ad:b6:6f:
+# fc:d7:0e:da:e0:34:b0:0d:1a:77:e7:e3:08:98:ef:
+# 58:fa:9c:84:b7:36:af:c2:df:ac:d2:f4:10:06:70:
+# 71:35
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Subject Key Identifier:
+# 2C:D5:50:41:97:15:8B:F0:8F:36:61:5B:4A:FB:6B:D9:99:C9:33:92
+# Signature Algorithm: sha1WithRSAEncryption
+# 5a:70:7f:2c:dd:b7:34:4f:f5:86:51:a9:26:be:4b:b8:aa:f1:
+# 71:0d:dc:61:c7:a0:ea:34:1e:7a:77:0f:04:35:e8:27:8f:6c:
+# 90:bf:91:16:24:46:3e:4a:4e:ce:2b:16:d5:0b:52:1d:fc:1f:
+# 67:a2:02:45:31:4f:ce:f3:fa:03:a7:79:9d:53:6a:d9:da:63:
+# 3a:f8:80:d7:d3:99:e1:a5:e1:be:d4:55:71:98:35:3a:be:93:
+# ea:ae:ad:42:b2:90:6f:e0:fc:21:4d:35:63:33:89:49:d6:9b:
+# 4e:ca:c7:e7:4e:09:00:f7:da:c7:ef:99:62:99:77:b6:95:22:
+# 5e:8a:a0:ab:f4:b8:78:98:ca:38:19:99:c9:72:9e:78:cd:4b:
+# ac:af:19:a0:73:12:2d:fc:c2:41:ba:81:91:da:16:5a:31:b7:
+# f9:b4:71:80:12:48:99:72:73:5a:59:53:c1:63:52:33:ed:a7:
+# c9:d2:39:02:70:fa:e0:b1:42:66:29:aa:9b:51:ed:30:54:22:
+# 14:5f:d9:ab:1d:c1:e4:94:f0:f8:f5:2b:f7:ea:ca:78:46:d6:
+# b8:91:fd:a6:0d:2b:1a:14:01:3e:80:f0:42:a0:95:07:5e:6d:
+# cd:cc:4b:a4:45:8d:ab:12:e8:b3:de:5a:e5:a0:7c:e8:0f:22:
+# 1d:5a:e9:59
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
+R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
+MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
+AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
+ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
+7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
+kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
+mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
+KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
+6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
+4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
+oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
+UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
+AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+-----END CERTIFICATE-----
+# Go Daddy Class 2 Certification Authority.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number: 0 (0x0)
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
+# Validity
+# Not Before: Jun 29 17:06:20 2004 GMT
+# Not After : Jun 29 17:06:20 2034 GMT
+# Subject: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:de:9d:d7:ea:57:18:49:a1:5b:eb:d7:5f:48:86:
+# ea:be:dd:ff:e4:ef:67:1c:f4:65:68:b3:57:71:a0:
+# 5e:77:bb:ed:9b:49:e9:70:80:3d:56:18:63:08:6f:
+# da:f2:cc:d0:3f:7f:02:54:22:54:10:d8:b2:81:d4:
+# c0:75:3d:4b:7f:c7:77:c3:3e:78:ab:1a:03:b5:20:
+# 6b:2f:6a:2b:b1:c5:88:7e:c4:bb:1e:b0:c1:d8:45:
+# 27:6f:aa:37:58:f7:87:26:d7:d8:2d:f6:a9:17:b7:
+# 1f:72:36:4e:a6:17:3f:65:98:92:db:2a:6e:5d:a2:
+# fe:88:e0:0b:de:7f:e5:8d:15:e1:eb:cb:3a:d5:e2:
+# 12:a2:13:2d:d8:8e:af:5f:12:3d:a0:08:05:08:b6:
+# 5c:a5:65:38:04:45:99:1e:a3:60:60:74:c5:41:a5:
+# 72:62:1b:62:c5:1f:6f:5f:1a:42:be:02:51:65:a8:
+# ae:23:18:6a:fc:78:03:a9:4d:7f:80:c3:fa:ab:5a:
+# fc:a1:40:a4:ca:19:16:fe:b2:c8:ef:5e:73:0d:ee:
+# 77:bd:9a:f6:79:98:bc:b1:07:67:a2:15:0d:dd:a0:
+# 58:c6:44:7b:0a:3e:62:28:5f:ba:41:07:53:58:cf:
+# 11:7e:38:74:c5:f8:ff:b5:69:90:8f:84:74:ea:97:
+# 1b:af
+# Exponent: 3 (0x3)
+# X509v3 extensions:
+# X509v3 Subject Key Identifier:
+# D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
+# X509v3 Authority Key Identifier:
+# keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
+# DirName:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
+# serial:00
+#
+# X509v3 Basic Constraints:
+# CA:TRUE
+# Signature Algorithm: sha1WithRSAEncryption
+# 32:4b:f3:b2:ca:3e:91:fc:12:c6:a1:07:8c:8e:77:a0:33:06:
+# 14:5c:90:1e:18:f7:08:a6:3d:0a:19:f9:87:80:11:6e:69:e4:
+# 96:17:30:ff:34:91:63:72:38:ee:cc:1c:01:a3:1d:94:28:a4:
+# 31:f6:7a:c4:54:d7:f6:e5:31:58:03:a2:cc:ce:62:db:94:45:
+# 73:b5:bf:45:c9:24:b5:d5:82:02:ad:23:79:69:8d:b8:b6:4d:
+# ce:cf:4c:ca:33:23:e8:1c:88:aa:9d:8b:41:6e:16:c9:20:e5:
+# 89:9e:cd:3b:da:70:f7:7e:99:26:20:14:54:25:ab:6e:73:85:
+# e6:9b:21:9d:0a:6c:82:0e:a8:f8:c2:0c:fa:10:1e:6c:96:ef:
+# 87:0d:c4:0f:61:8b:ad:ee:83:2b:95:f8:8e:92:84:72:39:eb:
+# 20:ea:83:ed:83:cd:97:6e:08:bc:eb:4e:26:b6:73:2b:e4:d3:
+# f6:4c:fe:26:71:e2:61:11:74:4a:ff:57:1a:87:0f:75:48:2e:
+# cf:51:69:17:a0:02:12:61:95:d5:d1:40:b2:10:4c:ee:c4:ac:
+# 10:43:a6:a5:9e:0a:d5:95:62:9a:0d:cf:88:82:c5:32:0c:e4:
+# 2b:9f:45:e6:0d:9f:28:9c:b1:b9:2a:5a:57:ad:37:0f:af:1d:
+# 7f:db:bd:9f
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
+MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
+YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
+MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
+ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
+MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
+ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
+PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
+wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
+EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
+avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
+sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
+/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
+IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
+OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
+TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
+dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
+ReYNnyicsbkqWletNw+vHX/bvZ8=
+-----END CERTIFICATE-----
+# Go Daddy Root Certificate Authority - G2.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number: 0 (0x0)
+# Signature Algorithm: sha256WithRSAEncryption
+# Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
+# Validity
+# Not Before: Sep 1 00:00:00 2009 GMT
+# Not After : Dec 31 23:59:59 2037 GMT
+# Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:bf:71:62:08:f1:fa:59:34:f7:1b:c9:18:a3:f7:
+# 80:49:58:e9:22:83:13:a6:c5:20:43:01:3b:84:f1:
+# e6:85:49:9f:27:ea:f6:84:1b:4e:a0:b4:db:70:98:
+# c7:32:01:b1:05:3e:07:4e:ee:f4:fa:4f:2f:59:30:
+# 22:e7:ab:19:56:6b:e2:80:07:fc:f3:16:75:80:39:
+# 51:7b:e5:f9:35:b6:74:4e:a9:8d:82:13:e4:b6:3f:
+# a9:03:83:fa:a2:be:8a:15:6a:7f:de:0b:c3:b6:19:
+# 14:05:ca:ea:c3:a8:04:94:3b:46:7c:32:0d:f3:00:
+# 66:22:c8:8d:69:6d:36:8c:11:18:b7:d3:b2:1c:60:
+# b4:38:fa:02:8c:ce:d3:dd:46:07:de:0a:3e:eb:5d:
+# 7c:c8:7c:fb:b0:2b:53:a4:92:62:69:51:25:05:61:
+# 1a:44:81:8c:2c:a9:43:96:23:df:ac:3a:81:9a:0e:
+# 29:c5:1c:a9:e9:5d:1e:b6:9e:9e:30:0a:39:ce:f1:
+# 88:80:fb:4b:5d:cc:32:ec:85:62:43:25:34:02:56:
+# 27:01:91:b4:3b:70:2a:3f:6e:b1:e8:9c:88:01:7d:
+# 9f:d4:f9:db:53:6d:60:9d:bf:2c:e7:58:ab:b8:5f:
+# 46:fc:ce:c4:1b:03:3c:09:eb:49:31:5c:69:46:b3:
+# e0:47
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Subject Key Identifier:
+# 3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE
+# Signature Algorithm: sha256WithRSAEncryption
+# 99:db:5d:79:d5:f9:97:59:67:03:61:f1:7e:3b:06:31:75:2d:
+# a1:20:8e:4f:65:87:b4:f7:a6:9c:bc:d8:e9:2f:d0:db:5a:ee:
+# cf:74:8c:73:b4:38:42:da:05:7b:f8:02:75:b8:fd:a5:b1:d7:
+# ae:f6:d7:de:13:cb:53:10:7e:8a:46:d1:97:fa:b7:2e:2b:11:
+# ab:90:b0:27:80:f9:e8:9f:5a:e9:37:9f:ab:e4:df:6c:b3:85:
+# 17:9d:3d:d9:24:4f:79:91:35:d6:5f:04:eb:80:83:ab:9a:02:
+# 2d:b5:10:f4:d8:90:c7:04:73:40:ed:72:25:a0:a9:9f:ec:9e:
+# ab:68:12:99:57:c6:8f:12:3a:09:a4:bd:44:fd:06:15:37:c1:
+# 9b:e4:32:a3:ed:38:e8:d8:64:f3:2c:7e:14:fc:02:ea:9f:cd:
+# ff:07:68:17:db:22:90:38:2d:7a:8d:d1:54:f1:69:e3:5f:33:
+# ca:7a:3d:7b:0a:e3:ca:7f:5f:39:e5:e2:75:ba:c5:76:18:33:
+# ce:2c:f0:2f:4c:ad:f7:b1:e7:ce:4f:a8:c4:9b:4a:54:06:c5:
+# 7f:7d:d5:08:0f:e2:1c:fe:7e:17:b8:ac:5e:f6:d4:16:b2:43:
+# 09:0c:4d:f6:a7:6b:b4:99:84:65:ca:7a:88:e2:e2:44:be:5c:
+# f7:ea:1c:f5
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
+EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
+ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
+NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
+EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
+AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
+E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
+/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
+DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
+GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
+tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
+AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
+FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
+WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
+9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
+gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
+2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
+4uJEvlz36hz1
+-----END CERTIFICATE-----
+# Go Daddy Secure Certification Authority serialNumber=07969287.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number: 769 (0x301)
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
+# Validity
+# Not Before: Nov 16 01:54:37 2006 GMT
+# Not After : Nov 16 01:54:37 2026 GMT
+# Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:c4:2d:d5:15:8c:9c:26:4c:ec:32:35:eb:5f:b8:
+# 59:01:5a:a6:61:81:59:3b:70:63:ab:e3:dc:3d:c7:
+# 2a:b8:c9:33:d3:79:e4:3a:ed:3c:30:23:84:8e:b3:
+# 30:14:b6:b2:87:c3:3d:95:54:04:9e:df:99:dd:0b:
+# 25:1e:21:de:65:29:7e:35:a8:a9:54:eb:f6:f7:32:
+# 39:d4:26:55:95:ad:ef:fb:fe:58:86:d7:9e:f4:00:
+# 8d:8c:2a:0c:bd:42:04:ce:a7:3f:04:f6:ee:80:f2:
+# aa:ef:52:a1:69:66:da:be:1a:ad:5d:da:2c:66:ea:
+# 1a:6b:bb:e5:1a:51:4a:00:2f:48:c7:98:75:d8:b9:
+# 29:c8:ee:f8:66:6d:0a:9c:b3:f3:fc:78:7c:a2:f8:
+# a3:f2:b5:c3:f3:b9:7a:91:c1:a7:e6:25:2e:9c:a8:
+# ed:12:65:6e:6a:f6:12:44:53:70:30:95:c3:9c:2b:
+# 58:2b:3d:08:74:4a:f2:be:51:b0:bf:87:d0:4c:27:
+# 58:6b:b5:35:c5:9d:af:17:31:f8:0b:8f:ee:ad:81:
+# 36:05:89:08:98:cf:3a:af:25:87:c0:49:ea:a7:fd:
+# 67:f7:45:8e:97:cc:14:39:e2:36:85:b5:7e:1a:37:
+# fd:16:f6:71:11:9a:74:30:16:fe:13:94:a3:3f:84:
+# 0d:4f
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Subject Key Identifier:
+# FD:AC:61:32:93:6C:45:D6:E2:EE:85:5F:9A:BA:E7:76:99:68:CC:E7
+# X509v3 Authority Key Identifier:
+# keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
+#
+# X509v3 Basic Constraints: critical
+# CA:TRUE, pathlen:0
+# Authority Information Access:
+# OCSP - URI:http://ocsp.godaddy.com
+#
+# X509v3 CRL Distribution Points:
+#
+# Full Name:
+# URI:http://certificates.godaddy.com/repository/gdroot.crl
+#
+# X509v3 Certificate Policies:
+# Policy: X509v3 Any Policy
+# CPS: http://certificates.godaddy.com/repository
+#
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# Signature Algorithm: sha1WithRSAEncryption
+# d2:86:c0:ec:bd:f9:a1:b6:67:ee:66:0b:a2:06:3a:04:50:8e:
+# 15:72:ac:4a:74:95:53:cb:37:cb:44:49:ef:07:90:6b:33:d9:
+# 96:f0:94:56:a5:13:30:05:3c:85:32:21:7b:c9:c7:0a:a8:24:
+# a4:90:de:46:d3:25:23:14:03:67:c2:10:d6:6f:0f:5d:7b:7a:
+# cc:9f:c5:58:2a:c1:c4:9e:21:a8:5a:f3:ac:a4:46:f3:9e:e4:
+# 63:cb:2f:90:a4:29:29:01:d9:72:2c:29:df:37:01:27:bc:4f:
+# ee:68:d3:21:8f:c0:b3:e4:f5:09:ed:d2:10:aa:53:b4:be:f0:
+# cc:59:0b:d6:3b:96:1c:95:24:49:df:ce:ec:fd:a7:48:91:14:
+# 45:0e:3a:36:6f:da:45:b3:45:a2:41:c9:d4:d7:44:4e:3e:b9:
+# 74:76:d5:a2:13:55:2c:c6:87:a3:b5:99:ac:06:84:87:7f:75:
+# 06:fc:bf:14:4c:0e:cc:6e:c4:df:3d:b7:12:71:f4:e8:f1:51:
+# 40:22:28:49:e0:1d:4b:87:a8:34:cc:06:a2:dd:12:5a:d1:86:
+# 36:64:03:35:6f:6f:77:6e:eb:f2:85:50:98:5e:ab:03:53:ad:
+# 91:23:63:1f:16:9c:cd:b9:b2:05:63:3a:e1:f4:68:1b:17:05:
+# 35:95:53:ee
+-----BEGIN CERTIFICATE-----
+MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
+ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
+RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
+MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
+QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
+b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
+b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
+KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
+VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
+SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
+cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
+6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
+MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
+kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
+BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
+BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
+c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
+AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
+OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
+A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
+0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
+RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
+qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
+U+4=
+-----END CERTIFICATE-----
+# Thawte Premium Server CA.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number: 1 (0x1)
+# Signature Algorithm: md5WithRSAEncryption
+# Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
+# Validity
+# Not Before: Aug 1 00:00:00 1996 GMT
+# Not After : Dec 31 23:59:59 2020 GMT
+# Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (1024 bit)
+# Modulus:
+# 00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f:
+# 38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18:
+# 48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af:
+# 86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2:
+# 21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93:
+# cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44:
+# 6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73:
+# b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07:
+# 8d:f4:42:4d:e7:40:9d:1c:37
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# Signature Algorithm: md5WithRSAEncryption
+# 26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7:
+# c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5:
+# 08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb:
+# c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59:
+# 6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9:
+# a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92:
+# 32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07:
+# 14:42
+-----BEGIN CERTIFICATE-----
+MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
+dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
+MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
+MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
+A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
+cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
+VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
+ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
+uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
+9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
+hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
+pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
+-----END CERTIFICATE-----
+# Thawte Primary Root CA - G2.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# 35:fc:26:5c:d9:84:4f:c9:3d:26:3d:57:9b:ae:d7:56
+# Signature Algorithm: ecdsa-with-SHA384
+# Issuer: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2
+# Validity
+# Not Before: Nov 5 00:00:00 2007 GMT
+# Not After : Jan 18 23:59:59 2038 GMT
+# Subject: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2
+# Subject Public Key Info:
+# Public Key Algorithm: id-ecPublicKey
+# Public-Key: (384 bit)
+# pub:
+# 04:a2:d5:9c:82:7b:95:9d:f1:52:78:87:fe:8a:16:
+# bf:05:e6:df:a3:02:4f:0d:07:c6:00:51:ba:0c:02:
+# 52:2d:22:a4:42:39:c4:fe:8f:ea:c9:c1:be:d4:4d:
+# ff:9f:7a:9e:e2:b1:7c:9a:ad:a7:86:09:73:87:d1:
+# e7:9a:e3:7a:a5:aa:6e:fb:ba:b3:70:c0:67:88:a2:
+# 35:d4:a3:9a:b1:fd:ad:c2:ef:31:fa:a8:b9:f3:fb:
+# 08:c6:91:d1:fb:29:95
+# ASN1 OID: secp384r1
+# X509v3 extensions:
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Subject Key Identifier:
+# 9A:D8:00:30:00:E7:6B:7F:85:18:EE:8B:B6:CE:8A:0C:F8:11:E1:BB
+# Signature Algorithm: ecdsa-with-SHA384
+# 30:66:02:31:00:dd:f8:e0:57:47:5b:a7:e6:0a:c3:bd:f5:80:
+# 8a:97:35:0d:1b:89:3c:54:86:77:28:ca:a1:f4:79:de:b5:e6:
+# 38:b0:f0:65:70:8c:7f:02:54:c2:bf:ff:d8:a1:3e:d9:cf:02:
+# 31:00:c4:8d:94:fc:dc:53:d2:dc:9d:78:16:1f:15:33:23:53:
+# 52:e3:5a:31:5d:9d:ca:ae:bd:13:29:44:0d:27:5b:a8:e7:68:
+# 9c:12:f7:58:3f:2e:72:02:57:a3:8f:a1:14:2e
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
+IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
+BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
+MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
+YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
+dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
+BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
+papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
+DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
+KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
+XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
+# Thawte Primary Root CA - G3.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# 60:01:97:b7:46:a7:ea:b4:b4:9a:d6:4b:2f:f7:90:fb
+# Signature Algorithm: sha256WithRSAEncryption
+# Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3
+# Validity
+# Not Before: Apr 2 00:00:00 2008 GMT
+# Not After : Dec 1 23:59:59 2037 GMT
+# Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:b2:bf:27:2c:fb:db:d8:5b:dd:78:7b:1b:9e:77:
+# 66:81:cb:3e:bc:7c:ae:f3:a6:27:9a:34:a3:68:31:
+# 71:38:33:62:e4:f3:71:66:79:b1:a9:65:a3:a5:8b:
+# d5:8f:60:2d:3f:42:cc:aa:6b:32:c0:23:cb:2c:41:
+# dd:e4:df:fc:61:9c:e2:73:b2:22:95:11:43:18:5f:
+# c4:b6:1f:57:6c:0a:05:58:22:c8:36:4c:3a:7c:a5:
+# d1:cf:86:af:88:a7:44:02:13:74:71:73:0a:42:59:
+# 02:f8:1b:14:6b:42:df:6f:5f:ba:6b:82:a2:9d:5b:
+# e7:4a:bd:1e:01:72:db:4b:74:e8:3b:7f:7f:7d:1f:
+# 04:b4:26:9b:e0:b4:5a:ac:47:3d:55:b8:d7:b0:26:
+# 52:28:01:31:40:66:d8:d9:24:bd:f6:2a:d8:ec:21:
+# 49:5c:9b:f6:7a:e9:7f:55:35:7e:96:6b:8d:93:93:
+# 27:cb:92:bb:ea:ac:40:c0:9f:c2:f8:80:cf:5d:f4:
+# 5a:dc:ce:74:86:a6:3e:6c:0b:53:ca:bd:92:ce:19:
+# 06:72:e6:0c:5c:38:69:c7:04:d6:bc:6c:ce:5b:f6:
+# f7:68:9c:dc:25:15:48:88:a1:e9:a9:f8:98:9c:e0:
+# f3:d5:31:28:61:11:6c:67:96:8d:39:99:cb:c2:45:
+# 24:39
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Subject Key Identifier:
+# AD:6C:AA:94:60:9C:ED:E4:FF:FA:3E:0A:74:2B:63:03:F7:B6:59:BF
+# Signature Algorithm: sha256WithRSAEncryption
+# 1a:40:d8:95:65:ac:09:92:89:c6:39:f4:10:e5:a9:0e:66:53:
+# 5d:78:de:fa:24:91:bb:e7:44:51:df:c6:16:34:0a:ef:6a:44:
+# 51:ea:2b:07:8a:03:7a:c3:eb:3f:0a:2c:52:16:a0:2b:43:b9:
+# 25:90:3f:70:a9:33:25:6d:45:1a:28:3b:27:cf:aa:c3:29:42:
+# 1b:df:3b:4c:c0:33:34:5b:41:88:bf:6b:2b:65:af:28:ef:b2:
+# f5:c3:aa:66:ce:7b:56:ee:b7:c8:cb:67:c1:c9:9c:1a:18:b8:
+# c4:c3:49:03:f1:60:0e:50:cd:46:c5:f3:77:79:f7:b6:15:e0:
+# 38:db:c7:2f:28:a0:0c:3f:77:26:74:d9:25:12:da:31:da:1a:
+# 1e:dc:29:41:91:22:3c:69:a7:bb:02:f2:b6:5c:27:03:89:f4:
+# 06:ea:9b:e4:72:82:e3:a1:09:c1:e9:00:19:d3:3e:d4:70:6b:
+# ba:71:a6:aa:58:ae:f4:bb:e9:6c:b6:ef:87:cc:9b:bb:ff:39:
+# e6:56:61:d3:0a:a7:c4:5c:4c:60:7b:05:77:26:7a:bf:d8:07:
+# 52:2c:62:f7:70:63:d9:39:bc:6f:1c:c2:79:dc:76:29:af:ce:
+# c5:2c:64:04:5e:88:36:6e:31:d4:40:1a:62:34:36:3f:35:01:
+# ae:ac:63:a0
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
+rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
+BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
+Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
+LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
+MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
+ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
+gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
+YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
+b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
+9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
+zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
+OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
+HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
+2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
+oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
+t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
+KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
+m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
+MdRAGmI0Nj81Aa6sY6A=
+-----END CERTIFICATE-----
+# Thawte Primary Root CA.pem
+# Certificate:
+# Data:
+# Version: 3 (0x2)
+# Serial Number:
+# 34:4e:d5:57:20:d5:ed:ec:49:f4:2f:ce:37:db:2b:6d
+# Signature Algorithm: sha1WithRSAEncryption
+# Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA
+# Validity
+# Not Before: Nov 17 00:00:00 2006 GMT
+# Not After : Jul 16 23:59:59 2036 GMT
+# Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA
+# Subject Public Key Info:
+# Public Key Algorithm: rsaEncryption
+# Public-Key: (2048 bit)
+# Modulus:
+# 00:ac:a0:f0:fb:80:59:d4:9c:c7:a4:cf:9d:a1:59:
+# 73:09:10:45:0c:0d:2c:6e:68:f1:6c:5b:48:68:49:
+# 59:37:fc:0b:33:19:c2:77:7f:cc:10:2d:95:34:1c:
+# e6:eb:4d:09:a7:1c:d2:b8:c9:97:36:02:b7:89:d4:
+# 24:5f:06:c0:cc:44:94:94:8d:02:62:6f:eb:5a:dd:
+# 11:8d:28:9a:5c:84:90:10:7a:0d:bd:74:66:2f:6a:
+# 38:a0:e2:d5:54:44:eb:1d:07:9f:07:ba:6f:ee:e9:
+# fd:4e:0b:29:f5:3e:84:a0:01:f1:9c:ab:f8:1c:7e:
+# 89:a4:e8:a1:d8:71:65:0d:a3:51:7b:ee:bc:d2:22:
+# 60:0d:b9:5b:9d:df:ba:fc:51:5b:0b:af:98:b2:e9:
+# 2e:e9:04:e8:62:87:de:2b:c8:d7:4e:c1:4c:64:1e:
+# dd:cf:87:58:ba:4a:4f:ca:68:07:1d:1c:9d:4a:c6:
+# d5:2f:91:cc:7c:71:72:1c:c5:c0:67:eb:32:fd:c9:
+# 92:5c:94:da:85:c0:9b:bf:53:7d:2b:09:f4:8c:9d:
+# 91:1f:97:6a:52:cb:de:09:36:a4:77:d8:7b:87:50:
+# 44:d5:3e:6e:29:69:fb:39:49:26:1e:09:a5:80:7b:
+# 40:2d:eb:e8:27:85:c9:fe:61:fd:7e:e6:7c:97:1d:
+# d5:9d
+# Exponent: 65537 (0x10001)
+# X509v3 extensions:
+# X509v3 Basic Constraints: critical
+# CA:TRUE
+# X509v3 Key Usage: critical
+# Certificate Sign, CRL Sign
+# X509v3 Subject Key Identifier:
+# 7B:5B:45:CF:AF:CE:CB:7A:FD:31:92:1A:6A:B6:F3:46:EB:57:48:50
+# Signature Algorithm: sha1WithRSAEncryption
+# 79:11:c0:4b:b3:91:b6:fc:f0:e9:67:d4:0d:6e:45:be:55:e8:
+# 93:d2:ce:03:3f:ed:da:25:b0:1d:57:cb:1e:3a:76:a0:4c:ec:
+# 50:76:e8:64:72:0c:a4:a9:f1:b8:8b:d6:d6:87:84:bb:32:e5:
+# 41:11:c0:77:d9:b3:60:9d:eb:1b:d5:d1:6e:44:44:a9:a6:01:
+# ec:55:62:1d:77:b8:5c:8e:48:49:7c:9c:3b:57:11:ac:ad:73:
+# 37:8e:2f:78:5c:90:68:47:d9:60:60:e6:fc:07:3d:22:20:17:
+# c4:f7:16:e9:c4:d8:72:f9:c8:73:7c:df:16:2f:15:a9:3e:fd:
+# 6a:27:b6:a1:eb:5a:ba:98:1f:d5:e3:4d:64:0a:9d:13:c8:61:
+# ba:f5:39:1c:87:ba:b8:bd:7b:22:7f:f6:fe:ac:40:79:e5:ac:
+# 10:6f:3d:8f:1b:79:76:8b:c4:37:b3:21:18:84:e5:36:00:eb:
+# 63:20:99:b9:e9:fe:33:04:bb:41:c8:c1:02:f9:44:63:20:9e:
+# 81:ce:42:d3:d6:3f:2c:76:d3:63:9c:59:dd:8f:a6:e1:0e:a0:
+# 2e:41:f7:2e:95:47:cf:bc:fd:33:f3:f6:0b:61:7e:7e:91:2b:
+# 81:47:c2:27:30:ee:a7:10:5d:37:8f:5c:39:2b:e4:04:f0:7b:
+# 8d:56:8c:68
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
+qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
+BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
+NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
+LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
+A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
+W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
+3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
+6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
+Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
+NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
+r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
+DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
+YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
+/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
+LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
+jVaMaA==
+-----END CERTIFICATE-----
diff --git a/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/strict.php b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/strict.php
new file mode 100644
index 0000000..1b4be63
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/dropbox/dropbox-sdk/lib/Dropbox/strict.php
@@ -0,0 +1,13 @@
+decoratedBatch = $decoratedBatch;
+ }
+
+ /**
+ * Allow decorators to implement custom methods
+ *
+ * @param string $method Missing method name
+ * @param array $args Method arguments
+ *
+ * @return mixed
+ * @codeCoverageIgnore
+ */
+ public function __call($method, array $args)
+ {
+ return call_user_func_array(array($this->decoratedBatch, $method), $args);
+ }
+
+ public function add($item)
+ {
+ $this->decoratedBatch->add($item);
+
+ return $this;
+ }
+
+ public function flush()
+ {
+ return $this->decoratedBatch->flush();
+ }
+
+ public function isEmpty()
+ {
+ return $this->decoratedBatch->isEmpty();
+ }
+
+ /**
+ * Trace the decorators associated with the batch
+ *
+ * @return array
+ */
+ public function getDecorators()
+ {
+ $found = array($this);
+ if (method_exists($this->decoratedBatch, 'getDecorators')) {
+ $found = array_merge($found, $this->decoratedBatch->getDecorators());
+ }
+
+ return $found;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/Batch.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/Batch.php
new file mode 100644
index 0000000..4d41c54
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/Batch.php
@@ -0,0 +1,92 @@
+transferStrategy = $transferStrategy;
+ $this->divisionStrategy = $divisionStrategy;
+ $this->queue = new \SplQueue();
+ $this->queue->setIteratorMode(\SplQueue::IT_MODE_DELETE);
+ $this->dividedBatches = array();
+ }
+
+ public function add($item)
+ {
+ $this->queue->enqueue($item);
+
+ return $this;
+ }
+
+ public function flush()
+ {
+ $this->createBatches();
+
+ $items = array();
+ foreach ($this->dividedBatches as $batchIndex => $dividedBatch) {
+ while ($dividedBatch->valid()) {
+ $batch = $dividedBatch->current();
+ $dividedBatch->next();
+ try {
+ $this->transferStrategy->transfer($batch);
+ $items = array_merge($items, $batch);
+ } catch (\Exception $e) {
+ throw new BatchTransferException($batch, $items, $e, $this->transferStrategy, $this->divisionStrategy);
+ }
+ }
+ // Keep the divided batch down to a minimum in case of a later exception
+ unset($this->dividedBatches[$batchIndex]);
+ }
+
+ return $items;
+ }
+
+ public function isEmpty()
+ {
+ return count($this->queue) == 0 && count($this->dividedBatches) == 0;
+ }
+
+ /**
+ * Create batches for any queued items
+ */
+ protected function createBatches()
+ {
+ if (count($this->queue)) {
+ if ($batches = $this->divisionStrategy->createBatches($this->queue)) {
+ // Convert arrays into iterators
+ if (is_array($batches)) {
+ $batches = new \ArrayIterator($batches);
+ }
+ $this->dividedBatches[] = $batches;
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchBuilder.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchBuilder.php
new file mode 100644
index 0000000..ea99b4d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchBuilder.php
@@ -0,0 +1,199 @@
+ 'Guzzle\Batch\BatchRequestTransfer',
+ 'command' => 'Guzzle\Batch\BatchCommandTransfer'
+ );
+
+ /**
+ * Create a new instance of the BatchBuilder
+ *
+ * @return BatchBuilder
+ */
+ public static function factory()
+ {
+ return new self();
+ }
+
+ /**
+ * Automatically flush the batch when the size of the queue reaches a certain threshold. Adds {@see FlushingBatch}.
+ *
+ * @param $threshold Number of items to allow in the queue before a flush
+ *
+ * @return BatchBuilder
+ */
+ public function autoFlushAt($threshold)
+ {
+ $this->autoFlush = $threshold;
+
+ return $this;
+ }
+
+ /**
+ * Maintain a history of all items that have been transferred using the batch. Adds {@see HistoryBatch}.
+ *
+ * @return BatchBuilder
+ */
+ public function keepHistory()
+ {
+ $this->history = true;
+
+ return $this;
+ }
+
+ /**
+ * Buffer exceptions thrown during transfer so that you can transfer as much as possible, and after a transfer
+ * completes, inspect each exception that was thrown. Enables the {@see ExceptionBufferingBatch} decorator.
+ *
+ * @return BatchBuilder
+ */
+ public function bufferExceptions()
+ {
+ $this->exceptionBuffering = true;
+
+ return $this;
+ }
+
+ /**
+ * Notify a callable each time a batch flush completes. Enables the {@see NotifyingBatch} decorator.
+ *
+ * @param mixed $callable Callable function to notify
+ *
+ * @return BatchBuilder
+ * @throws InvalidArgumentException if the argument is not callable
+ */
+ public function notify($callable)
+ {
+ $this->afterFlush = $callable;
+
+ return $this;
+ }
+
+ /**
+ * Configures the batch to transfer batches of requests. Associates a {@see \Guzzle\Http\BatchRequestTransfer}
+ * object as both the transfer and divisor strategy.
+ *
+ * @param int $batchSize Batch size for each batch of requests
+ *
+ * @return BatchBuilder
+ */
+ public function transferRequests($batchSize = 50)
+ {
+ $className = self::$mapping['request'];
+ $this->transferStrategy = new $className($batchSize);
+ $this->divisorStrategy = $this->transferStrategy;
+
+ return $this;
+ }
+
+ /**
+ * Configures the batch to transfer batches commands. Associates as
+ * {@see \Guzzle\Service\Command\BatchCommandTransfer} as both the transfer and divisor strategy.
+ *
+ * @param int $batchSize Batch size for each batch of commands
+ *
+ * @return BatchBuilder
+ */
+ public function transferCommands($batchSize = 50)
+ {
+ $className = self::$mapping['command'];
+ $this->transferStrategy = new $className($batchSize);
+ $this->divisorStrategy = $this->transferStrategy;
+
+ return $this;
+ }
+
+ /**
+ * Specify the strategy used to divide the queue into an array of batches
+ *
+ * @param BatchDivisorInterface $divisorStrategy Strategy used to divide a batch queue into batches
+ *
+ * @return BatchBuilder
+ */
+ public function createBatchesWith(BatchDivisorInterface $divisorStrategy)
+ {
+ $this->divisorStrategy = $divisorStrategy;
+
+ return $this;
+ }
+
+ /**
+ * Specify the strategy used to transport the items when flush is called
+ *
+ * @param BatchTransferInterface $transferStrategy How items are transferred
+ *
+ * @return BatchBuilder
+ */
+ public function transferWith(BatchTransferInterface $transferStrategy)
+ {
+ $this->transferStrategy = $transferStrategy;
+
+ return $this;
+ }
+
+ /**
+ * Create and return the instantiated batch
+ *
+ * @return BatchInterface
+ * @throws RuntimeException if no transfer strategy has been specified
+ */
+ public function build()
+ {
+ if (!$this->transferStrategy) {
+ throw new RuntimeException('No transfer strategy has been specified');
+ }
+
+ if (!$this->divisorStrategy) {
+ throw new RuntimeException('No divisor strategy has been specified');
+ }
+
+ $batch = new Batch($this->transferStrategy, $this->divisorStrategy);
+
+ if ($this->exceptionBuffering) {
+ $batch = new ExceptionBufferingBatch($batch);
+ }
+
+ if ($this->afterFlush) {
+ $batch = new NotifyingBatch($batch, $this->afterFlush);
+ }
+
+ if ($this->autoFlush) {
+ $batch = new FlushingBatch($batch, $this->autoFlush);
+ }
+
+ if ($this->history) {
+ $batch = new HistoryBatch($batch);
+ }
+
+ return $batch;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureDivisor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureDivisor.php
new file mode 100644
index 0000000..e0a2d95
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureDivisor.php
@@ -0,0 +1,39 @@
+callable = $callable;
+ $this->context = $context;
+ }
+
+ public function createBatches(\SplQueue $queue)
+ {
+ return call_user_func($this->callable, $queue, $this->context);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureTransfer.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureTransfer.php
new file mode 100644
index 0000000..9cbf1ab
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureTransfer.php
@@ -0,0 +1,40 @@
+callable = $callable;
+ $this->context = $context;
+ }
+
+ public function transfer(array $batch)
+ {
+ return empty($batch) ? null : call_user_func($this->callable, $batch, $this->context);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchCommandTransfer.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchCommandTransfer.php
new file mode 100644
index 0000000..d55ac7d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchCommandTransfer.php
@@ -0,0 +1,75 @@
+batchSize = $batchSize;
+ }
+
+ /**
+ * Creates batches by grouping commands by their associated client
+ * {@inheritdoc}
+ */
+ public function createBatches(\SplQueue $queue)
+ {
+ $groups = new \SplObjectStorage();
+ foreach ($queue as $item) {
+ if (!$item instanceof CommandInterface) {
+ throw new InvalidArgumentException('All items must implement Guzzle\Service\Command\CommandInterface');
+ }
+ $client = $item->getClient();
+ if (!$groups->contains($client)) {
+ $groups->attach($client, new \ArrayObject(array($item)));
+ } else {
+ $groups[$client]->append($item);
+ }
+ }
+
+ $batches = array();
+ foreach ($groups as $batch) {
+ $batches = array_merge($batches, array_chunk($groups[$batch]->getArrayCopy(), $this->batchSize));
+ }
+
+ return $batches;
+ }
+
+ public function transfer(array $batch)
+ {
+ if (empty($batch)) {
+ return;
+ }
+
+ // Get the client of the first found command
+ $client = reset($batch)->getClient();
+
+ // Keep a list of all commands with invalid clients
+ $invalid = array_filter($batch, function ($command) use ($client) {
+ return $command->getClient() !== $client;
+ });
+
+ if (!empty($invalid)) {
+ throw new InconsistentClientTransferException($invalid);
+ }
+
+ $client->execute($batch);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchDivisorInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchDivisorInterface.php
new file mode 100644
index 0000000..0214f05
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchDivisorInterface.php
@@ -0,0 +1,18 @@
+batchSize = $batchSize;
+ }
+
+ /**
+ * Creates batches of requests by grouping requests by their associated curl multi object.
+ * {@inheritdoc}
+ */
+ public function createBatches(\SplQueue $queue)
+ {
+ // Create batches by client objects
+ $groups = new \SplObjectStorage();
+ foreach ($queue as $item) {
+ if (!$item instanceof RequestInterface) {
+ throw new InvalidArgumentException('All items must implement Guzzle\Http\Message\RequestInterface');
+ }
+ $client = $item->getClient();
+ if (!$groups->contains($client)) {
+ $groups->attach($client, array($item));
+ } else {
+ $current = $groups[$client];
+ $current[] = $item;
+ $groups[$client] = $current;
+ }
+ }
+
+ $batches = array();
+ foreach ($groups as $batch) {
+ $batches = array_merge($batches, array_chunk($groups[$batch], $this->batchSize));
+ }
+
+ return $batches;
+ }
+
+ public function transfer(array $batch)
+ {
+ if ($batch) {
+ reset($batch)->getClient()->send($batch);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchSizeDivisor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchSizeDivisor.php
new file mode 100644
index 0000000..67f90a5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchSizeDivisor.php
@@ -0,0 +1,47 @@
+size = $size;
+ }
+
+ /**
+ * Set the size of each batch
+ *
+ * @param int $size Size of each batch
+ *
+ * @return BatchSizeDivisor
+ */
+ public function setSize($size)
+ {
+ $this->size = $size;
+
+ return $this;
+ }
+
+ /**
+ * Get the size of each batch
+ *
+ * @return int
+ */
+ public function getSize()
+ {
+ return $this->size;
+ }
+
+ public function createBatches(\SplQueue $queue)
+ {
+ return array_chunk(iterator_to_array($queue, false), $this->size);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchTransferInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchTransferInterface.php
new file mode 100644
index 0000000..2e0b60d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchTransferInterface.php
@@ -0,0 +1,16 @@
+batch = $batch;
+ $this->transferredItems = $transferredItems;
+ $this->transferStrategy = $transferStrategy;
+ $this->divisorStrategy = $divisorStrategy;
+ parent::__construct(
+ 'Exception encountered while transferring batch: ' . $exception->getMessage(),
+ $exception->getCode(),
+ $exception
+ );
+ }
+
+ /**
+ * Get the batch that we being sent when the exception occurred
+ *
+ * @return array
+ */
+ public function getBatch()
+ {
+ return $this->batch;
+ }
+
+ /**
+ * Get the items transferred at the point in which the exception was encountered
+ *
+ * @return array
+ */
+ public function getTransferredItems()
+ {
+ return $this->transferredItems;
+ }
+
+ /**
+ * Get the transfer strategy
+ *
+ * @return TransferStrategy
+ */
+ public function getTransferStrategy()
+ {
+ return $this->transferStrategy;
+ }
+
+ /**
+ * Get the divisor strategy
+ *
+ * @return DivisorStrategy
+ */
+ public function getDivisorStrategy()
+ {
+ return $this->divisorStrategy;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/ExceptionBufferingBatch.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/ExceptionBufferingBatch.php
new file mode 100644
index 0000000..d7a8928
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/ExceptionBufferingBatch.php
@@ -0,0 +1,50 @@
+decoratedBatch->isEmpty()) {
+ try {
+ $transferredItems = $this->decoratedBatch->flush();
+ } catch (BatchTransferException $e) {
+ $this->exceptions[] = $e;
+ $transferredItems = $e->getTransferredItems();
+ }
+ $items = array_merge($items, $transferredItems);
+ }
+
+ return $items;
+ }
+
+ /**
+ * Get the buffered exceptions
+ *
+ * @return array Array of BatchTransferException objects
+ */
+ public function getExceptions()
+ {
+ return $this->exceptions;
+ }
+
+ /**
+ * Clear the buffered exceptions
+ */
+ public function clearExceptions()
+ {
+ $this->exceptions = array();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/FlushingBatch.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/FlushingBatch.php
new file mode 100644
index 0000000..367b684
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/FlushingBatch.php
@@ -0,0 +1,60 @@
+threshold = $threshold;
+ parent::__construct($decoratedBatch);
+ }
+
+ /**
+ * Set the auto-flush threshold
+ *
+ * @param int $threshold The auto-flush threshold
+ *
+ * @return FlushingBatch
+ */
+ public function setThreshold($threshold)
+ {
+ $this->threshold = $threshold;
+
+ return $this;
+ }
+
+ /**
+ * Get the auto-flush threshold
+ *
+ * @return int
+ */
+ public function getThreshold()
+ {
+ return $this->threshold;
+ }
+
+ public function add($item)
+ {
+ $this->decoratedBatch->add($item);
+ if (++$this->currentTotal >= $this->threshold) {
+ $this->currentTotal = 0;
+ $this->decoratedBatch->flush();
+ }
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/HistoryBatch.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/HistoryBatch.php
new file mode 100644
index 0000000..e345fdc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/HistoryBatch.php
@@ -0,0 +1,39 @@
+history[] = $item;
+ $this->decoratedBatch->add($item);
+
+ return $this;
+ }
+
+ /**
+ * Get the batch history
+ *
+ * @return array
+ */
+ public function getHistory()
+ {
+ return $this->history;
+ }
+
+ /**
+ * Clear the batch history
+ */
+ public function clearHistory()
+ {
+ $this->history = array();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/NotifyingBatch.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/NotifyingBatch.php
new file mode 100644
index 0000000..96d04da
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/NotifyingBatch.php
@@ -0,0 +1,38 @@
+callable = $callable;
+ parent::__construct($decoratedBatch);
+ }
+
+ public function flush()
+ {
+ $items = $this->decoratedBatch->flush();
+ call_user_func($this->callable, $items);
+
+ return $items;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/composer.json
new file mode 100644
index 0000000..12404d3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Batch/composer.json
@@ -0,0 +1,31 @@
+{
+ "name": "guzzle/batch",
+ "description": "Guzzle batch component for batching requests, commands, or custom transfers",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["batch", "HTTP", "REST", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/common": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Batch": "" }
+ },
+ "suggest": {
+ "guzzle/http": "self.version",
+ "guzzle/service": "self.version"
+ },
+ "target-dir": "Guzzle/Batch",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/AbstractCacheAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/AbstractCacheAdapter.php
new file mode 100644
index 0000000..a5c5271
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/AbstractCacheAdapter.php
@@ -0,0 +1,21 @@
+cache;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterFactory.php
new file mode 100644
index 0000000..94e6234
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterFactory.php
@@ -0,0 +1,117 @@
+newInstanceArgs($args);
+ }
+ } catch (\Exception $e) {
+ throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterInterface.php
new file mode 100644
index 0000000..970c9e2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterInterface.php
@@ -0,0 +1,55 @@
+callables = $callables;
+ }
+
+ public function contains($id, array $options = null)
+ {
+ return call_user_func($this->callables['contains'], $id, $options);
+ }
+
+ public function delete($id, array $options = null)
+ {
+ return call_user_func($this->callables['delete'], $id, $options);
+ }
+
+ public function fetch($id, array $options = null)
+ {
+ return call_user_func($this->callables['fetch'], $id, $options);
+ }
+
+ public function save($id, $data, $lifeTime = false, array $options = null)
+ {
+ return call_user_func($this->callables['save'], $id, $data, $lifeTime, $options);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/DoctrineCacheAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/DoctrineCacheAdapter.php
new file mode 100644
index 0000000..e1aaf9f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/DoctrineCacheAdapter.php
@@ -0,0 +1,41 @@
+cache = $cache;
+ }
+
+ public function contains($id, array $options = null)
+ {
+ return $this->cache->contains($id);
+ }
+
+ public function delete($id, array $options = null)
+ {
+ return $this->cache->delete($id);
+ }
+
+ public function fetch($id, array $options = null)
+ {
+ return $this->cache->fetch($id);
+ }
+
+ public function save($id, $data, $lifeTime = false, array $options = null)
+ {
+ return $this->cache->save($id, $data, $lifeTime !== false ? $lifeTime : 0);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/NullCacheAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/NullCacheAdapter.php
new file mode 100644
index 0000000..68bd4af
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/NullCacheAdapter.php
@@ -0,0 +1,31 @@
+cache = $cache;
+ }
+
+ public function contains($id, array $options = null)
+ {
+ return $this->cache->test($id);
+ }
+
+ public function delete($id, array $options = null)
+ {
+ return $this->cache->remove($id);
+ }
+
+ public function fetch($id, array $options = null)
+ {
+ return $this->cache->load($id);
+ }
+
+ public function save($id, $data, $lifeTime = false, array $options = null)
+ {
+ return $this->cache->save($data, $id, array(), $lifeTime);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf2CacheAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf2CacheAdapter.php
new file mode 100644
index 0000000..1fc18a5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf2CacheAdapter.php
@@ -0,0 +1,41 @@
+cache = $cache;
+ }
+
+ public function contains($id, array $options = null)
+ {
+ return $this->cache->hasItem($id);
+ }
+
+ public function delete($id, array $options = null)
+ {
+ return $this->cache->removeItem($id);
+ }
+
+ public function fetch($id, array $options = null)
+ {
+ return $this->cache->getItem($id);
+ }
+
+ public function save($id, $data, $lifeTime = false, array $options = null)
+ {
+ return $this->cache->setItem($id, $data);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/composer.json
new file mode 100644
index 0000000..a5d999b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Cache/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/cache",
+ "description": "Guzzle cache adapter component",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["cache", "adapter", "zf", "doctrine", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/common": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Cache": "" }
+ },
+ "target-dir": "Guzzle/Cache",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/AbstractHasDispatcher.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/AbstractHasDispatcher.php
new file mode 100644
index 0000000..d1e842b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/AbstractHasDispatcher.php
@@ -0,0 +1,49 @@
+eventDispatcher = $eventDispatcher;
+
+ return $this;
+ }
+
+ public function getEventDispatcher()
+ {
+ if (!$this->eventDispatcher) {
+ $this->eventDispatcher = new EventDispatcher();
+ }
+
+ return $this->eventDispatcher;
+ }
+
+ public function dispatch($eventName, array $context = array())
+ {
+ return $this->getEventDispatcher()->dispatch($eventName, new Event($context));
+ }
+
+ public function addSubscriber(EventSubscriberInterface $subscriber)
+ {
+ $this->getEventDispatcher()->addSubscriber($subscriber);
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Collection.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Collection.php
new file mode 100644
index 0000000..5cb1535
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Collection.php
@@ -0,0 +1,403 @@
+data = $data;
+ }
+
+ /**
+ * Create a new collection from an array, validate the keys, and add default values where missing
+ *
+ * @param array $config Configuration values to apply.
+ * @param array $defaults Default parameters
+ * @param array $required Required parameter names
+ *
+ * @return self
+ * @throws InvalidArgumentException if a parameter is missing
+ */
+ public static function fromConfig(array $config = array(), array $defaults = array(), array $required = array())
+ {
+ $data = $config + $defaults;
+
+ if ($missing = array_diff($required, array_keys($data))) {
+ throw new InvalidArgumentException('Config is missing the following keys: ' . implode(', ', $missing));
+ }
+
+ return new self($data);
+ }
+
+ public function count()
+ {
+ return count($this->data);
+ }
+
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->data);
+ }
+
+ public function toArray()
+ {
+ return $this->data;
+ }
+
+ /**
+ * Removes all key value pairs
+ *
+ * @return Collection
+ */
+ public function clear()
+ {
+ $this->data = array();
+
+ return $this;
+ }
+
+ /**
+ * Get all or a subset of matching key value pairs
+ *
+ * @param array $keys Pass an array of keys to retrieve only a subset of key value pairs
+ *
+ * @return array Returns an array of all matching key value pairs
+ */
+ public function getAll(array $keys = null)
+ {
+ return $keys ? array_intersect_key($this->data, array_flip($keys)) : $this->data;
+ }
+
+ /**
+ * Get a specific key value.
+ *
+ * @param string $key Key to retrieve.
+ *
+ * @return mixed|null Value of the key or NULL
+ */
+ public function get($key)
+ {
+ return isset($this->data[$key]) ? $this->data[$key] : null;
+ }
+
+ /**
+ * Set a key value pair
+ *
+ * @param string $key Key to set
+ * @param mixed $value Value to set
+ *
+ * @return Collection Returns a reference to the object
+ */
+ public function set($key, $value)
+ {
+ $this->data[$key] = $value;
+
+ return $this;
+ }
+
+ /**
+ * Add a value to a key. If a key of the same name has already been added, the key value will be converted into an
+ * array and the new value will be pushed to the end of the array.
+ *
+ * @param string $key Key to add
+ * @param mixed $value Value to add to the key
+ *
+ * @return Collection Returns a reference to the object.
+ */
+ public function add($key, $value)
+ {
+ if (!array_key_exists($key, $this->data)) {
+ $this->data[$key] = $value;
+ } elseif (is_array($this->data[$key])) {
+ $this->data[$key][] = $value;
+ } else {
+ $this->data[$key] = array($this->data[$key], $value);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Remove a specific key value pair
+ *
+ * @param string $key A key to remove
+ *
+ * @return Collection
+ */
+ public function remove($key)
+ {
+ unset($this->data[$key]);
+
+ return $this;
+ }
+
+ /**
+ * Get all keys in the collection
+ *
+ * @return array
+ */
+ public function getKeys()
+ {
+ return array_keys($this->data);
+ }
+
+ /**
+ * Returns whether or not the specified key is present.
+ *
+ * @param string $key The key for which to check the existence.
+ *
+ * @return bool
+ */
+ public function hasKey($key)
+ {
+ return array_key_exists($key, $this->data);
+ }
+
+ /**
+ * Case insensitive search the keys in the collection
+ *
+ * @param string $key Key to search for
+ *
+ * @return bool|string Returns false if not found, otherwise returns the key
+ */
+ public function keySearch($key)
+ {
+ foreach (array_keys($this->data) as $k) {
+ if (!strcasecmp($k, $key)) {
+ return $k;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks if any keys contains a certain value
+ *
+ * @param string $value Value to search for
+ *
+ * @return mixed Returns the key if the value was found FALSE if the value was not found.
+ */
+ public function hasValue($value)
+ {
+ return array_search($value, $this->data);
+ }
+
+ /**
+ * Replace the data of the object with the value of an array
+ *
+ * @param array $data Associative array of data
+ *
+ * @return Collection Returns a reference to the object
+ */
+ public function replace(array $data)
+ {
+ $this->data = $data;
+
+ return $this;
+ }
+
+ /**
+ * Add and merge in a Collection or array of key value pair data.
+ *
+ * @param Collection|array $data Associative array of key value pair data
+ *
+ * @return Collection Returns a reference to the object.
+ */
+ public function merge($data)
+ {
+ foreach ($data as $key => $value) {
+ $this->add($key, $value);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Over write key value pairs in this collection with all of the data from an array or collection.
+ *
+ * @param array|\Traversable $data Values to override over this config
+ *
+ * @return self
+ */
+ public function overwriteWith($data)
+ {
+ if (is_array($data)) {
+ $this->data = $data + $this->data;
+ } elseif ($data instanceof Collection) {
+ $this->data = $data->toArray() + $this->data;
+ } else {
+ foreach ($data as $key => $value) {
+ $this->data[$key] = $value;
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Returns a Collection containing all the elements of the collection after applying the callback function to each
+ * one. The Closure should accept three parameters: (string) $key, (string) $value, (array) $context and return a
+ * modified value
+ *
+ * @param \Closure $closure Closure to apply
+ * @param array $context Context to pass to the closure
+ * @param bool $static Set to TRUE to use the same class as the return rather than returning a Collection
+ *
+ * @return Collection
+ */
+ public function map(\Closure $closure, array $context = array(), $static = true)
+ {
+ $collection = $static ? new static() : new self();
+ foreach ($this as $key => $value) {
+ $collection->add($key, $closure($key, $value, $context));
+ }
+
+ return $collection;
+ }
+
+ /**
+ * Iterates over each key value pair in the collection passing them to the Closure. If the Closure function returns
+ * true, the current value from input is returned into the result Collection. The Closure must accept three
+ * parameters: (string) $key, (string) $value and return Boolean TRUE or FALSE for each value.
+ *
+ * @param \Closure $closure Closure evaluation function
+ * @param bool $static Set to TRUE to use the same class as the return rather than returning a Collection
+ *
+ * @return Collection
+ */
+ public function filter(\Closure $closure, $static = true)
+ {
+ $collection = ($static) ? new static() : new self();
+ foreach ($this->data as $key => $value) {
+ if ($closure($key, $value)) {
+ $collection->add($key, $value);
+ }
+ }
+
+ return $collection;
+ }
+
+ public function offsetExists($offset)
+ {
+ return isset($this->data[$offset]);
+ }
+
+ public function offsetGet($offset)
+ {
+ return isset($this->data[$offset]) ? $this->data[$offset] : null;
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ $this->data[$offset] = $value;
+ }
+
+ public function offsetUnset($offset)
+ {
+ unset($this->data[$offset]);
+ }
+
+ /**
+ * Set a value into a nested array key. Keys will be created as needed to set the value.
+ *
+ * @param string $path Path to set
+ * @param mixed $value Value to set at the key
+ *
+ * @return self
+ * @throws RuntimeException when trying to setPath using a nested path that travels through a scalar value
+ */
+ public function setPath($path, $value)
+ {
+ $current =& $this->data;
+ $queue = explode('/', $path);
+ while (null !== ($key = array_shift($queue))) {
+ if (!is_array($current)) {
+ throw new RuntimeException("Trying to setPath {$path}, but {$key} is set and is not an array");
+ } elseif (!$queue) {
+ $current[$key] = $value;
+ } elseif (isset($current[$key])) {
+ $current =& $current[$key];
+ } else {
+ $current[$key] = array();
+ $current =& $current[$key];
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Gets a value from the collection using an array path (e.g. foo/baz/bar would retrieve bar from two nested arrays)
+ * Allows for wildcard searches which recursively combine matches up to the level at which the wildcard occurs. This
+ * can be useful for accepting any key of a sub-array and combining matching keys from each diverging path.
+ *
+ * @param string $path Path to traverse and retrieve a value from
+ * @param string $separator Character used to add depth to the search
+ * @param mixed $data Optional data to descend into (used when wildcards are encountered)
+ *
+ * @return mixed|null
+ */
+ public function getPath($path, $separator = '/', $data = null)
+ {
+ if ($data === null) {
+ $data =& $this->data;
+ }
+
+ $path = is_array($path) ? $path : explode($separator, $path);
+ while (null !== ($part = array_shift($path))) {
+ if (!is_array($data)) {
+ return null;
+ } elseif (isset($data[$part])) {
+ $data =& $data[$part];
+ } elseif ($part != '*') {
+ return null;
+ } else {
+ // Perform a wildcard search by diverging and merging paths
+ $result = array();
+ foreach ($data as $value) {
+ if (!$path) {
+ $result = array_merge_recursive($result, (array) $value);
+ } elseif (null !== ($test = $this->getPath($path, $separator, $value))) {
+ $result = array_merge_recursive($result, (array) $test);
+ }
+ }
+ return $result;
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Inject configuration settings into an input string
+ *
+ * @param string $input Input to inject
+ *
+ * @return string
+ * @deprecated
+ */
+ public function inject($input)
+ {
+ Version::warn(__METHOD__ . ' is deprecated');
+ $replace = array();
+ foreach ($this->data as $key => $val) {
+ $replace['{' . $key . '}'] = $val;
+ }
+
+ return strtr($input, $replace);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Event.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Event.php
new file mode 100644
index 0000000..fad76a9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Event.php
@@ -0,0 +1,52 @@
+context = $context;
+ }
+
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->context);
+ }
+
+ public function offsetGet($offset)
+ {
+ return isset($this->context[$offset]) ? $this->context[$offset] : null;
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ $this->context[$offset] = $value;
+ }
+
+ public function offsetExists($offset)
+ {
+ return isset($this->context[$offset]);
+ }
+
+ public function offsetUnset($offset)
+ {
+ unset($this->context[$offset]);
+ }
+
+ public function toArray()
+ {
+ return $this->context;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Exception/BadMethodCallException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Exception/BadMethodCallException.php
new file mode 100644
index 0000000..08d1c72
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Exception/BadMethodCallException.php
@@ -0,0 +1,5 @@
+shortMessage = $message;
+ }
+
+ /**
+ * Set all of the exceptions
+ *
+ * @param array $exceptions Array of exceptions
+ *
+ * @return self
+ */
+ public function setExceptions(array $exceptions)
+ {
+ $this->exceptions = array();
+ foreach ($exceptions as $exception) {
+ $this->add($exception);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add exceptions to the collection
+ *
+ * @param ExceptionCollection|\Exception $e Exception to add
+ *
+ * @return ExceptionCollection;
+ */
+ public function add($e)
+ {
+ $this->exceptions[] = $e;
+ if ($this->message) {
+ $this->message .= "\n";
+ }
+
+ $this->message .= $this->getExceptionMessage($e, 0);
+
+ return $this;
+ }
+
+ /**
+ * Get the total number of request exceptions
+ *
+ * @return int
+ */
+ public function count()
+ {
+ return count($this->exceptions);
+ }
+
+ /**
+ * Allows array-like iteration over the request exceptions
+ *
+ * @return \ArrayIterator
+ */
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->exceptions);
+ }
+
+ /**
+ * Get the first exception in the collection
+ *
+ * @return \Exception
+ */
+ public function getFirst()
+ {
+ return $this->exceptions ? $this->exceptions[0] : null;
+ }
+
+ private function getExceptionMessage(\Exception $e, $depth = 0)
+ {
+ static $sp = ' ';
+ $prefix = $depth ? str_repeat($sp, $depth) : '';
+ $message = "{$prefix}(" . get_class($e) . ') ' . $e->getFile() . ' line ' . $e->getLine() . "\n";
+
+ if ($e instanceof self) {
+ if ($e->shortMessage) {
+ $message .= "\n{$prefix}{$sp}" . str_replace("\n", "\n{$prefix}{$sp}", $e->shortMessage) . "\n";
+ }
+ foreach ($e as $ee) {
+ $message .= "\n" . $this->getExceptionMessage($ee, $depth + 1);
+ }
+ } else {
+ $message .= "\n{$prefix}{$sp}" . str_replace("\n", "\n{$prefix}{$sp}", $e->getMessage()) . "\n";
+ $message .= "\n{$prefix}{$sp}" . str_replace("\n", "\n{$prefix}{$sp}", $e->getTraceAsString()) . "\n";
+ }
+
+ return str_replace(getcwd(), '.', $message);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Exception/GuzzleException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Exception/GuzzleException.php
new file mode 100644
index 0000000..458e6f2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Common/Exception/GuzzleException.php
@@ -0,0 +1,8 @@
+=5.3.2",
+ "symfony/event-dispatcher": ">=2.1"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Common": "" }
+ },
+ "target-dir": "Guzzle/Common",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/AbstractEntityBodyDecorator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/AbstractEntityBodyDecorator.php
new file mode 100644
index 0000000..5005a88
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/AbstractEntityBodyDecorator.php
@@ -0,0 +1,221 @@
+body = $body;
+ }
+
+ public function __toString()
+ {
+ return (string) $this->body;
+ }
+
+ /**
+ * Allow decorators to implement custom methods
+ *
+ * @param string $method Missing method name
+ * @param array $args Method arguments
+ *
+ * @return mixed
+ */
+ public function __call($method, array $args)
+ {
+ return call_user_func_array(array($this->body, $method), $args);
+ }
+
+ public function close()
+ {
+ return $this->body->close();
+ }
+
+ public function setRewindFunction($callable)
+ {
+ $this->body->setRewindFunction($callable);
+
+ return $this;
+ }
+
+ public function rewind()
+ {
+ return $this->body->rewind();
+ }
+
+ public function compress($filter = 'zlib.deflate')
+ {
+ return $this->body->compress($filter);
+ }
+
+ public function uncompress($filter = 'zlib.inflate')
+ {
+ return $this->body->uncompress($filter);
+ }
+
+ public function getContentLength()
+ {
+ return $this->getSize();
+ }
+
+ public function getContentType()
+ {
+ return $this->body->getContentType();
+ }
+
+ public function getContentMd5($rawOutput = false, $base64Encode = false)
+ {
+ $hash = Stream::getHash($this, 'md5', $rawOutput);
+
+ return $hash && $base64Encode ? base64_encode($hash) : $hash;
+ }
+
+ public function getContentEncoding()
+ {
+ return $this->body->getContentEncoding();
+ }
+
+ public function getMetaData($key = null)
+ {
+ return $this->body->getMetaData($key);
+ }
+
+ public function getStream()
+ {
+ return $this->body->getStream();
+ }
+
+ public function setStream($stream, $size = 0)
+ {
+ $this->body->setStream($stream, $size);
+
+ return $this;
+ }
+
+ public function detachStream()
+ {
+ $this->body->detachStream();
+
+ return $this;
+ }
+
+ public function getWrapper()
+ {
+ return $this->body->getWrapper();
+ }
+
+ public function getWrapperData()
+ {
+ return $this->body->getWrapperData();
+ }
+
+ public function getStreamType()
+ {
+ return $this->body->getStreamType();
+ }
+
+ public function getUri()
+ {
+ return $this->body->getUri();
+ }
+
+ public function getSize()
+ {
+ return $this->body->getSize();
+ }
+
+ public function isReadable()
+ {
+ return $this->body->isReadable();
+ }
+
+ public function isRepeatable()
+ {
+ return $this->isSeekable() && $this->isReadable();
+ }
+
+ public function isWritable()
+ {
+ return $this->body->isWritable();
+ }
+
+ public function isConsumed()
+ {
+ return $this->body->isConsumed();
+ }
+
+ /**
+ * Alias of isConsumed()
+ * {@inheritdoc}
+ */
+ public function feof()
+ {
+ return $this->isConsumed();
+ }
+
+ public function isLocal()
+ {
+ return $this->body->isLocal();
+ }
+
+ public function isSeekable()
+ {
+ return $this->body->isSeekable();
+ }
+
+ public function setSize($size)
+ {
+ $this->body->setSize($size);
+
+ return $this;
+ }
+
+ public function seek($offset, $whence = SEEK_SET)
+ {
+ return $this->body->seek($offset, $whence);
+ }
+
+ public function read($length)
+ {
+ return $this->body->read($length);
+ }
+
+ public function write($string)
+ {
+ return $this->body->write($string);
+ }
+
+ public function readLine($maxLength = null)
+ {
+ return $this->body->readLine($maxLength);
+ }
+
+ public function ftell()
+ {
+ return $this->body->ftell();
+ }
+
+ public function getCustomData($key)
+ {
+ return $this->body->getCustomData($key);
+ }
+
+ public function setCustomData($key, $value)
+ {
+ $this->body->setCustomData($key, $value);
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/CachingEntityBody.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/CachingEntityBody.php
new file mode 100644
index 0000000..c65c136
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/CachingEntityBody.php
@@ -0,0 +1,229 @@
+remoteStream = $body;
+ $this->body = new EntityBody(fopen('php://temp', 'r+'));
+ }
+
+ /**
+ * Will give the contents of the buffer followed by the exhausted remote stream.
+ *
+ * Warning: Loads the entire stream into memory
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ $pos = $this->ftell();
+ $this->rewind();
+
+ $str = '';
+ while (!$this->isConsumed()) {
+ $str .= $this->read(16384);
+ }
+
+ $this->seek($pos);
+
+ return $str;
+ }
+
+ public function getSize()
+ {
+ return max($this->body->getSize(), $this->remoteStream->getSize());
+ }
+
+ /**
+ * {@inheritdoc}
+ * @throws RuntimeException When seeking with SEEK_END or when seeking past the total size of the buffer stream
+ */
+ public function seek($offset, $whence = SEEK_SET)
+ {
+ if ($whence == SEEK_SET) {
+ $byte = $offset;
+ } elseif ($whence == SEEK_CUR) {
+ $byte = $offset + $this->ftell();
+ } else {
+ throw new RuntimeException(__CLASS__ . ' supports only SEEK_SET and SEEK_CUR seek operations');
+ }
+
+ // You cannot skip ahead past where you've read from the remote stream
+ if ($byte > $this->body->getSize()) {
+ throw new RuntimeException(
+ "Cannot seek to byte {$byte} when the buffered stream only contains {$this->body->getSize()} bytes"
+ );
+ }
+
+ return $this->body->seek($byte);
+ }
+
+ public function rewind()
+ {
+ return $this->seek(0);
+ }
+
+ /**
+ * Does not support custom rewind functions
+ *
+ * @throws RuntimeException
+ */
+ public function setRewindFunction($callable)
+ {
+ throw new RuntimeException(__CLASS__ . ' does not support custom stream rewind functions');
+ }
+
+ public function read($length)
+ {
+ // Perform a regular read on any previously read data from the buffer
+ $data = $this->body->read($length);
+ $remaining = $length - strlen($data);
+
+ // More data was requested so read from the remote stream
+ if ($remaining) {
+ // If data was written to the buffer in a position that would have been filled from the remote stream,
+ // then we must skip bytes on the remote stream to emulate overwriting bytes from that position. This
+ // mimics the behavior of other PHP stream wrappers.
+ $remoteData = $this->remoteStream->read($remaining + $this->skipReadBytes);
+
+ if ($this->skipReadBytes) {
+ $len = strlen($remoteData);
+ $remoteData = substr($remoteData, $this->skipReadBytes);
+ $this->skipReadBytes = max(0, $this->skipReadBytes - $len);
+ }
+
+ $data .= $remoteData;
+ $this->body->write($remoteData);
+ }
+
+ return $data;
+ }
+
+ public function write($string)
+ {
+ // When appending to the end of the currently read stream, you'll want to skip bytes from being read from
+ // the remote stream to emulate other stream wrappers. Basically replacing bytes of data of a fixed length.
+ $overflow = (strlen($string) + $this->ftell()) - $this->remoteStream->ftell();
+ if ($overflow > 0) {
+ $this->skipReadBytes += $overflow;
+ }
+
+ return $this->body->write($string);
+ }
+
+ /**
+ * {@inheritdoc}
+ * @link http://php.net/manual/en/function.fgets.php
+ */
+ public function readLine($maxLength = null)
+ {
+ $buffer = '';
+ $size = 0;
+ while (!$this->isConsumed()) {
+ $byte = $this->read(1);
+ $buffer .= $byte;
+ // Break when a new line is found or the max length - 1 is reached
+ if ($byte == PHP_EOL || ++$size == $maxLength - 1) {
+ break;
+ }
+ }
+
+ return $buffer;
+ }
+
+ public function isConsumed()
+ {
+ return $this->body->isConsumed() && $this->remoteStream->isConsumed();
+ }
+
+ /**
+ * Close both the remote stream and buffer stream
+ */
+ public function close()
+ {
+ return $this->remoteStream->close() && $this->body->close();
+ }
+
+ public function setStream($stream, $size = 0)
+ {
+ $this->remoteStream->setStream($stream, $size);
+ }
+
+ public function getContentType()
+ {
+ return $this->remoteStream->getContentType();
+ }
+
+ public function getContentEncoding()
+ {
+ return $this->remoteStream->getContentEncoding();
+ }
+
+ public function getMetaData($key = null)
+ {
+ return $this->remoteStream->getMetaData($key);
+ }
+
+ public function getStream()
+ {
+ return $this->remoteStream->getStream();
+ }
+
+ public function getWrapper()
+ {
+ return $this->remoteStream->getWrapper();
+ }
+
+ public function getWrapperData()
+ {
+ return $this->remoteStream->getWrapperData();
+ }
+
+ public function getStreamType()
+ {
+ return $this->remoteStream->getStreamType();
+ }
+
+ public function getUri()
+ {
+ return $this->remoteStream->getUri();
+ }
+
+ /**
+ * Always retrieve custom data from the remote stream
+ * {@inheritdoc}
+ */
+ public function getCustomData($key)
+ {
+ return $this->remoteStream->getCustomData($key);
+ }
+
+ /**
+ * Always set custom data on the remote stream
+ * {@inheritdoc}
+ */
+ public function setCustomData($key, $value)
+ {
+ $this->remoteStream->setCustomData($key, $value);
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Client.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Client.php
new file mode 100644
index 0000000..3d7298d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Client.php
@@ -0,0 +1,524 @@
+setConfig($config ?: new Collection());
+ $this->initSsl();
+ $this->setBaseUrl($baseUrl);
+ $this->defaultHeaders = new Collection();
+ $this->setRequestFactory(RequestFactory::getInstance());
+ $this->userAgent = $this->getDefaultUserAgent();
+ if (!$this->config[self::DISABLE_REDIRECTS]) {
+ $this->addSubscriber(new RedirectPlugin());
+ }
+ }
+
+ final public function setConfig($config)
+ {
+ if ($config instanceof Collection) {
+ $this->config = $config;
+ } elseif (is_array($config)) {
+ $this->config = new Collection($config);
+ } else {
+ throw new InvalidArgumentException('Config must be an array or Collection');
+ }
+
+ return $this;
+ }
+
+ final public function getConfig($key = false)
+ {
+ return $key ? $this->config[$key] : $this->config;
+ }
+
+ /**
+ * Set a default request option on the client that will be used as a default for each request
+ *
+ * @param string $keyOrPath request.options key (e.g. allow_redirects) or path to a nested key (e.g. headers/foo)
+ * @param mixed $value Value to set
+ *
+ * @return $this
+ */
+ public function setDefaultOption($keyOrPath, $value)
+ {
+ $keyOrPath = self::REQUEST_OPTIONS . '/' . $keyOrPath;
+ $this->config->setPath($keyOrPath, $value);
+
+ return $this;
+ }
+
+ /**
+ * Retrieve a default request option from the client
+ *
+ * @param string $keyOrPath request.options key (e.g. allow_redirects) or path to a nested key (e.g. headers/foo)
+ *
+ * @return mixed|null
+ */
+ public function getDefaultOption($keyOrPath)
+ {
+ $keyOrPath = self::REQUEST_OPTIONS . '/' . $keyOrPath;
+
+ return $this->config->getPath($keyOrPath);
+ }
+
+ final public function setSslVerification($certificateAuthority = true, $verifyPeer = true, $verifyHost = 2)
+ {
+ $opts = $this->config[self::CURL_OPTIONS] ?: array();
+
+ if ($certificateAuthority === true) {
+ // use bundled CA bundle, set secure defaults
+ $opts[CURLOPT_CAINFO] = __DIR__ . '/Resources/cacert.pem';
+ $opts[CURLOPT_SSL_VERIFYPEER] = true;
+ $opts[CURLOPT_SSL_VERIFYHOST] = 2;
+ } elseif ($certificateAuthority === false) {
+ unset($opts[CURLOPT_CAINFO]);
+ $opts[CURLOPT_SSL_VERIFYPEER] = false;
+ $opts[CURLOPT_SSL_VERIFYHOST] = 0;
+ } elseif ($verifyPeer !== true && $verifyPeer !== false && $verifyPeer !== 1 && $verifyPeer !== 0) {
+ throw new InvalidArgumentException('verifyPeer must be 1, 0 or boolean');
+ } elseif ($verifyHost !== 0 && $verifyHost !== 1 && $verifyHost !== 2) {
+ throw new InvalidArgumentException('verifyHost must be 0, 1 or 2');
+ } else {
+ $opts[CURLOPT_SSL_VERIFYPEER] = $verifyPeer;
+ $opts[CURLOPT_SSL_VERIFYHOST] = $verifyHost;
+ if (is_file($certificateAuthority)) {
+ unset($opts[CURLOPT_CAPATH]);
+ $opts[CURLOPT_CAINFO] = $certificateAuthority;
+ } elseif (is_dir($certificateAuthority)) {
+ unset($opts[CURLOPT_CAINFO]);
+ $opts[CURLOPT_CAPATH] = $certificateAuthority;
+ } else {
+ throw new RuntimeException(
+ 'Invalid option passed to ' . self::SSL_CERT_AUTHORITY . ': ' . $certificateAuthority
+ );
+ }
+ }
+
+ $this->config->set(self::CURL_OPTIONS, $opts);
+
+ return $this;
+ }
+
+ public function createRequest($method = 'GET', $uri = null, $headers = null, $body = null, array $options = array())
+ {
+ if (!$uri) {
+ $url = $this->getBaseUrl();
+ } else {
+ if (!is_array($uri)) {
+ $templateVars = null;
+ } else {
+ list($uri, $templateVars) = $uri;
+ }
+ if (strpos($uri, '://')) {
+ // Use absolute URLs as-is
+ $url = $this->expandTemplate($uri, $templateVars);
+ } else {
+ $url = Url::factory($this->getBaseUrl())->combine($this->expandTemplate($uri, $templateVars));
+ }
+ }
+
+ // If default headers are provided, then merge them under any explicitly provided headers for the request
+ if (count($this->defaultHeaders)) {
+ if (!$headers) {
+ $headers = $this->defaultHeaders->toArray();
+ } elseif (is_array($headers)) {
+ $headers += $this->defaultHeaders->toArray();
+ } elseif ($headers instanceof Collection) {
+ $headers = $headers->toArray() + $this->defaultHeaders->toArray();
+ }
+ }
+
+ return $this->prepareRequest($this->requestFactory->create($method, (string) $url, $headers, $body), $options);
+ }
+
+ public function getBaseUrl($expand = true)
+ {
+ return $expand ? $this->expandTemplate($this->baseUrl) : $this->baseUrl;
+ }
+
+ public function setBaseUrl($url)
+ {
+ $this->baseUrl = $url;
+
+ return $this;
+ }
+
+ public function setUserAgent($userAgent, $includeDefault = false)
+ {
+ if ($includeDefault) {
+ $userAgent .= ' ' . $this->getDefaultUserAgent();
+ }
+ $this->userAgent = $userAgent;
+
+ return $this;
+ }
+
+ /**
+ * Get the default User-Agent string to use with Guzzle
+ *
+ * @return string
+ */
+ public function getDefaultUserAgent()
+ {
+ return 'Guzzle/' . Version::VERSION
+ . ' curl/' . CurlVersion::getInstance()->get('version')
+ . ' PHP/' . PHP_VERSION;
+ }
+
+ public function get($uri = null, $headers = null, $options = array())
+ {
+ // BC compat: $options can be a string, resource, etc to specify where the response body is downloaded
+ return is_array($options)
+ ? $this->createRequest('GET', $uri, $headers, null, $options)
+ : $this->createRequest('GET', $uri, $headers, $options);
+ }
+
+ public function head($uri = null, $headers = null, array $options = array())
+ {
+ return $this->createRequest('HEAD', $uri, $headers, null, $options);
+ }
+
+ public function delete($uri = null, $headers = null, $body = null, array $options = array())
+ {
+ return $this->createRequest('DELETE', $uri, $headers, $body, $options);
+ }
+
+ public function put($uri = null, $headers = null, $body = null, array $options = array())
+ {
+ return $this->createRequest('PUT', $uri, $headers, $body, $options);
+ }
+
+ public function patch($uri = null, $headers = null, $body = null, array $options = array())
+ {
+ return $this->createRequest('PATCH', $uri, $headers, $body, $options);
+ }
+
+ public function post($uri = null, $headers = null, $postBody = null, array $options = array())
+ {
+ return $this->createRequest('POST', $uri, $headers, $postBody, $options);
+ }
+
+ public function options($uri = null, array $options = array())
+ {
+ return $this->createRequest('OPTIONS', $uri, $options);
+ }
+
+ public function send($requests)
+ {
+ if (!($requests instanceof RequestInterface)) {
+ return $this->sendMultiple($requests);
+ }
+
+ try {
+ /** @var $requests RequestInterface */
+ $this->getCurlMulti()->add($requests)->send();
+ return $requests->getResponse();
+ } catch (ExceptionCollection $e) {
+ throw $e->getFirst();
+ }
+ }
+
+ /**
+ * Set a curl multi object to be used internally by the client for transferring requests.
+ *
+ * @param CurlMultiInterface $curlMulti Multi object
+ *
+ * @return self
+ */
+ public function setCurlMulti(CurlMultiInterface $curlMulti)
+ {
+ $this->curlMulti = $curlMulti;
+
+ return $this;
+ }
+
+ /**
+ * @return CurlMultiInterface|CurlMultiProxy
+ */
+ public function getCurlMulti()
+ {
+ if (!$this->curlMulti) {
+ $this->curlMulti = new CurlMultiProxy(
+ self::MAX_HANDLES,
+ $this->getConfig('select_timeout') ?: self::DEFAULT_SELECT_TIMEOUT
+ );
+ }
+
+ return $this->curlMulti;
+ }
+
+ public function setRequestFactory(RequestFactoryInterface $factory)
+ {
+ $this->requestFactory = $factory;
+
+ return $this;
+ }
+
+ /**
+ * Set the URI template expander to use with the client
+ *
+ * @param UriTemplateInterface $uriTemplate URI template expander
+ *
+ * @return self
+ */
+ public function setUriTemplate(UriTemplateInterface $uriTemplate)
+ {
+ $this->uriTemplate = $uriTemplate;
+
+ return $this;
+ }
+
+ /**
+ * Expand a URI template while merging client config settings into the template variables
+ *
+ * @param string $template Template to expand
+ * @param array $variables Variables to inject
+ *
+ * @return string
+ */
+ protected function expandTemplate($template, array $variables = null)
+ {
+ $expansionVars = $this->getConfig()->toArray();
+ if ($variables) {
+ $expansionVars = $variables + $expansionVars;
+ }
+
+ return $this->getUriTemplate()->expand($template, $expansionVars);
+ }
+
+ /**
+ * Get the URI template expander used by the client
+ *
+ * @return UriTemplateInterface
+ */
+ protected function getUriTemplate()
+ {
+ if (!$this->uriTemplate) {
+ $this->uriTemplate = ParserRegistry::getInstance()->getParser('uri_template');
+ }
+
+ return $this->uriTemplate;
+ }
+
+ /**
+ * Send multiple requests in parallel
+ *
+ * @param array $requests Array of RequestInterface objects
+ *
+ * @return array Returns an array of Response objects
+ */
+ protected function sendMultiple(array $requests)
+ {
+ $curlMulti = $this->getCurlMulti();
+ foreach ($requests as $request) {
+ $curlMulti->add($request);
+ }
+ $curlMulti->send();
+
+ /** @var $request RequestInterface */
+ $result = array();
+ foreach ($requests as $request) {
+ $result[] = $request->getResponse();
+ }
+
+ return $result;
+ }
+
+ /**
+ * Prepare a request to be sent from the Client by adding client specific behaviors and properties to the request.
+ *
+ * @param RequestInterface $request Request to prepare for the client
+ * @param array $options Options to apply to the request
+ *
+ * @return RequestInterface
+ */
+ protected function prepareRequest(RequestInterface $request, array $options = array())
+ {
+ $request->setClient($this)->setEventDispatcher(clone $this->getEventDispatcher());
+
+ if ($curl = $this->config[self::CURL_OPTIONS]) {
+ $request->getCurlOptions()->overwriteWith(CurlHandle::parseCurlConfig($curl));
+ }
+
+ if ($params = $this->config[self::REQUEST_PARAMS]) {
+ Version::warn('request.params is deprecated. Use request.options to add default request options.');
+ $request->getParams()->overwriteWith($params);
+ }
+
+ if ($this->userAgent && !$request->hasHeader('User-Agent')) {
+ $request->setHeader('User-Agent', $this->userAgent);
+ }
+
+ if ($defaults = $this->config[self::REQUEST_OPTIONS]) {
+ $this->requestFactory->applyOptions($request, $defaults, RequestFactoryInterface::OPTIONS_AS_DEFAULTS);
+ }
+
+ if ($options) {
+ $this->requestFactory->applyOptions($request, $options);
+ }
+
+ $this->dispatch('client.create_request', array('client' => $this, 'request' => $request));
+
+ return $request;
+ }
+
+ /**
+ * Initializes SSL settings
+ */
+ protected function initSsl()
+ {
+ $authority = $this->config[self::SSL_CERT_AUTHORITY];
+
+ if ($authority === 'system') {
+ return;
+ }
+
+ if ($authority === null) {
+ $authority = true;
+ }
+
+ if ($authority === true && substr(__FILE__, 0, 7) == 'phar://') {
+ $authority = self::extractPharCacert(__DIR__ . '/Resources/cacert.pem');
+ }
+
+ $this->setSslVerification($authority);
+ }
+
+ /**
+ * @deprecated
+ */
+ public function getDefaultHeaders()
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use the request.options array to retrieve default request options');
+ return $this->defaultHeaders;
+ }
+
+ /**
+ * @deprecated
+ */
+ public function setDefaultHeaders($headers)
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use the request.options array to specify default request options');
+ if ($headers instanceof Collection) {
+ $this->defaultHeaders = $headers;
+ } elseif (is_array($headers)) {
+ $this->defaultHeaders = new Collection($headers);
+ } else {
+ throw new InvalidArgumentException('Headers must be an array or Collection');
+ }
+
+ return $this;
+ }
+
+ /**
+ * @deprecated
+ */
+ public function preparePharCacert($md5Check = true)
+ {
+ return sys_get_temp_dir() . '/guzzle-cacert.pem';
+ }
+
+ /**
+ * Copies the phar cacert from a phar into the temp directory.
+ *
+ * @param string $pharCacertPath Path to the phar cacert. For example:
+ * 'phar://aws.phar/Guzzle/Http/Resources/cacert.pem'
+ *
+ * @return string Returns the path to the extracted cacert file.
+ * @throws \RuntimeException Throws if the phar cacert cannot be found or
+ * the file cannot be copied to the temp dir.
+ */
+ public static function extractPharCacert($pharCacertPath)
+ {
+ // Copy the cacert.pem file from the phar if it is not in the temp
+ // folder.
+ $certFile = sys_get_temp_dir() . '/guzzle-cacert.pem';
+
+ if (!file_exists($pharCacertPath)) {
+ throw new \RuntimeException("Could not find $pharCacertPath");
+ }
+
+ if (!file_exists($certFile) ||
+ filesize($certFile) != filesize($pharCacertPath)
+ ) {
+ if (!copy($pharCacertPath, $certFile)) {
+ throw new \RuntimeException(
+ "Could not copy {$pharCacertPath} to {$certFile}: "
+ . var_export(error_get_last(), true)
+ );
+ }
+ }
+
+ return $certFile;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/ClientInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/ClientInterface.php
new file mode 100644
index 0000000..10e4de2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/ClientInterface.php
@@ -0,0 +1,223 @@
+getCurlOptions();
+ $mediator = new RequestMediator($request, $requestCurlOptions->get('emit_io'));
+ $tempContentLength = null;
+ $method = $request->getMethod();
+ $bodyAsString = $requestCurlOptions->get(self::BODY_AS_STRING);
+
+ // Prepare url
+ $url = (string)$request->getUrl();
+ if(($pos = strpos($url, '#')) !== false ){
+ // strip fragment from url
+ $url = substr($url, 0, $pos);
+ }
+
+ // Array of default cURL options.
+ $curlOptions = array(
+ CURLOPT_URL => $url,
+ CURLOPT_CONNECTTIMEOUT => 150,
+ CURLOPT_RETURNTRANSFER => false,
+ CURLOPT_HEADER => false,
+ CURLOPT_PORT => $request->getPort(),
+ CURLOPT_HTTPHEADER => array(),
+ CURLOPT_WRITEFUNCTION => array($mediator, 'writeResponseBody'),
+ CURLOPT_HEADERFUNCTION => array($mediator, 'receiveResponseHeader'),
+ CURLOPT_HTTP_VERSION => $request->getProtocolVersion() === '1.0'
+ ? CURL_HTTP_VERSION_1_0 : CURL_HTTP_VERSION_1_1,
+ // Verifies the authenticity of the peer's certificate
+ CURLOPT_SSL_VERIFYPEER => 1,
+ // Certificate must indicate that the server is the server to which you meant to connect
+ CURLOPT_SSL_VERIFYHOST => 2
+ );
+
+ if (defined('CURLOPT_PROTOCOLS')) {
+ // Allow only HTTP and HTTPS protocols
+ $curlOptions[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
+ }
+
+ // Add CURLOPT_ENCODING if Accept-Encoding header is provided
+ if ($acceptEncodingHeader = $request->getHeader('Accept-Encoding')) {
+ $curlOptions[CURLOPT_ENCODING] = (string) $acceptEncodingHeader;
+ // Let cURL set the Accept-Encoding header, prevents duplicate values
+ $request->removeHeader('Accept-Encoding');
+ }
+
+ // Enable curl debug information if the 'debug' param was set
+ if ($requestCurlOptions->get('debug')) {
+ $curlOptions[CURLOPT_STDERR] = fopen('php://temp', 'r+');
+ // @codeCoverageIgnoreStart
+ if (false === $curlOptions[CURLOPT_STDERR]) {
+ throw new RuntimeException('Unable to create a stream for CURLOPT_STDERR');
+ }
+ // @codeCoverageIgnoreEnd
+ $curlOptions[CURLOPT_VERBOSE] = true;
+ }
+
+ // Specify settings according to the HTTP method
+ if ($method == 'GET') {
+ $curlOptions[CURLOPT_HTTPGET] = true;
+ } elseif ($method == 'HEAD') {
+ $curlOptions[CURLOPT_NOBODY] = true;
+ // HEAD requests do not use a write function
+ unset($curlOptions[CURLOPT_WRITEFUNCTION]);
+ } elseif (!($request instanceof EntityEnclosingRequest)) {
+ $curlOptions[CURLOPT_CUSTOMREQUEST] = $method;
+ } else {
+
+ $curlOptions[CURLOPT_CUSTOMREQUEST] = $method;
+
+ // Handle sending raw bodies in a request
+ if ($request->getBody()) {
+ // You can send the body as a string using curl's CURLOPT_POSTFIELDS
+ if ($bodyAsString) {
+ $curlOptions[CURLOPT_POSTFIELDS] = (string) $request->getBody();
+ // Allow curl to add the Content-Length for us to account for the times when
+ // POST redirects are followed by GET requests
+ if ($tempContentLength = $request->getHeader('Content-Length')) {
+ $tempContentLength = (int) (string) $tempContentLength;
+ }
+ // Remove the curl generated Content-Type header if none was set manually
+ if (!$request->hasHeader('Content-Type')) {
+ $curlOptions[CURLOPT_HTTPHEADER][] = 'Content-Type:';
+ }
+ } else {
+ $curlOptions[CURLOPT_UPLOAD] = true;
+ // Let cURL handle setting the Content-Length header
+ if ($tempContentLength = $request->getHeader('Content-Length')) {
+ $tempContentLength = (int) (string) $tempContentLength;
+ $curlOptions[CURLOPT_INFILESIZE] = $tempContentLength;
+ }
+ // Add a callback for curl to read data to send with the request only if a body was specified
+ $curlOptions[CURLOPT_READFUNCTION] = array($mediator, 'readRequestBody');
+ // Attempt to seek to the start of the stream
+ $request->getBody()->seek(0);
+ }
+
+ } else {
+
+ // Special handling for POST specific fields and files
+ $postFields = false;
+ if (count($request->getPostFiles())) {
+ $postFields = $request->getPostFields()->useUrlEncoding(false)->urlEncode();
+ foreach ($request->getPostFiles() as $key => $data) {
+ $prefixKeys = count($data) > 1;
+ foreach ($data as $index => $file) {
+ // Allow multiple files in the same key
+ $fieldKey = $prefixKeys ? "{$key}[{$index}]" : $key;
+ $postFields[$fieldKey] = $file->getCurlValue();
+ }
+ }
+ } elseif (count($request->getPostFields())) {
+ $postFields = (string) $request->getPostFields()->useUrlEncoding(true);
+ }
+
+ if ($postFields !== false) {
+ if ($method == 'POST') {
+ unset($curlOptions[CURLOPT_CUSTOMREQUEST]);
+ $curlOptions[CURLOPT_POST] = true;
+ }
+ $curlOptions[CURLOPT_POSTFIELDS] = $postFields;
+ $request->removeHeader('Content-Length');
+ }
+ }
+
+ // If the Expect header is not present, prevent curl from adding it
+ if (!$request->hasHeader('Expect')) {
+ $curlOptions[CURLOPT_HTTPHEADER][] = 'Expect:';
+ }
+ }
+
+ // If a Content-Length header was specified but we want to allow curl to set one for us
+ if (null !== $tempContentLength) {
+ $request->removeHeader('Content-Length');
+ }
+
+ // Set custom cURL options
+ foreach ($requestCurlOptions->toArray() as $key => $value) {
+ if (is_numeric($key)) {
+ $curlOptions[$key] = $value;
+ }
+ }
+
+ // Do not set an Accept header by default
+ if (!isset($curlOptions[CURLOPT_ENCODING])) {
+ $curlOptions[CURLOPT_HTTPHEADER][] = 'Accept:';
+ }
+
+ // Add any custom headers to the request. Empty headers will cause curl to not send the header at all.
+ foreach ($request->getHeaderLines() as $line) {
+ $curlOptions[CURLOPT_HTTPHEADER][] = $line;
+ }
+
+ // Add the content-length header back if it was temporarily removed
+ if (null !== $tempContentLength) {
+ $request->setHeader('Content-Length', $tempContentLength);
+ }
+
+ // Apply the options to a new cURL handle.
+ $handle = curl_init();
+
+ // Enable the progress function if the 'progress' param was set
+ if ($requestCurlOptions->get('progress')) {
+ // Wrap the function in a function that provides the curl handle to the mediator's progress function
+ // Using this rather than injecting the handle into the mediator prevents a circular reference
+ $curlOptions[CURLOPT_PROGRESSFUNCTION] = function () use ($mediator, $handle) {
+ $args = func_get_args();
+ $args[] = $handle;
+
+ // PHP 5.5 pushed the handle onto the start of the args
+ if (is_resource($args[0])) {
+ array_shift($args);
+ }
+
+ call_user_func_array(array($mediator, 'progress'), $args);
+ };
+ $curlOptions[CURLOPT_NOPROGRESS] = false;
+ }
+
+ curl_setopt_array($handle, $curlOptions);
+
+ return new static($handle, $curlOptions);
+ }
+
+ /**
+ * Construct a new CurlHandle object that wraps a cURL handle
+ *
+ * @param resource $handle Configured cURL handle resource
+ * @param Collection|array $options Curl options to use with the handle
+ *
+ * @throws InvalidArgumentException
+ */
+ public function __construct($handle, $options)
+ {
+ if (!is_resource($handle)) {
+ throw new InvalidArgumentException('Invalid handle provided');
+ }
+ if (is_array($options)) {
+ $this->options = new Collection($options);
+ } elseif ($options instanceof Collection) {
+ $this->options = $options;
+ } else {
+ throw new InvalidArgumentException('Expected array or Collection');
+ }
+ $this->handle = $handle;
+ }
+
+ /**
+ * Destructor
+ */
+ public function __destruct()
+ {
+ $this->close();
+ }
+
+ /**
+ * Close the curl handle
+ */
+ public function close()
+ {
+ if (is_resource($this->handle)) {
+ curl_close($this->handle);
+ }
+ $this->handle = null;
+ }
+
+ /**
+ * Check if the handle is available and still OK
+ *
+ * @return bool
+ */
+ public function isAvailable()
+ {
+ return is_resource($this->handle);
+ }
+
+ /**
+ * Get the last error that occurred on the cURL handle
+ *
+ * @return string
+ */
+ public function getError()
+ {
+ return $this->isAvailable() ? curl_error($this->handle) : '';
+ }
+
+ /**
+ * Get the last error number that occurred on the cURL handle
+ *
+ * @return int
+ */
+ public function getErrorNo()
+ {
+ if ($this->errorNo) {
+ return $this->errorNo;
+ }
+
+ return $this->isAvailable() ? curl_errno($this->handle) : CURLE_OK;
+ }
+
+ /**
+ * Set the curl error number
+ *
+ * @param int $error Error number to set
+ *
+ * @return CurlHandle
+ */
+ public function setErrorNo($error)
+ {
+ $this->errorNo = $error;
+
+ return $this;
+ }
+
+ /**
+ * Get cURL curl_getinfo data
+ *
+ * @param int $option Option to retrieve. Pass null to retrieve all data as an array.
+ *
+ * @return array|mixed
+ */
+ public function getInfo($option = null)
+ {
+ if (!is_resource($this->handle)) {
+ return null;
+ }
+
+ if (null !== $option) {
+ return curl_getinfo($this->handle, $option) ?: null;
+ }
+
+ return curl_getinfo($this->handle) ?: array();
+ }
+
+ /**
+ * Get the stderr output
+ *
+ * @param bool $asResource Set to TRUE to get an fopen resource
+ *
+ * @return string|resource|null
+ */
+ public function getStderr($asResource = false)
+ {
+ $stderr = $this->getOptions()->get(CURLOPT_STDERR);
+ if (!$stderr) {
+ return null;
+ }
+
+ if ($asResource) {
+ return $stderr;
+ }
+
+ fseek($stderr, 0);
+ $e = stream_get_contents($stderr);
+ fseek($stderr, 0, SEEK_END);
+
+ return $e;
+ }
+
+ /**
+ * Get the URL that this handle is connecting to
+ *
+ * @return Url
+ */
+ public function getUrl()
+ {
+ return Url::factory($this->options->get(CURLOPT_URL));
+ }
+
+ /**
+ * Get the wrapped curl handle
+ *
+ * @return resource|null Returns the cURL handle or null if it was closed
+ */
+ public function getHandle()
+ {
+ return $this->isAvailable() ? $this->handle : null;
+ }
+
+ /**
+ * Get the cURL setopt options of the handle. Changing values in the return object will have no effect on the curl
+ * handle after it is created.
+ *
+ * @return Collection
+ */
+ public function getOptions()
+ {
+ return $this->options;
+ }
+
+ /**
+ * Update a request based on the log messages of the CurlHandle
+ *
+ * @param RequestInterface $request Request to update
+ */
+ public function updateRequestFromTransfer(RequestInterface $request)
+ {
+ if (!$request->getResponse()) {
+ return;
+ }
+
+ // Update the transfer stats of the response
+ $request->getResponse()->setInfo($this->getInfo());
+
+ if (!$log = $this->getStderr(true)) {
+ return;
+ }
+
+ // Parse the cURL stderr output for outgoing requests
+ $headers = '';
+ fseek($log, 0);
+ while (($line = fgets($log)) !== false) {
+ if ($line && $line[0] == '>') {
+ $headers = substr(trim($line), 2) . "\r\n";
+ while (($line = fgets($log)) !== false) {
+ if ($line[0] == '*' || $line[0] == '<') {
+ break;
+ } else {
+ $headers .= trim($line) . "\r\n";
+ }
+ }
+ }
+ }
+
+ // Add request headers to the request exactly as they were sent
+ if ($headers) {
+ $parsed = ParserRegistry::getInstance()->getParser('message')->parseRequest($headers);
+ if (!empty($parsed['headers'])) {
+ $request->setHeaders(array());
+ foreach ($parsed['headers'] as $name => $value) {
+ $request->setHeader($name, $value);
+ }
+ }
+ if (!empty($parsed['version'])) {
+ $request->setProtocolVersion($parsed['version']);
+ }
+ }
+ }
+
+ /**
+ * Parse the config and replace curl.* configurators into the constant based values so it can be used elsewhere
+ *
+ * @param array|Collection $config The configuration we want to parse
+ *
+ * @return array
+ */
+ public static function parseCurlConfig($config)
+ {
+ $curlOptions = array();
+ foreach ($config as $key => $value) {
+ if (is_string($key) && defined($key)) {
+ // Convert constants represented as string to constant int values
+ $key = constant($key);
+ }
+ if (is_string($value) && defined($value)) {
+ $value = constant($value);
+ }
+ $curlOptions[$key] = $value;
+ }
+
+ return $curlOptions;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php
new file mode 100644
index 0000000..9e4e637
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php
@@ -0,0 +1,423 @@
+ array('CURLM_BAD_HANDLE', 'The passed-in handle is not a valid CURLM handle.'),
+ CURLM_BAD_EASY_HANDLE => array('CURLM_BAD_EASY_HANDLE', "An easy handle was not good/valid. It could mean that it isn't an easy handle at all, or possibly that the handle already is in used by this or another multi handle."),
+ CURLM_OUT_OF_MEMORY => array('CURLM_OUT_OF_MEMORY', 'You are doomed.'),
+ CURLM_INTERNAL_ERROR => array('CURLM_INTERNAL_ERROR', 'This can only be returned if libcurl bugs. Please report it to us!')
+ );
+
+ /** @var float */
+ protected $selectTimeout;
+
+ public function __construct($selectTimeout = 1.0)
+ {
+ $this->selectTimeout = $selectTimeout;
+ $this->multiHandle = curl_multi_init();
+ // @codeCoverageIgnoreStart
+ if ($this->multiHandle === false) {
+ throw new CurlException('Unable to create multi handle');
+ }
+ // @codeCoverageIgnoreEnd
+ $this->reset();
+ }
+
+ public function __destruct()
+ {
+ if (is_resource($this->multiHandle)) {
+ curl_multi_close($this->multiHandle);
+ }
+ }
+
+ public function add(RequestInterface $request)
+ {
+ $this->requests[] = $request;
+ // If requests are currently transferring and this is async, then the
+ // request must be prepared now as the send() method is not called.
+ $this->beforeSend($request);
+ $this->dispatch(self::ADD_REQUEST, array('request' => $request));
+
+ return $this;
+ }
+
+ public function all()
+ {
+ return $this->requests;
+ }
+
+ public function remove(RequestInterface $request)
+ {
+ $this->removeHandle($request);
+ if (($index = array_search($request, $this->requests, true)) !== false) {
+ $request = $this->requests[$index];
+ unset($this->requests[$index]);
+ $this->requests = array_values($this->requests);
+ $this->dispatch(self::REMOVE_REQUEST, array('request' => $request));
+ return true;
+ }
+
+ return false;
+ }
+
+ public function reset($hard = false)
+ {
+ // Remove each request
+ if ($this->requests) {
+ foreach ($this->requests as $request) {
+ $this->remove($request);
+ }
+ }
+
+ $this->handles = new \SplObjectStorage();
+ $this->requests = $this->resourceHash = $this->exceptions = $this->successful = array();
+ }
+
+ public function send()
+ {
+ $this->perform();
+ $exceptions = $this->exceptions;
+ $successful = $this->successful;
+ $this->reset();
+
+ if ($exceptions) {
+ $this->throwMultiException($exceptions, $successful);
+ }
+ }
+
+ public function count()
+ {
+ return count($this->requests);
+ }
+
+ /**
+ * Build and throw a MultiTransferException
+ *
+ * @param array $exceptions Exceptions encountered
+ * @param array $successful Successful requests
+ * @throws MultiTransferException
+ */
+ protected function throwMultiException(array $exceptions, array $successful)
+ {
+ $multiException = new MultiTransferException('Errors during multi transfer');
+
+ while ($e = array_shift($exceptions)) {
+ $multiException->addFailedRequestWithException($e['request'], $e['exception']);
+ }
+
+ // Add successful requests
+ foreach ($successful as $request) {
+ if (!$multiException->containsRequest($request)) {
+ $multiException->addSuccessfulRequest($request);
+ }
+ }
+
+ throw $multiException;
+ }
+
+ /**
+ * Prepare for sending
+ *
+ * @param RequestInterface $request Request to prepare
+ * @throws \Exception on error preparing the request
+ */
+ protected function beforeSend(RequestInterface $request)
+ {
+ try {
+ $state = $request->setState(RequestInterface::STATE_TRANSFER);
+ if ($state == RequestInterface::STATE_TRANSFER) {
+ $this->addHandle($request);
+ } else {
+ // Requests might decide they don't need to be sent just before
+ // transfer (e.g. CachePlugin)
+ $this->remove($request);
+ if ($state == RequestInterface::STATE_COMPLETE) {
+ $this->successful[] = $request;
+ }
+ }
+ } catch (\Exception $e) {
+ // Queue the exception to be thrown when sent
+ $this->removeErroredRequest($request, $e);
+ }
+ }
+
+ private function addHandle(RequestInterface $request)
+ {
+ $handle = $this->createCurlHandle($request)->getHandle();
+ $this->checkCurlResult(
+ curl_multi_add_handle($this->multiHandle, $handle)
+ );
+ }
+
+ /**
+ * Create a curl handle for a request
+ *
+ * @param RequestInterface $request Request
+ *
+ * @return CurlHandle
+ */
+ protected function createCurlHandle(RequestInterface $request)
+ {
+ $wrapper = CurlHandle::factory($request);
+ $this->handles[$request] = $wrapper;
+ $this->resourceHash[(int) $wrapper->getHandle()] = $request;
+
+ return $wrapper;
+ }
+
+ /**
+ * Get the data from the multi handle
+ */
+ protected function perform()
+ {
+ $event = new Event(array('curl_multi' => $this));
+
+ while ($this->requests) {
+ // Notify each request as polling
+ $blocking = $total = 0;
+ foreach ($this->requests as $request) {
+ ++$total;
+ $event['request'] = $request;
+ $request->getEventDispatcher()->dispatch(self::POLLING_REQUEST, $event);
+ // The blocking variable just has to be non-falsey to block the loop
+ if ($request->getParams()->hasKey(self::BLOCKING)) {
+ ++$blocking;
+ }
+ }
+ if ($blocking == $total) {
+ // Sleep to prevent eating CPU because no requests are actually pending a select call
+ usleep(500);
+ } else {
+ $this->executeHandles();
+ }
+ }
+ }
+
+ /**
+ * Execute and select curl handles
+ */
+ private function executeHandles()
+ {
+ // The first curl_multi_select often times out no matter what, but is usually required for fast transfers
+ $selectTimeout = 0.001;
+ $active = false;
+ do {
+ while (($mrc = curl_multi_exec($this->multiHandle, $active)) == CURLM_CALL_MULTI_PERFORM);
+ $this->checkCurlResult($mrc);
+ $this->processMessages();
+ if ($active && curl_multi_select($this->multiHandle, $selectTimeout) === -1) {
+ // Perform a usleep if a select returns -1: https://bugs.php.net/bug.php?id=61141
+ usleep(150);
+ }
+ $selectTimeout = $this->selectTimeout;
+ } while ($active);
+ }
+
+ /**
+ * Process any received curl multi messages
+ */
+ private function processMessages()
+ {
+ while ($done = curl_multi_info_read($this->multiHandle)) {
+ $request = $this->resourceHash[(int) $done['handle']];
+ try {
+ $this->processResponse($request, $this->handles[$request], $done);
+ $this->successful[] = $request;
+ } catch (\Exception $e) {
+ $this->removeErroredRequest($request, $e);
+ }
+ }
+ }
+
+ /**
+ * Remove a request that encountered an exception
+ *
+ * @param RequestInterface $request Request to remove
+ * @param \Exception $e Exception encountered
+ */
+ protected function removeErroredRequest(RequestInterface $request, \Exception $e = null)
+ {
+ $this->exceptions[] = array('request' => $request, 'exception' => $e);
+ $this->remove($request);
+ $this->dispatch(self::MULTI_EXCEPTION, array('exception' => $e, 'all_exceptions' => $this->exceptions));
+ }
+
+ /**
+ * Check for errors and fix headers of a request based on a curl response
+ *
+ * @param RequestInterface $request Request to process
+ * @param CurlHandle $handle Curl handle object
+ * @param array $curl Array returned from curl_multi_info_read
+ *
+ * @throws CurlException on Curl error
+ */
+ protected function processResponse(RequestInterface $request, CurlHandle $handle, array $curl)
+ {
+ // Set the transfer stats on the response
+ $handle->updateRequestFromTransfer($request);
+ // Check if a cURL exception occurred, and if so, notify things
+ $curlException = $this->isCurlException($request, $handle, $curl);
+
+ // Always remove completed curl handles. They can be added back again
+ // via events if needed (e.g. ExponentialBackoffPlugin)
+ $this->removeHandle($request);
+
+ if (!$curlException) {
+ if ($this->validateResponseWasSet($request)) {
+ $state = $request->setState(
+ RequestInterface::STATE_COMPLETE,
+ array('handle' => $handle)
+ );
+ // Only remove the request if it wasn't resent as a result of
+ // the state change
+ if ($state != RequestInterface::STATE_TRANSFER) {
+ $this->remove($request);
+ }
+ }
+ return;
+ }
+
+ // Set the state of the request to an error
+ $state = $request->setState(RequestInterface::STATE_ERROR, array('exception' => $curlException));
+ // Allow things to ignore the error if possible
+ if ($state != RequestInterface::STATE_TRANSFER) {
+ $this->remove($request);
+ }
+
+ // The error was not handled, so fail
+ if ($state == RequestInterface::STATE_ERROR) {
+ /** @var CurlException $curlException */
+ throw $curlException;
+ }
+ }
+
+ /**
+ * Remove a curl handle from the curl multi object
+ *
+ * @param RequestInterface $request Request that owns the handle
+ */
+ protected function removeHandle(RequestInterface $request)
+ {
+ if (isset($this->handles[$request])) {
+ $handle = $this->handles[$request];
+ curl_multi_remove_handle($this->multiHandle, $handle->getHandle());
+ unset($this->handles[$request]);
+ unset($this->resourceHash[(int) $handle->getHandle()]);
+ $handle->close();
+ }
+ }
+
+ /**
+ * Check if a cURL transfer resulted in what should be an exception
+ *
+ * @param RequestInterface $request Request to check
+ * @param CurlHandle $handle Curl handle object
+ * @param array $curl Array returned from curl_multi_info_read
+ *
+ * @return CurlException|bool
+ */
+ private function isCurlException(RequestInterface $request, CurlHandle $handle, array $curl)
+ {
+ if (CURLM_OK == $curl['result'] || CURLM_CALL_MULTI_PERFORM == $curl['result']) {
+ return false;
+ }
+
+ $handle->setErrorNo($curl['result']);
+ $e = new CurlException(sprintf('[curl] %s: %s [url] %s',
+ $handle->getErrorNo(), $handle->getError(), $handle->getUrl()));
+ $e->setCurlHandle($handle)
+ ->setRequest($request)
+ ->setCurlInfo($handle->getInfo())
+ ->setError($handle->getError(), $handle->getErrorNo());
+
+ return $e;
+ }
+
+ /**
+ * Throw an exception for a cURL multi response if needed
+ *
+ * @param int $code Curl response code
+ * @throws CurlException
+ */
+ private function checkCurlResult($code)
+ {
+ if ($code != CURLM_OK && $code != CURLM_CALL_MULTI_PERFORM) {
+ throw new CurlException(isset($this->multiErrors[$code])
+ ? "cURL error: {$code} ({$this->multiErrors[$code][0]}): cURL message: {$this->multiErrors[$code][1]}"
+ : 'Unexpected cURL error: ' . $code
+ );
+ }
+ }
+
+ /**
+ * @link https://github.com/guzzle/guzzle/issues/710
+ */
+ private function validateResponseWasSet(RequestInterface $request)
+ {
+ if ($request->getResponse()) {
+ return true;
+ }
+
+ $body = $request instanceof EntityEnclosingRequestInterface
+ ? $request->getBody()
+ : null;
+
+ if (!$body) {
+ $rex = new RequestException(
+ 'No response was received for a request with no body. This'
+ . ' could mean that you are saturating your network.'
+ );
+ $rex->setRequest($request);
+ $this->removeErroredRequest($request, $rex);
+ } elseif (!$body->isSeekable() || !$body->seek(0)) {
+ // Nothing we can do with this. Sorry!
+ $rex = new RequestException(
+ 'The connection was unexpectedly closed. The request would'
+ . ' have been retried, but attempting to rewind the'
+ . ' request body failed.'
+ );
+ $rex->setRequest($request);
+ $this->removeErroredRequest($request, $rex);
+ } else {
+ $this->remove($request);
+ // Add the request back to the batch to retry automatically.
+ $this->requests[] = $request;
+ $this->addHandle($request);
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMultiInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMultiInterface.php
new file mode 100644
index 0000000..0ead757
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMultiInterface.php
@@ -0,0 +1,58 @@
+maxHandles = $maxHandles;
+ $this->selectTimeout = $selectTimeout;
+ // You can get some weird "Too many open files" errors when sending a large amount of requests in parallel.
+ // These two statements autoload classes before a system runs out of file descriptors so that you can get back
+ // valuable error messages if you run out.
+ class_exists('Guzzle\Http\Message\Response');
+ class_exists('Guzzle\Http\Exception\CurlException');
+ }
+
+ public function add(RequestInterface $request)
+ {
+ $this->queued[] = $request;
+
+ return $this;
+ }
+
+ public function all()
+ {
+ $requests = $this->queued;
+ foreach ($this->handles as $handle) {
+ $requests = array_merge($requests, $handle->all());
+ }
+
+ return $requests;
+ }
+
+ public function remove(RequestInterface $request)
+ {
+ foreach ($this->queued as $i => $r) {
+ if ($request === $r) {
+ unset($this->queued[$i]);
+ return true;
+ }
+ }
+
+ foreach ($this->handles as $handle) {
+ if ($handle->remove($request)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public function reset($hard = false)
+ {
+ $this->queued = array();
+ $this->groups = array();
+ foreach ($this->handles as $handle) {
+ $handle->reset();
+ }
+ if ($hard) {
+ $this->handles = array();
+ }
+
+ return $this;
+ }
+
+ public function send()
+ {
+ if ($this->queued) {
+ $group = $this->getAvailableHandle();
+ // Add this handle to a list of handles than is claimed
+ $this->groups[] = $group;
+ while ($request = array_shift($this->queued)) {
+ $group->add($request);
+ }
+ try {
+ $group->send();
+ array_pop($this->groups);
+ $this->cleanupHandles();
+ } catch (\Exception $e) {
+ // Remove the group and cleanup if an exception was encountered and no more requests in group
+ if (!$group->count()) {
+ array_pop($this->groups);
+ $this->cleanupHandles();
+ }
+ throw $e;
+ }
+ }
+ }
+
+ public function count()
+ {
+ return count($this->all());
+ }
+
+ /**
+ * Get an existing available CurlMulti handle or create a new one
+ *
+ * @return CurlMulti
+ */
+ protected function getAvailableHandle()
+ {
+ // Grab a handle that is not claimed
+ foreach ($this->handles as $h) {
+ if (!in_array($h, $this->groups, true)) {
+ return $h;
+ }
+ }
+
+ // All are claimed, so create one
+ $handle = new CurlMulti($this->selectTimeout);
+ $handle->setEventDispatcher($this->getEventDispatcher());
+ $this->handles[] = $handle;
+
+ return $handle;
+ }
+
+ /**
+ * Trims down unused CurlMulti handles to limit the number of open connections
+ */
+ protected function cleanupHandles()
+ {
+ if ($diff = max(0, count($this->handles) - $this->maxHandles)) {
+ for ($i = count($this->handles) - 1; $i > 0 && $diff > 0; $i--) {
+ if (!count($this->handles[$i])) {
+ unset($this->handles[$i]);
+ $diff--;
+ }
+ }
+ $this->handles = array_values($this->handles);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlVersion.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlVersion.php
new file mode 100644
index 0000000..c3f99dd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlVersion.php
@@ -0,0 +1,66 @@
+version) {
+ $this->version = curl_version();
+ }
+
+ return $this->version;
+ }
+
+ /**
+ * Get a specific type of curl information
+ *
+ * @param string $type Version information to retrieve. This value is one of:
+ * - version_number: cURL 24 bit version number
+ * - version: cURL version number, as a string
+ * - ssl_version_number: OpenSSL 24 bit version number
+ * - ssl_version: OpenSSL version number, as a string
+ * - libz_version: zlib version number, as a string
+ * - host: Information about the host where cURL was built
+ * - features: A bitmask of the CURL_VERSION_XXX constants
+ * - protocols: An array of protocols names supported by cURL
+ *
+ * @return string|float|bool if the $type is found, and false if not found
+ */
+ public function get($type)
+ {
+ $version = $this->getAll();
+
+ return isset($version[$type]) ? $version[$type] : false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/RequestMediator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/RequestMediator.php
new file mode 100644
index 0000000..e2c4878
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/RequestMediator.php
@@ -0,0 +1,149 @@
+request = $request;
+ $this->emitIo = $emitIo;
+ }
+
+ /**
+ * Receive a response header from curl
+ *
+ * @param resource $curl Curl handle
+ * @param string $header Received header
+ *
+ * @return int
+ */
+ public function receiveResponseHeader($curl, $header)
+ {
+ static $normalize = array("\r", "\n");
+ $length = strlen($header);
+ $header = str_replace($normalize, '', $header);
+
+ if (strpos($header, 'HTTP/') === 0) {
+
+ $startLine = explode(' ', $header, 3);
+ list($protocol, $version) = explode('/', trim($startLine[0]));
+ $code = $startLine[1];
+ $status = isset($startLine[2]) ? $startLine[2] : '';
+
+ // Only download the body of the response to the specified response
+ // body when a successful response is received.
+ if ($code >= 200 && $code < 300) {
+ $body = $this->request->getResponseBody();
+ } else {
+ $body = EntityBody::factory();
+ }
+
+ $response = new Response($code, null, $body);
+ $response->setProtocol($protocol, $version);
+ $response->setStatus($code, $status);
+ $this->request->startResponse($response);
+
+ $this->request->dispatch('request.receive.status_line', array(
+ 'request' => $this,
+ 'line' => $header,
+ 'status_code' => $code,
+ 'reason_phrase' => $status
+ ));
+
+ } elseif ($pos = strpos($header, ':')) {
+ $this->request->getResponse()->addHeader(
+ trim(substr($header, 0, $pos)),
+ trim(substr($header, $pos + 1))
+ );
+ }
+
+ return $length;
+ }
+
+ /**
+ * Received a progress notification
+ *
+ * @param int $downloadSize Total download size
+ * @param int $downloaded Amount of bytes downloaded
+ * @param int $uploadSize Total upload size
+ * @param int $uploaded Amount of bytes uploaded
+ * @param resource $handle CurlHandle object
+ */
+ public function progress($downloadSize, $downloaded, $uploadSize, $uploaded, $handle = null)
+ {
+ $this->request->dispatch('curl.callback.progress', array(
+ 'request' => $this->request,
+ 'handle' => $handle,
+ 'download_size' => $downloadSize,
+ 'downloaded' => $downloaded,
+ 'upload_size' => $uploadSize,
+ 'uploaded' => $uploaded
+ ));
+ }
+
+ /**
+ * Write data to the response body of a request
+ *
+ * @param resource $curl Curl handle
+ * @param string $write Data that was received
+ *
+ * @return int
+ */
+ public function writeResponseBody($curl, $write)
+ {
+ if ($this->emitIo) {
+ $this->request->dispatch('curl.callback.write', array(
+ 'request' => $this->request,
+ 'write' => $write
+ ));
+ }
+
+ if ($response = $this->request->getResponse()) {
+ return $response->getBody()->write($write);
+ } else {
+ // Unexpected data received before response headers - abort transfer
+ return 0;
+ }
+ }
+
+ /**
+ * Read data from the request body and send it to curl
+ *
+ * @param resource $ch Curl handle
+ * @param resource $fd File descriptor
+ * @param int $length Amount of data to read
+ *
+ * @return string
+ */
+ public function readRequestBody($ch, $fd, $length)
+ {
+ if (!($body = $this->request->getBody())) {
+ return '';
+ }
+
+ $read = (string) $body->read($length);
+ if ($this->emitIo) {
+ $this->request->dispatch('curl.callback.read', array('request' => $this->request, 'read' => $read));
+ }
+
+ return $read;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/EntityBody.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/EntityBody.php
new file mode 100644
index 0000000..b60d170
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/EntityBody.php
@@ -0,0 +1,201 @@
+rewindFunction = $callable;
+
+ return $this;
+ }
+
+ public function rewind()
+ {
+ return $this->rewindFunction ? call_user_func($this->rewindFunction, $this) : parent::rewind();
+ }
+
+ /**
+ * Create a new EntityBody from a string
+ *
+ * @param string $string String of data
+ *
+ * @return EntityBody
+ */
+ public static function fromString($string)
+ {
+ $stream = fopen('php://temp', 'r+');
+ if ($string !== '') {
+ fwrite($stream, $string);
+ rewind($stream);
+ }
+
+ return new static($stream);
+ }
+
+ public function compress($filter = 'zlib.deflate')
+ {
+ $result = $this->handleCompression($filter);
+ $this->contentEncoding = $result ? $filter : false;
+
+ return $result;
+ }
+
+ public function uncompress($filter = 'zlib.inflate')
+ {
+ $offsetStart = 0;
+
+ // When inflating gzipped data, the first 10 bytes must be stripped
+ // if a gzip header is present
+ if ($filter == 'zlib.inflate') {
+ // @codeCoverageIgnoreStart
+ if (!$this->isReadable() || ($this->isConsumed() && !$this->isSeekable())) {
+ return false;
+ }
+ // @codeCoverageIgnoreEnd
+ if (stream_get_contents($this->stream, 3, 0) === "\x1f\x8b\x08") {
+ $offsetStart = 10;
+ }
+ }
+
+ $this->contentEncoding = false;
+
+ return $this->handleCompression($filter, $offsetStart);
+ }
+
+ public function getContentLength()
+ {
+ return $this->getSize();
+ }
+
+ public function getContentType()
+ {
+ return $this->getUri() ? Mimetypes::getInstance()->fromFilename($this->getUri()) : null;
+ }
+
+ public function getContentMd5($rawOutput = false, $base64Encode = false)
+ {
+ if ($hash = self::getHash($this, 'md5', $rawOutput)) {
+ return $hash && $base64Encode ? base64_encode($hash) : $hash;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Calculate the MD5 hash of an entity body
+ *
+ * @param EntityBodyInterface $body Entity body to calculate the hash for
+ * @param bool $rawOutput Whether or not to use raw output
+ * @param bool $base64Encode Whether or not to base64 encode raw output (only if raw output is true)
+ *
+ * @return bool|string Returns an MD5 string on success or FALSE on failure
+ * @deprecated This will be deprecated soon
+ * @codeCoverageIgnore
+ */
+ public static function calculateMd5(EntityBodyInterface $body, $rawOutput = false, $base64Encode = false)
+ {
+ Version::warn(__CLASS__ . ' is deprecated. Use getContentMd5()');
+ return $body->getContentMd5($rawOutput, $base64Encode);
+ }
+
+ public function setStreamFilterContentEncoding($streamFilterContentEncoding)
+ {
+ $this->contentEncoding = $streamFilterContentEncoding;
+
+ return $this;
+ }
+
+ public function getContentEncoding()
+ {
+ return strtr($this->contentEncoding, array(
+ 'zlib.deflate' => 'gzip',
+ 'bzip2.compress' => 'compress'
+ )) ?: false;
+ }
+
+ protected function handleCompression($filter, $offsetStart = 0)
+ {
+ // @codeCoverageIgnoreStart
+ if (!$this->isReadable() || ($this->isConsumed() && !$this->isSeekable())) {
+ return false;
+ }
+ // @codeCoverageIgnoreEnd
+
+ $handle = fopen('php://temp', 'r+');
+ $filter = @stream_filter_append($handle, $filter, STREAM_FILTER_WRITE);
+ if (!$filter) {
+ return false;
+ }
+
+ // Seek to the offset start if possible
+ $this->seek($offsetStart);
+ while ($data = fread($this->stream, 8096)) {
+ fwrite($handle, $data);
+ }
+
+ fclose($this->stream);
+ $this->stream = $handle;
+ stream_filter_remove($filter);
+ $stat = fstat($this->stream);
+ $this->size = $stat['size'];
+ $this->rebuildCache();
+ $this->seek(0);
+
+ // Remove any existing rewind function as the underlying stream has been replaced
+ $this->rewindFunction = null;
+
+ return true;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/EntityBodyInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/EntityBodyInterface.php
new file mode 100644
index 0000000..e640f57
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/EntityBodyInterface.php
@@ -0,0 +1,73 @@
+isClientError()) {
+ $label = 'Client error response';
+ $class = __NAMESPACE__ . '\\ClientErrorResponseException';
+ } elseif ($response->isServerError()) {
+ $label = 'Server error response';
+ $class = __NAMESPACE__ . '\\ServerErrorResponseException';
+ } else {
+ $label = 'Unsuccessful response';
+ $class = __CLASS__;
+ }
+
+ $message = $label . PHP_EOL . implode(PHP_EOL, array(
+ '[status code] ' . $response->getStatusCode(),
+ '[reason phrase] ' . $response->getReasonPhrase(),
+ '[url] ' . $request->getUrl(),
+ ));
+
+ $e = new $class($message);
+ $e->setResponse($response);
+ $e->setRequest($request);
+
+ return $e;
+ }
+
+ /**
+ * Set the response that caused the exception
+ *
+ * @param Response $response Response to set
+ */
+ public function setResponse(Response $response)
+ {
+ $this->response = $response;
+ }
+
+ /**
+ * Get the response that caused the exception
+ *
+ * @return Response
+ */
+ public function getResponse()
+ {
+ return $this->response;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/ClientErrorResponseException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/ClientErrorResponseException.php
new file mode 100644
index 0000000..04d7ddc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/ClientErrorResponseException.php
@@ -0,0 +1,8 @@
+curlError = $error;
+ $this->curlErrorNo = $number;
+
+ return $this;
+ }
+
+ /**
+ * Set the associated curl handle
+ *
+ * @param CurlHandle $handle Curl handle
+ *
+ * @return self
+ */
+ public function setCurlHandle(CurlHandle $handle)
+ {
+ $this->handle = $handle;
+
+ return $this;
+ }
+
+ /**
+ * Get the associated cURL handle
+ *
+ * @return CurlHandle|null
+ */
+ public function getCurlHandle()
+ {
+ return $this->handle;
+ }
+
+ /**
+ * Get the associated cURL error message
+ *
+ * @return string|null
+ */
+ public function getError()
+ {
+ return $this->curlError;
+ }
+
+ /**
+ * Get the associated cURL error number
+ *
+ * @return int|null
+ */
+ public function getErrorNo()
+ {
+ return $this->curlErrorNo;
+ }
+
+ /**
+ * Returns curl information about the transfer
+ *
+ * @return array
+ */
+ public function getCurlInfo()
+ {
+ return $this->curlInfo;
+ }
+
+ /**
+ * Set curl transfer information
+ *
+ * @param array $info Array of curl transfer information
+ *
+ * @return self
+ * @link http://php.net/manual/en/function.curl-getinfo.php
+ */
+ public function setCurlInfo(array $info)
+ {
+ $this->curlInfo = $info;
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/HttpException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/HttpException.php
new file mode 100644
index 0000000..ee87295
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/HttpException.php
@@ -0,0 +1,10 @@
+successfulRequests, $this->failedRequests);
+ }
+
+ /**
+ * Add to the array of successful requests
+ *
+ * @param RequestInterface $request Successful request
+ *
+ * @return self
+ */
+ public function addSuccessfulRequest(RequestInterface $request)
+ {
+ $this->successfulRequests[] = $request;
+
+ return $this;
+ }
+
+ /**
+ * Add to the array of failed requests
+ *
+ * @param RequestInterface $request Failed request
+ *
+ * @return self
+ */
+ public function addFailedRequest(RequestInterface $request)
+ {
+ $this->failedRequests[] = $request;
+
+ return $this;
+ }
+
+ /**
+ * Add to the array of failed requests and associate with exceptions
+ *
+ * @param RequestInterface $request Failed request
+ * @param \Exception $exception Exception to add and associate with
+ *
+ * @return self
+ */
+ public function addFailedRequestWithException(RequestInterface $request, \Exception $exception)
+ {
+ $this->add($exception)
+ ->addFailedRequest($request)
+ ->exceptionForRequest[spl_object_hash($request)] = $exception;
+
+ return $this;
+ }
+
+ /**
+ * Get the Exception that caused the given $request to fail
+ *
+ * @param RequestInterface $request Failed command
+ *
+ * @return \Exception|null
+ */
+ public function getExceptionForFailedRequest(RequestInterface $request)
+ {
+ $oid = spl_object_hash($request);
+
+ return isset($this->exceptionForRequest[$oid]) ? $this->exceptionForRequest[$oid] : null;
+ }
+
+ /**
+ * Set all of the successful requests
+ *
+ * @param array Array of requests
+ *
+ * @return self
+ */
+ public function setSuccessfulRequests(array $requests)
+ {
+ $this->successfulRequests = $requests;
+
+ return $this;
+ }
+
+ /**
+ * Set all of the failed requests
+ *
+ * @param array Array of requests
+ *
+ * @return self
+ */
+ public function setFailedRequests(array $requests)
+ {
+ $this->failedRequests = $requests;
+
+ return $this;
+ }
+
+ /**
+ * Get an array of successful requests sent in the multi transfer
+ *
+ * @return array
+ */
+ public function getSuccessfulRequests()
+ {
+ return $this->successfulRequests;
+ }
+
+ /**
+ * Get an array of failed requests sent in the multi transfer
+ *
+ * @return array
+ */
+ public function getFailedRequests()
+ {
+ return $this->failedRequests;
+ }
+
+ /**
+ * Check if the exception object contains a request
+ *
+ * @param RequestInterface $request Request to check
+ *
+ * @return bool
+ */
+ public function containsRequest(RequestInterface $request)
+ {
+ return in_array($request, $this->failedRequests, true) || in_array($request, $this->successfulRequests, true);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/RequestException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/RequestException.php
new file mode 100644
index 0000000..274df2c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/RequestException.php
@@ -0,0 +1,39 @@
+request = $request;
+
+ return $this;
+ }
+
+ /**
+ * Get the request that caused the exception
+ *
+ * @return RequestInterface
+ */
+ public function getRequest()
+ {
+ return $this->request;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/ServerErrorResponseException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/ServerErrorResponseException.php
new file mode 100644
index 0000000..f0f7cfe
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/ServerErrorResponseException.php
@@ -0,0 +1,8 @@
+eventDispatcher = $eventDispatcher;
+
+ return $this;
+ }
+
+ public function getEventDispatcher()
+ {
+ if (!$this->eventDispatcher) {
+ $this->eventDispatcher = new EventDispatcher();
+ }
+
+ return $this->eventDispatcher;
+ }
+
+ public function dispatch($eventName, array $context = array())
+ {
+ return $this->getEventDispatcher()->dispatch($eventName, new Event($context));
+ }
+
+ /**
+ * {@inheritdoc}
+ * @codeCoverageIgnore
+ */
+ public function addSubscriber(EventSubscriberInterface $subscriber)
+ {
+ $this->getEventDispatcher()->addSubscriber($subscriber);
+
+ return $this;
+ }
+
+ public function read($length)
+ {
+ $event = array(
+ 'body' => $this,
+ 'length' => $length,
+ 'read' => $this->body->read($length)
+ );
+ $this->dispatch('body.read', $event);
+
+ return $event['read'];
+ }
+
+ public function write($string)
+ {
+ $event = array(
+ 'body' => $this,
+ 'write' => $string,
+ 'result' => $this->body->write($string)
+ );
+ $this->dispatch('body.write', $event);
+
+ return $event['result'];
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/AbstractMessage.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/AbstractMessage.php
new file mode 100644
index 0000000..0d066ff
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/AbstractMessage.php
@@ -0,0 +1,220 @@
+params = new Collection();
+ $this->headerFactory = new HeaderFactory();
+ $this->headers = new HeaderCollection();
+ }
+
+ /**
+ * Set the header factory to use to create headers
+ *
+ * @param HeaderFactoryInterface $factory
+ *
+ * @return self
+ */
+ public function setHeaderFactory(HeaderFactoryInterface $factory)
+ {
+ $this->headerFactory = $factory;
+
+ return $this;
+ }
+
+ public function getParams()
+ {
+ return $this->params;
+ }
+
+ public function addHeader($header, $value)
+ {
+ if (isset($this->headers[$header])) {
+ $this->headers[$header]->add($value);
+ } elseif ($value instanceof HeaderInterface) {
+ $this->headers[$header] = $value;
+ } else {
+ $this->headers[$header] = $this->headerFactory->createHeader($header, $value);
+ }
+
+ return $this;
+ }
+
+ public function addHeaders(array $headers)
+ {
+ foreach ($headers as $key => $value) {
+ $this->addHeader($key, $value);
+ }
+
+ return $this;
+ }
+
+ public function getHeader($header)
+ {
+ return $this->headers[$header];
+ }
+
+ public function getHeaders()
+ {
+ return $this->headers;
+ }
+
+ public function getHeaderLines()
+ {
+ $headers = array();
+ foreach ($this->headers as $value) {
+ $headers[] = $value->getName() . ': ' . $value;
+ }
+
+ return $headers;
+ }
+
+ public function setHeader($header, $value)
+ {
+ unset($this->headers[$header]);
+ $this->addHeader($header, $value);
+
+ return $this;
+ }
+
+ public function setHeaders(array $headers)
+ {
+ $this->headers->clear();
+ foreach ($headers as $key => $value) {
+ $this->addHeader($key, $value);
+ }
+
+ return $this;
+ }
+
+ public function hasHeader($header)
+ {
+ return isset($this->headers[$header]);
+ }
+
+ public function removeHeader($header)
+ {
+ unset($this->headers[$header]);
+
+ return $this;
+ }
+
+ /**
+ * @deprecated Use $message->getHeader()->parseParams()
+ * @codeCoverageIgnore
+ */
+ public function getTokenizedHeader($header, $token = ';')
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use $message->getHeader()->parseParams()');
+ if ($this->hasHeader($header)) {
+ $data = new Collection();
+ foreach ($this->getHeader($header)->parseParams() as $values) {
+ foreach ($values as $key => $value) {
+ if ($value === '') {
+ $data->set($data->count(), $key);
+ } else {
+ $data->add($key, $value);
+ }
+ }
+ }
+ return $data;
+ }
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function setTokenizedHeader($header, $data, $token = ';')
+ {
+ Version::warn(__METHOD__ . ' is deprecated.');
+ return $this;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function getCacheControlDirective($directive)
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use $message->getHeader(\'Cache-Control\')->getDirective()');
+ if (!($header = $this->getHeader('Cache-Control'))) {
+ return null;
+ }
+
+ return $header->getDirective($directive);
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function hasCacheControlDirective($directive)
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use $message->getHeader(\'Cache-Control\')->hasDirective()');
+ if ($header = $this->getHeader('Cache-Control')) {
+ return $header->hasDirective($directive);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function addCacheControlDirective($directive, $value = true)
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use $message->getHeader(\'Cache-Control\')->addDirective()');
+ if (!($header = $this->getHeader('Cache-Control'))) {
+ $this->addHeader('Cache-Control', '');
+ $header = $this->getHeader('Cache-Control');
+ }
+
+ $header->addDirective($directive, $value);
+
+ return $this;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function removeCacheControlDirective($directive)
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use $message->getHeader(\'Cache-Control\')->removeDirective()');
+ if ($header = $this->getHeader('Cache-Control')) {
+ $header->removeDirective($directive);
+ }
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/EntityEnclosingRequest.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/EntityEnclosingRequest.php
new file mode 100644
index 0000000..212850a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/EntityEnclosingRequest.php
@@ -0,0 +1,247 @@
+postFields = new QueryString();
+ parent::__construct($method, $url, $headers);
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString()
+ {
+ // Only attempt to include the POST data if it's only fields
+ if (count($this->postFields) && empty($this->postFiles)) {
+ return parent::__toString() . (string) $this->postFields;
+ }
+
+ return parent::__toString() . $this->body;
+ }
+
+ public function setState($state, array $context = array())
+ {
+ parent::setState($state, $context);
+ if ($state == self::STATE_TRANSFER && !$this->body && !count($this->postFields) && !count($this->postFiles)) {
+ $this->setHeader('Content-Length', 0)->removeHeader('Transfer-Encoding');
+ }
+
+ return $this->state;
+ }
+
+ public function setBody($body, $contentType = null)
+ {
+ $this->body = EntityBody::factory($body);
+
+ // Auto detect the Content-Type from the path of the request if possible
+ if ($contentType === null && !$this->hasHeader('Content-Type')) {
+ $contentType = $this->body->getContentType();
+ }
+
+ if ($contentType) {
+ $this->setHeader('Content-Type', $contentType);
+ }
+
+ // Always add the Expect 100-Continue header if the body cannot be rewound. This helps with redirects.
+ if (!$this->body->isSeekable() && $this->expectCutoff !== false) {
+ $this->setHeader('Expect', '100-Continue');
+ }
+
+ // Set the Content-Length header if it can be determined
+ $size = $this->body->getContentLength();
+ if ($size !== null && $size !== false) {
+ $this->setHeader('Content-Length', $size);
+ if ($size > $this->expectCutoff) {
+ $this->setHeader('Expect', '100-Continue');
+ }
+ } elseif (!$this->hasHeader('Content-Length')) {
+ if ('1.1' == $this->protocolVersion) {
+ $this->setHeader('Transfer-Encoding', 'chunked');
+ } else {
+ throw new RequestException(
+ 'Cannot determine Content-Length and cannot use chunked Transfer-Encoding when using HTTP/1.0'
+ );
+ }
+ }
+
+ return $this;
+ }
+
+ public function getBody()
+ {
+ return $this->body;
+ }
+
+ /**
+ * Set the size that the entity body of the request must exceed before adding the Expect: 100-Continue header.
+ *
+ * @param int|bool $size Cutoff in bytes. Set to false to never send the expect header (even with non-seekable data)
+ *
+ * @return self
+ */
+ public function setExpectHeaderCutoff($size)
+ {
+ $this->expectCutoff = $size;
+ if ($size === false || !$this->body) {
+ $this->removeHeader('Expect');
+ } elseif ($this->body && $this->body->getSize() && $this->body->getSize() > $size) {
+ $this->setHeader('Expect', '100-Continue');
+ }
+
+ return $this;
+ }
+
+ public function configureRedirects($strict = false, $maxRedirects = 5)
+ {
+ $this->getParams()->set(RedirectPlugin::STRICT_REDIRECTS, $strict);
+ if ($maxRedirects == 0) {
+ $this->getParams()->set(RedirectPlugin::DISABLE, true);
+ } else {
+ $this->getParams()->set(RedirectPlugin::MAX_REDIRECTS, $maxRedirects);
+ }
+
+ return $this;
+ }
+
+ public function getPostField($field)
+ {
+ return $this->postFields->get($field);
+ }
+
+ public function getPostFields()
+ {
+ return $this->postFields;
+ }
+
+ public function setPostField($key, $value)
+ {
+ $this->postFields->set($key, $value);
+ $this->processPostFields();
+
+ return $this;
+ }
+
+ public function addPostFields($fields)
+ {
+ $this->postFields->merge($fields);
+ $this->processPostFields();
+
+ return $this;
+ }
+
+ public function removePostField($field)
+ {
+ $this->postFields->remove($field);
+ $this->processPostFields();
+
+ return $this;
+ }
+
+ public function getPostFiles()
+ {
+ return $this->postFiles;
+ }
+
+ public function getPostFile($fieldName)
+ {
+ return isset($this->postFiles[$fieldName]) ? $this->postFiles[$fieldName] : null;
+ }
+
+ public function removePostFile($fieldName)
+ {
+ unset($this->postFiles[$fieldName]);
+ $this->processPostFields();
+
+ return $this;
+ }
+
+ public function addPostFile($field, $filename = null, $contentType = null, $postname = null)
+ {
+ $data = null;
+
+ if ($field instanceof PostFileInterface) {
+ $data = $field;
+ } elseif (is_array($filename)) {
+ // Allow multiple values to be set in a single key
+ foreach ($filename as $file) {
+ $this->addPostFile($field, $file, $contentType);
+ }
+ return $this;
+ } elseif (!is_string($filename)) {
+ throw new RequestException('The path to a file must be a string');
+ } elseif (!empty($filename)) {
+ // Adding an empty file will cause cURL to error out
+ $data = new PostFile($field, $filename, $contentType, $postname);
+ }
+
+ if ($data) {
+ if (!isset($this->postFiles[$data->getFieldName()])) {
+ $this->postFiles[$data->getFieldName()] = array($data);
+ } else {
+ $this->postFiles[$data->getFieldName()][] = $data;
+ }
+ $this->processPostFields();
+ }
+
+ return $this;
+ }
+
+ public function addPostFiles(array $files)
+ {
+ foreach ($files as $key => $file) {
+ if ($file instanceof PostFileInterface) {
+ $this->addPostFile($file, null, null, false);
+ } elseif (is_string($file)) {
+ // Convert non-associative array keys into 'file'
+ if (is_numeric($key)) {
+ $key = 'file';
+ }
+ $this->addPostFile($key, $file, null, false);
+ } else {
+ throw new RequestException('File must be a string or instance of PostFileInterface');
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Determine what type of request should be sent based on post fields
+ */
+ protected function processPostFields()
+ {
+ if (!$this->postFiles) {
+ $this->removeHeader('Expect')->setHeader('Content-Type', self::URL_ENCODED);
+ } else {
+ $this->setHeader('Content-Type', self::MULTIPART);
+ if ($this->expectCutoff !== false) {
+ $this->setHeader('Expect', '100-Continue');
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/EntityEnclosingRequestInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/EntityEnclosingRequestInterface.php
new file mode 100644
index 0000000..49ad459
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/EntityEnclosingRequestInterface.php
@@ -0,0 +1,137 @@
+ filenames where filename can be a string or PostFileInterface
+ *
+ * @return self
+ */
+ public function addPostFiles(array $files);
+
+ /**
+ * Configure how redirects are handled for the request
+ *
+ * @param bool $strict Set to true to follow strict RFC compliance when redirecting POST requests. Most
+ * browsers with follow a 301-302 redirect for a POST request with a GET request. This is
+ * the default behavior of Guzzle. Enable strict redirects to redirect these responses
+ * with a POST rather than a GET request.
+ * @param int $maxRedirects Specify the maximum number of allowed redirects. Set to 0 to disable redirects.
+ *
+ * @return self
+ */
+ public function configureRedirects($strict = false, $maxRedirects = 5);
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php
new file mode 100644
index 0000000..50597b2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php
@@ -0,0 +1,182 @@
+header = trim($header);
+ $this->glue = $glue;
+
+ foreach ((array) $values as $value) {
+ foreach ((array) $value as $v) {
+ $this->values[] = $v;
+ }
+ }
+ }
+
+ public function __toString()
+ {
+ return implode($this->glue . ' ', $this->toArray());
+ }
+
+ public function add($value)
+ {
+ $this->values[] = $value;
+
+ return $this;
+ }
+
+ public function getName()
+ {
+ return $this->header;
+ }
+
+ public function setName($name)
+ {
+ $this->header = $name;
+
+ return $this;
+ }
+
+ public function setGlue($glue)
+ {
+ $this->glue = $glue;
+
+ return $this;
+ }
+
+ public function getGlue()
+ {
+ return $this->glue;
+ }
+
+ /**
+ * Normalize the header to be a single header with an array of values.
+ *
+ * If any values of the header contains the glue string value (e.g. ","), then the value will be exploded into
+ * multiple entries in the header.
+ *
+ * @return self
+ */
+ public function normalize()
+ {
+ $values = $this->toArray();
+
+ for ($i = 0, $total = count($values); $i < $total; $i++) {
+ if (strpos($values[$i], $this->glue) !== false) {
+ // Explode on glue when the glue is not inside of a comma
+ foreach (preg_split('/' . preg_quote($this->glue) . '(?=([^"]*"[^"]*")*[^"]*$)/', $values[$i]) as $v) {
+ $values[] = trim($v);
+ }
+ unset($values[$i]);
+ }
+ }
+
+ $this->values = array_values($values);
+
+ return $this;
+ }
+
+ public function hasValue($searchValue)
+ {
+ return in_array($searchValue, $this->toArray());
+ }
+
+ public function removeValue($searchValue)
+ {
+ $this->values = array_values(array_filter($this->values, function ($value) use ($searchValue) {
+ return $value != $searchValue;
+ }));
+
+ return $this;
+ }
+
+ public function toArray()
+ {
+ return $this->values;
+ }
+
+ public function count()
+ {
+ return count($this->toArray());
+ }
+
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->toArray());
+ }
+
+ public function parseParams()
+ {
+ $params = $matches = array();
+ $callback = array($this, 'trimHeader');
+
+ // Normalize the header into a single array and iterate over all values
+ foreach ($this->normalize()->toArray() as $val) {
+ $part = array();
+ foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {
+ if (!preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
+ continue;
+ }
+ $pieces = array_map($callback, $matches[0]);
+ $part[$pieces[0]] = isset($pieces[1]) ? $pieces[1] : '';
+ }
+ if ($part) {
+ $params[] = $part;
+ }
+ }
+
+ return $params;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function hasExactHeader($header)
+ {
+ Version::warn(__METHOD__ . ' is deprecated');
+ return $this->header == $header;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function raw()
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use toArray()');
+ return $this->toArray();
+ }
+
+ /**
+ * Trim a header by removing excess spaces and wrapping quotes
+ *
+ * @param $str
+ *
+ * @return string
+ */
+ protected function trimHeader($str)
+ {
+ static $trimmed = "\"' \n\t";
+
+ return trim($str, $trimmed);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/CacheControl.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/CacheControl.php
new file mode 100644
index 0000000..77789e5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/CacheControl.php
@@ -0,0 +1,121 @@
+directives = null;
+ }
+
+ public function removeValue($searchValue)
+ {
+ parent::removeValue($searchValue);
+ $this->directives = null;
+ }
+
+ /**
+ * Check if a specific cache control directive exists
+ *
+ * @param string $param Directive to retrieve
+ *
+ * @return bool
+ */
+ public function hasDirective($param)
+ {
+ $directives = $this->getDirectives();
+
+ return isset($directives[$param]);
+ }
+
+ /**
+ * Get a specific cache control directive
+ *
+ * @param string $param Directive to retrieve
+ *
+ * @return string|bool|null
+ */
+ public function getDirective($param)
+ {
+ $directives = $this->getDirectives();
+
+ return isset($directives[$param]) ? $directives[$param] : null;
+ }
+
+ /**
+ * Add a cache control directive
+ *
+ * @param string $param Directive to add
+ * @param string $value Value to set
+ *
+ * @return self
+ */
+ public function addDirective($param, $value)
+ {
+ $directives = $this->getDirectives();
+ $directives[$param] = $value;
+ $this->updateFromDirectives($directives);
+
+ return $this;
+ }
+
+ /**
+ * Remove a cache control directive by name
+ *
+ * @param string $param Directive to remove
+ *
+ * @return self
+ */
+ public function removeDirective($param)
+ {
+ $directives = $this->getDirectives();
+ unset($directives[$param]);
+ $this->updateFromDirectives($directives);
+
+ return $this;
+ }
+
+ /**
+ * Get an associative array of cache control directives
+ *
+ * @return array
+ */
+ public function getDirectives()
+ {
+ if ($this->directives === null) {
+ $this->directives = array();
+ foreach ($this->parseParams() as $collection) {
+ foreach ($collection as $key => $value) {
+ $this->directives[$key] = $value === '' ? true : $value;
+ }
+ }
+ }
+
+ return $this->directives;
+ }
+
+ /**
+ * Updates the header value based on the parsed directives
+ *
+ * @param array $directives Array of cache control directives
+ */
+ protected function updateFromDirectives(array $directives)
+ {
+ $this->directives = $directives;
+ $this->values = array();
+
+ foreach ($directives as $key => $value) {
+ $this->values[] = $value === true ? $key : "{$key}={$value}";
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderCollection.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderCollection.php
new file mode 100644
index 0000000..8c7f6ae
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderCollection.php
@@ -0,0 +1,108 @@
+headers = $headers;
+ }
+
+ public function __clone()
+ {
+ foreach ($this->headers as &$header) {
+ $header = clone $header;
+ }
+ }
+
+ /**
+ * Clears the header collection
+ */
+ public function clear()
+ {
+ $this->headers = array();
+ }
+
+ /**
+ * Set a header on the collection
+ *
+ * @param HeaderInterface $header Header to add
+ *
+ * @return self
+ */
+ public function add(HeaderInterface $header)
+ {
+ $this->headers[strtolower($header->getName())] = $header;
+
+ return $this;
+ }
+
+ /**
+ * Get an array of header objects
+ *
+ * @return array
+ */
+ public function getAll()
+ {
+ return $this->headers;
+ }
+
+ /**
+ * Alias of offsetGet
+ */
+ public function get($key)
+ {
+ return $this->offsetGet($key);
+ }
+
+ public function count()
+ {
+ return count($this->headers);
+ }
+
+ public function offsetExists($offset)
+ {
+ return isset($this->headers[strtolower($offset)]);
+ }
+
+ public function offsetGet($offset)
+ {
+ $l = strtolower($offset);
+
+ return isset($this->headers[$l]) ? $this->headers[$l] : null;
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ $this->add($value);
+ }
+
+ public function offsetUnset($offset)
+ {
+ unset($this->headers[strtolower($offset)]);
+ }
+
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->headers);
+ }
+
+ public function toArray()
+ {
+ $result = array();
+ foreach ($this->headers as $header) {
+ $result[$header->getName()] = $header->toArray();
+ }
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderFactory.php
new file mode 100644
index 0000000..0273be5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderFactory.php
@@ -0,0 +1,26 @@
+ 'Guzzle\Http\Message\Header\CacheControl',
+ 'link' => 'Guzzle\Http\Message\Header\Link',
+ );
+
+ public function createHeader($header, $value = null)
+ {
+ $lowercase = strtolower($header);
+
+ return isset($this->mapping[$lowercase])
+ ? new $this->mapping[$lowercase]($header, $value)
+ : new Header($header, $value);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderFactoryInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderFactoryInterface.php
new file mode 100644
index 0000000..9457cf6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header/HeaderFactoryInterface.php
@@ -0,0 +1,19 @@
+", "rel=\"{$rel}\"");
+
+ foreach ($params as $k => $v) {
+ $values[] = "{$k}=\"{$v}\"";
+ }
+
+ return $this->add(implode('; ', $values));
+ }
+
+ /**
+ * Check if a specific link exists for a given rel attribute
+ *
+ * @param string $rel rel value
+ *
+ * @return bool
+ */
+ public function hasLink($rel)
+ {
+ return $this->getLink($rel) !== null;
+ }
+
+ /**
+ * Get a specific link for a given rel attribute
+ *
+ * @param string $rel Rel value
+ *
+ * @return array|null
+ */
+ public function getLink($rel)
+ {
+ foreach ($this->getLinks() as $link) {
+ if (isset($link['rel']) && $link['rel'] == $rel) {
+ return $link;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Get an associative array of links
+ *
+ * For example:
+ * Link: ; rel=front; type="image/jpeg", ; rel=back; type="image/jpeg"
+ *
+ *
+ * var_export($response->getLinks());
+ * array(
+ * array(
+ * 'url' => 'http:/.../front.jpeg',
+ * 'rel' => 'back',
+ * 'type' => 'image/jpeg',
+ * )
+ * )
+ *
+ *
+ * @return array
+ */
+ public function getLinks()
+ {
+ $links = $this->parseParams();
+
+ foreach ($links as &$link) {
+ $key = key($link);
+ unset($link[$key]);
+ $link['url'] = trim($key, '<> ');
+ }
+
+ return $links;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/MessageInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/MessageInterface.php
new file mode 100644
index 0000000..62bcd43
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/MessageInterface.php
@@ -0,0 +1,102 @@
+fieldName = $fieldName;
+ $this->setFilename($filename);
+ $this->postname = $postname ? $postname : basename($filename);
+ $this->contentType = $contentType ?: $this->guessContentType();
+ }
+
+ public function setFieldName($name)
+ {
+ $this->fieldName = $name;
+
+ return $this;
+ }
+
+ public function getFieldName()
+ {
+ return $this->fieldName;
+ }
+
+ public function setFilename($filename)
+ {
+ // Remove leading @ symbol
+ if (strpos($filename, '@') === 0) {
+ $filename = substr($filename, 1);
+ }
+
+ if (!is_readable($filename)) {
+ throw new InvalidArgumentException("Unable to open {$filename} for reading");
+ }
+
+ $this->filename = $filename;
+
+ return $this;
+ }
+
+ public function setPostname($postname)
+ {
+ $this->postname = $postname;
+
+ return $this;
+ }
+
+ public function getFilename()
+ {
+ return $this->filename;
+ }
+
+ public function getPostname()
+ {
+ return $this->postname;
+ }
+
+ public function setContentType($type)
+ {
+ $this->contentType = $type;
+
+ return $this;
+ }
+
+ public function getContentType()
+ {
+ return $this->contentType;
+ }
+
+ public function getCurlValue()
+ {
+ // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax
+ // See: https://wiki.php.net/rfc/curl-file-upload
+ if (function_exists('curl_file_create')) {
+ return curl_file_create($this->filename, $this->contentType, $this->postname);
+ }
+
+ // Use the old style if using an older version of PHP
+ $value = "@{$this->filename};filename=" . $this->postname;
+ if ($this->contentType) {
+ $value .= ';type=' . $this->contentType;
+ }
+
+ return $value;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function getCurlString()
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use getCurlValue()');
+ return $this->getCurlValue();
+ }
+
+ /**
+ * Determine the Content-Type of the file
+ */
+ protected function guessContentType()
+ {
+ return Mimetypes::getInstance()->fromFilename($this->filename) ?: 'application/octet-stream';
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/PostFileInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/PostFileInterface.php
new file mode 100644
index 0000000..7f0779d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/PostFileInterface.php
@@ -0,0 +1,83 @@
+method = strtoupper($method);
+ $this->curlOptions = new Collection();
+ $this->setUrl($url);
+
+ if ($headers) {
+ // Special handling for multi-value headers
+ foreach ($headers as $key => $value) {
+ // Deal with collisions with Host and Authorization
+ if ($key == 'host' || $key == 'Host') {
+ $this->setHeader($key, $value);
+ } elseif ($value instanceof HeaderInterface) {
+ $this->addHeader($key, $value);
+ } else {
+ foreach ((array) $value as $v) {
+ $this->addHeader($key, $v);
+ }
+ }
+ }
+ }
+
+ $this->setState(self::STATE_NEW);
+ }
+
+ public function __clone()
+ {
+ if ($this->eventDispatcher) {
+ $this->eventDispatcher = clone $this->eventDispatcher;
+ }
+ $this->curlOptions = clone $this->curlOptions;
+ $this->params = clone $this->params;
+ $this->url = clone $this->url;
+ $this->response = $this->responseBody = null;
+ $this->headers = clone $this->headers;
+
+ $this->setState(RequestInterface::STATE_NEW);
+ $this->dispatch('request.clone', array('request' => $this));
+ }
+
+ /**
+ * Get the HTTP request as a string
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getRawHeaders() . "\r\n\r\n";
+ }
+
+ /**
+ * Default method that will throw exceptions if an unsuccessful response is received.
+ *
+ * @param Event $event Received
+ * @throws BadResponseException if the response is not successful
+ */
+ public static function onRequestError(Event $event)
+ {
+ $e = BadResponseException::factory($event['request'], $event['response']);
+ $event['request']->setState(self::STATE_ERROR, array('exception' => $e) + $event->toArray());
+ throw $e;
+ }
+
+ public function setClient(ClientInterface $client)
+ {
+ $this->client = $client;
+
+ return $this;
+ }
+
+ public function getClient()
+ {
+ return $this->client;
+ }
+
+ public function getRawHeaders()
+ {
+ $protocolVersion = $this->protocolVersion ?: '1.1';
+
+ return trim($this->method . ' ' . $this->getResource()) . ' '
+ . strtoupper(str_replace('https', 'http', $this->url->getScheme()))
+ . '/' . $protocolVersion . "\r\n" . implode("\r\n", $this->getHeaderLines());
+ }
+
+ public function setUrl($url)
+ {
+ if ($url instanceof Url) {
+ $this->url = $url;
+ } else {
+ $this->url = Url::factory($url);
+ }
+
+ // Update the port and host header
+ $this->setPort($this->url->getPort());
+
+ if ($this->url->getUsername() || $this->url->getPassword()) {
+ $this->setAuth($this->url->getUsername(), $this->url->getPassword());
+ // Remove the auth info from the URL
+ $this->url->setUsername(null);
+ $this->url->setPassword(null);
+ }
+
+ return $this;
+ }
+
+ public function send()
+ {
+ if (!$this->client) {
+ throw new RuntimeException('A client must be set on the request');
+ }
+
+ return $this->client->send($this);
+ }
+
+ public function getResponse()
+ {
+ return $this->response;
+ }
+
+ public function getQuery($asString = false)
+ {
+ return $asString
+ ? (string) $this->url->getQuery()
+ : $this->url->getQuery();
+ }
+
+ public function getMethod()
+ {
+ return $this->method;
+ }
+
+ public function getScheme()
+ {
+ return $this->url->getScheme();
+ }
+
+ public function setScheme($scheme)
+ {
+ $this->url->setScheme($scheme);
+
+ return $this;
+ }
+
+ public function getHost()
+ {
+ return $this->url->getHost();
+ }
+
+ public function setHost($host)
+ {
+ $this->url->setHost($host);
+ $this->setPort($this->url->getPort());
+
+ return $this;
+ }
+
+ public function getProtocolVersion()
+ {
+ return $this->protocolVersion;
+ }
+
+ public function setProtocolVersion($protocol)
+ {
+ $this->protocolVersion = $protocol;
+
+ return $this;
+ }
+
+ public function getPath()
+ {
+ return '/' . ltrim($this->url->getPath(), '/');
+ }
+
+ public function setPath($path)
+ {
+ $this->url->setPath($path);
+
+ return $this;
+ }
+
+ public function getPort()
+ {
+ return $this->url->getPort();
+ }
+
+ public function setPort($port)
+ {
+ $this->url->setPort($port);
+
+ // Include the port in the Host header if it is not the default port for the scheme of the URL
+ $scheme = $this->url->getScheme();
+ if ($port && (($scheme == 'http' && $port != 80) || ($scheme == 'https' && $port != 443))) {
+ $this->headers['host'] = $this->headerFactory->createHeader('Host', $this->url->getHost() . ':' . $port);
+ } else {
+ $this->headers['host'] = $this->headerFactory->createHeader('Host', $this->url->getHost());
+ }
+
+ return $this;
+ }
+
+ public function getUsername()
+ {
+ return $this->username;
+ }
+
+ public function getPassword()
+ {
+ return $this->password;
+ }
+
+ public function setAuth($user, $password = '', $scheme = CURLAUTH_BASIC)
+ {
+ static $authMap = array(
+ 'basic' => CURLAUTH_BASIC,
+ 'digest' => CURLAUTH_DIGEST,
+ 'ntlm' => CURLAUTH_NTLM,
+ 'any' => CURLAUTH_ANY
+ );
+
+ // If we got false or null, disable authentication
+ if (!$user) {
+ $this->password = $this->username = null;
+ $this->removeHeader('Authorization');
+ $this->getCurlOptions()->remove(CURLOPT_HTTPAUTH);
+ return $this;
+ }
+
+ if (!is_numeric($scheme)) {
+ $scheme = strtolower($scheme);
+ if (!isset($authMap[$scheme])) {
+ throw new InvalidArgumentException($scheme . ' is not a valid authentication type');
+ }
+ $scheme = $authMap[$scheme];
+ }
+
+ $this->username = $user;
+ $this->password = $password;
+
+ // Bypass CURL when using basic auth to promote connection reuse
+ if ($scheme == CURLAUTH_BASIC) {
+ $this->getCurlOptions()->remove(CURLOPT_HTTPAUTH);
+ $this->setHeader('Authorization', 'Basic ' . base64_encode($this->username . ':' . $this->password));
+ } else {
+ $this->getCurlOptions()
+ ->set(CURLOPT_HTTPAUTH, $scheme)
+ ->set(CURLOPT_USERPWD, $this->username . ':' . $this->password);
+ }
+
+ return $this;
+ }
+
+ public function getResource()
+ {
+ $resource = $this->getPath();
+ if ($query = (string) $this->url->getQuery()) {
+ $resource .= '?' . $query;
+ }
+
+ return $resource;
+ }
+
+ public function getUrl($asObject = false)
+ {
+ return $asObject ? clone $this->url : (string) $this->url;
+ }
+
+ public function getState()
+ {
+ return $this->state;
+ }
+
+ public function setState($state, array $context = array())
+ {
+ $oldState = $this->state;
+ $this->state = $state;
+
+ switch ($state) {
+ case self::STATE_NEW:
+ $this->response = null;
+ break;
+ case self::STATE_TRANSFER:
+ if ($oldState !== $state) {
+ // Fix Content-Length and Transfer-Encoding collisions
+ if ($this->hasHeader('Transfer-Encoding') && $this->hasHeader('Content-Length')) {
+ $this->removeHeader('Transfer-Encoding');
+ }
+ $this->dispatch('request.before_send', array('request' => $this));
+ }
+ break;
+ case self::STATE_COMPLETE:
+ if ($oldState !== $state) {
+ $this->processResponse($context);
+ $this->responseBody = null;
+ }
+ break;
+ case self::STATE_ERROR:
+ if (isset($context['exception'])) {
+ $this->dispatch('request.exception', array(
+ 'request' => $this,
+ 'response' => isset($context['response']) ? $context['response'] : $this->response,
+ 'exception' => isset($context['exception']) ? $context['exception'] : null
+ ));
+ }
+ }
+
+ return $this->state;
+ }
+
+ public function getCurlOptions()
+ {
+ return $this->curlOptions;
+ }
+
+ public function startResponse(Response $response)
+ {
+ $this->state = self::STATE_TRANSFER;
+ $response->setEffectiveUrl((string) $this->getUrl());
+ $this->response = $response;
+
+ return $this;
+ }
+
+ public function setResponse(Response $response, $queued = false)
+ {
+ $response->setEffectiveUrl((string) $this->url);
+
+ if ($queued) {
+ $ed = $this->getEventDispatcher();
+ $ed->addListener('request.before_send', $f = function ($e) use ($response, &$f, $ed) {
+ $e['request']->setResponse($response);
+ $ed->removeListener('request.before_send', $f);
+ }, -9999);
+ } else {
+ $this->response = $response;
+ // If a specific response body is specified, then use it instead of the response's body
+ if ($this->responseBody && !$this->responseBody->getCustomData('default') && !$response->isRedirect()) {
+ $this->getResponseBody()->write((string) $this->response->getBody());
+ } else {
+ $this->responseBody = $this->response->getBody();
+ }
+ $this->setState(self::STATE_COMPLETE);
+ }
+
+ return $this;
+ }
+
+ public function setResponseBody($body)
+ {
+ // Attempt to open a file for writing if a string was passed
+ if (is_string($body)) {
+ // @codeCoverageIgnoreStart
+ if (!($body = fopen($body, 'w+'))) {
+ throw new InvalidArgumentException('Could not open ' . $body . ' for writing');
+ }
+ // @codeCoverageIgnoreEnd
+ }
+
+ $this->responseBody = EntityBody::factory($body);
+
+ return $this;
+ }
+
+ public function getResponseBody()
+ {
+ if ($this->responseBody === null) {
+ $this->responseBody = EntityBody::factory()->setCustomData('default', true);
+ }
+
+ return $this->responseBody;
+ }
+
+ /**
+ * Determine if the response body is repeatable (readable + seekable)
+ *
+ * @return bool
+ * @deprecated Use getResponseBody()->isSeekable()
+ * @codeCoverageIgnore
+ */
+ public function isResponseBodyRepeatable()
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use $request->getResponseBody()->isRepeatable()');
+ return !$this->responseBody ? true : $this->responseBody->isRepeatable();
+ }
+
+ public function getCookies()
+ {
+ if ($cookie = $this->getHeader('Cookie')) {
+ $data = ParserRegistry::getInstance()->getParser('cookie')->parseCookie($cookie);
+ return $data['cookies'];
+ }
+
+ return array();
+ }
+
+ public function getCookie($name)
+ {
+ $cookies = $this->getCookies();
+
+ return isset($cookies[$name]) ? $cookies[$name] : null;
+ }
+
+ public function addCookie($name, $value)
+ {
+ if (!$this->hasHeader('Cookie')) {
+ $this->setHeader('Cookie', "{$name}={$value}");
+ } else {
+ $this->getHeader('Cookie')->add("{$name}={$value}");
+ }
+
+ // Always use semicolons to separate multiple cookie headers
+ $this->getHeader('Cookie')->setGlue(';');
+
+ return $this;
+ }
+
+ public function removeCookie($name)
+ {
+ if ($cookie = $this->getHeader('Cookie')) {
+ foreach ($cookie as $cookieValue) {
+ if (strpos($cookieValue, $name . '=') === 0) {
+ $cookie->removeValue($cookieValue);
+ }
+ }
+ }
+
+ return $this;
+ }
+
+ public function setEventDispatcher(EventDispatcherInterface $eventDispatcher)
+ {
+ $this->eventDispatcher = $eventDispatcher;
+ $this->eventDispatcher->addListener('request.error', array(__CLASS__, 'onRequestError'), -255);
+
+ return $this;
+ }
+
+ public function getEventDispatcher()
+ {
+ if (!$this->eventDispatcher) {
+ $this->setEventDispatcher(new EventDispatcher());
+ }
+
+ return $this->eventDispatcher;
+ }
+
+ public function dispatch($eventName, array $context = array())
+ {
+ $context['request'] = $this;
+
+ return $this->getEventDispatcher()->dispatch($eventName, new Event($context));
+ }
+
+ public function addSubscriber(EventSubscriberInterface $subscriber)
+ {
+ $this->getEventDispatcher()->addSubscriber($subscriber);
+
+ return $this;
+ }
+
+ /**
+ * Get an array containing the request and response for event notifications
+ *
+ * @return array
+ */
+ protected function getEventArray()
+ {
+ return array(
+ 'request' => $this,
+ 'response' => $this->response
+ );
+ }
+
+ /**
+ * Process a received response
+ *
+ * @param array $context Contextual information
+ * @throws RequestException|BadResponseException on unsuccessful responses
+ */
+ protected function processResponse(array $context = array())
+ {
+ if (!$this->response) {
+ // If no response, then processResponse shouldn't have been called
+ $e = new RequestException('Error completing request');
+ $e->setRequest($this);
+ throw $e;
+ }
+
+ $this->state = self::STATE_COMPLETE;
+
+ // A request was sent, but we don't know if we'll send more or if the final response will be successful
+ $this->dispatch('request.sent', $this->getEventArray() + $context);
+
+ // Some response processors will remove the response or reset the state (example: ExponentialBackoffPlugin)
+ if ($this->state == RequestInterface::STATE_COMPLETE) {
+
+ // The request completed, so the HTTP transaction is complete
+ $this->dispatch('request.complete', $this->getEventArray());
+
+ // If the response is bad, allow listeners to modify it or throw exceptions. You can change the response by
+ // modifying the Event object in your listeners or calling setResponse() on the request
+ if ($this->response->isError()) {
+ $event = new Event($this->getEventArray());
+ $this->getEventDispatcher()->dispatch('request.error', $event);
+ // Allow events of request.error to quietly change the response
+ if ($event['response'] !== $this->response) {
+ $this->response = $event['response'];
+ }
+ }
+
+ // If a successful response was received, dispatch an event
+ if ($this->response->isSuccessful()) {
+ $this->dispatch('request.success', $this->getEventArray());
+ }
+ }
+ }
+
+ /**
+ * @deprecated Use Guzzle\Plugin\Cache\DefaultCanCacheStrategy
+ * @codeCoverageIgnore
+ */
+ public function canCache()
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use Guzzle\Plugin\Cache\DefaultCanCacheStrategy.');
+ if (class_exists('Guzzle\Plugin\Cache\DefaultCanCacheStrategy')) {
+ $canCache = new \Guzzle\Plugin\Cache\DefaultCanCacheStrategy();
+ return $canCache->canCacheRequest($this);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * @deprecated Use the history plugin (not emitting a warning as this is built-into the RedirectPlugin for now)
+ * @codeCoverageIgnore
+ */
+ public function setIsRedirect($isRedirect)
+ {
+ $this->isRedirect = $isRedirect;
+
+ return $this;
+ }
+
+ /**
+ * @deprecated Use the history plugin
+ * @codeCoverageIgnore
+ */
+ public function isRedirect()
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use the HistoryPlugin to track this.');
+ return $this->isRedirect;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/RequestFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/RequestFactory.php
new file mode 100644
index 0000000..ba00a76
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/RequestFactory.php
@@ -0,0 +1,359 @@
+methods = array_flip(get_class_methods(__CLASS__));
+ }
+
+ public function fromMessage($message)
+ {
+ $parsed = ParserRegistry::getInstance()->getParser('message')->parseRequest($message);
+
+ if (!$parsed) {
+ return false;
+ }
+
+ $request = $this->fromParts($parsed['method'], $parsed['request_url'],
+ $parsed['headers'], $parsed['body'], $parsed['protocol'],
+ $parsed['version']);
+
+ // EntityEnclosingRequest adds an "Expect: 100-Continue" header when using a raw request body for PUT or POST
+ // requests. This factory method should accurately reflect the message, so here we are removing the Expect
+ // header if one was not supplied in the message.
+ if (!isset($parsed['headers']['Expect']) && !isset($parsed['headers']['expect'])) {
+ $request->removeHeader('Expect');
+ }
+
+ return $request;
+ }
+
+ public function fromParts(
+ $method,
+ array $urlParts,
+ $headers = null,
+ $body = null,
+ $protocol = 'HTTP',
+ $protocolVersion = '1.1'
+ ) {
+ return $this->create($method, Url::buildUrl($urlParts), $headers, $body)
+ ->setProtocolVersion($protocolVersion);
+ }
+
+ public function create($method, $url, $headers = null, $body = null, array $options = array())
+ {
+ $method = strtoupper($method);
+
+ if ($method == 'GET' || $method == 'HEAD' || $method == 'TRACE') {
+ // Handle non-entity-enclosing request methods
+ $request = new $this->requestClass($method, $url, $headers);
+ if ($body) {
+ // The body is where the response body will be stored
+ $type = gettype($body);
+ if ($type == 'string' || $type == 'resource' || $type == 'object') {
+ $request->setResponseBody($body);
+ }
+ }
+ } else {
+ // Create an entity enclosing request by default
+ $request = new $this->entityEnclosingRequestClass($method, $url, $headers);
+ if ($body || $body === '0') {
+ // Add POST fields and files to an entity enclosing request if an array is used
+ if (is_array($body) || $body instanceof Collection) {
+ // Normalize PHP style cURL uploads with a leading '@' symbol
+ foreach ($body as $key => $value) {
+ if (is_string($value) && substr($value, 0, 1) == '@') {
+ $request->addPostFile($key, $value);
+ unset($body[$key]);
+ }
+ }
+ // Add the fields if they are still present and not all files
+ $request->addPostFields($body);
+ } else {
+ // Add a raw entity body body to the request
+ $request->setBody($body, (string) $request->getHeader('Content-Type'));
+ if ((string) $request->getHeader('Transfer-Encoding') == 'chunked') {
+ $request->removeHeader('Content-Length');
+ }
+ }
+ }
+ }
+
+ if ($options) {
+ $this->applyOptions($request, $options);
+ }
+
+ return $request;
+ }
+
+ /**
+ * Clone a request while changing the method. Emulates the behavior of
+ * {@see Guzzle\Http\Message\Request::clone}, but can change the HTTP method.
+ *
+ * @param RequestInterface $request Request to clone
+ * @param string $method Method to set
+ *
+ * @return RequestInterface
+ */
+ public function cloneRequestWithMethod(RequestInterface $request, $method)
+ {
+ // Create the request with the same client if possible
+ if ($request->getClient()) {
+ $cloned = $request->getClient()->createRequest($method, $request->getUrl(), $request->getHeaders());
+ } else {
+ $cloned = $this->create($method, $request->getUrl(), $request->getHeaders());
+ }
+
+ $cloned->getCurlOptions()->replace($request->getCurlOptions()->toArray());
+ $cloned->setEventDispatcher(clone $request->getEventDispatcher());
+ // Ensure that that the Content-Length header is not copied if changing to GET or HEAD
+ if (!($cloned instanceof EntityEnclosingRequestInterface)) {
+ $cloned->removeHeader('Content-Length');
+ } elseif ($request instanceof EntityEnclosingRequestInterface) {
+ $cloned->setBody($request->getBody());
+ }
+ $cloned->getParams()->replace($request->getParams()->toArray());
+ $cloned->dispatch('request.clone', array('request' => $cloned));
+
+ return $cloned;
+ }
+
+ public function applyOptions(RequestInterface $request, array $options = array(), $flags = self::OPTIONS_NONE)
+ {
+ // Iterate over each key value pair and attempt to apply a config using function visitors
+ foreach ($options as $key => $value) {
+ $method = "visit_{$key}";
+ if (isset($this->methods[$method])) {
+ $this->{$method}($request, $value, $flags);
+ }
+ }
+ }
+
+ protected function visit_headers(RequestInterface $request, $value, $flags)
+ {
+ if (!is_array($value)) {
+ throw new InvalidArgumentException('headers value must be an array');
+ }
+
+ if ($flags & self::OPTIONS_AS_DEFAULTS) {
+ // Merge headers in but do not overwrite existing values
+ foreach ($value as $key => $header) {
+ if (!$request->hasHeader($key)) {
+ $request->setHeader($key, $header);
+ }
+ }
+ } else {
+ $request->addHeaders($value);
+ }
+ }
+
+ protected function visit_body(RequestInterface $request, $value, $flags)
+ {
+ if ($request instanceof EntityEnclosingRequestInterface) {
+ $request->setBody($value);
+ } else {
+ throw new InvalidArgumentException('Attempting to set a body on a non-entity-enclosing request');
+ }
+ }
+
+ protected function visit_allow_redirects(RequestInterface $request, $value, $flags)
+ {
+ if ($value === false) {
+ $request->getParams()->set(RedirectPlugin::DISABLE, true);
+ }
+ }
+
+ protected function visit_auth(RequestInterface $request, $value, $flags)
+ {
+ if (!is_array($value)) {
+ throw new InvalidArgumentException('auth value must be an array');
+ }
+
+ $request->setAuth($value[0], isset($value[1]) ? $value[1] : null, isset($value[2]) ? $value[2] : 'basic');
+ }
+
+ protected function visit_query(RequestInterface $request, $value, $flags)
+ {
+ if (!is_array($value)) {
+ throw new InvalidArgumentException('query value must be an array');
+ }
+
+ if ($flags & self::OPTIONS_AS_DEFAULTS) {
+ // Merge query string values in but do not overwrite existing values
+ $query = $request->getQuery();
+ $query->overwriteWith(array_diff_key($value, $query->toArray()));
+ } else {
+ $request->getQuery()->overwriteWith($value);
+ }
+ }
+
+ protected function visit_cookies(RequestInterface $request, $value, $flags)
+ {
+ if (!is_array($value)) {
+ throw new InvalidArgumentException('cookies value must be an array');
+ }
+
+ foreach ($value as $name => $v) {
+ $request->addCookie($name, $v);
+ }
+ }
+
+ protected function visit_events(RequestInterface $request, $value, $flags)
+ {
+ if (!is_array($value)) {
+ throw new InvalidArgumentException('events value must be an array');
+ }
+
+ foreach ($value as $name => $method) {
+ if (is_array($method)) {
+ $request->getEventDispatcher()->addListener($name, $method[0], $method[1]);
+ } else {
+ $request->getEventDispatcher()->addListener($name, $method);
+ }
+ }
+ }
+
+ protected function visit_plugins(RequestInterface $request, $value, $flags)
+ {
+ if (!is_array($value)) {
+ throw new InvalidArgumentException('plugins value must be an array');
+ }
+
+ foreach ($value as $plugin) {
+ $request->addSubscriber($plugin);
+ }
+ }
+
+ protected function visit_exceptions(RequestInterface $request, $value, $flags)
+ {
+ if ($value === false || $value === 0) {
+ $dispatcher = $request->getEventDispatcher();
+ foreach ($dispatcher->getListeners('request.error') as $listener) {
+ if (is_array($listener) && $listener[0] == 'Guzzle\Http\Message\Request' && $listener[1] = 'onRequestError') {
+ $dispatcher->removeListener('request.error', $listener);
+ break;
+ }
+ }
+ }
+ }
+
+ protected function visit_save_to(RequestInterface $request, $value, $flags)
+ {
+ $request->setResponseBody($value);
+ }
+
+ protected function visit_params(RequestInterface $request, $value, $flags)
+ {
+ if (!is_array($value)) {
+ throw new InvalidArgumentException('params value must be an array');
+ }
+
+ $request->getParams()->overwriteWith($value);
+ }
+
+ protected function visit_timeout(RequestInterface $request, $value, $flags)
+ {
+ if (defined('CURLOPT_TIMEOUT_MS')) {
+ $request->getCurlOptions()->set(CURLOPT_TIMEOUT_MS, $value * 1000);
+ } else {
+ $request->getCurlOptions()->set(CURLOPT_TIMEOUT, $value);
+ }
+ }
+
+ protected function visit_connect_timeout(RequestInterface $request, $value, $flags)
+ {
+ if (defined('CURLOPT_CONNECTTIMEOUT_MS')) {
+ $request->getCurlOptions()->set(CURLOPT_CONNECTTIMEOUT_MS, $value * 1000);
+ } else {
+ $request->getCurlOptions()->set(CURLOPT_CONNECTTIMEOUT, $value);
+ }
+ }
+
+ protected function visit_debug(RequestInterface $request, $value, $flags)
+ {
+ if ($value) {
+ $request->getCurlOptions()->set(CURLOPT_VERBOSE, true);
+ }
+ }
+
+ protected function visit_verify(RequestInterface $request, $value, $flags)
+ {
+ $curl = $request->getCurlOptions();
+ if ($value === true || is_string($value)) {
+ $curl[CURLOPT_SSL_VERIFYHOST] = 2;
+ $curl[CURLOPT_SSL_VERIFYPEER] = true;
+ if ($value !== true) {
+ $curl[CURLOPT_CAINFO] = $value;
+ }
+ } elseif ($value === false) {
+ unset($curl[CURLOPT_CAINFO]);
+ $curl[CURLOPT_SSL_VERIFYHOST] = 0;
+ $curl[CURLOPT_SSL_VERIFYPEER] = false;
+ }
+ }
+
+ protected function visit_proxy(RequestInterface $request, $value, $flags)
+ {
+ $request->getCurlOptions()->set(CURLOPT_PROXY, $value, $flags);
+ }
+
+ protected function visit_cert(RequestInterface $request, $value, $flags)
+ {
+ if (is_array($value)) {
+ $request->getCurlOptions()->set(CURLOPT_SSLCERT, $value[0]);
+ $request->getCurlOptions()->set(CURLOPT_SSLCERTPASSWD, $value[1]);
+ } else {
+ $request->getCurlOptions()->set(CURLOPT_SSLCERT, $value);
+ }
+ }
+
+ protected function visit_ssl_key(RequestInterface $request, $value, $flags)
+ {
+ if (is_array($value)) {
+ $request->getCurlOptions()->set(CURLOPT_SSLKEY, $value[0]);
+ $request->getCurlOptions()->set(CURLOPT_SSLKEYPASSWD, $value[1]);
+ } else {
+ $request->getCurlOptions()->set(CURLOPT_SSLKEY, $value);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/RequestFactoryInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/RequestFactoryInterface.php
new file mode 100644
index 0000000..6088f10
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Message/RequestFactoryInterface.php
@@ -0,0 +1,105 @@
+ 'Continue',
+ 101 => 'Switching Protocols',
+ 102 => 'Processing',
+ 200 => 'OK',
+ 201 => 'Created',
+ 202 => 'Accepted',
+ 203 => 'Non-Authoritative Information',
+ 204 => 'No Content',
+ 205 => 'Reset Content',
+ 206 => 'Partial Content',
+ 207 => 'Multi-Status',
+ 208 => 'Already Reported',
+ 226 => 'IM Used',
+ 300 => 'Multiple Choices',
+ 301 => 'Moved Permanently',
+ 302 => 'Found',
+ 303 => 'See Other',
+ 304 => 'Not Modified',
+ 305 => 'Use Proxy',
+ 307 => 'Temporary Redirect',
+ 308 => 'Permanent Redirect',
+ 400 => 'Bad Request',
+ 401 => 'Unauthorized',
+ 402 => 'Payment Required',
+ 403 => 'Forbidden',
+ 404 => 'Not Found',
+ 405 => 'Method Not Allowed',
+ 406 => 'Not Acceptable',
+ 407 => 'Proxy Authentication Required',
+ 408 => 'Request Timeout',
+ 409 => 'Conflict',
+ 410 => 'Gone',
+ 411 => 'Length Required',
+ 412 => 'Precondition Failed',
+ 413 => 'Request Entity Too Large',
+ 414 => 'Request-URI Too Long',
+ 415 => 'Unsupported Media Type',
+ 416 => 'Requested Range Not Satisfiable',
+ 417 => 'Expectation Failed',
+ 422 => 'Unprocessable Entity',
+ 423 => 'Locked',
+ 424 => 'Failed Dependency',
+ 425 => 'Reserved for WebDAV advanced collections expired proposal',
+ 426 => 'Upgrade required',
+ 428 => 'Precondition Required',
+ 429 => 'Too Many Requests',
+ 431 => 'Request Header Fields Too Large',
+ 500 => 'Internal Server Error',
+ 501 => 'Not Implemented',
+ 502 => 'Bad Gateway',
+ 503 => 'Service Unavailable',
+ 504 => 'Gateway Timeout',
+ 505 => 'HTTP Version Not Supported',
+ 506 => 'Variant Also Negotiates (Experimental)',
+ 507 => 'Insufficient Storage',
+ 508 => 'Loop Detected',
+ 510 => 'Not Extended',
+ 511 => 'Network Authentication Required',
+ );
+
+ /** @var EntityBodyInterface The response body */
+ protected $body;
+
+ /** @var string The reason phrase of the response (human readable code) */
+ protected $reasonPhrase;
+
+ /** @var string The status code of the response */
+ protected $statusCode;
+
+ /** @var array Information about the request */
+ protected $info = array();
+
+ /** @var string The effective URL that returned this response */
+ protected $effectiveUrl;
+
+ /** @var array Cacheable response codes (see RFC 2616:13.4) */
+ protected static $cacheResponseCodes = array(200, 203, 206, 300, 301, 410);
+
+ /**
+ * Create a new Response based on a raw response message
+ *
+ * @param string $message Response message
+ *
+ * @return self|bool Returns false on error
+ */
+ public static function fromMessage($message)
+ {
+ $data = ParserRegistry::getInstance()->getParser('message')->parseResponse($message);
+ if (!$data) {
+ return false;
+ }
+
+ $response = new static($data['code'], $data['headers'], $data['body']);
+ $response->setProtocol($data['protocol'], $data['version'])
+ ->setStatus($data['code'], $data['reason_phrase']);
+
+ // Set the appropriate Content-Length if the one set is inaccurate (e.g. setting to X)
+ $contentLength = (string) $response->getHeader('Content-Length');
+ $actualLength = strlen($data['body']);
+ if (strlen($data['body']) > 0 && $contentLength != $actualLength) {
+ $response->setHeader('Content-Length', $actualLength);
+ }
+
+ return $response;
+ }
+
+ /**
+ * Construct the response
+ *
+ * @param string $statusCode The response status code (e.g. 200, 404, etc)
+ * @param ToArrayInterface|array $headers The response headers
+ * @param string|resource|EntityBodyInterface $body The body of the response
+ *
+ * @throws BadResponseException if an invalid response code is given
+ */
+ public function __construct($statusCode, $headers = null, $body = null)
+ {
+ parent::__construct();
+ $this->setStatus($statusCode);
+ $this->body = EntityBody::factory($body !== null ? $body : '');
+
+ if ($headers) {
+ if (is_array($headers)) {
+ $this->setHeaders($headers);
+ } elseif ($headers instanceof ToArrayInterface) {
+ $this->setHeaders($headers->toArray());
+ } else {
+ throw new BadResponseException('Invalid headers argument received');
+ }
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getMessage();
+ }
+
+ public function serialize()
+ {
+ return json_encode(array(
+ 'status' => $this->statusCode,
+ 'body' => (string) $this->body,
+ 'headers' => $this->headers->toArray()
+ ));
+ }
+
+ public function unserialize($serialize)
+ {
+ $data = json_decode($serialize, true);
+ $this->__construct($data['status'], $data['headers'], $data['body']);
+ }
+
+ /**
+ * Get the response entity body
+ *
+ * @param bool $asString Set to TRUE to return a string of the body rather than a full body object
+ *
+ * @return EntityBodyInterface|string
+ */
+ public function getBody($asString = false)
+ {
+ return $asString ? (string) $this->body : $this->body;
+ }
+
+ /**
+ * Set the response entity body
+ *
+ * @param EntityBodyInterface|string $body Body to set
+ *
+ * @return self
+ */
+ public function setBody($body)
+ {
+ $this->body = EntityBody::factory($body);
+
+ return $this;
+ }
+
+ /**
+ * Set the protocol and protocol version of the response
+ *
+ * @param string $protocol Response protocol
+ * @param string $version Protocol version
+ *
+ * @return self
+ */
+ public function setProtocol($protocol, $version)
+ {
+ $this->protocol = $protocol;
+ $this->protocolVersion = $version;
+
+ return $this;
+ }
+
+ /**
+ * Get the protocol used for the response (e.g. HTTP)
+ *
+ * @return string
+ */
+ public function getProtocol()
+ {
+ return $this->protocol;
+ }
+
+ /**
+ * Get the HTTP protocol version
+ *
+ * @return string
+ */
+ public function getProtocolVersion()
+ {
+ return $this->protocolVersion;
+ }
+
+ /**
+ * Get a cURL transfer information
+ *
+ * @param string $key A single statistic to check
+ *
+ * @return array|string|null Returns all stats if no key is set, a single stat if a key is set, or null if a key
+ * is set and not found
+ * @link http://www.php.net/manual/en/function.curl-getinfo.php
+ */
+ public function getInfo($key = null)
+ {
+ if ($key === null) {
+ return $this->info;
+ } elseif (array_key_exists($key, $this->info)) {
+ return $this->info[$key];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the transfer information
+ *
+ * @param array $info Array of cURL transfer stats
+ *
+ * @return self
+ */
+ public function setInfo(array $info)
+ {
+ $this->info = $info;
+
+ return $this;
+ }
+
+ /**
+ * Set the response status
+ *
+ * @param int $statusCode Response status code to set
+ * @param string $reasonPhrase Response reason phrase
+ *
+ * @return self
+ * @throws BadResponseException when an invalid response code is received
+ */
+ public function setStatus($statusCode, $reasonPhrase = '')
+ {
+ $this->statusCode = (int) $statusCode;
+
+ if (!$reasonPhrase && isset(self::$statusTexts[$this->statusCode])) {
+ $this->reasonPhrase = self::$statusTexts[$this->statusCode];
+ } else {
+ $this->reasonPhrase = $reasonPhrase;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the response status code
+ *
+ * @return integer
+ */
+ public function getStatusCode()
+ {
+ return $this->statusCode;
+ }
+
+ /**
+ * Get the entire response as a string
+ *
+ * @return string
+ */
+ public function getMessage()
+ {
+ $message = $this->getRawHeaders();
+
+ // Only include the body in the message if the size is < 2MB
+ $size = $this->body->getSize();
+ if ($size < 2097152) {
+ $message .= (string) $this->body;
+ }
+
+ return $message;
+ }
+
+ /**
+ * Get the the raw message headers as a string
+ *
+ * @return string
+ */
+ public function getRawHeaders()
+ {
+ $headers = 'HTTP/1.1 ' . $this->statusCode . ' ' . $this->reasonPhrase . "\r\n";
+ $lines = $this->getHeaderLines();
+ if (!empty($lines)) {
+ $headers .= implode("\r\n", $lines) . "\r\n";
+ }
+
+ return $headers . "\r\n";
+ }
+
+ /**
+ * Get the response reason phrase- a human readable version of the numeric
+ * status code
+ *
+ * @return string
+ */
+ public function getReasonPhrase()
+ {
+ return $this->reasonPhrase;
+ }
+
+ /**
+ * Get the Accept-Ranges HTTP header
+ *
+ * @return string Returns what partial content range types this server supports.
+ */
+ public function getAcceptRanges()
+ {
+ return (string) $this->getHeader('Accept-Ranges');
+ }
+
+ /**
+ * Calculate the age of the response
+ *
+ * @return integer
+ */
+ public function calculateAge()
+ {
+ $age = $this->getHeader('Age');
+
+ if ($age === null && $this->getDate()) {
+ $age = time() - strtotime($this->getDate());
+ }
+
+ return $age === null ? null : (int) (string) $age;
+ }
+
+ /**
+ * Get the Age HTTP header
+ *
+ * @return integer|null Returns the age the object has been in a proxy cache in seconds.
+ */
+ public function getAge()
+ {
+ return (string) $this->getHeader('Age');
+ }
+
+ /**
+ * Get the Allow HTTP header
+ *
+ * @return string|null Returns valid actions for a specified resource. To be used for a 405 Method not allowed.
+ */
+ public function getAllow()
+ {
+ return (string) $this->getHeader('Allow');
+ }
+
+ /**
+ * Check if an HTTP method is allowed by checking the Allow response header
+ *
+ * @param string $method Method to check
+ *
+ * @return bool
+ */
+ public function isMethodAllowed($method)
+ {
+ $allow = $this->getHeader('Allow');
+ if ($allow) {
+ foreach (explode(',', $allow) as $allowable) {
+ if (!strcasecmp(trim($allowable), $method)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the Cache-Control HTTP header
+ *
+ * @return string
+ */
+ public function getCacheControl()
+ {
+ return (string) $this->getHeader('Cache-Control');
+ }
+
+ /**
+ * Get the Connection HTTP header
+ *
+ * @return string
+ */
+ public function getConnection()
+ {
+ return (string) $this->getHeader('Connection');
+ }
+
+ /**
+ * Get the Content-Encoding HTTP header
+ *
+ * @return string|null
+ */
+ public function getContentEncoding()
+ {
+ return (string) $this->getHeader('Content-Encoding');
+ }
+
+ /**
+ * Get the Content-Language HTTP header
+ *
+ * @return string|null Returns the language the content is in.
+ */
+ public function getContentLanguage()
+ {
+ return (string) $this->getHeader('Content-Language');
+ }
+
+ /**
+ * Get the Content-Length HTTP header
+ *
+ * @return integer Returns the length of the response body in bytes
+ */
+ public function getContentLength()
+ {
+ return (int) (string) $this->getHeader('Content-Length');
+ }
+
+ /**
+ * Get the Content-Location HTTP header
+ *
+ * @return string|null Returns an alternate location for the returned data (e.g /index.htm)
+ */
+ public function getContentLocation()
+ {
+ return (string) $this->getHeader('Content-Location');
+ }
+
+ /**
+ * Get the Content-Disposition HTTP header
+ *
+ * @return string|null Returns the Content-Disposition header
+ */
+ public function getContentDisposition()
+ {
+ return (string) $this->getHeader('Content-Disposition');
+ }
+
+ /**
+ * Get the Content-MD5 HTTP header
+ *
+ * @return string|null Returns a Base64-encoded binary MD5 sum of the content of the response.
+ */
+ public function getContentMd5()
+ {
+ return (string) $this->getHeader('Content-MD5');
+ }
+
+ /**
+ * Get the Content-Range HTTP header
+ *
+ * @return string Returns where in a full body message this partial message belongs (e.g. bytes 21010-47021/47022).
+ */
+ public function getContentRange()
+ {
+ return (string) $this->getHeader('Content-Range');
+ }
+
+ /**
+ * Get the Content-Type HTTP header
+ *
+ * @return string Returns the mime type of this content.
+ */
+ public function getContentType()
+ {
+ return (string) $this->getHeader('Content-Type');
+ }
+
+ /**
+ * Checks if the Content-Type is of a certain type. This is useful if the
+ * Content-Type header contains charset information and you need to know if
+ * the Content-Type matches a particular type.
+ *
+ * @param string $type Content type to check against
+ *
+ * @return bool
+ */
+ public function isContentType($type)
+ {
+ return stripos($this->getHeader('Content-Type'), $type) !== false;
+ }
+
+ /**
+ * Get the Date HTTP header
+ *
+ * @return string|null Returns the date and time that the message was sent.
+ */
+ public function getDate()
+ {
+ return (string) $this->getHeader('Date');
+ }
+
+ /**
+ * Get the ETag HTTP header
+ *
+ * @return string|null Returns an identifier for a specific version of a resource, often a Message digest.
+ */
+ public function getEtag()
+ {
+ return (string) $this->getHeader('ETag');
+ }
+
+ /**
+ * Get the Expires HTTP header
+ *
+ * @return string|null Returns the date/time after which the response is considered stale.
+ */
+ public function getExpires()
+ {
+ return (string) $this->getHeader('Expires');
+ }
+
+ /**
+ * Get the Last-Modified HTTP header
+ *
+ * @return string|null Returns the last modified date for the requested object, in RFC 2822 format
+ * (e.g. Tue, 15 Nov 1994 12:45:26 GMT)
+ */
+ public function getLastModified()
+ {
+ return (string) $this->getHeader('Last-Modified');
+ }
+
+ /**
+ * Get the Location HTTP header
+ *
+ * @return string|null Used in redirection, or when a new resource has been created.
+ */
+ public function getLocation()
+ {
+ return (string) $this->getHeader('Location');
+ }
+
+ /**
+ * Get the Pragma HTTP header
+ *
+ * @return Header|null Returns the implementation-specific headers that may have various effects anywhere along
+ * the request-response chain.
+ */
+ public function getPragma()
+ {
+ return (string) $this->getHeader('Pragma');
+ }
+
+ /**
+ * Get the Proxy-Authenticate HTTP header
+ *
+ * @return string|null Authentication to access the proxy (e.g. Basic)
+ */
+ public function getProxyAuthenticate()
+ {
+ return (string) $this->getHeader('Proxy-Authenticate');
+ }
+
+ /**
+ * Get the Retry-After HTTP header
+ *
+ * @return int|null If an entity is temporarily unavailable, this instructs the client to try again after a
+ * specified period of time.
+ */
+ public function getRetryAfter()
+ {
+ return (string) $this->getHeader('Retry-After');
+ }
+
+ /**
+ * Get the Server HTTP header
+ *
+ * @return string|null A name for the server
+ */
+ public function getServer()
+ {
+ return (string) $this->getHeader('Server');
+ }
+
+ /**
+ * Get the Set-Cookie HTTP header
+ *
+ * @return string|null An HTTP cookie.
+ */
+ public function getSetCookie()
+ {
+ return (string) $this->getHeader('Set-Cookie');
+ }
+
+ /**
+ * Get the Trailer HTTP header
+ *
+ * @return string|null The Trailer general field value indicates that the given set of header fields is present in
+ * the trailer of a message encoded with chunked transfer-coding.
+ */
+ public function getTrailer()
+ {
+ return (string) $this->getHeader('Trailer');
+ }
+
+ /**
+ * Get the Transfer-Encoding HTTP header
+ *
+ * @return string|null The form of encoding used to safely transfer the entity to the user
+ */
+ public function getTransferEncoding()
+ {
+ return (string) $this->getHeader('Transfer-Encoding');
+ }
+
+ /**
+ * Get the Vary HTTP header
+ *
+ * @return string|null Tells downstream proxies how to match future request headers to decide whether the cached
+ * response can be used rather than requesting a fresh one from the origin server.
+ */
+ public function getVary()
+ {
+ return (string) $this->getHeader('Vary');
+ }
+
+ /**
+ * Get the Via HTTP header
+ *
+ * @return string|null Informs the client of proxies through which the response was sent.
+ */
+ public function getVia()
+ {
+ return (string) $this->getHeader('Via');
+ }
+
+ /**
+ * Get the Warning HTTP header
+ *
+ * @return string|null A general warning about possible problems with the entity body
+ */
+ public function getWarning()
+ {
+ return (string) $this->getHeader('Warning');
+ }
+
+ /**
+ * Get the WWW-Authenticate HTTP header
+ *
+ * @return string|null Indicates the authentication scheme that should be used to access the requested entity
+ */
+ public function getWwwAuthenticate()
+ {
+ return (string) $this->getHeader('WWW-Authenticate');
+ }
+
+ /**
+ * Checks if HTTP Status code is a Client Error (4xx)
+ *
+ * @return bool
+ */
+ public function isClientError()
+ {
+ return $this->statusCode >= 400 && $this->statusCode < 500;
+ }
+
+ /**
+ * Checks if HTTP Status code is Server OR Client Error (4xx or 5xx)
+ *
+ * @return boolean
+ */
+ public function isError()
+ {
+ return $this->isClientError() || $this->isServerError();
+ }
+
+ /**
+ * Checks if HTTP Status code is Information (1xx)
+ *
+ * @return bool
+ */
+ public function isInformational()
+ {
+ return $this->statusCode < 200;
+ }
+
+ /**
+ * Checks if HTTP Status code is a Redirect (3xx)
+ *
+ * @return bool
+ */
+ public function isRedirect()
+ {
+ return $this->statusCode >= 300 && $this->statusCode < 400;
+ }
+
+ /**
+ * Checks if HTTP Status code is Server Error (5xx)
+ *
+ * @return bool
+ */
+ public function isServerError()
+ {
+ return $this->statusCode >= 500 && $this->statusCode < 600;
+ }
+
+ /**
+ * Checks if HTTP Status code is Successful (2xx | 304)
+ *
+ * @return bool
+ */
+ public function isSuccessful()
+ {
+ return ($this->statusCode >= 200 && $this->statusCode < 300) || $this->statusCode == 304;
+ }
+
+ /**
+ * Check if the response can be cached based on the response headers
+ *
+ * @return bool Returns TRUE if the response can be cached or false if not
+ */
+ public function canCache()
+ {
+ // Check if the response is cacheable based on the code
+ if (!in_array((int) $this->getStatusCode(), self::$cacheResponseCodes)) {
+ return false;
+ }
+
+ // Make sure a valid body was returned and can be cached
+ if ((!$this->getBody()->isReadable() || !$this->getBody()->isSeekable())
+ && ($this->getContentLength() > 0 || $this->getTransferEncoding() == 'chunked')) {
+ return false;
+ }
+
+ // Never cache no-store resources (this is a private cache, so private
+ // can be cached)
+ if ($this->getHeader('Cache-Control') && $this->getHeader('Cache-Control')->hasDirective('no-store')) {
+ return false;
+ }
+
+ return $this->isFresh() || $this->getFreshness() === null || $this->canValidate();
+ }
+
+ /**
+ * Gets the number of seconds from the current time in which this response is still considered fresh
+ *
+ * @return int|null Returns the number of seconds
+ */
+ public function getMaxAge()
+ {
+ if ($header = $this->getHeader('Cache-Control')) {
+ // s-max-age, then max-age, then Expires
+ if ($age = $header->getDirective('s-maxage')) {
+ return $age;
+ }
+ if ($age = $header->getDirective('max-age')) {
+ return $age;
+ }
+ }
+
+ if ($this->getHeader('Expires')) {
+ return strtotime($this->getExpires()) - time();
+ }
+
+ return null;
+ }
+
+ /**
+ * Check if the response is considered fresh.
+ *
+ * A response is considered fresh when its age is less than or equal to the freshness lifetime (maximum age) of the
+ * response.
+ *
+ * @return bool|null
+ */
+ public function isFresh()
+ {
+ $fresh = $this->getFreshness();
+
+ return $fresh === null ? null : $fresh >= 0;
+ }
+
+ /**
+ * Check if the response can be validated against the origin server using a conditional GET request.
+ *
+ * @return bool
+ */
+ public function canValidate()
+ {
+ return $this->getEtag() || $this->getLastModified();
+ }
+
+ /**
+ * Get the freshness of the response by returning the difference of the maximum lifetime of the response and the
+ * age of the response (max-age - age).
+ *
+ * Freshness values less than 0 mean that the response is no longer fresh and is ABS(freshness) seconds expired.
+ * Freshness values of greater than zero is the number of seconds until the response is no longer fresh. A NULL
+ * result means that no freshness information is available.
+ *
+ * @return int
+ */
+ public function getFreshness()
+ {
+ $maxAge = $this->getMaxAge();
+ $age = $this->calculateAge();
+
+ return $maxAge && $age ? ($maxAge - $age) : null;
+ }
+
+ /**
+ * Parse the JSON response body and return an array
+ *
+ * @return array|string|int|bool|float
+ * @throws RuntimeException if the response body is not in JSON format
+ */
+ public function json()
+ {
+ $data = json_decode((string) $this->body, true);
+ if (JSON_ERROR_NONE !== json_last_error()) {
+ throw new RuntimeException('Unable to parse response body into JSON: ' . json_last_error());
+ }
+
+ return $data === null ? array() : $data;
+ }
+
+ /**
+ * Parse the XML response body and return a \SimpleXMLElement.
+ *
+ * In order to prevent XXE attacks, this method disables loading external
+ * entities. If you rely on external entities, then you must parse the
+ * XML response manually by accessing the response body directly.
+ *
+ * @return \SimpleXMLElement
+ * @throws RuntimeException if the response body is not in XML format
+ * @link http://websec.io/2012/08/27/Preventing-XXE-in-PHP.html
+ */
+ public function xml()
+ {
+ $errorMessage = null;
+ $internalErrors = libxml_use_internal_errors(true);
+ $disableEntities = libxml_disable_entity_loader(true);
+ libxml_clear_errors();
+
+ try {
+ $xml = new \SimpleXMLElement((string) $this->body ?: '', LIBXML_NONET);
+ if ($error = libxml_get_last_error()) {
+ $errorMessage = $error->message;
+ }
+ } catch (\Exception $e) {
+ $errorMessage = $e->getMessage();
+ }
+
+ libxml_clear_errors();
+ libxml_use_internal_errors($internalErrors);
+ libxml_disable_entity_loader($disableEntities);
+
+ if ($errorMessage) {
+ throw new RuntimeException('Unable to parse response body into XML: ' . $errorMessage);
+ }
+
+ return $xml;
+ }
+
+ /**
+ * Get the redirect count of this response
+ *
+ * @return int
+ */
+ public function getRedirectCount()
+ {
+ return (int) $this->params->get(RedirectPlugin::REDIRECT_COUNT);
+ }
+
+ /**
+ * Set the effective URL that resulted in this response (e.g. the last redirect URL)
+ *
+ * @param string $url The effective URL
+ *
+ * @return self
+ */
+ public function setEffectiveUrl($url)
+ {
+ $this->effectiveUrl = $url;
+
+ return $this;
+ }
+
+ /**
+ * Get the effective URL that resulted in this response (e.g. the last redirect URL)
+ *
+ * @return string
+ */
+ public function getEffectiveUrl()
+ {
+ return $this->effectiveUrl;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function getPreviousResponse()
+ {
+ Version::warn(__METHOD__ . ' is deprecated. Use the HistoryPlugin.');
+ return null;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function setRequest($request)
+ {
+ Version::warn(__METHOD__ . ' is deprecated');
+ return $this;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function getRequest()
+ {
+ Version::warn(__METHOD__ . ' is deprecated');
+ return null;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Mimetypes.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Mimetypes.php
new file mode 100644
index 0000000..d71586a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Mimetypes.php
@@ -0,0 +1,962 @@
+ 'text/vnd.in3d.3dml',
+ '3g2' => 'video/3gpp2',
+ '3gp' => 'video/3gpp',
+ '7z' => 'application/x-7z-compressed',
+ 'aab' => 'application/x-authorware-bin',
+ 'aac' => 'audio/x-aac',
+ 'aam' => 'application/x-authorware-map',
+ 'aas' => 'application/x-authorware-seg',
+ 'abw' => 'application/x-abiword',
+ 'ac' => 'application/pkix-attr-cert',
+ 'acc' => 'application/vnd.americandynamics.acc',
+ 'ace' => 'application/x-ace-compressed',
+ 'acu' => 'application/vnd.acucobol',
+ 'acutc' => 'application/vnd.acucorp',
+ 'adp' => 'audio/adpcm',
+ 'aep' => 'application/vnd.audiograph',
+ 'afm' => 'application/x-font-type1',
+ 'afp' => 'application/vnd.ibm.modcap',
+ 'ahead' => 'application/vnd.ahead.space',
+ 'ai' => 'application/postscript',
+ 'aif' => 'audio/x-aiff',
+ 'aifc' => 'audio/x-aiff',
+ 'aiff' => 'audio/x-aiff',
+ 'air' => 'application/vnd.adobe.air-application-installer-package+zip',
+ 'ait' => 'application/vnd.dvb.ait',
+ 'ami' => 'application/vnd.amiga.ami',
+ 'apk' => 'application/vnd.android.package-archive',
+ 'application' => 'application/x-ms-application',
+ 'apr' => 'application/vnd.lotus-approach',
+ 'asa' => 'text/plain',
+ 'asax' => 'application/octet-stream',
+ 'asc' => 'application/pgp-signature',
+ 'ascx' => 'text/plain',
+ 'asf' => 'video/x-ms-asf',
+ 'ashx' => 'text/plain',
+ 'asm' => 'text/x-asm',
+ 'asmx' => 'text/plain',
+ 'aso' => 'application/vnd.accpac.simply.aso',
+ 'asp' => 'text/plain',
+ 'aspx' => 'text/plain',
+ 'asx' => 'video/x-ms-asf',
+ 'atc' => 'application/vnd.acucorp',
+ 'atom' => 'application/atom+xml',
+ 'atomcat' => 'application/atomcat+xml',
+ 'atomsvc' => 'application/atomsvc+xml',
+ 'atx' => 'application/vnd.antix.game-component',
+ 'au' => 'audio/basic',
+ 'avi' => 'video/x-msvideo',
+ 'aw' => 'application/applixware',
+ 'axd' => 'text/plain',
+ 'azf' => 'application/vnd.airzip.filesecure.azf',
+ 'azs' => 'application/vnd.airzip.filesecure.azs',
+ 'azw' => 'application/vnd.amazon.ebook',
+ 'bat' => 'application/x-msdownload',
+ 'bcpio' => 'application/x-bcpio',
+ 'bdf' => 'application/x-font-bdf',
+ 'bdm' => 'application/vnd.syncml.dm+wbxml',
+ 'bed' => 'application/vnd.realvnc.bed',
+ 'bh2' => 'application/vnd.fujitsu.oasysprs',
+ 'bin' => 'application/octet-stream',
+ 'bmi' => 'application/vnd.bmi',
+ 'bmp' => 'image/bmp',
+ 'book' => 'application/vnd.framemaker',
+ 'box' => 'application/vnd.previewsystems.box',
+ 'boz' => 'application/x-bzip2',
+ 'bpk' => 'application/octet-stream',
+ 'btif' => 'image/prs.btif',
+ 'bz' => 'application/x-bzip',
+ 'bz2' => 'application/x-bzip2',
+ 'c' => 'text/x-c',
+ 'c11amc' => 'application/vnd.cluetrust.cartomobile-config',
+ 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',
+ 'c4d' => 'application/vnd.clonk.c4group',
+ 'c4f' => 'application/vnd.clonk.c4group',
+ 'c4g' => 'application/vnd.clonk.c4group',
+ 'c4p' => 'application/vnd.clonk.c4group',
+ 'c4u' => 'application/vnd.clonk.c4group',
+ 'cab' => 'application/vnd.ms-cab-compressed',
+ 'car' => 'application/vnd.curl.car',
+ 'cat' => 'application/vnd.ms-pki.seccat',
+ 'cc' => 'text/x-c',
+ 'cct' => 'application/x-director',
+ 'ccxml' => 'application/ccxml+xml',
+ 'cdbcmsg' => 'application/vnd.contact.cmsg',
+ 'cdf' => 'application/x-netcdf',
+ 'cdkey' => 'application/vnd.mediastation.cdkey',
+ 'cdmia' => 'application/cdmi-capability',
+ 'cdmic' => 'application/cdmi-container',
+ 'cdmid' => 'application/cdmi-domain',
+ 'cdmio' => 'application/cdmi-object',
+ 'cdmiq' => 'application/cdmi-queue',
+ 'cdx' => 'chemical/x-cdx',
+ 'cdxml' => 'application/vnd.chemdraw+xml',
+ 'cdy' => 'application/vnd.cinderella',
+ 'cer' => 'application/pkix-cert',
+ 'cfc' => 'application/x-coldfusion',
+ 'cfm' => 'application/x-coldfusion',
+ 'cgm' => 'image/cgm',
+ 'chat' => 'application/x-chat',
+ 'chm' => 'application/vnd.ms-htmlhelp',
+ 'chrt' => 'application/vnd.kde.kchart',
+ 'cif' => 'chemical/x-cif',
+ 'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
+ 'cil' => 'application/vnd.ms-artgalry',
+ 'cla' => 'application/vnd.claymore',
+ 'class' => 'application/java-vm',
+ 'clkk' => 'application/vnd.crick.clicker.keyboard',
+ 'clkp' => 'application/vnd.crick.clicker.palette',
+ 'clkt' => 'application/vnd.crick.clicker.template',
+ 'clkw' => 'application/vnd.crick.clicker.wordbank',
+ 'clkx' => 'application/vnd.crick.clicker',
+ 'clp' => 'application/x-msclip',
+ 'cmc' => 'application/vnd.cosmocaller',
+ 'cmdf' => 'chemical/x-cmdf',
+ 'cml' => 'chemical/x-cml',
+ 'cmp' => 'application/vnd.yellowriver-custom-menu',
+ 'cmx' => 'image/x-cmx',
+ 'cod' => 'application/vnd.rim.cod',
+ 'com' => 'application/x-msdownload',
+ 'conf' => 'text/plain',
+ 'cpio' => 'application/x-cpio',
+ 'cpp' => 'text/x-c',
+ 'cpt' => 'application/mac-compactpro',
+ 'crd' => 'application/x-mscardfile',
+ 'crl' => 'application/pkix-crl',
+ 'crt' => 'application/x-x509-ca-cert',
+ 'cryptonote' => 'application/vnd.rig.cryptonote',
+ 'cs' => 'text/plain',
+ 'csh' => 'application/x-csh',
+ 'csml' => 'chemical/x-csml',
+ 'csp' => 'application/vnd.commonspace',
+ 'css' => 'text/css',
+ 'cst' => 'application/x-director',
+ 'csv' => 'text/csv',
+ 'cu' => 'application/cu-seeme',
+ 'curl' => 'text/vnd.curl',
+ 'cww' => 'application/prs.cww',
+ 'cxt' => 'application/x-director',
+ 'cxx' => 'text/x-c',
+ 'dae' => 'model/vnd.collada+xml',
+ 'daf' => 'application/vnd.mobius.daf',
+ 'dataless' => 'application/vnd.fdsn.seed',
+ 'davmount' => 'application/davmount+xml',
+ 'dcr' => 'application/x-director',
+ 'dcurl' => 'text/vnd.curl.dcurl',
+ 'dd2' => 'application/vnd.oma.dd2+xml',
+ 'ddd' => 'application/vnd.fujixerox.ddd',
+ 'deb' => 'application/x-debian-package',
+ 'def' => 'text/plain',
+ 'deploy' => 'application/octet-stream',
+ 'der' => 'application/x-x509-ca-cert',
+ 'dfac' => 'application/vnd.dreamfactory',
+ 'dic' => 'text/x-c',
+ 'dir' => 'application/x-director',
+ 'dis' => 'application/vnd.mobius.dis',
+ 'dist' => 'application/octet-stream',
+ 'distz' => 'application/octet-stream',
+ 'djv' => 'image/vnd.djvu',
+ 'djvu' => 'image/vnd.djvu',
+ 'dll' => 'application/x-msdownload',
+ 'dmg' => 'application/octet-stream',
+ 'dms' => 'application/octet-stream',
+ 'dna' => 'application/vnd.dna',
+ 'doc' => 'application/msword',
+ 'docm' => 'application/vnd.ms-word.document.macroenabled.12',
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'dot' => 'application/msword',
+ 'dotm' => 'application/vnd.ms-word.template.macroenabled.12',
+ 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+ 'dp' => 'application/vnd.osgi.dp',
+ 'dpg' => 'application/vnd.dpgraph',
+ 'dra' => 'audio/vnd.dra',
+ 'dsc' => 'text/prs.lines.tag',
+ 'dssc' => 'application/dssc+der',
+ 'dtb' => 'application/x-dtbook+xml',
+ 'dtd' => 'application/xml-dtd',
+ 'dts' => 'audio/vnd.dts',
+ 'dtshd' => 'audio/vnd.dts.hd',
+ 'dump' => 'application/octet-stream',
+ 'dvi' => 'application/x-dvi',
+ 'dwf' => 'model/vnd.dwf',
+ 'dwg' => 'image/vnd.dwg',
+ 'dxf' => 'image/vnd.dxf',
+ 'dxp' => 'application/vnd.spotfire.dxp',
+ 'dxr' => 'application/x-director',
+ 'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
+ 'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
+ 'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
+ 'ecma' => 'application/ecmascript',
+ 'edm' => 'application/vnd.novadigm.edm',
+ 'edx' => 'application/vnd.novadigm.edx',
+ 'efif' => 'application/vnd.picsel',
+ 'ei6' => 'application/vnd.pg.osasli',
+ 'elc' => 'application/octet-stream',
+ 'eml' => 'message/rfc822',
+ 'emma' => 'application/emma+xml',
+ 'eol' => 'audio/vnd.digital-winds',
+ 'eot' => 'application/vnd.ms-fontobject',
+ 'eps' => 'application/postscript',
+ 'epub' => 'application/epub+zip',
+ 'es3' => 'application/vnd.eszigno3+xml',
+ 'esf' => 'application/vnd.epson.esf',
+ 'et3' => 'application/vnd.eszigno3+xml',
+ 'etx' => 'text/x-setext',
+ 'exe' => 'application/x-msdownload',
+ 'exi' => 'application/exi',
+ 'ext' => 'application/vnd.novadigm.ext',
+ 'ez' => 'application/andrew-inset',
+ 'ez2' => 'application/vnd.ezpix-album',
+ 'ez3' => 'application/vnd.ezpix-package',
+ 'f' => 'text/x-fortran',
+ 'f4v' => 'video/x-f4v',
+ 'f77' => 'text/x-fortran',
+ 'f90' => 'text/x-fortran',
+ 'fbs' => 'image/vnd.fastbidsheet',
+ 'fcs' => 'application/vnd.isac.fcs',
+ 'fdf' => 'application/vnd.fdf',
+ 'fe_launch' => 'application/vnd.denovo.fcselayout-link',
+ 'fg5' => 'application/vnd.fujitsu.oasysgp',
+ 'fgd' => 'application/x-director',
+ 'fh' => 'image/x-freehand',
+ 'fh4' => 'image/x-freehand',
+ 'fh5' => 'image/x-freehand',
+ 'fh7' => 'image/x-freehand',
+ 'fhc' => 'image/x-freehand',
+ 'fig' => 'application/x-xfig',
+ 'fli' => 'video/x-fli',
+ 'flo' => 'application/vnd.micrografx.flo',
+ 'flv' => 'video/x-flv',
+ 'flw' => 'application/vnd.kde.kivio',
+ 'flx' => 'text/vnd.fmi.flexstor',
+ 'fly' => 'text/vnd.fly',
+ 'fm' => 'application/vnd.framemaker',
+ 'fnc' => 'application/vnd.frogans.fnc',
+ 'for' => 'text/x-fortran',
+ 'fpx' => 'image/vnd.fpx',
+ 'frame' => 'application/vnd.framemaker',
+ 'fsc' => 'application/vnd.fsc.weblaunch',
+ 'fst' => 'image/vnd.fst',
+ 'ftc' => 'application/vnd.fluxtime.clip',
+ 'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
+ 'fvt' => 'video/vnd.fvt',
+ 'fxp' => 'application/vnd.adobe.fxp',
+ 'fxpl' => 'application/vnd.adobe.fxp',
+ 'fzs' => 'application/vnd.fuzzysheet',
+ 'g2w' => 'application/vnd.geoplan',
+ 'g3' => 'image/g3fax',
+ 'g3w' => 'application/vnd.geospace',
+ 'gac' => 'application/vnd.groove-account',
+ 'gdl' => 'model/vnd.gdl',
+ 'geo' => 'application/vnd.dynageo',
+ 'gex' => 'application/vnd.geometry-explorer',
+ 'ggb' => 'application/vnd.geogebra.file',
+ 'ggt' => 'application/vnd.geogebra.tool',
+ 'ghf' => 'application/vnd.groove-help',
+ 'gif' => 'image/gif',
+ 'gim' => 'application/vnd.groove-identity-message',
+ 'gmx' => 'application/vnd.gmx',
+ 'gnumeric' => 'application/x-gnumeric',
+ 'gph' => 'application/vnd.flographit',
+ 'gqf' => 'application/vnd.grafeq',
+ 'gqs' => 'application/vnd.grafeq',
+ 'gram' => 'application/srgs',
+ 'gre' => 'application/vnd.geometry-explorer',
+ 'grv' => 'application/vnd.groove-injector',
+ 'grxml' => 'application/srgs+xml',
+ 'gsf' => 'application/x-font-ghostscript',
+ 'gtar' => 'application/x-gtar',
+ 'gtm' => 'application/vnd.groove-tool-message',
+ 'gtw' => 'model/vnd.gtw',
+ 'gv' => 'text/vnd.graphviz',
+ 'gxt' => 'application/vnd.geonext',
+ 'h' => 'text/x-c',
+ 'h261' => 'video/h261',
+ 'h263' => 'video/h263',
+ 'h264' => 'video/h264',
+ 'hal' => 'application/vnd.hal+xml',
+ 'hbci' => 'application/vnd.hbci',
+ 'hdf' => 'application/x-hdf',
+ 'hh' => 'text/x-c',
+ 'hlp' => 'application/winhlp',
+ 'hpgl' => 'application/vnd.hp-hpgl',
+ 'hpid' => 'application/vnd.hp-hpid',
+ 'hps' => 'application/vnd.hp-hps',
+ 'hqx' => 'application/mac-binhex40',
+ 'hta' => 'application/octet-stream',
+ 'htc' => 'text/html',
+ 'htke' => 'application/vnd.kenameaapp',
+ 'htm' => 'text/html',
+ 'html' => 'text/html',
+ 'hvd' => 'application/vnd.yamaha.hv-dic',
+ 'hvp' => 'application/vnd.yamaha.hv-voice',
+ 'hvs' => 'application/vnd.yamaha.hv-script',
+ 'i2g' => 'application/vnd.intergeo',
+ 'icc' => 'application/vnd.iccprofile',
+ 'ice' => 'x-conference/x-cooltalk',
+ 'icm' => 'application/vnd.iccprofile',
+ 'ico' => 'image/x-icon',
+ 'ics' => 'text/calendar',
+ 'ief' => 'image/ief',
+ 'ifb' => 'text/calendar',
+ 'ifm' => 'application/vnd.shana.informed.formdata',
+ 'iges' => 'model/iges',
+ 'igl' => 'application/vnd.igloader',
+ 'igm' => 'application/vnd.insors.igm',
+ 'igs' => 'model/iges',
+ 'igx' => 'application/vnd.micrografx.igx',
+ 'iif' => 'application/vnd.shana.informed.interchange',
+ 'imp' => 'application/vnd.accpac.simply.imp',
+ 'ims' => 'application/vnd.ms-ims',
+ 'in' => 'text/plain',
+ 'ini' => 'text/plain',
+ 'ipfix' => 'application/ipfix',
+ 'ipk' => 'application/vnd.shana.informed.package',
+ 'irm' => 'application/vnd.ibm.rights-management',
+ 'irp' => 'application/vnd.irepository.package+xml',
+ 'iso' => 'application/octet-stream',
+ 'itp' => 'application/vnd.shana.informed.formtemplate',
+ 'ivp' => 'application/vnd.immervision-ivp',
+ 'ivu' => 'application/vnd.immervision-ivu',
+ 'jad' => 'text/vnd.sun.j2me.app-descriptor',
+ 'jam' => 'application/vnd.jam',
+ 'jar' => 'application/java-archive',
+ 'java' => 'text/x-java-source',
+ 'jisp' => 'application/vnd.jisp',
+ 'jlt' => 'application/vnd.hp-jlyt',
+ 'jnlp' => 'application/x-java-jnlp-file',
+ 'joda' => 'application/vnd.joost.joda-archive',
+ 'jpe' => 'image/jpeg',
+ 'jpeg' => 'image/jpeg',
+ 'jpg' => 'image/jpeg',
+ 'jpgm' => 'video/jpm',
+ 'jpgv' => 'video/jpeg',
+ 'jpm' => 'video/jpm',
+ 'js' => 'text/javascript',
+ 'json' => 'application/json',
+ 'kar' => 'audio/midi',
+ 'karbon' => 'application/vnd.kde.karbon',
+ 'kfo' => 'application/vnd.kde.kformula',
+ 'kia' => 'application/vnd.kidspiration',
+ 'kml' => 'application/vnd.google-earth.kml+xml',
+ 'kmz' => 'application/vnd.google-earth.kmz',
+ 'kne' => 'application/vnd.kinar',
+ 'knp' => 'application/vnd.kinar',
+ 'kon' => 'application/vnd.kde.kontour',
+ 'kpr' => 'application/vnd.kde.kpresenter',
+ 'kpt' => 'application/vnd.kde.kpresenter',
+ 'ksp' => 'application/vnd.kde.kspread',
+ 'ktr' => 'application/vnd.kahootz',
+ 'ktx' => 'image/ktx',
+ 'ktz' => 'application/vnd.kahootz',
+ 'kwd' => 'application/vnd.kde.kword',
+ 'kwt' => 'application/vnd.kde.kword',
+ 'lasxml' => 'application/vnd.las.las+xml',
+ 'latex' => 'application/x-latex',
+ 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
+ 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
+ 'les' => 'application/vnd.hhe.lesson-player',
+ 'lha' => 'application/octet-stream',
+ 'link66' => 'application/vnd.route66.link66+xml',
+ 'list' => 'text/plain',
+ 'list3820' => 'application/vnd.ibm.modcap',
+ 'listafp' => 'application/vnd.ibm.modcap',
+ 'log' => 'text/plain',
+ 'lostxml' => 'application/lost+xml',
+ 'lrf' => 'application/octet-stream',
+ 'lrm' => 'application/vnd.ms-lrm',
+ 'ltf' => 'application/vnd.frogans.ltf',
+ 'lvp' => 'audio/vnd.lucent.voice',
+ 'lwp' => 'application/vnd.lotus-wordpro',
+ 'lzh' => 'application/octet-stream',
+ 'm13' => 'application/x-msmediaview',
+ 'm14' => 'application/x-msmediaview',
+ 'm1v' => 'video/mpeg',
+ 'm21' => 'application/mp21',
+ 'm2a' => 'audio/mpeg',
+ 'm2v' => 'video/mpeg',
+ 'm3a' => 'audio/mpeg',
+ 'm3u' => 'audio/x-mpegurl',
+ 'm3u8' => 'application/vnd.apple.mpegurl',
+ 'm4a' => 'audio/mp4',
+ 'm4u' => 'video/vnd.mpegurl',
+ 'm4v' => 'video/mp4',
+ 'ma' => 'application/mathematica',
+ 'mads' => 'application/mads+xml',
+ 'mag' => 'application/vnd.ecowin.chart',
+ 'maker' => 'application/vnd.framemaker',
+ 'man' => 'text/troff',
+ 'mathml' => 'application/mathml+xml',
+ 'mb' => 'application/mathematica',
+ 'mbk' => 'application/vnd.mobius.mbk',
+ 'mbox' => 'application/mbox',
+ 'mc1' => 'application/vnd.medcalcdata',
+ 'mcd' => 'application/vnd.mcd',
+ 'mcurl' => 'text/vnd.curl.mcurl',
+ 'mdb' => 'application/x-msaccess',
+ 'mdi' => 'image/vnd.ms-modi',
+ 'me' => 'text/troff',
+ 'mesh' => 'model/mesh',
+ 'meta4' => 'application/metalink4+xml',
+ 'mets' => 'application/mets+xml',
+ 'mfm' => 'application/vnd.mfmp',
+ 'mgp' => 'application/vnd.osgeo.mapguide.package',
+ 'mgz' => 'application/vnd.proteus.magazine',
+ 'mid' => 'audio/midi',
+ 'midi' => 'audio/midi',
+ 'mif' => 'application/vnd.mif',
+ 'mime' => 'message/rfc822',
+ 'mj2' => 'video/mj2',
+ 'mjp2' => 'video/mj2',
+ 'mlp' => 'application/vnd.dolby.mlp',
+ 'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
+ 'mmf' => 'application/vnd.smaf',
+ 'mmr' => 'image/vnd.fujixerox.edmics-mmr',
+ 'mny' => 'application/x-msmoney',
+ 'mobi' => 'application/x-mobipocket-ebook',
+ 'mods' => 'application/mods+xml',
+ 'mov' => 'video/quicktime',
+ 'movie' => 'video/x-sgi-movie',
+ 'mp2' => 'audio/mpeg',
+ 'mp21' => 'application/mp21',
+ 'mp2a' => 'audio/mpeg',
+ 'mp3' => 'audio/mpeg',
+ 'mp4' => 'video/mp4',
+ 'mp4a' => 'audio/mp4',
+ 'mp4s' => 'application/mp4',
+ 'mp4v' => 'video/mp4',
+ 'mpc' => 'application/vnd.mophun.certificate',
+ 'mpe' => 'video/mpeg',
+ 'mpeg' => 'video/mpeg',
+ 'mpg' => 'video/mpeg',
+ 'mpg4' => 'video/mp4',
+ 'mpga' => 'audio/mpeg',
+ 'mpkg' => 'application/vnd.apple.installer+xml',
+ 'mpm' => 'application/vnd.blueice.multipass',
+ 'mpn' => 'application/vnd.mophun.application',
+ 'mpp' => 'application/vnd.ms-project',
+ 'mpt' => 'application/vnd.ms-project',
+ 'mpy' => 'application/vnd.ibm.minipay',
+ 'mqy' => 'application/vnd.mobius.mqy',
+ 'mrc' => 'application/marc',
+ 'mrcx' => 'application/marcxml+xml',
+ 'ms' => 'text/troff',
+ 'mscml' => 'application/mediaservercontrol+xml',
+ 'mseed' => 'application/vnd.fdsn.mseed',
+ 'mseq' => 'application/vnd.mseq',
+ 'msf' => 'application/vnd.epson.msf',
+ 'msh' => 'model/mesh',
+ 'msi' => 'application/x-msdownload',
+ 'msl' => 'application/vnd.mobius.msl',
+ 'msty' => 'application/vnd.muvee.style',
+ 'mts' => 'model/vnd.mts',
+ 'mus' => 'application/vnd.musician',
+ 'musicxml' => 'application/vnd.recordare.musicxml+xml',
+ 'mvb' => 'application/x-msmediaview',
+ 'mwf' => 'application/vnd.mfer',
+ 'mxf' => 'application/mxf',
+ 'mxl' => 'application/vnd.recordare.musicxml',
+ 'mxml' => 'application/xv+xml',
+ 'mxs' => 'application/vnd.triscape.mxs',
+ 'mxu' => 'video/vnd.mpegurl',
+ 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',
+ 'n3' => 'text/n3',
+ 'nb' => 'application/mathematica',
+ 'nbp' => 'application/vnd.wolfram.player',
+ 'nc' => 'application/x-netcdf',
+ 'ncx' => 'application/x-dtbncx+xml',
+ 'ngdat' => 'application/vnd.nokia.n-gage.data',
+ 'nlu' => 'application/vnd.neurolanguage.nlu',
+ 'nml' => 'application/vnd.enliven',
+ 'nnd' => 'application/vnd.noblenet-directory',
+ 'nns' => 'application/vnd.noblenet-sealer',
+ 'nnw' => 'application/vnd.noblenet-web',
+ 'npx' => 'image/vnd.net-fpx',
+ 'nsf' => 'application/vnd.lotus-notes',
+ 'oa2' => 'application/vnd.fujitsu.oasys2',
+ 'oa3' => 'application/vnd.fujitsu.oasys3',
+ 'oas' => 'application/vnd.fujitsu.oasys',
+ 'obd' => 'application/x-msbinder',
+ 'oda' => 'application/oda',
+ 'odb' => 'application/vnd.oasis.opendocument.database',
+ 'odc' => 'application/vnd.oasis.opendocument.chart',
+ 'odf' => 'application/vnd.oasis.opendocument.formula',
+ 'odft' => 'application/vnd.oasis.opendocument.formula-template',
+ 'odg' => 'application/vnd.oasis.opendocument.graphics',
+ 'odi' => 'application/vnd.oasis.opendocument.image',
+ 'odm' => 'application/vnd.oasis.opendocument.text-master',
+ 'odp' => 'application/vnd.oasis.opendocument.presentation',
+ 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
+ 'odt' => 'application/vnd.oasis.opendocument.text',
+ 'oga' => 'audio/ogg',
+ 'ogg' => 'audio/ogg',
+ 'ogv' => 'video/ogg',
+ 'ogx' => 'application/ogg',
+ 'onepkg' => 'application/onenote',
+ 'onetmp' => 'application/onenote',
+ 'onetoc' => 'application/onenote',
+ 'onetoc2' => 'application/onenote',
+ 'opf' => 'application/oebps-package+xml',
+ 'oprc' => 'application/vnd.palm',
+ 'org' => 'application/vnd.lotus-organizer',
+ 'osf' => 'application/vnd.yamaha.openscoreformat',
+ 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
+ 'otc' => 'application/vnd.oasis.opendocument.chart-template',
+ 'otf' => 'application/x-font-otf',
+ 'otg' => 'application/vnd.oasis.opendocument.graphics-template',
+ 'oth' => 'application/vnd.oasis.opendocument.text-web',
+ 'oti' => 'application/vnd.oasis.opendocument.image-template',
+ 'otp' => 'application/vnd.oasis.opendocument.presentation-template',
+ 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
+ 'ott' => 'application/vnd.oasis.opendocument.text-template',
+ 'oxt' => 'application/vnd.openofficeorg.extension',
+ 'p' => 'text/x-pascal',
+ 'p10' => 'application/pkcs10',
+ 'p12' => 'application/x-pkcs12',
+ 'p7b' => 'application/x-pkcs7-certificates',
+ 'p7c' => 'application/pkcs7-mime',
+ 'p7m' => 'application/pkcs7-mime',
+ 'p7r' => 'application/x-pkcs7-certreqresp',
+ 'p7s' => 'application/pkcs7-signature',
+ 'p8' => 'application/pkcs8',
+ 'pas' => 'text/x-pascal',
+ 'paw' => 'application/vnd.pawaafile',
+ 'pbd' => 'application/vnd.powerbuilder6',
+ 'pbm' => 'image/x-portable-bitmap',
+ 'pcf' => 'application/x-font-pcf',
+ 'pcl' => 'application/vnd.hp-pcl',
+ 'pclxl' => 'application/vnd.hp-pclxl',
+ 'pct' => 'image/x-pict',
+ 'pcurl' => 'application/vnd.curl.pcurl',
+ 'pcx' => 'image/x-pcx',
+ 'pdb' => 'application/vnd.palm',
+ 'pdf' => 'application/pdf',
+ 'pfa' => 'application/x-font-type1',
+ 'pfb' => 'application/x-font-type1',
+ 'pfm' => 'application/x-font-type1',
+ 'pfr' => 'application/font-tdpfr',
+ 'pfx' => 'application/x-pkcs12',
+ 'pgm' => 'image/x-portable-graymap',
+ 'pgn' => 'application/x-chess-pgn',
+ 'pgp' => 'application/pgp-encrypted',
+ 'php' => 'text/x-php',
+ 'phps' => 'application/x-httpd-phps',
+ 'pic' => 'image/x-pict',
+ 'pkg' => 'application/octet-stream',
+ 'pki' => 'application/pkixcmp',
+ 'pkipath' => 'application/pkix-pkipath',
+ 'plb' => 'application/vnd.3gpp.pic-bw-large',
+ 'plc' => 'application/vnd.mobius.plc',
+ 'plf' => 'application/vnd.pocketlearn',
+ 'pls' => 'application/pls+xml',
+ 'pml' => 'application/vnd.ctc-posml',
+ 'png' => 'image/png',
+ 'pnm' => 'image/x-portable-anymap',
+ 'portpkg' => 'application/vnd.macports.portpkg',
+ 'pot' => 'application/vnd.ms-powerpoint',
+ 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12',
+ 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
+ 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12',
+ 'ppd' => 'application/vnd.cups-ppd',
+ 'ppm' => 'image/x-portable-pixmap',
+ 'pps' => 'application/vnd.ms-powerpoint',
+ 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
+ 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+ 'ppt' => 'application/vnd.ms-powerpoint',
+ 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+ 'pqa' => 'application/vnd.palm',
+ 'prc' => 'application/x-mobipocket-ebook',
+ 'pre' => 'application/vnd.lotus-freelance',
+ 'prf' => 'application/pics-rules',
+ 'ps' => 'application/postscript',
+ 'psb' => 'application/vnd.3gpp.pic-bw-small',
+ 'psd' => 'image/vnd.adobe.photoshop',
+ 'psf' => 'application/x-font-linux-psf',
+ 'pskcxml' => 'application/pskc+xml',
+ 'ptid' => 'application/vnd.pvi.ptid1',
+ 'pub' => 'application/x-mspublisher',
+ 'pvb' => 'application/vnd.3gpp.pic-bw-var',
+ 'pwn' => 'application/vnd.3m.post-it-notes',
+ 'pya' => 'audio/vnd.ms-playready.media.pya',
+ 'pyv' => 'video/vnd.ms-playready.media.pyv',
+ 'qam' => 'application/vnd.epson.quickanime',
+ 'qbo' => 'application/vnd.intu.qbo',
+ 'qfx' => 'application/vnd.intu.qfx',
+ 'qps' => 'application/vnd.publishare-delta-tree',
+ 'qt' => 'video/quicktime',
+ 'qwd' => 'application/vnd.quark.quarkxpress',
+ 'qwt' => 'application/vnd.quark.quarkxpress',
+ 'qxb' => 'application/vnd.quark.quarkxpress',
+ 'qxd' => 'application/vnd.quark.quarkxpress',
+ 'qxl' => 'application/vnd.quark.quarkxpress',
+ 'qxt' => 'application/vnd.quark.quarkxpress',
+ 'ra' => 'audio/x-pn-realaudio',
+ 'ram' => 'audio/x-pn-realaudio',
+ 'rar' => 'application/x-rar-compressed',
+ 'ras' => 'image/x-cmu-raster',
+ 'rb' => 'text/plain',
+ 'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
+ 'rdf' => 'application/rdf+xml',
+ 'rdz' => 'application/vnd.data-vision.rdz',
+ 'rep' => 'application/vnd.businessobjects',
+ 'res' => 'application/x-dtbresource+xml',
+ 'resx' => 'text/xml',
+ 'rgb' => 'image/x-rgb',
+ 'rif' => 'application/reginfo+xml',
+ 'rip' => 'audio/vnd.rip',
+ 'rl' => 'application/resource-lists+xml',
+ 'rlc' => 'image/vnd.fujixerox.edmics-rlc',
+ 'rld' => 'application/resource-lists-diff+xml',
+ 'rm' => 'application/vnd.rn-realmedia',
+ 'rmi' => 'audio/midi',
+ 'rmp' => 'audio/x-pn-realaudio-plugin',
+ 'rms' => 'application/vnd.jcp.javame.midlet-rms',
+ 'rnc' => 'application/relax-ng-compact-syntax',
+ 'roff' => 'text/troff',
+ 'rp9' => 'application/vnd.cloanto.rp9',
+ 'rpss' => 'application/vnd.nokia.radio-presets',
+ 'rpst' => 'application/vnd.nokia.radio-preset',
+ 'rq' => 'application/sparql-query',
+ 'rs' => 'application/rls-services+xml',
+ 'rsd' => 'application/rsd+xml',
+ 'rss' => 'application/rss+xml',
+ 'rtf' => 'application/rtf',
+ 'rtx' => 'text/richtext',
+ 's' => 'text/x-asm',
+ 'saf' => 'application/vnd.yamaha.smaf-audio',
+ 'sbml' => 'application/sbml+xml',
+ 'sc' => 'application/vnd.ibm.secure-container',
+ 'scd' => 'application/x-msschedule',
+ 'scm' => 'application/vnd.lotus-screencam',
+ 'scq' => 'application/scvp-cv-request',
+ 'scs' => 'application/scvp-cv-response',
+ 'scurl' => 'text/vnd.curl.scurl',
+ 'sda' => 'application/vnd.stardivision.draw',
+ 'sdc' => 'application/vnd.stardivision.calc',
+ 'sdd' => 'application/vnd.stardivision.impress',
+ 'sdkd' => 'application/vnd.solent.sdkm+xml',
+ 'sdkm' => 'application/vnd.solent.sdkm+xml',
+ 'sdp' => 'application/sdp',
+ 'sdw' => 'application/vnd.stardivision.writer',
+ 'see' => 'application/vnd.seemail',
+ 'seed' => 'application/vnd.fdsn.seed',
+ 'sema' => 'application/vnd.sema',
+ 'semd' => 'application/vnd.semd',
+ 'semf' => 'application/vnd.semf',
+ 'ser' => 'application/java-serialized-object',
+ 'setpay' => 'application/set-payment-initiation',
+ 'setreg' => 'application/set-registration-initiation',
+ 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data',
+ 'sfs' => 'application/vnd.spotfire.sfs',
+ 'sgl' => 'application/vnd.stardivision.writer-global',
+ 'sgm' => 'text/sgml',
+ 'sgml' => 'text/sgml',
+ 'sh' => 'application/x-sh',
+ 'shar' => 'application/x-shar',
+ 'shf' => 'application/shf+xml',
+ 'sig' => 'application/pgp-signature',
+ 'silo' => 'model/mesh',
+ 'sis' => 'application/vnd.symbian.install',
+ 'sisx' => 'application/vnd.symbian.install',
+ 'sit' => 'application/x-stuffit',
+ 'sitx' => 'application/x-stuffitx',
+ 'skd' => 'application/vnd.koan',
+ 'skm' => 'application/vnd.koan',
+ 'skp' => 'application/vnd.koan',
+ 'skt' => 'application/vnd.koan',
+ 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12',
+ 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
+ 'slt' => 'application/vnd.epson.salt',
+ 'sm' => 'application/vnd.stepmania.stepchart',
+ 'smf' => 'application/vnd.stardivision.math',
+ 'smi' => 'application/smil+xml',
+ 'smil' => 'application/smil+xml',
+ 'snd' => 'audio/basic',
+ 'snf' => 'application/x-font-snf',
+ 'so' => 'application/octet-stream',
+ 'spc' => 'application/x-pkcs7-certificates',
+ 'spf' => 'application/vnd.yamaha.smaf-phrase',
+ 'spl' => 'application/x-futuresplash',
+ 'spot' => 'text/vnd.in3d.spot',
+ 'spp' => 'application/scvp-vp-response',
+ 'spq' => 'application/scvp-vp-request',
+ 'spx' => 'audio/ogg',
+ 'src' => 'application/x-wais-source',
+ 'sru' => 'application/sru+xml',
+ 'srx' => 'application/sparql-results+xml',
+ 'sse' => 'application/vnd.kodak-descriptor',
+ 'ssf' => 'application/vnd.epson.ssf',
+ 'ssml' => 'application/ssml+xml',
+ 'st' => 'application/vnd.sailingtracker.track',
+ 'stc' => 'application/vnd.sun.xml.calc.template',
+ 'std' => 'application/vnd.sun.xml.draw.template',
+ 'stf' => 'application/vnd.wt.stf',
+ 'sti' => 'application/vnd.sun.xml.impress.template',
+ 'stk' => 'application/hyperstudio',
+ 'stl' => 'application/vnd.ms-pki.stl',
+ 'str' => 'application/vnd.pg.format',
+ 'stw' => 'application/vnd.sun.xml.writer.template',
+ 'sub' => 'image/vnd.dvb.subtitle',
+ 'sus' => 'application/vnd.sus-calendar',
+ 'susp' => 'application/vnd.sus-calendar',
+ 'sv4cpio' => 'application/x-sv4cpio',
+ 'sv4crc' => 'application/x-sv4crc',
+ 'svc' => 'application/vnd.dvb.service',
+ 'svd' => 'application/vnd.svd',
+ 'svg' => 'image/svg+xml',
+ 'svgz' => 'image/svg+xml',
+ 'swa' => 'application/x-director',
+ 'swf' => 'application/x-shockwave-flash',
+ 'swi' => 'application/vnd.aristanetworks.swi',
+ 'sxc' => 'application/vnd.sun.xml.calc',
+ 'sxd' => 'application/vnd.sun.xml.draw',
+ 'sxg' => 'application/vnd.sun.xml.writer.global',
+ 'sxi' => 'application/vnd.sun.xml.impress',
+ 'sxm' => 'application/vnd.sun.xml.math',
+ 'sxw' => 'application/vnd.sun.xml.writer',
+ 't' => 'text/troff',
+ 'tao' => 'application/vnd.tao.intent-module-archive',
+ 'tar' => 'application/x-tar',
+ 'tcap' => 'application/vnd.3gpp2.tcap',
+ 'tcl' => 'application/x-tcl',
+ 'teacher' => 'application/vnd.smart.teacher',
+ 'tei' => 'application/tei+xml',
+ 'teicorpus' => 'application/tei+xml',
+ 'tex' => 'application/x-tex',
+ 'texi' => 'application/x-texinfo',
+ 'texinfo' => 'application/x-texinfo',
+ 'text' => 'text/plain',
+ 'tfi' => 'application/thraud+xml',
+ 'tfm' => 'application/x-tex-tfm',
+ 'thmx' => 'application/vnd.ms-officetheme',
+ 'tif' => 'image/tiff',
+ 'tiff' => 'image/tiff',
+ 'tmo' => 'application/vnd.tmobile-livetv',
+ 'torrent' => 'application/x-bittorrent',
+ 'tpl' => 'application/vnd.groove-tool-template',
+ 'tpt' => 'application/vnd.trid.tpt',
+ 'tr' => 'text/troff',
+ 'tra' => 'application/vnd.trueapp',
+ 'trm' => 'application/x-msterminal',
+ 'tsd' => 'application/timestamped-data',
+ 'tsv' => 'text/tab-separated-values',
+ 'ttc' => 'application/x-font-ttf',
+ 'ttf' => 'application/x-font-ttf',
+ 'ttl' => 'text/turtle',
+ 'twd' => 'application/vnd.simtech-mindmapper',
+ 'twds' => 'application/vnd.simtech-mindmapper',
+ 'txd' => 'application/vnd.genomatix.tuxedo',
+ 'txf' => 'application/vnd.mobius.txf',
+ 'txt' => 'text/plain',
+ 'u32' => 'application/x-authorware-bin',
+ 'udeb' => 'application/x-debian-package',
+ 'ufd' => 'application/vnd.ufdl',
+ 'ufdl' => 'application/vnd.ufdl',
+ 'umj' => 'application/vnd.umajin',
+ 'unityweb' => 'application/vnd.unity',
+ 'uoml' => 'application/vnd.uoml+xml',
+ 'uri' => 'text/uri-list',
+ 'uris' => 'text/uri-list',
+ 'urls' => 'text/uri-list',
+ 'ustar' => 'application/x-ustar',
+ 'utz' => 'application/vnd.uiq.theme',
+ 'uu' => 'text/x-uuencode',
+ 'uva' => 'audio/vnd.dece.audio',
+ 'uvd' => 'application/vnd.dece.data',
+ 'uvf' => 'application/vnd.dece.data',
+ 'uvg' => 'image/vnd.dece.graphic',
+ 'uvh' => 'video/vnd.dece.hd',
+ 'uvi' => 'image/vnd.dece.graphic',
+ 'uvm' => 'video/vnd.dece.mobile',
+ 'uvp' => 'video/vnd.dece.pd',
+ 'uvs' => 'video/vnd.dece.sd',
+ 'uvt' => 'application/vnd.dece.ttml+xml',
+ 'uvu' => 'video/vnd.uvvu.mp4',
+ 'uvv' => 'video/vnd.dece.video',
+ 'uvva' => 'audio/vnd.dece.audio',
+ 'uvvd' => 'application/vnd.dece.data',
+ 'uvvf' => 'application/vnd.dece.data',
+ 'uvvg' => 'image/vnd.dece.graphic',
+ 'uvvh' => 'video/vnd.dece.hd',
+ 'uvvi' => 'image/vnd.dece.graphic',
+ 'uvvm' => 'video/vnd.dece.mobile',
+ 'uvvp' => 'video/vnd.dece.pd',
+ 'uvvs' => 'video/vnd.dece.sd',
+ 'uvvt' => 'application/vnd.dece.ttml+xml',
+ 'uvvu' => 'video/vnd.uvvu.mp4',
+ 'uvvv' => 'video/vnd.dece.video',
+ 'uvvx' => 'application/vnd.dece.unspecified',
+ 'uvx' => 'application/vnd.dece.unspecified',
+ 'vcd' => 'application/x-cdlink',
+ 'vcf' => 'text/x-vcard',
+ 'vcg' => 'application/vnd.groove-vcard',
+ 'vcs' => 'text/x-vcalendar',
+ 'vcx' => 'application/vnd.vcx',
+ 'vis' => 'application/vnd.visionary',
+ 'viv' => 'video/vnd.vivo',
+ 'vor' => 'application/vnd.stardivision.writer',
+ 'vox' => 'application/x-authorware-bin',
+ 'vrml' => 'model/vrml',
+ 'vsd' => 'application/vnd.visio',
+ 'vsf' => 'application/vnd.vsf',
+ 'vss' => 'application/vnd.visio',
+ 'vst' => 'application/vnd.visio',
+ 'vsw' => 'application/vnd.visio',
+ 'vtu' => 'model/vnd.vtu',
+ 'vxml' => 'application/voicexml+xml',
+ 'w3d' => 'application/x-director',
+ 'wad' => 'application/x-doom',
+ 'wav' => 'audio/x-wav',
+ 'wax' => 'audio/x-ms-wax',
+ 'wbmp' => 'image/vnd.wap.wbmp',
+ 'wbs' => 'application/vnd.criticaltools.wbs+xml',
+ 'wbxml' => 'application/vnd.wap.wbxml',
+ 'wcm' => 'application/vnd.ms-works',
+ 'wdb' => 'application/vnd.ms-works',
+ 'weba' => 'audio/webm',
+ 'webm' => 'video/webm',
+ 'webp' => 'image/webp',
+ 'wg' => 'application/vnd.pmi.widget',
+ 'wgt' => 'application/widget',
+ 'wks' => 'application/vnd.ms-works',
+ 'wm' => 'video/x-ms-wm',
+ 'wma' => 'audio/x-ms-wma',
+ 'wmd' => 'application/x-ms-wmd',
+ 'wmf' => 'application/x-msmetafile',
+ 'wml' => 'text/vnd.wap.wml',
+ 'wmlc' => 'application/vnd.wap.wmlc',
+ 'wmls' => 'text/vnd.wap.wmlscript',
+ 'wmlsc' => 'application/vnd.wap.wmlscriptc',
+ 'wmv' => 'video/x-ms-wmv',
+ 'wmx' => 'video/x-ms-wmx',
+ 'wmz' => 'application/x-ms-wmz',
+ 'woff' => 'application/x-font-woff',
+ 'wpd' => 'application/vnd.wordperfect',
+ 'wpl' => 'application/vnd.ms-wpl',
+ 'wps' => 'application/vnd.ms-works',
+ 'wqd' => 'application/vnd.wqd',
+ 'wri' => 'application/x-mswrite',
+ 'wrl' => 'model/vrml',
+ 'wsdl' => 'application/wsdl+xml',
+ 'wspolicy' => 'application/wspolicy+xml',
+ 'wtb' => 'application/vnd.webturbo',
+ 'wvx' => 'video/x-ms-wvx',
+ 'x32' => 'application/x-authorware-bin',
+ 'x3d' => 'application/vnd.hzn-3d-crossword',
+ 'xap' => 'application/x-silverlight-app',
+ 'xar' => 'application/vnd.xara',
+ 'xbap' => 'application/x-ms-xbap',
+ 'xbd' => 'application/vnd.fujixerox.docuworks.binder',
+ 'xbm' => 'image/x-xbitmap',
+ 'xdf' => 'application/xcap-diff+xml',
+ 'xdm' => 'application/vnd.syncml.dm+xml',
+ 'xdp' => 'application/vnd.adobe.xdp+xml',
+ 'xdssc' => 'application/dssc+xml',
+ 'xdw' => 'application/vnd.fujixerox.docuworks',
+ 'xenc' => 'application/xenc+xml',
+ 'xer' => 'application/patch-ops-error+xml',
+ 'xfdf' => 'application/vnd.adobe.xfdf',
+ 'xfdl' => 'application/vnd.xfdl',
+ 'xht' => 'application/xhtml+xml',
+ 'xhtml' => 'application/xhtml+xml',
+ 'xhvml' => 'application/xv+xml',
+ 'xif' => 'image/vnd.xiff',
+ 'xla' => 'application/vnd.ms-excel',
+ 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12',
+ 'xlc' => 'application/vnd.ms-excel',
+ 'xlm' => 'application/vnd.ms-excel',
+ 'xls' => 'application/vnd.ms-excel',
+ 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
+ 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12',
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'xlt' => 'application/vnd.ms-excel',
+ 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12',
+ 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
+ 'xlw' => 'application/vnd.ms-excel',
+ 'xml' => 'application/xml',
+ 'xo' => 'application/vnd.olpc-sugar',
+ 'xop' => 'application/xop+xml',
+ 'xpi' => 'application/x-xpinstall',
+ 'xpm' => 'image/x-xpixmap',
+ 'xpr' => 'application/vnd.is-xpr',
+ 'xps' => 'application/vnd.ms-xpsdocument',
+ 'xpw' => 'application/vnd.intercon.formnet',
+ 'xpx' => 'application/vnd.intercon.formnet',
+ 'xsl' => 'application/xml',
+ 'xslt' => 'application/xslt+xml',
+ 'xsm' => 'application/vnd.syncml+xml',
+ 'xspf' => 'application/xspf+xml',
+ 'xul' => 'application/vnd.mozilla.xul+xml',
+ 'xvm' => 'application/xv+xml',
+ 'xvml' => 'application/xv+xml',
+ 'xwd' => 'image/x-xwindowdump',
+ 'xyz' => 'chemical/x-xyz',
+ 'yaml' => 'text/yaml',
+ 'yang' => 'application/yang',
+ 'yin' => 'application/yin+xml',
+ 'yml' => 'text/yaml',
+ 'zaz' => 'application/vnd.zzazz.deck+xml',
+ 'zip' => 'application/zip',
+ 'zir' => 'application/vnd.zul',
+ 'zirz' => 'application/vnd.zul',
+ 'zmm' => 'application/vnd.handheld-entertainment+xml'
+ );
+
+ /**
+ * Get a singleton instance of the class
+ *
+ * @return self
+ * @codeCoverageIgnore
+ */
+ public static function getInstance()
+ {
+ if (!self::$instance) {
+ self::$instance = new self();
+ }
+
+ return self::$instance;
+ }
+
+ /**
+ * Get a mimetype value from a file extension
+ *
+ * @param string $extension File extension
+ *
+ * @return string|null
+ *
+ */
+ public function fromExtension($extension)
+ {
+ $extension = strtolower($extension);
+
+ return isset($this->mimetypes[$extension]) ? $this->mimetypes[$extension] : null;
+ }
+
+ /**
+ * Get a mimetype from a filename
+ *
+ * @param string $filename Filename to generate a mimetype from
+ *
+ * @return string|null
+ */
+ public function fromFilename($filename)
+ {
+ return $this->fromExtension(pathinfo($filename, PATHINFO_EXTENSION));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/CommaAggregator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/CommaAggregator.php
new file mode 100644
index 0000000..4b4e49d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/CommaAggregator.php
@@ -0,0 +1,20 @@
+isUrlEncoding()) {
+ return array($query->encodeValue($key) => implode(',', array_map(array($query, 'encodeValue'), $value)));
+ } else {
+ return array($key => implode(',', $value));
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/DuplicateAggregator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/DuplicateAggregator.php
new file mode 100644
index 0000000..1bf1730
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/DuplicateAggregator.php
@@ -0,0 +1,22 @@
+isUrlEncoding()) {
+ return array($query->encodeValue($key) => array_map(array($query, 'encodeValue'), $value));
+ } else {
+ return array($key => $value);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/PhpAggregator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/PhpAggregator.php
new file mode 100644
index 0000000..133ea2b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/PhpAggregator.php
@@ -0,0 +1,27 @@
+ $v) {
+ $k = "{$key}[{$k}]";
+ if (is_array($v)) {
+ $ret = array_merge($ret, self::aggregate($k, $v, $query));
+ } else {
+ $ret[$query->encodeValue($k)] = $query->encodeValue($v);
+ }
+ }
+
+ return $ret;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/QueryAggregatorInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/QueryAggregatorInterface.php
new file mode 100644
index 0000000..72bee62
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/QueryAggregator/QueryAggregatorInterface.php
@@ -0,0 +1,22 @@
+add($key, $value);
+ $foundDuplicates = true;
+ } elseif ($paramIsPhpStyleArray) {
+ $q[$key] = array($value);
+ } else {
+ $q[$key] = $value;
+ }
+ } else {
+ // Uses false by default to represent keys with no trailing "=" sign.
+ $q->add($key, false);
+ }
+ }
+
+ // Use the duplicate aggregator if duplicates were found and not using PHP style arrays
+ if ($foundDuplicates && !$foundPhpStyle) {
+ $q->setAggregator(new DuplicateAggregator());
+ }
+
+ return $q;
+ }
+
+ /**
+ * Convert the query string parameters to a query string string
+ *
+ * @return string
+ * @throws RuntimeException
+ */
+ public function __toString()
+ {
+ if (!$this->data) {
+ return '';
+ }
+
+ $queryList = array();
+ foreach ($this->prepareData($this->data) as $name => $value) {
+ $queryList[] = $this->convertKvp($name, $value);
+ }
+
+ return implode($this->fieldSeparator, $queryList);
+ }
+
+ /**
+ * Get the query string field separator
+ *
+ * @return string
+ */
+ public function getFieldSeparator()
+ {
+ return $this->fieldSeparator;
+ }
+
+ /**
+ * Get the query string value separator
+ *
+ * @return string
+ */
+ public function getValueSeparator()
+ {
+ return $this->valueSeparator;
+ }
+
+ /**
+ * Returns the type of URL encoding used by the query string
+ *
+ * One of: false, "RFC 3986", or "application/x-www-form-urlencoded"
+ *
+ * @return bool|string
+ */
+ public function getUrlEncoding()
+ {
+ return $this->urlEncode;
+ }
+
+ /**
+ * Returns true or false if using URL encoding
+ *
+ * @return bool
+ */
+ public function isUrlEncoding()
+ {
+ return $this->urlEncode !== false;
+ }
+
+ /**
+ * Provide a function for combining multi-valued query string parameters into a single or multiple fields
+ *
+ * @param null|QueryAggregatorInterface $aggregator Pass in a QueryAggregatorInterface object to handle converting
+ * deeply nested query string variables into a flattened array.
+ * Pass null to use the default PHP style aggregator. For legacy
+ * reasons, this function accepts a callable that must accepts a
+ * $key, $value, and query object.
+ * @return self
+ * @see \Guzzle\Http\QueryString::aggregateUsingComma()
+ */
+ public function setAggregator(QueryAggregatorInterface $aggregator = null)
+ {
+ // Use the default aggregator if none was set
+ if (!$aggregator) {
+ if (!self::$defaultAggregator) {
+ self::$defaultAggregator = new PhpAggregator();
+ }
+ $aggregator = self::$defaultAggregator;
+ }
+
+ $this->aggregator = $aggregator;
+
+ return $this;
+ }
+
+ /**
+ * Set whether or not field names and values should be rawurlencoded
+ *
+ * @param bool|string $encode Set to TRUE to use RFC 3986 encoding (rawurlencode), false to disable encoding, or
+ * form_urlencoding to use application/x-www-form-urlencoded encoding (urlencode)
+ * @return self
+ */
+ public function useUrlEncoding($encode)
+ {
+ $this->urlEncode = ($encode === true) ? self::RFC_3986 : $encode;
+
+ return $this;
+ }
+
+ /**
+ * Set the query string separator
+ *
+ * @param string $separator The query string separator that will separate fields
+ *
+ * @return self
+ */
+ public function setFieldSeparator($separator)
+ {
+ $this->fieldSeparator = $separator;
+
+ return $this;
+ }
+
+ /**
+ * Set the query string value separator
+ *
+ * @param string $separator The query string separator that will separate values from fields
+ *
+ * @return self
+ */
+ public function setValueSeparator($separator)
+ {
+ $this->valueSeparator = $separator;
+
+ return $this;
+ }
+
+ /**
+ * Returns an array of url encoded field names and values
+ *
+ * @return array
+ */
+ public function urlEncode()
+ {
+ return $this->prepareData($this->data);
+ }
+
+ /**
+ * URL encodes a value based on the url encoding type of the query string object
+ *
+ * @param string $value Value to encode
+ *
+ * @return string
+ */
+ public function encodeValue($value)
+ {
+ if ($this->urlEncode == self::RFC_3986) {
+ return rawurlencode($value);
+ } elseif ($this->urlEncode == self::FORM_URLENCODED) {
+ return urlencode($value);
+ } else {
+ return (string) $value;
+ }
+ }
+
+ /**
+ * Url encode parameter data and convert nested query strings into a flattened hash.
+ *
+ * @param array $data The data to encode
+ *
+ * @return array Returns an array of encoded values and keys
+ */
+ protected function prepareData(array $data)
+ {
+ // If no aggregator is present then set the default
+ if (!$this->aggregator) {
+ $this->setAggregator(null);
+ }
+
+ $temp = array();
+ foreach ($data as $key => $value) {
+ if ($value === false || $value === null) {
+ // False and null will not include the "=". Use an empty string to include the "=".
+ $temp[$this->encodeValue($key)] = $value;
+ } elseif (is_array($value)) {
+ $temp = array_merge($temp, $this->aggregator->aggregate($key, $value, $this));
+ } else {
+ $temp[$this->encodeValue($key)] = $this->encodeValue($value);
+ }
+ }
+
+ return $temp;
+ }
+
+ /**
+ * Converts a key value pair that can contain strings, nulls, false, or arrays
+ * into a single string.
+ *
+ * @param string $name Name of the field
+ * @param mixed $value Value of the field
+ * @return string
+ */
+ private function convertKvp($name, $value)
+ {
+ if ($value === self::BLANK || $value === null || $value === false) {
+ return $name;
+ } elseif (!is_array($value)) {
+ return $name . $this->valueSeparator . $value;
+ }
+
+ $result = '';
+ foreach ($value as $v) {
+ $result .= $this->convertKvp($name, $v) . $this->fieldSeparator;
+ }
+
+ return rtrim($result, $this->fieldSeparator);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/ReadLimitEntityBody.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/ReadLimitEntityBody.php
new file mode 100644
index 0000000..ef28273
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/ReadLimitEntityBody.php
@@ -0,0 +1,122 @@
+setLimit($limit)->setOffset($offset);
+ }
+
+ /**
+ * Returns only a subset of the decorated entity body when cast as a string
+ * {@inheritdoc}
+ */
+ public function __toString()
+ {
+ if (!$this->body->isReadable() ||
+ (!$this->body->isSeekable() && $this->body->isConsumed())
+ ) {
+ return '';
+ }
+
+ $originalPos = $this->body->ftell();
+ $this->body->seek($this->offset);
+ $data = '';
+ while (!$this->feof()) {
+ $data .= $this->read(1048576);
+ }
+ $this->body->seek($originalPos);
+
+ return (string) $data ?: '';
+ }
+
+ public function isConsumed()
+ {
+ return $this->body->isConsumed() ||
+ ($this->body->ftell() >= $this->offset + $this->limit);
+ }
+
+ /**
+ * Returns the Content-Length of the limited subset of data
+ * {@inheritdoc}
+ */
+ public function getContentLength()
+ {
+ $length = $this->body->getContentLength();
+
+ return $length === false
+ ? $this->limit
+ : min($this->limit, min($length, $this->offset + $this->limit) - $this->offset);
+ }
+
+ /**
+ * Allow for a bounded seek on the read limited entity body
+ * {@inheritdoc}
+ */
+ public function seek($offset, $whence = SEEK_SET)
+ {
+ return $whence === SEEK_SET
+ ? $this->body->seek(max($this->offset, min($this->offset + $this->limit, $offset)))
+ : false;
+ }
+
+ /**
+ * Set the offset to start limiting from
+ *
+ * @param int $offset Offset to seek to and begin byte limiting from
+ *
+ * @return self
+ */
+ public function setOffset($offset)
+ {
+ $this->body->seek($offset);
+ $this->offset = $offset;
+
+ return $this;
+ }
+
+ /**
+ * Set the limit of bytes that the decorator allows to be read from the stream
+ *
+ * @param int $limit Total number of bytes to allow to be read from the stream
+ *
+ * @return self
+ */
+ public function setLimit($limit)
+ {
+ $this->limit = $limit;
+
+ return $this;
+ }
+
+ public function read($length)
+ {
+ // Check if the current position is less than the total allowed bytes + original offset
+ $remaining = ($this->offset + $this->limit) - $this->body->ftell();
+ if ($remaining > 0) {
+ // Only return the amount of requested data, ensuring that the byte limit is not exceeded
+ return $this->body->read(min($remaining, $length));
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/RedirectPlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/RedirectPlugin.php
new file mode 100644
index 0000000..1a824b8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/RedirectPlugin.php
@@ -0,0 +1,250 @@
+ array('onRequestSent', 100),
+ 'request.clone' => 'cleanupRequest',
+ 'request.before_send' => 'cleanupRequest'
+ );
+ }
+
+ /**
+ * Clean up the parameters of a request when it is cloned
+ *
+ * @param Event $event Event emitted
+ */
+ public function cleanupRequest(Event $event)
+ {
+ $params = $event['request']->getParams();
+ unset($params[self::REDIRECT_COUNT]);
+ unset($params[self::PARENT_REQUEST]);
+ }
+
+ /**
+ * Called when a request receives a redirect response
+ *
+ * @param Event $event Event emitted
+ */
+ public function onRequestSent(Event $event)
+ {
+ $response = $event['response'];
+ $request = $event['request'];
+
+ // Only act on redirect requests with Location headers
+ if (!$response || $request->getParams()->get(self::DISABLE)) {
+ return;
+ }
+
+ // Trace the original request based on parameter history
+ $original = $this->getOriginalRequest($request);
+
+ // Terminating condition to set the effective response on the original request
+ if (!$response->isRedirect() || !$response->hasHeader('Location')) {
+ if ($request !== $original) {
+ // This is a terminating redirect response, so set it on the original request
+ $response->getParams()->set(self::REDIRECT_COUNT, $original->getParams()->get(self::REDIRECT_COUNT));
+ $original->setResponse($response);
+ $response->setEffectiveUrl($request->getUrl());
+ }
+ return;
+ }
+
+ $this->sendRedirectRequest($original, $request, $response);
+ }
+
+ /**
+ * Get the original request that initiated a series of redirects
+ *
+ * @param RequestInterface $request Request to get the original request from
+ *
+ * @return RequestInterface
+ */
+ protected function getOriginalRequest(RequestInterface $request)
+ {
+ $original = $request;
+ // The number of redirects is held on the original request, so determine which request that is
+ while ($parent = $original->getParams()->get(self::PARENT_REQUEST)) {
+ $original = $parent;
+ }
+
+ return $original;
+ }
+
+ /**
+ * Create a redirect request for a specific request object
+ *
+ * Takes into account strict RFC compliant redirection (e.g. redirect POST with POST) vs doing what most clients do
+ * (e.g. redirect POST with GET).
+ *
+ * @param RequestInterface $request Request being redirected
+ * @param RequestInterface $original Original request
+ * @param int $statusCode Status code of the redirect
+ * @param string $location Location header of the redirect
+ *
+ * @return RequestInterface Returns a new redirect request
+ * @throws CouldNotRewindStreamException If the body needs to be rewound but cannot
+ */
+ protected function createRedirectRequest(
+ RequestInterface $request,
+ $statusCode,
+ $location,
+ RequestInterface $original
+ ) {
+ $redirectRequest = null;
+ $strict = $original->getParams()->get(self::STRICT_REDIRECTS);
+
+ // Switch method to GET for 303 redirects. 301 and 302 redirects also switch to GET unless we are forcing RFC
+ // compliance to emulate what most browsers do. NOTE: IE only switches methods on 301/302 when coming from a POST.
+ if ($request instanceof EntityEnclosingRequestInterface && ($statusCode == 303 || (!$strict && $statusCode <= 302))) {
+ $redirectRequest = RequestFactory::getInstance()->cloneRequestWithMethod($request, 'GET');
+ } else {
+ $redirectRequest = clone $request;
+ }
+
+ $redirectRequest->setIsRedirect(true);
+ // Always use the same response body when redirecting
+ $redirectRequest->setResponseBody($request->getResponseBody());
+
+ $location = Url::factory($location);
+ // If the location is not absolute, then combine it with the original URL
+ if (!$location->isAbsolute()) {
+ $originalUrl = $redirectRequest->getUrl(true);
+ // Remove query string parameters and just take what is present on the redirect Location header
+ $originalUrl->getQuery()->clear();
+ $location = $originalUrl->combine((string) $location, true);
+ }
+
+ $redirectRequest->setUrl($location);
+
+ // Add the parent request to the request before it sends (make sure it's before the onRequestClone event too)
+ $redirectRequest->getEventDispatcher()->addListener(
+ 'request.before_send',
+ $func = function ($e) use (&$func, $request, $redirectRequest) {
+ $redirectRequest->getEventDispatcher()->removeListener('request.before_send', $func);
+ $e['request']->getParams()->set(RedirectPlugin::PARENT_REQUEST, $request);
+ }
+ );
+
+ // Rewind the entity body of the request if needed
+ if ($redirectRequest instanceof EntityEnclosingRequestInterface && $redirectRequest->getBody()) {
+ $body = $redirectRequest->getBody();
+ // Only rewind the body if some of it has been read already, and throw an exception if the rewind fails
+ if ($body->ftell() && !$body->rewind()) {
+ throw new CouldNotRewindStreamException(
+ 'Unable to rewind the non-seekable entity body of the request after redirecting. cURL probably '
+ . 'sent part of body before the redirect occurred. Try adding acustom rewind function using on the '
+ . 'entity body of the request using setRewindFunction().'
+ );
+ }
+ }
+
+ return $redirectRequest;
+ }
+
+ /**
+ * Prepare the request for redirection and enforce the maximum number of allowed redirects per client
+ *
+ * @param RequestInterface $original Original request
+ * @param RequestInterface $request Request to prepare and validate
+ * @param Response $response The current response
+ *
+ * @return RequestInterface
+ */
+ protected function prepareRedirection(RequestInterface $original, RequestInterface $request, Response $response)
+ {
+ $params = $original->getParams();
+ // This is a new redirect, so increment the redirect counter
+ $current = $params[self::REDIRECT_COUNT] + 1;
+ $params[self::REDIRECT_COUNT] = $current;
+ // Use a provided maximum value or default to a max redirect count of 5
+ $max = isset($params[self::MAX_REDIRECTS]) ? $params[self::MAX_REDIRECTS] : $this->defaultMaxRedirects;
+
+ // Throw an exception if the redirect count is exceeded
+ if ($current > $max) {
+ $this->throwTooManyRedirectsException($original, $max);
+ return false;
+ } else {
+ // Create a redirect request based on the redirect rules set on the request
+ return $this->createRedirectRequest(
+ $request,
+ $response->getStatusCode(),
+ trim($response->getLocation()),
+ $original
+ );
+ }
+ }
+
+ /**
+ * Send a redirect request and handle any errors
+ *
+ * @param RequestInterface $original The originating request
+ * @param RequestInterface $request The current request being redirected
+ * @param Response $response The response of the current request
+ *
+ * @throws BadResponseException|\Exception
+ */
+ protected function sendRedirectRequest(RequestInterface $original, RequestInterface $request, Response $response)
+ {
+ // Validate and create a redirect request based on the original request and current response
+ if ($redirectRequest = $this->prepareRedirection($original, $request, $response)) {
+ try {
+ $redirectRequest->send();
+ } catch (BadResponseException $e) {
+ $e->getResponse();
+ if (!$e->getResponse()) {
+ throw $e;
+ }
+ }
+ }
+ }
+
+ /**
+ * Throw a too many redirects exception for a request
+ *
+ * @param RequestInterface $original Request
+ * @param int $max Max allowed redirects
+ *
+ * @throws TooManyRedirectsException when too many redirects have been issued
+ */
+ protected function throwTooManyRedirectsException(RequestInterface $original, $max)
+ {
+ $original->getEventDispatcher()->addListener(
+ 'request.complete',
+ $func = function ($e) use (&$func, $original, $max) {
+ $original->getEventDispatcher()->removeListener('request.complete', $func);
+ $str = "{$max} redirects were issued for this request:\n" . $e['request']->getRawHeaders();
+ throw new TooManyRedirectsException($str);
+ }
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Resources/cacert.pem b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Resources/cacert.pem
new file mode 100644
index 0000000..18ce703
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Resources/cacert.pem
@@ -0,0 +1,3870 @@
+##
+## Bundle of CA Root Certificates
+##
+## Certificate data from Mozilla downloaded on: Wed Aug 13 21:49:32 2014
+##
+## This is a bundle of X.509 certificates of public Certificate Authorities
+## (CA). These were automatically extracted from Mozilla's root certificates
+## file (certdata.txt). This file can be found in the mozilla source tree:
+## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
+##
+## It contains the certificates in PEM format and therefore
+## can be directly used with curl / libcurl / php_curl, or with
+## an Apache+mod_ssl webserver for SSL client authentication.
+## Just configure this file as the SSLCACertificateFile.
+##
+## Conversion done with mk-ca-bundle.pl verison 1.22.
+## SHA1: bf2c15b3019e696660321d2227d942936dc50aa7
+##
+
+
+GTE CyberTrust Global Root
+==========================
+-----BEGIN CERTIFICATE-----
+MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
+Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
+A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
+MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
+Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
+IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
+sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
+HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
+AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
+M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
+NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
+-----END CERTIFICATE-----
+
+Thawte Server CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
+dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
+AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
+b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
+BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
+c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
+A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
+ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
+/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
+1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
+MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
+GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
+GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
+-----END CERTIFICATE-----
+
+Thawte Premium Server CA
+========================
+-----BEGIN CERTIFICATE-----
+MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
+dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
+AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
+ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
+AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
+VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
+aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
+cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
+aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
+Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
+qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
+SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
+8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
+UCemDaYj+bvLpgcUQg==
+-----END CERTIFICATE-----
+
+Equifax Secure CA
+=================
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
+ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
+B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
+nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
+fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
+8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
+A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
+CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
+A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
+spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
+Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
+zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
+BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
+70+sB3c4
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
+FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
+IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
+XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
+IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
+f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
+hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
+TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
+WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
+Tqj/ZA1k
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority - G2
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
+dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
+dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
+FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
+lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
+MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
+1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
+Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
+-----END CERTIFICATE-----
+
+GlobalSign Root CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
+GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
+b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
+BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
+VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
+DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
+THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
+Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
+c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
+gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
+AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
+Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
+j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
+hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
+X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
+-----END CERTIFICATE-----
+
+GlobalSign Root CA - R2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
+YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
+bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
+aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
+bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
+ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
+s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
+S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
+TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
+ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
+FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
+YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
+BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
+9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
+01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
+9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
+
+ValiCert Class 1 VA
+===================
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
+b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
+bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
+MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
+d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
+UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
+LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
+GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
+DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
+lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
+icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
+Orf1LXLI
+-----END CERTIFICATE-----
+
+ValiCert Class 2 VA
+===================
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
+b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
+bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
+MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
+d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
+UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
+LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
+CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
+ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
+SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
+UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
+W9ViH0Pd
+-----END CERTIFICATE-----
+
+RSA Root Certificate 1
+======================
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
+b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
+bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
+MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
+d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
+UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
+LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
+3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
+BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
+3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
+V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
+on+jjBXu
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority - G3
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
+dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
+EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
+cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
+EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
+055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
+j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
+xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
+t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+
+Verisign Class 4 Public Primary Certification Authority - G3
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
+dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
+tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
+8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
+Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
+Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
+mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
+RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
+UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+
+Entrust.net Secure Server CA
+============================
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
+BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
+cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
+ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
+A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
+eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
+dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
+aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
+gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
+ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
+CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
+dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
+NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
+HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
+BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
+Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
+n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
+
+Entrust.net Premium 2048 Secure Server CA
+=========================================
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
+ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
+bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
+BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
+NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
+d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
+MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
+ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
+Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
+hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
+nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
+VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
+KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
+T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
+zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
+J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
+nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
+-----END CERTIFICATE-----
+
+Baltimore CyberTrust Root
+=========================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
+ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
+ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
+SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
+dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
+uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
+UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
+G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
+XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
+l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
+VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
+BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
+cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
+hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
+Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
+RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
+
+Equifax Secure Global eBusiness CA
+==================================
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
+bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
+HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
+b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
+PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
+qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
+hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
+BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
+MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
+I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
+NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+-----END CERTIFICATE-----
+
+Equifax Secure eBusiness CA 1
+=============================
+-----BEGIN CERTIFICATE-----
+MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
+LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
+ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
+IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
+1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
+IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
+MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
+Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
+AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
+lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
+KpYrtWKmpj29f5JZzVoqgrI3eQ==
+-----END CERTIFICATE-----
+
+AddTrust Low-Value Services Root
+================================
+-----BEGIN CERTIFICATE-----
+MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
+cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
+CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
+ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
+54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
+oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
+Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
+GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
+HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
+AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
+RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
+HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
+ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
+iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
+eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
+mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
+ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
+-----END CERTIFICATE-----
+
+AddTrust External Root
+======================
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
+VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
+NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
+cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
+Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
+Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
+aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
+2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
+7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
+BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
+VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
+VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
+IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
+j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
+e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
+G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+
+AddTrust Public Services Root
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
+cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
+BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
+dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
+nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
+d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
+Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
+HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
+A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
+A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
+JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
+GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
+Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
+EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+-----END CERTIFICATE-----
+
+AddTrust Qualified Certificates Root
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
+cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
+CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
+IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
+64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
+KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
+L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
+wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
+MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
+BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
+azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
+ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
+GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
+dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
+RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
+iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
+-----END CERTIFICATE-----
+
+Entrust Root Certification Authority
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
+BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
+b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
+A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
+MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
+MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
+Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
+dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
+A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
+Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
+j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
+rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
+DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
+MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
+hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
+Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
+v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
+W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
+tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
+-----END CERTIFICATE-----
+
+RSA Security 2048 v3
+====================
+-----BEGIN CERTIFICATE-----
+MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
+ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
+MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
+BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
+Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
+WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
+KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
+MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
+FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
+v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
+0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
+VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
+nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
+pKnXwiJPZ9d37CAFYd4=
+-----END CERTIFICATE-----
+
+GeoTrust Global CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
+MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
+LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
+BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
+8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
+T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
+vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
+AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
+DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
+zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
+d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
+mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
+XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
+Mw==
+-----END CERTIFICATE-----
+
+GeoTrust Global CA 2
+====================
+-----BEGIN CERTIFICATE-----
+MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
+MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
+LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
+NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
+LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
+Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
+HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
+K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
+srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
+ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
+OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
+x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
+H4z1Ir+rzoPz4iIprn2DQKi6bA==
+-----END CERTIFICATE-----
+
+GeoTrust Universal CA
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
+MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
+Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
+JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
+RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
+7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
+8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
+qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
+Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
+Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
+KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
+ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
+XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
+hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
+aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
+qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
+oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
+xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
+KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
+DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
+xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
+p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
+P/rmMuGNG2+k5o7Y+SlIis5z/iw=
+-----END CERTIFICATE-----
+
+GeoTrust Universal CA 2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
+MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
+SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
+A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
+DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
+j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
+JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
+QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
+WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
+20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
+ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
+SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
+8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
+BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
+dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
+4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
+A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
+Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
+pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
+FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
+gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
+X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
+-----END CERTIFICATE-----
+
+America Online Root Certification Authority 1
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
+A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
+T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
+v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
+DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
+sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
+8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
+o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
+GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
+VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
+3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
+Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
+sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
+-----END CERTIFICATE-----
+
+America Online Root Certification Authority 2
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
+A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
+T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
+fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
+f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
+qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
+RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
+gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
+6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
+FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
+Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
+B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
+aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
+T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
++DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
+JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
+zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
+ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
+1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
+GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
+Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
+cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
+-----END CERTIFICATE-----
+
+Visa eCommerce Root
+===================
+-----BEGIN CERTIFICATE-----
+MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
+EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
+QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
+WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
+VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
+bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
+F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
+RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
+TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
+/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
+GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
+MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
+CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
+YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
+zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
+YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
+398znM/jra6O1I7mT1GvFpLgXPYHDw==
+-----END CERTIFICATE-----
+
+Certum Root CA
+==============
+-----BEGIN CERTIFICATE-----
+MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
+ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
+Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
+by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
+wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
+kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
+89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
+Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
+NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
+hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
+GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
+0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
+qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
+-----END CERTIFICATE-----
+
+Comodo AAA Services root
+========================
+-----BEGIN CERTIFICATE-----
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
+MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
+c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
+BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
+C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
+i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
+Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
+Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
+Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
+BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
+cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
+LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
+7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
+8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
+12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
+-----END CERTIFICATE-----
+
+Comodo Secure Services root
+===========================
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
+MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
+Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
+BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
+9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
+rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
+oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
+p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
+FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
+gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
+YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
+aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
+4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
+Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
+DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
+pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
+RR3B7Hzs/Sk=
+-----END CERTIFICATE-----
+
+Comodo Trusted Services root
+============================
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
+MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
+bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
+IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
+3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
+/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
+juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
+ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
+DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
+ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
+cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
+uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
+pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
+BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
+R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
+9y5Xt5hwXsjEeLBi
+-----END CERTIFICATE-----
+
+QuoVadis Root CA
+================
+-----BEGIN CERTIFICATE-----
+MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
+ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
+MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
+cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
+EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
+J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
+F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
+YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
+AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
+PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
+ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
+MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
+YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
+ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
+Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
+Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
+BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
+FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
+tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
+fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
+LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
+gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
+5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
+5nrQNiOKSnQ2+Q==
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 2
+==================
+-----BEGIN CERTIFICATE-----
+MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
+EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
+ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
+XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
+lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
+lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
+lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
+66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
+wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
+D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
+BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
+J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
+DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
+a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
+ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
+Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
+UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
+VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
+IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
+WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
+f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
+4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
+VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 3
+==================
+-----BEGIN CERTIFICATE-----
+MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
+EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
+OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
+DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
+KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
+DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
+BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
+p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
+nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
+MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
+Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
+uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
+BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
+YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
+aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
+BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
+ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
+AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
+qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
+hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
+POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
+Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
+8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
+bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
+g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
+vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
+qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
+-----END CERTIFICATE-----
+
+Security Communication Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
+U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
+HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
+U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
+8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
+DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
+5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
+DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
+JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
+DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
+0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
+mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
+s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
+6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
+FL39vmwLAw==
+-----END CERTIFICATE-----
+
+Sonera Class 2 Root CA
+======================
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
+U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
+NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
+IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
+/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
+dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
+f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
+tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
+nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
+XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
+0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
+cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
+Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
+EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
+llpwrN9M
+-----END CERTIFICATE-----
+
+Staat der Nederlanden Root CA
+=============================
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
+ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
+HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
+bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
+vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
+jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
+C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
+vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
+22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
+HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
+dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
+BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
+EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
+MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
+nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
+iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
+-----END CERTIFICATE-----
+
+TDC Internet Root CA
+====================
+-----BEGIN CERTIFICATE-----
+MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
+ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
+NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
+ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
+xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
+znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
+5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
+otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
+AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
+VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
+MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
+AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
+UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
+CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
+gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
+2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
+O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
+Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
+-----END CERTIFICATE-----
+
+UTN DATACorp SGC Root CA
+========================
+-----BEGIN CERTIFICATE-----
+MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
+BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
+IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
+BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
+MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
+HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
+dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
+raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
+wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
+9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
+33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
+DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
+BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
+LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
+DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
+Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
+I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
+EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
+DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
+-----END CERTIFICATE-----
+
+UTN USERFirst Hardware Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
+BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
+IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
+BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
+OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
+eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
+ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
+wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
+tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
+i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
+Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
+gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
+lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
+UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
+BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
+//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
+XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
+lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
+iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
+nfhmqA==
+-----END CERTIFICATE-----
+
+Camerfirma Chambers of Commerce Root
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
+QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
+ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
+NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
+cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
+MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
+AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
+xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
+NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
+DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
+d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
+EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
+cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
+AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
+bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
+VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
+aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
+fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
+L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
+UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
+ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
+erfutGWaIZDgqtCYvDi1czyL+Nw=
+-----END CERTIFICATE-----
+
+Camerfirma Global Chambersign Root
+==================================
+-----BEGIN CERTIFICATE-----
+MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
+QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
+ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
+NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
+YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
+MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
+ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
+1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
+by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
+6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
+8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
+BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
+aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
+Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
+aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
+ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
+bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
+PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
+gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
+PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
+IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
+t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
+-----END CERTIFICATE-----
+
+NetLock Notary (Class A) Root
+=============================
+-----BEGIN CERTIFICATE-----
+MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
+EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
+dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
+ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
+DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
+EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
+VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
+cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
+D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
+z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
+/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
+tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
+4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
+A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
+Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
+bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
+IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
+LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
+ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
+IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
+IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
+b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
+bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
+Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
+bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
+ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
+ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
+CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
+KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
+8CgHrTwXZoi1/baI
+-----END CERTIFICATE-----
+
+NetLock Business (Class B) Root
+===============================
+-----BEGIN CERTIFICATE-----
+MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
+CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
+BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
+VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
+VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
+bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
+VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
+iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
+o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
+1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
+HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
+RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
+dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
+ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
+c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
+YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
+c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
+Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
+bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
+IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
+YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
+cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
+43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
+stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
+-----END CERTIFICATE-----
+
+NetLock Express (Class C) Root
+==============================
+-----BEGIN CERTIFICATE-----
+MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
+CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
+BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
+KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
+BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
+dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
+ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
+jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
+W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
+euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
+DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
+RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
+YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
+IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
+aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
+ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
+ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
+dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
+emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
+IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
+UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
+YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
+xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
+gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
+-----END CERTIFICATE-----
+
+XRamp Global CA Root
+====================
+-----BEGIN CERTIFICATE-----
+MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
+BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
+dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
+HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
+U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
+IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
+foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
+zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
+AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
+xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
+oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
+AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
+/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
+qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
+nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
+8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
+-----END CERTIFICATE-----
+
+Go Daddy Class 2 CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
+VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
+A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
+RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
+ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
+2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
+qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
+YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
+vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
+BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
+atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
+MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
+A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
+PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
+I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
+Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
+vZ8=
+-----END CERTIFICATE-----
+
+Starfield Class 2 CA
+====================
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
+U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
+MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
+A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
+SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
+bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
+JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
+epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
+F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
+MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
+hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
+bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
+afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
+PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
+xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
+KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
+QBFGmh95DmK/D5fs4C8fF5Q=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority
+================================
+-----BEGIN CERTIFICATE-----
+MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
+ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
+NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
+LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
+U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
+o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
+Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
+eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
+2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
+6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
+osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
+untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
+UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
+37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
+FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
+Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
+YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
+AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
+Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
+U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
+LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
+cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
+dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
+AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
+3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
+vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
+fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
+fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
+EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
+yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
+1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
+lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
+g14=
+-----END CERTIFICATE-----
+
+Taiwan GRCA
+===========
+-----BEGIN CERTIFICATE-----
+MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
+EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
+DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
+dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
+w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
+BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
+1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
+htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
+J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
+Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
+B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
+O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
+lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
+HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
+09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
+TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
+Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
+Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
+D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
+DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
+Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
+7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
+CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
+-----END CERTIFICATE-----
+
+Swisscom Root CA 1
+==================
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
+EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
+dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
+MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
+aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
+IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
+MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
+NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
+AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
+b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
+7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
+cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
+WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
+haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
+MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
+HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
+BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
+MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
+jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
+MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
+VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
+vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
+OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
+1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
+nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
+x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
+NY6E0F/6MBr1mmz0DlP5OlvRHA==
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root CA
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
+IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
+MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
+ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
+9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
+UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
+/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
+oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
+GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
+66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
+hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
+EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
+SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
+8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
+
+DigiCert Global Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
+HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
+MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
+dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
+TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
+BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
+4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
+7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
+o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
+8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
+BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
+EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
+tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
+UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+
+DigiCert High Assurance EV Root CA
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
+KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
+MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
+MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
+Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
+Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
+OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
+MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
+NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
+h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
+Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
+JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
+V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
+myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
+mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
+-----END CERTIFICATE-----
+
+Certplus Class 2 Primary CA
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
+BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
+OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
+dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
+5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
+Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
+YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
+e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
+CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
+YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
+L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
+P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
+TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
+7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
+//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
+l7+ijrRU
+-----END CERTIFICATE-----
+
+DST Root CA X3
+==============
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
+ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
+DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
+cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
+rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
+UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
+xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
+utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
+AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
+MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
+dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
+GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
+RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
+fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
+-----END CERTIFICATE-----
+
+DST ACES CA X6
+==============
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
+MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
+MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
+CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
+DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
+pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
+GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
+MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
+Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
+dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
+CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
+5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
+Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
+nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
+vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
+oKfN5XozNmr6mis=
+-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 1
+==============================================
+-----BEGIN CERTIFICATE-----
+MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
+MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
+acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
+MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
+U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
+TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
+aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
+yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
+Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
+8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
+W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
+BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
+sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
+q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
+B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
+nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
+-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 2
+==============================================
+-----BEGIN CERTIFICATE-----
+MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
+MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
+QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
+MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
+dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
+A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
+acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
+LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
+x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
+QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
+5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
+AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
+A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
+Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
+Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
+9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
+UrbnBEI=
+-----END CERTIFICATE-----
+
+SwissSign Gold CA - G2
+======================
+-----BEGIN CERTIFICATE-----
+MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
+EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
+MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
+c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
+t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
+jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
+vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
+ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
+AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
+jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
+peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
+7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
+GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
+OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
+L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
+5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
+44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
+Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
+Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
+mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
+vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
+KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
+NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
+viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+-----END CERTIFICATE-----
+
+SwissSign Silver CA - G2
+========================
+-----BEGIN CERTIFICATE-----
+MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
+BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
+DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
+aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
+9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
+N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
+6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
+MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
+qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
+FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
+ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
+celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
+CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
+tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
+cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
+4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
+kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
+3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
+/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
+DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
+e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
+WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
+DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
+DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority
+========================================
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
+CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
+cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
+b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
+nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
+RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
+tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
+hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
+Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
+NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
+Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
+1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+-----END CERTIFICATE-----
+
+thawte Primary Root CA
+======================
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
+BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
+aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
+MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
+SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
+KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
+FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
+oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
+1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
+q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
+aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
+afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
+AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
+uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
+jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
+z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
+-----END CERTIFICATE-----
+
+VeriSign Class 3 Public Primary Certification Authority - G5
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
+BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
+ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
+IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
+biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
+dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
+j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
+Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
+Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
+fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
+Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
+SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
+KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
+Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
+ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+
+SecureTrust CA
+==============
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
+dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
+BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
+OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
+DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
+GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
+01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
+ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
+aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
+KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
+SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
+mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
+nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
+3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
+-----END CERTIFICATE-----
+
+Secure Global CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
+bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
+MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
+Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
+YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
+bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
+8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
+HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
+0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
+oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
+MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
+CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
+3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
+f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
+-----END CERTIFICATE-----
+
+COMODO Certification Authority
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
+MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
+T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
+xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
+4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
+1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
+rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
+b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
+AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
+OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
+RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
+IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
+-----END CERTIFICATE-----
+
+Network Solutions Certificate Authority
+=======================================
+-----BEGIN CERTIFICATE-----
+MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
+EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
+IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
+MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
+MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
+jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
+aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
+crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
+/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
+AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
+bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
+A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
+4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
+GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
+wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
+ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
+-----END CERTIFICATE-----
+
+WellsSecure Public Root Certificate Authority
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
+F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
+NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
+MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
+bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
+VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
+iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
+i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
+bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
+K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
+AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
+cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
+lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
+i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
+GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
+K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
+bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
+qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
+E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
+tylv2G0xffX8oRAHh84vWdw+WNs=
+-----END CERTIFICATE-----
+
+COMODO ECC Certification Authority
+==================================
+-----BEGIN CERTIFICATE-----
+MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
+R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
+ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
+GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
+4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
+wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
+FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
+U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
+-----END CERTIFICATE-----
+
+IGC/A
+=====
+-----BEGIN CERTIFICATE-----
+MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
+VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
+Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
+MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
+EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
+STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
+TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
+So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
+HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
+frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
+tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
+egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
+iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
+q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
+MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
+Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
+lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
+0mBWWg==
+-----END CERTIFICATE-----
+
+Security Communication EV RootCA1
+=================================
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
+U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
+dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
+BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
+Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
+/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
+WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
+ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
+bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
+9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
+iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
+Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
+mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
+T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
+-----END CERTIFICATE-----
+
+OISTE WISeKey Global Root GA CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
+BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
+A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
+bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
+VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
+IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
+IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
+Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
+Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
+d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
+/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
+LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
+KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
+MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
+hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
+okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
+-----END CERTIFICATE-----
+
+Microsec e-Szigno Root CA
+=========================
+-----BEGIN CERTIFICATE-----
+MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
+BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
+EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
+MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
+dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
+GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
+d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
+oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
+QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
+PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
+MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
+IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
+VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
+LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
+dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
+AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
+4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
+AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
+egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
+Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
+PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
+c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
+cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
+IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
+WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
+MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
+MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
+Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
+HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
+nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
+aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
+86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
+yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
+S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
+-----END CERTIFICATE-----
+
+Certigna
+========
+-----BEGIN CERTIFICATE-----
+MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
+EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
+MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
+Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
+XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
+GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
+ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
+DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
+Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
+tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
+BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
+SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
+hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
+PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
+1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
+WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
+-----END CERTIFICATE-----
+
+AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
+======================================
+-----BEGIN CERTIFICATE-----
+MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
+AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
+LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
+HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
+U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
+IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
+yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
+2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
+4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
+2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
+8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
+HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
+Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
+5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
+czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
+AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
+ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
+BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
+cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
+AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
+EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
+/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
+MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
+3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
+eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
+/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
+RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
+Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
+-----END CERTIFICATE-----
+
+TC TrustCenter Class 2 CA II
+============================
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
+IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
+MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
+c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
+AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
+IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
+xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
+Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
+SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
+7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
+Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
+cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
+SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
+dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
+KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
+TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
+JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
+vQ==
+-----END CERTIFICATE-----
+
+TC TrustCenter Class 3 CA II
+============================
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
+IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
+MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
+c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
+AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
+yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
+6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
+uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
+2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
+7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
+Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
+cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
+SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
+O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
+yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
+IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
+092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
+5A==
+-----END CERTIFICATE-----
+
+TC TrustCenter Universal CA I
+=============================
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
+IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
+MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
+VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
+JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
+qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
+xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
+ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
+gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
+BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
+1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
+vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
+ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
+ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
+7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
+-----END CERTIFICATE-----
+
+Deutsche Telekom Root CA 2
+==========================
+-----BEGIN CERTIFICATE-----
+MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
+RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
+A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
+MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
+A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
+b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
+bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
+KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
+AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
+Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
+jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
+HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
+E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
+zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
+rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
+dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
+Cm26OWMohpLzGITY+9HPBVZkVw==
+-----END CERTIFICATE-----
+
+ComSign Secured CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
+AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
+NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
+QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
+49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
+7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
+kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
+9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
+AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
+U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
+j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
+AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
+BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
+FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
+51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
+OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
+-----END CERTIFICATE-----
+
+Cybertrust Global Root
+======================
+-----BEGIN CERTIFICATE-----
+MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
+ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
+MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
+ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
+0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
+AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
+89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
+8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
+MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
+A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
+lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
+5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
+hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
+X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
+WL1WMRJOEcgh4LMRkWXbtKaIOM5V
+-----END CERTIFICATE-----
+
+ePKI Root Certification Authority
+=================================
+-----BEGIN CERTIFICATE-----
+MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
+EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
+Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
+MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
+MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
+IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
+lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
+qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
+12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
+WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
+lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
+vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
+Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
+MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
+ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
+1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
+KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
+xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
+NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
+GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
+xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
+gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
+sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
+BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
+-----END CERTIFICATE-----
+
+T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
+=============================================================================================================================
+-----BEGIN CERTIFICATE-----
+MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
+DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
+aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
+b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
+BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
+S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
+MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
+IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
+n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
+IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
+dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
+cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
+Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
+xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
+6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
+hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
+BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
+N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
+y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
+LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
+dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
+-----END CERTIFICATE-----
+
+Buypass Class 2 CA 1
+====================
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
+MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
+c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
+cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
+0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
+0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
+uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
+AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
+1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
+7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
+fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
+wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
+-----END CERTIFICATE-----
+
+Buypass Class 3 CA 1
+====================
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
+MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
+c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
+ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
+n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
+AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
+1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
+AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
+pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
+EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
+htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
+el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
+-----END CERTIFICATE-----
+
+EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
+==========================================================================
+-----BEGIN CERTIFICATE-----
+MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
+QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
+Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
+ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
+IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
+X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
+gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
+eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
+TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
+Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
+uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
+qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
+ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
+Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
+Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
+FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
+zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
+XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
+bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
+RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
+1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
+2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
+Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
+AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
+-----END CERTIFICATE-----
+
+certSIGN ROOT CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
+VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
+Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
+CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
+JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
+rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
+ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
+0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
+AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
+Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
+AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
+SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
+x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
+vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
+TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
+-----END CERTIFICATE-----
+
+CNNIC ROOT
+==========
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
+ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
+OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
+o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
+VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
+VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
+czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
+y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
+wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
+lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
+Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
+O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
+BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
+G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
+mxE=
+-----END CERTIFICATE-----
+
+ApplicationCA - Japanese Government
+===================================
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
+SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
+MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
+cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
+fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
+wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
+jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
+nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
+WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
+BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
+vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
+o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
+/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
+io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
+dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
+rosot4LKGAfmt1t06SAZf7IbiVQ=
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority - G3
+=============================================
+-----BEGIN CERTIFICATE-----
+MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
+NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
+YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
+LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
+K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
+c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
+IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
+dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
+2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
+cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
+Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
+AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
+t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
+-----END CERTIFICATE-----
+
+thawte Primary Root CA - G2
+===========================
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
+VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
+IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
+Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
+MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
+b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
+IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
+LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
+8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
+mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
+G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
+rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
+
+thawte Primary Root CA - G3
+===========================
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
+BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
+aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
+ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
+VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
+A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
+P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
+7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
+vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
+KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
+A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
+t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
+8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
+er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority - G2
+=============================================
+-----BEGIN CERTIFICATE-----
+MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
+OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
+MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
+b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
+BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
+KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
+VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
+EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
+ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
+npaqBA+K
+-----END CERTIFICATE-----
+
+VeriSign Universal Root Certification Authority
+===============================================
+-----BEGIN CERTIFICATE-----
+MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
+BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
+ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
+IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
+IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
+1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
+MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
+9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
+AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
+tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
+CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
+a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
+DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
+Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
+Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
+P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
+wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
+mJO37M2CYfE45k+XmCpajQ==
+-----END CERTIFICATE-----
+
+VeriSign Class 3 Public Primary Certification Authority - G4
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
+VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
+b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
+ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
+cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
+b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
+IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
+Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
+rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
+/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
+HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
+Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
+A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
+AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
+-----END CERTIFICATE-----
+
+NetLock Arany (Class Gold) Főtanúsítvány
+============================================
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
+A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
+dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
+cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
+MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
+ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
+c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
+0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
+/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
+H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
+fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
+neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
+BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
+qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
+YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
+bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
+NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
+dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
+-----END CERTIFICATE-----
+
+Staat der Nederlanden Root CA - G2
+==================================
+-----BEGIN CERTIFICATE-----
+MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
+CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
+TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
+ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
+5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
+vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
+CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
+e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
+OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
+CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
+48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
+trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
+qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
+AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
+ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
+A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
+f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
+kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
+CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
+URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
+CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
+oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
+IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
+66+KAQ==
+-----END CERTIFICATE-----
+
+CA Disig
+========
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
+QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
+MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
+bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
+GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
+Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
+hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
+ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
+gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
+AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
+aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
+ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
+BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
+WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
+mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
+CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
+ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
+4Z7CRneC9VkGjCFMhwnN5ag=
+-----END CERTIFICATE-----
+
+Juur-SK
+=======
+-----BEGIN CERTIFICATE-----
+MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
+c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
+DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
+SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
+aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
+TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
+UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
+Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
+MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
+HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
+AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
+cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
+AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
+cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
+FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
+A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
+ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
+abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
+IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
+Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
+yyqcjg==
+-----END CERTIFICATE-----
+
+Hongkong Post Root CA 1
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
+DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
+NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
+IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
+ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
+auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
+qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
+V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
+HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
+h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
+l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
+IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
+T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
+c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
+-----END CERTIFICATE-----
+
+SecureSign RootCA11
+===================
+-----BEGIN CERTIFICATE-----
+MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
+SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
+b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
+KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
+cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
+TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
+wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
+g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
+O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
+bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
+t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
+OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
+bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
+Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
+y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
+lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
+-----END CERTIFICATE-----
+
+ACEDICOM Root
+=============
+-----BEGIN CERTIFICATE-----
+MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
+T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
+MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
+A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
+WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
+YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
+MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
+m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
+HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
+xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
+3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
+2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
+TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
+4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
+9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
+bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
+aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
+eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
+zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
+ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
+KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
+nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
+I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
+MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
+tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
+FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
+IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
+XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
+IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
+f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
+hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
+CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
+bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
+D/xwzoiQ
+-----END CERTIFICATE-----
+
+Microsec e-Szigno Root CA 2009
+==============================
+-----BEGIN CERTIFICATE-----
+MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
+MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
+c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
+dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
+BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
+U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
+fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
+0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
+pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
+1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
+AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
+QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
+FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
+lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
+I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
+tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
+yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
+LXpUq3DDfSJlgnCW
+-----END CERTIFICATE-----
+
+E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
+===================================================
+-----BEGIN CERTIFICATE-----
+MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
+EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
+ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
+MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
+cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
+aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
+8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
+jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
+JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
+9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
+AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
+SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
+F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
+D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
+Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
+fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
+-----END CERTIFICATE-----
+
+GlobalSign Root CA - R3
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
+YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
+bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
+aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
+bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
+iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
+0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
+rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
+OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
+xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
+lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
+EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
+bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
+YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
+kpeDMdmztcpHWD9f
+-----END CERTIFICATE-----
+
+Autoridad de Certificacion Firmaprofesional CIF A62634068
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
+BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
+QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
+NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
+Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
+B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
+7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
+ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
+plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
+MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
+LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
+bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
+vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
+EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
+DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
+cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
+bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
+ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
+51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
+R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
+T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
+Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
+osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
+crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
+saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
+KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
+6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
+-----END CERTIFICATE-----
+
+Izenpe.com
+==========
+-----BEGIN CERTIFICATE-----
+MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
+EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
+MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
+QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
+03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
+ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
+PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
+OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
+F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
+0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
+leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
+AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
+SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
+NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
+MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
+BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
+Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
+kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
+hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
+g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
+aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
+nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
+ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
+Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
+WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
+-----END CERTIFICATE-----
+
+Chambers of Commerce Root - 2008
+================================
+-----BEGIN CERTIFICATE-----
+MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
+MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
+bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
+QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
+Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
+ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
+EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
+cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
+XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
+h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
+ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
+NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
+D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
+lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
+0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
+ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
+EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
+G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
+BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
+bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
+bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
+CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
+AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
+wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
+3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
+RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
+M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
+YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
+9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
+zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
+nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
+OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
+-----END CERTIFICATE-----
+
+Global Chambersign Root - 2008
+==============================
+-----BEGIN CERTIFICATE-----
+MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
+MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
+bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
+QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
+NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
+Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
+QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
+aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
+VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
+XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
+ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
+/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
+TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
+H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
+Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
+HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
+wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
+AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
+BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
+BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
+aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
+aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
+1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
+dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
+/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
+ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
+dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
+9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
+foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
+qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
+P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
+c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
+09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
+-----END CERTIFICATE-----
+
+Go Daddy Root Certificate Authority - G2
+========================================
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
+MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
+MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
+b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
+A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
+9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
+fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
+NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
+BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
+vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
+5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
+N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
+-----END CERTIFICATE-----
+
+Starfield Root Certificate Authority - G2
+=========================================
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
+b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
+eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
+DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
+VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
+dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
+W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
+bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
+N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
+ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
+JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
+TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
+4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
+F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
+pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
+c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
+-----END CERTIFICATE-----
+
+Starfield Services Root Certificate Authority - G2
+==================================================
+-----BEGIN CERTIFICATE-----
+MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
+b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
+IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
+BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
+dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
+h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
+hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
+LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
+rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
+SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
+E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
+xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
+iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
+YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
+-----END CERTIFICATE-----
+
+AffirmTrust Commercial
+======================
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
+MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
+bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
+DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
+C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
+BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
+MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
+HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
+hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
+qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
+0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
+sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
+-----END CERTIFICATE-----
+
+AffirmTrust Networking
+======================
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
+MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
+bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
+Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
+dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
+/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
+h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
+HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
+UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
+12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
+WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
+/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
+-----END CERTIFICATE-----
+
+AffirmTrust Premium
+===================
+-----BEGIN CERTIFICATE-----
+MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
+OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
+dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
+BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
+5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
+GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
+p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
+S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
+6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
+/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
+MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
+Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
+6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
+L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
+BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
+IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
+g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
+zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
+-----END CERTIFICATE-----
+
+AffirmTrust Premium ECC
+=======================
+-----BEGIN CERTIFICATE-----
+MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
+BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
+MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
+cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
+N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
+BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
+BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
+57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
+eQ==
+-----END CERTIFICATE-----
+
+Certum Trusted Network CA
+=========================
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
+ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
+MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
+ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
+l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
+J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
+fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
+cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
+Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
+DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
+jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
+mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
+Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
+03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
+-----END CERTIFICATE-----
+
+Certinomis - Autorité Racine
+=============================
+-----BEGIN CERTIFICATE-----
+MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
+Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
+LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
+A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
+JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
+wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
+Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
+2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
+jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
+c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
+lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
+xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
+530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
+4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
+KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
+WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
+R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
+nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
+CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
+JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
+qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
+WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
+wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
+vgt2Fl43N+bYdJeimUV5
+-----END CERTIFICATE-----
+
+Root CA Generalitat Valenciana
+==============================
+-----BEGIN CERTIFICATE-----
+MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
+ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
+IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
+WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
+CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
+F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
+ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
+D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
+JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
+AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
+dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
+ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
+AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
+YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
+AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
+aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
+AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
+YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
+AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
+OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
+dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
+BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
+A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
+b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
+TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
+Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
+NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
+iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
+-----END CERTIFICATE-----
+
+A-Trust-nQual-03
+================
+-----BEGIN CERTIFICATE-----
+MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
+Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
+a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
+dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
+RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
+ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
+c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
+zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
+yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
+SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
+iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
+cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
+eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
+ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
+sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
+JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
+mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
+ahq97BvIxYSazQ==
+-----END CERTIFICATE-----
+
+TWCA Root Certification Authority
+=================================
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
+VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
+EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
+IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
+QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
+oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
+4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
+y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
+BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
+9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
+mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
+QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
+T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
+Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
+-----END CERTIFICATE-----
+
+Security Communication RootCA2
+==============================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
+U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
+dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
+SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
+aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
+3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
+spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
+EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
+QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
+CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
+u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
+3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
+tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
+mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
+-----END CERTIFICATE-----
+
+EC-ACC
+======
+-----BEGIN CERTIFICATE-----
+MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
+BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
+ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
+VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
+CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
+BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
+MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
+SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
+Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
+cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
+w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
+ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
+HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
+E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
+0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
+VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
+Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
+dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
+lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
+Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
+l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
+E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
+5EI=
+-----END CERTIFICATE-----
+
+Hellenic Academic and Research Institutions RootCA 2011
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
+O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
+aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
+IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
+AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
+IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
+IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
+1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
+71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
+8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
+3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
+MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
+MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
+b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
+XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
+TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
+/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
+7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
+-----END CERTIFICATE-----
+
+Actalis Authentication Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
+BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
+AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
+MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
+IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
+IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
+wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
+by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
+zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
+YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
+oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
+EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
+hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
+EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
+jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
+iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
+ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
+WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
+JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
+K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
+Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
+4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
+2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
+lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
+OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
+vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
+-----END CERTIFICATE-----
+
+Trustis FPS Root CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
+EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
+IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
+BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
+RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
+H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
+cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
+o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
+AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
+BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
+GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
+yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
+8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
+l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
+iB6XzCGcKQENZetX2fNXlrtIzYE=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority
+================================
+-----BEGIN CERTIFICATE-----
+MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
+ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
+NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
+LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
+U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
+o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
+Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
+eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
+2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
+6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
+osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
+untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
+UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
+37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
+VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
+Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
+dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
+c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
+bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
+aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
+L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
+cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
+fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
+N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
+Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
+tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
+e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
+2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
+HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
+JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
+D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority G2
+===================================
+-----BEGIN CERTIFICATE-----
+MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
+ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
+o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
+4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
+Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
+Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
+O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
+vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
+nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
+FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
+z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
+KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
+2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
+J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
+/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
+nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
+blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
+l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
+7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
+obp573PYtlNXLfbQ4ddI
+-----END CERTIFICATE-----
+
+Buypass Class 2 Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
+DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
+eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
+g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
+9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
+/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
+CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
+awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
+zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
+Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
+Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
+M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
+AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
+A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
+osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
+aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
+DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
+LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
+oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
+wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
+CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
+rJgWVqA=
+-----END CERTIFICATE-----
+
+Buypass Class 3 Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
+DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
+eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
+sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
+5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
+7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
+ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
+2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
+/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
+RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
+Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
+j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
+AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
+cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
+uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
+Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
+ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
+KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
+6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
+UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
+eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
+Cp/HuZc=
+-----END CERTIFICATE-----
+
+T-TeleSec GlobalRoot Class 3
+============================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
+IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
+cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
+MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
+dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
+ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
+9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
+NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
+iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
+0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
+AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
+fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
+ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
+P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
+e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
+-----END CERTIFICATE-----
+
+EE Certification Centre Root CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
+EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
+dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
+MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
+UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
+ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
+TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
+rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
+93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
+P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
+AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
+MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
+BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
+xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
+lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
+uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
+3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
+dcGWxZ0=
+-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 2007
+=================================================
+-----BEGIN CERTIFICATE-----
+MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
+MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
+QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
+DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
+a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
+BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
+bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
+YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
+KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
+KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
+rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
+AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
+Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
+aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
+Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
+BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
+poRq0Tl9
+-----END CERTIFICATE-----
+
+D-TRUST Root Class 3 CA 2 2009
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
+Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
+LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
+ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
+BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
+KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
+p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
+AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
+4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
+eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
+MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
+PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
+OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
+2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
+o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
+dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
+X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
+-----END CERTIFICATE-----
+
+D-TRUST Root Class 3 CA 2 EV 2009
+=================================
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
+OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
+OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
+egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
+zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
+7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
+sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
+11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
+cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
+ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
+MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
+b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
+c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
+PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
+nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
+ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
+NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
+w9y4AyHqnxbxLFS1
+-----END CERTIFICATE-----
+
+PSCProcert
+==========
+-----BEGIN CERTIFICATE-----
+MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
+ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
+MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
+dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
+cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
+IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
+MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
+DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
+ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
+Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
+wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
+3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
+RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
+EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
+0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
+0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
+td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
+Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
+r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
+AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
+Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
+xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
+ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
+EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
+Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
+ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
+9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
+MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
+LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
+ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
+YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
+Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
+dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
+T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
+g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
+uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
+n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
+FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
+5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
+3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
+poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
+eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
+-----END CERTIFICATE-----
+
+China Internet Network Information Center EV Certificates Root
+==============================================================
+-----BEGIN CERTIFICATE-----
+MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
+BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
+aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
+Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
+A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
+PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
+cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
+jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
+98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
+klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
+KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
+7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
+glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
+0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
+7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
+ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
+5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
+-----END CERTIFICATE-----
+
+Swisscom Root CA 2
+==================
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG
+EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
+dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2
+MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
+aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC
+IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
+LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo
+ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ
+wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH
+Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
+SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS
+NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab
+mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
+Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3
+qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
+HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
+BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu
+MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO
+v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ
+82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz
+o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs
+a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx
+OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
+mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o
++sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC
+rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX
+5OfNeOI5wSsSnqaeG8XmDtkx2Q==
+-----END CERTIFICATE-----
+
+Swisscom Root EV CA 2
+=====================
+-----BEGIN CERTIFICATE-----
+MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE
+BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl
+cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN
+MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
+HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg
+Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz
+o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy
+Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
+GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li
+qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH
+Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG
+alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa
+m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox
+bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi
+xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/
+BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
+MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB
+bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL
+j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU
+wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7
+XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH
+59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
+23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq
+J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA
+HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi
+uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW
+l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
+-----END CERTIFICATE-----
+
+CA Disig Root R1
+================
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw
+EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
+ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
+EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
+c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
+3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
+u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2
+m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
+CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa
+YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
+vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL
+LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX
+ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
+XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ
+04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
+xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B
+LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM
+CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
+VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85
+YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS
+ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix
+lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N
+UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ
+a7+h89n07eLw4+1knj0vllJPgFOL
+-----END CERTIFICATE-----
+
+CA Disig Root R2
+================
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw
+EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
+ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx
+EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
+c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC
+w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia
+xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7
+A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S
+GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV
+g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
+5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
+koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A
+Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i
+Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u
+Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
+tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV
+sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
+dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8
+1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx
+mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01
+utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0
+sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg
+UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV
+7+ZtsH8tZ/3zbBt1RqPlShfppNcL
+-----END CERTIFICATE-----
+
+ACCVRAIZ1
+=========
+-----BEGIN CERTIFICATE-----
+MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
+SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
+MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
+UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
+jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
+RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
+aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
+0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
+WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
+8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
+5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
+9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
+Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
+Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
+Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
+VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
+Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
+QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
+AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
+YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
+AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
+IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
+aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
+dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
+MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
+hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
+R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
+YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
+nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
+TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
+sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
+I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
+Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
+3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
+EfbRD0tVNEYqi4Y7
+-----END CERTIFICATE-----
+
+TWCA Global Root CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
+CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
+QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
+EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
+Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
+nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
+r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
+Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
+tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
+KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
+sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
+yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
+kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
+zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
+AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
+cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
+LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
+8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
+/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
+lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
+A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
+i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
+EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
+zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
+-----END CERTIFICATE-----
+
+TeliaSonera Root CA v1
+======================
+-----BEGIN CERTIFICATE-----
+MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
+CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
+MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
+VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
+6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
+3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
+B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
+Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
+oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
+F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
+oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
+gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
+TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
+AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
+DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
+zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
+0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
+pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
+G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
+c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
+JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
+qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
+Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
+WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
+-----END CERTIFICATE-----
+
+E-Tugra Certification Authority
+===============================
+-----BEGIN CERTIFICATE-----
+MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
+DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
+ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
+ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
+NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
+QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
+cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
+DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
+hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
+CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
+ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
+BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
+E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
+rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
+jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
+rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
+dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
+/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
+MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
+kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
+XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
+VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
+a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
+dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
+KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
+Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
+8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
+C7TbO6Orb1wdtn7os4I07QZcJA==
+-----END CERTIFICATE-----
+
+T-TeleSec GlobalRoot Class 2
+============================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
+IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
+cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
+MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
+dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
+ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
+SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
+vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
+2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
+WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
+YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
+r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
+vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
+3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
+9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
+-----END CERTIFICATE-----
+
+Atos TrustedRoot 2011
+=====================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
+cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
+MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
+A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
+hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
+54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
+HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
+z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
+l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
+bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
+k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
+TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
+61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
+3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
+-----END CERTIFICATE-----
+
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/StaticClient.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/StaticClient.php
new file mode 100644
index 0000000..dbd4c18
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/StaticClient.php
@@ -0,0 +1,157 @@
+createRequest($method, $url, null, null, $options);
+
+ if (isset($options['stream'])) {
+ if ($options['stream'] instanceof StreamRequestFactoryInterface) {
+ return $options['stream']->fromRequest($request);
+ } elseif ($options['stream'] == true) {
+ $streamFactory = new PhpStreamRequestFactory();
+ return $streamFactory->fromRequest($request);
+ }
+ }
+
+ return $request->send();
+ }
+
+ /**
+ * Send a GET request
+ *
+ * @param string $url URL of the request
+ * @param array $options Array of request options
+ *
+ * @return \Guzzle\Http\Message\Response
+ * @see Guzzle::request for a list of available options
+ */
+ public static function get($url, $options = array())
+ {
+ return self::request('GET', $url, $options);
+ }
+
+ /**
+ * Send a HEAD request
+ *
+ * @param string $url URL of the request
+ * @param array $options Array of request options
+ *
+ * @return \Guzzle\Http\Message\Response
+ * @see Guzzle::request for a list of available options
+ */
+ public static function head($url, $options = array())
+ {
+ return self::request('HEAD', $url, $options);
+ }
+
+ /**
+ * Send a DELETE request
+ *
+ * @param string $url URL of the request
+ * @param array $options Array of request options
+ *
+ * @return \Guzzle\Http\Message\Response
+ * @see Guzzle::request for a list of available options
+ */
+ public static function delete($url, $options = array())
+ {
+ return self::request('DELETE', $url, $options);
+ }
+
+ /**
+ * Send a POST request
+ *
+ * @param string $url URL of the request
+ * @param array $options Array of request options
+ *
+ * @return \Guzzle\Http\Message\Response
+ * @see Guzzle::request for a list of available options
+ */
+ public static function post($url, $options = array())
+ {
+ return self::request('POST', $url, $options);
+ }
+
+ /**
+ * Send a PUT request
+ *
+ * @param string $url URL of the request
+ * @param array $options Array of request options
+ *
+ * @return \Guzzle\Http\Message\Response
+ * @see Guzzle::request for a list of available options
+ */
+ public static function put($url, $options = array())
+ {
+ return self::request('PUT', $url, $options);
+ }
+
+ /**
+ * Send a PATCH request
+ *
+ * @param string $url URL of the request
+ * @param array $options Array of request options
+ *
+ * @return \Guzzle\Http\Message\Response
+ * @see Guzzle::request for a list of available options
+ */
+ public static function patch($url, $options = array())
+ {
+ return self::request('PATCH', $url, $options);
+ }
+
+ /**
+ * Send an OPTIONS request
+ *
+ * @param string $url URL of the request
+ * @param array $options Array of request options
+ *
+ * @return \Guzzle\Http\Message\Response
+ * @see Guzzle::request for a list of available options
+ */
+ public static function options($url, $options = array())
+ {
+ return self::request('OPTIONS', $url, $options);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Url.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Url.php
new file mode 100644
index 0000000..6a4e772
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/Url.php
@@ -0,0 +1,554 @@
+ null, 'host' => null, 'path' => null, 'port' => null, 'query' => null,
+ 'user' => null, 'pass' => null, 'fragment' => null);
+
+ if (false === ($parts = parse_url($url))) {
+ throw new InvalidArgumentException('Was unable to parse malformed url: ' . $url);
+ }
+
+ $parts += $defaults;
+
+ // Convert the query string into a QueryString object
+ if ($parts['query'] || 0 !== strlen($parts['query'])) {
+ $parts['query'] = QueryString::fromString($parts['query']);
+ }
+
+ return new static($parts['scheme'], $parts['host'], $parts['user'],
+ $parts['pass'], $parts['port'], $parts['path'], $parts['query'],
+ $parts['fragment']);
+ }
+
+ /**
+ * Build a URL from parse_url parts. The generated URL will be a relative URL if a scheme or host are not provided.
+ *
+ * @param array $parts Array of parse_url parts
+ *
+ * @return string
+ */
+ public static function buildUrl(array $parts)
+ {
+ $url = $scheme = '';
+
+ if (isset($parts['scheme'])) {
+ $scheme = $parts['scheme'];
+ $url .= $scheme . ':';
+ }
+
+ if (isset($parts['host'])) {
+ $url .= '//';
+ if (isset($parts['user'])) {
+ $url .= $parts['user'];
+ if (isset($parts['pass'])) {
+ $url .= ':' . $parts['pass'];
+ }
+ $url .= '@';
+ }
+
+ $url .= $parts['host'];
+
+ // Only include the port if it is not the default port of the scheme
+ if (isset($parts['port'])
+ && !(($scheme == 'http' && $parts['port'] == 80) || ($scheme == 'https' && $parts['port'] == 443))
+ ) {
+ $url .= ':' . $parts['port'];
+ }
+ }
+
+ // Add the path component if present
+ if (isset($parts['path']) && 0 !== strlen($parts['path'])) {
+ // Always ensure that the path begins with '/' if set and something is before the path
+ if ($url && $parts['path'][0] != '/' && substr($url, -1) != '/') {
+ $url .= '/';
+ }
+ $url .= $parts['path'];
+ }
+
+ // Add the query string if present
+ if (isset($parts['query'])) {
+ $url .= '?' . $parts['query'];
+ }
+
+ // Ensure that # is only added to the url if fragment contains anything.
+ if (isset($parts['fragment'])) {
+ $url .= '#' . $parts['fragment'];
+ }
+
+ return $url;
+ }
+
+ /**
+ * Create a new URL from URL parts
+ *
+ * @param string $scheme Scheme of the URL
+ * @param string $host Host of the URL
+ * @param string $username Username of the URL
+ * @param string $password Password of the URL
+ * @param int $port Port of the URL
+ * @param string $path Path of the URL
+ * @param QueryString|array|string $query Query string of the URL
+ * @param string $fragment Fragment of the URL
+ */
+ public function __construct($scheme, $host, $username = null, $password = null, $port = null, $path = null, QueryString $query = null, $fragment = null)
+ {
+ $this->scheme = $scheme;
+ $this->host = $host;
+ $this->port = $port;
+ $this->username = $username;
+ $this->password = $password;
+ $this->fragment = $fragment;
+ if (!$query) {
+ $this->query = new QueryString();
+ } else {
+ $this->setQuery($query);
+ }
+ $this->setPath($path);
+ }
+
+ /**
+ * Clone the URL
+ */
+ public function __clone()
+ {
+ $this->query = clone $this->query;
+ }
+
+ /**
+ * Returns the URL as a URL string
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return self::buildUrl($this->getParts());
+ }
+
+ /**
+ * Get the parts of the URL as an array
+ *
+ * @return array
+ */
+ public function getParts()
+ {
+ $query = (string) $this->query;
+
+ return array(
+ 'scheme' => $this->scheme,
+ 'user' => $this->username,
+ 'pass' => $this->password,
+ 'host' => $this->host,
+ 'port' => $this->port,
+ 'path' => $this->getPath(),
+ 'query' => $query !== '' ? $query : null,
+ 'fragment' => $this->fragment,
+ );
+ }
+
+ /**
+ * Set the host of the request.
+ *
+ * @param string $host Host to set (e.g. www.yahoo.com, yahoo.com)
+ *
+ * @return Url
+ */
+ public function setHost($host)
+ {
+ if (strpos($host, ':') === false) {
+ $this->host = $host;
+ } else {
+ list($host, $port) = explode(':', $host);
+ $this->host = $host;
+ $this->setPort($port);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the host part of the URL
+ *
+ * @return string
+ */
+ public function getHost()
+ {
+ return $this->host;
+ }
+
+ /**
+ * Set the scheme part of the URL (http, https, ftp, etc)
+ *
+ * @param string $scheme Scheme to set
+ *
+ * @return Url
+ */
+ public function setScheme($scheme)
+ {
+ if ($this->scheme == 'http' && $this->port == 80) {
+ $this->port = null;
+ } elseif ($this->scheme == 'https' && $this->port == 443) {
+ $this->port = null;
+ }
+
+ $this->scheme = $scheme;
+
+ return $this;
+ }
+
+ /**
+ * Get the scheme part of the URL
+ *
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->scheme;
+ }
+
+ /**
+ * Set the port part of the URL
+ *
+ * @param int $port Port to set
+ *
+ * @return Url
+ */
+ public function setPort($port)
+ {
+ $this->port = $port;
+
+ return $this;
+ }
+
+ /**
+ * Get the port part of the URl. Will return the default port for a given scheme if no port has been set.
+ *
+ * @return int|null
+ */
+ public function getPort()
+ {
+ if ($this->port) {
+ return $this->port;
+ } elseif ($this->scheme == 'http') {
+ return 80;
+ } elseif ($this->scheme == 'https') {
+ return 443;
+ }
+
+ return null;
+ }
+
+ /**
+ * Set the path part of the URL
+ *
+ * @param array|string $path Path string or array of path segments
+ *
+ * @return Url
+ */
+ public function setPath($path)
+ {
+ static $pathReplace = array(' ' => '%20', '?' => '%3F');
+ if (is_array($path)) {
+ $path = '/' . implode('/', $path);
+ }
+
+ $this->path = strtr($path, $pathReplace);
+
+ return $this;
+ }
+
+ /**
+ * Normalize the URL so that double slashes and relative paths are removed
+ *
+ * @return Url
+ */
+ public function normalizePath()
+ {
+ if (!$this->path || $this->path == '/' || $this->path == '*') {
+ return $this;
+ }
+
+ $results = array();
+ $segments = $this->getPathSegments();
+ foreach ($segments as $segment) {
+ if ($segment == '..') {
+ array_pop($results);
+ } elseif ($segment != '.' && $segment != '') {
+ $results[] = $segment;
+ }
+ }
+
+ // Combine the normalized parts and add the leading slash if needed
+ $this->path = ($this->path[0] == '/' ? '/' : '') . implode('/', $results);
+
+ // Add the trailing slash if necessary
+ if ($this->path != '/' && end($segments) == '') {
+ $this->path .= '/';
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add a relative path to the currently set path.
+ *
+ * @param string $relativePath Relative path to add
+ *
+ * @return Url
+ */
+ public function addPath($relativePath)
+ {
+ if ($relativePath != '/' && is_string($relativePath) && strlen($relativePath) > 0) {
+ // Add a leading slash if needed
+ if ($relativePath[0] != '/') {
+ $relativePath = '/' . $relativePath;
+ }
+ $this->setPath(str_replace('//', '/', $this->path . $relativePath));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the path part of the URL
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return $this->path;
+ }
+
+ /**
+ * Get the path segments of the URL as an array
+ *
+ * @return array
+ */
+ public function getPathSegments()
+ {
+ return array_slice(explode('/', $this->getPath()), 1);
+ }
+
+ /**
+ * Set the password part of the URL
+ *
+ * @param string $password Password to set
+ *
+ * @return Url
+ */
+ public function setPassword($password)
+ {
+ $this->password = $password;
+
+ return $this;
+ }
+
+ /**
+ * Get the password part of the URL
+ *
+ * @return null|string
+ */
+ public function getPassword()
+ {
+ return $this->password;
+ }
+
+ /**
+ * Set the username part of the URL
+ *
+ * @param string $username Username to set
+ *
+ * @return Url
+ */
+ public function setUsername($username)
+ {
+ $this->username = $username;
+
+ return $this;
+ }
+
+ /**
+ * Get the username part of the URl
+ *
+ * @return null|string
+ */
+ public function getUsername()
+ {
+ return $this->username;
+ }
+
+ /**
+ * Get the query part of the URL as a QueryString object
+ *
+ * @return QueryString
+ */
+ public function getQuery()
+ {
+ return $this->query;
+ }
+
+ /**
+ * Set the query part of the URL
+ *
+ * @param QueryString|string|array $query Query to set
+ *
+ * @return Url
+ */
+ public function setQuery($query)
+ {
+ if (is_string($query)) {
+ $output = null;
+ parse_str($query, $output);
+ $this->query = new QueryString($output);
+ } elseif (is_array($query)) {
+ $this->query = new QueryString($query);
+ } elseif ($query instanceof QueryString) {
+ $this->query = $query;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the fragment part of the URL
+ *
+ * @return null|string
+ */
+ public function getFragment()
+ {
+ return $this->fragment;
+ }
+
+ /**
+ * Set the fragment part of the URL
+ *
+ * @param string $fragment Fragment to set
+ *
+ * @return Url
+ */
+ public function setFragment($fragment)
+ {
+ $this->fragment = $fragment;
+
+ return $this;
+ }
+
+ /**
+ * Check if this is an absolute URL
+ *
+ * @return bool
+ */
+ public function isAbsolute()
+ {
+ return $this->scheme && $this->host;
+ }
+
+ /**
+ * Combine the URL with another URL. Follows the rules specific in RFC 3986 section 5.4.
+ *
+ * @param string $url Relative URL to combine with
+ * @param bool $strictRfc3986 Set to true to use strict RFC 3986 compliance when merging paths. When first
+ * released, Guzzle used an incorrect algorithm for combining relative URL paths. In
+ * order to not break users, we introduced this flag to allow the merging of URLs based
+ * on strict RFC 3986 section 5.4.1. This means that "http://a.com/foo/baz" merged with
+ * "bar" would become "http://a.com/foo/bar". When this value is set to false, it would
+ * become "http://a.com/foo/baz/bar".
+ * @return Url
+ * @throws InvalidArgumentException
+ * @link http://tools.ietf.org/html/rfc3986#section-5.4
+ */
+ public function combine($url, $strictRfc3986 = false)
+ {
+ $url = self::factory($url);
+
+ // Use the more absolute URL as the base URL
+ if (!$this->isAbsolute() && $url->isAbsolute()) {
+ $url = $url->combine($this);
+ }
+
+ // Passing a URL with a scheme overrides everything
+ if ($buffer = $url->getScheme()) {
+ $this->scheme = $buffer;
+ $this->host = $url->getHost();
+ $this->port = $url->getPort();
+ $this->username = $url->getUsername();
+ $this->password = $url->getPassword();
+ $this->path = $url->getPath();
+ $this->query = $url->getQuery();
+ $this->fragment = $url->getFragment();
+ return $this;
+ }
+
+ // Setting a host overrides the entire rest of the URL
+ if ($buffer = $url->getHost()) {
+ $this->host = $buffer;
+ $this->port = $url->getPort();
+ $this->username = $url->getUsername();
+ $this->password = $url->getPassword();
+ $this->path = $url->getPath();
+ $this->query = $url->getQuery();
+ $this->fragment = $url->getFragment();
+ return $this;
+ }
+
+ $path = $url->getPath();
+ $query = $url->getQuery();
+
+ if (!$path) {
+ if (count($query)) {
+ $this->addQuery($query, $strictRfc3986);
+ }
+ } else {
+ if ($path[0] == '/') {
+ $this->path = $path;
+ } elseif ($strictRfc3986) {
+ $this->path .= '/../' . $path;
+ } else {
+ $this->path .= '/' . $path;
+ }
+ $this->normalizePath();
+ $this->addQuery($query, $strictRfc3986);
+ }
+
+ $this->fragment = $url->getFragment();
+
+ return $this;
+ }
+
+ private function addQuery(QueryString $new, $strictRfc386)
+ {
+ if (!$strictRfc386) {
+ $new->merge($this->query);
+ }
+
+ $this->query = $new;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/composer.json
new file mode 100644
index 0000000..9384a5b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Http/composer.json
@@ -0,0 +1,32 @@
+{
+ "name": "guzzle/http",
+ "description": "HTTP libraries used by Guzzle",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["http client", "http", "client", "Guzzle", "curl"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/common": "self.version",
+ "guzzle/parser": "self.version",
+ "guzzle/stream": "self.version"
+ },
+ "suggest": {
+ "ext-curl": "*"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Http": "" }
+ },
+ "target-dir": "Guzzle/Http",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Inflection/Inflector.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Inflection/Inflector.php
new file mode 100644
index 0000000..c699773
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Inflection/Inflector.php
@@ -0,0 +1,38 @@
+ array(),
+ 'camel' => array()
+ );
+
+ /** @var int Max entries per cache */
+ protected $maxCacheSize;
+
+ /** @var InflectorInterface Decorated inflector */
+ protected $decoratedInflector;
+
+ /**
+ * @param InflectorInterface $inflector Inflector being decorated
+ * @param int $maxCacheSize Maximum number of cached items to hold per cache
+ */
+ public function __construct(InflectorInterface $inflector, $maxCacheSize = 500)
+ {
+ $this->decoratedInflector = $inflector;
+ $this->maxCacheSize = $maxCacheSize;
+ }
+
+ public function snake($word)
+ {
+ if (!isset($this->cache['snake'][$word])) {
+ $this->pruneCache('snake');
+ $this->cache['snake'][$word] = $this->decoratedInflector->snake($word);
+ }
+
+ return $this->cache['snake'][$word];
+ }
+
+ /**
+ * Converts strings from snake_case to upper CamelCase
+ *
+ * @param string $word Value to convert into upper CamelCase
+ *
+ * @return string
+ */
+ public function camel($word)
+ {
+ if (!isset($this->cache['camel'][$word])) {
+ $this->pruneCache('camel');
+ $this->cache['camel'][$word] = $this->decoratedInflector->camel($word);
+ }
+
+ return $this->cache['camel'][$word];
+ }
+
+ /**
+ * Prune one of the named caches by removing 20% of the cache if it is full
+ *
+ * @param string $cache Type of cache to prune
+ */
+ protected function pruneCache($cache)
+ {
+ if (count($this->cache[$cache]) == $this->maxCacheSize) {
+ $this->cache[$cache] = array_slice($this->cache[$cache], $this->maxCacheSize * 0.2);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Inflection/PreComputedInflector.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Inflection/PreComputedInflector.php
new file mode 100644
index 0000000..db37e4f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Inflection/PreComputedInflector.php
@@ -0,0 +1,59 @@
+ array(),
+ 'camel' => array()
+ );
+
+ /** @var InflectorInterface Decorated inflector */
+ protected $decoratedInflector;
+
+ /**
+ * @param InflectorInterface $inflector Inflector being decorated
+ * @param array $snake Hash of pre-computed camel to snake
+ * @param array $camel Hash of pre-computed snake to camel
+ * @param bool $mirror Mirror snake and camel reflections
+ */
+ public function __construct(InflectorInterface $inflector, array $snake = array(), array $camel = array(), $mirror = false)
+ {
+ if ($mirror) {
+ $camel = array_merge(array_flip($snake), $camel);
+ $snake = array_merge(array_flip($camel), $snake);
+ }
+
+ $this->decoratedInflector = $inflector;
+ $this->mapping = array(
+ 'snake' => $snake,
+ 'camel' => $camel
+ );
+ }
+
+ public function snake($word)
+ {
+ return isset($this->mapping['snake'][$word])
+ ? $this->mapping['snake'][$word]
+ : $this->decoratedInflector->snake($word);
+ }
+
+ /**
+ * Converts strings from snake_case to upper CamelCase
+ *
+ * @param string $word Value to convert into upper CamelCase
+ *
+ * @return string
+ */
+ public function camel($word)
+ {
+ return isset($this->mapping['camel'][$word])
+ ? $this->mapping['camel'][$word]
+ : $this->decoratedInflector->camel($word);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Inflection/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Inflection/composer.json
new file mode 100644
index 0000000..93f9e7b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Inflection/composer.json
@@ -0,0 +1,26 @@
+{
+ "name": "guzzle/inflection",
+ "description": "Guzzle inflection component",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["inflection", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Inflection": "" }
+ },
+ "target-dir": "Guzzle/Inflection",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/AppendIterator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/AppendIterator.php
new file mode 100644
index 0000000..1b6bd7e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/AppendIterator.php
@@ -0,0 +1,19 @@
+getArrayIterator()->append($iterator);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/ChunkedIterator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/ChunkedIterator.php
new file mode 100644
index 0000000..d76cdd4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/ChunkedIterator.php
@@ -0,0 +1,56 @@
+chunkSize = $chunkSize;
+ }
+
+ public function rewind()
+ {
+ parent::rewind();
+ $this->next();
+ }
+
+ public function next()
+ {
+ $this->chunk = array();
+ for ($i = 0; $i < $this->chunkSize && parent::valid(); $i++) {
+ $this->chunk[] = parent::current();
+ parent::next();
+ }
+ }
+
+ public function current()
+ {
+ return $this->chunk;
+ }
+
+ public function valid()
+ {
+ return (bool) $this->chunk;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/FilterIterator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/FilterIterator.php
new file mode 100644
index 0000000..b103367
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/FilterIterator.php
@@ -0,0 +1,36 @@
+callback = $callback;
+ }
+
+ public function accept()
+ {
+ return call_user_func($this->callback, $this->current());
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/MapIterator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/MapIterator.php
new file mode 100644
index 0000000..7e586bd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/MapIterator.php
@@ -0,0 +1,34 @@
+callback = $callback;
+ }
+
+ public function current()
+ {
+ return call_user_func($this->callback, parent::current());
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/MethodProxyIterator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/MethodProxyIterator.php
new file mode 100644
index 0000000..de4ab03
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/MethodProxyIterator.php
@@ -0,0 +1,27 @@
+getInnerIterator();
+ while ($i instanceof \OuterIterator) {
+ $i = $i->getInnerIterator();
+ }
+
+ return call_user_func_array(array($i, $name), $args);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/README.md b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/README.md
new file mode 100644
index 0000000..8bb7e08
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/README.md
@@ -0,0 +1,25 @@
+Guzzle Iterator
+===============
+
+Provides useful Iterators and Iterator decorators
+
+- ChunkedIterator: Pulls out chunks from an inner iterator and yields the chunks as arrays
+- FilterIterator: Used when PHP 5.4's CallbackFilterIterator is not available
+- MapIterator: Maps values before yielding
+- MethodProxyIterator: Proxies missing method calls to the innermost iterator
+
+### Installing via Composer
+
+```bash
+# Install Composer
+curl -sS https://getcomposer.org/installer | php
+
+# Add Guzzle as a dependency
+php composer.phar require guzzle/iterator:~3.0
+```
+
+After installing, you need to require Composer's autoloader:
+
+```php
+require 'vendor/autoload.php';
+```
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/composer.json
new file mode 100644
index 0000000..ee17379
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Iterator/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/iterator",
+ "description": "Provides helpful iterators and iterator decorators",
+ "keywords": ["iterator", "guzzle"],
+ "homepage": "http://guzzlephp.org/",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/common": ">=2.8.0"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Iterator": "/" }
+ },
+ "target-dir": "Guzzle/Iterator",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/AbstractLogAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/AbstractLogAdapter.php
new file mode 100644
index 0000000..7f6271b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/AbstractLogAdapter.php
@@ -0,0 +1,16 @@
+log;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/ArrayLogAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/ArrayLogAdapter.php
new file mode 100644
index 0000000..a70fc8d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/ArrayLogAdapter.php
@@ -0,0 +1,34 @@
+logs[] = array('message' => $message, 'priority' => $priority, 'extras' => $extras);
+ }
+
+ /**
+ * Get logged entries
+ *
+ * @return array
+ */
+ public function getLogs()
+ {
+ return $this->logs;
+ }
+
+ /**
+ * Clears logged entries
+ */
+ public function clearLogs()
+ {
+ $this->logs = array();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/ClosureLogAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/ClosureLogAdapter.php
new file mode 100644
index 0000000..d4bb73f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/ClosureLogAdapter.php
@@ -0,0 +1,23 @@
+log = $logObject;
+ }
+
+ public function log($message, $priority = LOG_INFO, $extras = array())
+ {
+ call_user_func($this->log, $message, $priority, $extras);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/LogAdapterInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/LogAdapterInterface.php
new file mode 100644
index 0000000..d7ac4ea
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/LogAdapterInterface.php
@@ -0,0 +1,18 @@
+>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{curl_stderr}";
+ const SHORT_FORMAT = '[{ts}] "{method} {resource} {protocol}/{version}" {code}';
+
+ /**
+ * @var string Template used to format log messages
+ */
+ protected $template;
+
+ /**
+ * @param string $template Log message template
+ */
+ public function __construct($template = self::DEFAULT_FORMAT)
+ {
+ $this->template = $template ?: self::DEFAULT_FORMAT;
+ }
+
+ /**
+ * Set the template to use for logging
+ *
+ * @param string $template Log message template
+ *
+ * @return self
+ */
+ public function setTemplate($template)
+ {
+ $this->template = $template;
+
+ return $this;
+ }
+
+ /**
+ * Returns a formatted message
+ *
+ * @param RequestInterface $request Request that was sent
+ * @param Response $response Response that was received
+ * @param CurlHandle $handle Curl handle associated with the message
+ * @param array $customData Associative array of custom template data
+ *
+ * @return string
+ */
+ public function format(
+ RequestInterface $request,
+ Response $response = null,
+ CurlHandle $handle = null,
+ array $customData = array()
+ ) {
+ $cache = $customData;
+
+ return preg_replace_callback(
+ '/{\s*([A-Za-z_\-\.0-9]+)\s*}/',
+ function (array $matches) use ($request, $response, $handle, &$cache) {
+
+ if (array_key_exists($matches[1], $cache)) {
+ return $cache[$matches[1]];
+ }
+
+ $result = '';
+ switch ($matches[1]) {
+ case 'request':
+ $result = (string) $request;
+ break;
+ case 'response':
+ $result = (string) $response;
+ break;
+ case 'req_body':
+ $result = $request instanceof EntityEnclosingRequestInterface
+ ? (string) $request->getBody() : '';
+ break;
+ case 'res_body':
+ $result = $response ? $response->getBody(true) : '';
+ break;
+ case 'ts':
+ $result = gmdate('c');
+ break;
+ case 'method':
+ $result = $request->getMethod();
+ break;
+ case 'url':
+ $result = (string) $request->getUrl();
+ break;
+ case 'resource':
+ $result = $request->getResource();
+ break;
+ case 'protocol':
+ $result = 'HTTP';
+ break;
+ case 'version':
+ $result = $request->getProtocolVersion();
+ break;
+ case 'host':
+ $result = $request->getHost();
+ break;
+ case 'hostname':
+ $result = gethostname();
+ break;
+ case 'port':
+ $result = $request->getPort();
+ break;
+ case 'code':
+ $result = $response ? $response->getStatusCode() : '';
+ break;
+ case 'phrase':
+ $result = $response ? $response->getReasonPhrase() : '';
+ break;
+ case 'connect_time':
+ $result = $handle && $handle->getInfo(CURLINFO_CONNECT_TIME)
+ ? $handle->getInfo(CURLINFO_CONNECT_TIME)
+ : ($response ? $response->getInfo('connect_time') : '');
+ break;
+ case 'total_time':
+ $result = $handle && $handle->getInfo(CURLINFO_TOTAL_TIME)
+ ? $handle->getInfo(CURLINFO_TOTAL_TIME)
+ : ($response ? $response->getInfo('total_time') : '');
+ break;
+ case 'curl_error':
+ $result = $handle ? $handle->getError() : '';
+ break;
+ case 'curl_code':
+ $result = $handle ? $handle->getErrorNo() : '';
+ break;
+ case 'curl_stderr':
+ $result = $handle ? $handle->getStderr() : '';
+ break;
+ default:
+ if (strpos($matches[1], 'req_header_') === 0) {
+ $result = $request->getHeader(substr($matches[1], 11));
+ } elseif ($response && strpos($matches[1], 'res_header_') === 0) {
+ $result = $response->getHeader(substr($matches[1], 11));
+ }
+ }
+
+ $cache[$matches[1]] = $result;
+ return $result;
+ },
+ $this->template
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/MonologLogAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/MonologLogAdapter.php
new file mode 100644
index 0000000..6afe7b6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/MonologLogAdapter.php
@@ -0,0 +1,34 @@
+ Logger::DEBUG,
+ LOG_INFO => Logger::INFO,
+ LOG_WARNING => Logger::WARNING,
+ LOG_ERR => Logger::ERROR,
+ LOG_CRIT => Logger::CRITICAL,
+ LOG_ALERT => Logger::ALERT
+ );
+
+ public function __construct(Logger $logObject)
+ {
+ $this->log = $logObject;
+ }
+
+ public function log($message, $priority = LOG_INFO, $extras = array())
+ {
+ $this->log->addRecord(self::$mapping[$priority], $message, $extras);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/PsrLogAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/PsrLogAdapter.php
new file mode 100644
index 0000000..38a2b60
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/PsrLogAdapter.php
@@ -0,0 +1,36 @@
+ LogLevel::DEBUG,
+ LOG_INFO => LogLevel::INFO,
+ LOG_WARNING => LogLevel::WARNING,
+ LOG_ERR => LogLevel::ERROR,
+ LOG_CRIT => LogLevel::CRITICAL,
+ LOG_ALERT => LogLevel::ALERT
+ );
+
+ public function __construct(LoggerInterface $logObject)
+ {
+ $this->log = $logObject;
+ }
+
+ public function log($message, $priority = LOG_INFO, $extras = array())
+ {
+ $this->log->log(self::$mapping[$priority], $message, $extras);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/Zf1LogAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/Zf1LogAdapter.php
new file mode 100644
index 0000000..0ea8e3b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/Zf1LogAdapter.php
@@ -0,0 +1,24 @@
+log = $logObject;
+ Version::warn(__CLASS__ . ' is deprecated');
+ }
+
+ public function log($message, $priority = LOG_INFO, $extras = array())
+ {
+ $this->log->log($message, $priority, $extras);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/Zf2LogAdapter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/Zf2LogAdapter.php
new file mode 100644
index 0000000..863f6a1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/Zf2LogAdapter.php
@@ -0,0 +1,21 @@
+log = $logObject;
+ }
+
+ public function log($message, $priority = LOG_INFO, $extras = array())
+ {
+ $this->log->log($priority, $message, $extras);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/composer.json
new file mode 100644
index 0000000..a8213e8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Log/composer.json
@@ -0,0 +1,29 @@
+{
+ "name": "guzzle/log",
+ "description": "Guzzle log adapter component",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["log", "adapter", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Log": "" }
+ },
+ "suggest": {
+ "guzzle/http": "self.version"
+ },
+ "target-dir": "Guzzle/Log",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Cookie/CookieParser.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Cookie/CookieParser.php
new file mode 100644
index 0000000..4349eeb
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Cookie/CookieParser.php
@@ -0,0 +1,131 @@
+ 'Domain',
+ 'path' => 'Path',
+ 'max_age' => 'Max-Age',
+ 'expires' => 'Expires',
+ 'version' => 'Version',
+ 'secure' => 'Secure',
+ 'port' => 'Port',
+ 'discard' => 'Discard',
+ 'comment' => 'Comment',
+ 'comment_url' => 'Comment-Url',
+ 'http_only' => 'HttpOnly'
+ );
+
+ public function parseCookie($cookie, $host = null, $path = null, $decode = false)
+ {
+ // Explode the cookie string using a series of semicolons
+ $pieces = array_filter(array_map('trim', explode(';', $cookie)));
+
+ // The name of the cookie (first kvp) must include an equal sign.
+ if (empty($pieces) || !strpos($pieces[0], '=')) {
+ return false;
+ }
+
+ // Create the default return array
+ $data = array_merge(array_fill_keys(array_keys(self::$cookieParts), null), array(
+ 'cookies' => array(),
+ 'data' => array(),
+ 'path' => null,
+ 'http_only' => false,
+ 'discard' => false,
+ 'domain' => $host
+ ));
+ $foundNonCookies = 0;
+
+ // Add the cookie pieces into the parsed data array
+ foreach ($pieces as $part) {
+
+ $cookieParts = explode('=', $part, 2);
+ $key = trim($cookieParts[0]);
+
+ if (count($cookieParts) == 1) {
+ // Can be a single value (e.g. secure, httpOnly)
+ $value = true;
+ } else {
+ // Be sure to strip wrapping quotes
+ $value = trim($cookieParts[1], " \n\r\t\0\x0B\"");
+ if ($decode) {
+ $value = urldecode($value);
+ }
+ }
+
+ // Only check for non-cookies when cookies have been found
+ if (!empty($data['cookies'])) {
+ foreach (self::$cookieParts as $mapValue => $search) {
+ if (!strcasecmp($search, $key)) {
+ $data[$mapValue] = $mapValue == 'port' ? array_map('trim', explode(',', $value)) : $value;
+ $foundNonCookies++;
+ continue 2;
+ }
+ }
+ }
+
+ // If cookies have not yet been retrieved, or this value was not found in the pieces array, treat it as a
+ // cookie. IF non-cookies have been parsed, then this isn't a cookie, it's cookie data. Cookies then data.
+ $data[$foundNonCookies ? 'data' : 'cookies'][$key] = $value;
+ }
+
+ // Calculate the expires date
+ if (!$data['expires'] && $data['max_age']) {
+ $data['expires'] = time() + (int) $data['max_age'];
+ }
+
+ // Check path attribute according RFC6265 http://tools.ietf.org/search/rfc6265#section-5.2.4
+ // "If the attribute-value is empty or if the first character of the
+ // attribute-value is not %x2F ("/"):
+ // Let cookie-path be the default-path.
+ // Otherwise:
+ // Let cookie-path be the attribute-value."
+ if (!$data['path'] || substr($data['path'], 0, 1) !== '/') {
+ $data['path'] = $this->getDefaultPath($path);
+ }
+
+ return $data;
+ }
+
+ /**
+ * Get default cookie path according to RFC 6265
+ * http://tools.ietf.org/search/rfc6265#section-5.1.4 Paths and Path-Match
+ *
+ * @param string $path Request uri-path
+ *
+ * @return string
+ */
+ protected function getDefaultPath($path) {
+ // "The user agent MUST use an algorithm equivalent to the following algorithm
+ // to compute the default-path of a cookie:"
+
+ // "2. If the uri-path is empty or if the first character of the uri-path is not
+ // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
+ if (empty($path) || substr($path, 0, 1) !== '/') {
+ return '/';
+ }
+
+ // "3. If the uri-path contains no more than one %x2F ("/") character, output
+ // %x2F ("/") and skip the remaining step."
+ if ($path === "/") {
+ return $path;
+ }
+
+ $rightSlashPos = strrpos($path, '/');
+ if ($rightSlashPos === 0) {
+ return "/";
+ }
+
+ // "4. Output the characters of the uri-path from the first character up to,
+ // but not including, the right-most %x2F ("/")."
+ return substr($path, 0, $rightSlashPos);
+
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Cookie/CookieParserInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Cookie/CookieParserInterface.php
new file mode 100644
index 0000000..d21ffe2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Cookie/CookieParserInterface.php
@@ -0,0 +1,33 @@
+ $requestUrl,
+ 'scheme' => 'http'
+ );
+
+ // Check for the Host header
+ if (isset($parts['headers']['Host'])) {
+ $urlParts['host'] = $parts['headers']['Host'];
+ } elseif (isset($parts['headers']['host'])) {
+ $urlParts['host'] = $parts['headers']['host'];
+ } else {
+ $urlParts['host'] = null;
+ }
+
+ if (false === strpos($urlParts['host'], ':')) {
+ $urlParts['port'] = '';
+ } else {
+ $hostParts = explode(':', $urlParts['host']);
+ $urlParts['host'] = trim($hostParts[0]);
+ $urlParts['port'] = (int) trim($hostParts[1]);
+ if ($urlParts['port'] == 443) {
+ $urlParts['scheme'] = 'https';
+ }
+ }
+
+ // Check if a query is present
+ $path = $urlParts['path'];
+ $qpos = strpos($path, '?');
+ if ($qpos) {
+ $urlParts['query'] = substr($path, $qpos + 1);
+ $urlParts['path'] = substr($path, 0, $qpos);
+ } else {
+ $urlParts['query'] = '';
+ }
+
+ return $urlParts;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Message/MessageParser.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Message/MessageParser.php
new file mode 100644
index 0000000..efc1aa3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Message/MessageParser.php
@@ -0,0 +1,110 @@
+parseMessage($message);
+
+ // Parse the protocol and protocol version
+ if (isset($parts['start_line'][2])) {
+ $startParts = explode('/', $parts['start_line'][2]);
+ $protocol = strtoupper($startParts[0]);
+ $version = isset($startParts[1]) ? $startParts[1] : '1.1';
+ } else {
+ $protocol = 'HTTP';
+ $version = '1.1';
+ }
+
+ $parsed = array(
+ 'method' => strtoupper($parts['start_line'][0]),
+ 'protocol' => $protocol,
+ 'version' => $version,
+ 'headers' => $parts['headers'],
+ 'body' => $parts['body']
+ );
+
+ $parsed['request_url'] = $this->getUrlPartsFromMessage(isset($parts['start_line'][1]) ? $parts['start_line'][1] : '' , $parsed);
+
+ return $parsed;
+ }
+
+ public function parseResponse($message)
+ {
+ if (!$message) {
+ return false;
+ }
+
+ $parts = $this->parseMessage($message);
+ list($protocol, $version) = explode('/', trim($parts['start_line'][0]));
+
+ return array(
+ 'protocol' => $protocol,
+ 'version' => $version,
+ 'code' => $parts['start_line'][1],
+ 'reason_phrase' => isset($parts['start_line'][2]) ? $parts['start_line'][2] : '',
+ 'headers' => $parts['headers'],
+ 'body' => $parts['body']
+ );
+ }
+
+ /**
+ * Parse a message into parts
+ *
+ * @param string $message Message to parse
+ *
+ * @return array
+ */
+ protected function parseMessage($message)
+ {
+ $startLine = null;
+ $headers = array();
+ $body = '';
+
+ // Iterate over each line in the message, accounting for line endings
+ $lines = preg_split('/(\\r?\\n)/', $message, -1, PREG_SPLIT_DELIM_CAPTURE);
+ for ($i = 0, $totalLines = count($lines); $i < $totalLines; $i += 2) {
+
+ $line = $lines[$i];
+
+ // If two line breaks were encountered, then this is the end of body
+ if (empty($line)) {
+ if ($i < $totalLines - 1) {
+ $body = implode('', array_slice($lines, $i + 2));
+ }
+ break;
+ }
+
+ // Parse message headers
+ if (!$startLine) {
+ $startLine = explode(' ', $line, 3);
+ } elseif (strpos($line, ':')) {
+ $parts = explode(':', $line, 2);
+ $key = trim($parts[0]);
+ $value = isset($parts[1]) ? trim($parts[1]) : '';
+ if (!isset($headers[$key])) {
+ $headers[$key] = $value;
+ } elseif (!is_array($headers[$key])) {
+ $headers[$key] = array($headers[$key], $value);
+ } else {
+ $headers[$key][] = $value;
+ }
+ }
+ }
+
+ return array(
+ 'start_line' => $startLine,
+ 'headers' => $headers,
+ 'body' => $body
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Message/MessageParserInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Message/MessageParserInterface.php
new file mode 100644
index 0000000..cc44808
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Message/MessageParserInterface.php
@@ -0,0 +1,27 @@
+ $parts->requestMethod,
+ 'protocol' => 'HTTP',
+ 'version' => number_format($parts->httpVersion, 1),
+ 'headers' => $parts->headers,
+ 'body' => $parts->body
+ );
+
+ $parsed['request_url'] = $this->getUrlPartsFromMessage($parts->requestUrl, $parsed);
+
+ return $parsed;
+ }
+
+ public function parseResponse($message)
+ {
+ if (!$message) {
+ return false;
+ }
+
+ $parts = http_parse_message($message);
+
+ return array(
+ 'protocol' => 'HTTP',
+ 'version' => number_format($parts->httpVersion, 1),
+ 'code' => $parts->responseCode,
+ 'reason_phrase' => $parts->responseStatus,
+ 'headers' => $parts->headers,
+ 'body' => $parts->body
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/ParserRegistry.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/ParserRegistry.php
new file mode 100644
index 0000000..f838683
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/ParserRegistry.php
@@ -0,0 +1,75 @@
+ 'Guzzle\\Parser\\Message\\MessageParser',
+ 'cookie' => 'Guzzle\\Parser\\Cookie\\CookieParser',
+ 'url' => 'Guzzle\\Parser\\Url\\UrlParser',
+ 'uri_template' => 'Guzzle\\Parser\\UriTemplate\\UriTemplate',
+ );
+
+ /**
+ * @return self
+ * @codeCoverageIgnore
+ */
+ public static function getInstance()
+ {
+ if (!self::$instance) {
+ self::$instance = new static;
+ }
+
+ return self::$instance;
+ }
+
+ public function __construct()
+ {
+ // Use the PECL URI template parser if available
+ if (extension_loaded('uri_template')) {
+ $this->mapping['uri_template'] = 'Guzzle\\Parser\\UriTemplate\\PeclUriTemplate';
+ }
+ }
+
+ /**
+ * Get a parser by name from an instance
+ *
+ * @param string $name Name of the parser to retrieve
+ *
+ * @return mixed|null
+ */
+ public function getParser($name)
+ {
+ if (!isset($this->instances[$name])) {
+ if (!isset($this->mapping[$name])) {
+ return null;
+ }
+ $class = $this->mapping[$name];
+ $this->instances[$name] = new $class();
+ }
+
+ return $this->instances[$name];
+ }
+
+ /**
+ * Register a custom parser by name with the register
+ *
+ * @param string $name Name or handle of the parser to register
+ * @param mixed $parser Instantiated parser to register
+ */
+ public function registerParser($name, $parser)
+ {
+ $this->instances[$name] = $parser;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/UriTemplate/PeclUriTemplate.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/UriTemplate/PeclUriTemplate.php
new file mode 100644
index 0000000..b0764e8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/UriTemplate/PeclUriTemplate.php
@@ -0,0 +1,26 @@
+ true, '#' => true, '.' => true, '/' => true, ';' => true, '?' => true, '&' => true
+ );
+
+ /** @var array Delimiters */
+ private static $delims = array(
+ ':', '/', '?', '#', '[', ']', '@', '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '='
+ );
+
+ /** @var array Percent encoded delimiters */
+ private static $delimsPct = array(
+ '%3A', '%2F', '%3F', '%23', '%5B', '%5D', '%40', '%21', '%24', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C',
+ '%3B', '%3D'
+ );
+
+ public function expand($template, array $variables)
+ {
+ if ($this->regex == self::DEFAULT_PATTERN && false === strpos($template, '{')) {
+ return $template;
+ }
+
+ $this->template = $template;
+ $this->variables = $variables;
+
+ return preg_replace_callback($this->regex, array($this, 'expandMatch'), $this->template);
+ }
+
+ /**
+ * Set the regex patten used to expand URI templates
+ *
+ * @param string $regexPattern
+ */
+ public function setRegex($regexPattern)
+ {
+ $this->regex = $regexPattern;
+ }
+
+ /**
+ * Parse an expression into parts
+ *
+ * @param string $expression Expression to parse
+ *
+ * @return array Returns an associative array of parts
+ */
+ private function parseExpression($expression)
+ {
+ // Check for URI operators
+ $operator = '';
+
+ if (isset(self::$operatorHash[$expression[0]])) {
+ $operator = $expression[0];
+ $expression = substr($expression, 1);
+ }
+
+ $values = explode(',', $expression);
+ foreach ($values as &$value) {
+ $value = trim($value);
+ $varspec = array();
+ $substrPos = strpos($value, ':');
+ if ($substrPos) {
+ $varspec['value'] = substr($value, 0, $substrPos);
+ $varspec['modifier'] = ':';
+ $varspec['position'] = (int) substr($value, $substrPos + 1);
+ } elseif (substr($value, -1) == '*') {
+ $varspec['modifier'] = '*';
+ $varspec['value'] = substr($value, 0, -1);
+ } else {
+ $varspec['value'] = (string) $value;
+ $varspec['modifier'] = '';
+ }
+ $value = $varspec;
+ }
+
+ return array(
+ 'operator' => $operator,
+ 'values' => $values
+ );
+ }
+
+ /**
+ * Process an expansion
+ *
+ * @param array $matches Matches met in the preg_replace_callback
+ *
+ * @return string Returns the replacement string
+ */
+ private function expandMatch(array $matches)
+ {
+ static $rfc1738to3986 = array(
+ '+' => '%20',
+ '%7e' => '~'
+ );
+
+ $parsed = self::parseExpression($matches[1]);
+ $replacements = array();
+
+ $prefix = $parsed['operator'];
+ $joiner = $parsed['operator'];
+ $useQueryString = false;
+ if ($parsed['operator'] == '?') {
+ $joiner = '&';
+ $useQueryString = true;
+ } elseif ($parsed['operator'] == '&') {
+ $useQueryString = true;
+ } elseif ($parsed['operator'] == '#') {
+ $joiner = ',';
+ } elseif ($parsed['operator'] == ';') {
+ $useQueryString = true;
+ } elseif ($parsed['operator'] == '' || $parsed['operator'] == '+') {
+ $joiner = ',';
+ $prefix = '';
+ }
+
+ foreach ($parsed['values'] as $value) {
+
+ if (!array_key_exists($value['value'], $this->variables) || $this->variables[$value['value']] === null) {
+ continue;
+ }
+
+ $variable = $this->variables[$value['value']];
+ $actuallyUseQueryString = $useQueryString;
+ $expanded = '';
+
+ if (is_array($variable)) {
+
+ $isAssoc = $this->isAssoc($variable);
+ $kvp = array();
+ foreach ($variable as $key => $var) {
+
+ if ($isAssoc) {
+ $key = rawurlencode($key);
+ $isNestedArray = is_array($var);
+ } else {
+ $isNestedArray = false;
+ }
+
+ if (!$isNestedArray) {
+ $var = rawurlencode($var);
+ if ($parsed['operator'] == '+' || $parsed['operator'] == '#') {
+ $var = $this->decodeReserved($var);
+ }
+ }
+
+ if ($value['modifier'] == '*') {
+ if ($isAssoc) {
+ if ($isNestedArray) {
+ // Nested arrays must allow for deeply nested structures
+ $var = strtr(http_build_query(array($key => $var)), $rfc1738to3986);
+ } else {
+ $var = $key . '=' . $var;
+ }
+ } elseif ($key > 0 && $actuallyUseQueryString) {
+ $var = $value['value'] . '=' . $var;
+ }
+ }
+
+ $kvp[$key] = $var;
+ }
+
+ if (empty($variable)) {
+ $actuallyUseQueryString = false;
+ } elseif ($value['modifier'] == '*') {
+ $expanded = implode($joiner, $kvp);
+ if ($isAssoc) {
+ // Don't prepend the value name when using the explode modifier with an associative array
+ $actuallyUseQueryString = false;
+ }
+ } else {
+ if ($isAssoc) {
+ // When an associative array is encountered and the explode modifier is not set, then the
+ // result must be a comma separated list of keys followed by their respective values.
+ foreach ($kvp as $k => &$v) {
+ $v = $k . ',' . $v;
+ }
+ }
+ $expanded = implode(',', $kvp);
+ }
+
+ } else {
+ if ($value['modifier'] == ':') {
+ $variable = substr($variable, 0, $value['position']);
+ }
+ $expanded = rawurlencode($variable);
+ if ($parsed['operator'] == '+' || $parsed['operator'] == '#') {
+ $expanded = $this->decodeReserved($expanded);
+ }
+ }
+
+ if ($actuallyUseQueryString) {
+ if (!$expanded && $joiner != '&') {
+ $expanded = $value['value'];
+ } else {
+ $expanded = $value['value'] . '=' . $expanded;
+ }
+ }
+
+ $replacements[] = $expanded;
+ }
+
+ $ret = implode($joiner, $replacements);
+ if ($ret && $prefix) {
+ return $prefix . $ret;
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Determines if an array is associative
+ *
+ * @param array $array Array to check
+ *
+ * @return bool
+ */
+ private function isAssoc(array $array)
+ {
+ return (bool) count(array_filter(array_keys($array), 'is_string'));
+ }
+
+ /**
+ * Removes percent encoding on reserved characters (used with + and # modifiers)
+ *
+ * @param string $string String to fix
+ *
+ * @return string
+ */
+ private function decodeReserved($string)
+ {
+ return str_replace(self::$delimsPct, self::$delims, $string);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/UriTemplate/UriTemplateInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/UriTemplate/UriTemplateInterface.php
new file mode 100644
index 0000000..c81d515
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/UriTemplate/UriTemplateInterface.php
@@ -0,0 +1,21 @@
+utf8 = $utf8;
+ }
+
+ public function parseUrl($url)
+ {
+ Version::warn(__CLASS__ . ' is deprecated. Just use parse_url()');
+
+ static $defaults = array('scheme' => null, 'host' => null, 'path' => null, 'port' => null, 'query' => null,
+ 'user' => null, 'pass' => null, 'fragment' => null);
+
+ $parts = parse_url($url);
+
+ // Need to handle query parsing specially for UTF-8 requirements
+ if ($this->utf8 && isset($parts['query'])) {
+ $queryPos = strpos($url, '?');
+ if (isset($parts['fragment'])) {
+ $parts['query'] = substr($url, $queryPos + 1, strpos($url, '#') - $queryPos - 1);
+ } else {
+ $parts['query'] = substr($url, $queryPos + 1);
+ }
+ }
+
+ return $parts + $defaults;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Url/UrlParserInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Url/UrlParserInterface.php
new file mode 100644
index 0000000..89ac4b3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Parser/Url/UrlParserInterface.php
@@ -0,0 +1,19 @@
+=5.3.2"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Parser": "" }
+ },
+ "target-dir": "Guzzle/Parser",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Async/AsyncPlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Async/AsyncPlugin.php
new file mode 100644
index 0000000..ae59418
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Async/AsyncPlugin.php
@@ -0,0 +1,84 @@
+ 'onBeforeSend',
+ 'request.exception' => 'onRequestTimeout',
+ 'request.sent' => 'onRequestSent',
+ 'curl.callback.progress' => 'onCurlProgress'
+ );
+ }
+
+ /**
+ * Event used to ensure that progress callback are emitted from the curl handle's request mediator.
+ *
+ * @param Event $event
+ */
+ public function onBeforeSend(Event $event)
+ {
+ // Ensure that progress callbacks are dispatched
+ $event['request']->getCurlOptions()->set('progress', true);
+ }
+
+ /**
+ * Event emitted when a curl progress function is called. When the amount of data uploaded == the amount of data to
+ * upload OR any bytes have been downloaded, then time the request out after 1ms because we're done with
+ * transmitting the request, and tell curl not download a body.
+ *
+ * @param Event $event
+ */
+ public function onCurlProgress(Event $event)
+ {
+ if ($event['handle'] &&
+ ($event['downloaded'] || (isset($event['uploaded']) && $event['upload_size'] === $event['uploaded']))
+ ) {
+ // Timeout after 1ms
+ curl_setopt($event['handle'], CURLOPT_TIMEOUT_MS, 1);
+ // Even if the response is quick, tell curl not to download the body.
+ // - Note that we can only perform this shortcut if the request transmitted a body so as to ensure that the
+ // request method is not converted to a HEAD request before the request was sent via curl.
+ if ($event['uploaded']) {
+ curl_setopt($event['handle'], CURLOPT_NOBODY, true);
+ }
+ }
+ }
+
+ /**
+ * Event emitted when a curl exception occurs. Ignore the exception and set a mock response.
+ *
+ * @param Event $event
+ */
+ public function onRequestTimeout(Event $event)
+ {
+ if ($event['exception'] instanceof CurlException) {
+ $event['request']->setResponse(new Response(200, array(
+ 'X-Guzzle-Async' => 'Did not wait for the response'
+ )));
+ }
+ }
+
+ /**
+ * Event emitted when a request completes because it took less than 1ms. Add an X-Guzzle-Async header to notify the
+ * caller that there is no body in the message.
+ *
+ * @param Event $event
+ */
+ public function onRequestSent(Event $event)
+ {
+ // Let the caller know this was meant to be async
+ $event['request']->getResponse()->setHeader('X-Guzzle-Async', 'Did not wait for the response');
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Async/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Async/composer.json
new file mode 100644
index 0000000..dc3fc5b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Async/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-async",
+ "description": "Guzzle async request plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Async": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Async",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/AbstractBackoffStrategy.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/AbstractBackoffStrategy.php
new file mode 100644
index 0000000..0a85983
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/AbstractBackoffStrategy.php
@@ -0,0 +1,91 @@
+next = $next;
+ }
+
+ /**
+ * Get the next backoff strategy in the chain
+ *
+ * @return AbstractBackoffStrategy|null
+ */
+ public function getNext()
+ {
+ return $this->next;
+ }
+
+ public function getBackoffPeriod(
+ $retries,
+ RequestInterface $request,
+ Response $response = null,
+ HttpException $e = null
+ ) {
+ $delay = $this->getDelay($retries, $request, $response, $e);
+ if ($delay === false) {
+ // The strategy knows that this must not be retried
+ return false;
+ } elseif ($delay === null) {
+ // If the strategy is deferring a decision and the next strategy will not make a decision then return false
+ return !$this->next || !$this->next->makesDecision()
+ ? false
+ : $this->next->getBackoffPeriod($retries, $request, $response, $e);
+ } elseif ($delay === true) {
+ // if the strategy knows that it must retry but is deferring to the next to determine the delay
+ if (!$this->next) {
+ return 0;
+ } else {
+ $next = $this->next;
+ while ($next->makesDecision() && $next->getNext()) {
+ $next = $next->getNext();
+ }
+ return !$next->makesDecision() ? $next->getBackoffPeriod($retries, $request, $response, $e) : 0;
+ }
+ } else {
+ return $delay;
+ }
+ }
+
+ /**
+ * Check if the strategy does filtering and makes decisions on whether or not to retry.
+ *
+ * Strategies that return false will never retry if all of the previous strategies in a chain defer on a backoff
+ * decision.
+ *
+ * @return bool
+ */
+ abstract public function makesDecision();
+
+ /**
+ * Implement the concrete strategy
+ *
+ * @param int $retries Number of retries of the request
+ * @param RequestInterface $request Request that was sent
+ * @param Response $response Response that was received. Note that there may not be a response
+ * @param HttpException $e Exception that was encountered if any
+ *
+ * @return bool|int|null Returns false to not retry or the number of seconds to delay between retries. Return true
+ * or null to defer to the next strategy if available, and if not, return 0.
+ */
+ abstract protected function getDelay(
+ $retries,
+ RequestInterface $request,
+ Response $response = null,
+ HttpException $e = null
+ );
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/AbstractErrorCodeBackoffStrategy.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/AbstractErrorCodeBackoffStrategy.php
new file mode 100644
index 0000000..6ebee6c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/AbstractErrorCodeBackoffStrategy.php
@@ -0,0 +1,40 @@
+errorCodes = array_fill_keys($codes ?: static::$defaultErrorCodes, 1);
+ $this->next = $next;
+ }
+
+ /**
+ * Get the default failure codes to retry
+ *
+ * @return array
+ */
+ public static function getDefaultFailureCodes()
+ {
+ return static::$defaultErrorCodes;
+ }
+
+ public function makesDecision()
+ {
+ return true;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/BackoffLogger.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/BackoffLogger.php
new file mode 100644
index 0000000..ec54c28
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/BackoffLogger.php
@@ -0,0 +1,76 @@
+logger = $logger;
+ $this->formatter = $formatter ?: new MessageFormatter(self::DEFAULT_FORMAT);
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return array(BackoffPlugin::RETRY_EVENT => 'onRequestRetry');
+ }
+
+ /**
+ * Set the template to use for logging
+ *
+ * @param string $template Log message template
+ *
+ * @return self
+ */
+ public function setTemplate($template)
+ {
+ $this->formatter->setTemplate($template);
+
+ return $this;
+ }
+
+ /**
+ * Called when a request is being retried
+ *
+ * @param Event $event Event emitted
+ */
+ public function onRequestRetry(Event $event)
+ {
+ $this->logger->log($this->formatter->format(
+ $event['request'],
+ $event['response'],
+ $event['handle'],
+ array(
+ 'retries' => $event['retries'],
+ 'delay' => $event['delay']
+ )
+ ));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/BackoffPlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/BackoffPlugin.php
new file mode 100644
index 0000000..99ace05
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/BackoffPlugin.php
@@ -0,0 +1,126 @@
+strategy = $strategy;
+ }
+
+ /**
+ * Retrieve a basic truncated exponential backoff plugin that will retry HTTP errors and cURL errors
+ *
+ * @param int $maxRetries Maximum number of retries
+ * @param array $httpCodes HTTP response codes to retry
+ * @param array $curlCodes cURL error codes to retry
+ *
+ * @return self
+ */
+ public static function getExponentialBackoff(
+ $maxRetries = 3,
+ array $httpCodes = null,
+ array $curlCodes = null
+ ) {
+ return new self(new TruncatedBackoffStrategy($maxRetries,
+ new HttpBackoffStrategy($httpCodes,
+ new CurlBackoffStrategy($curlCodes,
+ new ExponentialBackoffStrategy()
+ )
+ )
+ ));
+ }
+
+ public static function getAllEvents()
+ {
+ return array(self::RETRY_EVENT);
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return array(
+ 'request.sent' => 'onRequestSent',
+ 'request.exception' => 'onRequestSent',
+ CurlMultiInterface::POLLING_REQUEST => 'onRequestPoll'
+ );
+ }
+
+ /**
+ * Called when a request has been sent and isn't finished processing
+ *
+ * @param Event $event
+ */
+ public function onRequestSent(Event $event)
+ {
+ $request = $event['request'];
+ $response = $event['response'];
+ $exception = $event['exception'];
+
+ $params = $request->getParams();
+ $retries = (int) $params->get(self::RETRY_PARAM);
+ $delay = $this->strategy->getBackoffPeriod($retries, $request, $response, $exception);
+
+ if ($delay !== false) {
+ // Calculate how long to wait until the request should be retried
+ $params->set(self::RETRY_PARAM, ++$retries)
+ ->set(self::DELAY_PARAM, microtime(true) + $delay);
+ // Send the request again
+ $request->setState(RequestInterface::STATE_TRANSFER);
+ $this->dispatch(self::RETRY_EVENT, array(
+ 'request' => $request,
+ 'response' => $response,
+ 'handle' => ($exception && $exception instanceof CurlException) ? $exception->getCurlHandle() : null,
+ 'retries' => $retries,
+ 'delay' => $delay
+ ));
+ }
+ }
+
+ /**
+ * Called when a request is polling in the curl multi object
+ *
+ * @param Event $event
+ */
+ public function onRequestPoll(Event $event)
+ {
+ $request = $event['request'];
+ $delay = $request->getParams()->get(self::DELAY_PARAM);
+
+ // If the duration of the delay has passed, retry the request using the pool
+ if (null !== $delay && microtime(true) >= $delay) {
+ // Remove the request from the pool and then add it back again. This is required for cURL to know that we
+ // want to retry sending the easy handle.
+ $request->getParams()->remove(self::DELAY_PARAM);
+ // Rewind the request body if possible
+ if ($request instanceof EntityEnclosingRequestInterface && $request->getBody()) {
+ $request->getBody()->seek(0);
+ }
+ $multi = $event['curl_multi'];
+ $multi->remove($request);
+ $multi->add($request);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/BackoffStrategyInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/BackoffStrategyInterface.php
new file mode 100644
index 0000000..4e590db
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/BackoffStrategyInterface.php
@@ -0,0 +1,30 @@
+callback = $callback;
+ $this->decision = (bool) $decision;
+ $this->next = $next;
+ }
+
+ public function makesDecision()
+ {
+ return $this->decision;
+ }
+
+ protected function getDelay($retries, RequestInterface $request, Response $response = null, HttpException $e = null)
+ {
+ return call_user_func($this->callback, $retries, $request, $response, $e);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/ConstantBackoffStrategy.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/ConstantBackoffStrategy.php
new file mode 100644
index 0000000..061d2a4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/ConstantBackoffStrategy.php
@@ -0,0 +1,34 @@
+delay = $delay;
+ }
+
+ public function makesDecision()
+ {
+ return false;
+ }
+
+ protected function getDelay($retries, RequestInterface $request, Response $response = null, HttpException $e = null)
+ {
+ return $this->delay;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php
new file mode 100644
index 0000000..a584ed4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/CurlBackoffStrategy.php
@@ -0,0 +1,28 @@
+errorCodes[$e->getErrorNo()]) ? true : null;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/ExponentialBackoffStrategy.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/ExponentialBackoffStrategy.php
new file mode 100644
index 0000000..fb2912d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/ExponentialBackoffStrategy.php
@@ -0,0 +1,25 @@
+isSuccessful()) {
+ return false;
+ } else {
+ return isset($this->errorCodes[$response->getStatusCode()]) ? true : null;
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/LinearBackoffStrategy.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/LinearBackoffStrategy.php
new file mode 100644
index 0000000..b35e8a4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/LinearBackoffStrategy.php
@@ -0,0 +1,36 @@
+step = $step;
+ }
+
+ public function makesDecision()
+ {
+ return false;
+ }
+
+ protected function getDelay($retries, RequestInterface $request, Response $response = null, HttpException $e = null)
+ {
+ return $retries * $this->step;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/ReasonPhraseBackoffStrategy.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/ReasonPhraseBackoffStrategy.php
new file mode 100644
index 0000000..4fd73fe
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/ReasonPhraseBackoffStrategy.php
@@ -0,0 +1,25 @@
+errorCodes[$response->getReasonPhrase()]) ? true : null;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/TruncatedBackoffStrategy.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/TruncatedBackoffStrategy.php
new file mode 100644
index 0000000..3608f35
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/TruncatedBackoffStrategy.php
@@ -0,0 +1,36 @@
+max = $maxRetries;
+ $this->next = $next;
+ }
+
+ public function makesDecision()
+ {
+ return true;
+ }
+
+ protected function getDelay($retries, RequestInterface $request, Response $response = null, HttpException $e = null)
+ {
+ return $retries < $this->max ? null : false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/composer.json
new file mode 100644
index 0000000..91c122c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Backoff/composer.json
@@ -0,0 +1,28 @@
+{
+ "name": "guzzle/plugin-backoff",
+ "description": "Guzzle backoff retry plugins",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version",
+ "guzzle/log": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Backoff": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Backoff",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/CacheKeyProviderInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/CacheKeyProviderInterface.php
new file mode 100644
index 0000000..7790f88
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/CacheKeyProviderInterface.php
@@ -0,0 +1,11 @@
+ new DefaultCacheStorage($options));
+ } elseif ($options instanceof CacheStorageInterface) {
+ $options = array('storage' => $options);
+ } elseif ($options) {
+ $options = array('storage' => new DefaultCacheStorage(CacheAdapterFactory::fromCache($options)));
+ } elseif (!class_exists('Doctrine\Common\Cache\ArrayCache')) {
+ // @codeCoverageIgnoreStart
+ throw new InvalidArgumentException('No cache was provided and Doctrine is not installed');
+ // @codeCoverageIgnoreEnd
+ }
+ }
+
+ $this->autoPurge = isset($options['auto_purge']) ? $options['auto_purge'] : false;
+
+ // Add a cache storage if a cache adapter was provided
+ $this->storage = isset($options['storage'])
+ ? $options['storage']
+ : new DefaultCacheStorage(new DoctrineCacheAdapter(new ArrayCache()));
+
+ if (!isset($options['can_cache'])) {
+ $this->canCache = new DefaultCanCacheStrategy();
+ } else {
+ $this->canCache = is_callable($options['can_cache'])
+ ? new CallbackCanCacheStrategy($options['can_cache'])
+ : $options['can_cache'];
+ }
+
+ // Use the provided revalidation strategy or the default
+ $this->revalidation = isset($options['revalidation'])
+ ? $options['revalidation']
+ : new DefaultRevalidation($this->storage, $this->canCache);
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return array(
+ 'request.before_send' => array('onRequestBeforeSend', -255),
+ 'request.sent' => array('onRequestSent', 255),
+ 'request.error' => array('onRequestError', 0),
+ 'request.exception' => array('onRequestException', 0),
+ );
+ }
+
+ /**
+ * Check if a response in cache will satisfy the request before sending
+ *
+ * @param Event $event
+ */
+ public function onRequestBeforeSend(Event $event)
+ {
+ $request = $event['request'];
+ $request->addHeader('Via', sprintf('%s GuzzleCache/%s', $request->getProtocolVersion(), Version::VERSION));
+
+ if (!$this->canCache->canCacheRequest($request)) {
+ switch ($request->getMethod()) {
+ case 'PURGE':
+ $this->purge($request);
+ $request->setResponse(new Response(200, array(), 'purged'));
+ break;
+ case 'PUT':
+ case 'POST':
+ case 'DELETE':
+ case 'PATCH':
+ if ($this->autoPurge) {
+ $this->purge($request);
+ }
+ }
+ return;
+ }
+
+ if ($response = $this->storage->fetch($request)) {
+ $params = $request->getParams();
+ $params['cache.lookup'] = true;
+ $response->setHeader(
+ 'Age',
+ time() - strtotime($response->getDate() ? : $response->getLastModified() ?: 'now')
+ );
+ // Validate that the response satisfies the request
+ if ($this->canResponseSatisfyRequest($request, $response)) {
+ if (!isset($params['cache.hit'])) {
+ $params['cache.hit'] = true;
+ }
+ $request->setResponse($response);
+ }
+ }
+ }
+
+ /**
+ * If possible, store a response in cache after sending
+ *
+ * @param Event $event
+ */
+ public function onRequestSent(Event $event)
+ {
+ $request = $event['request'];
+ $response = $event['response'];
+
+ if ($request->getParams()->get('cache.hit') === null &&
+ $this->canCache->canCacheRequest($request) &&
+ $this->canCache->canCacheResponse($response)
+ ) {
+ $this->storage->cache($request, $response);
+ }
+
+ $this->addResponseHeaders($request, $response);
+ }
+
+ /**
+ * If possible, return a cache response on an error
+ *
+ * @param Event $event
+ */
+ public function onRequestError(Event $event)
+ {
+ $request = $event['request'];
+
+ if (!$this->canCache->canCacheRequest($request)) {
+ return;
+ }
+
+ if ($response = $this->storage->fetch($request)) {
+ $response->setHeader(
+ 'Age',
+ time() - strtotime($response->getLastModified() ? : $response->getDate() ?: 'now')
+ );
+
+ if ($this->canResponseSatisfyFailedRequest($request, $response)) {
+ $request->getParams()->set('cache.hit', 'error');
+ $this->addResponseHeaders($request, $response);
+ $event['response'] = $response;
+ $event->stopPropagation();
+ }
+ }
+ }
+
+ /**
+ * If possible, set a cache response on a cURL exception
+ *
+ * @param Event $event
+ *
+ * @return null
+ */
+ public function onRequestException(Event $event)
+ {
+ if (!$event['exception'] instanceof CurlException) {
+ return;
+ }
+
+ $request = $event['request'];
+ if (!$this->canCache->canCacheRequest($request)) {
+ return;
+ }
+
+ if ($response = $this->storage->fetch($request)) {
+ $response->setHeader('Age', time() - strtotime($response->getDate() ? : 'now'));
+ if (!$this->canResponseSatisfyFailedRequest($request, $response)) {
+ return;
+ }
+ $request->getParams()->set('cache.hit', 'error');
+ $request->setResponse($response);
+ $this->addResponseHeaders($request, $response);
+ $event->stopPropagation();
+ }
+ }
+
+ /**
+ * Check if a cache response satisfies a request's caching constraints
+ *
+ * @param RequestInterface $request Request to validate
+ * @param Response $response Response to validate
+ *
+ * @return bool
+ */
+ public function canResponseSatisfyRequest(RequestInterface $request, Response $response)
+ {
+ $responseAge = $response->calculateAge();
+ $reqc = $request->getHeader('Cache-Control');
+ $resc = $response->getHeader('Cache-Control');
+
+ // Check the request's max-age header against the age of the response
+ if ($reqc && $reqc->hasDirective('max-age') &&
+ $responseAge > $reqc->getDirective('max-age')) {
+ return false;
+ }
+
+ // Check the response's max-age header
+ if ($response->isFresh() === false) {
+ $maxStale = $reqc ? $reqc->getDirective('max-stale') : null;
+ if (null !== $maxStale) {
+ if ($maxStale !== true && $response->getFreshness() < (-1 * $maxStale)) {
+ return false;
+ }
+ } elseif ($resc && $resc->hasDirective('max-age')
+ && $responseAge > $resc->getDirective('max-age')
+ ) {
+ return false;
+ }
+ }
+
+ if ($this->revalidation->shouldRevalidate($request, $response)) {
+ try {
+ return $this->revalidation->revalidate($request, $response);
+ } catch (CurlException $e) {
+ $request->getParams()->set('cache.hit', 'error');
+ return $this->canResponseSatisfyFailedRequest($request, $response);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Check if a cache response satisfies a failed request's caching constraints
+ *
+ * @param RequestInterface $request Request to validate
+ * @param Response $response Response to validate
+ *
+ * @return bool
+ */
+ public function canResponseSatisfyFailedRequest(RequestInterface $request, Response $response)
+ {
+ $reqc = $request->getHeader('Cache-Control');
+ $resc = $response->getHeader('Cache-Control');
+ $requestStaleIfError = $reqc ? $reqc->getDirective('stale-if-error') : null;
+ $responseStaleIfError = $resc ? $resc->getDirective('stale-if-error') : null;
+
+ if (!$requestStaleIfError && !$responseStaleIfError) {
+ return false;
+ }
+
+ if (is_numeric($requestStaleIfError) && $response->getAge() - $response->getMaxAge() > $requestStaleIfError) {
+ return false;
+ }
+
+ if (is_numeric($responseStaleIfError) && $response->getAge() - $response->getMaxAge() > $responseStaleIfError) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Purge all cache entries for a given URL
+ *
+ * @param string $url URL to purge
+ */
+ public function purge($url)
+ {
+ // BC compatibility with previous version that accepted a Request object
+ $url = $url instanceof RequestInterface ? $url->getUrl() : $url;
+ $this->storage->purge($url);
+ }
+
+ /**
+ * Add the plugin's headers to a response
+ *
+ * @param RequestInterface $request Request
+ * @param Response $response Response to add headers to
+ */
+ protected function addResponseHeaders(RequestInterface $request, Response $response)
+ {
+ $params = $request->getParams();
+ $response->setHeader('Via', sprintf('%s GuzzleCache/%s', $request->getProtocolVersion(), Version::VERSION));
+
+ $lookup = ($params['cache.lookup'] === true ? 'HIT' : 'MISS') . ' from GuzzleCache';
+ if ($header = $response->getHeader('X-Cache-Lookup')) {
+ // Don't add duplicates
+ $values = $header->toArray();
+ $values[] = $lookup;
+ $response->setHeader('X-Cache-Lookup', array_unique($values));
+ } else {
+ $response->setHeader('X-Cache-Lookup', $lookup);
+ }
+
+ if ($params['cache.hit'] === true) {
+ $xcache = 'HIT from GuzzleCache';
+ } elseif ($params['cache.hit'] == 'error') {
+ $xcache = 'HIT_ERROR from GuzzleCache';
+ } else {
+ $xcache = 'MISS from GuzzleCache';
+ }
+
+ if ($header = $response->getHeader('X-Cache')) {
+ // Don't add duplicates
+ $values = $header->toArray();
+ $values[] = $xcache;
+ $response->setHeader('X-Cache', array_unique($values));
+ } else {
+ $response->setHeader('X-Cache', $xcache);
+ }
+
+ if ($response->isFresh() === false) {
+ $response->addHeader('Warning', sprintf('110 GuzzleCache/%s "Response is stale"', Version::VERSION));
+ if ($params['cache.hit'] === 'error') {
+ $response->addHeader('Warning', sprintf('111 GuzzleCache/%s "Revalidation failed"', Version::VERSION));
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/CacheStorageInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/CacheStorageInterface.php
new file mode 100644
index 0000000..f3d9154
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/CacheStorageInterface.php
@@ -0,0 +1,43 @@
+requestCallback = $requestCallback;
+ $this->responseCallback = $responseCallback;
+ }
+
+ public function canCacheRequest(RequestInterface $request)
+ {
+ return $this->requestCallback
+ ? call_user_func($this->requestCallback, $request)
+ : parent::canCacheRequest($request);
+ }
+
+ public function canCacheResponse(Response $response)
+ {
+ return $this->responseCallback
+ ? call_user_func($this->responseCallback, $response)
+ : parent::canCacheResponse($response);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/CanCacheStrategyInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/CanCacheStrategyInterface.php
new file mode 100644
index 0000000..6e01a8e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/CanCacheStrategyInterface.php
@@ -0,0 +1,30 @@
+getParams()->get(self::CACHE_KEY);
+
+ if (!$key) {
+
+ $cloned = clone $request;
+ $cloned->removeHeader('Cache-Control');
+
+ // Check to see how and if the key should be filtered
+ foreach (explode(';', $request->getParams()->get(self::CACHE_KEY_FILTER)) as $part) {
+ $pieces = array_map('trim', explode('=', $part));
+ if (isset($pieces[1])) {
+ foreach (array_map('trim', explode(',', $pieces[1])) as $remove) {
+ if ($pieces[0] == 'header') {
+ $cloned->removeHeader($remove);
+ } elseif ($pieces[0] == 'query') {
+ $cloned->getQuery()->remove($remove);
+ }
+ }
+ }
+ }
+
+ $raw = (string) $cloned;
+ $key = 'GZ' . md5($raw);
+ $request->getParams()->set(self::CACHE_KEY, $key)->set(self::CACHE_KEY_RAW, $raw);
+ }
+
+ return $key;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DefaultCacheStorage.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DefaultCacheStorage.php
new file mode 100644
index 0000000..26d7a8b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DefaultCacheStorage.php
@@ -0,0 +1,266 @@
+cache = CacheAdapterFactory::fromCache($cache);
+ $this->defaultTtl = $defaultTtl;
+ $this->keyPrefix = $keyPrefix;
+ }
+
+ public function cache(RequestInterface $request, Response $response)
+ {
+ $currentTime = time();
+
+ $overrideTtl = $request->getParams()->get('cache.override_ttl');
+ if ($overrideTtl) {
+ $ttl = $overrideTtl;
+ } else {
+ $maxAge = $response->getMaxAge();
+ if ($maxAge !== null) {
+ $ttl = $maxAge;
+ } else {
+ $ttl = $this->defaultTtl;
+ }
+ }
+
+ if ($cacheControl = $response->getHeader('Cache-Control')) {
+ $stale = $cacheControl->getDirective('stale-if-error');
+ if ($stale === true) {
+ $ttl += $ttl;
+ } else if (is_numeric($stale)) {
+ $ttl += $stale;
+ }
+ }
+
+ // Determine which manifest key should be used
+ $key = $this->getCacheKey($request);
+ $persistedRequest = $this->persistHeaders($request);
+ $entries = array();
+
+ if ($manifest = $this->cache->fetch($key)) {
+ // Determine which cache entries should still be in the cache
+ $vary = $response->getVary();
+ foreach (unserialize($manifest) as $entry) {
+ // Check if the entry is expired
+ if ($entry[4] < $currentTime) {
+ continue;
+ }
+ $entry[1]['vary'] = isset($entry[1]['vary']) ? $entry[1]['vary'] : '';
+ if ($vary != $entry[1]['vary'] || !$this->requestsMatch($vary, $entry[0], $persistedRequest)) {
+ $entries[] = $entry;
+ }
+ }
+ }
+
+ // Persist the response body if needed
+ $bodyDigest = null;
+ if ($response->getBody() && $response->getBody()->getContentLength() > 0) {
+ $bodyDigest = $this->getBodyKey($request->getUrl(), $response->getBody());
+ $this->cache->save($bodyDigest, (string) $response->getBody(), $ttl);
+ }
+
+ array_unshift($entries, array(
+ $persistedRequest,
+ $this->persistHeaders($response),
+ $response->getStatusCode(),
+ $bodyDigest,
+ $currentTime + $ttl
+ ));
+
+ $this->cache->save($key, serialize($entries));
+ }
+
+ public function delete(RequestInterface $request)
+ {
+ $key = $this->getCacheKey($request);
+ if ($entries = $this->cache->fetch($key)) {
+ // Delete each cached body
+ foreach (unserialize($entries) as $entry) {
+ if ($entry[3]) {
+ $this->cache->delete($entry[3]);
+ }
+ }
+ $this->cache->delete($key);
+ }
+ }
+
+ public function purge($url)
+ {
+ foreach (array('GET', 'HEAD', 'POST', 'PUT', 'DELETE') as $method) {
+ $this->delete(new Request($method, $url));
+ }
+ }
+
+ public function fetch(RequestInterface $request)
+ {
+ $key = $this->getCacheKey($request);
+ if (!($entries = $this->cache->fetch($key))) {
+ return null;
+ }
+
+ $match = null;
+ $headers = $this->persistHeaders($request);
+ $entries = unserialize($entries);
+ foreach ($entries as $index => $entry) {
+ if ($this->requestsMatch(isset($entry[1]['vary']) ? $entry[1]['vary'] : '', $headers, $entry[0])) {
+ $match = $entry;
+ break;
+ }
+ }
+
+ if (!$match) {
+ return null;
+ }
+
+ // Ensure that the response is not expired
+ $response = null;
+ if ($match[4] < time()) {
+ $response = -1;
+ } else {
+ $response = new Response($match[2], $match[1]);
+ if ($match[3]) {
+ if ($body = $this->cache->fetch($match[3])) {
+ $response->setBody($body);
+ } else {
+ // The response is not valid because the body was somehow deleted
+ $response = -1;
+ }
+ }
+ }
+
+ if ($response === -1) {
+ // Remove the entry from the metadata and update the cache
+ unset($entries[$index]);
+ if ($entries) {
+ $this->cache->save($key, serialize($entries));
+ } else {
+ $this->cache->delete($key);
+ }
+ return null;
+ }
+
+ return $response;
+ }
+
+ /**
+ * Hash a request URL into a string that returns cache metadata
+ *
+ * @param RequestInterface $request
+ *
+ * @return string
+ */
+ protected function getCacheKey(RequestInterface $request)
+ {
+ // Allow cache.key_filter to trim down the URL cache key by removing generate query string values (e.g. auth)
+ if ($filter = $request->getParams()->get('cache.key_filter')) {
+ $url = $request->getUrl(true);
+ foreach (explode(',', $filter) as $remove) {
+ $url->getQuery()->remove(trim($remove));
+ }
+ } else {
+ $url = $request->getUrl();
+ }
+
+ return $this->keyPrefix . md5($request->getMethod() . ' ' . $url);
+ }
+
+ /**
+ * Create a cache key for a response's body
+ *
+ * @param string $url URL of the entry
+ * @param EntityBodyInterface $body Response body
+ *
+ * @return string
+ */
+ protected function getBodyKey($url, EntityBodyInterface $body)
+ {
+ return $this->keyPrefix . md5($url) . $body->getContentMd5();
+ }
+
+ /**
+ * Determines whether two Request HTTP header sets are non-varying
+ *
+ * @param string $vary Response vary header
+ * @param array $r1 HTTP header array
+ * @param array $r2 HTTP header array
+ *
+ * @return bool
+ */
+ private function requestsMatch($vary, $r1, $r2)
+ {
+ if ($vary) {
+ foreach (explode(',', $vary) as $header) {
+ $key = trim(strtolower($header));
+ $v1 = isset($r1[$key]) ? $r1[$key] : null;
+ $v2 = isset($r2[$key]) ? $r2[$key] : null;
+ if ($v1 !== $v2) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Creates an array of cacheable and normalized message headers
+ *
+ * @param MessageInterface $message
+ *
+ * @return array
+ */
+ private function persistHeaders(MessageInterface $message)
+ {
+ // Headers are excluded from the caching (see RFC 2616:13.5.1)
+ static $noCache = array(
+ 'age' => true,
+ 'connection' => true,
+ 'keep-alive' => true,
+ 'proxy-authenticate' => true,
+ 'proxy-authorization' => true,
+ 'te' => true,
+ 'trailers' => true,
+ 'transfer-encoding' => true,
+ 'upgrade' => true,
+ 'set-cookie' => true,
+ 'set-cookie2' => true
+ );
+
+ // Clone the response to not destroy any necessary headers when caching
+ $headers = $message->getHeaders()->getAll();
+ $headers = array_diff_key($headers, $noCache);
+ // Cast the headers to a string
+ $headers = array_map(function ($h) { return (string) $h; }, $headers);
+
+ return $headers;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DefaultCanCacheStrategy.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DefaultCanCacheStrategy.php
new file mode 100644
index 0000000..3ca1fbf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DefaultCanCacheStrategy.php
@@ -0,0 +1,32 @@
+getMethod() != RequestInterface::GET && $request->getMethod() != RequestInterface::HEAD) {
+ return false;
+ }
+
+ // Never cache requests when using no-store
+ if ($request->hasHeader('Cache-Control') && $request->getHeader('Cache-Control')->hasDirective('no-store')) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public function canCacheResponse(Response $response)
+ {
+ return $response->isSuccessful() && $response->canCache();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DefaultRevalidation.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DefaultRevalidation.php
new file mode 100644
index 0000000..af33234
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DefaultRevalidation.php
@@ -0,0 +1,174 @@
+storage = $cache;
+ $this->canCache = $canCache ?: new DefaultCanCacheStrategy();
+ }
+
+ public function revalidate(RequestInterface $request, Response $response)
+ {
+ try {
+ $revalidate = $this->createRevalidationRequest($request, $response);
+ $validateResponse = $revalidate->send();
+ if ($validateResponse->getStatusCode() == 200) {
+ return $this->handle200Response($request, $validateResponse);
+ } elseif ($validateResponse->getStatusCode() == 304) {
+ return $this->handle304Response($request, $validateResponse, $response);
+ }
+ } catch (BadResponseException $e) {
+ $this->handleBadResponse($e);
+ }
+
+ // Other exceptions encountered in the revalidation request are ignored
+ // in hopes that sending a request to the origin server will fix it
+ return false;
+ }
+
+ public function shouldRevalidate(RequestInterface $request, Response $response)
+ {
+ if ($request->getMethod() != RequestInterface::GET) {
+ return false;
+ }
+
+ $reqCache = $request->getHeader('Cache-Control');
+ $resCache = $response->getHeader('Cache-Control');
+
+ $revalidate = $request->getHeader('Pragma') == 'no-cache' ||
+ ($reqCache && ($reqCache->hasDirective('no-cache') || $reqCache->hasDirective('must-revalidate'))) ||
+ ($resCache && ($resCache->hasDirective('no-cache') || $resCache->hasDirective('must-revalidate')));
+
+ // Use the strong ETag validator if available and the response contains no Cache-Control directive
+ if (!$revalidate && !$resCache && $response->hasHeader('ETag')) {
+ $revalidate = true;
+ }
+
+ return $revalidate;
+ }
+
+ /**
+ * Handles a bad response when attempting to revalidate
+ *
+ * @param BadResponseException $e Exception encountered
+ *
+ * @throws BadResponseException
+ */
+ protected function handleBadResponse(BadResponseException $e)
+ {
+ // 404 errors mean the resource no longer exists, so remove from
+ // cache, and prevent an additional request by throwing the exception
+ if ($e->getResponse()->getStatusCode() == 404) {
+ $this->storage->delete($e->getRequest());
+ throw $e;
+ }
+ }
+
+ /**
+ * Creates a request to use for revalidation
+ *
+ * @param RequestInterface $request Request
+ * @param Response $response Response to revalidate
+ *
+ * @return RequestInterface returns a revalidation request
+ */
+ protected function createRevalidationRequest(RequestInterface $request, Response $response)
+ {
+ $revalidate = clone $request;
+ $revalidate->removeHeader('Pragma')->removeHeader('Cache-Control');
+
+ if ($response->getLastModified()) {
+ $revalidate->setHeader('If-Modified-Since', $response->getLastModified());
+ }
+
+ if ($response->getEtag()) {
+ $revalidate->setHeader('If-None-Match', $response->getEtag());
+ }
+
+ // Remove any cache plugins that might be on the request to prevent infinite recursive revalidations
+ $dispatcher = $revalidate->getEventDispatcher();
+ foreach ($dispatcher->getListeners() as $eventName => $listeners) {
+ foreach ($listeners as $listener) {
+ if (is_array($listener) && $listener[0] instanceof CachePlugin) {
+ $dispatcher->removeListener($eventName, $listener);
+ }
+ }
+ }
+
+ return $revalidate;
+ }
+
+ /**
+ * Handles a 200 response response from revalidating. The server does not support validation, so use this response.
+ *
+ * @param RequestInterface $request Request that was sent
+ * @param Response $validateResponse Response received
+ *
+ * @return bool Returns true if valid, false if invalid
+ */
+ protected function handle200Response(RequestInterface $request, Response $validateResponse)
+ {
+ $request->setResponse($validateResponse);
+ if ($this->canCache->canCacheResponse($validateResponse)) {
+ $this->storage->cache($request, $validateResponse);
+ }
+
+ return false;
+ }
+
+ /**
+ * Handle a 304 response and ensure that it is still valid
+ *
+ * @param RequestInterface $request Request that was sent
+ * @param Response $validateResponse Response received
+ * @param Response $response Original cached response
+ *
+ * @return bool Returns true if valid, false if invalid
+ */
+ protected function handle304Response(RequestInterface $request, Response $validateResponse, Response $response)
+ {
+ static $replaceHeaders = array('Date', 'Expires', 'Cache-Control', 'ETag', 'Last-Modified');
+
+ // Make sure that this response has the same ETag
+ if ($validateResponse->getEtag() != $response->getEtag()) {
+ return false;
+ }
+
+ // Replace cached headers with any of these headers from the
+ // origin server that might be more up to date
+ $modified = false;
+ foreach ($replaceHeaders as $name) {
+ if ($validateResponse->hasHeader($name)) {
+ $modified = true;
+ $response->setHeader($name, $validateResponse->getHeader($name));
+ }
+ }
+
+ // Store the updated response in cache
+ if ($modified && $this->canCache->canCacheResponse($response)) {
+ $this->storage->cache($request, $response);
+ }
+
+ return true;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DenyRevalidation.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DenyRevalidation.php
new file mode 100644
index 0000000..88b86f3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cache/DenyRevalidation.php
@@ -0,0 +1,19 @@
+=5.3.2",
+ "guzzle/http": "self.version",
+ "guzzle/cache": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Cache": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Cache",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/Cookie.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/Cookie.php
new file mode 100644
index 0000000..5218e5f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/Cookie.php
@@ -0,0 +1,538 @@
+ '',
+ 'value' => '',
+ 'domain' => '',
+ 'path' => '/',
+ 'expires' => null,
+ 'max_age' => 0,
+ 'comment' => null,
+ 'comment_url' => null,
+ 'port' => array(),
+ 'version' => null,
+ 'secure' => false,
+ 'discard' => false,
+ 'http_only' => false
+ );
+
+ $this->data = array_merge($defaults, $data);
+ // Extract the expires value and turn it into a UNIX timestamp if needed
+ if (!$this->getExpires() && $this->getMaxAge()) {
+ // Calculate the expires date
+ $this->setExpires(time() + (int) $this->getMaxAge());
+ } elseif ($this->getExpires() && !is_numeric($this->getExpires())) {
+ $this->setExpires(strtotime($this->getExpires()));
+ }
+ }
+
+ /**
+ * Get the cookie as an array
+ *
+ * @return array
+ */
+ public function toArray()
+ {
+ return $this->data;
+ }
+
+ /**
+ * Get the cookie name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->data['name'];
+ }
+
+ /**
+ * Set the cookie name
+ *
+ * @param string $name Cookie name
+ *
+ * @return Cookie
+ */
+ public function setName($name)
+ {
+ return $this->setData('name', $name);
+ }
+
+ /**
+ * Get the cookie value
+ *
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->data['value'];
+ }
+
+ /**
+ * Set the cookie value
+ *
+ * @param string $value Cookie value
+ *
+ * @return Cookie
+ */
+ public function setValue($value)
+ {
+ return $this->setData('value', $value);
+ }
+
+ /**
+ * Get the domain
+ *
+ * @return string|null
+ */
+ public function getDomain()
+ {
+ return $this->data['domain'];
+ }
+
+ /**
+ * Set the domain of the cookie
+ *
+ * @param string $domain
+ *
+ * @return Cookie
+ */
+ public function setDomain($domain)
+ {
+ return $this->setData('domain', $domain);
+ }
+
+ /**
+ * Get the path
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return $this->data['path'];
+ }
+
+ /**
+ * Set the path of the cookie
+ *
+ * @param string $path Path of the cookie
+ *
+ * @return Cookie
+ */
+ public function setPath($path)
+ {
+ return $this->setData('path', $path);
+ }
+
+ /**
+ * Maximum lifetime of the cookie in seconds
+ *
+ * @return int|null
+ */
+ public function getMaxAge()
+ {
+ return $this->data['max_age'];
+ }
+
+ /**
+ * Set the max-age of the cookie
+ *
+ * @param int $maxAge Max age of the cookie in seconds
+ *
+ * @return Cookie
+ */
+ public function setMaxAge($maxAge)
+ {
+ return $this->setData('max_age', $maxAge);
+ }
+
+ /**
+ * The UNIX timestamp when the cookie expires
+ *
+ * @return mixed
+ */
+ public function getExpires()
+ {
+ return $this->data['expires'];
+ }
+
+ /**
+ * Set the unix timestamp for which the cookie will expire
+ *
+ * @param int $timestamp Unix timestamp
+ *
+ * @return Cookie
+ */
+ public function setExpires($timestamp)
+ {
+ return $this->setData('expires', $timestamp);
+ }
+
+ /**
+ * Version of the cookie specification. RFC 2965 is 1
+ *
+ * @return mixed
+ */
+ public function getVersion()
+ {
+ return $this->data['version'];
+ }
+
+ /**
+ * Set the cookie version
+ *
+ * @param string|int $version Version to set
+ *
+ * @return Cookie
+ */
+ public function setVersion($version)
+ {
+ return $this->setData('version', $version);
+ }
+
+ /**
+ * Get whether or not this is a secure cookie
+ *
+ * @return null|bool
+ */
+ public function getSecure()
+ {
+ return $this->data['secure'];
+ }
+
+ /**
+ * Set whether or not the cookie is secure
+ *
+ * @param bool $secure Set to true or false if secure
+ *
+ * @return Cookie
+ */
+ public function setSecure($secure)
+ {
+ return $this->setData('secure', (bool) $secure);
+ }
+
+ /**
+ * Get whether or not this is a session cookie
+ *
+ * @return null|bool
+ */
+ public function getDiscard()
+ {
+ return $this->data['discard'];
+ }
+
+ /**
+ * Set whether or not this is a session cookie
+ *
+ * @param bool $discard Set to true or false if this is a session cookie
+ *
+ * @return Cookie
+ */
+ public function setDiscard($discard)
+ {
+ return $this->setData('discard', $discard);
+ }
+
+ /**
+ * Get the comment
+ *
+ * @return string|null
+ */
+ public function getComment()
+ {
+ return $this->data['comment'];
+ }
+
+ /**
+ * Set the comment of the cookie
+ *
+ * @param string $comment Cookie comment
+ *
+ * @return Cookie
+ */
+ public function setComment($comment)
+ {
+ return $this->setData('comment', $comment);
+ }
+
+ /**
+ * Get the comment URL of the cookie
+ *
+ * @return string|null
+ */
+ public function getCommentUrl()
+ {
+ return $this->data['comment_url'];
+ }
+
+ /**
+ * Set the comment URL of the cookie
+ *
+ * @param string $commentUrl Cookie comment URL for more information
+ *
+ * @return Cookie
+ */
+ public function setCommentUrl($commentUrl)
+ {
+ return $this->setData('comment_url', $commentUrl);
+ }
+
+ /**
+ * Get an array of acceptable ports this cookie can be used with
+ *
+ * @return array
+ */
+ public function getPorts()
+ {
+ return $this->data['port'];
+ }
+
+ /**
+ * Set a list of acceptable ports this cookie can be used with
+ *
+ * @param array $ports Array of acceptable ports
+ *
+ * @return Cookie
+ */
+ public function setPorts(array $ports)
+ {
+ return $this->setData('port', $ports);
+ }
+
+ /**
+ * Get whether or not this is an HTTP only cookie
+ *
+ * @return bool
+ */
+ public function getHttpOnly()
+ {
+ return $this->data['http_only'];
+ }
+
+ /**
+ * Set whether or not this is an HTTP only cookie
+ *
+ * @param bool $httpOnly Set to true or false if this is HTTP only
+ *
+ * @return Cookie
+ */
+ public function setHttpOnly($httpOnly)
+ {
+ return $this->setData('http_only', $httpOnly);
+ }
+
+ /**
+ * Get an array of extra cookie data
+ *
+ * @return array
+ */
+ public function getAttributes()
+ {
+ return $this->data['data'];
+ }
+
+ /**
+ * Get a specific data point from the extra cookie data
+ *
+ * @param string $name Name of the data point to retrieve
+ *
+ * @return null|string
+ */
+ public function getAttribute($name)
+ {
+ return array_key_exists($name, $this->data['data']) ? $this->data['data'][$name] : null;
+ }
+
+ /**
+ * Set a cookie data attribute
+ *
+ * @param string $name Name of the attribute to set
+ * @param string $value Value to set
+ *
+ * @return Cookie
+ */
+ public function setAttribute($name, $value)
+ {
+ $this->data['data'][$name] = $value;
+
+ return $this;
+ }
+
+ /**
+ * Check if the cookie matches a path value
+ *
+ * @param string $path Path to check against
+ *
+ * @return bool
+ */
+ public function matchesPath($path)
+ {
+ // RFC6265 http://tools.ietf.org/search/rfc6265#section-5.1.4
+ // A request-path path-matches a given cookie-path if at least one of
+ // the following conditions holds:
+
+ // o The cookie-path and the request-path are identical.
+ if ($path == $this->getPath()) {
+ return true;
+ }
+
+ $pos = stripos($path, $this->getPath());
+ if ($pos === 0) {
+ // o The cookie-path is a prefix of the request-path, and the last
+ // character of the cookie-path is %x2F ("/").
+ if (substr($this->getPath(), -1, 1) === "/") {
+ return true;
+ }
+
+ // o The cookie-path is a prefix of the request-path, and the first
+ // character of the request-path that is not included in the cookie-
+ // path is a %x2F ("/") character.
+ if (substr($path, strlen($this->getPath()), 1) === "/") {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Check if the cookie matches a domain value
+ *
+ * @param string $domain Domain to check against
+ *
+ * @return bool
+ */
+ public function matchesDomain($domain)
+ {
+ // Remove the leading '.' as per spec in RFC 6265: http://tools.ietf.org/html/rfc6265#section-5.2.3
+ $cookieDomain = ltrim($this->getDomain(), '.');
+
+ // Domain not set or exact match.
+ if (!$cookieDomain || !strcasecmp($domain, $cookieDomain)) {
+ return true;
+ }
+
+ // Matching the subdomain according to RFC 6265: http://tools.ietf.org/html/rfc6265#section-5.1.3
+ if (filter_var($domain, FILTER_VALIDATE_IP)) {
+ return false;
+ }
+
+ return (bool) preg_match('/\.' . preg_quote($cookieDomain, '/') . '$/i', $domain);
+ }
+
+ /**
+ * Check if the cookie is compatible with a specific port
+ *
+ * @param int $port Port to check
+ *
+ * @return bool
+ */
+ public function matchesPort($port)
+ {
+ return count($this->getPorts()) == 0 || in_array($port, $this->getPorts());
+ }
+
+ /**
+ * Check if the cookie is expired
+ *
+ * @return bool
+ */
+ public function isExpired()
+ {
+ return $this->getExpires() && time() > $this->getExpires();
+ }
+
+ /**
+ * Check if the cookie is valid according to RFC 6265
+ *
+ * @return bool|string Returns true if valid or an error message if invalid
+ */
+ public function validate()
+ {
+ // Names must not be empty, but can be 0
+ $name = $this->getName();
+ if (empty($name) && !is_numeric($name)) {
+ return 'The cookie name must not be empty';
+ }
+
+ // Check if any of the invalid characters are present in the cookie name
+ if (strpbrk($name, self::getInvalidCharacters()) !== false) {
+ return 'The cookie name must not contain invalid characters: ' . $name;
+ }
+
+ // Value must not be empty, but can be 0
+ $value = $this->getValue();
+ if (empty($value) && !is_numeric($value)) {
+ return 'The cookie value must not be empty';
+ }
+
+ // Domains must not be empty, but can be 0
+ // A "0" is not a valid internet domain, but may be used as server name in a private network
+ $domain = $this->getDomain();
+ if (empty($domain) && !is_numeric($domain)) {
+ return 'The cookie domain must not be empty';
+ }
+
+ return true;
+ }
+
+ /**
+ * Set a value and return the cookie object
+ *
+ * @param string $key Key to set
+ * @param string $value Value to set
+ *
+ * @return Cookie
+ */
+ private function setData($key, $value)
+ {
+ $this->data[$key] = $value;
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php
new file mode 100644
index 0000000..6b67503
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/CookieJar/ArrayCookieJar.php
@@ -0,0 +1,237 @@
+strictMode = $strictMode;
+ }
+
+ /**
+ * Enable or disable strict mode on the cookie jar
+ *
+ * @param bool $strictMode Set to true to throw exceptions when invalid cookies are added. False to ignore them.
+ *
+ * @return self
+ */
+ public function setStrictMode($strictMode)
+ {
+ $this->strictMode = $strictMode;
+ }
+
+ public function remove($domain = null, $path = null, $name = null)
+ {
+ $cookies = $this->all($domain, $path, $name, false, false);
+ $this->cookies = array_filter($this->cookies, function (Cookie $cookie) use ($cookies) {
+ return !in_array($cookie, $cookies, true);
+ });
+
+ return $this;
+ }
+
+ public function removeTemporary()
+ {
+ $this->cookies = array_filter($this->cookies, function (Cookie $cookie) {
+ return !$cookie->getDiscard() && $cookie->getExpires();
+ });
+
+ return $this;
+ }
+
+ public function removeExpired()
+ {
+ $currentTime = time();
+ $this->cookies = array_filter($this->cookies, function (Cookie $cookie) use ($currentTime) {
+ return !$cookie->getExpires() || $currentTime < $cookie->getExpires();
+ });
+
+ return $this;
+ }
+
+ public function all($domain = null, $path = null, $name = null, $skipDiscardable = false, $skipExpired = true)
+ {
+ return array_values(array_filter($this->cookies, function (Cookie $cookie) use (
+ $domain,
+ $path,
+ $name,
+ $skipDiscardable,
+ $skipExpired
+ ) {
+ return false === (($name && $cookie->getName() != $name) ||
+ ($skipExpired && $cookie->isExpired()) ||
+ ($skipDiscardable && ($cookie->getDiscard() || !$cookie->getExpires())) ||
+ ($path && !$cookie->matchesPath($path)) ||
+ ($domain && !$cookie->matchesDomain($domain)));
+ }));
+ }
+
+ public function add(Cookie $cookie)
+ {
+ // Only allow cookies with set and valid domain, name, value
+ $result = $cookie->validate();
+ if ($result !== true) {
+ if ($this->strictMode) {
+ throw new InvalidCookieException($result);
+ } else {
+ $this->removeCookieIfEmpty($cookie);
+ return false;
+ }
+ }
+
+ // Resolve conflicts with previously set cookies
+ foreach ($this->cookies as $i => $c) {
+
+ // Two cookies are identical, when their path, domain, port and name are identical
+ if ($c->getPath() != $cookie->getPath() ||
+ $c->getDomain() != $cookie->getDomain() ||
+ $c->getPorts() != $cookie->getPorts() ||
+ $c->getName() != $cookie->getName()
+ ) {
+ continue;
+ }
+
+ // The previously set cookie is a discard cookie and this one is not so allow the new cookie to be set
+ if (!$cookie->getDiscard() && $c->getDiscard()) {
+ unset($this->cookies[$i]);
+ continue;
+ }
+
+ // If the new cookie's expiration is further into the future, then replace the old cookie
+ if ($cookie->getExpires() > $c->getExpires()) {
+ unset($this->cookies[$i]);
+ continue;
+ }
+
+ // If the value has changed, we better change it
+ if ($cookie->getValue() !== $c->getValue()) {
+ unset($this->cookies[$i]);
+ continue;
+ }
+
+ // The cookie exists, so no need to continue
+ return false;
+ }
+
+ $this->cookies[] = $cookie;
+
+ return true;
+ }
+
+ /**
+ * Serializes the cookie cookieJar
+ *
+ * @return string
+ */
+ public function serialize()
+ {
+ // Only serialize long term cookies and unexpired cookies
+ return json_encode(array_map(function (Cookie $cookie) {
+ return $cookie->toArray();
+ }, $this->all(null, null, null, true, true)));
+ }
+
+ /**
+ * Unserializes the cookie cookieJar
+ */
+ public function unserialize($data)
+ {
+ $data = json_decode($data, true);
+ if (empty($data)) {
+ $this->cookies = array();
+ } else {
+ $this->cookies = array_map(function (array $cookie) {
+ return new Cookie($cookie);
+ }, $data);
+ }
+ }
+
+ /**
+ * Returns the total number of stored cookies
+ *
+ * @return int
+ */
+ public function count()
+ {
+ return count($this->cookies);
+ }
+
+ /**
+ * Returns an iterator
+ *
+ * @return \ArrayIterator
+ */
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->cookies);
+ }
+
+ public function addCookiesFromResponse(Response $response, RequestInterface $request = null)
+ {
+ if ($cookieHeader = $response->getHeader('Set-Cookie')) {
+ $parser = ParserRegistry::getInstance()->getParser('cookie');
+ foreach ($cookieHeader as $cookie) {
+ if ($parsed = $request
+ ? $parser->parseCookie($cookie, $request->getHost(), $request->getPath())
+ : $parser->parseCookie($cookie)
+ ) {
+ // Break up cookie v2 into multiple cookies
+ foreach ($parsed['cookies'] as $key => $value) {
+ $row = $parsed;
+ $row['name'] = $key;
+ $row['value'] = $value;
+ unset($row['cookies']);
+ $this->add(new Cookie($row));
+ }
+ }
+ }
+ }
+ }
+
+ public function getMatchingCookies(RequestInterface $request)
+ {
+ // Find cookies that match this request
+ $cookies = $this->all($request->getHost(), $request->getPath());
+ // Remove ineligible cookies
+ foreach ($cookies as $index => $cookie) {
+ if (!$cookie->matchesPort($request->getPort()) || ($cookie->getSecure() && $request->getScheme() != 'https')) {
+ unset($cookies[$index]);
+ }
+ };
+
+ return $cookies;
+ }
+
+ /**
+ * If a cookie already exists and the server asks to set it again with a null value, the
+ * cookie must be deleted.
+ *
+ * @param \Guzzle\Plugin\Cookie\Cookie $cookie
+ */
+ private function removeCookieIfEmpty(Cookie $cookie)
+ {
+ $cookieValue = $cookie->getValue();
+ if ($cookieValue === null || $cookieValue === '') {
+ $this->remove($cookie->getDomain(), $cookie->getPath(), $cookie->getName());
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/CookieJar/CookieJarInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/CookieJar/CookieJarInterface.php
new file mode 100644
index 0000000..7faa7d2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/CookieJar/CookieJarInterface.php
@@ -0,0 +1,85 @@
+filename = $cookieFile;
+ $this->load();
+ }
+
+ /**
+ * Saves the file when shutting down
+ */
+ public function __destruct()
+ {
+ $this->persist();
+ }
+
+ /**
+ * Save the contents of the data array to the file
+ *
+ * @throws RuntimeException if the file cannot be found or created
+ */
+ protected function persist()
+ {
+ if (false === file_put_contents($this->filename, $this->serialize())) {
+ // @codeCoverageIgnoreStart
+ throw new RuntimeException('Unable to open file ' . $this->filename);
+ // @codeCoverageIgnoreEnd
+ }
+ }
+
+ /**
+ * Load the contents of the json formatted file into the data array and discard any unsaved state
+ */
+ protected function load()
+ {
+ $json = file_get_contents($this->filename);
+ if (false === $json) {
+ // @codeCoverageIgnoreStart
+ throw new RuntimeException('Unable to open file ' . $this->filename);
+ // @codeCoverageIgnoreEnd
+ }
+
+ $this->unserialize($json);
+ $this->cookies = $this->cookies ?: array();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/CookiePlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/CookiePlugin.php
new file mode 100644
index 0000000..df3210e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/CookiePlugin.php
@@ -0,0 +1,70 @@
+cookieJar = $cookieJar ?: new ArrayCookieJar();
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return array(
+ 'request.before_send' => array('onRequestBeforeSend', 125),
+ 'request.sent' => array('onRequestSent', 125)
+ );
+ }
+
+ /**
+ * Get the cookie cookieJar
+ *
+ * @return CookieJarInterface
+ */
+ public function getCookieJar()
+ {
+ return $this->cookieJar;
+ }
+
+ /**
+ * Add cookies before a request is sent
+ *
+ * @param Event $event
+ */
+ public function onRequestBeforeSend(Event $event)
+ {
+ $request = $event['request'];
+ if (!$request->getParams()->get('cookies.disable')) {
+ $request->removeHeader('Cookie');
+ // Find cookies that match this request
+ foreach ($this->cookieJar->getMatchingCookies($request) as $cookie) {
+ $request->addCookie($cookie->getName(), $cookie->getValue());
+ }
+ }
+ }
+
+ /**
+ * Extract cookies from a sent request
+ *
+ * @param Event $event
+ */
+ public function onRequestSent(Event $event)
+ {
+ $this->cookieJar->addCookiesFromResponse($event['response'], $event['request']);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/Exception/InvalidCookieException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/Exception/InvalidCookieException.php
new file mode 100644
index 0000000..b1fa6fd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Cookie/Exception/InvalidCookieException.php
@@ -0,0 +1,7 @@
+=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Cookie": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Cookie",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/CurlAuth/CurlAuthPlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/CurlAuth/CurlAuthPlugin.php
new file mode 100644
index 0000000..610e60c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/CurlAuth/CurlAuthPlugin.php
@@ -0,0 +1,46 @@
+getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');
+ */
+class CurlAuthPlugin implements EventSubscriberInterface
+{
+ private $username;
+ private $password;
+ private $scheme;
+
+ /**
+ * @param string $username HTTP basic auth username
+ * @param string $password Password
+ * @param int $scheme Curl auth scheme
+ */
+ public function __construct($username, $password, $scheme=CURLAUTH_BASIC)
+ {
+ Version::warn(__CLASS__ . " is deprecated. Use \$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');");
+ $this->username = $username;
+ $this->password = $password;
+ $this->scheme = $scheme;
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return array('client.create_request' => array('onRequestCreate', 255));
+ }
+
+ /**
+ * Add basic auth
+ *
+ * @param Event $event
+ */
+ public function onRequestCreate(Event $event)
+ {
+ $event['request']->setAuth($this->username, $this->password, $this->scheme);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/CurlAuth/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/CurlAuth/composer.json
new file mode 100644
index 0000000..edc8b24
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/CurlAuth/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-curlauth",
+ "description": "Guzzle cURL authorization plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "curl", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\CurlAuth": "" }
+ },
+ "target-dir": "Guzzle/Plugin/CurlAuth",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/ErrorResponseExceptionInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/ErrorResponseExceptionInterface.php
new file mode 100644
index 0000000..5dce8bd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/ErrorResponseExceptionInterface.php
@@ -0,0 +1,22 @@
+ array('onCommandBeforeSend', -1));
+ }
+
+ /**
+ * Adds a listener to requests before they sent from a command
+ *
+ * @param Event $event Event emitted
+ */
+ public function onCommandBeforeSend(Event $event)
+ {
+ $command = $event['command'];
+ if ($operation = $command->getOperation()) {
+ if ($operation->getErrorResponses()) {
+ $request = $command->getRequest();
+ $request->getEventDispatcher()
+ ->addListener('request.complete', $this->getErrorClosure($request, $command, $operation));
+ }
+ }
+ }
+
+ /**
+ * @param RequestInterface $request Request that received an error
+ * @param CommandInterface $command Command that created the request
+ * @param Operation $operation Operation that defines the request and errors
+ *
+ * @return \Closure Returns a closure
+ * @throws ErrorResponseException
+ */
+ protected function getErrorClosure(RequestInterface $request, CommandInterface $command, Operation $operation)
+ {
+ return function (Event $event) use ($request, $command, $operation) {
+ $response = $event['response'];
+ foreach ($operation->getErrorResponses() as $error) {
+ if (!isset($error['class'])) {
+ continue;
+ }
+ if (isset($error['code']) && $response->getStatusCode() != $error['code']) {
+ continue;
+ }
+ if (isset($error['reason']) && $response->getReasonPhrase() != $error['reason']) {
+ continue;
+ }
+ $className = $error['class'];
+ $errorClassInterface = __NAMESPACE__ . '\\ErrorResponseExceptionInterface';
+ if (!class_exists($className)) {
+ throw new ErrorResponseException("{$className} does not exist");
+ } elseif (!(in_array($errorClassInterface, class_implements($className)))) {
+ throw new ErrorResponseException("{$className} must implement {$errorClassInterface}");
+ }
+ throw $className::fromCommand($command, $response);
+ }
+ };
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/Exception/ErrorResponseException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/Exception/ErrorResponseException.php
new file mode 100644
index 0000000..1d89e40
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/ErrorResponse/Exception/ErrorResponseException.php
@@ -0,0 +1,7 @@
+=5.3.2",
+ "guzzle/service": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\ErrorResponse": "" }
+ },
+ "target-dir": "Guzzle/Plugin/ErrorResponse",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/History/HistoryPlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/History/HistoryPlugin.php
new file mode 100644
index 0000000..7375e89
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/History/HistoryPlugin.php
@@ -0,0 +1,163 @@
+ array('onRequestSent', 9999));
+ }
+
+ /**
+ * Convert to a string that contains all request and response headers
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ $lines = array();
+ foreach ($this->transactions as $entry) {
+ $response = isset($entry['response']) ? $entry['response'] : '';
+ $lines[] = '> ' . trim($entry['request']) . "\n\n< " . trim($response) . "\n";
+ }
+
+ return implode("\n", $lines);
+ }
+
+ /**
+ * Add a request to the history
+ *
+ * @param RequestInterface $request Request to add
+ * @param Response $response Response of the request
+ *
+ * @return HistoryPlugin
+ */
+ public function add(RequestInterface $request, Response $response = null)
+ {
+ if (!$response && $request->getResponse()) {
+ $response = $request->getResponse();
+ }
+
+ $this->transactions[] = array('request' => $request, 'response' => $response);
+ if (count($this->transactions) > $this->getlimit()) {
+ array_shift($this->transactions);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the max number of requests to store
+ *
+ * @param int $limit Limit
+ *
+ * @return HistoryPlugin
+ */
+ public function setLimit($limit)
+ {
+ $this->limit = (int) $limit;
+
+ return $this;
+ }
+
+ /**
+ * Get the request limit
+ *
+ * @return int
+ */
+ public function getLimit()
+ {
+ return $this->limit;
+ }
+
+ /**
+ * Get all of the raw transactions in the form of an array of associative arrays containing
+ * 'request' and 'response' keys.
+ *
+ * @return array
+ */
+ public function getAll()
+ {
+ return $this->transactions;
+ }
+
+ /**
+ * Get the requests in the history
+ *
+ * @return \ArrayIterator
+ */
+ public function getIterator()
+ {
+ // Return an iterator just like the old iteration of the HistoryPlugin for BC compatibility (use getAll())
+ return new \ArrayIterator(array_map(function ($entry) {
+ $entry['request']->getParams()->set('actual_response', $entry['response']);
+ return $entry['request'];
+ }, $this->transactions));
+ }
+
+ /**
+ * Get the number of requests in the history
+ *
+ * @return int
+ */
+ public function count()
+ {
+ return count($this->transactions);
+ }
+
+ /**
+ * Get the last request sent
+ *
+ * @return RequestInterface
+ */
+ public function getLastRequest()
+ {
+ $last = end($this->transactions);
+
+ return $last['request'];
+ }
+
+ /**
+ * Get the last response in the history
+ *
+ * @return Response|null
+ */
+ public function getLastResponse()
+ {
+ $last = end($this->transactions);
+
+ return isset($last['response']) ? $last['response'] : null;
+ }
+
+ /**
+ * Clears the history
+ *
+ * @return HistoryPlugin
+ */
+ public function clear()
+ {
+ $this->transactions = array();
+
+ return $this;
+ }
+
+ public function onRequestSent(Event $event)
+ {
+ $this->add($event['request'], $event['response']);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/History/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/History/composer.json
new file mode 100644
index 0000000..ba0bf2c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/History/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-history",
+ "description": "Guzzle history plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\History": "" }
+ },
+ "target-dir": "Guzzle/Plugin/History",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Log/LogPlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Log/LogPlugin.php
new file mode 100644
index 0000000..cabdea8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Log/LogPlugin.php
@@ -0,0 +1,161 @@
+logAdapter = $logAdapter;
+ $this->formatter = $formatter instanceof MessageFormatter ? $formatter : new MessageFormatter($formatter);
+ $this->wireBodies = $wireBodies;
+ }
+
+ /**
+ * Get a log plugin that outputs full request, response, and curl error information to stderr
+ *
+ * @param bool $wireBodies Set to false to disable request/response body output when they use are not repeatable
+ * @param resource $stream Stream to write to when logging. Defaults to STDERR when it is available
+ *
+ * @return self
+ */
+ public static function getDebugPlugin($wireBodies = true, $stream = null)
+ {
+ if ($stream === null) {
+ if (defined('STDERR')) {
+ $stream = STDERR;
+ } else {
+ $stream = fopen('php://output', 'w');
+ }
+ }
+
+ return new self(new ClosureLogAdapter(function ($m) use ($stream) {
+ fwrite($stream, $m . PHP_EOL);
+ }), "# Request:\n{request}\n\n# Response:\n{response}\n\n# Errors: {curl_code} {curl_error}", $wireBodies);
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return array(
+ 'curl.callback.write' => array('onCurlWrite', 255),
+ 'curl.callback.read' => array('onCurlRead', 255),
+ 'request.before_send' => array('onRequestBeforeSend', 255),
+ 'request.sent' => array('onRequestSent', 255)
+ );
+ }
+
+ /**
+ * Event triggered when curl data is read from a request
+ *
+ * @param Event $event
+ */
+ public function onCurlRead(Event $event)
+ {
+ // Stream the request body to the log if the body is not repeatable
+ if ($wire = $event['request']->getParams()->get('request_wire')) {
+ $wire->write($event['read']);
+ }
+ }
+
+ /**
+ * Event triggered when curl data is written to a response
+ *
+ * @param Event $event
+ */
+ public function onCurlWrite(Event $event)
+ {
+ // Stream the response body to the log if the body is not repeatable
+ if ($wire = $event['request']->getParams()->get('response_wire')) {
+ $wire->write($event['write']);
+ }
+ }
+
+ /**
+ * Called before a request is sent
+ *
+ * @param Event $event
+ */
+ public function onRequestBeforeSend(Event $event)
+ {
+ if ($this->wireBodies) {
+ $request = $event['request'];
+ // Ensure that curl IO events are emitted
+ $request->getCurlOptions()->set('emit_io', true);
+ // We need to make special handling for content wiring and non-repeatable streams.
+ if ($request instanceof EntityEnclosingRequestInterface && $request->getBody()
+ && (!$request->getBody()->isSeekable() || !$request->getBody()->isReadable())
+ ) {
+ // The body of the request cannot be recalled so logging the body will require us to buffer it
+ $request->getParams()->set('request_wire', EntityBody::factory());
+ }
+ if (!$request->getResponseBody()->isRepeatable()) {
+ // The body of the response cannot be recalled so logging the body will require us to buffer it
+ $request->getParams()->set('response_wire', EntityBody::factory());
+ }
+ }
+ }
+
+ /**
+ * Triggers the actual log write when a request completes
+ *
+ * @param Event $event
+ */
+ public function onRequestSent(Event $event)
+ {
+ $request = $event['request'];
+ $response = $event['response'];
+ $handle = $event['handle'];
+
+ if ($wire = $request->getParams()->get('request_wire')) {
+ $request = clone $request;
+ $request->setBody($wire);
+ }
+
+ if ($wire = $request->getParams()->get('response_wire')) {
+ $response = clone $response;
+ $response->setBody($wire);
+ }
+
+ // Send the log message to the adapter, adding a category and host
+ $priority = $response && $response->isError() ? LOG_ERR : LOG_DEBUG;
+ $message = $this->formatter->format($request, $response, $handle);
+ $this->logAdapter->log($message, $priority, array(
+ 'request' => $request,
+ 'response' => $response,
+ 'handle' => $handle
+ ));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Log/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Log/composer.json
new file mode 100644
index 0000000..130e6da
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Log/composer.json
@@ -0,0 +1,28 @@
+{
+ "name": "guzzle/plugin-log",
+ "description": "Guzzle log plugin for over the wire logging",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "log", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version",
+ "guzzle/log": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Log": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Log",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php
new file mode 100644
index 0000000..8512424
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php
@@ -0,0 +1,57 @@
+contentMd5Param = $contentMd5Param;
+ $this->validateMd5Param = $validateMd5Param;
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return array('command.before_send' => array('onCommandBeforeSend', -255));
+ }
+
+ public function onCommandBeforeSend(Event $event)
+ {
+ $command = $event['command'];
+ $request = $command->getRequest();
+
+ // Only add an MD5 is there is a MD5 option on the operation and it has a payload
+ if ($request instanceof EntityEnclosingRequestInterface && $request->getBody()
+ && $command->getOperation()->hasParam($this->contentMd5Param)) {
+ // Check if an MD5 checksum value should be passed along to the request
+ if ($command[$this->contentMd5Param] === true) {
+ if (false !== ($md5 = $request->getBody()->getContentMd5(true, true))) {
+ $request->setHeader('Content-MD5', $md5);
+ }
+ }
+ }
+
+ // Check if MD5 validation should be used with the response
+ if ($command[$this->validateMd5Param] === true) {
+ $request->addSubscriber(new Md5ValidatorPlugin(true, false));
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php
new file mode 100644
index 0000000..5d7a378
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/Md5ValidatorPlugin.php
@@ -0,0 +1,88 @@
+contentLengthCutoff = $contentLengthCutoff;
+ $this->contentEncoded = $contentEncoded;
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return array('request.complete' => array('onRequestComplete', 255));
+ }
+
+ /**
+ * {@inheritdoc}
+ * @throws UnexpectedValueException
+ */
+ public function onRequestComplete(Event $event)
+ {
+ $response = $event['response'];
+
+ if (!$contentMd5 = $response->getContentMd5()) {
+ return;
+ }
+
+ $contentEncoding = $response->getContentEncoding();
+ if ($contentEncoding && !$this->contentEncoded) {
+ return false;
+ }
+
+ // Make sure that the size of the request is under the cutoff size
+ if ($this->contentLengthCutoff) {
+ $size = $response->getContentLength() ?: $response->getBody()->getSize();
+ if (!$size || $size > $this->contentLengthCutoff) {
+ return;
+ }
+ }
+
+ if (!$contentEncoding) {
+ $hash = $response->getBody()->getContentMd5();
+ } elseif ($contentEncoding == 'gzip') {
+ $response->getBody()->compress('zlib.deflate');
+ $hash = $response->getBody()->getContentMd5();
+ $response->getBody()->uncompress();
+ } elseif ($contentEncoding == 'compress') {
+ $response->getBody()->compress('bzip2.compress');
+ $hash = $response->getBody()->getContentMd5();
+ $response->getBody()->uncompress();
+ } else {
+ return;
+ }
+
+ if ($contentMd5 !== $hash) {
+ throw new UnexpectedValueException(
+ "The response entity body may have been modified over the wire. The Content-MD5 "
+ . "received ({$contentMd5}) did not match the calculated MD5 hash ({$hash})."
+ );
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/composer.json
new file mode 100644
index 0000000..0602d06
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-md5",
+ "description": "Guzzle MD5 plugins",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Md5": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Md5",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Mock/MockPlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Mock/MockPlugin.php
new file mode 100644
index 0000000..2440578
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Mock/MockPlugin.php
@@ -0,0 +1,245 @@
+readBodies = $readBodies;
+ $this->temporary = $temporary;
+ if ($items) {
+ foreach ($items as $item) {
+ if ($item instanceof \Exception) {
+ $this->addException($item);
+ } else {
+ $this->addResponse($item);
+ }
+ }
+ }
+ }
+
+ public static function getSubscribedEvents()
+ {
+ // Use a number lower than the CachePlugin
+ return array('request.before_send' => array('onRequestBeforeSend', -999));
+ }
+
+ public static function getAllEvents()
+ {
+ return array('mock.request');
+ }
+
+ /**
+ * Get a mock response from a file
+ *
+ * @param string $path File to retrieve a mock response from
+ *
+ * @return Response
+ * @throws InvalidArgumentException if the file is not found
+ */
+ public static function getMockFile($path)
+ {
+ if (!file_exists($path)) {
+ throw new InvalidArgumentException('Unable to open mock file: ' . $path);
+ }
+
+ return Response::fromMessage(file_get_contents($path));
+ }
+
+ /**
+ * Set whether or not to consume the entity body of a request when a mock
+ * response is used
+ *
+ * @param bool $readBodies Set to true to read and consume entity bodies
+ *
+ * @return self
+ */
+ public function readBodies($readBodies)
+ {
+ $this->readBodies = $readBodies;
+
+ return $this;
+ }
+
+ /**
+ * Returns the number of remaining mock responses
+ *
+ * @return int
+ */
+ public function count()
+ {
+ return count($this->queue);
+ }
+
+ /**
+ * Add a response to the end of the queue
+ *
+ * @param string|Response $response Response object or path to response file
+ *
+ * @return MockPlugin
+ * @throws InvalidArgumentException if a string or Response is not passed
+ */
+ public function addResponse($response)
+ {
+ if (!($response instanceof Response)) {
+ if (!is_string($response)) {
+ throw new InvalidArgumentException('Invalid response');
+ }
+ $response = self::getMockFile($response);
+ }
+
+ $this->queue[] = $response;
+
+ return $this;
+ }
+
+ /**
+ * Add an exception to the end of the queue
+ *
+ * @param CurlException $e Exception to throw when the request is executed
+ *
+ * @return MockPlugin
+ */
+ public function addException(CurlException $e)
+ {
+ $this->queue[] = $e;
+
+ return $this;
+ }
+
+ /**
+ * Clear the queue
+ *
+ * @return MockPlugin
+ */
+ public function clearQueue()
+ {
+ $this->queue = array();
+
+ return $this;
+ }
+
+ /**
+ * Returns an array of mock responses remaining in the queue
+ *
+ * @return array
+ */
+ public function getQueue()
+ {
+ return $this->queue;
+ }
+
+ /**
+ * Check if this is a temporary plugin
+ *
+ * @return bool
+ */
+ public function isTemporary()
+ {
+ return $this->temporary;
+ }
+
+ /**
+ * Get a response from the front of the list and add it to a request
+ *
+ * @param RequestInterface $request Request to mock
+ *
+ * @return self
+ * @throws CurlException When request.send is called and an exception is queued
+ */
+ public function dequeue(RequestInterface $request)
+ {
+ $this->dispatch('mock.request', array('plugin' => $this, 'request' => $request));
+
+ $item = array_shift($this->queue);
+ if ($item instanceof Response) {
+ if ($this->readBodies && $request instanceof EntityEnclosingRequestInterface) {
+ $request->getEventDispatcher()->addListener('request.sent', $f = function (Event $event) use (&$f) {
+ while ($data = $event['request']->getBody()->read(8096));
+ // Remove the listener after one-time use
+ $event['request']->getEventDispatcher()->removeListener('request.sent', $f);
+ });
+ }
+ $request->setResponse($item);
+ } elseif ($item instanceof CurlException) {
+ // Emulates exceptions encountered while transferring requests
+ $item->setRequest($request);
+ $state = $request->setState(RequestInterface::STATE_ERROR, array('exception' => $item));
+ // Only throw if the exception wasn't handled
+ if ($state == RequestInterface::STATE_ERROR) {
+ throw $item;
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Clear the array of received requests
+ */
+ public function flush()
+ {
+ $this->received = array();
+ }
+
+ /**
+ * Get an array of requests that were mocked by this plugin
+ *
+ * @return array
+ */
+ public function getReceivedRequests()
+ {
+ return $this->received;
+ }
+
+ /**
+ * Called when a request is about to be sent
+ *
+ * @param Event $event
+ * @throws \OutOfBoundsException When queue is empty
+ */
+ public function onRequestBeforeSend(Event $event)
+ {
+ if (!$this->queue) {
+ throw new \OutOfBoundsException('Mock queue is empty');
+ }
+
+ $request = $event['request'];
+ $this->received[] = $request;
+ // Detach the filter from the client so it's a one-time use
+ if ($this->temporary && count($this->queue) == 1 && $request->getClient()) {
+ $request->getClient()->getEventDispatcher()->removeSubscriber($this);
+ }
+ $this->dequeue($request);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Mock/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Mock/composer.json
new file mode 100644
index 0000000..f8201e3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Mock/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-mock",
+ "description": "Guzzle Mock plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["mock", "plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Mock": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Mock",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Oauth/OauthPlugin.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Oauth/OauthPlugin.php
new file mode 100644
index 0000000..95e0c3e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Oauth/OauthPlugin.php
@@ -0,0 +1,306 @@
+config = Collection::fromConfig($config, array(
+ 'version' => '1.0',
+ 'request_method' => self::REQUEST_METHOD_HEADER,
+ 'consumer_key' => 'anonymous',
+ 'consumer_secret' => 'anonymous',
+ 'signature_method' => 'HMAC-SHA1',
+ 'signature_callback' => function($stringToSign, $key) {
+ return hash_hmac('sha1', $stringToSign, $key, true);
+ }
+ ), array(
+ 'signature_method', 'signature_callback', 'version',
+ 'consumer_key', 'consumer_secret'
+ ));
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return array(
+ 'request.before_send' => array('onRequestBeforeSend', -1000)
+ );
+ }
+
+ /**
+ * Request before-send event handler
+ *
+ * @param Event $event Event received
+ * @return array
+ * @throws \InvalidArgumentException
+ */
+ public function onRequestBeforeSend(Event $event)
+ {
+ $timestamp = $this->getTimestamp($event);
+ $request = $event['request'];
+ $nonce = $this->generateNonce($request);
+ $authorizationParams = $this->getOauthParams($timestamp, $nonce);
+ $authorizationParams['oauth_signature'] = $this->getSignature($request, $timestamp, $nonce);
+
+ switch ($this->config['request_method']) {
+ case self::REQUEST_METHOD_HEADER:
+ $request->setHeader(
+ 'Authorization',
+ $this->buildAuthorizationHeader($authorizationParams)
+ );
+ break;
+ case self::REQUEST_METHOD_QUERY:
+ foreach ($authorizationParams as $key => $value) {
+ $request->getQuery()->set($key, $value);
+ }
+ break;
+ default:
+ throw new \InvalidArgumentException(sprintf(
+ 'Invalid consumer method "%s"',
+ $this->config['request_method']
+ ));
+ }
+
+ return $authorizationParams;
+ }
+
+ /**
+ * Builds the Authorization header for a request
+ *
+ * @param array $authorizationParams Associative array of authorization parameters
+ *
+ * @return string
+ */
+ private function buildAuthorizationHeader($authorizationParams)
+ {
+ $authorizationString = 'OAuth ';
+ foreach ($authorizationParams as $key => $val) {
+ if ($val) {
+ $authorizationString .= $key . '="' . urlencode($val) . '", ';
+ }
+ }
+
+ return substr($authorizationString, 0, -2);
+ }
+
+ /**
+ * Calculate signature for request
+ *
+ * @param RequestInterface $request Request to generate a signature for
+ * @param integer $timestamp Timestamp to use for nonce
+ * @param string $nonce
+ *
+ * @return string
+ */
+ public function getSignature(RequestInterface $request, $timestamp, $nonce)
+ {
+ $string = $this->getStringToSign($request, $timestamp, $nonce);
+ $key = urlencode($this->config['consumer_secret']) . '&' . urlencode($this->config['token_secret']);
+
+ return base64_encode(call_user_func($this->config['signature_callback'], $string, $key));
+ }
+
+ /**
+ * Calculate string to sign
+ *
+ * @param RequestInterface $request Request to generate a signature for
+ * @param int $timestamp Timestamp to use for nonce
+ * @param string $nonce
+ *
+ * @return string
+ */
+ public function getStringToSign(RequestInterface $request, $timestamp, $nonce)
+ {
+ $params = $this->getParamsToSign($request, $timestamp, $nonce);
+
+ // Convert booleans to strings.
+ $params = $this->prepareParameters($params);
+
+ // Build signing string from combined params
+ $parameterString = clone $request->getQuery();
+ $parameterString->replace($params);
+
+ $url = Url::factory($request->getUrl())->setQuery('')->setFragment(null);
+
+ return strtoupper($request->getMethod()) . '&'
+ . rawurlencode($url) . '&'
+ . rawurlencode((string) $parameterString);
+ }
+
+ /**
+ * Get the oauth parameters as named by the oauth spec
+ *
+ * @param $timestamp
+ * @param $nonce
+ * @return Collection
+ */
+ protected function getOauthParams($timestamp, $nonce)
+ {
+ $params = new Collection(array(
+ 'oauth_consumer_key' => $this->config['consumer_key'],
+ 'oauth_nonce' => $nonce,
+ 'oauth_signature_method' => $this->config['signature_method'],
+ 'oauth_timestamp' => $timestamp,
+ ));
+
+ // Optional parameters should not be set if they have not been set in the config as
+ // the parameter may be considered invalid by the Oauth service.
+ $optionalParams = array(
+ 'callback' => 'oauth_callback',
+ 'token' => 'oauth_token',
+ 'verifier' => 'oauth_verifier',
+ 'version' => 'oauth_version'
+ );
+
+ foreach ($optionalParams as $optionName => $oauthName) {
+ if (isset($this->config[$optionName]) == true) {
+ $params[$oauthName] = $this->config[$optionName];
+ }
+ }
+
+ return $params;
+ }
+
+ /**
+ * Get all of the parameters required to sign a request including:
+ * * The oauth params
+ * * The request GET params
+ * * The params passed in the POST body (with a content-type of application/x-www-form-urlencoded)
+ *
+ * @param RequestInterface $request Request to generate a signature for
+ * @param integer $timestamp Timestamp to use for nonce
+ * @param string $nonce
+ *
+ * @return array
+ */
+ public function getParamsToSign(RequestInterface $request, $timestamp, $nonce)
+ {
+ $params = $this->getOauthParams($timestamp, $nonce);
+
+ // Add query string parameters
+ $params->merge($request->getQuery());
+
+ // Add POST fields to signing string if required
+ if ($this->shouldPostFieldsBeSigned($request))
+ {
+ $params->merge($request->getPostFields());
+ }
+
+ // Sort params
+ $params = $params->toArray();
+ uksort($params, 'strcmp');
+
+ return $params;
+ }
+
+ /**
+ * Decide whether the post fields should be added to the base string that Oauth signs.
+ * This implementation is correct. Non-conformant APIs may require that this method be
+ * overwritten e.g. the Flickr API incorrectly adds the post fields when the Content-Type
+ * is 'application/x-www-form-urlencoded'
+ *
+ * @param $request
+ * @return bool Whether the post fields should be signed or not
+ */
+ public function shouldPostFieldsBeSigned($request)
+ {
+ if (!$this->config->get('disable_post_params') &&
+ $request instanceof EntityEnclosingRequestInterface &&
+ false !== strpos($request->getHeader('Content-Type'), 'application/x-www-form-urlencoded'))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns a Nonce Based on the unique id and URL. This will allow for multiple requests in parallel with the same
+ * exact timestamp to use separate nonce's.
+ *
+ * @param RequestInterface $request Request to generate a nonce for
+ *
+ * @return string
+ */
+ public function generateNonce(RequestInterface $request)
+ {
+ return sha1(uniqid('', true) . $request->getUrl());
+ }
+
+ /**
+ * Gets timestamp from event or create new timestamp
+ *
+ * @param Event $event Event containing contextual information
+ *
+ * @return int
+ */
+ public function getTimestamp(Event $event)
+ {
+ return $event['timestamp'] ?: time();
+ }
+
+ /**
+ * Convert booleans to strings, removed unset parameters, and sorts the array
+ *
+ * @param array $data Data array
+ *
+ * @return array
+ */
+ protected function prepareParameters($data)
+ {
+ ksort($data);
+ foreach ($data as $key => &$value) {
+ switch (gettype($value)) {
+ case 'NULL':
+ unset($data[$key]);
+ break;
+ case 'array':
+ $data[$key] = self::prepareParameters($value);
+ break;
+ case 'boolean':
+ $data[$key] = $value ? 'true' : 'false';
+ break;
+ }
+ }
+
+ return $data;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Oauth/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Oauth/composer.json
new file mode 100644
index 0000000..c9766ba
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/Oauth/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "guzzle/plugin-oauth",
+ "description": "Guzzle OAuth plugin",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["oauth", "plugin", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin\\Oauth": "" }
+ },
+ "target-dir": "Guzzle/Plugin/Oauth",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/composer.json b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/composer.json
new file mode 100644
index 0000000..2bbe64c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Plugin/composer.json
@@ -0,0 +1,44 @@
+{
+ "name": "guzzle/plugin",
+ "description": "Guzzle plugin component containing all Guzzle HTTP plugins",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": ["http", "client", "plugin", "extension", "guzzle"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.2",
+ "guzzle/http": "self.version"
+ },
+ "suggest": {
+ "guzzle/cache": "self.version",
+ "guzzle/log": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Plugin": "" }
+ },
+ "target-dir": "Guzzle/Plugin",
+ "replace": {
+ "guzzle/plugin-async": "self.version",
+ "guzzle/plugin-backoff": "self.version",
+ "guzzle/plugin-cache": "self.version",
+ "guzzle/plugin-cookie": "self.version",
+ "guzzle/plugin-curlauth": "self.version",
+ "guzzle/plugin-error-response": "self.version",
+ "guzzle/plugin-history": "self.version",
+ "guzzle/plugin-log": "self.version",
+ "guzzle/plugin-md5": "self.version",
+ "guzzle/plugin-mock": "self.version",
+ "guzzle/plugin-oauth": "self.version"
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/AbstractConfigLoader.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/AbstractConfigLoader.php
new file mode 100644
index 0000000..cd06f57
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/AbstractConfigLoader.php
@@ -0,0 +1,177 @@
+ 'JSON_ERROR_NONE - No errors',
+ JSON_ERROR_DEPTH => 'JSON_ERROR_DEPTH - Maximum stack depth exceeded',
+ JSON_ERROR_STATE_MISMATCH => 'JSON_ERROR_STATE_MISMATCH - Underflow or the modes mismatch',
+ JSON_ERROR_CTRL_CHAR => 'JSON_ERROR_CTRL_CHAR - Unexpected control character found',
+ JSON_ERROR_SYNTAX => 'JSON_ERROR_SYNTAX - Syntax error, malformed JSON',
+ JSON_ERROR_UTF8 => 'JSON_ERROR_UTF8 - Malformed UTF-8 characters, possibly incorrectly encoded'
+ );
+
+ public function load($config, array $options = array())
+ {
+ // Reset the array of loaded files because this is a new config
+ $this->loadedFiles = array();
+
+ if (is_string($config)) {
+ $config = $this->loadFile($config);
+ } elseif (!is_array($config)) {
+ throw new InvalidArgumentException('Unknown type passed to configuration loader: ' . gettype($config));
+ } else {
+ $this->mergeIncludes($config);
+ }
+
+ return $this->build($config, $options);
+ }
+
+ /**
+ * Add an include alias to the loader
+ *
+ * @param string $filename Filename to alias (e.g. _foo)
+ * @param string $alias Actual file to use (e.g. /path/to/foo.json)
+ *
+ * @return self
+ */
+ public function addAlias($filename, $alias)
+ {
+ $this->aliases[$filename] = $alias;
+
+ return $this;
+ }
+
+ /**
+ * Remove an alias from the loader
+ *
+ * @param string $alias Alias to remove
+ *
+ * @return self
+ */
+ public function removeAlias($alias)
+ {
+ unset($this->aliases[$alias]);
+
+ return $this;
+ }
+
+ /**
+ * Perform the parsing of a config file and create the end result
+ *
+ * @param array $config Configuration data
+ * @param array $options Options to use when building
+ *
+ * @return mixed
+ */
+ protected abstract function build($config, array $options);
+
+ /**
+ * Load a configuration file (can load JSON or PHP files that return an array when included)
+ *
+ * @param string $filename File to load
+ *
+ * @return array
+ * @throws InvalidArgumentException
+ * @throws RuntimeException when the JSON cannot be parsed
+ */
+ protected function loadFile($filename)
+ {
+ if (isset($this->aliases[$filename])) {
+ $filename = $this->aliases[$filename];
+ }
+
+ switch (pathinfo($filename, PATHINFO_EXTENSION)) {
+ case 'js':
+ case 'json':
+ $level = error_reporting(0);
+ $json = file_get_contents($filename);
+ error_reporting($level);
+
+ if ($json === false) {
+ $err = error_get_last();
+ throw new InvalidArgumentException("Unable to open {$filename}: " . $err['message']);
+ }
+
+ $config = json_decode($json, true);
+ // Throw an exception if there was an error loading the file
+ if ($error = json_last_error()) {
+ $message = isset(self::$jsonErrors[$error]) ? self::$jsonErrors[$error] : 'Unknown error';
+ throw new RuntimeException("Error loading JSON data from {$filename}: ({$error}) - {$message}");
+ }
+ break;
+ case 'php':
+ if (!is_readable($filename)) {
+ throw new InvalidArgumentException("Unable to open {$filename} for reading");
+ }
+ $config = require $filename;
+ if (!is_array($config)) {
+ throw new InvalidArgumentException('PHP files must return an array of configuration data');
+ }
+ break;
+ default:
+ throw new InvalidArgumentException('Unknown file extension: ' . $filename);
+ }
+
+ // Keep track of this file being loaded to prevent infinite recursion
+ $this->loadedFiles[$filename] = true;
+
+ // Merge include files into the configuration array
+ $this->mergeIncludes($config, dirname($filename));
+
+ return $config;
+ }
+
+ /**
+ * Merges in all include files
+ *
+ * @param array $config Config data that contains includes
+ * @param string $basePath Base path to use when a relative path is encountered
+ *
+ * @return array Returns the merged and included data
+ */
+ protected function mergeIncludes(&$config, $basePath = null)
+ {
+ if (!empty($config['includes'])) {
+ foreach ($config['includes'] as &$path) {
+ // Account for relative paths
+ if ($path[0] != DIRECTORY_SEPARATOR && !isset($this->aliases[$path]) && $basePath) {
+ $path = "{$basePath}/{$path}";
+ }
+ // Don't load the same files more than once
+ if (!isset($this->loadedFiles[$path])) {
+ $this->loadedFiles[$path] = true;
+ $config = $this->mergeData($this->loadFile($path), $config);
+ }
+ }
+ }
+ }
+
+ /**
+ * Default implementation for merging two arrays of data (uses array_merge_recursive)
+ *
+ * @param array $a Original data
+ * @param array $b Data to merge into the original and overwrite existing values
+ *
+ * @return array
+ */
+ protected function mergeData(array $a, array $b)
+ {
+ return array_merge_recursive($a, $b);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Builder/ServiceBuilder.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Builder/ServiceBuilder.php
new file mode 100644
index 0000000..38150db
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Builder/ServiceBuilder.php
@@ -0,0 +1,189 @@
+load($config, $globalParameters);
+ }
+
+ /**
+ * @param array $serviceBuilderConfig Service configuration settings:
+ * - name: Name of the service
+ * - class: Client class to instantiate using a factory method
+ * - params: array of key value pair configuration settings for the builder
+ */
+ public function __construct(array $serviceBuilderConfig = array())
+ {
+ $this->builderConfig = $serviceBuilderConfig;
+ }
+
+ public static function getAllEvents()
+ {
+ return array('service_builder.create_client');
+ }
+
+ public function unserialize($serialized)
+ {
+ $this->builderConfig = json_decode($serialized, true);
+ }
+
+ public function serialize()
+ {
+ return json_encode($this->builderConfig);
+ }
+
+ /**
+ * Attach a plugin to every client created by the builder
+ *
+ * @param EventSubscriberInterface $plugin Plugin to attach to each client
+ *
+ * @return self
+ */
+ public function addGlobalPlugin(EventSubscriberInterface $plugin)
+ {
+ $this->plugins[] = $plugin;
+
+ return $this;
+ }
+
+ /**
+ * Get data from the service builder without triggering the building of a service
+ *
+ * @param string $name Name of the service to retrieve
+ *
+ * @return array|null
+ */
+ public function getData($name)
+ {
+ return isset($this->builderConfig[$name]) ? $this->builderConfig[$name] : null;
+ }
+
+ public function get($name, $throwAway = false)
+ {
+ if (!isset($this->builderConfig[$name])) {
+
+ // Check to see if arbitrary data is being referenced
+ if (isset($this->clients[$name])) {
+ return $this->clients[$name];
+ }
+
+ // Check aliases and return a match if found
+ foreach ($this->builderConfig as $actualName => $config) {
+ if (isset($config['alias']) && $config['alias'] == $name) {
+ return $this->get($actualName, $throwAway);
+ }
+ }
+ throw new ServiceNotFoundException('No service is registered as ' . $name);
+ }
+
+ if (!$throwAway && isset($this->clients[$name])) {
+ return $this->clients[$name];
+ }
+
+ $builder =& $this->builderConfig[$name];
+
+ // Convert references to the actual client
+ foreach ($builder['params'] as &$v) {
+ if (is_string($v) && substr($v, 0, 1) == '{' && substr($v, -1) == '}') {
+ $v = $this->get(trim($v, '{} '));
+ }
+ }
+
+ // Get the configured parameters and merge in any parameters provided for throw-away clients
+ $config = $builder['params'];
+ if (is_array($throwAway)) {
+ $config = $throwAway + $config;
+ }
+
+ $client = $builder['class']::factory($config);
+
+ if (!$throwAway) {
+ $this->clients[$name] = $client;
+ }
+
+ if ($client instanceof ClientInterface) {
+ foreach ($this->plugins as $plugin) {
+ $client->addSubscriber($plugin);
+ }
+ // Dispatch an event letting listeners know a client was created
+ $this->dispatch('service_builder.create_client', array('client' => $client));
+ }
+
+ return $client;
+ }
+
+ public function set($key, $service)
+ {
+ if (is_array($service) && isset($service['class']) && isset($service['params'])) {
+ $this->builderConfig[$key] = $service;
+ } else {
+ $this->clients[$key] = $service;
+ }
+
+ return $this;
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ $this->set($offset, $value);
+ }
+
+ public function offsetUnset($offset)
+ {
+ unset($this->builderConfig[$offset]);
+ unset($this->clients[$offset]);
+ }
+
+ public function offsetExists($offset)
+ {
+ return isset($this->builderConfig[$offset]) || isset($this->clients[$offset]);
+ }
+
+ public function offsetGet($offset)
+ {
+ return $this->get($offset);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Builder/ServiceBuilderInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Builder/ServiceBuilderInterface.php
new file mode 100644
index 0000000..4fc310a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Builder/ServiceBuilderInterface.php
@@ -0,0 +1,40 @@
+ &$service) {
+
+ $service['params'] = isset($service['params']) ? $service['params'] : array();
+
+ // Check if this client builder extends another client
+ if (!empty($service['extends'])) {
+
+ // Make sure that the service it's extending has been defined
+ if (!isset($services[$service['extends']])) {
+ throw new ServiceNotFoundException(
+ "{$name} is trying to extend a non-existent service: {$service['extends']}"
+ );
+ }
+
+ $extended = &$services[$service['extends']];
+
+ // Use the correct class attribute
+ if (empty($service['class'])) {
+ $service['class'] = isset($extended['class']) ? $extended['class'] : '';
+ }
+ if ($extendsParams = isset($extended['params']) ? $extended['params'] : false) {
+ $service['params'] = $service['params'] + $extendsParams;
+ }
+ }
+
+ // Overwrite default values with global parameter values
+ if (!empty($options)) {
+ $service['params'] = $options + $service['params'];
+ }
+
+ $service['class'] = isset($service['class']) ? $service['class'] : '';
+ }
+
+ return new $class($services);
+ }
+
+ protected function mergeData(array $a, array $b)
+ {
+ $result = $b + $a;
+
+ // Merge services using a recursive union of arrays
+ if (isset($a['services']) && $b['services']) {
+
+ // Get a union of the services of the two arrays
+ $result['services'] = $b['services'] + $a['services'];
+
+ // Merge each service in using a union of the two arrays
+ foreach ($result['services'] as $name => &$service) {
+
+ // By default, services completely override a previously defined service unless it extends itself
+ if (isset($a['services'][$name]['extends'])
+ && isset($b['services'][$name]['extends'])
+ && $b['services'][$name]['extends'] == $name
+ ) {
+ $service += $a['services'][$name];
+ // Use the `extends` attribute of the parent
+ $service['extends'] = $a['services'][$name]['extends'];
+ // Merge parameters using a union if both have parameters
+ if (isset($a['services'][$name]['params'])) {
+ $service['params'] += $a['services'][$name]['params'];
+ }
+ }
+ }
+ }
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/CachingConfigLoader.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/CachingConfigLoader.php
new file mode 100644
index 0000000..26f8360
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/CachingConfigLoader.php
@@ -0,0 +1,46 @@
+loader = $loader;
+ $this->cache = $cache;
+ }
+
+ public function load($config, array $options = array())
+ {
+ if (!is_string($config)) {
+ $key = false;
+ } else {
+ $key = 'loader_' . crc32($config);
+ if ($result = $this->cache->fetch($key)) {
+ return $result;
+ }
+ }
+
+ $result = $this->loader->load($config, $options);
+ if ($key) {
+ $this->cache->save($key, $result);
+ }
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php
new file mode 100644
index 0000000..3e5f8e5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php
@@ -0,0 +1,297 @@
+getCommand($method, isset($args[0]) ? $args[0] : array())->getResult();
+ }
+
+ public function getCommand($name, array $args = array())
+ {
+ // Add global client options to the command
+ if ($options = $this->getConfig(self::COMMAND_PARAMS)) {
+ $args += $options;
+ }
+
+ if (!($command = $this->getCommandFactory()->factory($name, $args))) {
+ throw new InvalidArgumentException("Command was not found matching {$name}");
+ }
+
+ $command->setClient($this);
+ $this->dispatch('client.command.create', array('client' => $this, 'command' => $command));
+
+ return $command;
+ }
+
+ /**
+ * Set the command factory used to create commands by name
+ *
+ * @param CommandFactoryInterface $factory Command factory
+ *
+ * @return self
+ */
+ public function setCommandFactory(CommandFactoryInterface $factory)
+ {
+ $this->commandFactory = $factory;
+
+ return $this;
+ }
+
+ /**
+ * Set the resource iterator factory associated with the client
+ *
+ * @param ResourceIteratorFactoryInterface $factory Resource iterator factory
+ *
+ * @return self
+ */
+ public function setResourceIteratorFactory(ResourceIteratorFactoryInterface $factory)
+ {
+ $this->resourceIteratorFactory = $factory;
+
+ return $this;
+ }
+
+ public function getIterator($command, array $commandOptions = null, array $iteratorOptions = array())
+ {
+ if (!($command instanceof CommandInterface)) {
+ $command = $this->getCommand($command, $commandOptions ?: array());
+ }
+
+ return $this->getResourceIteratorFactory()->build($command, $iteratorOptions);
+ }
+
+ public function execute($command)
+ {
+ if ($command instanceof CommandInterface) {
+ $this->send($this->prepareCommand($command));
+ $this->dispatch('command.after_send', array('command' => $command));
+ return $command->getResult();
+ } elseif (is_array($command) || $command instanceof \Traversable) {
+ return $this->executeMultiple($command);
+ } else {
+ throw new InvalidArgumentException('Command must be a command or array of commands');
+ }
+ }
+
+ public function setDescription(ServiceDescriptionInterface $service)
+ {
+ $this->serviceDescription = $service;
+
+ if ($this->getCommandFactory() && $this->getCommandFactory() instanceof CompositeFactory) {
+ $this->commandFactory->add(new Command\Factory\ServiceDescriptionFactory($service));
+ }
+
+ // If a baseUrl was set on the description, then update the client
+ if ($baseUrl = $service->getBaseUrl()) {
+ $this->setBaseUrl($baseUrl);
+ }
+
+ return $this;
+ }
+
+ public function getDescription()
+ {
+ return $this->serviceDescription;
+ }
+
+ /**
+ * Set the inflector used with the client
+ *
+ * @param InflectorInterface $inflector Inflection object
+ *
+ * @return self
+ */
+ public function setInflector(InflectorInterface $inflector)
+ {
+ $this->inflector = $inflector;
+
+ return $this;
+ }
+
+ /**
+ * Get the inflector used with the client
+ *
+ * @return self
+ */
+ public function getInflector()
+ {
+ if (!$this->inflector) {
+ $this->inflector = Inflector::getDefault();
+ }
+
+ return $this->inflector;
+ }
+
+ /**
+ * Prepare a command for sending and get the RequestInterface object created by the command
+ *
+ * @param CommandInterface $command Command to prepare
+ *
+ * @return RequestInterface
+ */
+ protected function prepareCommand(CommandInterface $command)
+ {
+ // Set the client and prepare the command
+ $request = $command->setClient($this)->prepare();
+ // Set the state to new if the command was previously executed
+ $request->setState(RequestInterface::STATE_NEW);
+ $this->dispatch('command.before_send', array('command' => $command));
+
+ return $request;
+ }
+
+ /**
+ * Execute multiple commands in parallel
+ *
+ * @param array|Traversable $commands Array of CommandInterface objects to execute
+ *
+ * @return array Returns an array of the executed commands
+ * @throws Exception\CommandTransferException
+ */
+ protected function executeMultiple($commands)
+ {
+ $requests = array();
+ $commandRequests = new \SplObjectStorage();
+
+ foreach ($commands as $command) {
+ $request = $this->prepareCommand($command);
+ $commandRequests[$request] = $command;
+ $requests[] = $request;
+ }
+
+ try {
+ $this->send($requests);
+ foreach ($commands as $command) {
+ $this->dispatch('command.after_send', array('command' => $command));
+ }
+ return $commands;
+ } catch (MultiTransferException $failureException) {
+ // Throw a CommandTransferException using the successful and failed commands
+ $e = CommandTransferException::fromMultiTransferException($failureException);
+
+ // Remove failed requests from the successful requests array and add to the failures array
+ foreach ($failureException->getFailedRequests() as $request) {
+ if (isset($commandRequests[$request])) {
+ $e->addFailedCommand($commandRequests[$request]);
+ unset($commandRequests[$request]);
+ }
+ }
+
+ // Always emit the command after_send events for successful commands
+ foreach ($commandRequests as $success) {
+ $e->addSuccessfulCommand($commandRequests[$success]);
+ $this->dispatch('command.after_send', array('command' => $commandRequests[$success]));
+ }
+
+ throw $e;
+ }
+ }
+
+ protected function getResourceIteratorFactory()
+ {
+ if (!$this->resourceIteratorFactory) {
+ // Build the default resource iterator factory if one is not set
+ $clientClass = get_class($this);
+ $prefix = substr($clientClass, 0, strrpos($clientClass, '\\'));
+ $this->resourceIteratorFactory = new ResourceIteratorClassFactory(array(
+ "{$prefix}\\Iterator",
+ "{$prefix}\\Model"
+ ));
+ }
+
+ return $this->resourceIteratorFactory;
+ }
+
+ /**
+ * Get the command factory associated with the client
+ *
+ * @return CommandFactoryInterface
+ */
+ protected function getCommandFactory()
+ {
+ if (!$this->commandFactory) {
+ $this->commandFactory = CompositeFactory::getDefaultChain($this);
+ }
+
+ return $this->commandFactory;
+ }
+
+ /**
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+ public function enableMagicMethods($isEnabled)
+ {
+ Version::warn(__METHOD__ . ' is deprecated');
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/ClientInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/ClientInterface.php
new file mode 100644
index 0000000..814154f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/ClientInterface.php
@@ -0,0 +1,68 @@
+operation = $operation ?: $this->createOperation();
+ foreach ($this->operation->getParams() as $name => $arg) {
+ $currentValue = $this[$name];
+ $configValue = $arg->getValue($currentValue);
+ // If default or static values are set, then this should always be updated on the config object
+ if ($currentValue !== $configValue) {
+ $this[$name] = $configValue;
+ }
+ }
+
+ $headers = $this[self::HEADERS_OPTION];
+ if (!$headers instanceof Collection) {
+ $this[self::HEADERS_OPTION] = new Collection((array) $headers);
+ }
+
+ // You can set a command.on_complete option in your parameters to set an onComplete callback
+ if ($onComplete = $this['command.on_complete']) {
+ unset($this['command.on_complete']);
+ $this->setOnComplete($onComplete);
+ }
+
+ // Set the hidden additional parameters
+ if (!$this[self::HIDDEN_PARAMS]) {
+ $this[self::HIDDEN_PARAMS] = array(
+ self::HEADERS_OPTION,
+ self::RESPONSE_PROCESSING,
+ self::HIDDEN_PARAMS,
+ self::REQUEST_OPTIONS
+ );
+ }
+
+ $this->init();
+ }
+
+ /**
+ * Custom clone behavior
+ */
+ public function __clone()
+ {
+ $this->request = null;
+ $this->result = null;
+ }
+
+ /**
+ * Execute the command in the same manner as calling a function
+ *
+ * @return mixed Returns the result of {@see AbstractCommand::execute}
+ */
+ public function __invoke()
+ {
+ return $this->execute();
+ }
+
+ public function getName()
+ {
+ return $this->operation->getName();
+ }
+
+ /**
+ * Get the API command information about the command
+ *
+ * @return OperationInterface
+ */
+ public function getOperation()
+ {
+ return $this->operation;
+ }
+
+ public function setOnComplete($callable)
+ {
+ if (!is_callable($callable)) {
+ throw new InvalidArgumentException('The onComplete function must be callable');
+ }
+
+ $this->onComplete = $callable;
+
+ return $this;
+ }
+
+ public function execute()
+ {
+ if (!$this->client) {
+ throw new CommandException('A client must be associated with the command before it can be executed.');
+ }
+
+ return $this->client->execute($this);
+ }
+
+ public function getClient()
+ {
+ return $this->client;
+ }
+
+ public function setClient(ClientInterface $client)
+ {
+ $this->client = $client;
+
+ return $this;
+ }
+
+ public function getRequest()
+ {
+ if (!$this->request) {
+ throw new CommandException('The command must be prepared before retrieving the request');
+ }
+
+ return $this->request;
+ }
+
+ public function getResponse()
+ {
+ if (!$this->isExecuted()) {
+ $this->execute();
+ }
+
+ return $this->request->getResponse();
+ }
+
+ public function getResult()
+ {
+ if (!$this->isExecuted()) {
+ $this->execute();
+ }
+
+ if (null === $this->result) {
+ $this->process();
+ // Call the onComplete method if one is set
+ if ($this->onComplete) {
+ call_user_func($this->onComplete, $this);
+ }
+ }
+
+ return $this->result;
+ }
+
+ public function setResult($result)
+ {
+ $this->result = $result;
+
+ return $this;
+ }
+
+ public function isPrepared()
+ {
+ return $this->request !== null;
+ }
+
+ public function isExecuted()
+ {
+ return $this->request !== null && $this->request->getState() == 'complete';
+ }
+
+ public function prepare()
+ {
+ if (!$this->isPrepared()) {
+ if (!$this->client) {
+ throw new CommandException('A client must be associated with the command before it can be prepared.');
+ }
+
+ // If no response processing value was specified, then attempt to use the highest level of processing
+ if (!isset($this[self::RESPONSE_PROCESSING])) {
+ $this[self::RESPONSE_PROCESSING] = self::TYPE_MODEL;
+ }
+
+ // Notify subscribers of the client that the command is being prepared
+ $this->client->dispatch('command.before_prepare', array('command' => $this));
+
+ // Fail on missing required arguments, and change parameters via filters
+ $this->validate();
+ // Delegate to the subclass that implements the build method
+ $this->build();
+
+ // Add custom request headers set on the command
+ if ($headers = $this[self::HEADERS_OPTION]) {
+ foreach ($headers as $key => $value) {
+ $this->request->setHeader($key, $value);
+ }
+ }
+
+ // Add any curl options to the request
+ if ($options = $this[Client::CURL_OPTIONS]) {
+ $this->request->getCurlOptions()->overwriteWith(CurlHandle::parseCurlConfig($options));
+ }
+
+ // Set a custom response body
+ if ($responseBody = $this[self::RESPONSE_BODY]) {
+ $this->request->setResponseBody($responseBody);
+ }
+
+ $this->client->dispatch('command.after_prepare', array('command' => $this));
+ }
+
+ return $this->request;
+ }
+
+ /**
+ * Set the validator used to validate and prepare command parameters and nested JSON schemas. If no validator is
+ * set, then the command will validate using the default {@see SchemaValidator}.
+ *
+ * @param ValidatorInterface $validator Validator used to prepare and validate properties against a JSON schema
+ *
+ * @return self
+ */
+ public function setValidator(ValidatorInterface $validator)
+ {
+ $this->validator = $validator;
+
+ return $this;
+ }
+
+ public function getRequestHeaders()
+ {
+ return $this[self::HEADERS_OPTION];
+ }
+
+ /**
+ * Initialize the command (hook that can be implemented in subclasses)
+ */
+ protected function init() {}
+
+ /**
+ * Create the request object that will carry out the command
+ */
+ abstract protected function build();
+
+ /**
+ * Hook used to create an operation for concrete commands that are not associated with a service description
+ *
+ * @return OperationInterface
+ */
+ protected function createOperation()
+ {
+ return new Operation(array('name' => get_class($this)));
+ }
+
+ /**
+ * Create the result of the command after the request has been completed.
+ * Override this method in subclasses to customize this behavior
+ */
+ protected function process()
+ {
+ $this->result = $this[self::RESPONSE_PROCESSING] != self::TYPE_RAW
+ ? DefaultResponseParser::getInstance()->parse($this)
+ : $this->request->getResponse();
+ }
+
+ /**
+ * Validate and prepare the command based on the schema and rules defined by the command's Operation object
+ *
+ * @throws ValidationException when validation errors occur
+ */
+ protected function validate()
+ {
+ // Do not perform request validation/transformation if it is disable
+ if ($this[self::DISABLE_VALIDATION]) {
+ return;
+ }
+
+ $errors = array();
+ $validator = $this->getValidator();
+ foreach ($this->operation->getParams() as $name => $schema) {
+ $value = $this[$name];
+ if (!$validator->validate($schema, $value)) {
+ $errors = array_merge($errors, $validator->getErrors());
+ } elseif ($value !== $this[$name]) {
+ // Update the config value if it changed and no validation errors were encountered
+ $this->data[$name] = $value;
+ }
+ }
+
+ // Validate additional parameters
+ $hidden = $this[self::HIDDEN_PARAMS];
+
+ if ($properties = $this->operation->getAdditionalParameters()) {
+ foreach ($this->toArray() as $name => $value) {
+ // It's only additional if it isn't defined in the schema
+ if (!$this->operation->hasParam($name) && !in_array($name, $hidden)) {
+ // Always set the name so that error messages are useful
+ $properties->setName($name);
+ if (!$validator->validate($properties, $value)) {
+ $errors = array_merge($errors, $validator->getErrors());
+ } elseif ($value !== $this[$name]) {
+ $this->data[$name] = $value;
+ }
+ }
+ }
+ }
+
+ if (!empty($errors)) {
+ $e = new ValidationException('Validation errors: ' . implode("\n", $errors));
+ $e->setErrors($errors);
+ throw $e;
+ }
+ }
+
+ /**
+ * Get the validator used to prepare and validate properties. If no validator has been set on the command, then
+ * the default {@see SchemaValidator} will be used.
+ *
+ * @return ValidatorInterface
+ */
+ protected function getValidator()
+ {
+ if (!$this->validator) {
+ $this->validator = SchemaValidator::getInstance();
+ }
+
+ return $this->validator;
+ }
+
+ /**
+ * Get array of any validation errors
+ * If no validator has been set then return false
+ */
+ public function getValidationErrors()
+ {
+ if (!$this->validator) {
+ return false;
+ }
+
+ return $this->validator->getErrors();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/ClosureCommand.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/ClosureCommand.php
new file mode 100644
index 0000000..cb6ac40
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/ClosureCommand.php
@@ -0,0 +1,41 @@
+request = $closure($this, $this->operation);
+
+ if (!$this->request || !$this->request instanceof RequestInterface) {
+ throw new UnexpectedValueException('Closure command did not return a RequestInterface object');
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/CommandInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/CommandInterface.php
new file mode 100644
index 0000000..fbb61d2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/CommandInterface.php
@@ -0,0 +1,128 @@
+stopPropagation();
+ }
+
+ /**
+ * Get the created object
+ *
+ * @return mixed
+ */
+ public function getResult()
+ {
+ return $this['result'];
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/DefaultRequestSerializer.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/DefaultRequestSerializer.php
new file mode 100644
index 0000000..2dc4acd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/DefaultRequestSerializer.php
@@ -0,0 +1,169 @@
+factory = $factory;
+ }
+
+ /**
+ * Add a location visitor to the serializer
+ *
+ * @param string $location Location to associate with the visitor
+ * @param RequestVisitorInterface $visitor Visitor to attach
+ *
+ * @return self
+ */
+ public function addVisitor($location, RequestVisitorInterface $visitor)
+ {
+ $this->factory->addRequestVisitor($location, $visitor);
+
+ return $this;
+ }
+
+ public function prepare(CommandInterface $command)
+ {
+ $request = $this->createRequest($command);
+ // Keep an array of visitors found in the operation
+ $foundVisitors = array();
+ $operation = $command->getOperation();
+
+ // Add arguments to the request using the location attribute
+ foreach ($operation->getParams() as $name => $arg) {
+ /** @var $arg \Guzzle\Service\Description\Parameter */
+ $location = $arg->getLocation();
+ // Skip 'uri' locations because they've already been processed
+ if ($location && $location != 'uri') {
+ // Instantiate visitors as they are detected in the properties
+ if (!isset($foundVisitors[$location])) {
+ $foundVisitors[$location] = $this->factory->getRequestVisitor($location);
+ }
+ // Ensure that a value has been set for this parameter
+ $value = $command[$name];
+ if ($value !== null) {
+ // Apply the parameter value with the location visitor
+ $foundVisitors[$location]->visit($command, $request, $arg, $value);
+ }
+ }
+ }
+
+ // Serialize additional parameters
+ if ($additional = $operation->getAdditionalParameters()) {
+ if ($visitor = $this->prepareAdditionalParameters($operation, $command, $request, $additional)) {
+ $foundVisitors[$additional->getLocation()] = $visitor;
+ }
+ }
+
+ // Call the after method on each visitor found in the operation
+ foreach ($foundVisitors as $visitor) {
+ $visitor->after($command, $request);
+ }
+
+ return $request;
+ }
+
+ /**
+ * Serialize additional parameters
+ *
+ * @param OperationInterface $operation Operation that owns the command
+ * @param CommandInterface $command Command to prepare
+ * @param RequestInterface $request Request to serialize
+ * @param Parameter $additional Additional parameters
+ *
+ * @return null|RequestVisitorInterface
+ */
+ protected function prepareAdditionalParameters(
+ OperationInterface $operation,
+ CommandInterface $command,
+ RequestInterface $request,
+ Parameter $additional
+ ) {
+ if (!($location = $additional->getLocation())) {
+ return;
+ }
+
+ $visitor = $this->factory->getRequestVisitor($location);
+ $hidden = $command[$command::HIDDEN_PARAMS];
+
+ foreach ($command->toArray() as $key => $value) {
+ // Ignore values that are null or built-in command options
+ if ($value !== null
+ && !in_array($key, $hidden)
+ && !$operation->hasParam($key)
+ ) {
+ $additional->setName($key);
+ $visitor->visit($command, $request, $additional, $value);
+ }
+ }
+
+ return $visitor;
+ }
+
+ /**
+ * Create a request for the command and operation
+ *
+ * @param CommandInterface $command Command to create a request for
+ *
+ * @return RequestInterface
+ */
+ protected function createRequest(CommandInterface $command)
+ {
+ $operation = $command->getOperation();
+ $client = $command->getClient();
+ $options = $command[AbstractCommand::REQUEST_OPTIONS] ?: array();
+
+ // If the command does not specify a template, then assume the base URL of the client
+ if (!($uri = $operation->getUri())) {
+ return $client->createRequest($operation->getHttpMethod(), $client->getBaseUrl(), null, null, $options);
+ }
+
+ // Get the path values and use the client config settings
+ $variables = array();
+ foreach ($operation->getParams() as $name => $arg) {
+ if ($arg->getLocation() == 'uri') {
+ if (isset($command[$name])) {
+ $variables[$name] = $arg->filter($command[$name]);
+ if (!is_array($variables[$name])) {
+ $variables[$name] = (string) $variables[$name];
+ }
+ }
+ }
+ }
+
+ return $client->createRequest($operation->getHttpMethod(), array($uri, $variables), null, null, $options);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/DefaultResponseParser.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/DefaultResponseParser.php
new file mode 100644
index 0000000..4fe3803
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/DefaultResponseParser.php
@@ -0,0 +1,55 @@
+getRequest()->getResponse();
+
+ // Account for hard coded content-type values specified in service descriptions
+ if ($contentType = $command['command.expects']) {
+ $response->setHeader('Content-Type', $contentType);
+ } else {
+ $contentType = (string) $response->getHeader('Content-Type');
+ }
+
+ return $this->handleParsing($command, $response, $contentType);
+ }
+
+ protected function handleParsing(CommandInterface $command, Response $response, $contentType)
+ {
+ $result = $response;
+ if ($result->getBody()) {
+ if (stripos($contentType, 'json') !== false) {
+ $result = $result->json();
+ } elseif (stripos($contentType, 'xml') !== false) {
+ $result = $result->xml();
+ }
+ }
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/AliasFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/AliasFactory.php
new file mode 100644
index 0000000..1c5ce07
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/AliasFactory.php
@@ -0,0 +1,39 @@
+client = $client;
+ $this->aliases = $aliases;
+ }
+
+ public function factory($name, array $args = array())
+ {
+ if (isset($this->aliases[$name])) {
+ try {
+ return $this->client->getCommand($this->aliases[$name], $args);
+ } catch (InvalidArgumentException $e) {
+ return null;
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/CompositeFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/CompositeFactory.php
new file mode 100644
index 0000000..e5c8844
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/CompositeFactory.php
@@ -0,0 +1,154 @@
+getDescription()) {
+ $factories[] = new ServiceDescriptionFactory($description);
+ }
+ $factories[] = new ConcreteClassFactory($client);
+
+ return new static($factories);
+ }
+
+ /**
+ * @param array $factories Array of command factories
+ */
+ public function __construct(array $factories = array())
+ {
+ $this->factories = $factories;
+ }
+
+ /**
+ * Add a command factory to the chain
+ *
+ * @param FactoryInterface $factory Factory to add
+ * @param string|FactoryInterface $before Insert the new command factory before a command factory class or object
+ * matching a class name.
+ * @return CompositeFactory
+ */
+ public function add(FactoryInterface $factory, $before = null)
+ {
+ $pos = null;
+
+ if ($before) {
+ foreach ($this->factories as $i => $f) {
+ if ($before instanceof FactoryInterface) {
+ if ($f === $before) {
+ $pos = $i;
+ break;
+ }
+ } elseif (is_string($before)) {
+ if ($f instanceof $before) {
+ $pos = $i;
+ break;
+ }
+ }
+ }
+ }
+
+ if ($pos === null) {
+ $this->factories[] = $factory;
+ } else {
+ array_splice($this->factories, $i, 0, array($factory));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Check if the chain contains a specific command factory
+ *
+ * @param FactoryInterface|string $factory Factory to check
+ *
+ * @return bool
+ */
+ public function has($factory)
+ {
+ return (bool) $this->find($factory);
+ }
+
+ /**
+ * Remove a specific command factory from the chain
+ *
+ * @param string|FactoryInterface $factory Factory to remove by name or instance
+ *
+ * @return CompositeFactory
+ */
+ public function remove($factory = null)
+ {
+ if (!($factory instanceof FactoryInterface)) {
+ $factory = $this->find($factory);
+ }
+
+ $this->factories = array_values(array_filter($this->factories, function($f) use ($factory) {
+ return $f !== $factory;
+ }));
+
+ return $this;
+ }
+
+ /**
+ * Get a command factory by class name
+ *
+ * @param string|FactoryInterface $factory Command factory class or instance
+ *
+ * @return null|FactoryInterface
+ */
+ public function find($factory)
+ {
+ foreach ($this->factories as $f) {
+ if ($factory === $f || (is_string($factory) && $f instanceof $factory)) {
+ return $f;
+ }
+ }
+ }
+
+ /**
+ * Create a command using the associated command factories
+ *
+ * @param string $name Name of the command
+ * @param array $args Command arguments
+ *
+ * @return CommandInterface
+ */
+ public function factory($name, array $args = array())
+ {
+ foreach ($this->factories as $factory) {
+ $command = $factory->factory($name, $args);
+ if ($command) {
+ return $command;
+ }
+ }
+ }
+
+ public function count()
+ {
+ return count($this->factories);
+ }
+
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->factories);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/ConcreteClassFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/ConcreteClassFactory.php
new file mode 100644
index 0000000..0e93dea
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/ConcreteClassFactory.php
@@ -0,0 +1,47 @@
+client = $client;
+ $this->inflector = $inflector ?: Inflector::getDefault();
+ }
+
+ public function factory($name, array $args = array())
+ {
+ // Determine the class to instantiate based on the namespace of the current client and the default directory
+ $prefix = $this->client->getConfig('command.prefix');
+ if (!$prefix) {
+ // The prefix can be specified in a factory method and is cached
+ $prefix = implode('\\', array_slice(explode('\\', get_class($this->client)), 0, -1)) . '\\Command\\';
+ $this->client->getConfig()->set('command.prefix', $prefix);
+ }
+
+ $class = $prefix . str_replace(' ', '\\', ucwords(str_replace('.', ' ', $this->inflector->camel($name))));
+
+ // Create the concrete command if it exists
+ if (class_exists($class)) {
+ return new $class($args);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/FactoryInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/FactoryInterface.php
new file mode 100644
index 0000000..35c299d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/FactoryInterface.php
@@ -0,0 +1,21 @@
+map = $map;
+ }
+
+ public function factory($name, array $args = array())
+ {
+ if (isset($this->map[$name])) {
+ $class = $this->map[$name];
+
+ return new $class($args);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/ServiceDescriptionFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/ServiceDescriptionFactory.php
new file mode 100644
index 0000000..b943a5b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/Factory/ServiceDescriptionFactory.php
@@ -0,0 +1,71 @@
+setServiceDescription($description);
+ $this->inflector = $inflector;
+ }
+
+ /**
+ * Change the service description used with the factory
+ *
+ * @param ServiceDescriptionInterface $description Service description to use
+ *
+ * @return FactoryInterface
+ */
+ public function setServiceDescription(ServiceDescriptionInterface $description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * Returns the service description
+ *
+ * @return ServiceDescriptionInterface
+ */
+ public function getServiceDescription()
+ {
+ return $this->description;
+ }
+
+ public function factory($name, array $args = array())
+ {
+ $command = $this->description->getOperation($name);
+
+ // If a command wasn't found, then try to uppercase the first letter and try again
+ if (!$command) {
+ $command = $this->description->getOperation(ucfirst($name));
+ // If an inflector was passed, then attempt to get the command using snake_case inflection
+ if (!$command && $this->inflector) {
+ $command = $this->description->getOperation($this->inflector->snake($name));
+ }
+ }
+
+ if ($command) {
+ $class = $command->getClass();
+ return new $class($args, $command, $this->description);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/AbstractRequestVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/AbstractRequestVisitor.php
new file mode 100644
index 0000000..adcfca1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/AbstractRequestVisitor.php
@@ -0,0 +1,69 @@
+resolveRecursively($value, $param)
+ : $param->filter($value);
+ }
+
+ /**
+ * Map nested parameters into the location_key based parameters
+ *
+ * @param array $value Value to map
+ * @param Parameter $param Parameter that holds information about the current key
+ *
+ * @return array Returns the mapped array
+ */
+ protected function resolveRecursively(array $value, Parameter $param)
+ {
+ foreach ($value as $name => &$v) {
+ switch ($param->getType()) {
+ case 'object':
+ if ($subParam = $param->getProperty($name)) {
+ $key = $subParam->getWireName();
+ $value[$key] = $this->prepareValue($v, $subParam);
+ if ($name != $key) {
+ unset($value[$name]);
+ }
+ } elseif ($param->getAdditionalProperties() instanceof Parameter) {
+ $v = $this->prepareValue($v, $param->getAdditionalProperties());
+ }
+ break;
+ case 'array':
+ if ($items = $param->getItems()) {
+ $v = $this->prepareValue($v, $items);
+ }
+ break;
+ }
+ }
+
+ return $param->filter($value);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/BodyVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/BodyVisitor.php
new file mode 100644
index 0000000..168d780
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/BodyVisitor.php
@@ -0,0 +1,58 @@
+filter($value);
+ $entityBody = EntityBody::factory($value);
+ $request->setBody($entityBody);
+ $this->addExpectHeader($request, $entityBody, $param->getData('expect_header'));
+ // Add the Content-Encoding header if one is set on the EntityBody
+ if ($encoding = $entityBody->getContentEncoding()) {
+ $request->setHeader('Content-Encoding', $encoding);
+ }
+ }
+
+ /**
+ * Add the appropriate expect header to a request
+ *
+ * @param EntityEnclosingRequestInterface $request Request to update
+ * @param EntityBodyInterface $body Entity body of the request
+ * @param string|int $expect Expect header setting
+ */
+ protected function addExpectHeader(EntityEnclosingRequestInterface $request, EntityBodyInterface $body, $expect)
+ {
+ // Allow the `expect` data parameter to be set to remove the Expect header from the request
+ if ($expect === false) {
+ $request->removeHeader('Expect');
+ } elseif ($expect !== true) {
+ // Default to using a MB as the point in which to start using the expect header
+ $expect = $expect ?: 1048576;
+ // If the expect_header value is numeric then only add if the size is greater than the cutoff
+ if (is_numeric($expect) && $body->getSize()) {
+ if ($body->getSize() < $expect) {
+ $request->removeHeader('Expect');
+ } else {
+ $request->setHeader('Expect', '100-Continue');
+ }
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/HeaderVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/HeaderVisitor.php
new file mode 100644
index 0000000..2a53754
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/HeaderVisitor.php
@@ -0,0 +1,44 @@
+filter($value);
+ if ($param->getType() == 'object' && $param->getAdditionalProperties() instanceof Parameter) {
+ $this->addPrefixedHeaders($request, $param, $value);
+ } else {
+ $request->setHeader($param->getWireName(), $value);
+ }
+ }
+
+ /**
+ * Add a prefixed array of headers to the request
+ *
+ * @param RequestInterface $request Request to update
+ * @param Parameter $param Parameter object
+ * @param array $value Header array to add
+ *
+ * @throws InvalidArgumentException
+ */
+ protected function addPrefixedHeaders(RequestInterface $request, Parameter $param, $value)
+ {
+ if (!is_array($value)) {
+ throw new InvalidArgumentException('An array of mapped headers expected, but received a single value');
+ }
+ $prefix = $param->getSentAs();
+ foreach ($value as $headerName => $headerValue) {
+ $request->setHeader($prefix . $headerName, $headerValue);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php
new file mode 100644
index 0000000..757e1c5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/JsonVisitor.php
@@ -0,0 +1,63 @@
+data = new \SplObjectStorage();
+ }
+
+ /**
+ * Set the Content-Type header to add to the request if JSON is added to the body. This visitor does not add a
+ * Content-Type header unless you specify one here.
+ *
+ * @param string $header Header to set when JSON is added (e.g. application/json)
+ *
+ * @return self
+ */
+ public function setContentTypeHeader($header = 'application/json')
+ {
+ $this->jsonContentType = $header;
+
+ return $this;
+ }
+
+ public function visit(CommandInterface $command, RequestInterface $request, Parameter $param, $value)
+ {
+ if (isset($this->data[$command])) {
+ $json = $this->data[$command];
+ } else {
+ $json = array();
+ }
+ $json[$param->getWireName()] = $this->prepareValue($value, $param);
+ $this->data[$command] = $json;
+ }
+
+ public function after(CommandInterface $command, RequestInterface $request)
+ {
+ if (isset($this->data[$command])) {
+ // Don't overwrite the Content-Type if one is set
+ if ($this->jsonContentType && !$request->hasHeader('Content-Type')) {
+ $request->setHeader('Content-Type', $this->jsonContentType);
+ }
+
+ $request->setBody(json_encode($this->data[$command]));
+ unset($this->data[$command]);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/PostFieldVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/PostFieldVisitor.php
new file mode 100644
index 0000000..975850b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/PostFieldVisitor.php
@@ -0,0 +1,18 @@
+setPostField($param->getWireName(), $this->prepareValue($value, $param));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/PostFileVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/PostFileVisitor.php
new file mode 100644
index 0000000..0853ebe
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/PostFileVisitor.php
@@ -0,0 +1,24 @@
+filter($value);
+ if ($value instanceof PostFileInterface) {
+ $request->addPostFile($value);
+ } else {
+ $request->addPostFile($param->getWireName(), $value);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/QueryVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/QueryVisitor.php
new file mode 100644
index 0000000..315877a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/QueryVisitor.php
@@ -0,0 +1,18 @@
+getQuery()->set($param->getWireName(), $this->prepareValue($value, $param));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/RequestVisitorInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/RequestVisitorInterface.php
new file mode 100644
index 0000000..14e0b2d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/RequestVisitorInterface.php
@@ -0,0 +1,31 @@
+setResponseBody($value);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php
new file mode 100644
index 0000000..5b71487
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php
@@ -0,0 +1,252 @@
+data = new \SplObjectStorage();
+ }
+
+ /**
+ * Change the content-type header that is added when XML is found
+ *
+ * @param string $header Header to set when XML is found
+ *
+ * @return self
+ */
+ public function setContentTypeHeader($header)
+ {
+ $this->contentType = $header;
+
+ return $this;
+ }
+
+ public function visit(CommandInterface $command, RequestInterface $request, Parameter $param, $value)
+ {
+ $xml = isset($this->data[$command])
+ ? $this->data[$command]
+ : $this->createRootElement($param->getParent());
+ $this->addXml($xml, $param, $value);
+
+ $this->data[$command] = $xml;
+ }
+
+ public function after(CommandInterface $command, RequestInterface $request)
+ {
+ $xml = null;
+
+ // If data was found that needs to be serialized, then do so
+ if (isset($this->data[$command])) {
+ $xml = $this->finishDocument($this->data[$command]);
+ unset($this->data[$command]);
+ } else {
+ // Check if XML should always be sent for the command
+ $operation = $command->getOperation();
+ if ($operation->getData('xmlAllowEmpty')) {
+ $xmlWriter = $this->createRootElement($operation);
+ $xml = $this->finishDocument($xmlWriter);
+ }
+ }
+
+ if ($xml) {
+ // Don't overwrite the Content-Type if one is set
+ if ($this->contentType && !$request->hasHeader('Content-Type')) {
+ $request->setHeader('Content-Type', $this->contentType);
+ }
+ $request->setBody($xml);
+ }
+ }
+
+ /**
+ * Create the root XML element to use with a request
+ *
+ * @param Operation $operation Operation object
+ *
+ * @return \XMLWriter
+ */
+ protected function createRootElement(Operation $operation)
+ {
+ static $defaultRoot = array('name' => 'Request');
+ // If no root element was specified, then just wrap the XML in 'Request'
+ $root = $operation->getData('xmlRoot') ?: $defaultRoot;
+ // Allow the XML declaration to be customized with xmlEncoding
+ $encoding = $operation->getData('xmlEncoding');
+
+ $xmlWriter = $this->startDocument($encoding);
+
+ $xmlWriter->startElement($root['name']);
+ // Create the wrapping element with no namespaces if no namespaces were present
+ if (!empty($root['namespaces'])) {
+ // Create the wrapping element with an array of one or more namespaces
+ foreach ((array) $root['namespaces'] as $prefix => $uri) {
+ $nsLabel = 'xmlns';
+ if (!is_numeric($prefix)) {
+ $nsLabel .= ':'.$prefix;
+ }
+ $xmlWriter->writeAttribute($nsLabel, $uri);
+ }
+ }
+ return $xmlWriter;
+ }
+
+ /**
+ * Recursively build the XML body
+ *
+ * @param \XMLWriter $xmlWriter XML to modify
+ * @param Parameter $param API Parameter
+ * @param mixed $value Value to add
+ */
+ protected function addXml(\XMLWriter $xmlWriter, Parameter $param, $value)
+ {
+ if ($value === null) {
+ return;
+ }
+
+ $value = $param->filter($value);
+ $type = $param->getType();
+ $name = $param->getWireName();
+ $prefix = null;
+ $namespace = $param->getData('xmlNamespace');
+ if (false !== strpos($name, ':')) {
+ list($prefix, $name) = explode(':', $name, 2);
+ }
+
+ if ($type == 'object' || $type == 'array') {
+ if (!$param->getData('xmlFlattened')) {
+ $xmlWriter->startElementNS(null, $name, $namespace);
+ }
+ if ($param->getType() == 'array') {
+ $this->addXmlArray($xmlWriter, $param, $value);
+ } elseif ($param->getType() == 'object') {
+ $this->addXmlObject($xmlWriter, $param, $value);
+ }
+ if (!$param->getData('xmlFlattened')) {
+ $xmlWriter->endElement();
+ }
+ return;
+ }
+ if ($param->getData('xmlAttribute')) {
+ $this->writeAttribute($xmlWriter, $prefix, $name, $namespace, $value);
+ } else {
+ $this->writeElement($xmlWriter, $prefix, $name, $namespace, $value);
+ }
+ }
+
+ /**
+ * Write an attribute with namespace if used
+ *
+ * @param \XMLWriter $xmlWriter XMLWriter instance
+ * @param string $prefix Namespace prefix if any
+ * @param string $name Attribute name
+ * @param string $namespace The uri of the namespace
+ * @param string $value The attribute content
+ */
+ protected function writeAttribute($xmlWriter, $prefix, $name, $namespace, $value)
+ {
+ if (empty($namespace)) {
+ $xmlWriter->writeAttribute($name, $value);
+ } else {
+ $xmlWriter->writeAttributeNS($prefix, $name, $namespace, $value);
+ }
+ }
+
+ /**
+ * Write an element with namespace if used
+ *
+ * @param \XMLWriter $xmlWriter XML writer resource
+ * @param string $prefix Namespace prefix if any
+ * @param string $name Element name
+ * @param string $namespace The uri of the namespace
+ * @param string $value The element content
+ */
+ protected function writeElement(\XMLWriter $xmlWriter, $prefix, $name, $namespace, $value)
+ {
+ $xmlWriter->startElementNS($prefix, $name, $namespace);
+ if (strpbrk($value, '<>&')) {
+ $xmlWriter->writeCData($value);
+ } else {
+ $xmlWriter->writeRaw($value);
+ }
+ $xmlWriter->endElement();
+ }
+
+ /**
+ * Create a new xml writer and start a document
+ *
+ * @param string $encoding document encoding
+ *
+ * @return \XMLWriter the writer resource
+ */
+ protected function startDocument($encoding)
+ {
+ $xmlWriter = new \XMLWriter();
+ $xmlWriter->openMemory();
+ $xmlWriter->startDocument('1.0', $encoding);
+
+ return $xmlWriter;
+ }
+
+ /**
+ * End the document and return the output
+ *
+ * @param \XMLWriter $xmlWriter
+ *
+ * @return \string the writer resource
+ */
+ protected function finishDocument($xmlWriter)
+ {
+ $xmlWriter->endDocument();
+
+ return $xmlWriter->outputMemory();
+ }
+
+ /**
+ * Add an array to the XML
+ */
+ protected function addXmlArray(\XMLWriter $xmlWriter, Parameter $param, &$value)
+ {
+ if ($items = $param->getItems()) {
+ foreach ($value as $v) {
+ $this->addXml($xmlWriter, $items, $v);
+ }
+ }
+ }
+
+ /**
+ * Add an object to the XML
+ */
+ protected function addXmlObject(\XMLWriter $xmlWriter, Parameter $param, &$value)
+ {
+ $noAttributes = array();
+ // add values which have attributes
+ foreach ($value as $name => $v) {
+ if ($property = $param->getProperty($name)) {
+ if ($property->getData('xmlAttribute')) {
+ $this->addXml($xmlWriter, $property, $v);
+ } else {
+ $noAttributes[] = array('value' => $v, 'property' => $property);
+ }
+ }
+ }
+ // now add values with no attributes
+ foreach ($noAttributes as $element) {
+ $this->addXml($xmlWriter, $element['property'], $element['value']);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/AbstractResponseVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/AbstractResponseVisitor.php
new file mode 100644
index 0000000..d87eeb9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/AbstractResponseVisitor.php
@@ -0,0 +1,26 @@
+getName()] = $param->filter($response->getBody());
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/HeaderVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/HeaderVisitor.php
new file mode 100644
index 0000000..0f8737c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/HeaderVisitor.php
@@ -0,0 +1,50 @@
+getType() == 'object' && $param->getAdditionalProperties() instanceof Parameter) {
+ $this->processPrefixedHeaders($response, $param, $value);
+ } else {
+ $value[$param->getName()] = $param->filter((string) $response->getHeader($param->getWireName()));
+ }
+ }
+
+ /**
+ * Process a prefixed header array
+ *
+ * @param Response $response Response that contains the headers
+ * @param Parameter $param Parameter object
+ * @param array $value Value response array to modify
+ */
+ protected function processPrefixedHeaders(Response $response, Parameter $param, &$value)
+ {
+ // Grab prefixed headers that should be placed into an array with the prefix stripped
+ if ($prefix = $param->getSentAs()) {
+ $container = $param->getName();
+ $len = strlen($prefix);
+ // Find all matching headers and place them into the containing element
+ foreach ($response->getHeaders()->toArray() as $key => $header) {
+ if (stripos($key, $prefix) === 0) {
+ // Account for multi-value headers
+ $value[$container][substr($key, $len)] = count($header) == 1 ? end($header) : $header;
+ }
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php
new file mode 100644
index 0000000..a609ebd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/JsonVisitor.php
@@ -0,0 +1,93 @@
+getResponse()->json();
+ }
+
+ public function visit(
+ CommandInterface $command,
+ Response $response,
+ Parameter $param,
+ &$value,
+ $context = null
+ ) {
+ $name = $param->getName();
+ $key = $param->getWireName();
+ if (isset($value[$key])) {
+ $this->recursiveProcess($param, $value[$key]);
+ if ($key != $name) {
+ $value[$name] = $value[$key];
+ unset($value[$key]);
+ }
+ }
+ }
+
+ /**
+ * Recursively process a parameter while applying filters
+ *
+ * @param Parameter $param API parameter being validated
+ * @param mixed $value Value to validate and process. The value may change during this process.
+ */
+ protected function recursiveProcess(Parameter $param, &$value)
+ {
+ if ($value === null) {
+ return;
+ }
+
+ if (is_array($value)) {
+ $type = $param->getType();
+ if ($type == 'array') {
+ foreach ($value as &$item) {
+ $this->recursiveProcess($param->getItems(), $item);
+ }
+ } elseif ($type == 'object' && !isset($value[0])) {
+ // On the above line, we ensure that the array is associative and not numerically indexed
+ $knownProperties = array();
+ if ($properties = $param->getProperties()) {
+ foreach ($properties as $property) {
+ $name = $property->getName();
+ $key = $property->getWireName();
+ $knownProperties[$name] = 1;
+ if (isset($value[$key])) {
+ $this->recursiveProcess($property, $value[$key]);
+ if ($key != $name) {
+ $value[$name] = $value[$key];
+ unset($value[$key]);
+ }
+ }
+ }
+ }
+
+ // Remove any unknown and potentially unsafe properties
+ if ($param->getAdditionalProperties() === false) {
+ $value = array_intersect_key($value, $knownProperties);
+ } elseif (($additional = $param->getAdditionalProperties()) !== true) {
+ // Validate and filter additional properties
+ foreach ($value as &$v) {
+ $this->recursiveProcess($additional, $v);
+ }
+ }
+ }
+ }
+
+ $value = $param->filter($value);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/ReasonPhraseVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/ReasonPhraseVisitor.php
new file mode 100644
index 0000000..1b10ebc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/ReasonPhraseVisitor.php
@@ -0,0 +1,23 @@
+getName()] = $response->getReasonPhrase();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/ResponseVisitorInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/ResponseVisitorInterface.php
new file mode 100644
index 0000000..033f40c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/ResponseVisitorInterface.php
@@ -0,0 +1,46 @@
+getName()] = $response->getStatusCode();
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php
new file mode 100644
index 0000000..bb7124b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Response/XmlVisitor.php
@@ -0,0 +1,151 @@
+getResponse()->xml()), true);
+ }
+
+ public function visit(
+ CommandInterface $command,
+ Response $response,
+ Parameter $param,
+ &$value,
+ $context = null
+ ) {
+ $sentAs = $param->getWireName();
+ $name = $param->getName();
+ if (isset($value[$sentAs])) {
+ $this->recursiveProcess($param, $value[$sentAs]);
+ if ($name != $sentAs) {
+ $value[$name] = $value[$sentAs];
+ unset($value[$sentAs]);
+ }
+ }
+ }
+
+ /**
+ * Recursively process a parameter while applying filters
+ *
+ * @param Parameter $param API parameter being processed
+ * @param mixed $value Value to validate and process. The value may change during this process.
+ */
+ protected function recursiveProcess(Parameter $param, &$value)
+ {
+ $type = $param->getType();
+
+ if (!is_array($value)) {
+ if ($type == 'array') {
+ // Cast to an array if the value was a string, but should be an array
+ $this->recursiveProcess($param->getItems(), $value);
+ $value = array($value);
+ }
+ } elseif ($type == 'object') {
+ $this->processObject($param, $value);
+ } elseif ($type == 'array') {
+ $this->processArray($param, $value);
+ } elseif ($type == 'string' && gettype($value) == 'array') {
+ $value = '';
+ }
+
+ if ($value !== null) {
+ $value = $param->filter($value);
+ }
+ }
+
+ /**
+ * Process an array
+ *
+ * @param Parameter $param API parameter being parsed
+ * @param mixed $value Value to process
+ */
+ protected function processArray(Parameter $param, &$value)
+ {
+ // Convert the node if it was meant to be an array
+ if (!isset($value[0])) {
+ // Collections fo nodes are sometimes wrapped in an additional array. For example:
+ // 12 should become:
+ // array('Items' => array(array('a' => 1), array('a' => 2))
+ // Some nodes are not wrapped. For example: 12
+ // should become array('Foo' => array(array('a' => 1), array('a' => 2))
+ if ($param->getItems() && isset($value[$param->getItems()->getWireName()])) {
+ // Account for the case of a collection wrapping wrapped nodes: Items => Item[]
+ $value = $value[$param->getItems()->getWireName()];
+ // If the wrapped node only had one value, then make it an array of nodes
+ if (!isset($value[0]) || !is_array($value)) {
+ $value = array($value);
+ }
+ } elseif (!empty($value)) {
+ // Account for repeated nodes that must be an array: Foo => Baz, Foo => Baz, but only if the
+ // value is set and not empty
+ $value = array($value);
+ }
+ }
+
+ foreach ($value as &$item) {
+ $this->recursiveProcess($param->getItems(), $item);
+ }
+ }
+
+ /**
+ * Process an object
+ *
+ * @param Parameter $param API parameter being parsed
+ * @param mixed $value Value to process
+ */
+ protected function processObject(Parameter $param, &$value)
+ {
+ // Ensure that the array is associative and not numerically indexed
+ if (!isset($value[0]) && ($properties = $param->getProperties())) {
+ $knownProperties = array();
+ foreach ($properties as $property) {
+ $name = $property->getName();
+ $sentAs = $property->getWireName();
+ $knownProperties[$name] = 1;
+ if ($property->getData('xmlAttribute')) {
+ $this->processXmlAttribute($property, $value);
+ } elseif (isset($value[$sentAs])) {
+ $this->recursiveProcess($property, $value[$sentAs]);
+ if ($name != $sentAs) {
+ $value[$name] = $value[$sentAs];
+ unset($value[$sentAs]);
+ }
+ }
+ }
+
+ // Remove any unknown and potentially unsafe properties
+ if ($param->getAdditionalProperties() === false) {
+ $value = array_intersect_key($value, $knownProperties);
+ }
+ }
+ }
+
+ /**
+ * Process an XML attribute property
+ *
+ * @param Parameter $property Property to process
+ * @param array $value Value to process and update
+ */
+ protected function processXmlAttribute(Parameter $property, array &$value)
+ {
+ $sentAs = $property->getWireName();
+ if (isset($value['@attributes'][$sentAs])) {
+ $value[$property->getName()] = $value['@attributes'][$sentAs];
+ unset($value['@attributes'][$sentAs]);
+ if (empty($value['@attributes'])) {
+ unset($value['@attributes']);
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/VisitorFlyweight.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/VisitorFlyweight.php
new file mode 100644
index 0000000..74cb628
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/VisitorFlyweight.php
@@ -0,0 +1,138 @@
+ 'Guzzle\Service\Command\LocationVisitor\Request\BodyVisitor',
+ 'request.header' => 'Guzzle\Service\Command\LocationVisitor\Request\HeaderVisitor',
+ 'request.json' => 'Guzzle\Service\Command\LocationVisitor\Request\JsonVisitor',
+ 'request.postField' => 'Guzzle\Service\Command\LocationVisitor\Request\PostFieldVisitor',
+ 'request.postFile' => 'Guzzle\Service\Command\LocationVisitor\Request\PostFileVisitor',
+ 'request.query' => 'Guzzle\Service\Command\LocationVisitor\Request\QueryVisitor',
+ 'request.response_body' => 'Guzzle\Service\Command\LocationVisitor\Request\ResponseBodyVisitor',
+ 'request.responseBody' => 'Guzzle\Service\Command\LocationVisitor\Request\ResponseBodyVisitor',
+ 'request.xml' => 'Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor',
+ 'response.body' => 'Guzzle\Service\Command\LocationVisitor\Response\BodyVisitor',
+ 'response.header' => 'Guzzle\Service\Command\LocationVisitor\Response\HeaderVisitor',
+ 'response.json' => 'Guzzle\Service\Command\LocationVisitor\Response\JsonVisitor',
+ 'response.reasonPhrase' => 'Guzzle\Service\Command\LocationVisitor\Response\ReasonPhraseVisitor',
+ 'response.statusCode' => 'Guzzle\Service\Command\LocationVisitor\Response\StatusCodeVisitor',
+ 'response.xml' => 'Guzzle\Service\Command\LocationVisitor\Response\XmlVisitor'
+ );
+
+ /** @var array Array of mappings of location names to classes */
+ protected $mappings;
+
+ /** @var array Cache of instantiated visitors */
+ protected $cache = array();
+
+ /**
+ * @return self
+ * @codeCoverageIgnore
+ */
+ public static function getInstance()
+ {
+ if (!self::$instance) {
+ self::$instance = new self();
+ }
+
+ return self::$instance;
+ }
+
+ /**
+ * @param array $mappings Array mapping request.name and response.name to location visitor classes. Leave null to
+ * use the default values.
+ */
+ public function __construct(array $mappings = null)
+ {
+ $this->mappings = $mappings === null ? self::$defaultMappings : $mappings;
+ }
+
+ /**
+ * Get an instance of a request visitor by location name
+ *
+ * @param string $visitor Visitor name
+ *
+ * @return RequestVisitorInterface
+ */
+ public function getRequestVisitor($visitor)
+ {
+ return $this->getKey('request.' . $visitor);
+ }
+
+ /**
+ * Get an instance of a response visitor by location name
+ *
+ * @param string $visitor Visitor name
+ *
+ * @return ResponseVisitorInterface
+ */
+ public function getResponseVisitor($visitor)
+ {
+ return $this->getKey('response.' . $visitor);
+ }
+
+ /**
+ * Add a response visitor to the factory by name
+ *
+ * @param string $name Name of the visitor
+ * @param RequestVisitorInterface $visitor Visitor to add
+ *
+ * @return self
+ */
+ public function addRequestVisitor($name, RequestVisitorInterface $visitor)
+ {
+ $this->cache['request.' . $name] = $visitor;
+
+ return $this;
+ }
+
+ /**
+ * Add a response visitor to the factory by name
+ *
+ * @param string $name Name of the visitor
+ * @param ResponseVisitorInterface $visitor Visitor to add
+ *
+ * @return self
+ */
+ public function addResponseVisitor($name, ResponseVisitorInterface $visitor)
+ {
+ $this->cache['response.' . $name] = $visitor;
+
+ return $this;
+ }
+
+ /**
+ * Get a visitor by key value name
+ *
+ * @param string $key Key name to retrieve
+ *
+ * @return mixed
+ * @throws InvalidArgumentException
+ */
+ private function getKey($key)
+ {
+ if (!isset($this->cache[$key])) {
+ if (!isset($this->mappings[$key])) {
+ list($type, $name) = explode('.', $key);
+ throw new InvalidArgumentException("No {$type} visitor has been mapped for {$name}");
+ }
+ $this->cache[$key] = new $this->mappings[$key];
+ }
+
+ return $this->cache[$key];
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/OperationCommand.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/OperationCommand.php
new file mode 100644
index 0000000..0748b5a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/OperationCommand.php
@@ -0,0 +1,89 @@
+responseParser = $parser;
+
+ return $this;
+ }
+
+ /**
+ * Set the request serializer used with the command
+ *
+ * @param RequestSerializerInterface $serializer Request serializer
+ *
+ * @return self
+ */
+ public function setRequestSerializer(RequestSerializerInterface $serializer)
+ {
+ $this->requestSerializer = $serializer;
+
+ return $this;
+ }
+
+ /**
+ * Get the request serializer used with the command
+ *
+ * @return RequestSerializerInterface
+ */
+ public function getRequestSerializer()
+ {
+ if (!$this->requestSerializer) {
+ // Use the default request serializer if none was found
+ $this->requestSerializer = DefaultRequestSerializer::getInstance();
+ }
+
+ return $this->requestSerializer;
+ }
+
+ /**
+ * Get the response parser used for the operation
+ *
+ * @return ResponseParserInterface
+ */
+ public function getResponseParser()
+ {
+ if (!$this->responseParser) {
+ // Use the default response parser if none was found
+ $this->responseParser = OperationResponseParser::getInstance();
+ }
+
+ return $this->responseParser;
+ }
+
+ protected function build()
+ {
+ // Prepare and serialize the request
+ $this->request = $this->getRequestSerializer()->prepare($this);
+ }
+
+ protected function process()
+ {
+ // Do not process the response if 'command.response_processing' is set to 'raw'
+ $this->result = $this[self::RESPONSE_PROCESSING] == self::TYPE_RAW
+ ? $this->request->getResponse()
+ : $this->getResponseParser()->parse($this);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/OperationResponseParser.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/OperationResponseParser.php
new file mode 100644
index 0000000..ca00bc0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/OperationResponseParser.php
@@ -0,0 +1,195 @@
+factory = $factory;
+ $this->schemaInModels = $schemaInModels;
+ }
+
+ /**
+ * Add a location visitor to the command
+ *
+ * @param string $location Location to associate with the visitor
+ * @param ResponseVisitorInterface $visitor Visitor to attach
+ *
+ * @return self
+ */
+ public function addVisitor($location, ResponseVisitorInterface $visitor)
+ {
+ $this->factory->addResponseVisitor($location, $visitor);
+
+ return $this;
+ }
+
+ protected function handleParsing(CommandInterface $command, Response $response, $contentType)
+ {
+ $operation = $command->getOperation();
+ $type = $operation->getResponseType();
+ $model = null;
+
+ if ($type == OperationInterface::TYPE_MODEL) {
+ $model = $operation->getServiceDescription()->getModel($operation->getResponseClass());
+ } elseif ($type == OperationInterface::TYPE_CLASS) {
+ return $this->parseClass($command);
+ }
+
+ if (!$model) {
+ // Return basic processing if the responseType is not model or the model cannot be found
+ return parent::handleParsing($command, $response, $contentType);
+ } elseif ($command[AbstractCommand::RESPONSE_PROCESSING] != AbstractCommand::TYPE_MODEL) {
+ // Returns a model with no visiting if the command response processing is not model
+ return new Model(parent::handleParsing($command, $response, $contentType));
+ } else {
+ // Only inject the schema into the model if "schemaInModel" is true
+ return new Model($this->visitResult($model, $command, $response), $this->schemaInModels ? $model : null);
+ }
+ }
+
+ /**
+ * Parse a class object
+ *
+ * @param CommandInterface $command Command to parse into an object
+ *
+ * @return mixed
+ * @throws ResponseClassException
+ */
+ protected function parseClass(CommandInterface $command)
+ {
+ // Emit the operation.parse_class event. If a listener injects a 'result' property, then that will be the result
+ $event = new CreateResponseClassEvent(array('command' => $command));
+ $command->getClient()->getEventDispatcher()->dispatch('command.parse_response', $event);
+ if ($result = $event->getResult()) {
+ return $result;
+ }
+
+ $className = $command->getOperation()->getResponseClass();
+ if (!method_exists($className, 'fromCommand')) {
+ throw new ResponseClassException("{$className} must exist and implement a static fromCommand() method");
+ }
+
+ return $className::fromCommand($command);
+ }
+
+ /**
+ * Perform transformations on the result array
+ *
+ * @param Parameter $model Model that defines the structure
+ * @param CommandInterface $command Command that performed the operation
+ * @param Response $response Response received
+ *
+ * @return array Returns the array of result data
+ */
+ protected function visitResult(Parameter $model, CommandInterface $command, Response $response)
+ {
+ $foundVisitors = $result = $knownProps = array();
+ $props = $model->getProperties();
+
+ foreach ($props as $schema) {
+ if ($location = $schema->getLocation()) {
+ // Trigger the before method on the first found visitor of this type
+ if (!isset($foundVisitors[$location])) {
+ $foundVisitors[$location] = $this->factory->getResponseVisitor($location);
+ $foundVisitors[$location]->before($command, $result);
+ }
+ }
+ }
+
+ // Visit additional properties when it is an actual schema
+ if (($additional = $model->getAdditionalProperties()) instanceof Parameter) {
+ $this->visitAdditionalProperties($model, $command, $response, $additional, $result, $foundVisitors);
+ }
+
+ // Apply the parameter value with the location visitor
+ foreach ($props as $schema) {
+ $knownProps[$schema->getName()] = 1;
+ if ($location = $schema->getLocation()) {
+ $foundVisitors[$location]->visit($command, $response, $schema, $result);
+ }
+ }
+
+ // Remove any unknown and potentially unsafe top-level properties
+ if ($additional === false) {
+ $result = array_intersect_key($result, $knownProps);
+ }
+
+ // Call the after() method of each found visitor
+ foreach ($foundVisitors as $visitor) {
+ $visitor->after($command);
+ }
+
+ return $result;
+ }
+
+ protected function visitAdditionalProperties(
+ Parameter $model,
+ CommandInterface $command,
+ Response $response,
+ Parameter $additional,
+ &$result,
+ array &$foundVisitors
+ ) {
+ // Only visit when a location is specified
+ if ($location = $additional->getLocation()) {
+ if (!isset($foundVisitors[$location])) {
+ $foundVisitors[$location] = $this->factory->getResponseVisitor($location);
+ $foundVisitors[$location]->before($command, $result);
+ }
+ // Only traverse if an array was parsed from the before() visitors
+ if (is_array($result)) {
+ // Find each additional property
+ foreach (array_keys($result) as $key) {
+ // Check if the model actually knows this property. If so, then it is not additional
+ if (!$model->getProperty($key)) {
+ // Set the name to the key so that we can parse it with each visitor
+ $additional->setName($key);
+ $foundVisitors[$location]->visit($command, $response, $additional, $result);
+ }
+ }
+ // Reset the additionalProperties name to null
+ $additional->setName(null);
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/RequestSerializerInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/RequestSerializerInterface.php
new file mode 100644
index 0000000..60b9334
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Command/RequestSerializerInterface.php
@@ -0,0 +1,21 @@
+ true, 'httpMethod' => true, 'uri' => true, 'class' => true, 'responseClass' => true,
+ 'responseType' => true, 'responseNotes' => true, 'notes' => true, 'summary' => true, 'documentationUrl' => true,
+ 'deprecated' => true, 'data' => true, 'parameters' => true, 'additionalParameters' => true,
+ 'errorResponses' => true
+ );
+
+ /** @var array Parameters */
+ protected $parameters = array();
+
+ /** @var Parameter Additional parameters schema */
+ protected $additionalParameters;
+
+ /** @var string Name of the command */
+ protected $name;
+
+ /** @var string HTTP method */
+ protected $httpMethod;
+
+ /** @var string This is a short summary of what the operation does */
+ protected $summary;
+
+ /** @var string A longer text field to explain the behavior of the operation. */
+ protected $notes;
+
+ /** @var string Reference URL providing more information about the operation */
+ protected $documentationUrl;
+
+ /** @var string HTTP URI of the command */
+ protected $uri;
+
+ /** @var string Class of the command object */
+ protected $class;
+
+ /** @var string This is what is returned from the method */
+ protected $responseClass;
+
+ /** @var string Type information about the response */
+ protected $responseType;
+
+ /** @var string Information about the response returned by the operation */
+ protected $responseNotes;
+
+ /** @var bool Whether or not the command is deprecated */
+ protected $deprecated;
+
+ /** @var array Array of errors that could occur when running the command */
+ protected $errorResponses;
+
+ /** @var ServiceDescriptionInterface */
+ protected $description;
+
+ /** @var array Extra operation information */
+ protected $data;
+
+ /**
+ * Builds an Operation object using an array of configuration data:
+ * - name: (string) Name of the command
+ * - httpMethod: (string) HTTP method of the operation
+ * - uri: (string) URI template that can create a relative or absolute URL
+ * - class: (string) Concrete class that implements this command
+ * - parameters: (array) Associative array of parameters for the command. {@see Parameter} for information.
+ * - summary: (string) This is a short summary of what the operation does
+ * - notes: (string) A longer text field to explain the behavior of the operation.
+ * - documentationUrl: (string) Reference URL providing more information about the operation
+ * - responseClass: (string) This is what is returned from the method. Can be a primitive, PSR-0 compliant
+ * class name, or model.
+ * - responseNotes: (string) Information about the response returned by the operation
+ * - responseType: (string) One of 'primitive', 'class', 'model', or 'documentation'. If not specified, this
+ * value will be automatically inferred based on whether or not there is a model matching the
+ * name, if a matching PSR-0 compliant class name is found, or set to 'primitive' by default.
+ * - deprecated: (bool) Set to true if this is a deprecated command
+ * - errorResponses: (array) Errors that could occur when executing the command. Array of hashes, each with a
+ * 'code' (the HTTP response code), 'reason' (response reason phrase or description of the
+ * error), and 'class' (a custom exception class that would be thrown if the error is
+ * encountered).
+ * - data: (array) Any extra data that might be used to help build or serialize the operation
+ * - additionalParameters: (null|array) Parameter schema to use when an option is passed to the operation that is
+ * not in the schema
+ *
+ * @param array $config Array of configuration data
+ * @param ServiceDescriptionInterface $description Service description used to resolve models if $ref tags are found
+ */
+ public function __construct(array $config = array(), ServiceDescriptionInterface $description = null)
+ {
+ $this->description = $description;
+
+ // Get the intersection of the available properties and properties set on the operation
+ foreach (array_intersect_key($config, self::$properties) as $key => $value) {
+ $this->{$key} = $value;
+ }
+
+ $this->class = $this->class ?: self::DEFAULT_COMMAND_CLASS;
+ $this->deprecated = (bool) $this->deprecated;
+ $this->errorResponses = $this->errorResponses ?: array();
+ $this->data = $this->data ?: array();
+
+ if (!$this->responseClass) {
+ $this->responseClass = 'array';
+ $this->responseType = 'primitive';
+ } elseif ($this->responseType) {
+ // Set the response type to perform validation
+ $this->setResponseType($this->responseType);
+ } else {
+ // A response class was set and no response type was set, so guess what the type is
+ $this->inferResponseType();
+ }
+
+ // Parameters need special handling when adding
+ if ($this->parameters) {
+ foreach ($this->parameters as $name => $param) {
+ if ($param instanceof Parameter) {
+ $param->setName($name)->setParent($this);
+ } elseif (is_array($param)) {
+ $param['name'] = $name;
+ $this->addParam(new Parameter($param, $this->description));
+ }
+ }
+ }
+
+ if ($this->additionalParameters) {
+ if ($this->additionalParameters instanceof Parameter) {
+ $this->additionalParameters->setParent($this);
+ } elseif (is_array($this->additionalParameters)) {
+ $this->setadditionalParameters(new Parameter($this->additionalParameters, $this->description));
+ }
+ }
+ }
+
+ public function toArray()
+ {
+ $result = array();
+ // Grab valid properties and filter out values that weren't set
+ foreach (array_keys(self::$properties) as $check) {
+ if ($value = $this->{$check}) {
+ $result[$check] = $value;
+ }
+ }
+ // Remove the name property
+ unset($result['name']);
+ // Parameters need to be converted to arrays
+ $result['parameters'] = array();
+ foreach ($this->parameters as $key => $param) {
+ $result['parameters'][$key] = $param->toArray();
+ }
+ // Additional parameters need to be cast to an array
+ if ($this->additionalParameters instanceof Parameter) {
+ $result['additionalParameters'] = $this->additionalParameters->toArray();
+ }
+
+ return $result;
+ }
+
+ public function getServiceDescription()
+ {
+ return $this->description;
+ }
+
+ public function setServiceDescription(ServiceDescriptionInterface $description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ public function getParams()
+ {
+ return $this->parameters;
+ }
+
+ public function getParamNames()
+ {
+ return array_keys($this->parameters);
+ }
+
+ public function hasParam($name)
+ {
+ return isset($this->parameters[$name]);
+ }
+
+ public function getParam($param)
+ {
+ return isset($this->parameters[$param]) ? $this->parameters[$param] : null;
+ }
+
+ /**
+ * Add a parameter to the command
+ *
+ * @param Parameter $param Parameter to add
+ *
+ * @return self
+ */
+ public function addParam(Parameter $param)
+ {
+ $this->parameters[$param->getName()] = $param;
+ $param->setParent($this);
+
+ return $this;
+ }
+
+ /**
+ * Remove a parameter from the command
+ *
+ * @param string $name Name of the parameter to remove
+ *
+ * @return self
+ */
+ public function removeParam($name)
+ {
+ unset($this->parameters[$name]);
+
+ return $this;
+ }
+
+ public function getHttpMethod()
+ {
+ return $this->httpMethod;
+ }
+
+ /**
+ * Set the HTTP method of the command
+ *
+ * @param string $httpMethod Method to set
+ *
+ * @return self
+ */
+ public function setHttpMethod($httpMethod)
+ {
+ $this->httpMethod = $httpMethod;
+
+ return $this;
+ }
+
+ public function getClass()
+ {
+ return $this->class;
+ }
+
+ /**
+ * Set the concrete class of the command
+ *
+ * @param string $className Concrete class name
+ *
+ * @return self
+ */
+ public function setClass($className)
+ {
+ $this->class = $className;
+
+ return $this;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set the name of the command
+ *
+ * @param string $name Name of the command
+ *
+ * @return self
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+
+ return $this;
+ }
+
+ public function getSummary()
+ {
+ return $this->summary;
+ }
+
+ /**
+ * Set a short summary of what the operation does
+ *
+ * @param string $summary Short summary of the operation
+ *
+ * @return self
+ */
+ public function setSummary($summary)
+ {
+ $this->summary = $summary;
+
+ return $this;
+ }
+
+ public function getNotes()
+ {
+ return $this->notes;
+ }
+
+ /**
+ * Set a longer text field to explain the behavior of the operation.
+ *
+ * @param string $notes Notes on the operation
+ *
+ * @return self
+ */
+ public function setNotes($notes)
+ {
+ $this->notes = $notes;
+
+ return $this;
+ }
+
+ public function getDocumentationUrl()
+ {
+ return $this->documentationUrl;
+ }
+
+ /**
+ * Set the URL pointing to additional documentation on the command
+ *
+ * @param string $docUrl Documentation URL
+ *
+ * @return self
+ */
+ public function setDocumentationUrl($docUrl)
+ {
+ $this->documentationUrl = $docUrl;
+
+ return $this;
+ }
+
+ public function getResponseClass()
+ {
+ return $this->responseClass;
+ }
+
+ /**
+ * Set what is returned from the method. Can be a primitive, class name, or model. For example: 'array',
+ * 'Guzzle\\Foo\\Baz', or 'MyModelName' (to reference a model by ID).
+ *
+ * @param string $responseClass Type of response
+ *
+ * @return self
+ */
+ public function setResponseClass($responseClass)
+ {
+ $this->responseClass = $responseClass;
+ $this->inferResponseType();
+
+ return $this;
+ }
+
+ public function getResponseType()
+ {
+ return $this->responseType;
+ }
+
+ /**
+ * Set qualifying information about the responseClass. One of 'primitive', 'class', 'model', or 'documentation'
+ *
+ * @param string $responseType Response type information
+ *
+ * @return self
+ * @throws InvalidArgumentException
+ */
+ public function setResponseType($responseType)
+ {
+ static $types = array(
+ self::TYPE_PRIMITIVE => true,
+ self::TYPE_CLASS => true,
+ self::TYPE_MODEL => true,
+ self::TYPE_DOCUMENTATION => true
+ );
+ if (!isset($types[$responseType])) {
+ throw new InvalidArgumentException('responseType must be one of ' . implode(', ', array_keys($types)));
+ }
+
+ $this->responseType = $responseType;
+
+ return $this;
+ }
+
+ public function getResponseNotes()
+ {
+ return $this->responseNotes;
+ }
+
+ /**
+ * Set notes about the response of the operation
+ *
+ * @param string $notes Response notes
+ *
+ * @return self
+ */
+ public function setResponseNotes($notes)
+ {
+ $this->responseNotes = $notes;
+
+ return $this;
+ }
+
+ public function getDeprecated()
+ {
+ return $this->deprecated;
+ }
+
+ /**
+ * Set whether or not the command is deprecated
+ *
+ * @param bool $isDeprecated Set to true to mark as deprecated
+ *
+ * @return self
+ */
+ public function setDeprecated($isDeprecated)
+ {
+ $this->deprecated = $isDeprecated;
+
+ return $this;
+ }
+
+ public function getUri()
+ {
+ return $this->uri;
+ }
+
+ /**
+ * Set the URI template of the command
+ *
+ * @param string $uri URI template to set
+ *
+ * @return self
+ */
+ public function setUri($uri)
+ {
+ $this->uri = $uri;
+
+ return $this;
+ }
+
+ public function getErrorResponses()
+ {
+ return $this->errorResponses;
+ }
+
+ /**
+ * Add an error to the command
+ *
+ * @param string $code HTTP response code
+ * @param string $reason HTTP response reason phrase or information about the error
+ * @param string $class Exception class associated with the error
+ *
+ * @return self
+ */
+ public function addErrorResponse($code, $reason, $class)
+ {
+ $this->errorResponses[] = array('code' => $code, 'reason' => $reason, 'class' => $class);
+
+ return $this;
+ }
+
+ /**
+ * Set all of the error responses of the operation
+ *
+ * @param array $errorResponses Hash of error name to a hash containing a code, reason, class
+ *
+ * @return self
+ */
+ public function setErrorResponses(array $errorResponses)
+ {
+ $this->errorResponses = $errorResponses;
+
+ return $this;
+ }
+
+ public function getData($name)
+ {
+ return isset($this->data[$name]) ? $this->data[$name] : null;
+ }
+
+ /**
+ * Set a particular data point on the operation
+ *
+ * @param string $name Name of the data value
+ * @param mixed $value Value to set
+ *
+ * @return self
+ */
+ public function setData($name, $value)
+ {
+ $this->data[$name] = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get the additionalParameters of the operation
+ *
+ * @return Parameter|null
+ */
+ public function getAdditionalParameters()
+ {
+ return $this->additionalParameters;
+ }
+
+ /**
+ * Set the additionalParameters of the operation
+ *
+ * @param Parameter|null $parameter Parameter to set
+ *
+ * @return self
+ */
+ public function setAdditionalParameters($parameter)
+ {
+ if ($this->additionalParameters = $parameter) {
+ $this->additionalParameters->setParent($this);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Infer the response type from the responseClass value
+ */
+ protected function inferResponseType()
+ {
+ static $primitives = array('array' => 1, 'boolean' => 1, 'string' => 1, 'integer' => 1, '' => 1);
+ if (isset($primitives[$this->responseClass])) {
+ $this->responseType = self::TYPE_PRIMITIVE;
+ } elseif ($this->description && $this->description->hasModel($this->responseClass)) {
+ $this->responseType = self::TYPE_MODEL;
+ } else {
+ $this->responseType = self::TYPE_CLASS;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/OperationInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/OperationInterface.php
new file mode 100644
index 0000000..4de41bd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/OperationInterface.php
@@ -0,0 +1,159 @@
+getModel($data['$ref'])) {
+ $data = $model->toArray() + $data;
+ }
+ } elseif (isset($data['extends'])) {
+ // If this parameter extends from another parameter then start with the actual data
+ // union in the parent's data (e.g. actual supersedes parent)
+ if ($extends = $description->getModel($data['extends'])) {
+ $data += $extends->toArray();
+ }
+ }
+ }
+
+ // Pull configuration data into the parameter
+ foreach ($data as $key => $value) {
+ $this->{$key} = $value;
+ }
+
+ $this->serviceDescription = $description;
+ $this->required = (bool) $this->required;
+ $this->data = (array) $this->data;
+
+ if ($this->filters) {
+ $this->setFilters((array) $this->filters);
+ }
+
+ if ($this->type == 'object' && $this->additionalProperties === null) {
+ $this->additionalProperties = true;
+ }
+ }
+
+ /**
+ * Convert the object to an array
+ *
+ * @return array
+ */
+ public function toArray()
+ {
+ static $checks = array('required', 'description', 'static', 'type', 'format', 'instanceOf', 'location', 'sentAs',
+ 'pattern', 'minimum', 'maximum', 'minItems', 'maxItems', 'minLength', 'maxLength', 'data', 'enum',
+ 'filters');
+
+ $result = array();
+
+ // Anything that is in the `Items` attribute of an array *must* include it's name if available
+ if ($this->parent instanceof self && $this->parent->getType() == 'array' && isset($this->name)) {
+ $result['name'] = $this->name;
+ }
+
+ foreach ($checks as $c) {
+ if ($value = $this->{$c}) {
+ $result[$c] = $value;
+ }
+ }
+
+ if ($this->default !== null) {
+ $result['default'] = $this->default;
+ }
+
+ if ($this->items !== null) {
+ $result['items'] = $this->getItems()->toArray();
+ }
+
+ if ($this->additionalProperties !== null) {
+ $result['additionalProperties'] = $this->getAdditionalProperties();
+ if ($result['additionalProperties'] instanceof self) {
+ $result['additionalProperties'] = $result['additionalProperties']->toArray();
+ }
+ }
+
+ if ($this->type == 'object' && $this->properties) {
+ $result['properties'] = array();
+ foreach ($this->getProperties() as $name => $property) {
+ $result['properties'][$name] = $property->toArray();
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get the default or static value of the command based on a value
+ *
+ * @param string $value Value that is currently set
+ *
+ * @return mixed Returns the value, a static value if one is present, or a default value
+ */
+ public function getValue($value)
+ {
+ if ($this->static || ($this->default !== null && $value === null)) {
+ return $this->default;
+ }
+
+ return $value;
+ }
+
+ /**
+ * Run a value through the filters OR format attribute associated with the parameter
+ *
+ * @param mixed $value Value to filter
+ *
+ * @return mixed Returns the filtered value
+ */
+ public function filter($value)
+ {
+ // Formats are applied exclusively and supersed filters
+ if ($this->format) {
+ return SchemaFormatter::format($this->format, $value);
+ }
+
+ // Convert Boolean values
+ if ($this->type == 'boolean' && !is_bool($value)) {
+ $value = filter_var($value, FILTER_VALIDATE_BOOLEAN);
+ }
+
+ // Apply filters to the value
+ if ($this->filters) {
+ foreach ($this->filters as $filter) {
+ if (is_array($filter)) {
+ // Convert complex filters that hold value place holders
+ foreach ($filter['args'] as &$data) {
+ if ($data == '@value') {
+ $data = $value;
+ } elseif ($data == '@api') {
+ $data = $this;
+ }
+ }
+ $value = call_user_func_array($filter['method'], $filter['args']);
+ } else {
+ $value = call_user_func($filter, $value);
+ }
+ }
+ }
+
+ return $value;
+ }
+
+ /**
+ * Get the name of the parameter
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Get the key of the parameter, where sentAs will supersede name if it is set
+ *
+ * @return string
+ */
+ public function getWireName()
+ {
+ return $this->sentAs ?: $this->name;
+ }
+
+ /**
+ * Set the name of the parameter
+ *
+ * @param string $name Name to set
+ *
+ * @return self
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get the type(s) of the parameter
+ *
+ * @return string|array
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * Set the type(s) of the parameter
+ *
+ * @param string|array $type Type of parameter or array of simple types used in a union
+ *
+ * @return self
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+
+ return $this;
+ }
+
+ /**
+ * Get if the parameter is required
+ *
+ * @return bool
+ */
+ public function getRequired()
+ {
+ return $this->required;
+ }
+
+ /**
+ * Set if the parameter is required
+ *
+ * @param bool $isRequired Whether or not the parameter is required
+ *
+ * @return self
+ */
+ public function setRequired($isRequired)
+ {
+ $this->required = (bool) $isRequired;
+
+ return $this;
+ }
+
+ /**
+ * Get the default value of the parameter
+ *
+ * @return string|null
+ */
+ public function getDefault()
+ {
+ return $this->default;
+ }
+
+ /**
+ * Set the default value of the parameter
+ *
+ * @param string|null $default Default value to set
+ *
+ * @return self
+ */
+ public function setDefault($default)
+ {
+ $this->default = $default;
+
+ return $this;
+ }
+
+ /**
+ * Get the description of the parameter
+ *
+ * @return string|null
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * Set the description of the parameter
+ *
+ * @param string $description Description
+ *
+ * @return self
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * Get the minimum acceptable value for an integer
+ *
+ * @return int|null
+ */
+ public function getMinimum()
+ {
+ return $this->minimum;
+ }
+
+ /**
+ * Set the minimum acceptable value for an integer
+ *
+ * @param int|null $min Minimum
+ *
+ * @return self
+ */
+ public function setMinimum($min)
+ {
+ $this->minimum = $min;
+
+ return $this;
+ }
+
+ /**
+ * Get the maximum acceptable value for an integer
+ *
+ * @return int|null
+ */
+ public function getMaximum()
+ {
+ return $this->maximum;
+ }
+
+ /**
+ * Set the maximum acceptable value for an integer
+ *
+ * @param int $max Maximum
+ *
+ * @return self
+ */
+ public function setMaximum($max)
+ {
+ $this->maximum = $max;
+
+ return $this;
+ }
+
+ /**
+ * Get the minimum allowed length of a string value
+ *
+ * @return int
+ */
+ public function getMinLength()
+ {
+ return $this->minLength;
+ }
+
+ /**
+ * Set the minimum allowed length of a string value
+ *
+ * @param int|null $min Minimum
+ *
+ * @return self
+ */
+ public function setMinLength($min)
+ {
+ $this->minLength = $min;
+
+ return $this;
+ }
+
+ /**
+ * Get the maximum allowed length of a string value
+ *
+ * @return int|null
+ */
+ public function getMaxLength()
+ {
+ return $this->maxLength;
+ }
+
+ /**
+ * Set the maximum allowed length of a string value
+ *
+ * @param int $max Maximum length
+ *
+ * @return self
+ */
+ public function setMaxLength($max)
+ {
+ $this->maxLength = $max;
+
+ return $this;
+ }
+
+ /**
+ * Get the maximum allowed number of items in an array value
+ *
+ * @return int|null
+ */
+ public function getMaxItems()
+ {
+ return $this->maxItems;
+ }
+
+ /**
+ * Set the maximum allowed number of items in an array value
+ *
+ * @param int $max Maximum
+ *
+ * @return self
+ */
+ public function setMaxItems($max)
+ {
+ $this->maxItems = $max;
+
+ return $this;
+ }
+
+ /**
+ * Get the minimum allowed number of items in an array value
+ *
+ * @return int
+ */
+ public function getMinItems()
+ {
+ return $this->minItems;
+ }
+
+ /**
+ * Set the minimum allowed number of items in an array value
+ *
+ * @param int|null $min Minimum
+ *
+ * @return self
+ */
+ public function setMinItems($min)
+ {
+ $this->minItems = $min;
+
+ return $this;
+ }
+
+ /**
+ * Get the location of the parameter
+ *
+ * @return string|null
+ */
+ public function getLocation()
+ {
+ return $this->location;
+ }
+
+ /**
+ * Set the location of the parameter
+ *
+ * @param string|null $location Location of the parameter
+ *
+ * @return self
+ */
+ public function setLocation($location)
+ {
+ $this->location = $location;
+
+ return $this;
+ }
+
+ /**
+ * Get the sentAs attribute of the parameter that used with locations to sentAs an attribute when it is being
+ * applied to a location.
+ *
+ * @return string|null
+ */
+ public function getSentAs()
+ {
+ return $this->sentAs;
+ }
+
+ /**
+ * Set the sentAs attribute
+ *
+ * @param string|null $name Name of the value as it is sent over the wire
+ *
+ * @return self
+ */
+ public function setSentAs($name)
+ {
+ $this->sentAs = $name;
+
+ return $this;
+ }
+
+ /**
+ * Retrieve a known property from the parameter by name or a data property by name. When not specific name value
+ * is specified, all data properties will be returned.
+ *
+ * @param string|null $name Specify a particular property name to retrieve
+ *
+ * @return array|mixed|null
+ */
+ public function getData($name = null)
+ {
+ if (!$name) {
+ return $this->data;
+ }
+
+ if (isset($this->data[$name])) {
+ return $this->data[$name];
+ } elseif (isset($this->{$name})) {
+ return $this->{$name};
+ }
+
+ return null;
+ }
+
+ /**
+ * Set the extra data properties of the parameter or set a specific extra property
+ *
+ * @param string|array|null $nameOrData The name of a specific extra to set or an array of extras to set
+ * @param mixed|null $data When setting a specific extra property, specify the data to set for it
+ *
+ * @return self
+ */
+ public function setData($nameOrData, $data = null)
+ {
+ if (is_array($nameOrData)) {
+ $this->data = $nameOrData;
+ } else {
+ $this->data[$nameOrData] = $data;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get whether or not the default value can be changed
+ *
+ * @return mixed|null
+ */
+ public function getStatic()
+ {
+ return $this->static;
+ }
+
+ /**
+ * Set to true if the default value cannot be changed
+ *
+ * @param bool $static True or false
+ *
+ * @return self
+ */
+ public function setStatic($static)
+ {
+ $this->static = (bool) $static;
+
+ return $this;
+ }
+
+ /**
+ * Get an array of filters used by the parameter
+ *
+ * @return array
+ */
+ public function getFilters()
+ {
+ return $this->filters ?: array();
+ }
+
+ /**
+ * Set the array of filters used by the parameter
+ *
+ * @param array $filters Array of functions to use as filters
+ *
+ * @return self
+ */
+ public function setFilters(array $filters)
+ {
+ $this->filters = array();
+ foreach ($filters as $filter) {
+ $this->addFilter($filter);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add a filter to the parameter
+ *
+ * @param string|array $filter Method to filter the value through
+ *
+ * @return self
+ * @throws InvalidArgumentException
+ */
+ public function addFilter($filter)
+ {
+ if (is_array($filter)) {
+ if (!isset($filter['method'])) {
+ throw new InvalidArgumentException('A [method] value must be specified for each complex filter');
+ }
+ }
+
+ if (!$this->filters) {
+ $this->filters = array($filter);
+ } else {
+ $this->filters[] = $filter;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the parent object (an {@see OperationInterface} or {@see Parameter}
+ *
+ * @return OperationInterface|Parameter|null
+ */
+ public function getParent()
+ {
+ return $this->parent;
+ }
+
+ /**
+ * Set the parent object of the parameter
+ *
+ * @param OperationInterface|Parameter|null $parent Parent container of the parameter
+ *
+ * @return self
+ */
+ public function setParent($parent)
+ {
+ $this->parent = $parent;
+
+ return $this;
+ }
+
+ /**
+ * Get the properties of the parameter
+ *
+ * @return array
+ */
+ public function getProperties()
+ {
+ if (!$this->propertiesCache) {
+ $this->propertiesCache = array();
+ foreach (array_keys($this->properties) as $name) {
+ $this->propertiesCache[$name] = $this->getProperty($name);
+ }
+ }
+
+ return $this->propertiesCache;
+ }
+
+ /**
+ * Get a specific property from the parameter
+ *
+ * @param string $name Name of the property to retrieve
+ *
+ * @return null|Parameter
+ */
+ public function getProperty($name)
+ {
+ if (!isset($this->properties[$name])) {
+ return null;
+ }
+
+ if (!($this->properties[$name] instanceof self)) {
+ $this->properties[$name]['name'] = $name;
+ $this->properties[$name] = new static($this->properties[$name], $this->serviceDescription);
+ $this->properties[$name]->setParent($this);
+ }
+
+ return $this->properties[$name];
+ }
+
+ /**
+ * Remove a property from the parameter
+ *
+ * @param string $name Name of the property to remove
+ *
+ * @return self
+ */
+ public function removeProperty($name)
+ {
+ unset($this->properties[$name]);
+ $this->propertiesCache = null;
+
+ return $this;
+ }
+
+ /**
+ * Add a property to the parameter
+ *
+ * @param Parameter $property Properties to set
+ *
+ * @return self
+ */
+ public function addProperty(Parameter $property)
+ {
+ $this->properties[$property->getName()] = $property;
+ $property->setParent($this);
+ $this->propertiesCache = null;
+
+ return $this;
+ }
+
+ /**
+ * Get the additionalProperties value of the parameter
+ *
+ * @return bool|Parameter|null
+ */
+ public function getAdditionalProperties()
+ {
+ if (is_array($this->additionalProperties)) {
+ $this->additionalProperties = new static($this->additionalProperties, $this->serviceDescription);
+ $this->additionalProperties->setParent($this);
+ }
+
+ return $this->additionalProperties;
+ }
+
+ /**
+ * Set the additionalProperties value of the parameter
+ *
+ * @param bool|Parameter|null $additional Boolean to allow any, an Parameter to specify a schema, or false to disallow
+ *
+ * @return self
+ */
+ public function setAdditionalProperties($additional)
+ {
+ $this->additionalProperties = $additional;
+
+ return $this;
+ }
+
+ /**
+ * Set the items data of the parameter
+ *
+ * @param Parameter|null $items Items to set
+ *
+ * @return self
+ */
+ public function setItems(Parameter $items = null)
+ {
+ if ($this->items = $items) {
+ $this->items->setParent($this);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the item data of the parameter
+ *
+ * @return Parameter|null
+ */
+ public function getItems()
+ {
+ if (is_array($this->items)) {
+ $this->items = new static($this->items, $this->serviceDescription);
+ $this->items->setParent($this);
+ }
+
+ return $this->items;
+ }
+
+ /**
+ * Get the class that the parameter must implement
+ *
+ * @return null|string
+ */
+ public function getInstanceOf()
+ {
+ return $this->instanceOf;
+ }
+
+ /**
+ * Set the class that the parameter must be an instance of
+ *
+ * @param string|null $instanceOf Class or interface name
+ *
+ * @return self
+ */
+ public function setInstanceOf($instanceOf)
+ {
+ $this->instanceOf = $instanceOf;
+
+ return $this;
+ }
+
+ /**
+ * Get the enum of strings that are valid for the parameter
+ *
+ * @return array|null
+ */
+ public function getEnum()
+ {
+ return $this->enum;
+ }
+
+ /**
+ * Set the enum of strings that are valid for the parameter
+ *
+ * @param array|null $enum Array of strings or null
+ *
+ * @return self
+ */
+ public function setEnum(array $enum = null)
+ {
+ $this->enum = $enum;
+
+ return $this;
+ }
+
+ /**
+ * Get the regex pattern that must match a value when the value is a string
+ *
+ * @return string
+ */
+ public function getPattern()
+ {
+ return $this->pattern;
+ }
+
+ /**
+ * Set the regex pattern that must match a value when the value is a string
+ *
+ * @param string $pattern Regex pattern
+ *
+ * @return self
+ */
+ public function setPattern($pattern)
+ {
+ $this->pattern = $pattern;
+
+ return $this;
+ }
+
+ /**
+ * Get the format attribute of the schema
+ *
+ * @return string
+ */
+ public function getFormat()
+ {
+ return $this->format;
+ }
+
+ /**
+ * Set the format attribute of the schema
+ *
+ * @param string $format Format to set (e.g. date, date-time, timestamp, time, date-time-http)
+ *
+ * @return self
+ */
+ public function setFormat($format)
+ {
+ $this->format = $format;
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaFormatter.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaFormatter.php
new file mode 100644
index 0000000..7f47fc9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaFormatter.php
@@ -0,0 +1,156 @@
+setTimezone(self::getUtcTimeZone())->format($format);
+ }
+
+ throw new InvalidArgumentException('Date/Time values must be either a string, integer, or DateTime object');
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaValidator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaValidator.php
new file mode 100644
index 0000000..b045422
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaValidator.php
@@ -0,0 +1,291 @@
+castIntegerToStringType = $castIntegerToStringType;
+ }
+
+ public function validate(Parameter $param, &$value)
+ {
+ $this->errors = array();
+ $this->recursiveProcess($param, $value);
+
+ if (empty($this->errors)) {
+ return true;
+ } else {
+ sort($this->errors);
+ return false;
+ }
+ }
+
+ /**
+ * Get the errors encountered while validating
+ *
+ * @return array
+ */
+ public function getErrors()
+ {
+ return $this->errors ?: array();
+ }
+
+ /**
+ * Recursively validate a parameter
+ *
+ * @param Parameter $param API parameter being validated
+ * @param mixed $value Value to validate and validate. The value may change during this validate.
+ * @param string $path Current validation path (used for error reporting)
+ * @param int $depth Current depth in the validation validate
+ *
+ * @return bool Returns true if valid, or false if invalid
+ */
+ protected function recursiveProcess(Parameter $param, &$value, $path = '', $depth = 0)
+ {
+ // Update the value by adding default or static values
+ $value = $param->getValue($value);
+
+ $required = $param->getRequired();
+ // if the value is null and the parameter is not required or is static, then skip any further recursion
+ if ((null === $value && !$required) || $param->getStatic()) {
+ return true;
+ }
+
+ $type = $param->getType();
+ // Attempt to limit the number of times is_array is called by tracking if the value is an array
+ $valueIsArray = is_array($value);
+ // If a name is set then update the path so that validation messages are more helpful
+ if ($name = $param->getName()) {
+ $path .= "[{$name}]";
+ }
+
+ if ($type == 'object') {
+
+ // Objects are either associative arrays, ToArrayInterface, or some other object
+ if ($param->getInstanceOf()) {
+ $instance = $param->getInstanceOf();
+ if (!($value instanceof $instance)) {
+ $this->errors[] = "{$path} must be an instance of {$instance}";
+ return false;
+ }
+ }
+
+ // Determine whether or not this "value" has properties and should be traversed
+ $traverse = $temporaryValue = false;
+
+ // Convert the value to an array
+ if (!$valueIsArray && $value instanceof ToArrayInterface) {
+ $value = $value->toArray();
+ }
+
+ if ($valueIsArray) {
+ // Ensure that the array is associative and not numerically indexed
+ if (isset($value[0])) {
+ $this->errors[] = "{$path} must be an array of properties. Got a numerically indexed array.";
+ return false;
+ }
+ $traverse = true;
+ } elseif ($value === null) {
+ // Attempt to let the contents be built up by default values if possible
+ $value = array();
+ $temporaryValue = $valueIsArray = $traverse = true;
+ }
+
+ if ($traverse) {
+
+ if ($properties = $param->getProperties()) {
+ // if properties were found, the validate each property of the value
+ foreach ($properties as $property) {
+ $name = $property->getName();
+ if (isset($value[$name])) {
+ $this->recursiveProcess($property, $value[$name], $path, $depth + 1);
+ } else {
+ $current = null;
+ $this->recursiveProcess($property, $current, $path, $depth + 1);
+ // Only set the value if it was populated with something
+ if (null !== $current) {
+ $value[$name] = $current;
+ }
+ }
+ }
+ }
+
+ $additional = $param->getAdditionalProperties();
+ if ($additional !== true) {
+ // If additional properties were found, then validate each against the additionalProperties attr.
+ $keys = array_keys($value);
+ // Determine the keys that were specified that were not listed in the properties of the schema
+ $diff = array_diff($keys, array_keys($properties));
+ if (!empty($diff)) {
+ // Determine which keys are not in the properties
+ if ($additional instanceOf Parameter) {
+ foreach ($diff as $key) {
+ $this->recursiveProcess($additional, $value[$key], "{$path}[{$key}]", $depth);
+ }
+ } else {
+ // if additionalProperties is set to false and there are additionalProperties in the values, then fail
+ foreach ($diff as $prop) {
+ $this->errors[] = sprintf('%s[%s] is not an allowed property', $path, $prop);
+ }
+ }
+ }
+ }
+
+ // A temporary value will be used to traverse elements that have no corresponding input value.
+ // This allows nested required parameters with default values to bubble up into the input.
+ // Here we check if we used a temp value and nothing bubbled up, then we need to remote the value.
+ if ($temporaryValue && empty($value)) {
+ $value = null;
+ $valueIsArray = false;
+ }
+ }
+
+ } elseif ($type == 'array' && $valueIsArray && $param->getItems()) {
+ foreach ($value as $i => &$item) {
+ // Validate each item in an array against the items attribute of the schema
+ $this->recursiveProcess($param->getItems(), $item, $path . "[{$i}]", $depth + 1);
+ }
+ }
+
+ // If the value is required and the type is not null, then there is an error if the value is not set
+ if ($required && $value === null && $type != 'null') {
+ $message = "{$path} is " . ($param->getType() ? ('a required ' . implode(' or ', (array) $param->getType())) : 'required');
+ if ($param->getDescription()) {
+ $message .= ': ' . $param->getDescription();
+ }
+ $this->errors[] = $message;
+ return false;
+ }
+
+ // Validate that the type is correct. If the type is string but an integer was passed, the class can be
+ // instructed to cast the integer to a string to pass validation. This is the default behavior.
+ if ($type && (!$type = $this->determineType($type, $value))) {
+ if ($this->castIntegerToStringType && $param->getType() == 'string' && is_integer($value)) {
+ $value = (string) $value;
+ } else {
+ $this->errors[] = "{$path} must be of type " . implode(' or ', (array) $param->getType());
+ }
+ }
+
+ // Perform type specific validation for strings, arrays, and integers
+ if ($type == 'string') {
+
+ // Strings can have enums which are a list of predefined values
+ if (($enum = $param->getEnum()) && !in_array($value, $enum)) {
+ $this->errors[] = "{$path} must be one of " . implode(' or ', array_map(function ($s) {
+ return '"' . addslashes($s) . '"';
+ }, $enum));
+ }
+ // Strings can have a regex pattern that the value must match
+ if (($pattern = $param->getPattern()) && !preg_match($pattern, $value)) {
+ $this->errors[] = "{$path} must match the following regular expression: {$pattern}";
+ }
+
+ $strLen = null;
+ if ($min = $param->getMinLength()) {
+ $strLen = strlen($value);
+ if ($strLen < $min) {
+ $this->errors[] = "{$path} length must be greater than or equal to {$min}";
+ }
+ }
+ if ($max = $param->getMaxLength()) {
+ if (($strLen ?: strlen($value)) > $max) {
+ $this->errors[] = "{$path} length must be less than or equal to {$max}";
+ }
+ }
+
+ } elseif ($type == 'array') {
+
+ $size = null;
+ if ($min = $param->getMinItems()) {
+ $size = count($value);
+ if ($size < $min) {
+ $this->errors[] = "{$path} must contain {$min} or more elements";
+ }
+ }
+ if ($max = $param->getMaxItems()) {
+ if (($size ?: count($value)) > $max) {
+ $this->errors[] = "{$path} must contain {$max} or fewer elements";
+ }
+ }
+
+ } elseif ($type == 'integer' || $type == 'number' || $type == 'numeric') {
+ if (($min = $param->getMinimum()) && $value < $min) {
+ $this->errors[] = "{$path} must be greater than or equal to {$min}";
+ }
+ if (($max = $param->getMaximum()) && $value > $max) {
+ $this->errors[] = "{$path} must be less than or equal to {$max}";
+ }
+ }
+
+ return empty($this->errors);
+ }
+
+ /**
+ * From the allowable types, determine the type that the variable matches
+ *
+ * @param string $type Parameter type
+ * @param mixed $value Value to determine the type
+ *
+ * @return string|bool Returns the matching type on
+ */
+ protected function determineType($type, $value)
+ {
+ foreach ((array) $type as $t) {
+ if ($t == 'string' && (is_string($value) || (is_object($value) && method_exists($value, '__toString')))) {
+ return 'string';
+ } elseif ($t == 'object' && (is_array($value) || is_object($value))) {
+ return 'object';
+ } elseif ($t == 'array' && is_array($value)) {
+ return 'array';
+ } elseif ($t == 'integer' && is_integer($value)) {
+ return 'integer';
+ } elseif ($t == 'boolean' && is_bool($value)) {
+ return 'boolean';
+ } elseif ($t == 'number' && is_numeric($value)) {
+ return 'number';
+ } elseif ($t == 'numeric' && is_numeric($value)) {
+ return 'numeric';
+ } elseif ($t == 'null' && !$value) {
+ return 'null';
+ } elseif ($t == 'any') {
+ return 'any';
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/ServiceDescription.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/ServiceDescription.php
new file mode 100644
index 0000000..286e65e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/ServiceDescription.php
@@ -0,0 +1,271 @@
+load($config, $options);
+ }
+
+ /**
+ * @param array $config Array of configuration data
+ */
+ public function __construct(array $config = array())
+ {
+ $this->fromArray($config);
+ }
+
+ public function serialize()
+ {
+ return json_encode($this->toArray());
+ }
+
+ public function unserialize($json)
+ {
+ $this->operations = array();
+ $this->fromArray(json_decode($json, true));
+ }
+
+ public function toArray()
+ {
+ $result = array(
+ 'name' => $this->name,
+ 'apiVersion' => $this->apiVersion,
+ 'baseUrl' => $this->baseUrl,
+ 'description' => $this->description
+ ) + $this->extraData;
+ $result['operations'] = array();
+ foreach ($this->getOperations() as $name => $operation) {
+ $result['operations'][$operation->getName() ?: $name] = $operation->toArray();
+ }
+ if (!empty($this->models)) {
+ $result['models'] = array();
+ foreach ($this->models as $id => $model) {
+ $result['models'][$id] = $model instanceof Parameter ? $model->toArray(): $model;
+ }
+ }
+
+ return array_filter($result);
+ }
+
+ public function getBaseUrl()
+ {
+ return $this->baseUrl;
+ }
+
+ /**
+ * Set the baseUrl of the description
+ *
+ * @param string $baseUrl Base URL of each operation
+ *
+ * @return self
+ */
+ public function setBaseUrl($baseUrl)
+ {
+ $this->baseUrl = $baseUrl;
+
+ return $this;
+ }
+
+ public function getOperations()
+ {
+ foreach (array_keys($this->operations) as $name) {
+ $this->getOperation($name);
+ }
+
+ return $this->operations;
+ }
+
+ public function hasOperation($name)
+ {
+ return isset($this->operations[$name]);
+ }
+
+ public function getOperation($name)
+ {
+ // Lazily retrieve and build operations
+ if (!isset($this->operations[$name])) {
+ return null;
+ }
+
+ if (!($this->operations[$name] instanceof Operation)) {
+ $this->operations[$name] = new Operation($this->operations[$name], $this);
+ }
+
+ return $this->operations[$name];
+ }
+
+ /**
+ * Add a operation to the service description
+ *
+ * @param OperationInterface $operation Operation to add
+ *
+ * @return self
+ */
+ public function addOperation(OperationInterface $operation)
+ {
+ $this->operations[$operation->getName()] = $operation->setServiceDescription($this);
+
+ return $this;
+ }
+
+ public function getModel($id)
+ {
+ if (!isset($this->models[$id])) {
+ return null;
+ }
+
+ if (!($this->models[$id] instanceof Parameter)) {
+ $this->models[$id] = new Parameter($this->models[$id] + array('name' => $id), $this);
+ }
+
+ return $this->models[$id];
+ }
+
+ public function getModels()
+ {
+ // Ensure all models are converted into parameter objects
+ foreach (array_keys($this->models) as $id) {
+ $this->getModel($id);
+ }
+
+ return $this->models;
+ }
+
+ public function hasModel($id)
+ {
+ return isset($this->models[$id]);
+ }
+
+ /**
+ * Add a model to the service description
+ *
+ * @param Parameter $model Model to add
+ *
+ * @return self
+ */
+ public function addModel(Parameter $model)
+ {
+ $this->models[$model->getName()] = $model;
+
+ return $this;
+ }
+
+ public function getApiVersion()
+ {
+ return $this->apiVersion;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ public function getData($key)
+ {
+ return isset($this->extraData[$key]) ? $this->extraData[$key] : null;
+ }
+
+ public function setData($key, $value)
+ {
+ $this->extraData[$key] = $value;
+
+ return $this;
+ }
+
+ /**
+ * Initialize the state from an array
+ *
+ * @param array $config Configuration data
+ * @throws InvalidArgumentException
+ */
+ protected function fromArray(array $config)
+ {
+ // Keep a list of default keys used in service descriptions that is later used to determine extra data keys
+ static $defaultKeys = array('name', 'models', 'apiVersion', 'baseUrl', 'description');
+ // Pull in the default configuration values
+ foreach ($defaultKeys as $key) {
+ if (isset($config[$key])) {
+ $this->{$key} = $config[$key];
+ }
+ }
+
+ // Account for the Swagger name for Guzzle's baseUrl
+ if (isset($config['basePath'])) {
+ $this->baseUrl = $config['basePath'];
+ }
+
+ // Ensure that the models and operations properties are always arrays
+ $this->models = (array) $this->models;
+ $this->operations = (array) $this->operations;
+
+ // We want to add operations differently than adding the other properties
+ $defaultKeys[] = 'operations';
+
+ // Create operations for each operation
+ if (isset($config['operations'])) {
+ foreach ($config['operations'] as $name => $operation) {
+ if (!($operation instanceof Operation) && !is_array($operation)) {
+ throw new InvalidArgumentException('Invalid operation in service description: '
+ . gettype($operation));
+ }
+ $this->operations[$name] = $operation;
+ }
+ }
+
+ // Get all of the additional properties of the service description and store them in a data array
+ foreach (array_diff(array_keys($config), $defaultKeys) as $key) {
+ $this->extraData[$key] = $config[$key];
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/ServiceDescriptionInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/ServiceDescriptionInterface.php
new file mode 100644
index 0000000..5983e58
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/ServiceDescriptionInterface.php
@@ -0,0 +1,106 @@
+ $op) {
+ $name = $op['name'] = isset($op['name']) ? $op['name'] : $name;
+ // Extend other operations
+ if (!empty($op['extends'])) {
+ $this->resolveExtension($name, $op, $operations);
+ }
+ $op['parameters'] = isset($op['parameters']) ? $op['parameters'] : array();
+ $operations[$name] = $op;
+ }
+ }
+
+ return new ServiceDescription(array(
+ 'apiVersion' => isset($config['apiVersion']) ? $config['apiVersion'] : null,
+ 'baseUrl' => isset($config['baseUrl']) ? $config['baseUrl'] : null,
+ 'description' => isset($config['description']) ? $config['description'] : null,
+ 'operations' => $operations,
+ 'models' => isset($config['models']) ? $config['models'] : null
+ ) + $config);
+ }
+
+ /**
+ * @param string $name Name of the operation
+ * @param array $op Operation value array
+ * @param array $operations Currently loaded operations
+ * @throws DescriptionBuilderException when extending a non-existent operation
+ */
+ protected function resolveExtension($name, array &$op, array &$operations)
+ {
+ $resolved = array();
+ $original = empty($op['parameters']) ? false: $op['parameters'];
+ $hasClass = !empty($op['class']);
+ foreach ((array) $op['extends'] as $extendedCommand) {
+ if (empty($operations[$extendedCommand])) {
+ throw new DescriptionBuilderException("{$name} extends missing operation {$extendedCommand}");
+ }
+ $toArray = $operations[$extendedCommand];
+ $resolved = empty($resolved)
+ ? $toArray['parameters']
+ : array_merge($resolved, $toArray['parameters']);
+
+ $op = $op + $toArray;
+ if (!$hasClass && isset($toArray['class'])) {
+ $op['class'] = $toArray['class'];
+ }
+ }
+ $op['parameters'] = $original ? array_merge($resolved, $original) : $resolved;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/ValidatorInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/ValidatorInterface.php
new file mode 100644
index 0000000..94ca77d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Description/ValidatorInterface.php
@@ -0,0 +1,28 @@
+getMessage(), $e->getCode(), $e->getPrevious());
+ $ce->setSuccessfulRequests($e->getSuccessfulRequests());
+
+ $alreadyAddedExceptions = array();
+ foreach ($e->getFailedRequests() as $request) {
+ if ($re = $e->getExceptionForFailedRequest($request)) {
+ $alreadyAddedExceptions[] = $re;
+ $ce->addFailedRequestWithException($request, $re);
+ } else {
+ $ce->addFailedRequest($request);
+ }
+ }
+
+ // Add any exceptions that did not map to a request
+ if (count($alreadyAddedExceptions) < count($e)) {
+ foreach ($e as $ex) {
+ if (!in_array($ex, $alreadyAddedExceptions)) {
+ $ce->add($ex);
+ }
+ }
+ }
+
+ return $ce;
+ }
+
+ /**
+ * Get all of the commands in the transfer
+ *
+ * @return array
+ */
+ public function getAllCommands()
+ {
+ return array_merge($this->successfulCommands, $this->failedCommands);
+ }
+
+ /**
+ * Add to the array of successful commands
+ *
+ * @param CommandInterface $command Successful command
+ *
+ * @return self
+ */
+ public function addSuccessfulCommand(CommandInterface $command)
+ {
+ $this->successfulCommands[] = $command;
+
+ return $this;
+ }
+
+ /**
+ * Add to the array of failed commands
+ *
+ * @param CommandInterface $command Failed command
+ *
+ * @return self
+ */
+ public function addFailedCommand(CommandInterface $command)
+ {
+ $this->failedCommands[] = $command;
+
+ return $this;
+ }
+
+ /**
+ * Get an array of successful commands
+ *
+ * @return array
+ */
+ public function getSuccessfulCommands()
+ {
+ return $this->successfulCommands;
+ }
+
+ /**
+ * Get an array of failed commands
+ *
+ * @return array
+ */
+ public function getFailedCommands()
+ {
+ return $this->failedCommands;
+ }
+
+ /**
+ * Get the Exception that caused the given $command to fail
+ *
+ * @param CommandInterface $command Failed command
+ *
+ * @return \Exception|null
+ */
+ public function getExceptionForFailedCommand(CommandInterface $command)
+ {
+ return $this->getExceptionForFailedRequest($command->getRequest());
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Exception/DescriptionBuilderException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Exception/DescriptionBuilderException.php
new file mode 100644
index 0000000..1407e56
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Exception/DescriptionBuilderException.php
@@ -0,0 +1,7 @@
+invalidCommands = $commands;
+ parent::__construct(
+ 'Encountered commands in a batch transfer that use inconsistent clients. The batching ' .
+ 'strategy you use with a command transfer must divide command batches by client.'
+ );
+ }
+
+ /**
+ * Get the invalid commands
+ *
+ * @return array
+ */
+ public function getCommands()
+ {
+ return $this->invalidCommands;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Exception/ResponseClassException.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Exception/ResponseClassException.php
new file mode 100644
index 0000000..d59ff21
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Exception/ResponseClassException.php
@@ -0,0 +1,9 @@
+errors = $errors;
+ }
+
+ /**
+ * Get any validation errors
+ *
+ * @return array
+ */
+ public function getErrors()
+ {
+ return $this->errors;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/AbstractResourceIteratorFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/AbstractResourceIteratorFactory.php
new file mode 100644
index 0000000..21140e7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/AbstractResourceIteratorFactory.php
@@ -0,0 +1,37 @@
+canBuild($command)) {
+ throw new InvalidArgumentException('Iterator was not found for ' . $command->getName());
+ }
+
+ $className = $this->getClassName($command);
+
+ return new $className($command, $options);
+ }
+
+ public function canBuild(CommandInterface $command)
+ {
+ return (bool) $this->getClassName($command);
+ }
+
+ /**
+ * Get the name of the class to instantiate for the command
+ *
+ * @param CommandInterface $command Command that is associated with the iterator
+ *
+ * @return string
+ */
+ abstract protected function getClassName(CommandInterface $command);
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/CompositeResourceIteratorFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/CompositeResourceIteratorFactory.php
new file mode 100644
index 0000000..2efc133
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/CompositeResourceIteratorFactory.php
@@ -0,0 +1,67 @@
+factories = $factories;
+ }
+
+ public function build(CommandInterface $command, array $options = array())
+ {
+ if (!($factory = $this->getFactory($command))) {
+ throw new InvalidArgumentException('Iterator was not found for ' . $command->getName());
+ }
+
+ return $factory->build($command, $options);
+ }
+
+ public function canBuild(CommandInterface $command)
+ {
+ return $this->getFactory($command) !== false;
+ }
+
+ /**
+ * Add a factory to the composite factory
+ *
+ * @param ResourceIteratorFactoryInterface $factory Factory to add
+ *
+ * @return self
+ */
+ public function addFactory(ResourceIteratorFactoryInterface $factory)
+ {
+ $this->factories[] = $factory;
+
+ return $this;
+ }
+
+ /**
+ * Get the factory that matches the command object
+ *
+ * @param CommandInterface $command Command retrieving the iterator for
+ *
+ * @return ResourceIteratorFactoryInterface|bool
+ */
+ protected function getFactory(CommandInterface $command)
+ {
+ foreach ($this->factories as $factory) {
+ if ($factory->canBuild($command)) {
+ return $factory;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/MapResourceIteratorFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/MapResourceIteratorFactory.php
new file mode 100644
index 0000000..c71ca9d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/MapResourceIteratorFactory.php
@@ -0,0 +1,34 @@
+map = $map;
+ }
+
+ public function getClassName(CommandInterface $command)
+ {
+ $className = $command->getName();
+
+ if (isset($this->map[$className])) {
+ return $this->map[$className];
+ } elseif (isset($this->map['*'])) {
+ // If a wildcard was added, then always use that
+ return $this->map['*'];
+ }
+
+ return null;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/Model.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/Model.php
new file mode 100644
index 0000000..2322434
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/Model.php
@@ -0,0 +1,64 @@
+data = $data;
+ $this->structure = $structure;
+ }
+
+ /**
+ * Get the structure of the model
+ *
+ * @return Parameter
+ */
+ public function getStructure()
+ {
+ return $this->structure ?: new Parameter();
+ }
+
+ /**
+ * Provides debug information about the model object
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ $output = 'Debug output of ';
+ if ($this->structure) {
+ $output .= $this->structure->getName() . ' ';
+ }
+ $output .= 'model';
+ $output = str_repeat('=', strlen($output)) . "\n" . $output . "\n" . str_repeat('=', strlen($output)) . "\n\n";
+ $output .= "Model data\n-----------\n\n";
+ $output .= "This data can be retrieved from the model object using the get() method of the model "
+ . "(e.g. \$model->get(\$key)) or accessing the model like an associative array (e.g. \$model['key']).\n\n";
+ $lines = array_slice(explode("\n", trim(print_r($this->toArray(), true))), 2, -1);
+ $output .= implode("\n", $lines);
+
+ if ($this->structure) {
+ $output .= "\n\nModel structure\n---------------\n\n";
+ $output .= "The following JSON document defines how the model was parsed from an HTTP response into the "
+ . "associative array structure you see above.\n\n";
+ $output .= ' ' . json_encode($this->structure->toArray()) . "\n\n";
+ }
+
+ return $output . "\n";
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIterator.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIterator.php
new file mode 100644
index 0000000..e141524
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIterator.php
@@ -0,0 +1,254 @@
+originalCommand = $command;
+
+ // Parse options from the array of options
+ $this->data = $data;
+ $this->limit = array_key_exists('limit', $data) ? $data['limit'] : 0;
+ $this->pageSize = array_key_exists('page_size', $data) ? $data['page_size'] : false;
+ }
+
+ /**
+ * Get all of the resources as an array (Warning: this could issue a large number of requests)
+ *
+ * @return array
+ */
+ public function toArray()
+ {
+ return iterator_to_array($this, false);
+ }
+
+ public function setLimit($limit)
+ {
+ $this->limit = $limit;
+ $this->resetState();
+
+ return $this;
+ }
+
+ public function setPageSize($pageSize)
+ {
+ $this->pageSize = $pageSize;
+ $this->resetState();
+
+ return $this;
+ }
+
+ /**
+ * Get an option from the iterator
+ *
+ * @param string $key Key of the option to retrieve
+ *
+ * @return mixed|null Returns NULL if not set or the value if set
+ */
+ public function get($key)
+ {
+ return array_key_exists($key, $this->data) ? $this->data[$key] : null;
+ }
+
+ /**
+ * Set an option on the iterator
+ *
+ * @param string $key Key of the option to set
+ * @param mixed $value Value to set for the option
+ *
+ * @return ResourceIterator
+ */
+ public function set($key, $value)
+ {
+ $this->data[$key] = $value;
+
+ return $this;
+ }
+
+ public function current()
+ {
+ return $this->resources ? current($this->resources) : false;
+ }
+
+ public function key()
+ {
+ return max(0, $this->iteratedCount - 1);
+ }
+
+ public function count()
+ {
+ return $this->retrievedCount;
+ }
+
+ /**
+ * Get the total number of requests sent
+ *
+ * @return int
+ */
+ public function getRequestCount()
+ {
+ return $this->requestCount;
+ }
+
+ /**
+ * Rewind the Iterator to the first element and send the original command
+ */
+ public function rewind()
+ {
+ // Use the original command
+ $this->command = clone $this->originalCommand;
+ $this->resetState();
+ $this->next();
+ }
+
+ public function valid()
+ {
+ return !$this->invalid && (!$this->resources || $this->current() || $this->nextToken)
+ && (!$this->limit || $this->iteratedCount < $this->limit + 1);
+ }
+
+ public function next()
+ {
+ $this->iteratedCount++;
+
+ // Check if a new set of resources needs to be retrieved
+ $sendRequest = false;
+ if (!$this->resources) {
+ $sendRequest = true;
+ } else {
+ // iterate over the internal array
+ $current = next($this->resources);
+ $sendRequest = $current === false && $this->nextToken && (!$this->limit || $this->iteratedCount < $this->limit + 1);
+ }
+
+ if ($sendRequest) {
+
+ $this->dispatch('resource_iterator.before_send', array(
+ 'iterator' => $this,
+ 'resources' => $this->resources
+ ));
+
+ // Get a new command object from the original command
+ $this->command = clone $this->originalCommand;
+ // Send a request and retrieve the newly loaded resources
+ $this->resources = $this->sendRequest();
+ $this->requestCount++;
+
+ // If no resources were found, then the last request was not needed
+ // and iteration must stop
+ if (empty($this->resources)) {
+ $this->invalid = true;
+ } else {
+ // Add to the number of retrieved resources
+ $this->retrievedCount += count($this->resources);
+ // Ensure that we rewind to the beginning of the array
+ reset($this->resources);
+ }
+
+ $this->dispatch('resource_iterator.after_send', array(
+ 'iterator' => $this,
+ 'resources' => $this->resources
+ ));
+ }
+ }
+
+ /**
+ * Retrieve the NextToken that can be used in other iterators.
+ *
+ * @return string Returns a NextToken
+ */
+ public function getNextToken()
+ {
+ return $this->nextToken;
+ }
+
+ /**
+ * Returns the value that should be specified for the page size for a request that will maintain any hard limits,
+ * but still honor the specified pageSize if the number of items retrieved + pageSize < hard limit
+ *
+ * @return int Returns the page size of the next request.
+ */
+ protected function calculatePageSize()
+ {
+ if ($this->limit && $this->iteratedCount + $this->pageSize > $this->limit) {
+ return 1 + ($this->limit - $this->iteratedCount);
+ }
+
+ return (int) $this->pageSize;
+ }
+
+ /**
+ * Reset the internal state of the iterator without triggering a rewind()
+ */
+ protected function resetState()
+ {
+ $this->iteratedCount = 0;
+ $this->retrievedCount = 0;
+ $this->nextToken = false;
+ $this->resources = null;
+ $this->invalid = false;
+ }
+
+ /**
+ * Send a request to retrieve the next page of results. Hook for subclasses to implement.
+ *
+ * @return array Returns the newly loaded resources
+ */
+ abstract protected function sendRequest();
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php
new file mode 100644
index 0000000..6aa3615
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php
@@ -0,0 +1,111 @@
+iterator = $iterator;
+ $this->callback = $callback;
+ Version::warn(__CLASS__ . ' is deprecated');
+ }
+
+ /**
+ * Apply the callback to the contents of the resource iterator
+ *
+ * @param int $perBatch The number of records to group per batch transfer
+ *
+ * @return int Returns the number of iterated resources
+ */
+ public function apply($perBatch = 50)
+ {
+ $this->iterated = $this->batches = $batches = 0;
+ $that = $this;
+ $it = $this->iterator;
+ $callback = $this->callback;
+
+ $batch = BatchBuilder::factory()
+ ->createBatchesWith(new BatchSizeDivisor($perBatch))
+ ->transferWith(new BatchClosureTransfer(function (array $batch) use ($that, $callback, &$batches, $it) {
+ $batches++;
+ $that->dispatch('iterator_batch.before_batch', array('iterator' => $it, 'batch' => $batch));
+ call_user_func_array($callback, array($it, $batch));
+ $that->dispatch('iterator_batch.after_batch', array('iterator' => $it, 'batch' => $batch));
+ }))
+ ->autoFlushAt($perBatch)
+ ->build();
+
+ $this->dispatch('iterator_batch.created_batch', array('batch' => $batch));
+
+ foreach ($this->iterator as $resource) {
+ $this->iterated++;
+ $batch->add($resource);
+ }
+
+ $batch->flush();
+ $this->batches = $batches;
+
+ return $this->iterated;
+ }
+
+ /**
+ * Get the total number of batches sent
+ *
+ * @return int
+ */
+ public function getBatchCount()
+ {
+ return $this->batches;
+ }
+
+ /**
+ * Get the total number of iterated resources
+ *
+ * @return int
+ */
+ public function getIteratedCount()
+ {
+ return $this->iterated;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorClassFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorClassFactory.php
new file mode 100644
index 0000000..2fd9980
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorClassFactory.php
@@ -0,0 +1,60 @@
+ AbcFoo).
+ */
+class ResourceIteratorClassFactory extends AbstractResourceIteratorFactory
+{
+ /** @var array List of namespaces used to look for classes */
+ protected $namespaces;
+
+ /** @var InflectorInterface Inflector used to determine class names */
+ protected $inflector;
+
+ /**
+ * @param string|array $namespaces List of namespaces for iterator objects
+ * @param InflectorInterface $inflector Inflector used to resolve class names
+ */
+ public function __construct($namespaces = array(), InflectorInterface $inflector = null)
+ {
+ $this->namespaces = (array) $namespaces;
+ $this->inflector = $inflector ?: Inflector::getDefault();
+ }
+
+ /**
+ * Registers a namespace to check for Iterators
+ *
+ * @param string $namespace Namespace which contains Iterator classes
+ *
+ * @return self
+ */
+ public function registerNamespace($namespace)
+ {
+ array_unshift($this->namespaces, $namespace);
+
+ return $this;
+ }
+
+ protected function getClassName(CommandInterface $command)
+ {
+ $iteratorName = $this->inflector->camel($command->getName()) . 'Iterator';
+
+ // Determine the name of the class to load
+ foreach ($this->namespaces as $namespace) {
+ $potentialClassName = $namespace . '\\' . $iteratorName;
+ if (class_exists($potentialClassName)) {
+ return $potentialClassName;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorFactoryInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorFactoryInterface.php
new file mode 100644
index 0000000..8b4e8db
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorFactoryInterface.php
@@ -0,0 +1,30 @@
+=5.3.2",
+ "guzzle/cache": "self.version",
+ "guzzle/http": "self.version",
+ "guzzle/inflection": "self.version"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Service": "" }
+ },
+ "target-dir": "Guzzle/Service",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Stream/PhpStreamRequestFactory.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Stream/PhpStreamRequestFactory.php
new file mode 100644
index 0000000..d115fd8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Stream/PhpStreamRequestFactory.php
@@ -0,0 +1,284 @@
+contextOptions = stream_context_get_options($context);
+ $this->context = $context;
+ } elseif (is_array($context) || !$context) {
+ $this->contextOptions = $context;
+ $this->createContext($params);
+ } elseif ($context) {
+ throw new InvalidArgumentException('$context must be an array or resource');
+ }
+
+ // Dispatch the before send event
+ $request->dispatch('request.before_send', array(
+ 'request' => $request,
+ 'context' => $this->context,
+ 'context_options' => $this->contextOptions
+ ));
+
+ $this->setUrl($request);
+ $this->addDefaultContextOptions($request);
+ $this->addSslOptions($request);
+ $this->addBodyOptions($request);
+ $this->addProxyOptions($request);
+
+ // Create the file handle but silence errors
+ return $this->createStream($params)
+ ->setCustomData('request', $request)
+ ->setCustomData('response_headers', $this->getLastResponseHeaders());
+ }
+
+ /**
+ * Set an option on the context and the internal options array
+ *
+ * @param string $wrapper Stream wrapper name of http
+ * @param string $name Context name
+ * @param mixed $value Context value
+ * @param bool $overwrite Set to true to overwrite an existing value
+ */
+ protected function setContextValue($wrapper, $name, $value, $overwrite = false)
+ {
+ if (!isset($this->contextOptions[$wrapper])) {
+ $this->contextOptions[$wrapper] = array($name => $value);
+ } elseif (!$overwrite && isset($this->contextOptions[$wrapper][$name])) {
+ return;
+ }
+ $this->contextOptions[$wrapper][$name] = $value;
+ stream_context_set_option($this->context, $wrapper, $name, $value);
+ }
+
+ /**
+ * Create a stream context
+ *
+ * @param array $params Parameter array
+ */
+ protected function createContext(array $params)
+ {
+ $options = $this->contextOptions;
+ $this->context = $this->createResource(function () use ($params, $options) {
+ return stream_context_create($options, $params);
+ });
+ }
+
+ /**
+ * Get the last response headers received by the HTTP request
+ *
+ * @return array
+ */
+ public function getLastResponseHeaders()
+ {
+ return $this->lastResponseHeaders;
+ }
+
+ /**
+ * Adds the default context options to the stream context options
+ *
+ * @param RequestInterface $request Request
+ */
+ protected function addDefaultContextOptions(RequestInterface $request)
+ {
+ $this->setContextValue('http', 'method', $request->getMethod());
+ $headers = $request->getHeaderLines();
+
+ // "Connection: close" is required to get streams to work in HTTP 1.1
+ if (!$request->hasHeader('Connection')) {
+ $headers[] = 'Connection: close';
+ }
+
+ $this->setContextValue('http', 'header', $headers);
+ $this->setContextValue('http', 'protocol_version', $request->getProtocolVersion());
+ $this->setContextValue('http', 'ignore_errors', true);
+ }
+
+ /**
+ * Set the URL to use with the factory
+ *
+ * @param RequestInterface $request Request that owns the URL
+ */
+ protected function setUrl(RequestInterface $request)
+ {
+ $this->url = $request->getUrl(true);
+
+ // Check for basic Auth username
+ if ($request->getUsername()) {
+ $this->url->setUsername($request->getUsername());
+ }
+
+ // Check for basic Auth password
+ if ($request->getPassword()) {
+ $this->url->setPassword($request->getPassword());
+ }
+ }
+
+ /**
+ * Add SSL options to the stream context
+ *
+ * @param RequestInterface $request Request
+ */
+ protected function addSslOptions(RequestInterface $request)
+ {
+ if ($request->getCurlOptions()->get(CURLOPT_SSL_VERIFYPEER)) {
+ $this->setContextValue('ssl', 'verify_peer', true, true);
+ if ($cafile = $request->getCurlOptions()->get(CURLOPT_CAINFO)) {
+ $this->setContextValue('ssl', 'cafile', $cafile, true);
+ }
+ } else {
+ $this->setContextValue('ssl', 'verify_peer', false, true);
+ }
+ }
+
+ /**
+ * Add body (content) specific options to the context options
+ *
+ * @param RequestInterface $request
+ */
+ protected function addBodyOptions(RequestInterface $request)
+ {
+ // Add the content for the request if needed
+ if (!($request instanceof EntityEnclosingRequestInterface)) {
+ return;
+ }
+
+ if (count($request->getPostFields())) {
+ $this->setContextValue('http', 'content', (string) $request->getPostFields(), true);
+ } elseif ($request->getBody()) {
+ $this->setContextValue('http', 'content', (string) $request->getBody(), true);
+ }
+
+ // Always ensure a content-length header is sent
+ if (isset($this->contextOptions['http']['content'])) {
+ $headers = isset($this->contextOptions['http']['header']) ? $this->contextOptions['http']['header'] : array();
+ $headers[] = 'Content-Length: ' . strlen($this->contextOptions['http']['content']);
+ $this->setContextValue('http', 'header', $headers, true);
+ }
+ }
+
+ /**
+ * Add proxy parameters to the context if needed
+ *
+ * @param RequestInterface $request Request
+ */
+ protected function addProxyOptions(RequestInterface $request)
+ {
+ if ($proxy = $request->getCurlOptions()->get(CURLOPT_PROXY)) {
+ $this->setContextValue('http', 'proxy', $proxy);
+ }
+ }
+
+ /**
+ * Create the stream for the request with the context options
+ *
+ * @param array $params Parameters of the stream
+ *
+ * @return StreamInterface
+ */
+ protected function createStream(array $params)
+ {
+ $http_response_header = null;
+ $url = $this->url;
+ $context = $this->context;
+ $fp = $this->createResource(function () use ($context, $url, &$http_response_header) {
+ return fopen((string) $url, 'r', false, $context);
+ });
+
+ // Determine the class to instantiate
+ $className = isset($params['stream_class']) ? $params['stream_class'] : __NAMESPACE__ . '\\Stream';
+
+ /** @var $stream StreamInterface */
+ $stream = new $className($fp);
+
+ // Track the response headers of the request
+ if (isset($http_response_header)) {
+ $this->lastResponseHeaders = $http_response_header;
+ $this->processResponseHeaders($stream);
+ }
+
+ return $stream;
+ }
+
+ /**
+ * Process response headers
+ *
+ * @param StreamInterface $stream
+ */
+ protected function processResponseHeaders(StreamInterface $stream)
+ {
+ // Set the size on the stream if it was returned in the response
+ foreach ($this->lastResponseHeaders as $header) {
+ if ((stripos($header, 'Content-Length:')) === 0) {
+ $stream->setSize(trim(substr($header, 15)));
+ }
+ }
+ }
+
+ /**
+ * Create a resource and check to ensure it was created successfully
+ *
+ * @param callable $callback Closure to invoke that must return a valid resource
+ *
+ * @return resource
+ * @throws RuntimeException on error
+ */
+ protected function createResource($callback)
+ {
+ $errors = null;
+ set_error_handler(function ($_, $msg, $file, $line) use (&$errors) {
+ $errors[] = array(
+ 'message' => $msg,
+ 'file' => $file,
+ 'line' => $line
+ );
+ return true;
+ });
+ $resource = call_user_func($callback);
+ restore_error_handler();
+
+ if (!$resource) {
+ $message = 'Error creating resource. ';
+ foreach ($errors as $err) {
+ foreach ($err as $key => $value) {
+ $message .= "[$key] $value" . PHP_EOL;
+ }
+ }
+ throw new RuntimeException(trim($message));
+ }
+
+ return $resource;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Stream/Stream.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Stream/Stream.php
new file mode 100644
index 0000000..12bed26
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Stream/Stream.php
@@ -0,0 +1,289 @@
+ array(
+ 'r' => true, 'w+' => true, 'r+' => true, 'x+' => true, 'c+' => true,
+ 'rb' => true, 'w+b' => true, 'r+b' => true, 'x+b' => true, 'c+b' => true,
+ 'rt' => true, 'w+t' => true, 'r+t' => true, 'x+t' => true, 'c+t' => true, 'a+' => true
+ ),
+ 'write' => array(
+ 'w' => true, 'w+' => true, 'rw' => true, 'r+' => true, 'x+' => true, 'c+' => true,
+ 'wb' => true, 'w+b' => true, 'r+b' => true, 'x+b' => true, 'c+b' => true,
+ 'w+t' => true, 'r+t' => true, 'x+t' => true, 'c+t' => true, 'a' => true, 'a+' => true
+ )
+ );
+
+ /**
+ * @param resource $stream Stream resource to wrap
+ * @param int $size Size of the stream in bytes. Only pass if the size cannot be obtained from the stream.
+ *
+ * @throws InvalidArgumentException if the stream is not a stream resource
+ */
+ public function __construct($stream, $size = null)
+ {
+ $this->setStream($stream, $size);
+ }
+
+ /**
+ * Closes the stream when the helper is destructed
+ */
+ public function __destruct()
+ {
+ $this->close();
+ }
+
+ public function __toString()
+ {
+ if (!$this->isReadable() || (!$this->isSeekable() && $this->isConsumed())) {
+ return '';
+ }
+
+ $originalPos = $this->ftell();
+ $body = stream_get_contents($this->stream, -1, 0);
+ $this->seek($originalPos);
+
+ return $body;
+ }
+
+ public function close()
+ {
+ if (is_resource($this->stream)) {
+ fclose($this->stream);
+ }
+ $this->cache[self::IS_READABLE] = false;
+ $this->cache[self::IS_WRITABLE] = false;
+ }
+
+ /**
+ * Calculate a hash of a Stream
+ *
+ * @param StreamInterface $stream Stream to calculate the hash for
+ * @param string $algo Hash algorithm (e.g. md5, crc32, etc)
+ * @param bool $rawOutput Whether or not to use raw output
+ *
+ * @return bool|string Returns false on failure or a hash string on success
+ */
+ public static function getHash(StreamInterface $stream, $algo, $rawOutput = false)
+ {
+ $pos = $stream->ftell();
+ if (!$stream->seek(0)) {
+ return false;
+ }
+
+ $ctx = hash_init($algo);
+ while (!$stream->feof()) {
+ hash_update($ctx, $stream->read(8192));
+ }
+
+ $out = hash_final($ctx, (bool) $rawOutput);
+ $stream->seek($pos);
+
+ return $out;
+ }
+
+ public function getMetaData($key = null)
+ {
+ $meta = stream_get_meta_data($this->stream);
+
+ return !$key ? $meta : (array_key_exists($key, $meta) ? $meta[$key] : null);
+ }
+
+ public function getStream()
+ {
+ return $this->stream;
+ }
+
+ public function setStream($stream, $size = null)
+ {
+ if (!is_resource($stream)) {
+ throw new InvalidArgumentException('Stream must be a resource');
+ }
+
+ $this->size = $size;
+ $this->stream = $stream;
+ $this->rebuildCache();
+
+ return $this;
+ }
+
+ public function detachStream()
+ {
+ $this->stream = null;
+
+ return $this;
+ }
+
+ public function getWrapper()
+ {
+ return $this->cache[self::WRAPPER_TYPE];
+ }
+
+ public function getWrapperData()
+ {
+ return $this->getMetaData('wrapper_data') ?: array();
+ }
+
+ public function getStreamType()
+ {
+ return $this->cache[self::STREAM_TYPE];
+ }
+
+ public function getUri()
+ {
+ return $this->cache['uri'];
+ }
+
+ public function getSize()
+ {
+ if ($this->size !== null) {
+ return $this->size;
+ }
+
+ // If the stream is a file based stream and local, then use fstat
+ clearstatcache(true, $this->cache['uri']);
+ $stats = fstat($this->stream);
+ if (isset($stats['size'])) {
+ $this->size = $stats['size'];
+ return $this->size;
+ } elseif ($this->cache[self::IS_READABLE] && $this->cache[self::SEEKABLE]) {
+ // Only get the size based on the content if the the stream is readable and seekable
+ $pos = $this->ftell();
+ $this->size = strlen((string) $this);
+ $this->seek($pos);
+ return $this->size;
+ }
+
+ return false;
+ }
+
+ public function isReadable()
+ {
+ return $this->cache[self::IS_READABLE];
+ }
+
+ public function isRepeatable()
+ {
+ return $this->cache[self::IS_READABLE] && $this->cache[self::SEEKABLE];
+ }
+
+ public function isWritable()
+ {
+ return $this->cache[self::IS_WRITABLE];
+ }
+
+ public function isConsumed()
+ {
+ return feof($this->stream);
+ }
+
+ public function feof()
+ {
+ return $this->isConsumed();
+ }
+
+ public function isLocal()
+ {
+ return $this->cache[self::IS_LOCAL];
+ }
+
+ public function isSeekable()
+ {
+ return $this->cache[self::SEEKABLE];
+ }
+
+ public function setSize($size)
+ {
+ $this->size = $size;
+
+ return $this;
+ }
+
+ public function seek($offset, $whence = SEEK_SET)
+ {
+ return $this->cache[self::SEEKABLE] ? fseek($this->stream, $offset, $whence) === 0 : false;
+ }
+
+ public function read($length)
+ {
+ return fread($this->stream, $length);
+ }
+
+ public function write($string)
+ {
+ // We can't know the size after writing anything
+ $this->size = null;
+
+ return fwrite($this->stream, $string);
+ }
+
+ public function ftell()
+ {
+ return ftell($this->stream);
+ }
+
+ public function rewind()
+ {
+ return $this->seek(0);
+ }
+
+ public function readLine($maxLength = null)
+ {
+ if (!$this->cache[self::IS_READABLE]) {
+ return false;
+ } else {
+ return $maxLength ? fgets($this->getStream(), $maxLength) : fgets($this->getStream());
+ }
+ }
+
+ public function setCustomData($key, $value)
+ {
+ $this->customData[$key] = $value;
+
+ return $this;
+ }
+
+ public function getCustomData($key)
+ {
+ return isset($this->customData[$key]) ? $this->customData[$key] : null;
+ }
+
+ /**
+ * Reprocess stream metadata
+ */
+ protected function rebuildCache()
+ {
+ $this->cache = stream_get_meta_data($this->stream);
+ $this->cache[self::IS_LOCAL] = stream_is_local($this->stream);
+ $this->cache[self::IS_READABLE] = isset(self::$readWriteHash['read'][$this->cache['mode']]);
+ $this->cache[self::IS_WRITABLE] = isset(self::$readWriteHash['write'][$this->cache['mode']]);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Stream/StreamInterface.php b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Stream/StreamInterface.php
new file mode 100644
index 0000000..6d7dc37
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/guzzle/guzzle/src/Guzzle/Stream/StreamInterface.php
@@ -0,0 +1,218 @@
+=5.3.2",
+ "guzzle/common": "self.version"
+ },
+ "suggest": {
+ "guzzle/http": "To convert Guzzle request objects to PHP streams"
+ },
+ "autoload": {
+ "psr-0": { "Guzzle\\Stream": "" }
+ },
+ "target-dir": "Guzzle/Stream",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7-dev"
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-aws-s3-v2/src/AwsS3Adapter.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-aws-s3-v2/src/AwsS3Adapter.php
new file mode 100644
index 0000000..0b77507
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-aws-s3-v2/src/AwsS3Adapter.php
@@ -0,0 +1,619 @@
+ 'raw_contents',
+ 'ContentLength' => 'size',
+ 'ContentType' => 'mimetype',
+ 'Size' => 'size',
+ 'StorageClass' => 'storage_class',
+ ];
+
+ /**
+ * @var array
+ */
+ protected static $metaOptions = [
+ 'CacheControl',
+ 'Expires',
+ 'StorageClass',
+ 'ServerSideEncryption',
+ 'Metadata',
+ 'ACL',
+ 'ContentType',
+ 'ContentDisposition',
+ 'ContentLanguage',
+ 'ContentEncoding',
+ ];
+
+ /**
+ * @var string bucket name
+ */
+ protected $bucket;
+
+ /**
+ * @var S3Client S3 Client
+ */
+ protected $client;
+
+ /**
+ * @var array default options[
+ * Multipart=1024 Mb - After what size should multipart be used
+ * MinPartSize=32 Mb - Minimum size of parts for each part
+ * Concurrency=3 - If multipart is used, how many concurrent connections should be used
+ * ]
+ */
+ protected $options = [
+ 'Multipart' => 1024,
+ 'MinPartSize' => 32,
+ 'Concurrency' => 3,
+ ];
+
+ /**
+ * @var UploadBuilder Used to upload object using a multipart transfer
+ */
+ protected $uploadBuilder;
+
+ /**
+ * Constructor.
+ *
+ * @param S3Client $client
+ * @param string $bucket
+ * @param string $prefix
+ * @param array $options
+ * @param UploadBuilder $uploadBuilder
+ */
+ public function __construct(
+ S3Client $client,
+ $bucket,
+ $prefix = null,
+ array $options = [],
+ UploadBuilder $uploadBuilder = null
+ ) {
+ $this->client = $client;
+ $this->bucket = $bucket;
+ $this->setPathPrefix($prefix);
+ $this->options = array_merge($this->options, $options);
+ $this->setUploadBuilder($uploadBuilder);
+ }
+
+ /**
+ * Get the S3Client bucket.
+ *
+ * @return string
+ */
+ public function getBucket()
+ {
+ return $this->bucket;
+ }
+
+ /**
+ * Get the S3Client instance.
+ *
+ * @return S3Client
+ */
+ public function getClient()
+ {
+ return $this->client;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function has($path)
+ {
+ $location = $this->applyPathPrefix($path);
+
+ return $this->client->doesObjectExist($this->bucket, $location);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function write($path, $contents, Config $config)
+ {
+ $options = $this->getOptions(
+ $path,
+ [
+ 'Body' => $contents,
+ 'ContentType' => Util::guessMimeType($path, $contents),
+ 'ContentLength' => Util::contentSize($contents),
+ ],
+ $config
+ );
+
+ return $this->writeObject($options);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function writeStream($path, $resource, Config $config)
+ {
+ $options = ['Body' => $resource];
+ $options['ContentLength'] = Util::getStreamSize($resource);
+ $options = $this->getOptions($path, $options, $config);
+
+ return $this->writeObject($options);
+ }
+
+ /**
+ * Write an object to S3.
+ *
+ * @param array $options
+ *
+ * @return array file metadata
+ */
+ protected function writeObject(array $options)
+ {
+ $multipartLimit = $this->mbToBytes($options['Multipart']);
+
+ // If we don't know the stream size, we have to assume we need to upload using multipart, otherwise it might fail.
+ if ($options['ContentLength'] > $multipartLimit) {
+ $result = $this->putObjectMultipart($options);
+ } else {
+ $result = $this->client->putObject($options);
+ }
+
+ if ($result === false) {
+ return false;
+ }
+
+ if (! is_string($options['Body'])) {
+ unset($options['Body']);
+ }
+
+ return $this->normalizeResponse($options);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function update($path, $contents, Config $config)
+ {
+ if (! $config->has('visibility') && ! $config->has('ACL')) {
+ $config->set('ACL', $this->getObjectACL($path));
+ }
+
+ return $this->write($path, $contents, $config);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function updateStream($path, $resource, Config $config)
+ {
+ if (! $config->has('visibility') && ! $config->has('ACL')) {
+ $config->set('ACL', $this->getObjectACL($path));
+ }
+
+ return $this->writeStream($path, $resource, $config);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function read($path)
+ {
+ $result = $this->readObject($path);
+ $result['contents'] = (string) $result['raw_contents'];
+ unset($result['raw_contents']);
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function readStream($path)
+ {
+ $result = $this->readObject($path);
+ $result['stream'] = $result['raw_contents']->getStream();
+ rewind($result['stream']);
+ // Ensure the EntityBody object destruction doesn't close the stream
+ $result['raw_contents']->detachStream();
+ unset($result['raw_contents']);
+
+ return $result;
+ }
+
+ /**
+ * Read an object from the S3Client.
+ *
+ * @param string $path
+ *
+ * @return array
+ */
+ protected function readObject($path)
+ {
+ $options = $this->getOptions($path);
+ $result = $this->client->getObject($options);
+
+ return $this->normalizeResponse($result->getAll(), $path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function rename($path, $newpath)
+ {
+ $this->copy($path, $newpath);
+ $this->delete($path);
+
+ return true;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function copy($path, $newpath)
+ {
+ $options = $this->getOptions($newpath, [
+ 'Bucket' => $this->bucket,
+ 'CopySource' => urlencode($this->bucket.'/'.$this->applyPathPrefix($path)),
+ 'ACL' => $this->getObjectACL($path),
+ 'StorageClass' => $this->getStorageClass($path),
+ ]);
+
+ $this->client->copyObject($options);
+
+ return true;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function delete($path)
+ {
+ $options = $this->getOptions($path);
+ $this->client->deleteObject($options);
+
+ return ! $this->has($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function deleteDir($path)
+ {
+ $prefix = rtrim($this->applyPathPrefix($path), '/').'/';
+
+ return (bool) $this->client->deleteMatchingObjects($this->bucket, $prefix);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function createDir($path, Config $config)
+ {
+ $result = $this->write(rtrim($path, '/').'/', '', $config);
+
+ if (! $result) {
+ return false;
+ }
+
+ return ['path' => $path, 'type' => 'dir'];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMetadata($path)
+ {
+ $options = $this->getOptions($path);
+ $result = $this->client->headObject($options);
+
+ return $this->normalizeResponse($result->getAll(), $path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMimetype($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSize($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getTimestamp($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getVisibility($path)
+ {
+ $options = $this->getOptions($path);
+ $result = $this->client->getObjectAcl($options)->getAll();
+ $visibility = AdapterInterface::VISIBILITY_PRIVATE;
+
+ foreach ($result['Grants'] as $grant) {
+ if (isset($grant['Grantee']['URI']) && $grant['Grantee']['URI'] === Group::ALL_USERS && $grant['Permission'] === Permission::READ) {
+ $visibility = AdapterInterface::VISIBILITY_PUBLIC;
+ break;
+ }
+ }
+
+ return compact('visibility');
+ }
+
+ /**
+ * The the ACL visibility.
+ *
+ * @param string $path
+ *
+ * @return string
+ */
+ protected function getObjectACL($path)
+ {
+ $metadata = $this->getVisibility($path);
+
+ return $metadata['visibility'] === AdapterInterface::VISIBILITY_PUBLIC ? 'public-read' : 'private';
+ }
+
+ /**
+ * Return an object's storage class.
+ *
+ * @param $path
+ * @return string
+ */
+ public function getStorageClass($path)
+ {
+ $metadata = $this->getMetadata($path);
+
+ return !empty($metadata['storage_class']) ? $metadata['storage_class'] : StorageClass::STANDARD;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setVisibility($path, $visibility)
+ {
+ $options = $this->getOptions($path, [
+ 'ACL' => $visibility === AdapterInterface::VISIBILITY_PUBLIC ? 'public-read' : 'private',
+ ]);
+
+ $this->client->putObjectAcl($options);
+
+ return compact('visibility');
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function listContents($dirname = '', $recursive = false)
+ {
+ $dirname = rtrim($dirname, '/') . '/';
+
+ $commandOptions = [
+ 'Bucket' => $this->bucket,
+ 'Prefix' => $this->applyPathPrefix($dirname)
+ ];
+
+ $iteratorOptions = [];
+
+ if (!$recursive) {
+ $commandOptions['Delimiter'] = '/';
+ $iteratorOptions['return_prefixes'] = true;
+ }
+
+ $objectsIterator = $this->client->getIterator('listObjects', $commandOptions, $iteratorOptions);
+
+ $contents = iterator_to_array($objectsIterator);
+ $result = array_map([$this, 'normalizeResponse'], $contents);
+ $result = array_filter($result, function ($value) {
+ return $value['path'] !== false;
+ });
+
+ return Util::emulateDirectories($result);
+ }
+
+ /**
+ * Normalize a result from AWS.
+ *
+ * @param array $object
+ * @param string $path
+ *
+ * @return array file metadata
+ */
+ protected function normalizeResponse(array $object, $path = null)
+ {
+ $result = ['path' => $path ?: $this->removePathPrefix(isset($object['Key']) ? $object['Key'] : $object['Prefix'])];
+ $result['dirname'] = Util::dirname($result['path']);
+
+ if (isset($object['LastModified'])) {
+ $result['timestamp'] = strtotime($object['LastModified']);
+ }
+
+ if (substr($result['path'], -1) === '/') {
+ $result['type'] = 'dir';
+ $result['path'] = rtrim($result['path'], '/');
+
+ return $result;
+ }
+
+ $result = array_merge($result, Util::map($object, static::$resultMap), ['type' => 'file']);
+
+ return $result;
+ }
+
+ /**
+ * Get options for a AWS call.
+ *
+ * @param string $path
+ * @param array $options
+ * @param Config $config
+ *
+ * @return array AWS options
+ */
+ protected function getOptions($path, array $options = [], Config $config = null)
+ {
+ $options = array_merge($this->options, $options);
+ $options['Key'] = $this->applyPathPrefix($path);
+ $options['Bucket'] = $this->bucket;
+
+ if ($config) {
+ $options = array_merge($options, $this->getOptionsFromConfig($config));
+ }
+
+ return $options;
+ }
+
+ /**
+ * Retrieve options from a Config instance.
+ *
+ * @param Config $config
+ *
+ * @return array
+ */
+ protected function getOptionsFromConfig(Config $config)
+ {
+ $options = [];
+
+ foreach (static::$metaOptions as $option) {
+ if (! $config->has($option)) {
+ continue;
+ }
+ $options[$option] = $config->get($option);
+ }
+
+ if ($visibility = $config->get('visibility')) {
+ // For local reference
+ $options['visibility'] = $visibility;
+ // For external reference
+ $options['ACL'] = $visibility === AdapterInterface::VISIBILITY_PUBLIC ? 'public-read' : 'private';
+ }
+
+ if ($mimetype = $config->get('mimetype')) {
+ // For local reference
+ $options['mimetype'] = $mimetype;
+ // For external reference
+ $options['ContentType'] = $mimetype;
+ }
+
+ return $options;
+ }
+
+ /**
+ * Sends an object to a bucket using a multipart transfer, possibly also using concurrency.
+ *
+ * @param array $options Can have: [Body, Bucket, Key, MinPartSize, Concurrency, ContentType, ACL, Metadata]
+ *
+ * @return bool
+ */
+ protected function putObjectMultipart(array $options)
+ {
+ // Prepare the upload parameters.
+ /** @var UploadBuilder $uploadBuilder */
+ $uploadBuilder = $this->getUploadBuilder();
+
+ $uploadBuilder->setBucket($options['Bucket'])
+ // This options are always set in the $options array, so we don't need to check for them
+ ->setKey($options['Key'])
+ ->setMinPartSize($options['MinPartSize'])
+ ->setConcurrency($options['Concurrency'])
+ ->setSource($options['Body']) // these 2 methods must be the last to be called because they return
+ ->setClient($this->client); // AbstractUploadBuilder, which makes IDE and CI complain.
+
+ foreach (static::$metaOptions as $option) {
+ if (! array_key_exists($option, $options)) {
+ continue;
+ }
+ $uploadBuilder->setOption($option, $options[$option]);
+ }
+
+ $uploader = $uploadBuilder->build();
+
+ return $this->upload($uploader);
+ }
+
+ /**
+ * Perform the upload. Abort the upload if something goes wrong.
+ *
+ * @param AbstractTransfer $uploader
+ *
+ * @return bool
+ */
+ protected function upload(AbstractTransfer $uploader)
+ {
+ try {
+ $uploader->upload();
+ } catch (MultipartUploadException $e) {
+ $uploader->abort();
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Convert megabytes to bytes.
+ *
+ * @param int $megabytes
+ *
+ * @return int
+ */
+ protected function mbToBytes($megabytes)
+ {
+ return $megabytes * 1024 * 1024;
+ }
+
+ /**
+ * Set the S3 UploadBuilder.
+ *
+ * @param UploadBuilder $uploadBuilder
+ *
+ * @return $this
+ */
+ public function setUploadBuilder(UploadBuilder $uploadBuilder = null)
+ {
+ $this->uploadBuilder = $uploadBuilder;
+
+ return $this;
+ }
+
+ /**
+ * Get the S3 UploadBuilder.
+ *
+ * @return UploadBuilder
+ */
+ public function getUploadBuilder()
+ {
+ if (! $this->uploadBuilder) {
+ $this->uploadBuilder = UploadBuilder::newInstance();
+ }
+
+ return $this->uploadBuilder;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-azure/src/Adapter.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-azure/src/Adapter.php
new file mode 100644
index 0000000..a3bdd5c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-azure/src/Adapter.php
@@ -0,0 +1,11 @@
+client = $azureClient;
+ $this->container = $container;
+ $this->setPathPrefix($prefix);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function write($path, $contents, Config $config)
+ {
+ return $this->upload($path, $contents, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function writeStream($path, $resource, Config $config)
+ {
+ return $this->upload($path, $resource, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function update($path, $contents, Config $config)
+ {
+ return $this->upload($path, $contents, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function updateStream($path, $resource, Config $config)
+ {
+ return $this->upload($path, $resource, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function rename($path, $newpath)
+ {
+ $this->copy($path, $newpath);
+
+ return $this->delete($path);
+ }
+
+ public function copy($path, $newpath)
+ {
+ $path = $this->applyPathPrefix($path);
+ $newpath = $this->applyPathPrefix($newpath);
+
+ $this->client->copyBlob($this->container, $newpath, $this->container, $path);
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function delete($path)
+ {
+ $path = $this->applyPathPrefix($path);
+
+ $this->client->deleteBlob($this->container, $path);
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function deleteDir($dirname)
+ {
+ $dirname = $this->applyPathPrefix($dirname);
+
+ $options = new ListBlobsOptions();
+ $options->setPrefix($dirname . '/');
+
+ /** @var ListBlobsResult $listResults */
+ $listResults = $this->client->listBlobs($this->container, $options);
+
+ foreach ($listResults->getBlobs() as $blob) {
+ /** @var \WindowsAzure\Blob\Models\Blob $blob */
+ $this->client->deleteBlob($this->container, $blob->getName());
+ }
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function createDir($dirname, Config $config)
+ {
+ $this->write(rtrim($dirname, '/') . '/', ' ', $config);
+
+ return ['path' => $dirname, 'type' => 'dir'];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function has($path)
+ {
+ $path = $this->applyPathPrefix($path);
+
+ try {
+ $this->client->getBlobMetadata($this->container, $path);
+ } catch (ServiceException $e) {
+ if ($e->getCode() !== 404) {
+ throw $e;
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function read($path)
+ {
+ $path = $this->applyPathPrefix($path);
+
+ /** @var \WindowsAzure\Blob\Models\GetBlobResult $blobResult */
+ $blobResult = $this->client->getBlob($this->container, $path);
+ $properties = $blobResult->getProperties();
+ $content = $this->streamContentsToString($blobResult->getContentStream());
+
+ return $this->normalizeBlobProperties($path, $properties) + ['contents' => $content];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function readStream($path)
+ {
+ $path = $this->applyPathPrefix($path);
+
+ /** @var \WindowsAzure\Blob\Models\GetBlobResult $blobResult */
+ $blobResult = $this->client->getBlob($this->container, $path);
+ $properties = $blobResult->getProperties();
+
+ return $this->normalizeBlobProperties($path, $properties) + ['stream' => $blobResult->getContentStream()];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function listContents($directory = '', $recursive = false)
+ {
+ $directory = $this->applyPathPrefix($directory);
+
+ // Append trailing slash only for directory other than root (which after normalization is an empty string).
+ // Listing for / doesn't work properly otherwise.
+ if (strlen($directory)) {
+ $directory = rtrim($directory, '/') . '/';
+ }
+
+ $options = new ListBlobsOptions();
+ $options->setPrefix($directory);
+
+ if (!$recursive) {
+ $options->setDelimiter('/');
+ }
+
+ /** @var ListBlobsResult $listResults */
+ $listResults = $this->client->listBlobs($this->container, $options);
+
+ $contents = [];
+
+ foreach ($listResults->getBlobs() as $blob) {
+ $contents[] = $this->normalizeBlobProperties($blob->getName(), $blob->getProperties());
+ }
+
+ if (!$recursive) {
+ $contents = array_merge($contents, array_map([$this, 'normalizeBlobPrefix'], $listResults->getBlobPrefixes()));
+ }
+
+ return Util::emulateDirectories($contents);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMetadata($path)
+ {
+ $path = $this->applyPathPrefix($path);
+
+ /** @var \WindowsAzure\Blob\Models\GetBlobPropertiesResult $result */
+ $result = $this->client->getBlobProperties($this->container, $path);
+
+ return $this->normalizeBlobProperties($path, $result->getProperties());
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getSize($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMimetype($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getTimestamp($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * Builds the normalized output array.
+ *
+ * @param string $path
+ * @param int $timestamp
+ * @param mixed $content
+ *
+ * @return array
+ */
+ protected function normalize($path, $timestamp, $content = null)
+ {
+ $data = [
+ 'path' => $path,
+ 'timestamp' => (int) $timestamp,
+ 'dirname' => Util::dirname($path),
+ 'type' => 'file',
+ ];
+
+ if (is_string($content)) {
+ $data['contents'] = $content;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Builds the normalized output array from a Blob object.
+ *
+ * @param string $path
+ * @param BlobProperties $properties
+ *
+ * @return array
+ */
+ protected function normalizeBlobProperties($path, BlobProperties $properties)
+ {
+ if (substr($path, -1) === '/') {
+ return ['type' => 'dir', 'path' => $this->removePathPrefix(rtrim($path, '/'))];
+ }
+
+ $path = $this->removePathPrefix($path);
+
+ return [
+ 'path' => $path,
+ 'timestamp' => (int) $properties->getLastModified()->format('U'),
+ 'dirname' => Util::dirname($path),
+ 'mimetype' => $properties->getContentType(),
+ 'size' => $properties->getContentLength(),
+ 'type' => 'file',
+ ];
+ }
+
+ /**
+ * Builds the normalized output array from a BlobPrefix object.
+ *
+ * @param BlobPrefix $blobPrefix
+ *
+ * @return array
+ */
+ protected function normalizeBlobPrefix(BlobPrefix $blobPrefix)
+ {
+ return ['type' => 'dir', 'path' => $this->removePathPrefix(rtrim($blobPrefix->getName(), '/'))];
+ }
+
+ /**
+ * Retrieves content streamed by Azure into a string.
+ *
+ * @param resource $resource
+ *
+ * @return string
+ */
+ protected function streamContentsToString($resource)
+ {
+ return stream_get_contents($resource);
+ }
+
+ /**
+ * Upload a file.
+ *
+ * @param string $path Path
+ * @param mixed $contents Either a string or a stream.
+ * @param Config $config Config
+ *
+ * @return array
+ */
+ protected function upload($path, $contents, Config $config)
+ {
+ $path = $this->applyPathPrefix($path);
+
+ $options = new CreateBlobOptions();
+
+ if ($mimetype = $config->get('mimetype')) {
+ $options->setContentType($mimetype);
+ }
+
+ /** @var \WindowsAzure\Blob\Models\CopyBlobResult $result */
+ $result = $this->client->createBlockBlob($this->container, $path, $contents, $options);
+
+ return $this->normalize($path, $result->getLastModified()->format('U'), $contents);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/CacheInterface.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/CacheInterface.php
new file mode 100644
index 0000000..de3ab3d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/CacheInterface.php
@@ -0,0 +1,101 @@
+adapter = $adapter;
+ $this->cache = $cache;
+ $this->cache->load();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getAdapter()
+ {
+ return $this->adapter;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function write($path, $contents, Config $config)
+ {
+ $result = $this->adapter->write($path, $contents, $config);
+
+ if ($result !== false) {
+ $this->cache->updateObject($path, $result + compact('path', 'contents'), true);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function writeStream($path, $resource, Config $config)
+ {
+ $result = $this->adapter->writeStream($path, $resource, $config);
+
+ if ($result !== false) {
+ $contents = false;
+ $this->cache->updateObject($path, $result + compact('path', 'contents'), true);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function update($path, $contents, Config $config)
+ {
+ $result = $this->adapter->update($path, $contents, $config);
+
+ if ($result !== false) {
+ $this->cache->updateObject($path, $result + compact('path', 'contents'), true);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function updateStream($path, $resource, Config $config)
+ {
+ $result = $this->adapter->updateStream($path, $resource, $config);
+
+ if ($result !== false) {
+ $contents = false;
+ $this->cache->updateObject($path, $result + compact('path', 'contents'), true);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function rename($path, $newPath)
+ {
+ $result = $this->adapter->rename($path, $newPath);
+
+ if ($result !== false) {
+ $this->cache->rename($path, $newPath);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function copy($path, $newpath)
+ {
+ $result = $this->adapter->copy($path, $newpath);
+
+ if ($result !== false) {
+ $this->cache->copy($path, $newpath);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function delete($path)
+ {
+ $result = $this->adapter->delete($path);
+
+ if ($result !== false) {
+ $this->cache->delete($path);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function deleteDir($dirname)
+ {
+ $result = $this->adapter->deleteDir($dirname);
+
+ if ($result !== false) {
+ $this->cache->deleteDir($dirname);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function createDir($dirname, Config $config)
+ {
+ $result = $this->adapter->createDir($dirname, $config);
+
+ if ($result !== false) {
+ $type = 'dir';
+ $path = $dirname;
+ $this->cache->updateObject($dirname, compact('path', 'type'), true);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setVisibility($path, $visibility)
+ {
+ $result = $this->adapter->setVisibility($path, $visibility);
+
+ if ($result !== false) {
+ $this->cache->updateObject($path, compact('path', 'visibility'), true);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function has($path)
+ {
+ $cacheHas = $this->cache->has($path);
+
+ if ($cacheHas !== null) {
+ return $cacheHas;
+ }
+
+ $adapterResponse = $this->adapter->has($path);
+
+ if (! $adapterResponse) {
+ $this->cache->storeMiss($path);
+ } else {
+ $cacheEntry = is_array($adapterResponse) ? $adapterResponse : compact('path');
+ $this->cache->updateObject($path, $cacheEntry, true);
+ }
+
+ return $adapterResponse;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function read($path)
+ {
+ return $this->callWithFallback('read', $path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function readStream($path)
+ {
+ return $this->adapter->readStream($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function listContents($directory = '', $recursive = false)
+ {
+ if ($this->cache->isComplete($directory, $recursive)) {
+ return $this->cache->listContents($directory, $recursive);
+ }
+
+ $result = $this->adapter->listContents($directory, $recursive);
+
+ if ($result) {
+ $this->cache->storeContents($directory, $result, $recursive);
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMetadata($path)
+ {
+ return $this->callWithFallback('getMetadata', $path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSize($path)
+ {
+ return $this->callWithFallback('getSize', $path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMimetype($path)
+ {
+ return $this->callWithFallback('getMimetype', $path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getTimestamp($path)
+ {
+ return $this->callWithFallback('getTimestamp', $path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getVisibility($path)
+ {
+ return $this->callWithFallback('getVisibility', $path);
+ }
+
+ /**
+ * Call a method and cache the response.
+ *
+ * @param string $method
+ * @param string $path
+ *
+ * @return mixed
+ */
+ protected function callWithFallback($method, $path)
+ {
+ $result = $this->cache->{$method}($path);
+
+ if ($result !== false) {
+ return $result;
+ }
+
+ $result = $this->adapter->{$method}($path);
+
+ if ($result) {
+ $object = $result + compact('path');
+ $this->cache->updateObject($path, $object, true);
+ }
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/AbstractCache.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/AbstractCache.php
new file mode 100644
index 0000000..8195c3d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/AbstractCache.php
@@ -0,0 +1,407 @@
+autosave) {
+ $this->save();
+ }
+ }
+
+ /**
+ * Get the autosave setting.
+ *
+ * @return bool autosave
+ */
+ public function getAutosave()
+ {
+ return $this->autosave;
+ }
+
+ /**
+ * Get the autosave setting.
+ *
+ * @param bool $autosave
+ */
+ public function setAutosave($autosave)
+ {
+ $this->autosave = $autosave;
+ }
+
+ /**
+ * Store the contents listing.
+ *
+ * @param string $directory
+ * @param array $contents
+ * @param bool $recursive
+ *
+ * @return array contents listing
+ */
+ public function storeContents($directory, array $contents, $recursive = false)
+ {
+ $directories = [$directory];
+
+ foreach ($contents as $index => $object) {
+ $this->updateObject($object['path'], $object);
+ $object = $this->cache[$object['path']];
+
+ if ($recursive && (empty($directory) || strpos($object['dirname'], $directory) !== false)) {
+ $directories[] = $object['dirname'];
+ }
+ }
+
+ foreach ($directories as $directory) {
+ $this->setComplete($directory, $recursive);
+ }
+
+ $this->autosave();
+ }
+
+ /**
+ * Update the metadata for an object.
+ *
+ * @param string $path object path
+ * @param array $object object metadata
+ * @param bool $autosave whether to trigger the autosave routine
+ */
+ public function updateObject($path, array $object, $autosave = false)
+ {
+ if (! $this->has($path)) {
+ $this->cache[$path] = Util::pathinfo($path);
+ }
+
+ $this->cache[$path] = array_merge($this->cache[$path], $object);
+
+ if ($autosave) {
+ $this->autosave();
+ }
+
+ $this->ensureParentDirectories($path);
+ }
+
+ /**
+ * Store object hit miss.
+ *
+ * @param string $path
+ */
+ public function storeMiss($path)
+ {
+ $this->cache[$path] = false;
+ $this->autosave();
+ }
+
+ /**
+ * Get the contents listing.
+ *
+ * @param string $dirname
+ * @param bool $recursive
+ *
+ * @return array contents listing
+ */
+ public function listContents($dirname = '', $recursive = false)
+ {
+ $result = [];
+
+ foreach ($this->cache as $object) {
+ if ($object['dirname'] !== $dirname) {
+ continue;
+ }
+
+ $result[] = $object;
+
+ if ($recursive && $object['type'] === 'dir') {
+ $result = array_merge($result, $this->listContents($object['path'], true));
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function has($path)
+ {
+ if (array_key_exists($path, $this->cache)) {
+ return $this->cache[$path] !== false;
+ }
+
+ if ($this->isComplete(Util::dirname($path), false)) {
+ return false;
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function read($path)
+ {
+ if (isset($this->cache[$path]['contents'])) {
+ return $this->cache[$path];
+ }
+
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function readStream($path)
+ {
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function rename($path, $newpath)
+ {
+ if ($this->has($path)) {
+ $object = $this->cache[$path];
+ unset($this->cache[$path]);
+ $object['path'] = $newpath;
+ $object = array_merge($object, Util::pathinfo($newpath));
+ $this->cache[$newpath] = $object;
+ $this->autosave();
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function copy($path, $newpath)
+ {
+ if ($this->has($path)) {
+ $object = $this->cache[$path];
+ $object = array_merge($object, Util::pathinfo($newpath));
+ $this->updateObject($newpath, $object, true);
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function delete($path)
+ {
+ $this->storeMiss($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function deleteDir($dirname)
+ {
+ foreach ($this->cache as $path => $object) {
+ if (strpos($path, $dirname) === 0) {
+ unset($this->cache[$path]);
+ }
+ }
+
+ if (isset($this->complete[$dirname])) {
+ unset($this->complete[$dirname]);
+ }
+
+ $this->autosave();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMimetype($path)
+ {
+ if (isset($this->cache[$path]['mimetype'])) {
+ return $this->cache[$path];
+ }
+
+ if (! $result = $this->read($path)) {
+ return false;
+ }
+
+ $mimetype = Util::guessMimeType($path, $result['contents']);
+ $this->cache[$path]['mimetype'] = $mimetype;
+
+ return $this->cache[$path];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSize($path)
+ {
+ if (isset($this->cache[$path]['size'])) {
+ return $this->cache[$path];
+ }
+
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getTimestamp($path)
+ {
+ if (isset($this->cache[$path]['timestamp'])) {
+ return $this->cache[$path];
+ }
+
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getVisibility($path)
+ {
+ if (isset($this->cache[$path]['visibility'])) {
+ return $this->cache[$path];
+ }
+
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMetadata($path)
+ {
+ if (isset($this->cache[$path]['type'])) {
+ return $this->cache[$path];
+ }
+
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function isComplete($dirname, $recursive)
+ {
+ if (! array_key_exists($dirname, $this->complete)) {
+ return false;
+ }
+
+ if ($recursive && $this->complete[$dirname] !== 'recursive') {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setComplete($dirname, $recursive)
+ {
+ $this->complete[$dirname] = $recursive ? 'recursive' : true;
+ }
+
+ /**
+ * Filter the contents from a listing.
+ *
+ * @param array $contents object listing
+ *
+ * @return array filtered contents
+ */
+ public function cleanContents(array $contents)
+ {
+ $cachedProperties = array_flip([
+ 'path', 'dirname', 'basename', 'extension', 'filename',
+ 'size', 'mimetype', 'visibility', 'timestamp', 'type',
+ ]);
+
+ foreach ($contents as $path => $object) {
+ if (is_array($object)) {
+ $contents[$path] = array_intersect_key($object, $cachedProperties);
+ }
+ }
+
+ return $contents;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function flush()
+ {
+ $this->cache = [];
+ $this->complete = [];
+ $this->autosave();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function autosave()
+ {
+ if ($this->autosave) {
+ $this->save();
+ }
+ }
+
+ /**
+ * Retrieve serialized cache data.
+ *
+ * @return string serialized data
+ */
+ public function getForStorage()
+ {
+ $cleaned = $this->cleanContents($this->cache);
+
+ return json_encode([$cleaned, $this->complete]);
+ }
+
+ /**
+ * Load from serialized cache data.
+ *
+ * @param string $json
+ */
+ public function setFromStorage($json)
+ {
+ list($cache, $complete) = json_decode($json, true);
+
+ if (json_last_error() === JSON_ERROR_NONE && is_array($cache) && is_array($complete)) {
+ $this->cache = $cache;
+ $this->complete = $complete;
+ }
+ }
+
+ /**
+ * Ensure parent directories of an object.
+ *
+ * @param string $path object path
+ */
+ public function ensureParentDirectories($path)
+ {
+ $object = $this->cache[$path];
+
+ while ($object['dirname'] !== '' && ! isset($this->cache[$object['dirname']])) {
+ $object = Util::pathinfo($object['dirname']);
+ $object['type'] = 'dir';
+ $this->cache[$object['path']] = $object;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Adapter.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Adapter.php
new file mode 100644
index 0000000..3aa8b1a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Adapter.php
@@ -0,0 +1,115 @@
+adapter = $adapter;
+ $this->file = $file;
+ $this->setExpire($expire);
+ }
+
+ /**
+ * Set the expiration time in seconds.
+ *
+ * @param int $expire relative expiration time
+ */
+ protected function setExpire($expire)
+ {
+ if ($expire) {
+ $this->expire = $this->getTime($expire);
+ }
+ }
+
+ /**
+ * Get expiration time in seconds.
+ *
+ * @param int $time relative expiration time
+ *
+ * @return int actual expiration time
+ */
+ protected function getTime($time = 0)
+ {
+ return intval(microtime(true)) + $time;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setFromStorage($json)
+ {
+ list($cache, $complete, $expire) = json_decode($json, true);
+
+ if (! $expire || $expire > $this->getTime()) {
+ $this->cache = $cache;
+ $this->complete = $complete;
+ } else {
+ $this->adapter->delete($this->file);
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function load()
+ {
+ if ($this->adapter->has($this->file)) {
+ $file = $this->adapter->read($this->file);
+ if ($file && !empty($file['contents'])) {
+ $this->setFromStorage($file['contents']);
+ }
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getForStorage()
+ {
+ $cleaned = $this->cleanContents($this->cache);
+
+ return json_encode([$cleaned, $this->complete, $this->expire]);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function save()
+ {
+ $config = new Config();
+ $contents = $this->getForStorage();
+
+ if ($this->adapter->has($this->file)) {
+ $this->adapter->update($this->file, $contents, $config);
+ } else {
+ $this->adapter->write($this->file, $contents, $config);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Memcached.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Memcached.php
new file mode 100644
index 0000000..f67d271
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Memcached.php
@@ -0,0 +1,59 @@
+key = $key;
+ $this->expire = $expire;
+ $this->memcached = $memcached;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function load()
+ {
+ $contents = $this->memcached->get($this->key);
+
+ if ($contents !== false) {
+ $this->setFromStorage($contents);
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function save()
+ {
+ $contents = $this->getForStorage();
+ $expiration = $this->expire === null ? 0 : time() + $this->expire;
+ $this->memcached->set($this->key, $contents, $expiration);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Memory.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Memory.php
new file mode 100644
index 0000000..d0914fa
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Memory.php
@@ -0,0 +1,22 @@
+client = $client ?: new Redis();
+ $this->key = $key;
+ $this->expire = $expire;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function load()
+ {
+ $contents = $this->client->get($this->key);
+
+ if ($contents !== false) {
+ $this->setFromStorage($contents);
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function save()
+ {
+ $contents = $this->getForStorage();
+ $this->client->set($this->key, $contents);
+
+ if ($this->expire !== null) {
+ $this->client->expire($this->key, $this->expire);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Predis.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Predis.php
new file mode 100644
index 0000000..8a29574
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Predis.php
@@ -0,0 +1,75 @@
+client = $client ?: new Client();
+ $this->key = $key;
+ $this->expire = $expire;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function load()
+ {
+ if (($contents = $this->executeCommand('get', [$this->key])) !== null) {
+ $this->setFromStorage($contents);
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function save()
+ {
+ $contents = $this->getForStorage();
+ $this->executeCommand('set', [$this->key, $contents]);
+
+ if ($this->expire !== null) {
+ $this->executeCommand('expire', [$this->key, $this->expire]);
+ }
+ }
+
+ /**
+ * Execute a Predis command.
+ *
+ * @param string $name
+ * @param array $arguments
+ *
+ * @return string
+ */
+ protected function executeCommand($name, array $arguments)
+ {
+ $command = $this->client->createCommand($name, $arguments);
+
+ return $this->client->executeCommand($command);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Psr6Cache.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Psr6Cache.php
new file mode 100644
index 0000000..43be87e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Psr6Cache.php
@@ -0,0 +1,59 @@
+pool = $pool;
+ $this->key = $key;
+ $this->expire = $expire;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function save()
+ {
+ $item = $this->pool->getItem($this->key);
+ $item->set($this->getForStorage());
+ $item->expiresAfter($this->expire);
+ $this->pool->save($item);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function load()
+ {
+ $item = $this->pool->getItem($this->key);
+ if ($item->isHit()) {
+ $this->setFromStorage($item->get());
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Stash.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Stash.php
new file mode 100644
index 0000000..e05b832
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-cached-adapter/src/Storage/Stash.php
@@ -0,0 +1,60 @@
+key = $key;
+ $this->expire = $expire;
+ $this->pool = $pool;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function load()
+ {
+ $item = $this->pool->getItem($this->key);
+ $contents = $item->get();
+
+ if ($item->isMiss() === false) {
+ $this->setFromStorage($contents);
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function save()
+ {
+ $contents = $this->getForStorage();
+ $item = $this->pool->getItem($this->key);
+ $item->set($contents, $this->expire);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem-dropbox/src/DropboxAdapter.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem-dropbox/src/DropboxAdapter.php
new file mode 100644
index 0000000..7f766fa
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem-dropbox/src/DropboxAdapter.php
@@ -0,0 +1,334 @@
+ 'size',
+ 'mime_type' => 'mimetype',
+ ];
+
+ /**
+ * @var Client
+ */
+ protected $client;
+
+ /**
+ * Constructor.
+ *
+ * @param Client $client
+ * @param string $prefix
+ */
+ public function __construct(Client $client, $prefix = null)
+ {
+ $this->client = $client;
+ $this->setPathPrefix($prefix);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function has($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function write($path, $contents, Config $config)
+ {
+ return $this->upload($path, $contents, WriteMode::add());
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function writeStream($path, $resource, Config $config)
+ {
+ return $this->uploadStream($path, $resource, WriteMode::add());
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function update($path, $contents, Config $config)
+ {
+ return $this->upload($path, $contents, WriteMode::force());
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function updateStream($path, $resource, Config $config)
+ {
+ return $this->uploadStream($path, $resource, WriteMode::force());
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function read($path)
+ {
+ if (! $object = $this->readStream($path)) {
+ return false;
+ }
+
+ $object['contents'] = stream_get_contents($object['stream']);
+ fclose($object['stream']);
+ unset($object['stream']);
+
+ return $object;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function readStream($path)
+ {
+ $stream = fopen('php://temp', 'w+');
+ $location = $this->applyPathPrefix($path);
+
+ if (! $this->client->getFile($location, $stream)) {
+ fclose($stream);
+
+ return false;
+ }
+
+ rewind($stream);
+
+ return compact('stream');
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function rename($path, $newpath)
+ {
+ $path = $this->applyPathPrefix($path);
+ $newpath = $this->applyPathPrefix($newpath);
+
+ try {
+ $this->client->move($path, $newpath);
+ } catch (Exception $e) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function copy($path, $newpath)
+ {
+ $path = $this->applyPathPrefix($path);
+ $newpath = $this->applyPathPrefix($newpath);
+
+ try {
+ $this->client->copy($path, $newpath);
+ } catch (Exception $e) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function delete($path)
+ {
+ $location = $this->applyPathPrefix($path);
+
+ return $this->client->delete($location);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function deleteDir($path)
+ {
+ return $this->delete($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function createDir($path, Config $config)
+ {
+ $location = $this->applyPathPrefix($path);
+ $result = $this->client->createFolder($location);
+
+ if ($result === null) {
+ return false;
+ }
+
+ return $this->normalizeResponse($result, $path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMetadata($path)
+ {
+ $location = $this->applyPathPrefix($path);
+ $object = $this->client->getMetadata($location);
+
+ if (! $object) {
+ return false;
+ }
+
+ return $this->normalizeResponse($object, $path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMimetype($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSize($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getTimestamp($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getClient()
+ {
+ return $this->client;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function listContents($directory = '', $recursive = false)
+ {
+ $listing = [];
+ $directory = trim($directory, '/.');
+ $location = $this->applyPathPrefix($directory);
+
+ if (! $result = $this->client->getMetadataWithChildren($location)) {
+ return [];
+ }
+
+ foreach ($result['contents'] as $object) {
+ $path = $this->removePathPrefix($object['path']);
+ $listing[] = $this->normalizeResponse($object, $path);
+
+ if ($recursive && $object['is_dir']) {
+ $listing = array_merge($listing, $this->listContents($path, true));
+ }
+ }
+
+ return $listing;
+ }
+
+ /**
+ * Apply the path prefix.
+ *
+ * @param string $path
+ *
+ * @return string prefixed path
+ */
+ public function applyPathPrefix($path)
+ {
+ $path = parent::applyPathPrefix($path);
+
+ return '/'.rtrim($path, '/');
+ }
+
+ /**
+ * Do the actual upload of a string file.
+ *
+ * @param string $path
+ * @param string $contents
+ * @param WriteMode $mode
+ *
+ * @return array|false file metadata
+ */
+ protected function upload($path, $contents, WriteMode $mode)
+ {
+ $location = $this->applyPathPrefix($path);
+
+ if (! $result = $this->client->uploadFileFromString($location, $mode, $contents)) {
+ return false;
+ }
+
+ return $this->normalizeResponse($result, $path);
+ }
+
+ /**
+ * Do the actual upload of a file resource.
+ *
+ * @param string $path
+ * @param resource $resource
+ * @param WriteMode $mode
+ *
+ * @return array|false file metadata
+ */
+ protected function uploadStream($path, $resource, WriteMode $mode)
+ {
+ $location = $this->applyPathPrefix($path);
+
+ // If size is zero, consider it unknown.
+ $size = Util::getStreamSize($resource) ?: null;
+
+ if (! $result = $this->client->uploadFile($location, $mode, $resource, $size)) {
+ return false;
+ }
+
+ return $this->normalizeResponse($result, $path);
+ }
+
+ /**
+ * Normalize a Dropbox response.
+ *
+ * @param $response
+ * @param string $path
+ *
+ * @return array
+ */
+ protected function normalizeResponse(array $response, $path = null)
+ {
+ $result = ['path' => trim($path ?: $response['path'], '/')];
+
+ if (isset($response['modified'])) {
+ $result['timestamp'] = strtotime($response['modified']);
+ }
+
+ $result = array_merge($result, Util::map($response, static::$resultMap));
+ $result['type'] = $response['is_dir'] ? 'dir' : 'file';
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/AbstractAdapter.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/AbstractAdapter.php
new file mode 100644
index 0000000..e2cbebe
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/AbstractAdapter.php
@@ -0,0 +1,86 @@
+pathSeparator) . $this->pathSeparator;
+ }
+
+ $this->pathPrefix = $is_empty ? null : $prefix;
+ }
+
+ /**
+ * Get the path prefix.
+ *
+ * @return string path prefix
+ */
+ public function getPathPrefix()
+ {
+ return $this->pathPrefix;
+ }
+
+ /**
+ * Prefix a path.
+ *
+ * @param string $path
+ *
+ * @return string prefixed path
+ */
+ public function applyPathPrefix($path)
+ {
+ $path = ltrim($path, '\\/');
+
+ if (strlen($path) === 0) {
+ return $this->getPathPrefix() ?: '';
+ }
+
+ if ($prefix = $this->getPathPrefix()) {
+ $path = $prefix . $path;
+ }
+
+ return $path;
+ }
+
+ /**
+ * Remove a path prefix.
+ *
+ * @param string $path
+ *
+ * @return string path without the prefix
+ */
+ public function removePathPrefix($path)
+ {
+ $pathPrefix = $this->getPathPrefix();
+
+ if ($pathPrefix === null) {
+ return $path;
+ }
+
+ return substr($path, strlen($pathPrefix));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php
new file mode 100644
index 0000000..312cd9c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php
@@ -0,0 +1,628 @@
+setConfig($config);
+ }
+
+ /**
+ * Set the config.
+ *
+ * @param array $config
+ *
+ * @return $this
+ */
+ public function setConfig(array $config)
+ {
+ foreach ($this->configurable as $setting) {
+ if ( ! isset($config[$setting])) {
+ continue;
+ }
+
+ $method = 'set' . ucfirst($setting);
+
+ if (method_exists($this, $method)) {
+ $this->$method($config[$setting]);
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Returns the host.
+ *
+ * @return string
+ */
+ public function getHost()
+ {
+ return $this->host;
+ }
+
+ /**
+ * Set the host.
+ *
+ * @param string $host
+ *
+ * @return $this
+ */
+ public function setHost($host)
+ {
+ $this->host = $host;
+
+ return $this;
+ }
+
+ /**
+ * Set the public permission value.
+ *
+ * @param int $permPublic
+ *
+ * @return $this
+ */
+ public function setPermPublic($permPublic)
+ {
+ $this->permPublic = $permPublic;
+
+ return $this;
+ }
+
+ /**
+ * Set the private permission value.
+ *
+ * @param int $permPrivate
+ *
+ * @return $this
+ */
+ public function setPermPrivate($permPrivate)
+ {
+ $this->permPrivate = $permPrivate;
+
+ return $this;
+ }
+
+ /**
+ * Returns the ftp port.
+ *
+ * @return int
+ */
+ public function getPort()
+ {
+ return $this->port;
+ }
+
+ /**
+ * Returns the root folder to work from.
+ *
+ * @return string
+ */
+ public function getRoot()
+ {
+ return $this->root;
+ }
+
+ /**
+ * Set the ftp port.
+ *
+ * @param int|string $port
+ *
+ * @return $this
+ */
+ public function setPort($port)
+ {
+ $this->port = (int) $port;
+
+ return $this;
+ }
+
+ /**
+ * Set the root folder to work from.
+ *
+ * @param string $root
+ *
+ * @return $this
+ */
+ public function setRoot($root)
+ {
+ $this->root = rtrim($root, '\\/') . $this->separator;
+
+ return $this;
+ }
+
+ /**
+ * Returns the ftp username.
+ *
+ * @return string username
+ */
+ public function getUsername()
+ {
+ return empty($this->username) ? 'anonymous' : $this->username;
+ }
+
+ /**
+ * Set ftp username.
+ *
+ * @param string $username
+ *
+ * @return $this
+ */
+ public function setUsername($username)
+ {
+ $this->username = $username;
+
+ return $this;
+ }
+
+ /**
+ * Returns the password.
+ *
+ * @return string password
+ */
+ public function getPassword()
+ {
+ return $this->password;
+ }
+
+ /**
+ * Set the ftp password.
+ *
+ * @param string $password
+ *
+ * @return $this
+ */
+ public function setPassword($password)
+ {
+ $this->password = $password;
+
+ return $this;
+ }
+
+ /**
+ * Returns the amount of seconds before the connection will timeout.
+ *
+ * @return int
+ */
+ public function getTimeout()
+ {
+ return $this->timeout;
+ }
+
+ /**
+ * Set the amount of seconds before the connection should timeout.
+ *
+ * @param int $timeout
+ *
+ * @return $this
+ */
+ public function setTimeout($timeout)
+ {
+ $this->timeout = (int) $timeout;
+
+ return $this;
+ }
+
+ /**
+ * Return the FTP system type.
+ *
+ * @return string
+ */
+ public function getSystemType()
+ {
+ return $this->systemType;
+ }
+
+ /**
+ * Set the FTP system type (windows or unix).
+ *
+ * @param string $systemType
+ *
+ * @return $this
+ */
+ public function setSystemType($systemType)
+ {
+ $this->systemType = strtolower($systemType);
+
+ return $this;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function listContents($directory = '', $recursive = false)
+ {
+ return $this->listDirectoryContents($directory, $recursive);
+ }
+
+ abstract protected function listDirectoryContents($directory, $recursive = false);
+
+ /**
+ * Normalize a directory listing.
+ *
+ * @param array $listing
+ * @param string $prefix
+ *
+ * @return array directory listing
+ */
+ protected function normalizeListing(array $listing, $prefix = '')
+ {
+ $base = $prefix;
+ $result = [];
+ $listing = $this->removeDotDirectories($listing);
+
+ while ($item = array_shift($listing)) {
+ if (preg_match('#^.*:$#', $item)) {
+ $base = trim($item, ':');
+ continue;
+ }
+
+ $result[] = $this->normalizeObject($item, $base);
+ }
+
+ return $this->sortListing($result);
+ }
+
+ /**
+ * Sort a directory listing.
+ *
+ * @param array $result
+ *
+ * @return array sorted listing
+ */
+ protected function sortListing(array $result)
+ {
+ $compare = function ($one, $two) {
+ return strnatcmp($one['path'], $two['path']);
+ };
+
+ usort($result, $compare);
+
+ return $result;
+ }
+
+ /**
+ * Normalize a file entry.
+ *
+ * @param string $item
+ * @param string $base
+ *
+ * @return array normalized file array
+ *
+ * @throws NotSupportedException
+ */
+ protected function normalizeObject($item, $base)
+ {
+ $systemType = $this->systemType ?: $this->detectSystemType($item);
+
+ if ($systemType === 'unix') {
+ return $this->normalizeUnixObject($item, $base);
+ } elseif ($systemType === 'windows') {
+ return $this->normalizeWindowsObject($item, $base);
+ }
+
+ throw NotSupportedException::forFtpSystemType($systemType);
+ }
+
+ /**
+ * Normalize a Unix file entry.
+ *
+ * @param string $item
+ * @param string $base
+ *
+ * @return array normalized file array
+ */
+ protected function normalizeUnixObject($item, $base)
+ {
+ $item = preg_replace('#\s+#', ' ', trim($item), 7);
+
+ if (count(explode(' ', $item, 9)) !== 9) {
+ throw new RuntimeException("Metadata can't be parsed from item '$item' , not enough parts.");
+ }
+
+ list($permissions, /* $number */, /* $owner */, /* $group */, $size, /* $month */, /* $day */, /* $time*/, $name) = explode(' ', $item, 9);
+ $type = $this->detectType($permissions);
+ $path = empty($base) ? $name : $base . $this->separator . $name;
+
+ if ($type === 'dir') {
+ return compact('type', 'path');
+ }
+
+ $permissions = $this->normalizePermissions($permissions);
+ $visibility = $permissions & 0044 ? AdapterInterface::VISIBILITY_PUBLIC : AdapterInterface::VISIBILITY_PRIVATE;
+ $size = (int) $size;
+
+ return compact('type', 'path', 'visibility', 'size');
+ }
+
+ /**
+ * Normalize a Windows/DOS file entry.
+ *
+ * @param string $item
+ * @param string $base
+ *
+ * @return array normalized file array
+ */
+ protected function normalizeWindowsObject($item, $base)
+ {
+ $item = preg_replace('#\s+#', ' ', trim($item), 3);
+
+ if (count(explode(' ', $item, 4)) !== 4) {
+ throw new RuntimeException("Metadata can't be parsed from item '$item' , not enough parts.");
+ }
+
+ list($date, $time, $size, $name) = explode(' ', $item, 4);
+ $path = empty($base) ? $name : $base . $this->separator . $name;
+
+ // Check for the correct date/time format
+ $format = strlen($date) === 8 ? 'm-d-yH:iA' : 'Y-m-dH:i';
+ $dt = DateTime::createFromFormat($format, $date . $time);
+ $timestamp = $dt ? $dt->getTimestamp() : (int) strtotime("$date $time");
+
+ if ($size === '') {
+ $type = 'dir';
+
+ return compact('type', 'path', 'timestamp');
+ }
+
+ $type = 'file';
+ $visibility = AdapterInterface::VISIBILITY_PUBLIC;
+ $size = (int) $size;
+
+ return compact('type', 'path', 'visibility', 'size', 'timestamp');
+ }
+
+ /**
+ * Get the system type from a listing item.
+ *
+ * @param string $item
+ *
+ * @return string the system type
+ */
+ protected function detectSystemType($item)
+ {
+ return preg_match('/^[0-9]{2,4}-[0-9]{2}-[0-9]{2}/', $item) ? 'windows' : 'unix';
+ }
+
+ /**
+ * Get the file type from the permissions.
+ *
+ * @param string $permissions
+ *
+ * @return string file type
+ */
+ protected function detectType($permissions)
+ {
+ return substr($permissions, 0, 1) === 'd' ? 'dir' : 'file';
+ }
+
+ /**
+ * Normalize a permissions string.
+ *
+ * @param string $permissions
+ *
+ * @return int
+ */
+ protected function normalizePermissions($permissions)
+ {
+ // remove the type identifier
+ $permissions = substr($permissions, 1);
+
+ // map the string rights to the numeric counterparts
+ $map = ['-' => '0', 'r' => '4', 'w' => '2', 'x' => '1'];
+ $permissions = strtr($permissions, $map);
+
+ // split up the permission groups
+ $parts = str_split($permissions, 3);
+
+ // convert the groups
+ $mapper = function ($part) {
+ return array_sum(str_split($part));
+ };
+
+ // get the sum of the groups
+ return array_sum(array_map($mapper, $parts));
+ }
+
+ /**
+ * Filter out dot-directories.
+ *
+ * @param array $list
+ *
+ * @return array
+ */
+ public function removeDotDirectories(array $list)
+ {
+ $filter = function ($line) {
+ if ( ! empty($line) && ! preg_match('#.* \.(\.)?$|^total#', $line)) {
+ return true;
+ }
+
+ return false;
+ };
+
+ return array_filter($list, $filter);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function has($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getSize($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getVisibility($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * Ensure a directory exists.
+ *
+ * @param string $dirname
+ */
+ public function ensureDirectory($dirname)
+ {
+ if ( ! empty($dirname) && ! $this->has($dirname)) {
+ $this->createDir($dirname, new Config());
+ }
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getConnection()
+ {
+ if ( ! $this->isConnected()) {
+ $this->disconnect();
+ $this->connect();
+ }
+
+ return $this->connection;
+ }
+
+ /**
+ * Get the public permission value.
+ *
+ * @return int
+ */
+ public function getPermPublic()
+ {
+ return $this->permPublic;
+ }
+
+ /**
+ * Get the private permission value.
+ *
+ * @return int
+ */
+ public function getPermPrivate()
+ {
+ return $this->permPrivate;
+ }
+
+ /**
+ * Disconnect on destruction.
+ */
+ public function __destruct()
+ {
+ $this->disconnect();
+ }
+
+ /**
+ * Establish a connection.
+ */
+ abstract public function connect();
+
+ /**
+ * Close the connection.
+ */
+ abstract public function disconnect();
+
+ /**
+ * Check if a connection is active.
+ *
+ * @return bool
+ */
+ abstract public function isConnected();
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Ftp.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Ftp.php
new file mode 100644
index 0000000..21b6e24
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Ftp.php
@@ -0,0 +1,505 @@
+transferMode = $mode;
+
+ return $this;
+ }
+
+ /**
+ * Set if Ssl is enabled.
+ *
+ * @param bool $ssl
+ *
+ * @return $this
+ */
+ public function setSsl($ssl)
+ {
+ $this->ssl = (bool) $ssl;
+
+ return $this;
+ }
+
+ /**
+ * Set if passive mode should be used.
+ *
+ * @param bool $passive
+ */
+ public function setPassive($passive = true)
+ {
+ $this->passive = $passive;
+ }
+
+ /**
+ * @param bool $ignorePassiveAddress
+ */
+ public function setIgnorePassiveAddress($ignorePassiveAddress)
+ {
+ $this->ignorePassiveAddress = $ignorePassiveAddress;
+ }
+
+ /**
+ * @param bool $recurseManually
+ */
+ public function setRecurseManually($recurseManually)
+ {
+ $this->recurseManually = $recurseManually;
+ }
+
+ /**
+ * Connect to the FTP server.
+ */
+ public function connect()
+ {
+ if ($this->ssl) {
+ $this->connection = ftp_ssl_connect($this->getHost(), $this->getPort(), $this->getTimeout());
+ } else {
+ $this->connection = ftp_connect($this->getHost(), $this->getPort(), $this->getTimeout());
+ }
+
+ if ( ! $this->connection) {
+ throw new RuntimeException('Could not connect to host: ' . $this->getHost() . ', port:' . $this->getPort());
+ }
+
+ $this->login();
+ $this->setConnectionPassiveMode();
+ $this->setConnectionRoot();
+ }
+
+ /**
+ * Set the connections to passive mode.
+ *
+ * @throws RuntimeException
+ */
+ protected function setConnectionPassiveMode()
+ {
+ if (is_bool($this->ignorePassiveAddress) && defined('FTP_USEPASVADDRESS')) {
+ ftp_set_option($this->connection, FTP_USEPASVADDRESS, ! $this->ignorePassiveAddress);
+ }
+
+ if ( ! ftp_pasv($this->connection, $this->passive)) {
+ throw new RuntimeException(
+ 'Could not set passive mode for connection: ' . $this->getHost() . '::' . $this->getPort()
+ );
+ }
+ }
+
+ /**
+ * Set the connection root.
+ */
+ protected function setConnectionRoot()
+ {
+ $root = $this->getRoot();
+ $connection = $this->connection;
+
+ if (empty($root) === false && ! ftp_chdir($connection, $root)) {
+ throw new RuntimeException('Root is invalid or does not exist: ' . $this->getRoot());
+ }
+
+ // Store absolute path for further reference.
+ // This is needed when creating directories and
+ // initial root was a relative path, else the root
+ // would be relative to the chdir'd path.
+ $this->root = ftp_pwd($connection);
+ }
+
+ /**
+ * Login.
+ *
+ * @throws RuntimeException
+ */
+ protected function login()
+ {
+ set_error_handler(
+ function () {
+ }
+ );
+ $isLoggedIn = ftp_login($this->connection, $this->getUsername(), $this->getPassword());
+ restore_error_handler();
+
+ if ( ! $isLoggedIn) {
+ $this->disconnect();
+ throw new RuntimeException(
+ 'Could not login with connection: ' . $this->getHost() . '::' . $this->getPort(
+ ) . ', username: ' . $this->getUsername()
+ );
+ }
+ }
+
+ /**
+ * Disconnect from the FTP server.
+ */
+ public function disconnect()
+ {
+ if ($this->isConnected()) {
+ ftp_close($this->connection);
+ }
+
+ $this->connection = null;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function write($path, $contents, Config $config)
+ {
+ $stream = fopen('php://temp', 'w+b');
+ fwrite($stream, $contents);
+ rewind($stream);
+ $result = $this->writeStream($path, $stream, $config);
+ fclose($stream);
+
+ if ($result === false) {
+ return false;
+ }
+
+ $result['contents'] = $contents;
+ $result['mimetype'] = Util::guessMimeType($path, $contents);
+
+ return $result;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function writeStream($path, $resource, Config $config)
+ {
+ $this->ensureDirectory(Util::dirname($path));
+
+ if ( ! ftp_fput($this->getConnection(), $path, $resource, $this->transferMode)) {
+ return false;
+ }
+
+ if ($visibility = $config->get('visibility')) {
+ $this->setVisibility($path, $visibility);
+ }
+
+ return compact('path', 'visibility');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function update($path, $contents, Config $config)
+ {
+ return $this->write($path, $contents, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function updateStream($path, $resource, Config $config)
+ {
+ return $this->writeStream($path, $resource, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function rename($path, $newpath)
+ {
+ return ftp_rename($this->getConnection(), $path, $newpath);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function delete($path)
+ {
+ return ftp_delete($this->getConnection(), $path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function deleteDir($dirname)
+ {
+ $connection = $this->getConnection();
+ $contents = array_reverse($this->listDirectoryContents($dirname));
+
+ foreach ($contents as $object) {
+ if ($object['type'] === 'file') {
+ if ( ! ftp_delete($connection, $object['path'])) {
+ return false;
+ }
+ } elseif ( ! ftp_rmdir($connection, $object['path'])) {
+ return false;
+ }
+ }
+
+ return ftp_rmdir($connection, $dirname);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function createDir($dirname, Config $config)
+ {
+ $connection = $this->getConnection();
+ $directories = explode('/', $dirname);
+
+ foreach ($directories as $directory) {
+ if (false === $this->createActualDirectory($directory, $connection)) {
+ $this->setConnectionRoot();
+
+ return false;
+ }
+
+ ftp_chdir($connection, $directory);
+ }
+
+ $this->setConnectionRoot();
+
+ return ['path' => $dirname];
+ }
+
+ /**
+ * Create a directory.
+ *
+ * @param string $directory
+ * @param resource $connection
+ *
+ * @return bool
+ */
+ protected function createActualDirectory($directory, $connection)
+ {
+ // List the current directory
+ $listing = ftp_nlist($connection, '.') ?: [];
+
+ foreach ($listing as $key => $item) {
+ if (preg_match('~^\./.*~', $item)) {
+ $listing[$key] = substr($item, 2);
+ }
+ }
+
+ if (in_array($directory, $listing)) {
+ return true;
+ }
+
+ return (boolean) ftp_mkdir($connection, $directory);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMetadata($path)
+ {
+ $connection = $this->getConnection();
+
+ if ($path === '') {
+ return ['type' => 'dir', 'path' => ''];
+ }
+
+ if (@ftp_chdir($connection, $path) === true) {
+ $this->setConnectionRoot();
+
+ return ['type' => 'dir', 'path' => $path];
+ }
+
+ $listing = ftp_rawlist($connection, '-A ' . str_replace('*', '\\*', $path));
+
+ if (empty($listing)) {
+ return false;
+ }
+
+ if (preg_match('/.* not found/', $listing[0])) {
+ return false;
+ }
+
+ if (preg_match('/^total [0-9]*$/', $listing[0])) {
+ array_shift($listing);
+ }
+
+ return $this->normalizeObject($listing[0], '');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMimetype($path)
+ {
+ if ( ! $metadata = $this->getMetadata($path)) {
+ return false;
+ }
+
+ $metadata['mimetype'] = MimeType::detectByFilename($path);
+
+ return $metadata;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getTimestamp($path)
+ {
+ $timestamp = ftp_mdtm($this->getConnection(), $path);
+
+ return ($timestamp !== -1) ? ['timestamp' => $timestamp] : false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function read($path)
+ {
+ if ( ! $object = $this->readStream($path)) {
+ return false;
+ }
+
+ $object['contents'] = stream_get_contents($object['stream']);
+ fclose($object['stream']);
+ unset($object['stream']);
+
+ return $object;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function readStream($path)
+ {
+ $stream = fopen('php://temp', 'w+b');
+ $result = ftp_fget($this->getConnection(), $stream, $path, $this->transferMode);
+ rewind($stream);
+
+ if ( ! $result) {
+ fclose($stream);
+
+ return false;
+ }
+
+ return compact('stream');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function setVisibility($path, $visibility)
+ {
+ $mode = $visibility === AdapterInterface::VISIBILITY_PUBLIC ? $this->getPermPublic() : $this->getPermPrivate();
+
+ if ( ! ftp_chmod($this->getConnection(), $mode, $path)) {
+ return false;
+ }
+
+ return compact('visibility');
+ }
+
+ /**
+ * @inheritdoc
+ *
+ * @param string $directory
+ */
+ protected function listDirectoryContents($directory, $recursive = true)
+ {
+ $directory = str_replace('*', '\\*', $directory);
+
+ if ($recursive && $this->recurseManually) {
+ return $this->listDirectoryContentsRecursive($directory);
+ }
+
+ $options = $recursive ? '-alnR' : '-aln';
+ $listing = ftp_rawlist($this->getConnection(), $options . ' ' . $directory);
+
+ return $listing ? $this->normalizeListing($listing, $directory) : [];
+ }
+
+ /**
+ * @inheritdoc
+ *
+ * @param string $directory
+ */
+ protected function listDirectoryContentsRecursive($directory)
+ {
+ $listing = $this->normalizeListing(ftp_rawlist($this->getConnection(), '-aln' . ' ' . $directory) ?: []);
+ $output = [];
+
+ foreach ($listing as $directory) {
+ $output[] = $directory;
+ if ($directory['type'] !== 'dir') continue;
+
+ $output = array_merge($output, $this->listDirectoryContentsRecursive($directory['path']));
+ }
+
+ return $output;
+ }
+
+ /**
+ * Check if the connection is open.
+ *
+ * @return bool
+ * @throws ErrorException
+ */
+ public function isConnected()
+ {
+ try {
+ return is_resource($this->connection) && ftp_rawlist($this->connection, '/') !== false;
+ } catch (ErrorException $e) {
+ fclose($this->connection);
+ $this->connection = null;
+
+ if (strpos($e->getMessage(), 'ftp_rawlist') === false) {
+ throw $e;
+ }
+
+ return false;
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Ftpd.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Ftpd.php
new file mode 100644
index 0000000..91d0cd8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Ftpd.php
@@ -0,0 +1,36 @@
+getConnection(), 'STAT ' . $path)) || count($object) < 3) {
+ return false;
+ }
+
+ if (substr($object[1], 0, 5) === "ftpd:") {
+ return false;
+ }
+
+ return $this->normalizeObject($object[1], '');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ protected function listDirectoryContents($directory, $recursive = true)
+ {
+ $listing = ftp_rawlist($this->getConnection(), $directory, $recursive);
+
+ if ($listing === false || ( ! empty($listing) && substr($listing[0], 0, 5) === "ftpd:")) {
+ return [];
+ }
+
+ return $this->normalizeListing($listing, $directory);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Local.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Local.php
new file mode 100644
index 0000000..fc6081e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Local.php
@@ -0,0 +1,514 @@
+ [
+ 'public' => 0644,
+ 'private' => 0600,
+ ],
+ 'dir' => [
+ 'public' => 0755,
+ 'private' => 0700,
+ ]
+ ];
+
+ /**
+ * @var string
+ */
+ protected $pathSeparator = DIRECTORY_SEPARATOR;
+
+ /**
+ * @var array
+ */
+ protected $permissionMap;
+
+ /**
+ * @var int
+ */
+ protected $writeFlags;
+ /**
+ * @var int
+ */
+ private $linkHandling;
+
+ /**
+ * Constructor.
+ *
+ * @param string $root
+ * @param int $writeFlags
+ * @param int $linkHandling
+ * @param array $permissions
+ */
+ public function __construct($root, $writeFlags = LOCK_EX, $linkHandling = self::DISALLOW_LINKS, array $permissions = [])
+ {
+ $root = is_link($root) ? realpath($root) : $root;
+ $this->permissionMap = array_replace_recursive(static::$permissions, $permissions);
+ $realRoot = $this->ensureDirectory($root);
+
+ if ( ! is_dir($realRoot) || ! is_readable($realRoot)) {
+ throw new LogicException('The root path ' . $root . ' is not readable.');
+ }
+
+ $this->setPathPrefix($realRoot);
+ $this->writeFlags = $writeFlags;
+ $this->linkHandling = $linkHandling;
+ }
+
+ /**
+ * Ensure the root directory exists.
+ *
+ * @param string $root root directory path
+ *
+ * @return string real path to root
+ *
+ * @throws Exception in case the root directory can not be created
+ */
+ protected function ensureDirectory($root)
+ {
+ if ( ! is_dir($root)) {
+ $umask = umask(0);
+ @mkdir($root, $this->permissionMap['dir']['public'], true);
+ umask($umask);
+
+ if ( ! is_dir($root)) {
+ throw new Exception(sprintf('Impossible to create the root directory "%s".', $root));
+ }
+ }
+
+ return realpath($root);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function has($path)
+ {
+ $location = $this->applyPathPrefix($path);
+
+ return file_exists($location);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function write($path, $contents, Config $config)
+ {
+ $location = $this->applyPathPrefix($path);
+ $this->ensureDirectory(dirname($location));
+
+ if (($size = file_put_contents($location, $contents, $this->writeFlags)) === false) {
+ return false;
+ }
+
+ $type = 'file';
+ $result = compact('contents', 'type', 'size', 'path');
+
+ if ($visibility = $config->get('visibility')) {
+ $result['visibility'] = $visibility;
+ $this->setVisibility($path, $visibility);
+ }
+
+ return $result;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function writeStream($path, $resource, Config $config)
+ {
+ $location = $this->applyPathPrefix($path);
+ $this->ensureDirectory(dirname($location));
+ $stream = fopen($location, 'w+b');
+
+ if ( ! $stream) {
+ return false;
+ }
+
+ stream_copy_to_stream($resource, $stream);
+
+ if ( ! fclose($stream)) {
+ return false;
+ }
+
+ if ($visibility = $config->get('visibility')) {
+ $this->setVisibility($path, $visibility);
+ }
+
+ return compact('path', 'visibility');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function readStream($path)
+ {
+ $location = $this->applyPathPrefix($path);
+ $stream = fopen($location, 'rb');
+
+ return compact('stream', 'path');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function updateStream($path, $resource, Config $config)
+ {
+ return $this->writeStream($path, $resource, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function update($path, $contents, Config $config)
+ {
+ $location = $this->applyPathPrefix($path);
+ $mimetype = Util::guessMimeType($path, $contents);
+ $size = file_put_contents($location, $contents, $this->writeFlags);
+
+ if ($size === false) {
+ return false;
+ }
+
+ return compact('path', 'size', 'contents', 'mimetype');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function read($path)
+ {
+ $location = $this->applyPathPrefix($path);
+ $contents = file_get_contents($location);
+
+ if ($contents === false) {
+ return false;
+ }
+
+ return compact('contents', 'path');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function rename($path, $newpath)
+ {
+ $location = $this->applyPathPrefix($path);
+ $destination = $this->applyPathPrefix($newpath);
+ $parentDirectory = $this->applyPathPrefix(Util::dirname($newpath));
+ $this->ensureDirectory($parentDirectory);
+
+ return rename($location, $destination);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function copy($path, $newpath)
+ {
+ $location = $this->applyPathPrefix($path);
+ $destination = $this->applyPathPrefix($newpath);
+ $this->ensureDirectory(dirname($destination));
+
+ return copy($location, $destination);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function delete($path)
+ {
+ $location = $this->applyPathPrefix($path);
+
+ return unlink($location);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function listContents($directory = '', $recursive = false)
+ {
+ $result = [];
+ $location = $this->applyPathPrefix($directory) . $this->pathSeparator;
+
+ if ( ! is_dir($location)) {
+ return [];
+ }
+
+ $iterator = $recursive ? $this->getRecursiveDirectoryIterator($location) : $this->getDirectoryIterator($location);
+
+ foreach ($iterator as $file) {
+ $path = $this->getFilePath($file);
+
+ if (preg_match('#(^|/|\\\\)\.{1,2}$#', $path)) {
+ continue;
+ }
+
+ $result[] = $this->normalizeFileInfo($file);
+ }
+
+ return array_filter($result);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMetadata($path)
+ {
+ $location = $this->applyPathPrefix($path);
+ $info = new SplFileInfo($location);
+
+ return $this->normalizeFileInfo($info);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getSize($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMimetype($path)
+ {
+ $location = $this->applyPathPrefix($path);
+ $finfo = new Finfo(FILEINFO_MIME_TYPE);
+ $mimetype = $finfo->file($location);
+
+ if (in_array($mimetype, ['application/octet-stream', 'inode/x-empty'])) {
+ $mimetype = Util\MimeType::detectByFilename($location);
+ }
+
+ return ['mimetype' => $mimetype];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getTimestamp($path)
+ {
+ return $this->getMetadata($path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getVisibility($path)
+ {
+ $location = $this->applyPathPrefix($path);
+ clearstatcache(false, $location);
+ $permissions = octdec(substr(sprintf('%o', fileperms($location)), -4));
+ $visibility = $permissions & 0044 ? AdapterInterface::VISIBILITY_PUBLIC : AdapterInterface::VISIBILITY_PRIVATE;
+
+ return compact('visibility');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function setVisibility($path, $visibility)
+ {
+ $location = $this->applyPathPrefix($path);
+ $type = is_dir($location) ? 'dir' : 'file';
+ $success = chmod($location, $this->permissionMap[$type][$visibility]);
+
+ if ($success === false) {
+ return false;
+ }
+
+ return compact('visibility');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function createDir($dirname, Config $config)
+ {
+ $location = $this->applyPathPrefix($dirname);
+ $umask = umask(0);
+ $visibility = $config->get('visibility', 'public');
+
+ if ( ! is_dir($location) && ! mkdir($location, $this->permissionMap['dir'][$visibility], true)) {
+ $return = false;
+ } else {
+ $return = ['path' => $dirname, 'type' => 'dir'];
+ }
+
+ umask($umask);
+
+ return $return;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function deleteDir($dirname)
+ {
+ $location = $this->applyPathPrefix($dirname);
+
+ if ( ! is_dir($location)) {
+ return false;
+ }
+
+ $contents = $this->getRecursiveDirectoryIterator($location, RecursiveIteratorIterator::CHILD_FIRST);
+
+ /** @var SplFileInfo $file */
+ foreach ($contents as $file) {
+ $this->guardAgainstUnreadableFileInfo($file);
+ $this->deleteFileInfoObject($file);
+ }
+
+ return rmdir($location);
+ }
+
+ /**
+ * @param SplFileInfo $file
+ */
+ protected function deleteFileInfoObject(SplFileInfo $file)
+ {
+ switch ($file->getType()) {
+ case 'dir':
+ rmdir($file->getRealPath());
+ break;
+ case 'link':
+ unlink($file->getPathname());
+ break;
+ default:
+ unlink($file->getRealPath());
+ }
+ }
+
+ /**
+ * Normalize the file info.
+ *
+ * @param SplFileInfo $file
+ *
+ * @return array
+ */
+ protected function normalizeFileInfo(SplFileInfo $file)
+ {
+ if ( ! $file->isLink()) {
+ return $this->mapFileInfo($file);
+ }
+
+ if ($this->linkHandling & self::DISALLOW_LINKS) {
+ throw NotSupportedException::forLink($file);
+ }
+ }
+
+ /**
+ * Get the normalized path from a SplFileInfo object.
+ *
+ * @param SplFileInfo $file
+ *
+ * @return string
+ */
+ protected function getFilePath(SplFileInfo $file)
+ {
+ $location = $file->getPathname();
+ $path = $this->removePathPrefix($location);
+
+ return trim(str_replace('\\', '/', $path), '/');
+ }
+
+ /**
+ * @param string $path
+ * @param int $mode
+ *
+ * @return RecursiveIteratorIterator
+ */
+ protected function getRecursiveDirectoryIterator($path, $mode = RecursiveIteratorIterator::SELF_FIRST)
+ {
+ return new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS),
+ $mode
+ );
+ }
+
+ /**
+ * @param string $path
+ *
+ * @return DirectoryIterator
+ */
+ protected function getDirectoryIterator($path)
+ {
+ $iterator = new DirectoryIterator($path);
+
+ return $iterator;
+ }
+
+ /**
+ * @param SplFileInfo $file
+ *
+ * @return array
+ */
+ protected function mapFileInfo(SplFileInfo $file)
+ {
+ $normalized = [
+ 'type' => $file->getType(),
+ 'path' => $this->getFilePath($file),
+ ];
+
+ $normalized['timestamp'] = $file->getMTime();
+
+ if ($normalized['type'] === 'file') {
+ $normalized['size'] = $file->getSize();
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function applyPathPrefix($path)
+ {
+ $prefixedPath = parent::applyPathPrefix($path);
+
+ return str_replace('/', DIRECTORY_SEPARATOR, $prefixedPath);
+ }
+
+ /**
+ * @param SplFileInfo $file
+ *
+ * @throws UnreadableFileException
+ */
+ protected function guardAgainstUnreadableFileInfo(SplFileInfo $file)
+ {
+ if ( ! $file->isReadable()) {
+ throw UnreadableFileException::forFileInfo($file);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/NullAdapter.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/NullAdapter.php
new file mode 100644
index 0000000..2527087
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/NullAdapter.php
@@ -0,0 +1,144 @@
+get('visibility')) {
+ $result['visibility'] = $visibility;
+ }
+
+ return $result;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function update($path, $contents, Config $config)
+ {
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function read($path)
+ {
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function rename($path, $newpath)
+ {
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function delete($path)
+ {
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function listContents($directory = '', $recursive = false)
+ {
+ return [];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMetadata($path)
+ {
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getSize($path)
+ {
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMimetype($path)
+ {
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getTimestamp($path)
+ {
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getVisibility($path)
+ {
+ return false;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function setVisibility($path, $visibility)
+ {
+ return compact('visibility');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function createDir($dirname, Config $config)
+ {
+ return ['path' => $dirname, 'type' => 'dir'];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function deleteDir($dirname)
+ {
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php
new file mode 100644
index 0000000..fc0a747
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php
@@ -0,0 +1,33 @@
+readStream($path);
+
+ if ($response === false || ! is_resource($response['stream'])) {
+ return false;
+ }
+
+ $result = $this->writeStream($newpath, $response['stream'], new Config());
+
+ if ($result !== false && is_resource($response['stream'])) {
+ fclose($response['stream']);
+ }
+
+ return $result !== false;
+ }
+
+ // Required abstract method
+
+ /**
+ * @param string $path
+ */
+ abstract public function readStream($path);
+
+ /**
+ * @param string $path
+ */
+ abstract public function writeStream($path, $resource, Config $config);
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php
new file mode 100644
index 0000000..2b31c01
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php
@@ -0,0 +1,44 @@
+read($path)) {
+ return false;
+ }
+
+ $stream = fopen('php://temp', 'w+b');
+ fwrite($stream, $data['contents']);
+ rewind($stream);
+ $data['stream'] = $stream;
+ unset($data['contents']);
+
+ return $data;
+ }
+
+ /**
+ * Reads a file.
+ *
+ * @param string $path
+ *
+ * @return array|false
+ *
+ * @see League\Flysystem\ReadInterface::read()
+ */
+ abstract public function read($path);
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php
new file mode 100644
index 0000000..8042496
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php
@@ -0,0 +1,9 @@
+stream($path, $resource, $config, 'write');
+ }
+
+ /**
+ * Update a file using a stream.
+ *
+ * @param string $path
+ * @param resource $resource
+ * @param Config $config Config object or visibility setting
+ *
+ * @return mixed false of file metadata
+ */
+ public function updateStream($path, $resource, Config $config)
+ {
+ return $this->stream($path, $resource, $config, 'update');
+ }
+
+ // Required abstract methods
+ abstract public function write($pash, $contents, Config $config);
+ abstract public function update($pash, $contents, Config $config);
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/SynologyFtp.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/SynologyFtp.php
new file mode 100644
index 0000000..fe0d344
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Adapter/SynologyFtp.php
@@ -0,0 +1,8 @@
+settings = $settings;
+ }
+
+ /**
+ * Get a setting.
+ *
+ * @param string $key
+ * @param mixed $default
+ *
+ * @return mixed config setting or default when not found
+ */
+ public function get($key, $default = null)
+ {
+ if ( ! array_key_exists($key, $this->settings)) {
+ return $this->getDefault($key, $default);
+ }
+
+ return $this->settings[$key];
+ }
+
+ /**
+ * Check if an item exists by key.
+ *
+ * @param string $key
+ *
+ * @return bool
+ */
+ public function has($key)
+ {
+ return array_key_exists($key, $this->settings);
+ }
+
+ /**
+ * Try to retrieve a default setting from a config fallback.
+ *
+ * @param string $key
+ * @param mixed $default
+ *
+ * @return mixed config setting or default when not found
+ */
+ protected function getDefault($key, $default)
+ {
+ if ( ! $this->fallback) {
+ return $default;
+ }
+
+ return $this->fallback->get($key, $default);
+ }
+
+ /**
+ * Set a setting.
+ *
+ * @param string $key
+ * @param mixed $value
+ *
+ * @return $this
+ */
+ public function set($key, $value)
+ {
+ $this->settings[$key] = $value;
+
+ return $this;
+ }
+
+ /**
+ * Set the fallback.
+ *
+ * @param Config $fallback
+ *
+ * @return $this
+ */
+ public function setFallback(Config $fallback)
+ {
+ $this->fallback = $fallback;
+
+ return $this;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/ConfigAwareTrait.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/ConfigAwareTrait.php
new file mode 100644
index 0000000..202d605
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/ConfigAwareTrait.php
@@ -0,0 +1,49 @@
+config = $config ? Util::ensureConfig($config) : new Config;
+ }
+
+ /**
+ * Get the Config.
+ *
+ * @return Config config object
+ */
+ public function getConfig()
+ {
+ return $this->config;
+ }
+
+ /**
+ * Convert a config array to a Config object with the correct fallback.
+ *
+ * @param array $config
+ *
+ * @return Config
+ */
+ protected function prepareConfig(array $config)
+ {
+ $config = new Config($config);
+ $config->setFallback($this->getConfig());
+
+ return $config;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Directory.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Directory.php
new file mode 100644
index 0000000..6ba744b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Directory.php
@@ -0,0 +1,28 @@
+filesystem->deleteDir($this->path);
+ }
+
+ /**
+ * List the directory contents.
+ *
+ * @param bool $recursive
+ *
+ * @return array|bool directory contents or false
+ */
+ public function getContents($recursive = false)
+ {
+ return $this->filesystem->listContents($this->path, $recursive);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Exception.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Exception.php
new file mode 100644
index 0000000..d4a9907
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Exception.php
@@ -0,0 +1,8 @@
+filesystem->has($this->path);
+ }
+
+ /**
+ * Read the file.
+ *
+ * @return string file contents
+ */
+ public function read()
+ {
+ return $this->filesystem->read($this->path);
+ }
+
+ /**
+ * Read the file as a stream.
+ *
+ * @return resource file stream
+ */
+ public function readStream()
+ {
+ return $this->filesystem->readStream($this->path);
+ }
+
+ /**
+ * Write the new file.
+ *
+ * @param string $content
+ *
+ * @return bool success boolean
+ */
+ public function write($content)
+ {
+ return $this->filesystem->write($this->path, $content);
+ }
+
+ /**
+ * Write the new file using a stream.
+ *
+ * @param resource $resource
+ *
+ * @return bool success boolean
+ */
+ public function writeStream($resource)
+ {
+ return $this->filesystem->writeStream($this->path, $resource);
+ }
+
+ /**
+ * Update the file contents.
+ *
+ * @param string $content
+ *
+ * @return bool success boolean
+ */
+ public function update($content)
+ {
+ return $this->filesystem->update($this->path, $content);
+ }
+
+ /**
+ * Update the file contents with a stream.
+ *
+ * @param resource $resource
+ *
+ * @return bool success boolean
+ */
+ public function updateStream($resource)
+ {
+ return $this->filesystem->updateStream($this->path, $resource);
+ }
+
+ /**
+ * Create the file or update if exists.
+ *
+ * @param string $content
+ *
+ * @return bool success boolean
+ */
+ public function put($content)
+ {
+ return $this->filesystem->put($this->path, $content);
+ }
+
+ /**
+ * Create the file or update if exists using a stream.
+ *
+ * @param resource $resource
+ *
+ * @return bool success boolean
+ */
+ public function putStream($resource)
+ {
+ return $this->filesystem->putStream($this->path, $resource);
+ }
+
+ /**
+ * Rename the file.
+ *
+ * @param string $newpath
+ *
+ * @return bool success boolean
+ */
+ public function rename($newpath)
+ {
+ if ($this->filesystem->rename($this->path, $newpath)) {
+ $this->path = $newpath;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Copy the file.
+ *
+ * @param string $newpath
+ *
+ * @return File|false new file or false
+ */
+ public function copy($newpath)
+ {
+ if ($this->filesystem->copy($this->path, $newpath)) {
+ return new File($this->filesystem, $newpath);
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the file's timestamp.
+ *
+ * @return int unix timestamp
+ */
+ public function getTimestamp()
+ {
+ return $this->filesystem->getTimestamp($this->path);
+ }
+
+ /**
+ * Get the file's mimetype.
+ *
+ * @return string mimetime
+ */
+ public function getMimetype()
+ {
+ return $this->filesystem->getMimetype($this->path);
+ }
+
+ /**
+ * Get the file's visibility.
+ *
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->filesystem->getVisibility($this->path);
+ }
+
+ /**
+ * Get the file's metadata.
+ *
+ * @return array
+ */
+ public function getMetadata()
+ {
+ return $this->filesystem->getMetadata($this->path);
+ }
+
+ /**
+ * Get the file size.
+ *
+ * @return int file size
+ */
+ public function getSize()
+ {
+ return $this->filesystem->getSize($this->path);
+ }
+
+ /**
+ * Delete the file.
+ *
+ * @return bool success boolean
+ */
+ public function delete()
+ {
+ return $this->filesystem->delete($this->path);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/FileExistsException.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/FileExistsException.php
new file mode 100644
index 0000000..c82e20c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/FileExistsException.php
@@ -0,0 +1,37 @@
+path = $path;
+
+ parent::__construct('File already exists at path: ' . $this->getPath(), $code, $previous);
+ }
+
+ /**
+ * Get the path which was found.
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return $this->path;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/FileNotFoundException.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/FileNotFoundException.php
new file mode 100644
index 0000000..989df69
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/FileNotFoundException.php
@@ -0,0 +1,37 @@
+path = $path;
+
+ parent::__construct('File not found at path: ' . $this->getPath(), $code, $previous);
+ }
+
+ /**
+ * Get the path which was not found.
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return $this->path;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Filesystem.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Filesystem.php
new file mode 100644
index 0000000..7a85fde
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Filesystem.php
@@ -0,0 +1,404 @@
+adapter = $adapter;
+ $this->setConfig($config);
+ }
+
+ /**
+ * Get the Adapter.
+ *
+ * @return AdapterInterface adapter
+ */
+ public function getAdapter()
+ {
+ return $this->adapter;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function has($path)
+ {
+ $path = Util::normalizePath($path);
+
+ return strlen($path) === 0 ? false : (bool) $this->getAdapter()->has($path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function write($path, $contents, array $config = [])
+ {
+ $path = Util::normalizePath($path);
+ $this->assertAbsent($path);
+ $config = $this->prepareConfig($config);
+
+ return (bool) $this->getAdapter()->write($path, $contents, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function writeStream($path, $resource, array $config = [])
+ {
+ if ( ! is_resource($resource)) {
+ throw new InvalidArgumentException(__METHOD__ . ' expects argument #2 to be a valid resource.');
+ }
+
+ $path = Util::normalizePath($path);
+ $this->assertAbsent($path);
+ $config = $this->prepareConfig($config);
+
+ Util::rewindStream($resource);
+
+ return (bool) $this->getAdapter()->writeStream($path, $resource, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function put($path, $contents, array $config = [])
+ {
+ $path = Util::normalizePath($path);
+ $config = $this->prepareConfig($config);
+
+ if ($this->has($path)) {
+ return (bool) $this->getAdapter()->update($path, $contents, $config);
+ }
+
+ return (bool) $this->getAdapter()->write($path, $contents, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function putStream($path, $resource, array $config = [])
+ {
+ if ( ! is_resource($resource)) {
+ throw new InvalidArgumentException(__METHOD__ . ' expects argument #2 to be a valid resource.');
+ }
+
+ $path = Util::normalizePath($path);
+ $config = $this->prepareConfig($config);
+ Util::rewindStream($resource);
+
+ if ($this->has($path)) {
+ return (bool) $this->getAdapter()->updateStream($path, $resource, $config);
+ }
+
+ return (bool) $this->getAdapter()->writeStream($path, $resource, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function readAndDelete($path)
+ {
+ $path = Util::normalizePath($path);
+ $this->assertPresent($path);
+ $contents = $this->read($path);
+
+ if ($contents === false) {
+ return false;
+ }
+
+ $this->delete($path);
+
+ return $contents;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function update($path, $contents, array $config = [])
+ {
+ $path = Util::normalizePath($path);
+ $config = $this->prepareConfig($config);
+
+ $this->assertPresent($path);
+
+ return (bool) $this->getAdapter()->update($path, $contents, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function updateStream($path, $resource, array $config = [])
+ {
+ if ( ! is_resource($resource)) {
+ throw new InvalidArgumentException(__METHOD__ . ' expects argument #2 to be a valid resource.');
+ }
+
+ $path = Util::normalizePath($path);
+ $config = $this->prepareConfig($config);
+ $this->assertPresent($path);
+ Util::rewindStream($resource);
+
+ return (bool) $this->getAdapter()->updateStream($path, $resource, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function read($path)
+ {
+ $path = Util::normalizePath($path);
+ $this->assertPresent($path);
+
+ if ( ! ($object = $this->getAdapter()->read($path))) {
+ return false;
+ }
+
+ return $object['contents'];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function readStream($path)
+ {
+ $path = Util::normalizePath($path);
+ $this->assertPresent($path);
+
+ if ( ! $object = $this->getAdapter()->readStream($path)) {
+ return false;
+ }
+
+ return $object['stream'];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function rename($path, $newpath)
+ {
+ $path = Util::normalizePath($path);
+ $newpath = Util::normalizePath($newpath);
+ $this->assertPresent($path);
+ $this->assertAbsent($newpath);
+
+ return (bool) $this->getAdapter()->rename($path, $newpath);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function copy($path, $newpath)
+ {
+ $path = Util::normalizePath($path);
+ $newpath = Util::normalizePath($newpath);
+ $this->assertPresent($path);
+ $this->assertAbsent($newpath);
+
+ return $this->getAdapter()->copy($path, $newpath);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function delete($path)
+ {
+ $path = Util::normalizePath($path);
+ $this->assertPresent($path);
+
+ return $this->getAdapter()->delete($path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function deleteDir($dirname)
+ {
+ $dirname = Util::normalizePath($dirname);
+
+ if ($dirname === '') {
+ throw new RootViolationException('Root directories can not be deleted.');
+ }
+
+ return (bool) $this->getAdapter()->deleteDir($dirname);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function createDir($dirname, array $config = [])
+ {
+ $dirname = Util::normalizePath($dirname);
+ $config = $this->prepareConfig($config);
+
+ return (bool) $this->getAdapter()->createDir($dirname, $config);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function listContents($directory = '', $recursive = false)
+ {
+ $directory = Util::normalizePath($directory);
+ $contents = $this->getAdapter()->listContents($directory, $recursive);
+
+ return (new ContentListingFormatter($directory, $recursive))->formatListing($contents);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMimetype($path)
+ {
+ $path = Util::normalizePath($path);
+ $this->assertPresent($path);
+
+ if ( ! $object = $this->getAdapter()->getMimetype($path)) {
+ return false;
+ }
+
+ return $object['mimetype'];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getTimestamp($path)
+ {
+ $path = Util::normalizePath($path);
+ $this->assertPresent($path);
+
+ if ( ! $object = $this->getAdapter()->getTimestamp($path)) {
+ return false;
+ }
+
+ return $object['timestamp'];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getVisibility($path)
+ {
+ $path = Util::normalizePath($path);
+ $this->assertPresent($path);
+
+ if (($object = $this->getAdapter()->getVisibility($path)) === false) {
+ return false;
+ }
+
+ return $object['visibility'];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getSize($path)
+ {
+ $path = Util::normalizePath($path);
+
+ if (($object = $this->getAdapter()->getSize($path)) === false || ! isset($object['size'])) {
+ return false;
+ }
+
+ return (int) $object['size'];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function setVisibility($path, $visibility)
+ {
+ $path = Util::normalizePath($path);
+
+ return (bool) $this->getAdapter()->setVisibility($path, $visibility);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getMetadata($path)
+ {
+ $path = Util::normalizePath($path);
+ $this->assertPresent($path);
+
+ return $this->getAdapter()->getMetadata($path);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get($path, Handler $handler = null)
+ {
+ $path = Util::normalizePath($path);
+
+ if ( ! $handler) {
+ $metadata = $this->getMetadata($path);
+ $handler = $metadata['type'] === 'file' ? new File($this, $path) : new Directory($this, $path);
+ }
+
+ $handler->setPath($path);
+ $handler->setFilesystem($this);
+
+ return $handler;
+ }
+
+ /**
+ * Assert a file is present.
+ *
+ * @param string $path path to file
+ *
+ * @throws FileNotFoundException
+ *
+ * @return void
+ */
+ public function assertPresent($path)
+ {
+ if ($this->config->get('disable_asserts', false) === false && ! $this->has($path)) {
+ throw new FileNotFoundException($path);
+ }
+ }
+
+ /**
+ * Assert a file is absent.
+ *
+ * @param string $path path to file
+ *
+ * @throws FileExistsException
+ *
+ * @return void
+ */
+ public function assertAbsent($path)
+ {
+ if ($this->config->get('disable_asserts', false) === false && $this->has($path)) {
+ throw new FileExistsException($path);
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/FilesystemInterface.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/FilesystemInterface.php
new file mode 100644
index 0000000..d631443
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/FilesystemInterface.php
@@ -0,0 +1,276 @@
+path = $path;
+ $this->filesystem = $filesystem;
+ }
+
+ /**
+ * Check whether the entree is a directory.
+ *
+ * @return bool
+ */
+ public function isDir()
+ {
+ return $this->getType() === 'dir';
+ }
+
+ /**
+ * Check whether the entree is a file.
+ *
+ * @return bool
+ */
+ public function isFile()
+ {
+ return $this->getType() === 'file';
+ }
+
+ /**
+ * Retrieve the entree type (file|dir).
+ *
+ * @return string file or dir
+ */
+ public function getType()
+ {
+ $metadata = $this->filesystem->getMetadata($this->path);
+
+ return $metadata['type'];
+ }
+
+ /**
+ * Set the Filesystem object.
+ *
+ * @param FilesystemInterface $filesystem
+ *
+ * @return $this
+ */
+ public function setFilesystem(FilesystemInterface $filesystem)
+ {
+ $this->filesystem = $filesystem;
+
+ return $this;
+ }
+
+ /**
+ * Retrieve the Filesystem object.
+ *
+ * @return FilesystemInterface
+ */
+ public function getFilesystem()
+ {
+ return $this->filesystem;
+ }
+
+ /**
+ * Set the entree path.
+ *
+ * @param string $path
+ *
+ * @return $this
+ */
+ public function setPath($path)
+ {
+ $this->path = $path;
+
+ return $this;
+ }
+
+ /**
+ * Retrieve the entree path.
+ *
+ * @return string path
+ */
+ public function getPath()
+ {
+ return $this->path;
+ }
+
+ /**
+ * Plugins pass-through.
+ *
+ * @param string $method
+ * @param array $arguments
+ *
+ * @return mixed
+ */
+ public function __call($method, array $arguments)
+ {
+ array_unshift($arguments, $this->path);
+ $callback = [$this->filesystem, $method];
+
+ try {
+ return call_user_func_array($callback, $arguments);
+ } catch (BadMethodCallException $e) {
+ throw new BadMethodCallException(
+ 'Call to undefined method '
+ . get_called_class()
+ . '::' . $method
+ );
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/MountManager.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/MountManager.php
new file mode 100644
index 0000000..e95f822
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/MountManager.php
@@ -0,0 +1,271 @@
+mountFilesystems($filesystems);
+ }
+
+ /**
+ * Mount filesystems.
+ *
+ * @param array $filesystems [:prefix => Filesystem,]
+ *
+ * @return $this
+ */
+ public function mountFilesystems(array $filesystems)
+ {
+ foreach ($filesystems as $prefix => $filesystem) {
+ $this->mountFilesystem($prefix, $filesystem);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Mount filesystems.
+ *
+ * @param string $prefix
+ * @param FilesystemInterface $filesystem
+ *
+ * @return $this
+ */
+ public function mountFilesystem($prefix, FilesystemInterface $filesystem)
+ {
+ if ( ! is_string($prefix)) {
+ throw new InvalidArgumentException(__METHOD__ . ' expects argument #1 to be a string.');
+ }
+
+ $this->filesystems[$prefix] = $filesystem;
+
+ return $this;
+ }
+
+ /**
+ * Get the filesystem with the corresponding prefix.
+ *
+ * @param string $prefix
+ *
+ * @throws LogicException
+ *
+ * @return FilesystemInterface
+ */
+ public function getFilesystem($prefix)
+ {
+ if ( ! isset($this->filesystems[$prefix])) {
+ throw new LogicException('No filesystem mounted with prefix ' . $prefix);
+ }
+
+ return $this->filesystems[$prefix];
+ }
+
+ /**
+ * Retrieve the prefix from an arguments array.
+ *
+ * @param array $arguments
+ *
+ * @return array [:prefix, :arguments]
+ */
+ public function filterPrefix(array $arguments)
+ {
+ if (empty($arguments)) {
+ throw new LogicException('At least one argument needed');
+ }
+
+ $path = array_shift($arguments);
+
+ if ( ! is_string($path)) {
+ throw new InvalidArgumentException('First argument should be a string');
+ }
+
+ if ( ! preg_match('#^.+\:\/\/.*#', $path)) {
+ throw new InvalidArgumentException('No prefix detected in path: ' . $path);
+ }
+
+ list($prefix, $path) = explode('://', $path, 2);
+ array_unshift($arguments, $path);
+
+ return [$prefix, $arguments];
+ }
+
+ /**
+ * @param string $directory
+ * @param bool $recursive
+ *
+ * @return array
+ */
+ public function listContents($directory = '', $recursive = false)
+ {
+ list($prefix, $arguments) = $this->filterPrefix([$directory]);
+ $filesystem = $this->getFilesystem($prefix);
+ $directory = array_shift($arguments);
+ $result = $filesystem->listContents($directory, $recursive);
+
+ foreach ($result as &$file) {
+ $file['filesystem'] = $prefix;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Call forwarder.
+ *
+ * @param string $method
+ * @param array $arguments
+ *
+ * @return mixed
+ */
+ public function __call($method, $arguments)
+ {
+ list($prefix, $arguments) = $this->filterPrefix($arguments);
+
+ return $this->invokePluginOnFilesystem($method, $arguments, $prefix);
+ }
+
+ /**
+ * @param $from
+ * @param $to
+ * @param array $config
+ *
+ * @return bool
+ */
+ public function copy($from, $to, array $config = [])
+ {
+ list($prefixFrom, $arguments) = $this->filterPrefix([$from]);
+
+ $fsFrom = $this->getFilesystem($prefixFrom);
+ $buffer = call_user_func_array([$fsFrom, 'readStream'], $arguments);
+
+ if ($buffer === false) {
+ return false;
+ }
+
+ list($prefixTo, $arguments) = $this->filterPrefix([$to]);
+
+ $fsTo = $this->getFilesystem($prefixTo);
+ $result = call_user_func_array([$fsTo, 'writeStream'], array_merge($arguments, [$buffer, $config]));
+
+ if (is_resource($buffer)) {
+ fclose($buffer);
+ }
+
+ return $result;
+ }
+
+ /**
+ * List with plugin adapter.
+ *
+ * @param array $keys
+ * @param string $directory
+ * @param bool $recursive
+ */
+ public function listWith(array $keys = [], $directory = '', $recursive = false)
+ {
+ list($prefix, $arguments) = $this->filterPrefix([$directory]);
+ $directory = $arguments[0];
+ $arguments = [$keys, $directory, $recursive];
+
+ return $this->invokePluginOnFilesystem('listWith', $arguments, $prefix);
+ }
+
+ /**
+ * Move a file.
+ *
+ * @param $from
+ * @param $to
+ * @param array $config
+ *
+ * @return bool
+ */
+ public function move($from, $to, array $config = [])
+ {
+ $copied = $this->copy($from, $to, $config);
+
+ if ($copied) {
+ return $this->delete($from);
+ }
+
+ return false;
+ }
+
+ /**
+ * Invoke a plugin on a filesystem mounted on a given prefix.
+ *
+ * @param $method
+ * @param $arguments
+ * @param $prefix
+ *
+ * @return mixed
+ */
+ public function invokePluginOnFilesystem($method, $arguments, $prefix)
+ {
+ $filesystem = $this->getFilesystem($prefix);
+
+ try {
+ return $this->invokePlugin($method, $arguments, $filesystem);
+ } catch (PluginNotFoundException $e) {
+ // Let it pass, it's ok, don't panic.
+ }
+
+ $callback = [$filesystem, $method];
+
+ return call_user_func_array($callback, $arguments);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/NotSupportedException.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/NotSupportedException.php
new file mode 100644
index 0000000..08f47f7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/NotSupportedException.php
@@ -0,0 +1,37 @@
+getPathname());
+ }
+
+ /**
+ * Create a new exception for a link.
+ *
+ * @param string $systemType
+ *
+ * @return static
+ */
+ public static function forFtpSystemType($systemType)
+ {
+ $message = "The FTP system type '$systemType' is currently not supported.";
+
+ return new static($message);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/AbstractPlugin.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/AbstractPlugin.php
new file mode 100644
index 0000000..0d56789
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/AbstractPlugin.php
@@ -0,0 +1,24 @@
+filesystem = $filesystem;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/EmptyDir.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/EmptyDir.php
new file mode 100644
index 0000000..9502333
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/EmptyDir.php
@@ -0,0 +1,34 @@
+filesystem->listContents($dirname, false);
+
+ foreach ($listing as $item) {
+ if ($item['type'] === 'dir') {
+ $this->filesystem->deleteDir($item['path']);
+ } else {
+ $this->filesystem->delete($item['path']);
+ }
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ForcedCopy.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ForcedCopy.php
new file mode 100644
index 0000000..d2fc379
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ForcedCopy.php
@@ -0,0 +1,42 @@
+filesystem->delete($newpath);
+ } catch (FileNotFoundException $e) {
+ // The destination path does not exist. That's ok.
+ $deleted = true;
+ }
+
+ if ($deleted) {
+ return $this->filesystem->copy($path, $newpath);
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ForcedRename.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ForcedRename.php
new file mode 100644
index 0000000..7c081b6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ForcedRename.php
@@ -0,0 +1,42 @@
+filesystem->delete($newpath);
+ } catch (FileNotFoundException $e) {
+ // The destination path does not exist. That's ok.
+ $deleted = true;
+ }
+
+ if ($deleted) {
+ return $this->filesystem->rename($path, $newpath);
+ }
+
+ return false;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/GetWithMetadata.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/GetWithMetadata.php
new file mode 100644
index 0000000..781dd24
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/GetWithMetadata.php
@@ -0,0 +1,49 @@
+filesystem->getMetadata($path);
+
+ if ( ! $object) {
+ return false;
+ }
+
+ $keys = array_diff($metadata, array_keys($object));
+
+ foreach ($keys as $key) {
+ if ( ! method_exists($this->filesystem, $method = 'get' . ucfirst($key))) {
+ throw new InvalidArgumentException('Could not fetch metadata: ' . $key);
+ }
+
+ $object[$key] = $this->filesystem->{$method}($path);
+ }
+
+ return $object;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ListFiles.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ListFiles.php
new file mode 100644
index 0000000..9669fe7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ListFiles.php
@@ -0,0 +1,35 @@
+filesystem->listContents($directory, $recursive);
+
+ $filter = function ($object) {
+ return $object['type'] === 'file';
+ };
+
+ return array_values(array_filter($contents, $filter));
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ListPaths.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ListPaths.php
new file mode 100644
index 0000000..514bdf0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ListPaths.php
@@ -0,0 +1,36 @@
+filesystem->listContents($directory, $recursive);
+
+ foreach ($contents as $object) {
+ $result[] = $object['path'];
+ }
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ListWith.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ListWith.php
new file mode 100644
index 0000000..7d773e6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/ListWith.php
@@ -0,0 +1,60 @@
+filesystem->listContents($directory, $recursive);
+
+ foreach ($contents as $index => $object) {
+ if ($object['type'] === 'file') {
+ $missingKeys = array_diff($keys, array_keys($object));
+ $contents[$index] = array_reduce($missingKeys, [$this, 'getMetadataByName'], $object);
+ }
+ }
+
+ return $contents;
+ }
+
+ /**
+ * Get a meta-data value by key name.
+ *
+ * @param array $object
+ * @param $key
+ *
+ * @return array
+ */
+ protected function getMetadataByName(array $object, $key)
+ {
+ $method = 'get' . ucfirst($key);
+
+ if ( ! method_exists($this->filesystem, $method)) {
+ throw new \InvalidArgumentException('Could not get meta-data for key: ' . $key);
+ }
+
+ $object[$key] = $this->filesystem->{$method}($object['path']);
+
+ return $object;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/PluggableTrait.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/PluggableTrait.php
new file mode 100644
index 0000000..a63734f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/PluggableTrait.php
@@ -0,0 +1,92 @@
+plugins[$plugin->getMethod()] = $plugin;
+
+ return $this;
+ }
+
+ /**
+ * Find a specific plugin.
+ *
+ * @param string $method
+ *
+ * @throws LogicException
+ *
+ * @return PluginInterface $plugin
+ */
+ protected function findPlugin($method)
+ {
+ if ( ! isset($this->plugins[$method])) {
+ throw new PluginNotFoundException('Plugin not found for method: ' . $method);
+ }
+
+ if ( ! method_exists($this->plugins[$method], 'handle')) {
+ throw new LogicException(get_class($this->plugins[$method]) . ' does not have a handle method.');
+ }
+
+ return $this->plugins[$method];
+ }
+
+ /**
+ * Invoke a plugin by method name.
+ *
+ * @param string $method
+ * @param array $arguments
+ *
+ * @return mixed
+ */
+ protected function invokePlugin($method, array $arguments, FilesystemInterface $filesystem)
+ {
+ $plugin = $this->findPlugin($method);
+ $plugin->setFilesystem($filesystem);
+ $callback = [$plugin, 'handle'];
+
+ return call_user_func_array($callback, $arguments);
+ }
+
+ /**
+ * Plugins pass-through.
+ *
+ * @param string $method
+ * @param array $arguments
+ *
+ * @throws BadMethodCallException
+ *
+ * @return mixed
+ */
+ public function __call($method, array $arguments)
+ {
+ try {
+ return $this->invokePlugin($method, $arguments, $this);
+ } catch (PluginNotFoundException $e) {
+ throw new BadMethodCallException(
+ 'Call to undefined method '
+ . get_class($this)
+ . '::' . $method
+ );
+ }
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/PluginNotFoundException.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/PluginNotFoundException.php
new file mode 100644
index 0000000..fd1d7e7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Plugin/PluginNotFoundException.php
@@ -0,0 +1,10 @@
+getRealPath()
+ )
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util.php
new file mode 100644
index 0000000..977ffa9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util.php
@@ -0,0 +1,288 @@
+ $to) {
+ if ( ! isset($object[$from])) {
+ continue;
+ }
+
+ $result[$to] = $object[$from];
+ }
+
+ return $result;
+ }
+
+ /**
+ * Normalize path.
+ *
+ * @param string $path
+ *
+ * @throws LogicException
+ *
+ * @return string
+ */
+ public static function normalizePath($path)
+ {
+ // Remove any kind of funky unicode whitespace
+ $normalized = preg_replace('#\p{C}+|^\./#u', '', $path);
+ $normalized = static::normalizeRelativePath($normalized);
+
+ if (preg_match('#/\.{2}|^\.{2}/|^\.{2}$#', $normalized)) {
+ throw new LogicException(
+ 'Path is outside of the defined root, path: [' . $path . '], resolved: [' . $normalized . ']'
+ );
+ }
+
+ $normalized = preg_replace('#\\\{2,}#', '\\', trim($normalized, '\\'));
+ $normalized = preg_replace('#/{2,}#', '/', trim($normalized, '/'));
+
+ return $normalized;
+ }
+
+ /**
+ * Normalize relative directories in a path.
+ *
+ * @param string $path
+ *
+ * @return string
+ */
+ public static function normalizeRelativePath($path)
+ {
+ // Path remove self referring paths ("/./").
+ $path = preg_replace('#/\.(?=/)|^\./|(/|^)\./?$#', '', $path);
+
+ // Regex for resolving relative paths
+ $regex = '#/*[^/\.]+/\.\.#Uu';
+
+ while (preg_match($regex, $path)) {
+ $path = preg_replace($regex, '', $path);
+ }
+
+ return $path;
+ }
+
+ /**
+ * Normalize prefix.
+ *
+ * @param string $prefix
+ * @param string $separator
+ *
+ * @return string normalized path
+ */
+ public static function normalizePrefix($prefix, $separator)
+ {
+ return rtrim($prefix, $separator) . $separator;
+ }
+
+ /**
+ * Get content size.
+ *
+ * @param string $contents
+ *
+ * @return int content size
+ */
+ public static function contentSize($contents)
+ {
+ return defined('MB_OVERLOAD_STRING') ? mb_strlen($contents, '8bit') : strlen($contents);
+ }
+
+ /**
+ * Guess MIME Type based on the path of the file and it's content.
+ *
+ * @param string $path
+ * @param string|resource $content
+ *
+ * @return string|null MIME Type or NULL if no extension detected
+ */
+ public static function guessMimeType($path, $content)
+ {
+ $mimeType = MimeType::detectByContent($content);
+
+ if ( ! (empty($mimeType) || in_array($mimeType, ['application/x-empty', 'text/plain', 'text/x-asm']))) {
+ return $mimeType;
+ }
+
+ return MimeType::detectByFilename($path);
+ }
+
+ /**
+ * Emulate directories.
+ *
+ * @param array $listing
+ *
+ * @return array listing with emulated directories
+ */
+ public static function emulateDirectories(array $listing)
+ {
+ $directories = [];
+ $listedDirectories = [];
+
+ foreach ($listing as $object) {
+ list($directories, $listedDirectories) = static::emulateObjectDirectories(
+ $object,
+ $directories,
+ $listedDirectories
+ );
+ }
+
+ $directories = array_diff(array_unique($directories), array_unique($listedDirectories));
+
+ foreach ($directories as $directory) {
+ $listing[] = static::pathinfo($directory) + ['type' => 'dir'];
+ }
+
+ return $listing;
+ }
+
+ /**
+ * Ensure a Config instance.
+ *
+ * @param null|array|Config $config
+ *
+ * @return Config config instance
+ *
+ * @throw LogicException
+ */
+ public static function ensureConfig($config)
+ {
+ if ($config === null) {
+ return new Config();
+ }
+
+ if ($config instanceof Config) {
+ return $config;
+ }
+
+ if (is_array($config)) {
+ return new Config($config);
+ }
+
+ throw new LogicException('A config should either be an array or a Flysystem\Config object.');
+ }
+
+ /**
+ * Rewind a stream.
+ *
+ * @param resource $resource
+ */
+ public static function rewindStream($resource)
+ {
+ if (ftell($resource) !== 0 && static::isSeekableStream($resource)) {
+ rewind($resource);
+ }
+ }
+
+ public static function isSeekableStream($resource)
+ {
+ $metadata = stream_get_meta_data($resource);
+
+ return $metadata['seekable'];
+ }
+
+ /**
+ * Get the size of a stream.
+ *
+ * @param resource $resource
+ *
+ * @return int stream size
+ */
+ public static function getStreamSize($resource)
+ {
+ $stat = fstat($resource);
+
+ return $stat['size'];
+ }
+
+ /**
+ * Emulate the directories of a single object.
+ *
+ * @param array $object
+ * @param array $directories
+ * @param array $listedDirectories
+ *
+ * @return array
+ */
+ protected static function emulateObjectDirectories(array $object, array $directories, array $listedDirectories)
+ {
+ if ($object['type'] === 'dir') {
+ $listedDirectories[] = $object['path'];
+ }
+
+ if (empty($object['dirname'])) {
+ return [$directories, $listedDirectories];
+ }
+
+ $parent = $object['dirname'];
+
+ while ( ! empty($parent) && ! in_array($parent, $directories)) {
+ $directories[] = $parent;
+ $parent = static::dirname($parent);
+ }
+
+ if (isset($object['type']) && $object['type'] === 'dir') {
+ $listedDirectories[] = $object['path'];
+
+ return [$directories, $listedDirectories];
+ }
+
+ return [$directories, $listedDirectories];
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util/ContentListingFormatter.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util/ContentListingFormatter.php
new file mode 100644
index 0000000..db453c4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util/ContentListingFormatter.php
@@ -0,0 +1,119 @@
+directory = $directory;
+ $this->recursive = $recursive;
+ }
+
+ /**
+ * Format contents listing.
+ *
+ * @param array $listing
+ *
+ * @return array
+ */
+ public function formatListing(array $listing)
+ {
+ $listing = array_values(
+ array_map(
+ [$this, 'addPathInfo'],
+ array_filter($listing, [$this, 'isEntryOutOfScope'])
+ )
+ );
+
+ return $this->sortListing($listing);
+ }
+
+ private function addPathInfo(array $entry)
+ {
+ return $entry + Util::pathinfo($entry['path']);
+ }
+
+ /**
+ * Determine if the entry is out of scope.
+ *
+ * @param array $entry
+ *
+ * @return bool
+ */
+ private function isEntryOutOfScope(array $entry)
+ {
+ if (empty($entry['path']) && $entry['path'] !== '0') {
+ return false;
+ }
+
+ if ($this->recursive) {
+ return $this->residesInDirectory($entry);
+ }
+
+ return $this->isDirectChild($entry);
+ }
+
+ /**
+ * Check if the entry resides within the parent directory.
+ *
+ * @param $entry
+ *
+ * @return bool
+ */
+ private function residesInDirectory(array $entry)
+ {
+ if ($this->directory === '') {
+ return true;
+ }
+
+ return strpos($entry['path'], $this->directory . '/') === 0;
+ }
+
+ /**
+ * Check if the entry is a direct child of the directory.
+ *
+ * @param $entry
+ *
+ * @return bool
+ */
+ private function isDirectChild(array $entry)
+ {
+ return Util::dirname($entry['path']) === $this->directory;
+ }
+
+ /**
+ * @param array $listing
+ *
+ * @return array
+ */
+ private function sortListing(array $listing)
+ {
+ usort(
+ $listing,
+ function ($a, $b) {
+ return strcasecmp($a['path'], $b['path']);
+ }
+ );
+
+ return $listing;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util/MimeType.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util/MimeType.php
new file mode 100644
index 0000000..cb0d1da
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util/MimeType.php
@@ -0,0 +1,213 @@
+buffer($content);
+
+ return $mimeType ?: null;
+ }
+
+ /**
+ * Detects MIME Type based on file extension.
+ *
+ * @param string $extension
+ *
+ * @return string|null MIME Type or NULL if no extension detected
+ */
+ public static function detectByFileExtension($extension)
+ {
+ static $extensionToMimeTypeMap;
+
+ if (! $extensionToMimeTypeMap) {
+ $extensionToMimeTypeMap = static::getExtensionToMimeTypeMap();
+ }
+
+ if (isset($extensionToMimeTypeMap[$extension])) {
+ return $extensionToMimeTypeMap[$extension];
+ }
+
+ return 'text/plain';
+ }
+
+ /**
+ * @param string $filename
+ *
+ * @return string
+ */
+ public static function detectByFilename($filename)
+ {
+ $extension = pathinfo($filename, PATHINFO_EXTENSION);
+
+ return empty($extension) ? 'text/plain' : static::detectByFileExtension($extension);
+ }
+
+ /**
+ * @return array Map of file extension to MIME Type
+ */
+ public static function getExtensionToMimeTypeMap()
+ {
+ return [
+ 'hqx' => 'application/mac-binhex40',
+ 'cpt' => 'application/mac-compactpro',
+ 'csv' => 'text/x-comma-separated-values',
+ 'bin' => 'application/octet-stream',
+ 'dms' => 'application/octet-stream',
+ 'lha' => 'application/octet-stream',
+ 'lzh' => 'application/octet-stream',
+ 'exe' => 'application/octet-stream',
+ 'class' => 'application/octet-stream',
+ 'psd' => 'application/x-photoshop',
+ 'so' => 'application/octet-stream',
+ 'sea' => 'application/octet-stream',
+ 'dll' => 'application/octet-stream',
+ 'oda' => 'application/oda',
+ 'pdf' => 'application/pdf',
+ 'ai' => 'application/pdf',
+ 'eps' => 'application/postscript',
+ 'ps' => 'application/postscript',
+ 'smi' => 'application/smil',
+ 'smil' => 'application/smil',
+ 'mif' => 'application/vnd.mif',
+ 'xls' => 'application/vnd.ms-excel',
+ 'ppt' => 'application/powerpoint',
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+ 'wbxml' => 'application/wbxml',
+ 'wmlc' => 'application/wmlc',
+ 'dcr' => 'application/x-director',
+ 'dir' => 'application/x-director',
+ 'dxr' => 'application/x-director',
+ 'dvi' => 'application/x-dvi',
+ 'gtar' => 'application/x-gtar',
+ 'gz' => 'application/x-gzip',
+ 'gzip' => 'application/x-gzip',
+ 'php' => 'application/x-httpd-php',
+ 'php4' => 'application/x-httpd-php',
+ 'php3' => 'application/x-httpd-php',
+ 'phtml' => 'application/x-httpd-php',
+ 'phps' => 'application/x-httpd-php-source',
+ 'js' => 'application/javascript',
+ 'swf' => 'application/x-shockwave-flash',
+ 'sit' => 'application/x-stuffit',
+ 'tar' => 'application/x-tar',
+ 'tgz' => 'application/x-tar',
+ 'z' => 'application/x-compress',
+ 'xhtml' => 'application/xhtml+xml',
+ 'xht' => 'application/xhtml+xml',
+ 'zip' => 'application/x-zip',
+ 'rar' => 'application/x-rar',
+ 'mid' => 'audio/midi',
+ 'midi' => 'audio/midi',
+ 'mpga' => 'audio/mpeg',
+ 'mp2' => 'audio/mpeg',
+ 'mp3' => 'audio/mpeg',
+ 'aif' => 'audio/x-aiff',
+ 'aiff' => 'audio/x-aiff',
+ 'aifc' => 'audio/x-aiff',
+ 'ram' => 'audio/x-pn-realaudio',
+ 'rm' => 'audio/x-pn-realaudio',
+ 'rpm' => 'audio/x-pn-realaudio-plugin',
+ 'ra' => 'audio/x-realaudio',
+ 'rv' => 'video/vnd.rn-realvideo',
+ 'wav' => 'audio/x-wav',
+ 'jpg' => 'image/jpeg',
+ 'jpeg' => 'image/jpeg',
+ 'jpe' => 'image/jpeg',
+ 'png' => 'image/png',
+ 'gif' => 'image/gif',
+ 'bmp' => 'image/bmp',
+ 'tiff' => 'image/tiff',
+ 'tif' => 'image/tiff',
+ 'svg' => 'image/svg+xml',
+ 'css' => 'text/css',
+ 'html' => 'text/html',
+ 'htm' => 'text/html',
+ 'shtml' => 'text/html',
+ 'txt' => 'text/plain',
+ 'text' => 'text/plain',
+ 'log' => 'text/plain',
+ 'rtx' => 'text/richtext',
+ 'rtf' => 'text/rtf',
+ 'xml' => 'application/xml',
+ 'xsl' => 'application/xml',
+ 'mpeg' => 'video/mpeg',
+ 'mpg' => 'video/mpeg',
+ 'mpe' => 'video/mpeg',
+ 'qt' => 'video/quicktime',
+ 'mov' => 'video/quicktime',
+ 'avi' => 'video/x-msvideo',
+ 'movie' => 'video/x-sgi-movie',
+ 'doc' => 'application/msword',
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'dot' => 'application/msword',
+ 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'word' => 'application/msword',
+ 'xl' => 'application/excel',
+ 'eml' => 'message/rfc822',
+ 'json' => 'application/json',
+ 'pem' => 'application/x-x509-user-cert',
+ 'p10' => 'application/x-pkcs10',
+ 'p12' => 'application/x-pkcs12',
+ 'p7a' => 'application/x-pkcs7-signature',
+ 'p7c' => 'application/pkcs7-mime',
+ 'p7m' => 'application/pkcs7-mime',
+ 'p7r' => 'application/x-pkcs7-certreqresp',
+ 'p7s' => 'application/pkcs7-signature',
+ 'crt' => 'application/x-x509-ca-cert',
+ 'crl' => 'application/pkix-crl',
+ 'der' => 'application/x-x509-ca-cert',
+ 'kdb' => 'application/octet-stream',
+ 'pgp' => 'application/pgp',
+ 'gpg' => 'application/gpg-keys',
+ 'sst' => 'application/octet-stream',
+ 'csr' => 'application/octet-stream',
+ 'rsa' => 'application/x-pkcs7',
+ 'cer' => 'application/pkix-cert',
+ '3g2' => 'video/3gpp2',
+ '3gp' => 'video/3gp',
+ 'mp4' => 'video/mp4',
+ 'm4a' => 'audio/x-m4a',
+ 'f4v' => 'video/mp4',
+ 'webm' => 'video/webm',
+ 'aac' => 'audio/x-acc',
+ 'm4u' => 'application/vnd.mpegurl',
+ 'm3u' => 'text/plain',
+ 'xspf' => 'application/xspf+xml',
+ 'vlc' => 'application/videolan',
+ 'wmv' => 'video/x-ms-wmv',
+ 'au' => 'audio/x-au',
+ 'ac3' => 'audio/ac3',
+ 'flac' => 'audio/x-flac',
+ 'ogg' => 'audio/ogg',
+ 'kmz' => 'application/vnd.google-earth.kmz',
+ 'kml' => 'application/vnd.google-earth.kml+xml',
+ 'ics' => 'text/calendar',
+ 'zsh' => 'text/x-scriptzsh',
+ '7zip' => 'application/x-7z-compressed',
+ 'cdr' => 'application/cdr',
+ 'wma' => 'audio/x-ms-wma',
+ 'jar' => 'application/java-archive',
+ ];
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util/StreamHasher.php b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util/StreamHasher.php
new file mode 100644
index 0000000..8dc96ca
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/league/flysystem/src/Util/StreamHasher.php
@@ -0,0 +1,36 @@
+algo = $algo;
+ }
+
+ /**
+ * @param $resource
+ *
+ * @return string
+ */
+ public function hash($resource)
+ {
+ rewind($resource);
+ $context = hash_init($this->algo);
+ hash_update_stream($context, $resource);
+ fclose($resource);
+
+ return hash_final($context);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/BlobRestProxy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/BlobRestProxy.php
new file mode 100644
index 0000000..5794c64
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/BlobRestProxy.php
@@ -0,0 +1,2433 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Models\ServiceProperties;
+use WindowsAzure\Common\Internal\ServiceRestProxy;
+use WindowsAzure\Blob\Internal\IBlob;
+use WindowsAzure\Blob\Models\BlobServiceOptions;
+use WindowsAzure\Common\Models\GetServicePropertiesResult;
+use WindowsAzure\Blob\Models\ListContainersOptions;
+use WindowsAzure\Blob\Models\ListContainersResult;
+use WindowsAzure\Blob\Models\CreateContainerOptions;
+use WindowsAzure\Blob\Models\GetContainerPropertiesResult;
+use WindowsAzure\Blob\Models\GetContainerACLResult;
+use WindowsAzure\Blob\Models\SetContainerMetadataOptions;
+use WindowsAzure\Blob\Models\DeleteContainerOptions;
+use WindowsAzure\Blob\Models\ListBlobsOptions;
+use WindowsAzure\Blob\Models\ListBlobsResult;
+use WindowsAzure\Blob\Models\BlobType;
+use WindowsAzure\Blob\Models\Block;
+use WindowsAzure\Blob\Models\CreateBlobOptions;
+use WindowsAzure\Blob\Models\BlobProperties;
+use WindowsAzure\Blob\Models\GetBlobPropertiesOptions;
+use WindowsAzure\Blob\Models\GetBlobPropertiesResult;
+use WindowsAzure\Blob\Models\SetBlobPropertiesOptions;
+use WindowsAzure\Blob\Models\SetBlobPropertiesResult;
+use WindowsAzure\Blob\Models\GetBlobMetadataOptions;
+use WindowsAzure\Blob\Models\GetBlobMetadataResult;
+use WindowsAzure\Blob\Models\SetBlobMetadataOptions;
+use WindowsAzure\Blob\Models\SetBlobMetadataResult;
+use WindowsAzure\Blob\Models\GetBlobOptions;
+use WindowsAzure\Blob\Models\GetBlobResult;
+use WindowsAzure\Blob\Models\DeleteBlobOptions;
+use WindowsAzure\Blob\Models\LeaseMode;
+use WindowsAzure\Blob\Models\AcquireLeaseOptions;
+use WindowsAzure\Blob\Models\AcquireLeaseResult;
+use WindowsAzure\Blob\Models\CreateBlobPagesOptions;
+use WindowsAzure\Blob\Models\CreateBlobPagesResult;
+use WindowsAzure\Blob\Models\PageWriteOption;
+use WindowsAzure\Blob\Models\ListPageBlobRangesOptions;
+use WindowsAzure\Blob\Models\ListPageBlobRangesResult;
+use WindowsAzure\Blob\Models\CreateBlobBlockOptions;
+use WindowsAzure\Blob\Models\CommitBlobBlocksOptions;
+use WindowsAzure\Blob\Models\BlockList;
+use WindowsAzure\Blob\Models\ListBlobBlocksOptions;
+use WindowsAzure\Blob\Models\ListBlobBlocksResult;
+use WindowsAzure\Blob\Models\CopyBlobOptions;
+use WindowsAzure\Blob\Models\CreateBlobSnapshotOptions;
+use WindowsAzure\Blob\Models\CreateBlobSnapshotResult;
+use WindowsAzure\Blob\Models\PageRange;
+use WindowsAzure\Blob\Models\CopyBlobResult;
+use WindowsAzure\Blob\Models\BreakLeaseResult;
+
+/**
+ * This class constructs HTTP requests and receive HTTP responses for blob
+ * service layer.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BlobRestProxy extends ServiceRestProxy implements IBlob
+{
+ /**
+ * @var int Defaults to 32MB
+ */
+ private $_SingleBlobUploadThresholdInBytes = 33554432 ;
+
+ /**
+ * Get the value for SingleBlobUploadThresholdInBytes
+ *
+ * @return int
+ */
+ public function getSingleBlobUploadThresholdInBytes()
+ {
+ return $this->_SingleBlobUploadThresholdInBytes;
+ }
+
+ /**
+ * Set the value for SingleBlobUploadThresholdInBytes, Max 64MB
+ *
+ * @param int $val The max size to send as a single blob block
+ *
+ * @return none
+ */
+ public function setSingleBlobUploadThresholdInBytes($val)
+ {
+ if ($val > 67108864) {
+ // What should the proper action here be?
+ $val = 67108864;
+ } elseif ($val < 1) {
+ // another spot that could use looking at
+ $val = 33554432;
+ }
+ $this->_SingleBlobUploadThresholdInBytes = $val;
+ }
+
+ /**
+ * Gets the copy blob source name with specified parameters.
+ *
+ * @param string $containerName The name of the container.
+ * @param string $blobName The name of the blob.
+ * @param Models\CopyBlobOptions $options The optional parameters.
+ *
+ * @return string
+ */
+ private function _getCopyBlobSourceName($containerName, $blobName, $options)
+ {
+ $sourceName = '/' . $this->getAccountName();
+ $sourceName .= '/' . $this->_createPath($containerName, $blobName);
+
+ if (!is_null($options->getSourceSnapshot())) {
+ $sourceName .= '?snapshot=' . $options->getSourceSnapshot();
+ }
+
+ return $sourceName;
+ }
+
+ /**
+ * Creates URI path for blob.
+ *
+ * @param string $container The container name.
+ * @param string $blob The blob name.
+ *
+ * @return string
+ */
+ private function _createPath($container, $blob)
+ {
+ $encodedBlob = urlencode($blob);
+ // Unencode the forward slashes to match what the server expects.
+ $encodedBlob = str_replace('%2F', '/', $encodedBlob);
+ // Unencode the backward slashes to match what the server expects.
+ $encodedBlob = str_replace('%5C', '/', $encodedBlob);
+ // Re-encode the spaces (encoded as space) to the % encoding.
+ $encodedBlob = str_replace('+', '%20', $encodedBlob);
+
+ // Empty container means accessing default container
+ if (empty($container)) {
+ return $encodedBlob;
+ } else {
+ return $container . '/' . $encodedBlob;
+ }
+ }
+
+ /**
+ * Creates GetBlobPropertiesResult from headers array.
+ *
+ * @param array $headers The HTTP response headers array.
+ *
+ * @return GetBlobPropertiesResult
+ */
+ private function _getBlobPropertiesResultFromResponse($headers)
+ {
+ $result = new GetBlobPropertiesResult();
+ $properties = new BlobProperties();
+ $d = $headers[Resources::LAST_MODIFIED];
+ $bType = $headers[Resources::X_MS_BLOB_TYPE];
+ $cLength = intval($headers[Resources::CONTENT_LENGTH]);
+ $lStatus = Utilities::tryGetValue($headers, Resources::X_MS_LEASE_STATUS);
+ $cType = Utilities::tryGetValue($headers, Resources::CONTENT_TYPE);
+ $cMD5 = Utilities::tryGetValue($headers, Resources::CONTENT_MD5);
+ $cEncoding = Utilities::tryGetValue($headers, Resources::CONTENT_ENCODING);
+ $cLanguage = Utilities::tryGetValue($headers, Resources::CONTENT_LANGUAGE);
+ $cControl = Utilities::tryGetValue($headers, Resources::CACHE_CONTROL);
+ $etag = $headers[Resources::ETAG];
+ $metadata = $this->getMetadataArray($headers);
+
+ if (array_key_exists(Resources::X_MS_BLOB_SEQUENCE_NUMBER, $headers)) {
+ $sNumber = intval($headers[Resources::X_MS_BLOB_SEQUENCE_NUMBER]);
+ $properties->setSequenceNumber($sNumber);
+ }
+
+ $properties->setBlobType($bType);
+ $properties->setCacheControl($cControl);
+ $properties->setContentEncoding($cEncoding);
+ $properties->setContentLanguage($cLanguage);
+ $properties->setContentLength($cLength);
+ $properties->setContentMD5($cMD5);
+ $properties->setContentType($cType);
+ $properties->setETag($etag);
+ $properties->setLastModified(Utilities::rfc1123ToDateTime($d));
+ $properties->setLeaseStatus($lStatus);
+
+ $result->setProperties($properties);
+ $result->setMetadata($metadata);
+
+ return $result;
+ }
+
+ /**
+ * Helper method for getContainerProperties and getContainerMetadata.
+ *
+ * @param string $container The container name.
+ * @param Models\BlobServiceOptions $options The optional parameters.
+ * @param string $operation The operation string. Should be
+ * 'metadata' to get metadata.
+ *
+ * @return Models\GetContainerPropertiesResult
+ */
+ private function _getContainerPropertiesImpl($container, $options = null,
+ $operation = null
+ ) {
+ Validate::isString($container, 'container');
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $path = $container;
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new BlobServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'container'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ $operation
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ $result = new GetContainerPropertiesResult();
+ $metadata = $this->getMetadataArray($response->getHeader());
+ $date = $response->getHeader(Resources::LAST_MODIFIED);
+ $date = Utilities::rfc1123ToDateTime($date);
+ $result->setETag($response->getHeader(Resources::ETAG));
+ $result->setMetadata($metadata);
+ $result->setLastModified($date);
+
+ return $result;
+ }
+
+ /**
+ * Adds optional create blob headers.
+ *
+ * @param CreateBlobOptions $options The optional parameters.
+ * @param array $headers The HTTP request headers.
+ *
+ * @return array
+ */
+ private function _addCreateBlobOptionalHeaders($options, $headers)
+ {
+ $contentType = $options->getContentType();
+ $metadata = $options->getMetadata();
+ $blobContentType = $options->getBlobContentType();
+ $blobContentEncoding = $options->getBlobContentEncoding();
+ $blobContentLanguage = $options->getBlobContentLanguage();
+ $blobContentMD5 = $options->getBlobContentMD5();
+ $blobCacheControl = $options->getBlobCacheControl();
+ $leaseId = $options->getLeaseId();
+
+ if (!is_null($contentType)) {
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ $options->getContentType()
+ );
+ } else {
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ Resources::BINARY_FILE_TYPE
+ );
+ }
+ $headers = $this->addMetadataHeaders($headers, $metadata);
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_ENCODING,
+ $options->getContentEncoding()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_LANGUAGE,
+ $options->getContentLanguage()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_MD5,
+ $options->getContentMD5()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CACHE_CONTROL,
+ $options->getCacheControl()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $leaseId
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_TYPE,
+ $blobContentType
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_ENCODING,
+ $blobContentEncoding
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_LANGUAGE,
+ $blobContentLanguage
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_MD5,
+ $blobContentMD5
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CACHE_CONTROL,
+ $blobCacheControl
+ );
+
+ return $headers;
+ }
+
+ /**
+ * Adds Range header to the headers array.
+ *
+ * @param array $headers The HTTP request headers.
+ * @param integer $start The start byte.
+ * @param integer $end The end byte.
+ *
+ * @return array
+ */
+ private function _addOptionalRangeHeader($headers, $start, $end)
+ {
+ if (!is_null($start) || !is_null($end)) {
+ $range = $start . '-' . $end;
+ $rangeValue = 'bytes=' . $range;
+ $this->addOptionalHeader($headers, Resources::RANGE, $rangeValue);
+ }
+
+ return $headers;
+ }
+
+ /**
+ * Does the actual work for leasing a blob.
+ *
+ * @param string $leaseAction The lease action string.
+ * @param string $container The container name.
+ * @param string $blob The blob to lease name.
+ * @param string $leaseId The existing lease id.
+ * @param BlobServiceOptions $options The optional parameters.
+ * @param AccessCondition $accessCondition The access conditions.
+ *
+ * @return array
+ */
+ private function _putLeaseImpl($leaseAction, $container, $blob, $leaseId,
+ $options, $accessCondition = null
+ ) {
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+ Validate::isString($container, 'container');
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::EMPTY_STRING;
+
+ switch ($leaseAction) {
+ case LeaseMode::ACQUIRE_ACTION:
+ $statusCode = Resources::STATUS_CREATED;
+ break;
+ case LeaseMode::RENEW_ACTION:
+ $statusCode = Resources::STATUS_OK;
+ break;
+ case LeaseMode::RELEASE_ACTION:
+ $statusCode = Resources::STATUS_OK;
+ break;
+ case LeaseMode::BREAK_ACTION:
+ $statusCode = Resources::STATUS_ACCEPTED;
+ break;
+ default:
+ throw new \Exception(Resources::NOT_IMPLEMENTED_MSG);
+ }
+
+ if (!is_null($options)) {
+ $options = new BlobServiceOptions();
+ }
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $accessCondition
+ );
+
+ $this->addOptionalHeader($headers, Resources::X_MS_LEASE_ID, $leaseId);
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ACTION,
+ $leaseAction
+ );
+ $this->addOptionalQueryParam($queryParams, Resources::QP_COMP, 'lease');
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ return $response->getHeader();
+ }
+
+ /**
+ * Does actual work for create and clear blob pages.
+ *
+ * @param string $action Either clear or create.
+ * @param string $container The container name.
+ * @param string $blob The blob name.
+ * @param PageRange $range The page ranges.
+ * @param string|resource $content The content stream.
+ * @param CreateBlobPagesOptions $options The optional parameters.
+ *
+ * @return CreateBlobPagesResult
+ */
+ private function _updatePageBlobPagesImpl($action, $container, $blob, $range,
+ $content, $options = null
+ ) {
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+ Validate::isString($container, 'container');
+ Validate::isTrue(
+ $range instanceof PageRange,
+ sprintf(
+ Resources::INVALID_PARAM_MSG,
+ 'range',
+ get_class(new PageRange())
+ )
+ );
+ Validate::isTrue(
+ is_string($content) || is_resource($content),
+ sprintf(Resources::INVALID_PARAM_MSG, 'content', 'string|resource')
+ );
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_CREATED;
+ // If read file failed for any reason it will throw an exception.
+ $body = is_resource($content) ? stream_get_contents($content) : $content;
+
+ if (is_null($options)) {
+ $options = new CreateBlobPagesOptions();
+ }
+
+ $headers = $this->_addOptionalRangeHeader(
+ $headers, $range->getStart(), $range->getEnd()
+ );
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_MD5,
+ $options->getContentMD5()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_PAGE_WRITE,
+ $action
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ Resources::URL_ENCODED_CONTENT_TYPE
+ );
+ $this->addOptionalQueryParam($queryParams, Resources::QP_COMP, 'page');
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+
+ return CreateBlobPagesResult::create($response->getHeader());
+ }
+
+ /**
+ * Gets the properties of the Blob service.
+ *
+ * @param Models\BlobServiceOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\GetServicePropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh452239.aspx
+ */
+ public function getServiceProperties($options = null)
+ {
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $path = Resources::EMPTY_STRING;
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new BlobServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'service'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'properties'
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetServicePropertiesResult::create($parsed);
+ }
+
+ /**
+ * Sets the properties of the Blob service.
+ *
+ * It's recommended to use getServiceProperties, alter the returned object and
+ * then use setServiceProperties with this altered object.
+ *
+ * @param ServiceProperties $serviceProperties The service properties.
+ * @param Models\BlobServiceOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh452235.aspx
+ */
+ public function setServiceProperties($serviceProperties, $options = null)
+ {
+ Validate::isTrue(
+ $serviceProperties instanceof ServiceProperties,
+ Resources::INVALID_SVC_PROP_MSG
+ );
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $statusCode = Resources::STATUS_ACCEPTED;
+ $path = Resources::EMPTY_STRING;
+ $body = $serviceProperties->toXml($this->dataSerializer);
+
+ if (is_null($options)) {
+ $options = new BlobServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'service'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'properties'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ Resources::URL_ENCODED_CONTENT_TYPE
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+ /**
+ * Lists all of the containers in the given storage account.
+ *
+ * @param Models\ListContainersOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Blob\Models\ListContainersResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179352.aspx
+ */
+ public function listContainers($options = null)
+ {
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $path = Resources::EMPTY_STRING;
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new ListContainersOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'list'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_PREFIX,
+ $options->getPrefix()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_MARKER,
+ $options->getMarker()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_MAX_RESULTS,
+ $options->getMaxResults()
+ );
+ $isInclude = $options->getIncludeMetadata();
+ $isInclude = $isInclude ? 'metadata' : null;
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_INCLUDE,
+ $isInclude
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListContainersResult::create($parsed);
+ }
+
+ /**
+ * Creates a new container in the given storage account.
+ *
+ * @param string $container The container name.
+ * @param Models\CreateContainerOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179468.aspx
+ */
+ public function createContainer($container, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::notNullOrEmpty($container, 'container');
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array(Resources::QP_REST_TYPE => 'container');
+ $path = $container;
+ $statusCode = Resources::STATUS_CREATED;
+
+ if (is_null($options)) {
+ $options = new CreateContainerOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $metadata = $options->getMetadata();
+ $headers = $this->generateMetadataHeaders($metadata);
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_PUBLIC_ACCESS,
+ $options->getPublicAccess()
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ }
+
+ /**
+ * Creates a new container in the given storage account.
+ *
+ * @param string $container The container name.
+ * @param Models\DeleteContainerOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179408.aspx
+ */
+ public function deleteContainer($container, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::notNullOrEmpty($container, 'container');
+
+ $method = Resources::HTTP_DELETE;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $container;
+ $statusCode = Resources::STATUS_ACCEPTED;
+
+ if (is_null($options)) {
+ $options = new DeleteContainerOptions();
+ }
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'container'
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ }
+
+ /**
+ * Returns all properties and metadata on the container.
+ *
+ * @param string $container name
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return Models\GetContainerPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179370.aspx
+ */
+ public function getContainerProperties($container, $options = null)
+ {
+ return $this->_getContainerPropertiesImpl($container, $options);
+ }
+
+ /**
+ * Returns only user-defined metadata for the specified container.
+ *
+ * @param string $container name
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return Models\GetContainerPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691976.aspx
+ */
+ public function getContainerMetadata($container, $options = null)
+ {
+ return $this->_getContainerPropertiesImpl($container, $options, 'metadata');
+ }
+
+ /**
+ * Gets the access control list (ACL) and any container-level access policies
+ * for the container.
+ *
+ * @param string $container The container name.
+ * @param Models\BlobServiceOptions $options The optional parameters.
+ *
+ * @return Models\GetContainerAclResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179469.aspx
+ */
+ public function getContainerAcl($container, $options = null)
+ {
+ Validate::isString($container, 'container');
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $container;
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new BlobServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'container'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'acl'
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ $access = $response->getHeader(Resources::X_MS_BLOB_PUBLIC_ACCESS);
+ $etag = $response->getHeader(Resources::ETAG);
+ $modified = $response->getHeader(Resources::LAST_MODIFIED);
+ $modifiedDate = Utilities::convertToDateTime($modified);
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetContainerAclResult::create($access, $etag, $modifiedDate, $parsed);
+ }
+
+ /**
+ * Sets the ACL and any container-level access policies for the container.
+ *
+ * @param string $container name
+ * @param Models\ContainerAcl $acl access control list for container
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179391.aspx
+ */
+ public function setContainerAcl($container, $acl, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::notNullOrEmpty($acl, 'acl');
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $container;
+ $statusCode = Resources::STATUS_OK;
+ $body = $acl->toXml($this->dataSerializer);
+
+ if (is_null($options)) {
+ $options = new BlobServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'container'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'acl'
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_PUBLIC_ACCESS,
+ $acl->getPublicAccess()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ Resources::URL_ENCODED_CONTENT_TYPE
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+ /**
+ * Sets metadata headers on the container.
+ *
+ * @param string $container name
+ * @param array $metadata metadata key/value pair.
+ * @param Models\SetContainerMetadataOptions $options optional parameters
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179362.aspx
+ */
+ public function setContainerMetadata($container, $metadata, $options = null)
+ {
+ Validate::isString($container, 'container');
+ $this->validateMetadata($metadata);
+
+ $method = Resources::HTTP_PUT;
+ $headers = $this->generateMetadataHeaders($metadata);
+ $postParams = array();
+ $queryParams = array();
+ $path = $container;
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new SetContainerMetadataOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'container'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'metadata'
+ );
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers,
+ $options->getAccessCondition()
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ }
+
+ /**
+ * Lists all of the blobs in the given container.
+ *
+ * @param string $container The container name.
+ * @param Models\ListBlobsOptions $options The optional parameters.
+ *
+ * @return Models\ListBlobsResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd135734.aspx
+ */
+ public function listBlobs($container, $options = null)
+ {
+ Validate::isString($container, 'container');
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $container;
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new ListBlobsOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'container'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'list'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_PREFIX,
+ str_replace('\\', '/', $options->getPrefix())
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_MARKER,
+ $options->getMarker()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_DELIMITER,
+ $options->getDelimiter()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_MAX_RESULTS,
+ $options->getMaxResults()
+ );
+
+ $includeMetadata = $options->getIncludeMetadata();
+ $includeSnapshots = $options->getIncludeSnapshots();
+ $includeUncommittedBlobs = $options->getIncludeUncommittedBlobs();
+
+ $includeValue = $this->groupQueryValues(
+ array(
+ $includeMetadata ? 'metadata' : null,
+ $includeSnapshots ? 'snapshots' : null,
+ $includeUncommittedBlobs ? 'uncommittedblobs' : null
+ )
+ );
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_INCLUDE,
+ $includeValue
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListBlobsResult::create($parsed);
+ }
+
+ /**
+ * Creates a new page blob. Note that calling createPageBlob to create a page
+ * blob only initializes the blob.
+ * To add content to a page blob, call createBlobPages method.
+ *
+ * @param string $container The container name.
+ * @param string $blob The blob name.
+ * @param integer $length Specifies the maximum size for the
+ * page blob, up to 1 TB. The page blob size must be aligned to a 512-byte
+ * boundary.
+ * @param Models\CreateBlobOptions $options The optional parameters.
+ *
+ * @return CopyBlobResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179451.aspx
+ */
+ public function createPageBlob($container, $blob, $length, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+ Validate::isInteger($length, 'length');
+ Validate::notNull($length, 'length');
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_CREATED;
+
+ if (is_null($options)) {
+ $options = new CreateBlobOptions();
+ }
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_TYPE,
+ BlobType::PAGE_BLOB
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_LENGTH,
+ $length
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_SEQUENCE_NUMBER,
+ $options->getSequenceNumber()
+ );
+ $headers = $this->_addCreateBlobOptionalHeaders($options, $headers);
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ return CopyBlobResult::create($response->getHeader());
+ }
+
+ /**
+ * Creates a new block blob or updates the content of an existing block blob.
+ *
+ * Updating an existing block blob overwrites any existing metadata on the blob.
+ * Partial updates are not supported with createBlockBlob the content of the
+ * existing blob is overwritten with the content of the new blob. To perform a
+ * partial update of the content o f a block blob, use the createBlockList
+ * method.
+ * Note that the default content type is application/octet-stream.
+ *
+ * @param string $container The name of the container.
+ * @param string $blob The name of the blob.
+ * @param string|resource $content The content of the blob.
+ * @param Models\CreateBlobOptions $options The optional parameters.
+ *
+ * @return CopyBlobResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179451.aspx
+ */
+ public function createBlockBlob($container, $blob, $content, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+ Validate::isTrue(
+ is_string($content) || is_resource($content),
+ sprintf(Resources::INVALID_PARAM_MSG, 'content', 'string|resource')
+ );
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $bodySize = 0;
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_CREATED;
+
+ if (is_null($options)) {
+ $options = new CreateBlobOptions();
+ }
+
+ if (is_resource($content)) {
+ $cStat = fstat($content);
+ // if the resource is a remote file, $cStat will be false
+ if ($cStat) {
+ $bodySize = $cStat['size'];
+ }
+ } else {
+ $bodySize = strlen($content);
+ }
+
+ // if we have a size we can try to one shot this, else failsafe on block upload
+ if ($bodySize && $bodySize <= $this->_SingleBlobUploadThresholdInBytes) {
+ $headers = $this->_addCreateBlobOptionalHeaders($options, $headers);
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_TYPE,
+ BlobType::BLOCK_BLOB
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ // If read file failed for any reason it will throw an exception.
+ $body = is_resource($content) ? stream_get_contents($content) : $content;
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ } else {
+ // This is for large or failsafe upload
+ $end = 0;
+ $counter = 0;
+ $body = '';
+ $blockIds = array();
+ // if threshold is lower than 4mb, honor threshold, else use 4mb
+ $blockSize = ($this->_SingleBlobUploadThresholdInBytes < 4194304) ? $this->_SingleBlobUploadThresholdInBytes : 4194304;
+ while(!$end) {
+ if (is_resource($content)) {
+ $body = fread($content, $blockSize);
+ if (feof($content)) {
+ $end = 1;
+ }
+ } else {
+ if (strlen($content) <= $blockSize) {
+ $body = $content;
+ $end = 1;
+ } else {
+ $body = substr($content, 0, $blockSize);
+ $content = substr_replace($content, '', 0, $blockSize);
+ }
+ }
+ $block = new Block();
+ $block->setBlockId(base64_encode(str_pad($counter++, '0', 6)));
+ $block->setType('Uncommitted');
+ array_push($blockIds, $block);
+ $this->createBlobBlock($container, $blob, $block->getBlockId(), $body);
+ }
+ $response = $this->commitBlobBlocks($container, $blob, $blockIds, $options);
+ }
+ return CopyBlobResult::create($response->getHeader());
+ }
+
+ /**
+ * Clears a range of pages from the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\PageRange $range Can be up to the value of the
+ * blob's full size. Note that ranges must be aligned to 512 (0-511, 512-1023)
+ * @param Models\CreateBlobPagesOptions $options optional parameters
+ *
+ * @return Models\CreateBlobPagesResult.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691975.aspx
+ */
+ public function clearBlobPages($container, $blob, $range, $options = null)
+ {
+ return $this->_updatePageBlobPagesImpl(
+ PageWriteOption::CLEAR_OPTION,
+ $container,
+ $blob,
+ $range,
+ Resources::EMPTY_STRING,
+ $options
+ );
+ }
+
+ /**
+ * Creates a range of pages to a page blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\PageRange $range Can be up to 4 MB in size
+ * Note that ranges must be aligned to 512 (0-511, 512-1023)
+ * @param string $content the blob contents.
+ * @param Models\CreateBlobPagesOptions $options optional parameters
+ *
+ * @return Models\CreateBlobPagesResult.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691975.aspx
+ */
+ public function createBlobPages($container, $blob, $range, $content,
+ $options = null
+ ) {
+ return $this->_updatePageBlobPagesImpl(
+ PageWriteOption::UPDATE_OPTION,
+ $container,
+ $blob,
+ $range,
+ $content,
+ $options
+ );
+ }
+
+ /**
+ * Creates a new block to be committed as part of a block blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param string $blockId must be less than or equal to
+ * 64 bytes in size. For a given blob, the length of the value specified for the
+ * blockid parameter must be the same size for each block.
+ * @param string $content the blob block contents
+ * @param Models\CreateBlobBlockOptions $options optional parameters
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd135726.aspx
+ */
+ public function createBlobBlock($container, $blob, $blockId, $content,
+ $options = null
+ ) {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+ Validate::isString($blockId, 'blockId');
+ Validate::notNullOrEmpty($blockId, 'blockId');
+ Validate::isTrue(
+ is_string($content) || is_resource($content),
+ sprintf(Resources::INVALID_PARAM_MSG, 'content', 'string|resource')
+ );
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_CREATED;
+ $body = $content;
+
+ if (is_null($options)) {
+ $options = new CreateBlobBlockOptions();
+ }
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_MD5,
+ $options->getContentMD5()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ Resources::URL_ENCODED_CONTENT_TYPE
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'block'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_BLOCKID,
+ base64_encode($blockId)
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+
+ return CopyBlobResult::create($response->getHeader());
+ }
+
+ /**
+ * This method writes a blob by specifying the list of block IDs that make up the
+ * blob. In order to be written as part of a blob, a block must have been
+ * successfully written to the server in a prior createBlobBlock method.
+ *
+ * You can call Put Block List to update a blob by uploading only those blocks
+ * that have changed, then committing the new and existing blocks together.
+ * You can do this by specifying whether to commit a block from the committed
+ * block list or from the uncommitted block list, or to commit the most recently
+ * uploaded version of the block, whichever list it may belong to.
+ *
+ * @param string $container The container name.
+ * @param string $blob The blob name.
+ * @param Models\BlockList|array $blockList The block entries.
+ * @param Models\CommitBlobBlocksOptions $options The optional parameters.
+ *
+ * @return CopyBlobResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179467.aspx
+ */
+ public function commitBlobBlocks($container, $blob, $blockList, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+ Validate::isTrue(
+ $blockList instanceof BlockList || is_array($blockList),
+ sprintf(
+ Resources::INVALID_PARAM_MSG,
+ 'blockList',
+ get_class(new BlockList())
+ )
+ );
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_CREATED;
+ $isArray = is_array($blockList);
+ $blockList = $isArray ? BlockList::create($blockList) : $blockList;
+ $body = $blockList->toXml($this->dataSerializer);
+
+ if (is_null($options)) {
+ $options = new CommitBlobBlocksOptions();
+ }
+
+ $blobContentType = $options->getBlobContentType();
+ $blobContentEncoding = $options->getBlobContentEncoding();
+ $blobContentLanguage = $options->getBlobContentLanguage();
+ $blobContentMD5 = $options->getBlobContentMD5();
+ $blobCacheControl = $options->getBlobCacheControl();
+ $leaseId = $options->getLeaseId();
+ $contentType = Resources::URL_ENCODED_CONTENT_TYPE;
+
+ $metadata = $options->getMetadata();
+ $headers = $this->generateMetadataHeaders($metadata);
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $leaseId
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CACHE_CONTROL,
+ $blobCacheControl
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_TYPE,
+ $blobContentType
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_ENCODING,
+ $blobContentEncoding
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_LANGUAGE,
+ $blobContentLanguage
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_MD5,
+ $blobContentMD5
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ $contentType
+ );
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'blocklist'
+ );
+
+ return $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+ /**
+ * Retrieves the list of blocks that have been uploaded as part of a block blob.
+ *
+ * There are two block lists maintained for a blob:
+ * 1) Committed Block List: The list of blocks that have been successfully
+ * committed to a given blob with commitBlobBlocks.
+ * 2) Uncommitted Block List: The list of blocks that have been uploaded for a
+ * blob using Put Block (REST API), but that have not yet been committed.
+ * These blocks are stored in Windows Azure in association with a blob, but do
+ * not yet form part of the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\ListBlobBlocksOptions $options optional parameters
+ *
+ * @return Models\ListBlobBlocksResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179400.aspx
+ */
+ public function listBlobBlocks($container, $blob, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new ListBlobBlocksOptions();
+ }
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_BLOCK_LIST_TYPE,
+ $options->getBlockListType()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_SNAPSHOT,
+ $options->getSnapshot()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'blocklist'
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListBlobBlocksResult::create($response->getHeader(), $parsed);
+ }
+
+ /**
+ * Returns all properties and metadata on the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\GetBlobPropertiesOptions $options optional parameters
+ *
+ * @return Models\GetBlobPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179394.aspx
+ */
+ public function getBlobProperties($container, $blob, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+
+ $method = Resources::HTTP_HEAD;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new GetBlobPropertiesOptions();
+ }
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_SNAPSHOT,
+ $options->getSnapshot()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ return $this->_getBlobPropertiesResultFromResponse($response->getHeader());
+ }
+
+ /**
+ * Returns all properties and metadata on the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\GetBlobMetadataOptions $options optional parameters
+ *
+ * @return Models\GetBlobMetadataResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179350.aspx
+ */
+ public function getBlobMetadata($container, $blob, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+
+ $method = Resources::HTTP_HEAD;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new GetBlobMetadataOptions();
+ }
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_SNAPSHOT,
+ $options->getSnapshot()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'metadata'
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ $metadata = $this->getMetadataArray($response->getHeader());
+
+ return GetBlobMetadataResult::create($response->getHeader(), $metadata);
+ }
+
+ /**
+ * Returns a list of active page ranges for a page blob. Active page ranges are
+ * those that have been populated with data.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\ListPageBlobRangesOptions $options optional parameters
+ *
+ * @return Models\ListPageBlobRangesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691973.aspx
+ */
+ public function listPageBlobRanges($container, $blob, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new ListPageBlobRangesOptions();
+ }
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+
+ $headers = $this->_addOptionalRangeHeader(
+ $headers, $options->getRangeStart(), $options->getRangeEnd()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_SNAPSHOT,
+ $options->getSnapshot()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'pagelist'
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListPageBlobRangesResult::create($response->getHeader(), $parsed);
+ }
+
+ /**
+ * Sets system properties defined for a blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\SetBlobPropertiesOptions $options optional parameters
+ *
+ * @return Models\SetBlobPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691966.aspx
+ */
+ public function setBlobProperties($container, $blob, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new SetBlobPropertiesOptions();
+ }
+
+ $blobContentType = $options->getBlobContentType();
+ $blobContentEncoding = $options->getBlobContentEncoding();
+ $blobContentLanguage = $options->getBlobContentLanguage();
+ $blobContentLength = $options->getBlobContentLength();
+ $blobContentMD5 = $options->getBlobContentMD5();
+ $blobCacheControl = $options->getBlobCacheControl();
+ $leaseId = $options->getLeaseId();
+ $sNumberAction = $options->getSequenceNumberAction();
+ $sNumber = $options->getSequenceNumber();
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $leaseId
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CACHE_CONTROL,
+ $blobCacheControl
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_TYPE,
+ $blobContentType
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_ENCODING,
+ $blobContentEncoding
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_LANGUAGE,
+ $blobContentLanguage
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_LENGTH,
+ $blobContentLength
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_CONTENT_MD5,
+ $blobContentMD5
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_SEQUENCE_NUMBER_ACTION,
+ $sNumberAction
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_BLOB_SEQUENCE_NUMBER,
+ $sNumber
+ );
+
+ $this->addOptionalQueryParam($queryParams, Resources::QP_COMP, 'properties');
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ return SetBlobPropertiesResult::create($response->getHeader());
+ }
+
+ /**
+ * Sets metadata headers on the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param array $metadata key/value pair representation
+ * @param Models\SetBlobMetadataOptions $options optional parameters
+ *
+ * @return Models\SetBlobMetadataResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179414.aspx
+ */
+ public function setBlobMetadata($container, $blob, $metadata, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+ $this->validateMetadata($metadata);
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new SetBlobMetadataOptions();
+ }
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+ $headers = $this->addMetadataHeaders($headers, $metadata);
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'metadata'
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ return SetBlobMetadataResult::create($response->getHeader());
+ }
+
+ /**
+ * Reads or downloads a blob from the system, including its metadata and
+ * properties.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\GetBlobOptions $options optional parameters
+ *
+ * @return Models\GetBlobResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179440.aspx
+ */
+ public function getBlob($container, $blob, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = array(
+ Resources::STATUS_OK,
+ Resources::STATUS_PARTIAL_CONTENT
+ );
+
+ if (is_null($options)) {
+ $options = new GetBlobOptions();
+ }
+
+ $getMD5 = $options->getComputeRangeMD5();
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+ $headers = $this->_addOptionalRangeHeader(
+ $headers, $options->getRangeStart(), $options->getRangeEnd()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_RANGE_GET_CONTENT_MD5,
+ $getMD5 ? 'true' : null
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_SNAPSHOT,
+ $options->getSnapshot()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ $metadata = $this->getMetadataArray($response->getHeader());
+
+ return GetBlobResult::create(
+ $response->getHeader(),
+ $response->getBody(),
+ $metadata
+ );
+ }
+
+ /**
+ * Deletes a blob or blob snapshot.
+ *
+ * Note that if the snapshot entry is specified in the $options then only this
+ * blob snapshot is deleted. To delete all blob snapshots, do not set Snapshot
+ * and just set getDeleteSnaphotsOnly to true.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\DeleteBlobOptions $options optional parameters
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179413.aspx
+ */
+ public function deleteBlob($container, $blob, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+
+ $method = Resources::HTTP_DELETE;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $statusCode = Resources::STATUS_ACCEPTED;
+
+ if (is_null($options)) {
+ $options = new DeleteBlobOptions();
+ }
+
+ if (is_null($options->getSnapshot())) {
+ $delSnapshots = $options->getDeleteSnaphotsOnly() ? 'only' : 'include';
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_DELETE_SNAPSHOTS,
+ $delSnapshots
+ );
+ } else {
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_SNAPSHOT,
+ $options->getSnapshot()
+ );
+ }
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers, $options->getAccessCondition()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ }
+
+ /**
+ * Creates a snapshot of a blob.
+ *
+ * @param string $container The name of the container.
+ * @param string $blob The name of the blob.
+ * @param Models\CreateBlobSnapshotOptions $options The optional parameters.
+ *
+ * @return Models\CreateBlobSnapshotResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691971.aspx
+ */
+ public function createBlobSnapshot($container, $blob, $options = null)
+ {
+ Validate::isString($container, 'container');
+ Validate::isString($blob, 'blob');
+ Validate::notNullOrEmpty($blob, 'blob');
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $this->_createPath($container, $blob);
+ $expectedStatusCode = Resources::STATUS_CREATED;
+
+ if (is_null($options)) {
+ $options = new CreateBlobSnapshotOptions();
+ }
+
+ $queryParams[Resources::QP_COMP] = 'snapshot';
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers,
+ $options->getAccessCondition()
+ );
+ $headers = $this->addMetadataHeaders($headers, $options->getMetadata());
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $expectedStatusCode
+ );
+
+ return CreateBlobSnapshotResult::create($response->getHeader());
+ }
+
+ /**
+ * Copies a source blob to a destination blob within the same storage account.
+ *
+ * @param string $destinationContainer name of the destination
+ * container
+ * @param string $destinationBlob name of the destination
+ * blob
+ * @param string $sourceContainer name of the source
+ * container
+ * @param string $sourceBlob name of the source
+ * blob
+ * @param Models\CopyBlobOptions $options optional parameters
+ *
+ * @return CopyBlobResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd894037.aspx
+ */
+ public function copyBlob(
+ $destinationContainer,
+ $destinationBlob,
+ $sourceContainer,
+ $sourceBlob,
+ $options = null
+ ) {
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $destinationBlobPath = $this->_createPath(
+ $destinationContainer,
+ $destinationBlob
+ );
+ $statusCode = Resources::STATUS_CREATED;
+
+ if (is_null($options)) {
+ $options = new CopyBlobOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $sourceBlobPath = $this->_getCopyBlobSourceName(
+ $sourceContainer,
+ $sourceBlob,
+ $options
+ );
+
+ $headers = $this->addOptionalAccessConditionHeader(
+ $headers,
+ $options->getAccessCondition()
+ );
+
+ $headers = $this->addOptionalSourceAccessConditionHeader(
+ $headers,
+ $options->getSourceAccessCondition()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_COPY_SOURCE,
+ $sourceBlobPath
+ );
+
+ $headers = $this->addMetadataHeaders($headers, $options->getMetadata());
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_LEASE_ID,
+ $options->getLeaseId()
+ );
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::X_MS_SOURCE_LEASE_ID,
+ $options->getSourceLeaseId()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $destinationBlobPath,
+ $statusCode
+ );
+
+ return CopyBlobResult::create($response->getHeader());
+ }
+
+ /**
+ * Establishes an exclusive one-minute write lock on a blob. To write to a locked
+ * blob, a client must provide a lease ID.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\AcquireLeaseOptions $options optional parameters
+ *
+ * @return Models\AcquireLeaseResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691972.aspx
+ */
+ public function acquireLease($container, $blob, $options = null)
+ {
+ $headers = $this->_putLeaseImpl(
+ LeaseMode::ACQUIRE_ACTION,
+ $container,
+ $blob,
+ null /* leaseId */,
+ is_null($options) ? new AcquireLeaseOptions() : $options,
+ is_null($options) ? null : $options->getAccessCondition()
+ );
+
+ return AcquireLeaseResult::create($headers);
+ }
+
+ /**
+ * Renews an existing lease
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param string $leaseId lease id when acquiring
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return Models\AcquireLeaseResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691972.aspx
+ */
+ public function renewLease($container, $blob, $leaseId, $options = null)
+ {
+ $headers = $this->_putLeaseImpl(
+ LeaseMode::RENEW_ACTION,
+ $container,
+ $blob,
+ $leaseId,
+ is_null($options) ? new BlobServiceOptions() : $options
+ );
+
+ return AcquireLeaseResult::create($headers);
+ }
+
+ /**
+ * Frees the lease if it is no longer needed so that another client may
+ * immediately acquire a lease against the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param string $leaseId lease id when acquiring
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691972.aspx
+ */
+ public function releaseLease($container, $blob, $leaseId, $options = null)
+ {
+ $this->_putLeaseImpl(
+ LeaseMode::RELEASE_ACTION,
+ $container,
+ $blob,
+ $leaseId,
+ is_null($options) ? new BlobServiceOptions() : $options
+ );
+ }
+
+ /**
+ * Ends the lease but ensure that another client cannot acquire a new lease until
+ * the current lease period has expired.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return BreakLeaseResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691972.aspx
+ */
+ public function breakLease($container, $blob, $options = null)
+ {
+ $headers = $this->_putLeaseImpl(
+ LeaseMode::BREAK_ACTION,
+ $container,
+ $blob,
+ null,
+ is_null($options) ? new BlobServiceOptions() : $options
+ );
+
+ return BreakLeaseResult::create($headers);
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Internal/IBlob.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Internal/IBlob.php
new file mode 100644
index 0000000..d3e9917
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Internal/IBlob.php
@@ -0,0 +1,491 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Internal;
+use WindowsAzure\Common\Internal\FilterableService;
+
+/**
+ * This interface has all REST APIs provided by Windows Azure for Blob service.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd135733.aspx
+ */
+interface IBlob extends FilterableService
+{
+ /**
+ * Gets the properties of the Blob service.
+ *
+ * @param Models\BlobServiceOptions $options optional blob service options.
+ *
+ * @return WindowsAzure\Common\Models\GetServicePropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh452239.aspx
+ */
+ public function getServiceProperties($options = null);
+
+ /**
+ * Sets the properties of the Blob service.
+ *
+ * @param ServiceProperties $serviceProperties new service properties
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return none.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh452235.aspx
+ */
+ public function setServiceProperties($serviceProperties, $options = null);
+
+ /**
+ * Lists all of the containers in the given storage account.
+ *
+ * @param Models\ListContainersOptions $options optional parameters
+ *
+ * @return WindowsAzure\Blob\Models\ListContainersResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179352.aspx
+ */
+ public function listContainers($options = null);
+
+ /**
+ * Creates a new container in the given storage account.
+ *
+ * @param string $container name
+ * @param Models\CreateContainerOptions $options optional parameters
+ *
+ * @return none.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179468.aspx
+ */
+ public function createContainer($container, $options = null);
+
+ /**
+ * Creates a new container in the given storage account.
+ *
+ * @param string $container name
+ * @param Models\DeleteContainerOptions $options optional parameters
+ *
+ * @return none.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179408.aspx
+ */
+ public function deleteContainer($container, $options = null);
+
+ /**
+ * Returns all properties and metadata on the container.
+ *
+ * @param string $container name
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return Models\GetContainerPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179370.aspx
+ */
+ public function getContainerProperties($container, $options = null);
+
+ /**
+ * Returns only user-defined metadata for the specified container.
+ *
+ * @param string $container name
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return Models\GetContainerPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691976.aspx
+ */
+ public function getContainerMetadata($container, $options = null);
+
+ /**
+ * Gets the access control list (ACL) and any container-level access policies
+ * for the container.
+ *
+ * @param string $container name
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return Models\GetContainerAclResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179469.aspx
+ */
+ public function getContainerAcl($container, $options = null);
+
+ /**
+ * Sets the ACL and any container-level access policies for the container.
+ *
+ * @param string $container name
+ * @param Models\ContainerAcl $acl access control list for container
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return none.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179391.aspx
+ */
+ public function setContainerAcl($container, $acl, $options = null);
+
+ /**
+ * Sets metadata headers on the container.
+ *
+ * @param string $container name
+ * @param array $metadata metadata key/value pair.
+ * @param Models\SetContainerMetadataOptions $options optional parameters
+ *
+ * @return none.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179362.aspx
+ */
+ public function setContainerMetadata($container, $metadata, $options = null);
+
+ /**
+ * Lists all of the blobs in the given container.
+ *
+ * @param string $container name
+ * @param Models\ListBlobsOptions $options optional parameters
+ *
+ * @return Models\ListBlobsResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd135734.aspx
+ */
+ public function listBlobs($container, $options = null);
+
+ /**
+ * Creates a new page blob. Note that calling createPageBlob to create a page
+ * blob only initializes the blob.
+ * To add content to a page blob, call createBlobPages method.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param int $length specifies the maximum size for the
+ * page blob, up to 1 TB. The page blob size must be aligned to a 512-byte
+ * boundary.
+ * @param Models\CreateBlobOptions $options optional parameters
+ *
+ * @return CopyBlobResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179451.aspx
+ */
+ public function createPageBlob($container, $blob, $length, $options = null);
+
+ /**
+ * Creates a new block blob or updates the content of an existing block blob.
+ * Updating an existing block blob overwrites any existing metadata on the blob.
+ * Partial updates are not supported with createBlockBlob; the content of the
+ * existing blob is overwritten with the content of the new blob. To perform a
+ * partial update of the content of a block blob, use the createBlockList method.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param string $content content of the blob
+ * @param Models\CreateBlobOptions $options optional parameters
+ *
+ * @return CopyBlobResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179451.aspx
+ */
+ public function createBlockBlob($container, $blob, $content, $options = null);
+
+ /**
+ * Clears a range of pages from the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\PageRange $range Can be up to the value of the
+ * blob's full size.
+ * @param Models\CreateBlobPagesOptions $options optional parameters
+ *
+ * @return Models\CreateBlobPagesResult.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691975.aspx
+ */
+ public function clearBlobPages($container, $blob, $range, $options = null);
+
+ /**
+ * Creates a range of pages to a page blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\PageRange $range Can be up to 4 MB in size
+ * @param string $content the blob contents
+ * @param Models\CreateBlobPagesOptions $options optional parameters
+ *
+ * @return Models\CreateBlobPagesResult.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691975.aspx
+ */
+ public function createBlobPages($container, $blob, $range, $content,
+ $options = null
+ );
+
+ /**
+ * Creates a new block to be committed as part of a block blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param string $blockId must be less than or equal to
+ * 64 bytes in size. For a given blob, the length of the value specified for the
+ * blockid parameter must be the same size for each block.
+ * @param string $content the blob block contents
+ * @param Models\CreateBlobBlockOptions $options optional parameters
+ *
+ * @return none.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd135726.aspx
+ */
+ public function createBlobBlock($container, $blob, $blockId, $content,
+ $options = null
+ );
+
+ /**
+ * This method writes a blob by specifying the list of block IDs that make up the
+ * blob. In order to be written as part of a blob, a block must have been
+ * successfully written to the server in a prior createBlobBlock method.
+ *
+ * You can call Put Block List to update a blob by uploading only those blocks
+ * that have changed, then committing the new and existing blocks together.
+ * You can do this by specifying whether to commit a block from the committed
+ * block list or from the uncommitted block list, or to commit the most recently
+ * uploaded version of the block, whichever list it may belong to.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\BlockList $blockList the block list entries
+ * @param Models\CommitBlobBlocksOptions $options optional parameters
+ *
+ * @return none.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179467.aspx
+ */
+ public function commitBlobBlocks($container, $blob, $blockList, $options = null);
+
+ /**
+ * Retrieves the list of blocks that have been uploaded as part of a block blob.
+ *
+ * There are two block lists maintained for a blob:
+ * 1) Committed Block List: The list of blocks that have been successfully
+ * committed to a given blob with commitBlobBlocks.
+ * 2) Uncommitted Block List: The list of blocks that have been uploaded for a
+ * blob using Put Block (REST API), but that have not yet been committed.
+ * These blocks are stored in Windows Azure in association with a blob, but do
+ * not yet form part of the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\ListBlobBlocksOptions $options optional parameters
+ *
+ * @return Models\ListBlobBlocksResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179400.aspx
+ */
+ public function listBlobBlocks($container, $blob, $options = null);
+
+ /**
+ * Returns all properties and metadata on the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\GetBlobPropertiesOptions $options optional parameters
+ *
+ * @return Models\GetBlobPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179394.aspx
+ */
+ public function getBlobProperties($container, $blob, $options = null);
+
+ /**
+ * Returns all properties and metadata on the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\GetBlobMetadataOptions $options optional parameters
+ *
+ * @return Models\GetBlobMetadataResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179350.aspx
+ */
+ public function getBlobMetadata($container, $blob, $options = null);
+
+ /**
+ * Returns a list of active page ranges for a page blob. Active page ranges are
+ * those that have been populated with data.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\ListPageBlobRangesOptions $options optional parameters
+ *
+ * @return Models\ListPageBlobRangesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691973.aspx
+ */
+ public function listPageBlobRanges($container, $blob, $options = null);
+
+ /**
+ * Sets system properties defined for a blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\SetBlobPropertiesOptions $options optional parameters
+ *
+ * @return Models\SetBlobPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691966.aspx
+ */
+ public function setBlobProperties($container, $blob, $options = null);
+
+ /**
+ * Sets metadata headers on the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param array $metadata key/value pair representation
+ * @param Models\SetBlobMetadataOptions $options optional parameters
+ *
+ * @return Models\SetBlobMetadataResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179414.aspx
+ */
+ public function setBlobMetadata($container, $blob, $metadata, $options = null);
+
+ /**
+ * Reads or downloads a blob from the system, including its metadata and
+ * properties.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\GetBlobOptions $options optional parameters
+ *
+ * @return Models\GetBlobResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179440.aspx
+ */
+ public function getBlob($container, $blob, $options = null);
+
+ /**
+ * Deletes a blob or blob snapshot.
+ *
+ * Note that if the snapshot entry is specified in the $options then only this
+ * blob snapshot is deleted. To delete all blob snapshots, do not set Snapshot
+ * and just set getDeleteSnaphotsOnly to true.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\DeleteBlobOptions $options optional parameters
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179413.aspx
+ */
+ public function deleteBlob($container, $blob, $options = null);
+
+ /**
+ * Creates a snapshot of a blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\CreateBlobSnapshotOptions $options optional parameters
+ *
+ * @return Models\CreateBlobSnapshotResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691971.aspx
+ */
+ public function createBlobSnapshot($container, $blob, $options = null);
+
+ /**
+ * Copies a source blob to a destination blob within the same storage account.
+ *
+ * @param string $destinationContainer name of container
+ * @param string $destinationBlob name of blob
+ * @param string $sourceContainer name of container
+ * @param string $sourceBlob name of blob
+ * @param Models\CopyBlobOptions $options optional parameters
+ *
+ * @return CopyBlobResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd894037.aspx
+ */
+ public function copyBlob($destinationContainer, $destinationBlob,
+ $sourceContainer, $sourceBlob, $options = null
+ );
+
+ /**
+ * Establishes an exclusive one-minute write lock on a blob. To write to a locked
+ * blob, a client must provide a lease ID.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\AcquireLeaseOptions $options optional parameters
+ *
+ * @return Models\AcquireLeaseResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691972.aspx
+ */
+ public function acquireLease($container, $blob, $options = null);
+
+ /**
+ * Renews an existing lease
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param string $leaseId lease id when acquiring
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return Models\AcquireLeaseResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691972.aspx
+ */
+ public function renewLease($container, $blob, $leaseId, $options = null);
+
+ /**
+ * Frees the lease if it is no longer needed so that another client may
+ * immediately acquire a lease against the blob.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param string $leaseId lease id when acquiring
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691972.aspx
+ */
+ public function releaseLease($container, $blob, $leaseId, $options = null);
+
+ /**
+ * Ends the lease but ensure that another client cannot acquire a new lease until
+ * the current lease period has expired.
+ *
+ * @param string $container name of the container
+ * @param string $blob name of the blob
+ * @param Models\BlobServiceOptions $options optional parameters
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee691972.aspx
+ */
+ public function breakLease($container, $blob, $options = null);
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AccessCondition.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AccessCondition.php
new file mode 100644
index 0000000..de9bdbc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AccessCondition.php
@@ -0,0 +1,247 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\WindowsAzureUtilities;
+
+/**
+ * Represents a set of access conditions to be used for operations against the
+ * storage services.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AccessCondition
+{
+ /**
+ * Represents the header type.
+ *
+ * @var string
+ */
+ private $_header = Resources::EMPTY_STRING;
+
+ /**
+ * Represents the header value.
+ *
+ * @var string
+ */
+ private $_value;
+
+ /**
+ * Constructor
+ *
+ * @param string $headerType header name
+ * @param string $value header value
+ */
+ protected function __construct($headerType, $value)
+ {
+ $this->setHeader($headerType);
+ $this->setValue($value);
+ }
+
+ /**
+ * Specifies that no access condition is set.
+ *
+ * @return \WindowsAzure\Blob\Models\AccessCondition
+ */
+ public static function none()
+ {
+ return new AccessCondition(Resources::EMPTY_STRING, null);
+ }
+
+ /**
+ * Returns an access condition such that an operation will be performed only if
+ * the resource's ETag value matches the specified ETag value.
+ *
+ * Setting this access condition modifies the request to include the HTTP
+ * If-Match conditional header. If this access condition is set, the
+ * operation is performed only if the ETag of the resource matches the specified
+ * ETag.
+ *
+ * For more information, see
+ *
+ * Specifying Conditional Headers for Blob Service Operations.
+ *
+ * @param string $etag a string that represents the ETag value to check.
+ *
+ * @return \WindowsAzure\Blob\Models\AccessCondition
+ */
+ public static function ifMatch($etag)
+ {
+ return new AccessCondition(Resources::IF_MATCH, $etag);
+ }
+
+ /**
+ * Returns an access condition such that an operation will be performed only if
+ * the resource has been modified since the specified time.
+ *
+ * Setting this access condition modifies the request to include the HTTP
+ * If-Modified-Since conditional header. If this access condition is set,
+ * the operation is performed only if the resource has been modified since the
+ * specified time.
+ *
+ * For more information, see
+ *
+ * Specifying Conditional Headers for Blob Service Operations.
+ *
+ * @param \DateTime $lastModified date that represents the last-modified
+ * time to check for the resource.
+ *
+ * @return \WindowsAzure\Blob\Models\AccessCondition
+ */
+ public static function ifModifiedSince($lastModified)
+ {
+ Validate::isDate($lastModified);
+ return new AccessCondition(
+ Resources::IF_MODIFIED_SINCE,
+ $lastModified
+ );
+ }
+
+ /**
+ * Returns an access condition such that an operation will be performed only if
+ * the resource's ETag value does not match the specified ETag value.
+ *
+ * Setting this access condition modifies the request to include the HTTP
+ * If-None-Match conditional header. If this access condition is set, the
+ * operation is performed only if the ETag of the resource does not match the
+ * specified ETag.
+ *
+ * For more information,
+ * see
+ * Specifying Conditional Headers for Blob Service Operations.
+ *
+ * @param string $etag string that represents the ETag value to check.
+ *
+ * @return \WindowsAzure\Blob\Models\AccessCondition
+ */
+ public static function ifNoneMatch($etag)
+ {
+ return new AccessCondition(Resources::IF_NONE_MATCH, $etag);
+ }
+
+ /**
+ * Returns an access condition such that an operation will be performed only if
+ * the resource has not been modified since the specified time.
+ *
+ * Setting this access condition modifies the request to include the HTTP
+ * If-Unmodified-Since conditional header. If this access condition is
+ * set, the operation is performed only if the resource has not been modified
+ * since the specified time.
+ *
+ * For more information, see
+ *
+ * Specifying Conditional Headers for Blob Service Operations.
+ *
+ * @param \DateTime $lastModified date that represents the last-modified
+ * time to check for the resource.
+ *
+ * @return \WindowsAzure\Blob\Models\AccessCondition
+ */
+ public static function ifNotModifiedSince($lastModified)
+ {
+ Validate::isDate($lastModified);
+ return new AccessCondition(
+ Resources::IF_UNMODIFIED_SINCE,
+ $lastModified
+ );
+ }
+
+ /**
+ * Sets header type
+ *
+ * @param string $headerType can be one of Resources
+ *
+ * @return none.
+ */
+ public function setHeader($headerType)
+ {
+ $valid = AccessCondition::isValid($headerType);
+ Validate::isTrue($valid, Resources::INVALID_HT_MSG);
+
+ $this->_header = $headerType;
+ }
+
+ /**
+ * Gets header type
+ *
+ * @return string.
+ */
+ public function getHeader()
+ {
+ return $this->_header;
+ }
+
+ /**
+ * Sets the header value
+ *
+ * @param string $value the value to use
+ *
+ * @return none
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ }
+
+ /**
+ * Gets the header value
+ *
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Check if the $headerType belongs to valid header types
+ *
+ * @param string $headerType candidate header type
+ *
+ * @return boolean
+ */
+ public static function isValid($headerType)
+ {
+ if ( $headerType == Resources::EMPTY_STRING
+ || $headerType == Resources::IF_UNMODIFIED_SINCE
+ || $headerType == Resources::IF_MATCH
+ || $headerType == Resources::IF_MODIFIED_SINCE
+ || $headerType == Resources::IF_NONE_MATCH
+ ) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AccessPolicy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AccessPolicy.php
new file mode 100644
index 0000000..517798a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AccessPolicy.php
@@ -0,0 +1,143 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Holds container access policy elements
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AccessPolicy
+{
+ /**
+ * @var string
+ */
+ private $_start;
+
+ /**
+ * @var \DateTime
+ */
+ private $_expiry;
+
+ /**
+ * @var \DateTime
+ */
+ private $_permission;
+
+ /**
+ * Gets start.
+ *
+ * @return \DateTime.
+ */
+ public function getStart()
+ {
+ return $this->_start;
+ }
+
+ /**
+ * Sets start.
+ *
+ * @param \DateTime $start value.
+ *
+ * @return none.
+ */
+ public function setStart($start)
+ {
+ Validate::isDate($start);
+ $this->_start = $start;
+ }
+
+ /**
+ * Gets expiry.
+ *
+ * @return \DateTime.
+ */
+ public function getExpiry()
+ {
+ return $this->_expiry;
+ }
+
+ /**
+ * Sets expiry.
+ *
+ * @param \DateTime $expiry value.
+ *
+ * @return none.
+ */
+ public function setExpiry($expiry)
+ {
+ Validate::isDate($expiry);
+ $this->_expiry = $expiry;
+ }
+
+ /**
+ * Gets permission.
+ *
+ * @return string.
+ */
+ public function getPermission()
+ {
+ return $this->_permission;
+ }
+
+ /**
+ * Sets permission.
+ *
+ * @param string $permission value.
+ *
+ * @return none.
+ */
+ public function setPermission($permission)
+ {
+ $this->_permission = $permission;
+ }
+
+ /**
+ * Converts this current object to XML representation.
+ *
+ * @return array.
+ */
+ public function toArray()
+ {
+ $array = array();
+
+ $array['Start'] = Utilities::convertToEdmDateTime($this->_start);
+ $array['Expiry'] = Utilities::convertToEdmDateTime($this->_expiry);
+ $array['Permission'] = $this->_permission;
+
+ return $array;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AcquireLeaseOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AcquireLeaseOptions.php
new file mode 100644
index 0000000..ff82194
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AcquireLeaseOptions.php
@@ -0,0 +1,68 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Optional parameters for acquireLease wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AcquireLeaseOptions extends BlobServiceOptions
+{
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AcquireLeaseResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AcquireLeaseResult.php
new file mode 100644
index 0000000..e05a443
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/AcquireLeaseResult.php
@@ -0,0 +1,88 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The result of calling acquireLease API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AcquireLeaseResult
+{
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * Creates AcquireLeaseResult from response headers
+ *
+ * @param array $headers response headers
+ *
+ * @return AcquireLeaseResult
+ */
+ public static function create($headers)
+ {
+ $result = new AcquireLeaseResult();
+
+ $result->setLeaseId(
+ Utilities::tryGetValue($headers, Resources::X_MS_LEASE_ID)
+ );
+
+ return $result;
+ }
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/Blob.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/Blob.php
new file mode 100644
index 0000000..b5703f3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/Blob.php
@@ -0,0 +1,176 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Represents windows azure blob object
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Blob
+{
+ /**
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * @var string
+ */
+ private $_url;
+
+ /**
+ * @var string
+ */
+ private $_snapshot;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * @var BlobProperties
+ */
+ private $_properties;
+
+ /**
+ * Gets blob name.
+ *
+ * @return string.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Sets blob name.
+ *
+ * @param string $name value.
+ *
+ * @return none.
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ }
+
+ /**
+ * Gets blob snapshot.
+ *
+ * @return string.
+ */
+ public function getSnapshot()
+ {
+ return $this->_snapshot;
+ }
+
+ /**
+ * Sets blob snapshot.
+ *
+ * @param string $snapshot value.
+ *
+ * @return none.
+ */
+ public function setSnapshot($snapshot)
+ {
+ $this->_snapshot = $snapshot;
+ }
+
+ /**
+ * Gets blob url.
+ *
+ * @return string.
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * Sets blob url.
+ *
+ * @param string $url value.
+ *
+ * @return none.
+ */
+ public function setUrl($url)
+ {
+ $this->_url = $url;
+ }
+
+ /**
+ * Gets blob metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets blob metadata.
+ *
+ * @param string $metadata value.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Gets blob properties.
+ *
+ * @return BlobProperties.
+ */
+ public function getProperties()
+ {
+ return $this->_properties;
+ }
+
+ /**
+ * Sets blob properties.
+ *
+ * @param BlobProperties $properties value.
+ *
+ * @return none.
+ */
+ public function setProperties($properties)
+ {
+ $this->_properties = $properties;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobBlockType.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobBlockType.php
new file mode 100644
index 0000000..0273f64
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobBlockType.php
@@ -0,0 +1,65 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Holds available blob block types
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BlobBlockType
+{
+ const COMMITTED_TYPE = 'Committed';
+ const UNCOMMITTED_TYPE = 'Uncommitted';
+ const LATEST_TYPE = 'Latest';
+
+ /**
+ * Validates the provided type.
+ *
+ * @param string $type The entry type.
+ *
+ * @return boolean
+ */
+ public static function isValid($type)
+ {
+ switch ($type) {
+ case self::COMMITTED_TYPE:
+ case self::LATEST_TYPE:
+ case self::UNCOMMITTED_TYPE:
+ return true;
+
+ default:
+ return false;
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobPrefix.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobPrefix.php
new file mode 100644
index 0000000..a24e47b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobPrefix.php
@@ -0,0 +1,68 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Represents BlobPrefix object
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BlobPrefix
+{
+ /**
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Gets blob name.
+ *
+ * @return string.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Sets blob name.
+ *
+ * @param string $name value.
+ *
+ * @return none.
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobProperties.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobProperties.php
new file mode 100644
index 0000000..64c5dfd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobProperties.php
@@ -0,0 +1,452 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Represents blob properties
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BlobProperties
+{
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * @var string
+ */
+ private $_contentType;
+
+ /**
+ * @var integer
+ */
+ private $_contentLength;
+
+ /**
+ * @var string
+ */
+ private $_contentEncoding;
+
+ /**
+ * @var string
+ */
+ private $_contentLanguage;
+
+ /**
+ * @var string
+ */
+ private $_contentMD5;
+
+ /**
+ * @var string
+ */
+ private $_contentRange;
+
+ /**
+ * @var string
+ */
+ private $_cacheControl;
+
+ /**
+ * @var string
+ */
+ private $_blobType;
+
+ /**
+ * @var string
+ */
+ private $_leaseStatus;
+
+ /**
+ * @var integer
+ */
+ private $_sequenceNumber;
+
+ /**
+ * Creates BlobProperties object from $parsed response in array representation
+ *
+ * @param array $parsed parsed response in array format.
+ *
+ * @return BlobProperties
+ */
+ public static function create($parsed)
+ {
+ $result = new BlobProperties();
+ $clean = array_change_key_case($parsed);
+
+ $date = Utilities::tryGetValue($clean, Resources::LAST_MODIFIED);
+ $result->setBlobType(Utilities::tryGetValue($clean, 'blobtype'));
+ $result->setContentLength(intval($clean[Resources::CONTENT_LENGTH]));
+ $result->setETag(Utilities::tryGetValue($clean, Resources::ETAG));
+
+ if (!is_null($date)) {
+ $date = Utilities::rfc1123ToDateTime($date);
+ $result->setLastModified($date);
+ }
+
+ $result->setLeaseStatus(Utilities::tryGetValue($clean, 'leasestatus'));
+ $result->setLeaseStatus(
+ Utilities::tryGetValue(
+ $clean, Resources::X_MS_LEASE_STATUS, $result->getLeaseStatus()
+ )
+ );
+ $result->setSequenceNumber(
+ intval(
+ Utilities::tryGetValue($clean, Resources::X_MS_BLOB_SEQUENCE_NUMBER)
+ )
+ );
+ $result->setContentRange(
+ Utilities::tryGetValue($clean, Resources::CONTENT_RANGE)
+ );
+ $result->setCacheControl(
+ Utilities::tryGetValue($clean, Resources::CACHE_CONTROL)
+ );
+ $result->setBlobType(
+ Utilities::tryGetValue(
+ $clean, Resources::X_MS_BLOB_TYPE, $result->getBlobType()
+ )
+ );
+ $result->setContentEncoding(
+ Utilities::tryGetValue($clean, Resources::CONTENT_ENCODING)
+ );
+ $result->setContentLanguage(
+ Utilities::tryGetValue($clean, Resources::CONTENT_LANGUAGE)
+ );
+ $result->setContentMD5(
+ Utilities::tryGetValue($clean, Resources::CONTENT_MD5)
+ );
+ $result->setContentType(
+ Utilities::tryGetValue($clean, Resources::CONTENT_TYPE)
+ );
+
+ return $result;
+ }
+
+ /**
+ * Makes deep copy from the current object.
+ *
+ * @return BlobProperties
+ */
+ public function __clone()
+ {
+ $this->_blobType = $this->_blobType;
+ $this->_cacheControl = $this->_cacheControl;
+ $this->_contentEncoding = $this->_contentEncoding;
+ $this->_contentLanguage = $this->_contentLanguage;
+ $this->_contentLength = $this->_contentLength;
+ $this->_contentMD5 = $this->_contentMD5;
+ $this->_contentRange = $this->_contentRange;
+ $this->_contentType = $this->_contentType;
+ $this->_etag = $this->_etag;
+ $this->_lastModified = $this->_lastModified;
+ $this->_leaseStatus = $this->_leaseStatus;
+ $this->_sequenceNumber = $this->_sequenceNumber;
+ }
+
+ /**
+ * Gets blob lastModified.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets blob lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ Validate::isDate($lastModified);
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * Gets blob etag.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets blob etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ $this->_etag = $etag;
+ }
+
+ /**
+ * Gets blob contentType.
+ *
+ * @return string.
+ */
+ public function getContentType()
+ {
+ return $this->_contentType;
+ }
+
+ /**
+ * Sets blob contentType.
+ *
+ * @param string $contentType value.
+ *
+ * @return none.
+ */
+ public function setContentType($contentType)
+ {
+ $this->_contentType = $contentType;
+ }
+
+ /**
+ * Gets blob contentRange.
+ *
+ * @return string.
+ */
+ public function getContentRange()
+ {
+ return $this->_contentRange;
+ }
+
+ /**
+ * Sets blob contentRange.
+ *
+ * @param string $contentRange value.
+ *
+ * @return none.
+ */
+ public function setContentRange($contentRange)
+ {
+ $this->_contentRange = $contentRange;
+ }
+
+ /**
+ * Gets blob contentLength.
+ *
+ * @return integer.
+ */
+ public function getContentLength()
+ {
+ return $this->_contentLength;
+ }
+
+ /**
+ * Sets blob contentLength.
+ *
+ * @param integer $contentLength value.
+ *
+ * @return none.
+ */
+ public function setContentLength($contentLength)
+ {
+ Validate::isInteger($contentLength, 'contentLength');
+ $this->_contentLength = $contentLength;
+ }
+
+ /**
+ * Gets blob contentEncoding.
+ *
+ * @return string.
+ */
+ public function getContentEncoding()
+ {
+ return $this->_contentEncoding;
+ }
+
+ /**
+ * Sets blob contentEncoding.
+ *
+ * @param string $contentEncoding value.
+ *
+ * @return none.
+ */
+ public function setContentEncoding($contentEncoding)
+ {
+ $this->_contentEncoding = $contentEncoding;
+ }
+
+ /**
+ * Gets blob contentLanguage.
+ *
+ * @return string.
+ */
+ public function getContentLanguage()
+ {
+ return $this->_contentLanguage;
+ }
+
+ /**
+ * Sets blob contentLanguage.
+ *
+ * @param string $contentLanguage value.
+ *
+ * @return none.
+ */
+ public function setContentLanguage($contentLanguage)
+ {
+ $this->_contentLanguage = $contentLanguage;
+ }
+
+ /**
+ * Gets blob contentMD5.
+ *
+ * @return string.
+ */
+ public function getContentMD5()
+ {
+ return $this->_contentMD5;
+ }
+
+ /**
+ * Sets blob contentMD5.
+ *
+ * @param string $contentMD5 value.
+ *
+ * @return none.
+ */
+ public function setContentMD5($contentMD5)
+ {
+ $this->_contentMD5 = $contentMD5;
+ }
+
+ /**
+ * Gets blob cacheControl.
+ *
+ * @return string.
+ */
+ public function getCacheControl()
+ {
+ return $this->_cacheControl;
+ }
+
+ /**
+ * Sets blob cacheControl.
+ *
+ * @param string $cacheControl value.
+ *
+ * @return none.
+ */
+ public function setCacheControl($cacheControl)
+ {
+ $this->_cacheControl = $cacheControl;
+ }
+
+ /**
+ * Gets blob blobType.
+ *
+ * @return string.
+ */
+ public function getBlobType()
+ {
+ return $this->_blobType;
+ }
+
+ /**
+ * Sets blob blobType.
+ *
+ * @param string $blobType value.
+ *
+ * @return none.
+ */
+ public function setBlobType($blobType)
+ {
+ $this->_blobType = $blobType;
+ }
+
+ /**
+ * Gets blob leaseStatus.
+ *
+ * @return string.
+ */
+ public function getLeaseStatus()
+ {
+ return $this->_leaseStatus;
+ }
+
+ /**
+ * Sets blob leaseStatus.
+ *
+ * @param string $leaseStatus value.
+ *
+ * @return none.
+ */
+ public function setLeaseStatus($leaseStatus)
+ {
+ $this->_leaseStatus = $leaseStatus;
+ }
+
+ /**
+ * Gets blob sequenceNumber.
+ *
+ * @return int.
+ */
+ public function getSequenceNumber()
+ {
+ return $this->_sequenceNumber;
+ }
+
+ /**
+ * Sets blob sequenceNumber.
+ *
+ * @param int $sequenceNumber value.
+ *
+ * @return none.
+ */
+ public function setSequenceNumber($sequenceNumber)
+ {
+ Validate::isInteger($sequenceNumber, 'sequenceNumber');
+ $this->_sequenceNumber = $sequenceNumber;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobServiceOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobServiceOptions.php
new file mode 100644
index 0000000..119e4e4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobServiceOptions.php
@@ -0,0 +1,65 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Blob service options.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BlobServiceOptions
+{
+ private $_timeout;
+
+ /**
+ * Gets timeout.
+ *
+ * @return string.
+ */
+ public function getTimeout()
+ {
+ return $this->_timeout;
+ }
+
+ /**
+ * Sets timeout.
+ *
+ * @param string $timeout value.
+ *
+ * @return none.
+ */
+ public function setTimeout($timeout)
+ {
+ $this->_timeout = $timeout;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobType.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobType.php
new file mode 100644
index 0000000..32b871d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlobType.php
@@ -0,0 +1,44 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Encapsulates blob types
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BlobType
+{
+ const BLOCK_BLOB = 'BlockBlob';
+ const PAGE_BLOB = 'PageBlob';
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/Block.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/Block.php
new file mode 100644
index 0000000..789e7e2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/Block.php
@@ -0,0 +1,95 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Holds information about blob block.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Block
+{
+ /**
+ * @var string
+ */
+ private $_blockId;
+
+ /**
+ * @var string
+ */
+ private $_type;
+
+ /**
+ * Sets the blockId.
+ *
+ * @param string $blockId The id of the block.
+ *
+ * @return none
+ */
+ public function setBlockId($blockId)
+ {
+ $this->_blockId = $blockId;
+ }
+
+ /**
+ * Gets the blockId.
+ *
+ * @return string
+ */
+ public function getBlockId()
+ {
+ return $this->_blockId;
+ }
+
+ /**
+ * Sets the type.
+ *
+ * @param string $type The type of the block.
+ *
+ * @return none
+ */
+ public function setType($type)
+ {
+ $this->_type = $type;
+ }
+
+ /**
+ * Gets the type.
+ *
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlockList.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlockList.php
new file mode 100644
index 0000000..9a18baf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BlockList.php
@@ -0,0 +1,175 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+use WindowsAzure\Blob\Models\Block;
+
+/**
+ * Holds block list used for commitBlobBlocks
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BlockList
+{
+ /**
+ * @var array
+ */
+ private $_entries;
+ public static $xmlRootName = 'BlockList';
+
+ /**
+ * Creates block list from array of blocks.
+ *
+ * @param array $array The blocks array.
+ *
+ * @return BlockList
+ */
+ public static function create($array)
+ {
+ $blockList = new BlockList();
+
+ foreach ($array as $value) {
+ $blockList->addEntry($value->getBlockId(), $value->getType());
+ }
+
+ return $blockList;
+ }
+
+ /**
+ * Adds new entry to the block list entries.
+ *
+ * @param string $blockId The block id.
+ * @param string $type The entry type, you can use BlobBlockType.
+ *
+ * @return none
+ */
+ public function addEntry($blockId, $type)
+ {
+ Validate::isString($blockId, 'blockId');
+ Validate::isTrue(
+ BlobBlockType::isValid($type),
+ sprintf(Resources::INVALID_BTE_MSG, get_class(new BlobBlockType()))
+ );
+ $block = new Block();
+ $block->setBlockId($blockId);
+ $block->setType($type);
+
+ $this->_entries[] = $block;
+ }
+
+ /**
+ * Addds committed block entry.
+ *
+ * @param string $blockId The block id.
+ *
+ * @return none
+ */
+ public function addCommittedEntry($blockId)
+ {
+ $this->addEntry($blockId, BlobBlockType::COMMITTED_TYPE);
+ }
+
+ /**
+ * Addds uncommitted block entry.
+ *
+ * @param string $blockId The block id.
+ *
+ * @return none
+ */
+ public function addUncommittedEntry($blockId)
+ {
+ $this->addEntry($blockId, BlobBlockType::UNCOMMITTED_TYPE);
+ }
+
+ /**
+ * Addds latest block entry.
+ *
+ * @param string $blockId The block id.
+ *
+ * @return none
+ */
+ public function addLatestEntry($blockId)
+ {
+ $this->addEntry($blockId, BlobBlockType::LATEST_TYPE);
+ }
+
+ /**
+ * Gets blob block entry.
+ *
+ * @param string $blockId The id of the block.
+ *
+ * @return Block
+ */
+ public function getEntry($blockId)
+ {
+ foreach ($this->_entries as $value) {
+ if ($blockId == $value->getBlockId()) {
+ return $value;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Gets all blob block entries.
+ *
+ * @return string
+ */
+ public function getEntries()
+ {
+ return $this->_entries;
+ }
+
+ /**
+ * Converts the BlockList object to XML representation
+ *
+ * @param XmlSerializer $xmlSerializer The XML serializer.
+ *
+ * @return string
+ */
+ public function toXml($xmlSerializer)
+ {
+ $properties = array(XmlSerializer::ROOT_NAME => self::$xmlRootName);
+ $array = array();
+
+ foreach ($this->_entries as $value) {
+ $array[] = array(
+ $value->getType() => base64_encode($value->getBlockId())
+ );
+ }
+
+ return $xmlSerializer->serialize($array, $properties);
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BreakLeaseResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BreakLeaseResult.php
new file mode 100644
index 0000000..943a519
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/BreakLeaseResult.php
@@ -0,0 +1,86 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The result of calling breakLease API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BreakLeaseResult
+{
+ /**
+ * @var string
+ */
+ private $_leaseTime;
+
+ /**
+ * Creates BreakLeaseResult from response headers
+ *
+ * @param array $headers response headers
+ *
+ * @return BreakLeaseResult
+ */
+ public static function create($headers)
+ {
+ $result = new BreakLeaseResult();
+
+ $result->setLeaseTime(
+ Utilities::tryGetValue($headers, Resources::X_MS_LEASE_TIME)
+ );
+
+ return $result;
+ }
+
+ /**
+ * Gets lease time.
+ *
+ * @return string
+ */
+ public function getLeaseTime()
+ {
+ return $this->_leaseTime;
+ }
+
+ /**
+ * Sets lease time.
+ *
+ * @param string $leaseTime the blob lease time.
+ *
+ * @return none
+ */
+ public function setLeaseTime($leaseTime)
+ {
+ $this->_leaseTime = $leaseTime;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CommitBlobBlocksOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CommitBlobBlocksOptions.php
new file mode 100644
index 0000000..9318015
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CommitBlobBlocksOptions.php
@@ -0,0 +1,258 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Optional parameters for commitBlobBlocks
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CommitBlobBlocksOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_blobContentType;
+
+ /**
+ * @var string
+ */
+ private $_blobContentEncoding;
+
+ /**
+ * @var string
+ */
+ private $_blobContentLanguage;
+
+ /**
+ * @var string
+ */
+ private $_blobContentMD5;
+
+ /**
+ * @var string
+ */
+ private $_blobCacheControl;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Gets blob ContentType.
+ *
+ * @return string.
+ */
+ public function getBlobContentType()
+ {
+ return $this->_blobContentType;
+ }
+
+ /**
+ * Sets blob ContentType.
+ *
+ * @param string $blobContentType value.
+ *
+ * @return none.
+ */
+ public function setBlobContentType($blobContentType)
+ {
+ $this->_blobContentType = $blobContentType;
+ }
+
+ /**
+ * Gets blob ContentEncoding.
+ *
+ * @return string.
+ */
+ public function getBlobContentEncoding()
+ {
+ return $this->_blobContentEncoding;
+ }
+
+ /**
+ * Sets blob ContentEncoding.
+ *
+ * @param string $blobContentEncoding value.
+ *
+ * @return none.
+ */
+ public function setBlobContentEncoding($blobContentEncoding)
+ {
+ $this->_blobContentEncoding = $blobContentEncoding;
+ }
+
+ /**
+ * Gets blob ContentLanguage.
+ *
+ * @return string.
+ */
+ public function getBlobContentLanguage()
+ {
+ return $this->_blobContentLanguage;
+ }
+
+ /**
+ * Sets blob ContentLanguage.
+ *
+ * @param string $blobContentLanguage value.
+ *
+ * @return none.
+ */
+ public function setBlobContentLanguage($blobContentLanguage)
+ {
+ $this->_blobContentLanguage = $blobContentLanguage;
+ }
+
+ /**
+ * Gets blob ContentMD5.
+ *
+ * @return string.
+ */
+ public function getBlobContentMD5()
+ {
+ return $this->_blobContentMD5;
+ }
+
+ /**
+ * Sets blob ContentMD5.
+ *
+ * @param string $blobContentMD5 value.
+ *
+ * @return none.
+ */
+ public function setBlobContentMD5($blobContentMD5)
+ {
+ $this->_blobContentMD5 = $blobContentMD5;
+ }
+
+ /**
+ * Gets blob cache control.
+ *
+ * @return string.
+ */
+ public function getBlobCacheControl()
+ {
+ return $this->_blobCacheControl;
+ }
+
+ /**
+ * Sets blob cacheControl.
+ *
+ * @param string $blobCacheControl value to use.
+ *
+ * @return none.
+ */
+ public function setBlobCacheControl($blobCacheControl)
+ {
+ $this->_blobCacheControl = $blobCacheControl;
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets blob metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets blob metadata.
+ *
+ * @param string $metadata value.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/Container.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/Container.php
new file mode 100644
index 0000000..dd280e4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/Container.php
@@ -0,0 +1,150 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * WindowsAzure container object.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Container
+{
+ /**
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * @var string
+ */
+ private $_url;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * @var ContainerProperties
+ */
+ private $_properties;
+
+ /**
+ * Gets container name.
+ *
+ * @return string.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Sets container name.
+ *
+ * @param string $name value.
+ *
+ * @return none.
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ }
+
+ /**
+ * Gets container url.
+ *
+ * @return string.
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * Sets container url.
+ *
+ * @param string $url value.
+ *
+ * @return none.
+ */
+ public function setUrl($url)
+ {
+ $this->_url = $url;
+ }
+
+ /**
+ * Gets container metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets container metadata.
+ *
+ * @param array $metadata value.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Gets container properties
+ *
+ * @return ContainerProperties
+ */
+ public function getProperties()
+ {
+ return $this->_properties;
+ }
+
+ /**
+ * Sets container properties
+ *
+ * @param ContainerProperties $properties container properties
+ *
+ * @return none.
+ */
+ public function setProperties($properties)
+ {
+ $this->_properties = $properties;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ContainerACL.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ContainerACL.php
new file mode 100644
index 0000000..e79b0a9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ContainerACL.php
@@ -0,0 +1,219 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Blob\Models\AccessPolicy;
+use WindowsAzure\Blob\Models\SignedIdentifier;
+use WindowsAzure\Blob\Models\PublicAccessType;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+
+/**
+ * Holds conatiner ACL members.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ContainerAcl
+{
+ /**
+ * All available types can be found in PublicAccessType
+ *
+ * @var string
+ */
+ private $_publicAccess;
+
+ /**
+ * @var array
+ */
+ private $_signedIdentifiers = array();
+
+ /*
+ * The root name of XML elemenet representation.
+ *
+ * @var string
+ */
+ public static $xmlRootName = 'SignedIdentifiers';
+
+
+ /**
+ * Parses the given array into signed identifiers.
+ *
+ * @param string $publicAccess The container public access.
+ * @param array $parsed The parsed response into array representation.
+ *
+ * @return none
+ */
+ public static function create($publicAccess, $parsed)
+ {
+ $result = new ContainerAcl();
+ $result->_publicAccess = $publicAccess;
+ $result->_signedIdentifiers = array();
+
+ if (!empty($parsed) && is_array($parsed['SignedIdentifier'])) {
+ $entries = $parsed['SignedIdentifier'];
+ $temp = Utilities::getArray($entries);
+
+ foreach ($temp as $value) {
+ $startString = urldecode($value['AccessPolicy']['Start']);
+ $expiryString = urldecode($value['AccessPolicy']['Expiry']);
+ $start = Utilities::convertToDateTime($startString);
+ $expiry = Utilities::convertToDateTime($expiryString);
+ $permission = $value['AccessPolicy']['Permission'];
+ $id = $value['Id'];
+ $result->addSignedIdentifier($id, $start, $expiry, $permission);
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets container signed modifiers.
+ *
+ * @return array.
+ */
+ public function getSignedIdentifiers()
+ {
+ return $this->_signedIdentifiers;
+ }
+
+ /**
+ * Sets container signed modifiers.
+ *
+ * @param array $signedIdentifiers value.
+ *
+ * @return none.
+ */
+ public function setSignedIdentifiers($signedIdentifiers)
+ {
+ $this->_signedIdentifiers = $signedIdentifiers;
+ }
+
+ /**
+ * Gets container publicAccess.
+ *
+ * @return string.
+ */
+ public function getPublicAccess()
+ {
+ return $this->_publicAccess;
+ }
+
+ /**
+ * Sets container publicAccess.
+ *
+ * @param string $publicAccess value.
+ *
+ * @return none.
+ */
+ public function setPublicAccess($publicAccess)
+ {
+ Validate::isTrue(
+ PublicAccessType::isValid($publicAccess),
+ Resources::INVALID_BLOB_PAT_MSG
+ );
+ $this->_publicAccess = $publicAccess;
+ }
+
+ /**
+ * Adds new signed modifier
+ *
+ * @param string $id a unique id for this modifier
+ * @param \DateTime $start The time at which the Shared Access Signature
+ * becomes valid. If omitted, start time for this call is assumed to be
+ * the time when the Blob service receives the request.
+ * @param \DateTime $expiry The time at which the Shared Access Signature
+ * becomes invalid. This field may be omitted if it has been specified as
+ * part of a container-level access policy.
+ * @param string $permission The permissions associated with the Shared
+ * Access Signature. The user is restricted to operations allowed by the
+ * permissions. Valid permissions values are read (r), write (w), delete (d) and
+ * list (l).
+ *
+ * @return none.
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh508996.aspx
+ */
+ public function addSignedIdentifier($id, $start, $expiry, $permission)
+ {
+ Validate::isString($id, 'id');
+ Validate::isDate($start);
+ Validate::isDate($expiry);
+ Validate::isString($permission, 'permission');
+
+ $accessPolicy = new AccessPolicy();
+ $accessPolicy->setStart($start);
+ $accessPolicy->setExpiry($expiry);
+ $accessPolicy->setPermission($permission);
+
+ $signedIdentifier = new SignedIdentifier();
+ $signedIdentifier->setId($id);
+ $signedIdentifier->setAccessPolicy($accessPolicy);
+
+ $this->_signedIdentifiers[] = $signedIdentifier;
+ }
+
+ /**
+ * Converts this object to array representation for XML serialization
+ *
+ * @return array.
+ */
+ public function toArray()
+ {
+ $array = array();
+
+ foreach ($this->_signedIdentifiers as $value) {
+ $array[] = $value->toArray();
+ }
+
+ return $array;
+ }
+
+ /**
+ * Converts this current object to XML representation.
+ *
+ * @param XmlSerializer $xmlSerializer The XML serializer.
+ *
+ * @return string.
+ */
+ public function toXml($xmlSerializer)
+ {
+ $properties = array(
+ XmlSerializer::DEFAULT_TAG => 'SignedIdentifier',
+ XmlSerializer::ROOT_NAME => self::$xmlRootName
+ );
+
+ return $xmlSerializer->serialize($this->toArray(), $properties);
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ContainerProperties.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ContainerProperties.php
new file mode 100644
index 0000000..8a42bf1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ContainerProperties.php
@@ -0,0 +1,95 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Holds container properties fields
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ContainerProperties
+{
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * Gets container lastModified.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets container lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * Gets container etag.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets container etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ $this->_etag = $etag;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CopyBlobOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CopyBlobOptions.php
new file mode 100644
index 0000000..557d759
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CopyBlobOptions.php
@@ -0,0 +1,205 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * optional parameters for CopyBlobOptions wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CopyBlobOptions extends BlobServiceOptions
+{
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_sourceAccessCondition;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * @var string
+ */
+ private $_sourceSnapshot;
+
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var sourceLeaseId
+ */
+ private $_sourceLeaseId;
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets source access condition
+ *
+ * @return SourceAccessCondition
+ */
+ public function getSourceAccessCondition()
+ {
+ return $this->_sourceAccessCondition;
+ }
+
+ /**
+ * Sets source access condition
+ *
+ * @param SourceAccessCondition $sourceAccessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setSourceAccessCondition($sourceAccessCondition)
+ {
+ $this->_sourceAccessCondition = $sourceAccessCondition;
+ }
+
+ /**
+ * Gets metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets metadata.
+ *
+ * @param array $metadata value.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Gets source snapshot.
+ *
+ * @return string
+ */
+ public function getSourceSnapshot()
+ {
+ return $this->_sourceSnapshot;
+ }
+
+ /**
+ * Sets source snapshot.
+ *
+ * @param string $sourceSnapshot value.
+ *
+ * @return none
+ */
+ public function setSourceSnapshot($sourceSnapshot)
+ {
+ $this->_sourceSnapshot = $sourceSnapshot;
+ }
+
+ /**
+ * Gets lease ID.
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease ID.
+ *
+ * @param string $leaseId value.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets source lease ID.
+ *
+ * @return string
+ */
+ public function getSourceLeaseId()
+ {
+ return $this->_sourceLeaseId;
+ }
+
+ /**
+ * Sets source lease ID.
+ *
+ * @param string $sourceLeaseId value.
+ *
+ * @return none
+ */
+ public function setSourceLeaseId($sourceLeaseId)
+ {
+ $this->_sourceLeaseId = $sourceLeaseId;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CopyBlobResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CopyBlobResult.php
new file mode 100644
index 0000000..196528c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CopyBlobResult.php
@@ -0,0 +1,120 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The result of calling copyBlob API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CopyBlobResult
+{
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * Creates CopyBlobResult object from the response of the copy blob request.
+ *
+ * @param array $headers The HTTP response headers in array representation.
+ *
+ * @return CopyBlobResult
+ */
+ public static function create($headers)
+ {
+ $result = new CopyBlobResult();
+ $result->setETag(Utilities::tryGetValueInsensitive(
+ Resources::ETAG,
+ $headers));
+ if (Utilities::arrayKeyExistsInsensitive(Resources::LAST_MODIFIED, $headers)) {
+ $lastModified = Utilities::tryGetValueInsensitive(
+ Resources::LAST_MODIFIED,
+ $headers);
+ $result->setLastModified(Utilities::rfc1123ToDateTime($lastModified));
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets ETag.
+ *
+ * @return string
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets ETag.
+ *
+ * @param string $etag value.
+ *
+ * @return none
+ */
+ public function setETag($etag)
+ {
+ $this->_etag = $etag;
+ }
+
+ /**
+ * Gets blob lastModified.
+ *
+ * @return \DateTime
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets blob lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none
+ */
+ public function setLastModified($lastModified)
+ {
+ $this->_lastModified = $lastModified;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobBlockOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobBlockOptions.php
new file mode 100644
index 0000000..4fceff8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobBlockOptions.php
@@ -0,0 +1,95 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Optional parameters for createBlobBlock wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateBlobBlockOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_contentMD5;
+
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets blob contentMD5.
+ *
+ * @return string.
+ */
+ public function getContentMD5()
+ {
+ return $this->_contentMD5;
+ }
+
+ /**
+ * Sets blob contentMD5.
+ *
+ * @param string $contentMD5 value.
+ *
+ * @return none.
+ */
+ public function setContentMD5($contentMD5)
+ {
+ $this->_contentMD5 = $contentMD5;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobOptions.php
new file mode 100644
index 0000000..06eec16
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobOptions.php
@@ -0,0 +1,421 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * optional parameters for createXXXBlob wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateBlobOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_contentType;
+
+ /**
+ * @var string
+ */
+ private $_contentEncoding;
+
+ /**
+ * @var string
+ */
+ private $_contentLanguage;
+
+ /**
+ * @var string
+ */
+ private $_contentMD5;
+
+ /**
+ * @var string
+ */
+ private $_cacheControl;
+
+ /**
+ * @var string
+ */
+ private $_blobContentType;
+
+ /**
+ * @var string
+ */
+ private $_blobContentEncoding;
+
+ /**
+ * @var string
+ */
+ private $_blobContentLanguage;
+
+ /**
+ * @var string
+ */
+ private $_blobContentMD5;
+
+ /**
+ * @var string
+ */
+ private $_blobCacheControl;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var integer
+ */
+ private $_sequenceNumber;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Gets blob ContentType.
+ *
+ * @return string.
+ */
+ public function getBlobContentType()
+ {
+ return $this->_blobContentType;
+ }
+
+ /**
+ * Sets blob ContentType.
+ *
+ * @param string $blobContentType value.
+ *
+ * @return none.
+ */
+ public function setBlobContentType($blobContentType)
+ {
+ $this->_blobContentType = $blobContentType;
+ }
+
+ /**
+ * Gets blob ContentEncoding.
+ *
+ * @return string.
+ */
+ public function getBlobContentEncoding()
+ {
+ return $this->_blobContentEncoding;
+ }
+
+ /**
+ * Sets blob ContentEncoding.
+ *
+ * @param string $blobContentEncoding value.
+ *
+ * @return none.
+ */
+ public function setBlobContentEncoding($blobContentEncoding)
+ {
+ $this->_blobContentEncoding = $blobContentEncoding;
+ }
+
+ /**
+ * Gets blob ContentLanguage.
+ *
+ * @return string.
+ */
+ public function getBlobContentLanguage()
+ {
+ return $this->_blobContentLanguage;
+ }
+
+ /**
+ * Sets blob ContentLanguage.
+ *
+ * @param string $blobContentLanguage value.
+ *
+ * @return none.
+ */
+ public function setBlobContentLanguage($blobContentLanguage)
+ {
+ $this->_blobContentLanguage = $blobContentLanguage;
+ }
+
+ /**
+ * Gets blob ContentMD5.
+ *
+ * @return string.
+ */
+ public function getBlobContentMD5()
+ {
+ return $this->_blobContentMD5;
+ }
+
+ /**
+ * Sets blob ContentMD5.
+ *
+ * @param string $blobContentMD5 value.
+ *
+ * @return none.
+ */
+ public function setBlobContentMD5($blobContentMD5)
+ {
+ $this->_blobContentMD5 = $blobContentMD5;
+ }
+
+ /**
+ * Gets blob cache control.
+ *
+ * @return string.
+ */
+ public function getBlobCacheControl()
+ {
+ return $this->_blobCacheControl;
+ }
+
+ /**
+ * Sets blob cacheControl.
+ *
+ * @param string $blobCacheControl value to use.
+ *
+ * @return none.
+ */
+ public function setBlobCacheControl($blobCacheControl)
+ {
+ $this->_blobCacheControl = $blobCacheControl;
+ }
+
+ /**
+ * Gets blob contentType.
+ *
+ * @return string.
+ */
+ public function getContentType()
+ {
+ return $this->_contentType;
+ }
+
+ /**
+ * Sets blob contentType.
+ *
+ * @param string $contentType value.
+ *
+ * @return none.
+ */
+ public function setContentType($contentType)
+ {
+ $this->_contentType = $contentType;
+ }
+
+ /**
+ * Gets contentEncoding.
+ *
+ * @return string.
+ */
+ public function getContentEncoding()
+ {
+ return $this->_contentEncoding;
+ }
+
+ /**
+ * Sets contentEncoding.
+ *
+ * @param string $contentEncoding value.
+ *
+ * @return none.
+ */
+ public function setContentEncoding($contentEncoding)
+ {
+ $this->_contentEncoding = $contentEncoding;
+ }
+
+ /**
+ * Gets contentLanguage.
+ *
+ * @return string.
+ */
+ public function getContentLanguage()
+ {
+ return $this->_contentLanguage;
+ }
+
+ /**
+ * Sets contentLanguage.
+ *
+ * @param string $contentLanguage value.
+ *
+ * @return none.
+ */
+ public function setContentLanguage($contentLanguage)
+ {
+ $this->_contentLanguage = $contentLanguage;
+ }
+
+ /**
+ * Gets contentMD5.
+ *
+ * @return string.
+ */
+ public function getContentMD5()
+ {
+ return $this->_contentMD5;
+ }
+
+ /**
+ * Sets contentMD5.
+ *
+ * @param string $contentMD5 value.
+ *
+ * @return none.
+ */
+ public function setContentMD5($contentMD5)
+ {
+ $this->_contentMD5 = $contentMD5;
+ }
+
+ /**
+ * Gets cacheControl.
+ *
+ * @return string.
+ */
+ public function getCacheControl()
+ {
+ return $this->_cacheControl;
+ }
+
+ /**
+ * Sets cacheControl.
+ *
+ * @param string $cacheControl value to use.
+ *
+ * @return none.
+ */
+ public function setCacheControl($cacheControl)
+ {
+ $this->_cacheControl = $cacheControl;
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets blob metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets blob metadata.
+ *
+ * @param string $metadata value.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Gets blob sequenceNumber.
+ *
+ * @return int.
+ */
+ public function getSequenceNumber()
+ {
+ return $this->_sequenceNumber;
+ }
+
+ /**
+ * Sets blob sequenceNumber.
+ *
+ * @param int $sequenceNumber value.
+ *
+ * @return none.
+ */
+ public function setSequenceNumber($sequenceNumber)
+ {
+ Validate::isInteger($sequenceNumber, 'sequenceNumber');
+ $this->_sequenceNumber = $sequenceNumber;
+ }
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobPagesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobPagesOptions.php
new file mode 100644
index 0000000..3eeb03e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobPagesOptions.php
@@ -0,0 +1,122 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Optional parameters for create and clear blob pages
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateBlobPagesOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_contentMD5;
+
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets blob contentMD5.
+ *
+ * @return string.
+ */
+ public function getContentMD5()
+ {
+ return $this->_contentMD5;
+ }
+
+ /**
+ * Sets blob contentMD5.
+ *
+ * @param string $contentMD5 value.
+ *
+ * @return none.
+ */
+ public function setContentMD5($contentMD5)
+ {
+ $this->_contentMD5 = $contentMD5;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobPagesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobPagesResult.php
new file mode 100644
index 0000000..a0627e0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobPagesResult.php
@@ -0,0 +1,184 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds result of calling create or clear blob pages
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateBlobPagesResult
+{
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * @var integer
+ */
+ private $_sequenceNumber;
+
+ /**
+ * @var string
+ */
+ private $_contentMD5;
+
+ /**
+ * Creates CreateBlobPagesResult object from $parsed response in array
+ * representation
+ *
+ * @param array $headers HTTP response headers
+ *
+ * @return CreateBlobPagesResult
+ */
+ public static function create($headers)
+ {
+ $result = new CreateBlobPagesResult();
+ $clean = array_change_key_case($headers);
+
+ $date = $clean[Resources::LAST_MODIFIED];
+ $date = Utilities::rfc1123ToDateTime($date);
+ $result->setETag($clean[Resources::ETAG]);
+ $result->setLastModified($date);
+ $result->setContentMD5(
+ Utilities::tryGetValue($clean, Resources::CONTENT_MD5)
+ );
+ $result->setSequenceNumber(
+ intval(
+ Utilities::tryGetValue($clean, Resources::X_MS_BLOB_SEQUENCE_NUMBER)
+ )
+ );
+
+ return $result;
+ }
+
+ /**
+ * Gets blob lastModified.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets blob lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ Validate::isDate($lastModified);
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * Gets blob etag.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets blob etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ Validate::isString($etag, 'etag');
+ $this->_etag = $etag;
+ }
+
+ /**
+ * Gets blob contentMD5.
+ *
+ * @return string.
+ */
+ public function getContentMD5()
+ {
+ return $this->_contentMD5;
+ }
+
+ /**
+ * Sets blob contentMD5.
+ *
+ * @param string $contentMD5 value.
+ *
+ * @return none.
+ */
+ public function setContentMD5($contentMD5)
+ {
+ $this->_contentMD5 = $contentMD5;
+ }
+
+ /**
+ * Gets blob sequenceNumber.
+ *
+ * @return int.
+ */
+ public function getSequenceNumber()
+ {
+ return $this->_sequenceNumber;
+ }
+
+ /**
+ * Sets blob sequenceNumber.
+ *
+ * @param int $sequenceNumber value.
+ *
+ * @return none.
+ */
+ public function setSequenceNumber($sequenceNumber)
+ {
+ Validate::isInteger($sequenceNumber, 'sequenceNumber');
+ $this->_sequenceNumber = $sequenceNumber;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobSnapshotOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobSnapshotOptions.php
new file mode 100644
index 0000000..fdcfa52
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobSnapshotOptions.php
@@ -0,0 +1,123 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * The optional parameters for createBlobSnapshot wrapper.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateBlobSnapshotOptions extends BlobServiceOptions
+{
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * Gets metadata.
+ *
+ * @return array
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets metadata.
+ *
+ * @param array $metadata The metadata array.
+ *
+ * @return none
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Gets access condition.
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition.
+ *
+ * @param AccessCondition $accessCondition The access condition object.
+ *
+ * @return none
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets lease Id.
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id.
+ *
+ * @param string $leaseId The lease Id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobSnapshotResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobSnapshotResult.php
new file mode 100644
index 0000000..84f8d0e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateBlobSnapshotResult.php
@@ -0,0 +1,154 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The result of creating Blob snapshot.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateBlobSnapshotResult
+{
+ /**
+ * A DateTime value which uniquely identifies the snapshot.
+ * @var string
+ */
+ private $_snapshot;
+
+ /**
+ * The ETag for the destination blob.
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * The date/time that the copy operation to the destination blob completed.
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * Creates CreateBlobSnapshotResult object from the response of the
+ * create Blob snapshot request.
+ *
+ * @param array $headers The HTTP response headers in array representation.
+ *
+ * @return CreateBlobSnapshotResult
+ */
+ public static function create($headers)
+ {
+ $result = new CreateBlobSnapshotResult();
+ $headerWithLowerCaseKey = array_change_key_case($headers);
+
+ $result->setETag($headerWithLowerCaseKey[Resources::ETAG]);
+
+ $result->setLastModified(
+ Utilities::rfc1123ToDateTime(
+ $headerWithLowerCaseKey[Resources::LAST_MODIFIED]
+ )
+ );
+
+ $result->setSnapshot($headerWithLowerCaseKey[Resources::X_MS_SNAPSHOT]);
+
+ return $result;
+ }
+
+ /**
+ * Gets snapshot.
+ *
+ * @return string
+ */
+ public function getSnapshot()
+ {
+ return $this->_snapshot;
+ }
+
+ /**
+ * Sets snapshot.
+ *
+ * @param string $snapshot value.
+ *
+ * @return none
+ */
+ public function setSnapshot($snapshot)
+ {
+ $this->_snapshot = $snapshot;
+ }
+
+ /**
+ * Gets ETag.
+ *
+ * @return string
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets ETag.
+ *
+ * @param string $etag value.
+ *
+ * @return none
+ */
+ public function setETag($etag)
+ {
+ $this->_etag = $etag;
+ }
+
+ /**
+ * Gets blob lastModified.
+ *
+ * @return \DateTime
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets blob lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none
+ */
+ public function setLastModified($lastModified)
+ {
+ $this->_lastModified = $lastModified;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateContainerOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateContainerOptions.php
new file mode 100644
index 0000000..811b50b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/CreateContainerOptions.php
@@ -0,0 +1,123 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Blob\Models\BlobServiceOptions;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Optional parameters for createContainer API
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateContainerOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_publicAccess;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * Gets container public access.
+ *
+ * @return string.
+ */
+ public function getPublicAccess()
+ {
+ return $this->_publicAccess;
+ }
+
+ /**
+ * Specifies whether data in the container may be accessed publicly and the level
+ * of access. Possible values include:
+ * 1) container: Specifies full public read access for container and blob data.
+ * Clients can enumerate blobs within the container via anonymous request, but
+ * cannot enumerate containers within the storage account.
+ * 2) blob: Specifies public read access for blobs. Blob data within this
+ * container can be read via anonymous request, but container data is not
+ * available. Clients cannot enumerate blobs within the container via
+ * anonymous request.
+ * If this value is not specified in the request, container data is private to
+ * the account owner.
+ *
+ * @param string $publicAccess access modifier for the container
+ *
+ * @return none.
+ */
+ public function setPublicAccess($publicAccess)
+ {
+ Validate::isString($publicAccess, 'publicAccess');
+ $this->_publicAccess = $publicAccess;
+ }
+
+ /**
+ * Gets user defined metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets user defined metadata. This metadata should be added without the header
+ * prefix (x-ms-meta-*).
+ *
+ * @param array $metadata user defined metadata object in array form.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Adds new metadata element. This element should be added without the header
+ * prefix (x-ms-meta-*).
+ *
+ * @param string $key metadata key element.
+ * @param string $value metadata value element.
+ *
+ * @return none.
+ */
+ public function addMetadata($key, $value)
+ {
+ $this->_metadata[$key] = $value;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/DeleteBlobOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/DeleteBlobOptions.php
new file mode 100644
index 0000000..3792231
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/DeleteBlobOptions.php
@@ -0,0 +1,151 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Optional parameters for deleteBlob wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class DeleteBlobOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var string
+ */
+ private $_snapshot;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * @var boolean
+ */
+ private $_deleteSnaphotsOnly;
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets blob snapshot.
+ *
+ * @return string.
+ */
+ public function getSnapshot()
+ {
+ return $this->_snapshot;
+ }
+
+ /**
+ * Sets blob snapshot.
+ *
+ * @param string $snapshot value.
+ *
+ * @return none.
+ */
+ public function setSnapshot($snapshot)
+ {
+ $this->_snapshot = $snapshot;
+ }
+
+ /**
+ * Gets blob deleteSnaphotsOnly.
+ *
+ * @return boolean.
+ */
+ public function getDeleteSnaphotsOnly()
+ {
+ return $this->_deleteSnaphotsOnly;
+ }
+
+ /**
+ * Sets blob deleteSnaphotsOnly.
+ *
+ * @param string $deleteSnaphotsOnly value.
+ *
+ * @return boolean.
+ */
+ public function setDeleteSnaphotsOnly($deleteSnaphotsOnly)
+ {
+ Validate::isBoolean($deleteSnaphotsOnly);
+ $this->_deleteSnaphotsOnly = $deleteSnaphotsOnly;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/DeleteContainerOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/DeleteContainerOptions.php
new file mode 100644
index 0000000..9066804
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/DeleteContainerOptions.php
@@ -0,0 +1,68 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * The optional for deleteContainer API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class DeleteContainerOptions extends BlobServiceOptions
+{
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobMetadataOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobMetadataOptions.php
new file mode 100644
index 0000000..37d5c20
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobMetadataOptions.php
@@ -0,0 +1,122 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Optional parameters for getBlobMetadata wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetBlobMetadataOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var string
+ */
+ private $_snapshot;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets blob snapshot.
+ *
+ * @return string.
+ */
+ public function getSnapshot()
+ {
+ return $this->_snapshot;
+ }
+
+ /**
+ * Sets blob snapshot.
+ *
+ * @param string $snapshot value.
+ *
+ * @return none.
+ */
+ public function setSnapshot($snapshot)
+ {
+ $this->_snapshot = $snapshot;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobMetadataResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobMetadataResult.php
new file mode 100644
index 0000000..9d3610c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobMetadataResult.php
@@ -0,0 +1,147 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds results of calling getBlobMetadata wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetBlobMetadataResult
+{
+
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * Creates GetBlobMetadataResult from response headers.
+ *
+ * @param array $headers The HTTP response headers.
+ * @param array $metadata The blob metadata array.
+ *
+ * @return GetBlobMetadataResult
+ */
+ public static function create($headers, $metadata)
+ {
+ $result = new GetBlobMetadataResult();
+ $date = $headers[Resources::LAST_MODIFIED];
+ $result->setLastModified(Utilities::rfc1123ToDateTime($date));
+ $result->setETag($headers[Resources::ETAG]);
+ $result->setMetadata(is_null($metadata) ? array() : $metadata);
+
+ return $result;
+ }
+
+ /**
+ * Gets blob lastModified.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets blob lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ Validate::isDate($lastModified);
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * Gets blob etag.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets blob etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ Validate::isString($etag, 'etag');
+ $this->_etag = $etag;
+ }
+
+ /**
+ * Gets blob metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets blob metadata.
+ *
+ * @param string $metadata value.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobOptions.php
new file mode 100644
index 0000000..dd41e01
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobOptions.php
@@ -0,0 +1,207 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Optional parameters for getBlob wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetBlobOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var string
+ */
+ private $_snapshot;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * @var boolean
+ */
+ private $_computeRangeMD5;
+
+ /**
+ * @var integer
+ */
+ private $_rangeStart;
+
+ /**
+ * @var integer
+ */
+ private $_rangeEnd;
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets blob snapshot.
+ *
+ * @return string.
+ */
+ public function getSnapshot()
+ {
+ return $this->_snapshot;
+ }
+
+ /**
+ * Sets blob snapshot.
+ *
+ * @param string $snapshot value.
+ *
+ * @return none.
+ */
+ public function setSnapshot($snapshot)
+ {
+ $this->_snapshot = $snapshot;
+ }
+
+ /**
+ * Gets rangeStart
+ *
+ * @return integer
+ */
+ public function getRangeStart()
+ {
+ return $this->_rangeStart;
+ }
+
+ /**
+ * Sets rangeStart
+ *
+ * @param integer $rangeStart the blob lease id.
+ *
+ * @return none
+ */
+ public function setRangeStart($rangeStart)
+ {
+ Validate::isInteger($rangeStart, 'rangeStart');
+ $this->_rangeStart = $rangeStart;
+ }
+
+ /**
+ * Gets rangeEnd
+ *
+ * @return integer
+ */
+ public function getRangeEnd()
+ {
+ return $this->_rangeEnd;
+ }
+
+ /**
+ * Sets rangeEnd
+ *
+ * @param integer $rangeEnd range end value in bytes
+ *
+ * @return none
+ */
+ public function setRangeEnd($rangeEnd)
+ {
+ Validate::isInteger($rangeEnd, 'rangeEnd');
+ $this->_rangeEnd = $rangeEnd;
+ }
+
+ /**
+ * Gets computeRangeMD5
+ *
+ * @return boolean
+ */
+ public function getComputeRangeMD5()
+ {
+ return $this->_computeRangeMD5;
+ }
+
+ /**
+ * Sets computeRangeMD5
+ *
+ * @param boolean $computeRangeMD5 value
+ *
+ * @return none
+ */
+ public function setComputeRangeMD5($computeRangeMD5)
+ {
+ Validate::isBoolean($computeRangeMD5);
+ $this->_computeRangeMD5 = $computeRangeMD5;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobPropertiesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobPropertiesOptions.php
new file mode 100644
index 0000000..155e70a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobPropertiesOptions.php
@@ -0,0 +1,122 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Optional parameters for getBlobProperties wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetBlobPropertiesOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var string
+ */
+ private $_snapshot;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets blob snapshot.
+ *
+ * @return string.
+ */
+ public function getSnapshot()
+ {
+ return $this->_snapshot;
+ }
+
+ /**
+ * Sets blob snapshot.
+ *
+ * @param string $snapshot value.
+ *
+ * @return none.
+ */
+ public function setSnapshot($snapshot)
+ {
+ $this->_snapshot = $snapshot;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobPropertiesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobPropertiesResult.php
new file mode 100644
index 0000000..6e270e2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobPropertiesResult.php
@@ -0,0 +1,95 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Holds result of calling getBlobProperties
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetBlobPropertiesResult
+{
+ /**
+ * @var BlobProperties
+ */
+ private $_properties;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * Gets blob metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets blob metadata.
+ *
+ * @param string $metadata value.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Gets blob properties.
+ *
+ * @return BlobProperties.
+ */
+ public function getProperties()
+ {
+ return $this->_properties;
+ }
+
+ /**
+ * Sets blob properties.
+ *
+ * @param BlobProperties $properties value.
+ *
+ * @return none.
+ */
+ public function setProperties($properties)
+ {
+ $this->_properties = $properties;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobResult.php
new file mode 100644
index 0000000..06a9818
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetBlobResult.php
@@ -0,0 +1,143 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Blob\Models\BlobProperties;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds result of GetBlob API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetBlobResult
+{
+ /**
+ * @var BlobProperties
+ */
+ private $_properties;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * @var resource
+ */
+ private $_contentStream;
+
+ /**
+ * Creates GetBlobResult from getBlob call.
+ *
+ * @param array $headers The HTTP response headers.
+ * @param string $body The response body.
+ * @param array $metadata The blob metadata.
+ *
+ * @return GetBlobResult
+ */
+ public static function create($headers, $body, $metadata)
+ {
+ $result = new GetBlobResult();
+ $result->setContentStream(Utilities::stringToStream($body));
+ $result->setProperties(BlobProperties::create($headers));
+ $result->setMetadata(is_null($metadata) ? array() : $metadata);
+
+ return $result;
+ }
+
+ /**
+ * Gets blob metadata.
+ *
+ * @return array
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets blob metadata.
+ *
+ * @param string $metadata value.
+ *
+ * @return none
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Gets blob properties.
+ *
+ * @return BlobProperties
+ */
+ public function getProperties()
+ {
+ return $this->_properties;
+ }
+
+ /**
+ * Sets blob properties.
+ *
+ * @param BlobProperties $properties value.
+ *
+ * @return none
+ */
+ public function setProperties($properties)
+ {
+ $this->_properties = $properties;
+ }
+
+ /**
+ * Gets blob contentStream.
+ *
+ * @return resource
+ */
+ public function getContentStream()
+ {
+ return $this->_contentStream;
+ }
+
+ /**
+ * Sets blob contentStream.
+ *
+ * @param resource $contentStream The stream handle.
+ *
+ * @return none
+ */
+ public function setContentStream($contentStream)
+ {
+ $this->_contentStream = $contentStream;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetContainerACLResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetContainerACLResult.php
new file mode 100644
index 0000000..f1df9ce
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetContainerACLResult.php
@@ -0,0 +1,145 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Blob\Models\ContainerAcl;
+
+/**
+ * Holds container ACL
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetContainerAclResult
+{
+ /**
+ * @var ContainerAcl
+ */
+ private $_containerACL;
+
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * Parses the given array into signed identifiers
+ *
+ * @param string $publicAccess container public access
+ * @param string $etag container etag
+ * @param \DateTime $lastModified last modification date
+ * @param array $parsed parsed response into array
+ * representation
+ *
+ * @return none.
+ */
+ public static function create($publicAccess, $etag, $lastModified, $parsed)
+ {
+ $result = new GetContainerAclResult();
+ $result->setETag($etag);
+ $result->setLastModified($lastModified);
+ $acl = ContainerAcl::create($publicAccess, $parsed);
+ $result->setContainerAcl($acl);
+
+ return $result;
+ }
+
+ /**
+ * Gets container ACL
+ *
+ * @return ContainerAcl
+ */
+ public function getContainerAcl()
+ {
+ return $this->_containerACL;
+ }
+
+ /**
+ * Sets container ACL
+ *
+ * @param ContainerAcl $containerACL value.
+ *
+ * @return none.
+ */
+ public function setContainerAcl($containerACL)
+ {
+ $this->_containerACL = $containerACL;
+ }
+
+ /**
+ * Gets container lastModified.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets container lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * Gets container etag.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets container etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ $this->_etag = $etag;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetContainerPropertiesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetContainerPropertiesResult.php
new file mode 100644
index 0000000..b3e606a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/GetContainerPropertiesResult.php
@@ -0,0 +1,126 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Holds result of getContainerProperties and getContainerMetadata
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetContainerPropertiesResult
+{
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * Any operation that modifies the container or its properties or metadata
+ * updates the last modified time. Operations on blobs do not affect the last
+ * modified time of the container.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets container lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * The entity tag for the container. If the request version is 2011-08-18 or
+ * newer, the ETag value will be in quotes.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets container etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ $this->_etag = $etag;
+ }
+
+ /**
+ * Gets user defined metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets user defined metadata. This metadata should be added without the header
+ * prefix (x-ms-meta-*).
+ *
+ * @param array $metadata user defined metadata object in array form.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/LeaseMode.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/LeaseMode.php
new file mode 100644
index 0000000..32f1763
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/LeaseMode.php
@@ -0,0 +1,46 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Modes for leasing a blob
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class LeaseMode
+{
+ const ACQUIRE_ACTION = 'acquire';
+ const RENEW_ACTION = 'renew';
+ const RELEASE_ACTION = 'release';
+ const BREAK_ACTION = 'break';
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobBlocksOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobBlocksOptions.php
new file mode 100644
index 0000000..0b33617
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobBlocksOptions.php
@@ -0,0 +1,187 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Optional parameters for listBlobBlock wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListBlobBlocksOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var string
+ */
+ private $_snapshot;
+
+ /**
+ * @var boolean
+ */
+ private $_includeUncommittedBlobs;
+
+ /**
+ * @var boolean
+ */
+ private $_includeCommittedBlobs;
+
+ /**
+ * Holds result of list type. You can access it by this order:
+ * $_listType[$this->_includeUncommittedBlobs][$this->_includeCommittedBlobs]
+ *
+ * @var array
+ */
+ private static $_listType;
+
+ /**
+ * Constructs the static variable $listType.
+ */
+ public function __construct()
+ {
+ self::$_listType[true][true] = 'all';
+ self::$_listType[true][false] = 'uncommitted';
+ self::$_listType[false][true] = 'committed';
+ self::$_listType[false][false] = 'all';
+
+ $this->_includeUncommittedBlobs = false;
+ $this->_includeCommittedBlobs = false;
+ }
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets blob snapshot.
+ *
+ * @return string.
+ */
+ public function getSnapshot()
+ {
+ return $this->_snapshot;
+ }
+
+ /**
+ * Sets blob snapshot.
+ *
+ * @param string $snapshot value.
+ *
+ * @return none.
+ */
+ public function setSnapshot($snapshot)
+ {
+ $this->_snapshot = $snapshot;
+ }
+
+ /**
+ * Sets the include uncommittedBlobs flag.
+ *
+ * @param bool $includeUncommittedBlobs value.
+ *
+ * @return none.
+ */
+ public function setIncludeUncommittedBlobs($includeUncommittedBlobs)
+ {
+ Validate::isBoolean($includeUncommittedBlobs);
+ $this->_includeUncommittedBlobs = $includeUncommittedBlobs;
+ }
+
+ /**
+ * Indicates if uncommittedBlobs is included or not.
+ *
+ * @return boolean.
+ */
+ public function getIncludeUncommittedBlobs()
+ {
+ return $this->_includeUncommittedBlobs;
+ }
+
+ /**
+ * Sets the include committedBlobs flag.
+ *
+ * @param bool $includeCommittedBlobs value.
+ *
+ * @return none.
+ */
+ public function setIncludeCommittedBlobs($includeCommittedBlobs)
+ {
+ Validate::isBoolean($includeCommittedBlobs);
+ $this->_includeCommittedBlobs = $includeCommittedBlobs;
+ }
+
+ /**
+ * Indicates if committedBlobs is included or not.
+ *
+ * @return boolean.
+ */
+ public function getIncludeCommittedBlobs()
+ {
+ return $this->_includeCommittedBlobs;
+ }
+
+ /**
+ * Gets block list type.
+ *
+ * @return string
+ */
+ public function getBlockListType()
+ {
+ $includeUncommitted = $this->_includeUncommittedBlobs;
+ $includeCommitted = $this->_includeCommittedBlobs;
+
+ return self::$_listType[$includeUncommitted][$includeCommitted];
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobBlocksResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobBlocksResult.php
new file mode 100644
index 0000000..b3ab3df
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobBlocksResult.php
@@ -0,0 +1,274 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds result of listBlobBlocks
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListBlobBlocksResult
+{
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * @var string
+ */
+ private $_contentType;
+
+ /**
+ * @var integer
+ */
+ private $_contentLength;
+
+ /**
+ * @var array
+ */
+ private $_committedBlocks;
+
+ /**
+ * @var array
+ */
+ private $_uncommittedBlocks;
+
+ /**
+ * Gets block entries from parsed response
+ *
+ * @param array $parsed HTTP response
+ * @param string $type Block type
+ *
+ * @return array
+ */
+ private static function _getEntries($parsed, $type)
+ {
+ $entries = array();
+
+ if (is_array($parsed)) {
+ $rawEntries = array();
+
+ if ( array_key_exists($type, $parsed)
+ && is_array($parsed[$type])
+ && !empty($parsed[$type])
+ ) {
+ $rawEntries = Utilities::getArray($parsed[$type]['Block']);
+ }
+
+ foreach ($rawEntries as $value) {
+ $entries[base64_decode($value['Name'])] = $value['Size'];
+ }
+ }
+
+ return $entries;
+ }
+
+ /**
+ * Creates ListBlobBlocksResult from given response headers and parsed body
+ *
+ * @param array $headers HTTP response headers
+ * @param array $parsed HTTP response body in array representation
+ *
+ * @return ListBlobBlocksResult
+ */
+ public static function create($headers, $parsed)
+ {
+ $result = new ListBlobBlocksResult();
+ $clean = array_change_key_case($headers);
+
+ $result->setETag(Utilities::tryGetValue($clean, Resources::ETAG));
+ $date = Utilities::tryGetValue($clean, Resources::LAST_MODIFIED);
+ if (!is_null($date)) {
+ $date = Utilities::rfc1123ToDateTime($date);
+ $result->setLastModified($date);
+ }
+ $result->setContentLength(
+ intval(
+ Utilities::tryGetValue($clean, Resources::X_MS_BLOB_CONTENT_LENGTH)
+ )
+ );
+ $result->setContentType(
+ Utilities::tryGetValue($clean, Resources::CONTENT_TYPE)
+ );
+
+ $result->_uncommittedBlocks = self::_getEntries(
+ $parsed, 'UncommittedBlocks'
+ );
+ $result->_committedBlocks = self::_getEntries($parsed, 'CommittedBlocks');
+
+ return $result;
+ }
+
+ /**
+ * Gets blob lastModified.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets blob lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ Validate::isDate($lastModified);
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * Gets blob etag.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets blob etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ $this->_etag = $etag;
+ }
+
+ /**
+ * Gets blob contentType.
+ *
+ * @return string.
+ */
+ public function getContentType()
+ {
+ return $this->_contentType;
+ }
+
+ /**
+ * Sets blob contentType.
+ *
+ * @param string $contentType value.
+ *
+ * @return none.
+ */
+ public function setContentType($contentType)
+ {
+ $this->_contentType = $contentType;
+ }
+
+ /**
+ * Gets blob contentLength.
+ *
+ * @return integer.
+ */
+ public function getContentLength()
+ {
+ return $this->_contentLength;
+ }
+
+ /**
+ * Sets blob contentLength.
+ *
+ * @param integer $contentLength value.
+ *
+ * @return none.
+ */
+ public function setContentLength($contentLength)
+ {
+ Validate::isInteger($contentLength, 'contentLength');
+ $this->_contentLength = $contentLength;
+ }
+
+ /**
+ * Gets uncommitted blocks
+ *
+ * @return array
+ */
+ public function getUncommittedBlocks()
+ {
+ return $this->_uncommittedBlocks;
+ }
+
+ /**
+ * Sets uncommitted blocks
+ *
+ * @param array $uncommittedBlocks The uncommitted blocks entries
+ *
+ * @return none.
+ */
+ public function setUncommittedBlocks($uncommittedBlocks)
+ {
+ $this->_uncommittedBlocks = $uncommittedBlocks;
+ }
+
+ /**
+ * Gets committed blocks
+ *
+ * @return array
+ */
+ public function getCommittedBlocks()
+ {
+ return $this->_committedBlocks;
+ }
+
+ /**
+ * Sets committed blocks
+ *
+ * @param array $committedBlocks The committed blocks entries
+ *
+ * @return none.
+ */
+ public function setCommittedBlocks($committedBlocks)
+ {
+ $this->_committedBlocks = $committedBlocks;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobsOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobsOptions.php
new file mode 100644
index 0000000..f0db2dc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobsOptions.php
@@ -0,0 +1,238 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Optional parameters for listBlobs API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListBlobsOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_prefix;
+
+ /**
+ * @var string
+ */
+ private $_marker;
+
+ /**
+ * @var string
+ */
+ private $_delimiter;
+
+ /**
+ * @var integer
+ */
+ private $_maxResults;
+
+ /**
+ * @var boolean
+ */
+ private $_includeMetadata;
+
+ /**
+ * @var boolean
+ */
+ private $_includeSnapshots;
+
+ /**
+ * @var boolean
+ */
+ private $_includeUncommittedBlobs;
+
+ /**
+ * Gets prefix.
+ *
+ * @return string.
+ */
+ public function getPrefix()
+ {
+ return $this->_prefix;
+ }
+
+ /**
+ * Sets prefix.
+ *
+ * @param string $prefix value.
+ *
+ * @return none.
+ */
+ public function setPrefix($prefix)
+ {
+ Validate::isString($prefix, 'prefix');
+ $this->_prefix = $prefix;
+ }
+
+ /**
+ * Gets delimiter.
+ *
+ * @return string.
+ */
+ public function getDelimiter()
+ {
+ return $this->_delimiter;
+ }
+
+ /**
+ * Sets prefix.
+ *
+ * @param string $delimiter value.
+ *
+ * @return none.
+ */
+ public function setDelimiter($delimiter)
+ {
+ Validate::isString($delimiter, 'delimiter');
+ $this->_delimiter = $delimiter;
+ }
+
+ /**
+ * Gets marker.
+ *
+ * @return string.
+ */
+ public function getMarker()
+ {
+ return $this->_marker;
+ }
+
+ /**
+ * Sets marker.
+ *
+ * @param string $marker value.
+ *
+ * @return none.
+ */
+ public function setMarker($marker)
+ {
+ Validate::isString($marker, 'marker');
+ $this->_marker = $marker;
+ }
+
+ /**
+ * Gets max results.
+ *
+ * @return integer.
+ */
+ public function getMaxResults()
+ {
+ return $this->_maxResults;
+ }
+
+ /**
+ * Sets max results.
+ *
+ * @param integer $maxResults value.
+ *
+ * @return none.
+ */
+ public function setMaxResults($maxResults)
+ {
+ Validate::isInteger($maxResults, 'maxResults');
+ $this->_maxResults = $maxResults;
+ }
+
+ /**
+ * Indicates if metadata is included or not.
+ *
+ * @return boolean.
+ */
+ public function getIncludeMetadata()
+ {
+ return $this->_includeMetadata;
+ }
+
+ /**
+ * Sets the include metadata flag.
+ *
+ * @param bool $includeMetadata value.
+ *
+ * @return none.
+ */
+ public function setIncludeMetadata($includeMetadata)
+ {
+ Validate::isBoolean($includeMetadata);
+ $this->_includeMetadata = $includeMetadata;
+ }
+
+ /**
+ * Indicates if snapshots is included or not.
+ *
+ * @return boolean.
+ */
+ public function getIncludeSnapshots()
+ {
+ return $this->_includeSnapshots;
+ }
+
+ /**
+ * Sets the include snapshots flag.
+ *
+ * @param bool $includeSnapshots value.
+ *
+ * @return none.
+ */
+ public function setIncludeSnapshots($includeSnapshots)
+ {
+ Validate::isBoolean($includeSnapshots);
+ $this->_includeSnapshots = $includeSnapshots;
+ }
+
+ /**
+ * Indicates if uncommittedBlobs is included or not.
+ *
+ * @return boolean.
+ */
+ public function getIncludeUncommittedBlobs()
+ {
+ return $this->_includeUncommittedBlobs;
+ }
+
+ /**
+ * Sets the include uncommittedBlobs flag.
+ *
+ * @param bool $includeUncommittedBlobs value.
+ *
+ * @return none.
+ */
+ public function setIncludeUncommittedBlobs($includeUncommittedBlobs)
+ {
+ Validate::isBoolean($includeUncommittedBlobs);
+ $this->_includeUncommittedBlobs = $includeUncommittedBlobs;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobsResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobsResult.php
new file mode 100644
index 0000000..d2c6897
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListBlobsResult.php
@@ -0,0 +1,339 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Blob\Models\Blob;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\InvalidArgumentTypeException;
+
+/**
+ * Hold result of calliing listBlobs wrapper.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListBlobsResult
+{
+ /**
+ * @var array
+ */
+ private $_blobPrefixes;
+
+ /**
+ * @var array
+ */
+ private $_blobs;
+
+ /**
+ * @var string
+ */
+ private $_delimiter;
+
+ /**
+ * @var string
+ */
+ private $_prefix;
+
+ /**
+ * @var string
+ */
+ private $_marker;
+
+ /**
+ * @var string
+ */
+ private $_nextMarker;
+
+ /**
+ * @var integer
+ */
+ private $_maxResults;
+
+ /**
+ * @var string
+ */
+ private $_containerName;
+
+ /**
+ * Creates ListBlobsResult object from parsed XML response.
+ *
+ * @param array $parsed XML response parsed into array.
+ *
+ * @return ListBlobsResult
+ */
+ public static function create($parsed)
+ {
+ $result = new ListBlobsResult();
+ $result->_containerName = Utilities::tryGetKeysChainValue(
+ $parsed,
+ Resources::XTAG_ATTRIBUTES,
+ Resources::XTAG_CONTAINER_NAME
+ );
+ $result->_prefix = Utilities::tryGetValue(
+ $parsed, Resources::QP_PREFIX
+ );
+ $result->_marker = Utilities::tryGetValue(
+ $parsed, Resources::QP_MARKER
+ );
+ $result->_nextMarker = Utilities::tryGetValue(
+ $parsed, Resources::QP_NEXT_MARKER
+ );
+ $result->_maxResults = intval(
+ Utilities::tryGetValue($parsed, Resources::QP_MAX_RESULTS, 0)
+ );
+ $result->_delimiter = Utilities::tryGetValue(
+ $parsed, Resources::QP_DELIMITER
+ );
+ $result->_blobs = array();
+ $result->_blobPrefixes = array();
+ $rawBlobs = array();
+ $rawBlobPrefixes = array();
+
+ if ( is_array($parsed['Blobs'])
+ && array_key_exists('Blob', $parsed['Blobs'])
+ ) {
+ $rawBlobs = Utilities::getArray($parsed['Blobs']['Blob']);
+ }
+
+ foreach ($rawBlobs as $value) {
+ $blob = new Blob();
+ $blob->setName($value['Name']);
+ $blob->setUrl($value['Url']);
+ $blob->setSnapshot(Utilities::tryGetValue($value, 'Snapshot'));
+ $blob->setProperties(
+ BlobProperties::create(
+ Utilities::tryGetValue($value, 'Properties')
+ )
+ );
+ $blob->setMetadata(
+ Utilities::tryGetValue($value, Resources::QP_METADATA, array())
+ );
+
+ $result->_blobs[] = $blob;
+ }
+
+ if ( is_array($parsed['Blobs'])
+ && array_key_exists('BlobPrefix', $parsed['Blobs'])
+ ) {
+ $rawBlobPrefixes = Utilities::getArray($parsed['Blobs']['BlobPrefix']);
+ }
+
+ foreach ($rawBlobPrefixes as $value) {
+ $blobPrefix = new BlobPrefix();
+ $blobPrefix->setName($value['Name']);
+
+ $result->_blobPrefixes[] = $blobPrefix;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets blobs.
+ *
+ * @return array
+ */
+ public function getBlobs()
+ {
+ return $this->_blobs;
+ }
+
+ /**
+ * Sets blobs.
+ *
+ * @param array $blobs list of blobs
+ *
+ * @return none
+ */
+ public function setBlobs($blobs)
+ {
+ $this->_blobs = array();
+ foreach ($blobs as $blob) {
+ $this->_blobs[] = clone $blob;
+ }
+ }
+
+ /**
+ * Gets blobPrefixes.
+ *
+ * @return array
+ */
+ public function getBlobPrefixes()
+ {
+ return $this->_blobPrefixes;
+ }
+
+ /**
+ * Sets blobPrefixes.
+ *
+ * @param array $blobPrefixes list of blobPrefixes
+ *
+ * @return none
+ */
+ public function setBlobPrefixes($blobPrefixes)
+ {
+ $this->_blobPrefixes = array();
+ foreach ($blobPrefixes as $blob) {
+ $this->_blobPrefixes[] = clone $blob;
+ }
+ }
+
+ /**
+ * Gets prefix.
+ *
+ * @return string
+ */
+ public function getPrefix()
+ {
+ return $this->_prefix;
+ }
+
+ /**
+ * Sets prefix.
+ *
+ * @param string $prefix value.
+ *
+ * @return none
+ */
+ public function setPrefix($prefix)
+ {
+ $this->_prefix = $prefix;
+ }
+
+ /**
+ * Gets prefix.
+ *
+ * @return string
+ */
+ public function getDelimiter()
+ {
+ return $this->_delimiter;
+ }
+
+ /**
+ * Sets prefix.
+ *
+ * @param string $delimiter value.
+ *
+ * @return none
+ */
+ public function setDelimiter($delimiter)
+ {
+ $this->_delimiter = $delimiter;
+ }
+
+ /**
+ * Gets marker.
+ *
+ * @return string
+ */
+ public function getMarker()
+ {
+ return $this->_marker;
+ }
+
+ /**
+ * Sets marker.
+ *
+ * @param string $marker value.
+ *
+ * @return none
+ */
+ public function setMarker($marker)
+ {
+ $this->_marker = $marker;
+ }
+
+ /**
+ * Gets max results.
+ *
+ * @return integer
+ */
+ public function getMaxResults()
+ {
+ return $this->_maxResults;
+ }
+
+ /**
+ * Sets max results.
+ *
+ * @param integer $maxResults value.
+ *
+ * @return none
+ */
+ public function setMaxResults($maxResults)
+ {
+ $this->_maxResults = $maxResults;
+ }
+
+ /**
+ * Gets next marker.
+ *
+ * @return string
+ */
+ public function getNextMarker()
+ {
+ return $this->_nextMarker;
+ }
+
+ /**
+ * Sets next marker.
+ *
+ * @param string $nextMarker value.
+ *
+ * @return none
+ */
+ public function setNextMarker($nextMarker)
+ {
+ $this->_nextMarker = $nextMarker;
+ }
+
+ /**
+ * Gets container name.
+ *
+ * @return string
+ */
+ public function getContainerName()
+ {
+ return $this->_containerName;
+ }
+
+ /**
+ * Sets container name.
+ *
+ * @param string $containerName value.
+ *
+ * @return none
+ */
+ public function setContainerName($containerName)
+ {
+ $this->_containerName = $containerName;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListContainersOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListContainersOptions.php
new file mode 100644
index 0000000..7e27e77
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListContainersOptions.php
@@ -0,0 +1,172 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Blob\Models\BlobServiceOptions;
+use \WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Options for listBlobs API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListContainersOptions extends BlobServiceOptions
+{
+ /**
+ * Filters the results to return only containers whose name begins with the
+ * specified prefix.
+ *
+ * @var string
+ */
+ private $_prefix;
+
+ /**
+ * Identifies the portion of the list to be returned with the next list operation
+ * The operation returns a marker value within the
+ * response body if the list returned was not complete. The marker value may
+ * then be used in a subsequent call to request the next set of list items.
+ * The marker value is opaque to the client.
+ *
+ * @var string
+ */
+ private $_marker;
+
+ /**
+ * Specifies the maximum number of containers to return. If the request does not
+ * specify maxresults, or specifies a value greater than 5,000, the server will
+ * return up to 5,000 items. If the parameter is set to a value less than or
+ * equal to zero, the server will return status code 400 (Bad Request).
+ *
+ * @var string
+ */
+ private $_maxResults;
+
+ /**
+ * Include this parameter to specify that the container's metadata be returned
+ * as part of the response body.
+ *
+ * @var bool
+ */
+ private $_includeMetadata;
+
+ /**
+ * Gets prefix.
+ *
+ * @return string.
+ */
+ public function getPrefix()
+ {
+ return $this->_prefix;
+ }
+
+ /**
+ * Sets prefix.
+ *
+ * @param string $prefix value.
+ *
+ * @return none.
+ */
+ public function setPrefix($prefix)
+ {
+ Validate::isString($prefix, 'prefix');
+ $this->_prefix = $prefix;
+ }
+
+ /**
+ * Gets marker.
+ *
+ * @return string.
+ */
+ public function getMarker()
+ {
+ return $this->_marker;
+ }
+
+ /**
+ * Sets marker.
+ *
+ * @param string $marker value.
+ *
+ * @return none.
+ */
+ public function setMarker($marker)
+ {
+ Validate::isString($marker, 'marker');
+ $this->_marker = $marker;
+ }
+
+ /**
+ * Gets max results.
+ *
+ * @return string.
+ */
+ public function getMaxResults()
+ {
+ return $this->_maxResults;
+ }
+
+ /**
+ * Sets max results.
+ *
+ * @param string $maxResults value.
+ *
+ * @return none.
+ */
+ public function setMaxResults($maxResults)
+ {
+ Validate::isString($maxResults, 'maxResults');
+ $this->_maxResults = $maxResults;
+ }
+
+ /**
+ * Indicates if metadata is included or not.
+ *
+ * @return string.
+ */
+ public function getIncludeMetadata()
+ {
+ return $this->_includeMetadata;
+ }
+
+ /**
+ * Sets the include metadata flag.
+ *
+ * @param bool $includeMetadata value.
+ *
+ * @return none.
+ */
+ public function setIncludeMetadata($includeMetadata)
+ {
+ Validate::isBoolean($includeMetadata);
+ $this->_includeMetadata = $includeMetadata;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListContainersResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListContainersResult.php
new file mode 100644
index 0000000..b4f04ff
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListContainersResult.php
@@ -0,0 +1,261 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Blob\Models\Container;
+
+/**
+ * Container to hold list container response object.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListContainersResult
+{
+ /**
+ * @var array
+ */
+ private $_containers;
+
+ /**
+ * @var string
+ */
+ private $_prefix;
+
+ /**
+ * @var string
+ */
+ private $_marker;
+
+ /**
+ * @var string
+ */
+ private $_nextMarker;
+
+ /**
+ * @var integer
+ */
+ private $_maxResults;
+
+ /**
+ * @var string
+ */
+ private $_accountName;
+
+ /**
+ * Creates ListBlobResult object from parsed XML response.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return ListBlobResult
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new ListContainersResult();
+ $result->_accountName = Utilities::tryGetKeysChainValue(
+ $parsedResponse,
+ Resources::XTAG_ATTRIBUTES,
+ Resources::XTAG_ACCOUNT_NAME
+ );
+ $result->_prefix = Utilities::tryGetValue(
+ $parsedResponse, Resources::QP_PREFIX
+ );
+ $result->_marker = Utilities::tryGetValue(
+ $parsedResponse, Resources::QP_MARKER
+ );
+ $result->_nextMarker = Utilities::tryGetValue(
+ $parsedResponse, Resources::QP_NEXT_MARKER
+ );
+ $result->_maxResults = Utilities::tryGetValue(
+ $parsedResponse, Resources::QP_MAX_RESULTS
+ );
+ $result->_containers = array();
+ $rawContainer = array();
+
+ if ( !empty($parsedResponse['Containers']) ) {
+ $containersArray = $parsedResponse['Containers']['Container'];
+ $rawContainer = Utilities::getArray($containersArray);
+ }
+
+ foreach ($rawContainer as $value) {
+ $container = new Container();
+ $container->setName($value['Name']);
+ $container->setUrl($value['Url']);
+ $container->setMetadata(
+ Utilities::tryGetValue($value, Resources::QP_METADATA, array())
+ );
+ $properties = new ContainerProperties();
+ $date = $value['Properties']['Last-Modified'];
+ $date = Utilities::rfc1123ToDateTime($date);
+ $properties->setLastModified($date);
+ $properties->setETag($value['Properties']['Etag']);
+ $container->setProperties($properties);
+ $result->_containers[] = $container;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Sets containers.
+ *
+ * @param array $containers list of containers.
+ *
+ * @return none
+ */
+ public function setContainers($containers)
+ {
+ $this->_containers = array();
+ foreach ($containers as $container) {
+ $this->_containers[] = clone $container;
+ }
+ }
+
+ /**
+ * Gets containers.
+ *
+ * @return array
+ */
+ public function getContainers()
+ {
+ return $this->_containers;
+ }
+
+ /**
+ * Gets prefix.
+ *
+ * @return string
+ */
+ public function getPrefix()
+ {
+ return $this->_prefix;
+ }
+
+ /**
+ * Sets prefix.
+ *
+ * @param string $prefix value.
+ *
+ * @return none
+ */
+ public function setPrefix($prefix)
+ {
+ $this->_prefix = $prefix;
+ }
+
+ /**
+ * Gets marker.
+ *
+ * @return string
+ */
+ public function getMarker()
+ {
+ return $this->_marker;
+ }
+
+ /**
+ * Sets marker.
+ *
+ * @param string $marker value.
+ *
+ * @return none
+ */
+ public function setMarker($marker)
+ {
+ $this->_marker = $marker;
+ }
+
+ /**
+ * Gets max results.
+ *
+ * @return string
+ */
+ public function getMaxResults()
+ {
+ return $this->_maxResults;
+ }
+
+ /**
+ * Sets max results.
+ *
+ * @param string $maxResults value.
+ *
+ * @return none
+ */
+ public function setMaxResults($maxResults)
+ {
+ $this->_maxResults = $maxResults;
+ }
+
+ /**
+ * Gets next marker.
+ *
+ * @return string
+ */
+ public function getNextMarker()
+ {
+ return $this->_nextMarker;
+ }
+
+ /**
+ * Sets next marker.
+ *
+ * @param string $nextMarker value.
+ *
+ * @return none
+ */
+ public function setNextMarker($nextMarker)
+ {
+ $this->_nextMarker = $nextMarker;
+ }
+
+ /**
+ * Gets account name.
+ *
+ * @return string
+ */
+ public function getAccountName()
+ {
+ return $this->_accountName;
+ }
+
+ /**
+ * Sets account name.
+ *
+ * @param string $accountName value.
+ *
+ * @return none
+ */
+ public function setAccountName($accountName)
+ {
+ $this->_accountName = $accountName;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListPageBlobRangesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListPageBlobRangesOptions.php
new file mode 100644
index 0000000..1da6d9d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListPageBlobRangesOptions.php
@@ -0,0 +1,179 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Optional parameters for listPageBlobRanges wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListPageBlobRangesOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var string
+ */
+ private $_snapshot;
+
+ /**
+ * @var integer
+ */
+ private $_rangeStart;
+
+ /**
+ * @var integer
+ */
+ private $_rangeEnd;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets blob snapshot.
+ *
+ * @return string.
+ */
+ public function getSnapshot()
+ {
+ return $this->_snapshot;
+ }
+
+ /**
+ * Sets blob snapshot.
+ *
+ * @param string $snapshot value.
+ *
+ * @return none.
+ */
+ public function setSnapshot($snapshot)
+ {
+ $this->_snapshot = $snapshot;
+ }
+
+ /**
+ * Gets rangeStart
+ *
+ * @return integer
+ */
+ public function getRangeStart()
+ {
+ return $this->_rangeStart;
+ }
+
+ /**
+ * Sets rangeStart
+ *
+ * @param integer $rangeStart the blob lease id.
+ *
+ * @return none
+ */
+ public function setRangeStart($rangeStart)
+ {
+ Validate::isInteger($rangeStart, 'rangeStart');
+ $this->_rangeStart = $rangeStart;
+ }
+
+ /**
+ * Gets rangeEnd
+ *
+ * @return integer
+ */
+ public function getRangeEnd()
+ {
+ return $this->_rangeEnd;
+ }
+
+ /**
+ * Sets rangeEnd
+ *
+ * @param integer $rangeEnd range end value in bytes
+ *
+ * @return none
+ */
+ public function setRangeEnd($rangeEnd)
+ {
+ Validate::isInteger($rangeEnd, 'rangeEnd');
+ $this->_rangeEnd = $rangeEnd;
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListPageBlobRangesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListPageBlobRangesResult.php
new file mode 100644
index 0000000..e5e80b2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/ListPageBlobRangesResult.php
@@ -0,0 +1,196 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Blob\Models\PageRange;
+
+/**
+ * Holds result of calling listPageBlobRanges wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListPageBlobRangesResult
+{
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * @var integer
+ */
+ private $_contentLength;
+
+ /**
+ * @var array
+ */
+ private $_pageRanges;
+
+ /**
+ * Creates BlobProperties object from $parsed response in array representation
+ *
+ * @param array $headers HTTP response headers
+ * @param array $parsed parsed response in array format.
+ *
+ * @return ListPageBlobRangesResult
+ */
+ public static function create($headers, $parsed)
+ {
+ $result = new ListPageBlobRangesResult();
+ $headers = array_change_key_case($headers);
+
+ $date = $headers[Resources::LAST_MODIFIED];
+ $date = Utilities::rfc1123ToDateTime($date);
+ $blobLength = intval($headers[Resources::X_MS_BLOB_CONTENT_LENGTH]);
+ $rawPageRanges = array();
+
+ if (!empty($parsed['PageRange'])) {
+ $parsed = array_change_key_case($parsed);
+ $rawPageRanges = Utilities::getArray($parsed['pagerange']);
+ }
+
+ $result->_pageRanges = array();
+ foreach ($rawPageRanges as $value) {
+ $result->_pageRanges[] = new PageRange(
+ intval($value['Start']), intval($value['End'])
+ );
+ }
+
+ $result->setContentLength($blobLength);
+ $result->setETag($headers[Resources::ETAG]);
+ $result->setLastModified($date);
+
+ return $result;
+ }
+
+ /**
+ * Gets blob lastModified.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets blob lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ Validate::isDate($lastModified);
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * Gets blob etag.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets blob etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ Validate::isString($etag, 'etag');
+ $this->_etag = $etag;
+ }
+
+ /**
+ * Gets blob contentLength.
+ *
+ * @return integer.
+ */
+ public function getContentLength()
+ {
+ return $this->_contentLength;
+ }
+
+ /**
+ * Sets blob contentLength.
+ *
+ * @param integer $contentLength value.
+ *
+ * @return none.
+ */
+ public function setContentLength($contentLength)
+ {
+ Validate::isInteger($contentLength, 'contentLength');
+ $this->_contentLength = $contentLength;
+ }
+
+ /**
+ * Gets page ranges
+ *
+ * @return array
+ */
+ public function getPageRanges()
+ {
+ return $this->_pageRanges;
+ }
+
+ /**
+ * Sets page ranges
+ *
+ * @param array $pageRanges page ranges to set
+ *
+ * @return none
+ */
+ public function setPageRanges($pageRanges)
+ {
+ $this->_pageRanges = array();
+ foreach ($pageRanges as $pageRange) {
+ $this->_pageRanges[] = clone $pageRange;
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/PageRange.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/PageRange.php
new file mode 100644
index 0000000..444126b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/PageRange.php
@@ -0,0 +1,131 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Holds info about page range used in HTTP requests
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class PageRange
+{
+ /**
+ * @var integer
+ */
+ private $_start;
+
+ /**
+ * @var integer
+ */
+ private $_end;
+
+ /**
+ * Constructor
+ *
+ * @param integer $start the page start value
+ * @param integer $end the page end value
+ *
+ * @return PageRange
+ */
+ public function __construct($start = null, $end = null)
+ {
+ $this->_start = $start;
+ $this->_end = $end;
+ }
+
+ /**
+ * Sets page start range
+ *
+ * @param integer $start the page range start
+ *
+ * @return none.
+ */
+ public function setStart($start)
+ {
+ $this->_start = $start;
+ }
+
+ /**
+ * Gets page start range
+ *
+ * @return integer
+ */
+ public function getStart()
+ {
+ return $this->_start;
+ }
+
+ /**
+ * Sets page end range
+ *
+ * @param integer $end the page range end
+ *
+ * @return none.
+ */
+ public function setEnd($end)
+ {
+ $this->_end = $end;
+ }
+
+ /**
+ * Gets page end range
+ *
+ * @return integer
+ */
+ public function getEnd()
+ {
+ return $this->_end;
+ }
+
+ /**
+ * Gets page range length
+ *
+ * @return integer
+ */
+ public function getLength()
+ {
+ return $this->_end - $this->_start + 1;
+ }
+
+ /**
+ * Sets page range length
+ *
+ * @param integer $value new page range
+ *
+ * @return none
+ */
+ public function setLength($value)
+ {
+ $this->_end = $this->_start + $value - 1;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/PageWriteOption.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/PageWriteOption.php
new file mode 100644
index 0000000..3ebd5b8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/PageWriteOption.php
@@ -0,0 +1,44 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * Holds available blob page write options
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class PageWriteOption
+{
+ const CLEAR_OPTION = 'clear';
+ const UPDATE_OPTION = 'update';
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/PublicAccessType.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/PublicAccessType.php
new file mode 100644
index 0000000..c3f79aa
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/PublicAccessType.php
@@ -0,0 +1,66 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Holds public acces types for a container.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class PublicAccessType
+{
+ const NONE = Resources::EMPTY_STRING;
+ const BLOBS_ONLY = 'blob';
+ const CONTAINER_AND_BLOBS = 'container';
+
+ /**
+ * Validates the public access.
+ *
+ * @param string $type The public access type.
+ *
+ * @return boolean
+ */
+ public static function isValid($type)
+ {
+ switch ($type) {
+ case self::NONE:
+ case self::BLOBS_ONLY:
+ case self::CONTAINER_AND_BLOBS:
+ return true;
+
+ default:
+ return false;
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobMetadataOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobMetadataOptions.php
new file mode 100644
index 0000000..f46f9c3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobMetadataOptions.php
@@ -0,0 +1,95 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+
+/**
+ * The optional parameters for setBlobMetadata API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class SetBlobMetadataOptions extends BlobServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobMetadataResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobMetadataResult.php
new file mode 100644
index 0000000..1435a16
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobMetadataResult.php
@@ -0,0 +1,118 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds results of calling getBlobMetadata wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class SetBlobMetadataResult
+{
+
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * Creates SetBlobMetadataResult from response headers.
+ *
+ * @param array $headers response headers
+ *
+ * @return SetBlobMetadataResult
+ */
+ public static function create($headers)
+ {
+ $result = new SetBlobMetadataResult();
+ $date = $headers[Resources::LAST_MODIFIED];
+ $result->setLastModified(Utilities::rfc1123ToDateTime($date));
+ $result->setETag($headers[Resources::ETAG]);
+
+ return $result;
+ }
+
+ /**
+ * Gets blob lastModified.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets blob lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ Validate::isDate($lastModified);
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * Gets blob etag.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets blob etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ Validate::isString($etag, 'etag');
+ $this->_etag = $etag;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobPropertiesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobPropertiesOptions.php
new file mode 100644
index 0000000..f399faa
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobPropertiesOptions.php
@@ -0,0 +1,292 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Optional parameters for setBlobProperties wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class SetBlobPropertiesOptions extends BlobServiceOptions
+{
+ /**
+ * @var BlobProperties
+ */
+ private $_blobProperties;
+
+ /**
+ * @var string
+ */
+ private $_leaseId;
+
+ /**
+ * @var string
+ */
+ private $_sequenceNumberAction;
+
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Creates a new SetBlobPropertiesOptions with a specified BlobProperties
+ * instance.
+ *
+ * @param BlobProperties $blobProperties The blob properties instance.
+ */
+ public function __construct($blobProperties = null)
+ {
+ $this->_blobProperties = is_null($blobProperties)
+ ? new BlobProperties() : clone $blobProperties;
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+
+ /**
+ * Gets blob sequenceNumber.
+ *
+ * @return integer.
+ */
+ public function getSequenceNumber()
+ {
+ return $this->_blobProperties->getSequenceNumber();
+ }
+
+ /**
+ * Sets blob sequenceNumber.
+ *
+ * @param integer $sequenceNumber value.
+ *
+ * @return none.
+ */
+ public function setSequenceNumber($sequenceNumber)
+ {
+ $this->_blobProperties->setSequenceNumber($sequenceNumber);
+ }
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getSequenceNumberAction()
+ {
+ return $this->_sequenceNumberAction;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $sequenceNumberAction action.
+ *
+ * @return none
+ */
+ public function setSequenceNumberAction($sequenceNumberAction)
+ {
+ $this->_sequenceNumberAction = $sequenceNumberAction;
+ }
+
+ /**
+ * Gets lease Id for the blob
+ *
+ * @return string
+ */
+ public function getLeaseId()
+ {
+ return $this->_leaseId;
+ }
+
+ /**
+ * Sets lease Id for the blob
+ *
+ * @param string $leaseId the blob lease id.
+ *
+ * @return none
+ */
+ public function setLeaseId($leaseId)
+ {
+ $this->_leaseId = $leaseId;
+ }
+
+ /**
+ * Gets blob blobContentLength.
+ *
+ * @return integer.
+ */
+ public function getBlobContentLength()
+ {
+ return $this->_blobProperties->getContentLength();
+ }
+
+ /**
+ * Sets blob blobContentLength.
+ *
+ * @param integer $blobContentLength value.
+ *
+ * @return none.
+ */
+ public function setBlobContentLength($blobContentLength)
+ {
+ $this->_blobProperties->setContentLength($blobContentLength);
+ }
+
+ /**
+ * Gets blob ContentType.
+ *
+ * @return string.
+ */
+ public function getBlobContentType()
+ {
+ return $this->_blobProperties->getContentType();
+ }
+
+ /**
+ * Sets blob ContentType.
+ *
+ * @param string $blobContentType value.
+ *
+ * @return none.
+ */
+ public function setBlobContentType($blobContentType)
+ {
+ $this->_blobProperties->setContentType($blobContentType);
+ }
+
+ /**
+ * Gets blob ContentEncoding.
+ *
+ * @return string.
+ */
+ public function getBlobContentEncoding()
+ {
+ return $this->_blobProperties->getContentEncoding();
+ }
+
+ /**
+ * Sets blob ContentEncoding.
+ *
+ * @param string $blobContentEncoding value.
+ *
+ * @return none.
+ */
+ public function setBlobContentEncoding($blobContentEncoding)
+ {
+ $this->_blobProperties->setContentEncoding($blobContentEncoding);
+ }
+
+ /**
+ * Gets blob ContentLanguage.
+ *
+ * @return string.
+ */
+ public function getBlobContentLanguage()
+ {
+ return $this->_blobProperties->getContentLanguage();
+ }
+
+ /**
+ * Sets blob ContentLanguage.
+ *
+ * @param string $blobContentLanguage value.
+ *
+ * @return none.
+ */
+ public function setBlobContentLanguage($blobContentLanguage)
+ {
+ $this->_blobProperties->setContentLanguage($blobContentLanguage);
+ }
+
+ /**
+ * Gets blob ContentMD5.
+ *
+ * @return string.
+ */
+ public function getBlobContentMD5()
+ {
+ return $this->_blobProperties->getContentMD5();
+ }
+
+ /**
+ * Sets blob ContentMD5.
+ *
+ * @param string $blobContentMD5 value.
+ *
+ * @return none.
+ */
+ public function setBlobContentMD5($blobContentMD5)
+ {
+ $this->_blobProperties->setContentMD5($blobContentMD5);
+ }
+
+ /**
+ * Gets blob cache control.
+ *
+ * @return string.
+ */
+ public function getBlobCacheControl()
+ {
+ return $this->_blobProperties->getCacheControl();
+ }
+
+ /**
+ * Sets blob cacheControl.
+ *
+ * @param string $blobCacheControl value to use.
+ *
+ * @return none.
+ */
+ public function setBlobCacheControl($blobCacheControl)
+ {
+ $this->_blobProperties->setCacheControl($blobCacheControl);
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobPropertiesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobPropertiesResult.php
new file mode 100644
index 0000000..96bb183
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetBlobPropertiesResult.php
@@ -0,0 +1,149 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds result of calling setBlobProperties wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class SetBlobPropertiesResult
+{
+ /**
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * @var string
+ */
+ private $_etag;
+
+ /**
+ * @var integer
+ */
+ private $_sequenceNumber;
+
+ /**
+ * Creates SetBlobPropertiesResult from response headers.
+ *
+ * @param array $headers response headers
+ *
+ * @return SetBlobPropertiesResult
+ */
+ public static function create($headers)
+ {
+ $result = new SetBlobPropertiesResult();
+ $date = $headers[Resources::LAST_MODIFIED];
+ $result->setLastModified(Utilities::rfc1123ToDateTime($date));
+ $result->setETag($headers[Resources::ETAG]);
+ if (array_key_exists(Resources::X_MS_BLOB_SEQUENCE_NUMBER, $headers)) {
+ $sNumber = $headers[Resources::X_MS_BLOB_SEQUENCE_NUMBER];
+ $result->setSequenceNumber(intval($sNumber));
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets blob lastModified.
+ *
+ * @return \DateTime.
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Sets blob lastModified.
+ *
+ * @param \DateTime $lastModified value.
+ *
+ * @return none.
+ */
+ public function setLastModified($lastModified)
+ {
+ Validate::isDate($lastModified);
+ $this->_lastModified = $lastModified;
+ }
+
+ /**
+ * Gets blob etag.
+ *
+ * @return string.
+ */
+ public function getETag()
+ {
+ return $this->_etag;
+ }
+
+ /**
+ * Sets blob etag.
+ *
+ * @param string $etag value.
+ *
+ * @return none.
+ */
+ public function setETag($etag)
+ {
+ Validate::isString($etag, 'etag');
+ $this->_etag = $etag;
+ }
+
+ /**
+ * Gets blob sequenceNumber.
+ *
+ * @return int.
+ */
+ public function getSequenceNumber()
+ {
+ return $this->_sequenceNumber;
+ }
+
+ /**
+ * Sets blob sequenceNumber.
+ *
+ * @param int $sequenceNumber value.
+ *
+ * @return none.
+ */
+ public function setSequenceNumber($sequenceNumber)
+ {
+ Validate::isInteger($sequenceNumber, 'sequenceNumber');
+ $this->_sequenceNumber = $sequenceNumber;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetContainerMetadataOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetContainerMetadataOptions.php
new file mode 100644
index 0000000..5ce6dce
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SetContainerMetadataOptions.php
@@ -0,0 +1,78 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Blob\Models\AccessCondition;
+use WindowsAzure\Blob\Models\BlobServiceOptions;
+
+/**
+ * Optional parameters for setContainerMetadata wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class SetContainerMetadataOptions extends BlobServiceOptions
+{
+ /**
+ * @var AccessCondition
+ */
+ private $_accessCondition;
+
+ /**
+ * Constructs the access condition object with none option.
+ */
+ public function __construct()
+ {
+ $this->_accessCondition = AccessCondition::none();
+ }
+
+ /**
+ * Gets access condition
+ *
+ * @return AccessCondition
+ */
+ public function getAccessCondition()
+ {
+ return $this->_accessCondition;
+ }
+
+ /**
+ * Sets access condition
+ *
+ * @param AccessCondition $accessCondition value to use.
+ *
+ * @return none.
+ */
+ public function setAccessCondition($accessCondition)
+ {
+ $this->_accessCondition = $accessCondition;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SignedIdentifier.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SignedIdentifier.php
new file mode 100644
index 0000000..7fb5fd1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Blob/Models/SignedIdentifier.php
@@ -0,0 +1,104 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Blob\Models;
+use WindowsAzure\Blob\Models\AccessPolicy;
+
+/**
+ * Holds container signed identifiers.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Blob\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class SignedIdentifier
+{
+ private $_id;
+ private $_accessPolicy;
+
+ /**
+ * Gets id.
+ *
+ * @return string.
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * Sets id.
+ *
+ * @param string $id value.
+ *
+ * @return none.
+ */
+ public function setId($id)
+ {
+ $this->_id = $id;
+ }
+
+ /**
+ * Gets accessPolicy.
+ *
+ * @return string.
+ */
+ public function getAccessPolicy()
+ {
+ return $this->_accessPolicy;
+ }
+
+ /**
+ * Sets accessPolicy.
+ *
+ * @param string $accessPolicy value.
+ *
+ * @return none.
+ */
+ public function setAccessPolicy($accessPolicy)
+ {
+ $this->_accessPolicy = $accessPolicy;
+ }
+
+ /**
+ * Converts this current object to XML representation.
+ *
+ * @return array.
+ */
+ public function toArray()
+ {
+ $array = array();
+
+ $array['SignedIdentifier']['Id'] = $this->_id;
+ $array['SignedIdentifier']['AccessPolicy'] = $this->_accessPolicy->toArray();
+
+ return $array;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/CloudConfigurationManager.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/CloudConfigurationManager.php
new file mode 100644
index 0000000..d4aff54
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/CloudConfigurationManager.php
@@ -0,0 +1,167 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\ConnectionStringSource;
+
+/**
+ * Configuration manager for accessing Windows Azure settings.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CloudConfigurationManager
+{
+ /**
+ * @var boolean
+ */
+ private static $_isInitialized = false;
+
+ /**
+ * The list of connection string sources.
+ *
+ * @var array
+ */
+ private static $_sources;
+
+ /**
+ * Restrict users from creating instances from this class
+ */
+ private function __construct()
+ {
+
+ }
+
+ /**
+ * Initializes the connection string source providers.
+ *
+ * @return none
+ */
+ private static function _init()
+ {
+ if (!self::$_isInitialized) {
+ self::$_sources = array();
+
+ // Get list of default connection string sources.
+ $default = ConnectionStringSource::getDefaultSources();
+ foreach ($default as $name => $provider) {
+ self::$_sources[$name] = $provider;
+ }
+
+ self::$_isInitialized = true;
+ }
+ }
+
+ /**
+ * Gets a connection string from all available sources.
+ *
+ * @param string $key The connection string key name.
+ *
+ * @return string If the key does not exist return null.
+ */
+ public static function getConnectionString($key)
+ {
+ Validate::isString($key, 'key');
+
+ self::_init();
+ $value = null;
+
+ foreach (self::$_sources as $source) {
+ $value = call_user_func_array($source, array($key));
+
+ if (!empty($value)) {
+ break;
+ }
+ }
+
+ return $value;
+ }
+
+ /**
+ * Registers a new connection string source provider. If the source to get
+ * registered is a default source, only the name of the source is required.
+ *
+ * @param string $name The source name.
+ * @param callable $provider The source callback.
+ * @param boolean $prepend When true, the $provider is processed first when
+ * calling getConnectionString. When false (the default) the $provider is
+ * processed after the existing callbacks.
+ *
+ * @return none
+ */
+ public static function registerSource($name, $provider = null, $prepend = false)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ self::_init();
+ $default = ConnectionStringSource::getDefaultSources();
+
+ // Try to get callback if the user is trying to register a default source.
+ $provider = Utilities::tryGetValue($default, $name, $provider);
+
+ Validate::notNullOrEmpty($provider, 'callback');
+
+ if ($prepend) {
+ self::$_sources = array_merge(
+ array($name => $provider),
+ self::$_sources
+ );
+
+ } else {
+ self::$_sources[$name] = $provider;
+ }
+ }
+
+ /**
+ * Unregisters a connection string source.
+ *
+ * @param string $name The source name.
+ *
+ * @return callable
+ */
+ public static function unregisterSource($name)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ self::_init();
+
+ $sourceCallback = Utilities::tryGetValue(self::$_sources, $name);
+
+ if (!is_null($sourceCallback)) {
+ unset(self::$_sources[$name]);
+ }
+
+ return $sourceCallback;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/AtomBase.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/AtomBase.php
new file mode 100644
index 0000000..fdb8cd6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/AtomBase.php
@@ -0,0 +1,326 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Atom;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Atom\AtomLink;
+
+/**
+ * The base class of ATOM library.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class AtomBase
+{
+ /**
+ * The attributes of the feed.
+ *
+ * @var array
+ */
+ protected $attributes;
+
+ /**
+ * Creates an ATOM base object with default parameters.
+ */
+ public function __construct()
+ {
+ $this->attributes = array();
+ $atomlink = new AtomLink();
+ }
+
+ /**
+ * Gets the attributes of the ATOM class.
+ *
+ * @return array
+ */
+ public function getAttributes()
+ {
+ return $this->attributes;
+ }
+
+ /**
+ * Sets the attributes of the ATOM class.
+ *
+ * @param array $attributes The attributes of the array.
+ *
+ * @return array
+ */
+ public function setAttributes($attributes)
+ {
+ Validate::isArray($attributes, 'attributes');
+ $this->attributes = $attributes;
+ }
+
+ /**
+ * Sets an attribute to the ATOM object instance.
+ *
+ * @param string $attributeKey The key of the attribute.
+ * @param mixed $attributeValue The value of the attribute.
+ *
+ * @return none
+ */
+ public function setAttribute($attributeKey, $attributeValue)
+ {
+ $this->attributes[$attributeKey] = $attributeValue;
+ }
+
+ /**
+ * Gets an attribute with a specified attribute key.
+ *
+ * @param string $attributeKey The key of the attribute.
+ *
+ * @return none
+ */
+ public function getAttribute($attributeKey)
+ {
+ return $this->attributes[$attributeKey];
+ }
+
+ /**
+ * Processes author node.
+ *
+ * @param array $xmlWriter The XML writer.
+ * @param array $itemArray An array of item to write.
+ * @param array $elementName The name of the element.
+ *
+ * @return array
+ */
+ protected function writeArrayItem($xmlWriter, $itemArray, $elementName)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ Validate::isArray($itemArray, 'itemArray');
+ Validate::isString($elementName, 'elementName');
+
+ foreach ($itemArray as $itemInstance) {
+ $xmlWriter->startElementNS(
+ 'atom',
+ $elementName,
+ Resources::ATOM_NAMESPACE
+ );
+ $itemInstance->writeInnerXml($xmlWriter);
+ $xmlWriter->endElement();
+ }
+
+ }
+
+ /**
+ * Processes author node.
+ *
+ * @param array $xmlArray An array of simple xml elements.
+ *
+ * @return array
+ */
+ protected function processAuthorNode($xmlArray)
+ {
+ $author = array();
+ $authorItem = $xmlArray[Resources::AUTHOR];
+
+ if (is_array($authorItem)) {
+ foreach ($xmlArray[Resources::AUTHOR] as $authorXmlInstance) {
+ $authorInstance = new Person();
+ $authorInstance->parseXml($authorXmlInstance->asXML());
+ $author[] = $authorInstance;
+ }
+ } else {
+ $authorInstance = new Person();
+ $authorInstance->parseXml($authorItem->asXML());
+ $author[] = $authorInstance;
+ }
+ return $author;
+ }
+
+ /**
+ * Processes entry node.
+ *
+ * @param array $xmlArray An array of simple xml elements.
+ *
+ * @return array
+ */
+ protected function processEntryNode($xmlArray)
+ {
+ $entry = array();
+ $entryItem = $xmlArray[Resources::ENTRY];
+
+ if (is_array($entryItem)) {
+ foreach ($xmlArray[Resources::ENTRY] as $entryXmlInstance) {
+ $entryInstance = new Entry();
+ $entryInstance->fromXml($entryXmlInstance);
+ $entry[] = $entryInstance;
+ }
+ } else {
+ $entryInstance = new Entry();
+ $entryInstance->fromXml($entryItem);
+ $entry[] = $entryInstance;
+ }
+ return $entry;
+ }
+
+ /**
+ * Processes category node.
+ *
+ * @param array $xmlArray An array of simple xml elements.
+ *
+ * @return array
+ */
+ protected function processCategoryNode($xmlArray)
+ {
+ $category = array();
+ $categoryItem = $xmlArray[Resources::CATEGORY];
+
+ if (is_array($categoryItem)) {
+ foreach ($xmlArray[Resources::CATEGORY] as $categoryXmlInstance) {
+ $categoryInstance = new Category();
+ $categoryInstance->parseXml($categoryXmlInstance->asXML());
+ $category[] = $categoryInstance;
+ }
+ } else {
+ $categoryInstance = new Category();
+ $categoryInstance->parseXml($categoryItem->asXML());
+ $category[] = $categoryInstance;
+ }
+ return $category;
+ }
+
+ /**
+ * Processes contributor node.
+ *
+ * @param array $xmlArray An array of simple xml elements.
+ *
+ * @return array
+ */
+ protected function processContributorNode($xmlArray)
+ {
+ $category = array();
+ $contributorItem = $xmlArray[Resources::CONTRIBUTOR];
+
+ if (is_array($contributorItem)) {
+ foreach ($xmlArray[Resources::CONTRIBUTOR] as $contributorXmlInstance) {
+ $contributorInstance = new Person();
+ $contributorInstance->parseXml($contributorXmlInstance->asXML());
+ $contributor[] = $contributorInstance;
+ }
+ } elseif (is_string($contributorItem)) {
+ $contributorInstance = new Person();
+ $contributorInstance->setName((string)$contributorItem);
+ $contributor[] = $contributorInstance;
+ } else {
+ $contributorInstance = new Person();
+ $contributorInstance->parseXml($contributorItem->asXML());
+ $contributor[] = $contributorInstance;
+ }
+ return $contributor;
+ }
+
+ /**
+ * Processes link node.
+ *
+ * @param array $xmlArray An array of simple xml elements.
+ *
+ * @return array
+ */
+ protected function processLinkNode($xmlArray)
+ {
+ $link = array();
+ $linkValue = $xmlArray[Resources::LINK];
+
+ if (is_array($linkValue)) {
+ foreach ($xmlArray[Resources::LINK] as $linkValueInstance) {
+ $linkInstance = new AtomLink();
+ $linkInstance->parseXml($linkValueInstance->asXML());
+ $link[] = $linkInstance;
+ }
+ } else {
+ $linkInstance = new AtomLink();
+ $linkInstance->parseXml($linkValue->asXML());
+ $link[] = $linkInstance;
+ }
+
+ return $link;
+ }
+
+ /**
+ * Writes an optional attribute for ATOM.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ * @param string $attributeName The name of the attribute.
+ * @param mixed $attributeValue The value of the attribute.
+ *
+ * @return none
+ */
+ protected function writeOptionalAttribute(
+ $xmlWriter,
+ $attributeName,
+ $attributeValue
+ ) {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ Validate::isString($attributeName, 'attributeName');
+
+ if (!empty($attributeValue)) {
+ $xmlWriter->writeAttribute(
+ $attributeName,
+ $attributeValue
+ );
+ }
+ }
+
+ /**
+ * Writes the optional elements namespaces.
+ *
+ * @param \XmlWriter $xmlWriter The XML writer.
+ * @param string $prefix The prefix.
+ * @param string $elementName The element name.
+ * @param string $namespace The namespace name.
+ * @param string $elementValue The element value.
+ *
+ * @return none
+ */
+ protected function writeOptionalElementNS(
+ $xmlWriter,
+ $prefix,
+ $elementName,
+ $namespace,
+ $elementValue
+ ) {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ Validate::isString($elementName, 'elementName');
+
+ if (!empty($elementValue)) {
+ $xmlWriter->writeElementNS(
+ $prefix,
+ $elementName,
+ $namespace,
+ $elementValue
+ );
+ }
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/AtomLink.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/AtomLink.php
new file mode 100644
index 0000000..2fcdd60
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/AtomLink.php
@@ -0,0 +1,343 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Atom;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * This link defines a reference from an entry or feed to a Web resource.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class AtomLink extends AtomBase
+{
+ /**
+ * The undefined content.
+ *
+ * @var string
+ */
+ protected $undefinedContent;
+
+ /**
+ * The HREF of the link.
+ *
+ * @var string
+ */
+ protected $href;
+
+ /**
+ * The rel attribute of the link.
+ *
+ * @var string
+ */
+ protected $rel;
+
+ /**
+ * The media type of the link.
+ *
+ * @var string
+ */
+ protected $type;
+
+ /**
+ * The language of HREF.
+ *
+ * @var string
+ */
+ protected $hreflang;
+
+ /**
+ * The titile of the link.
+ *
+ * @var string
+ */
+ protected $title;
+
+ /**
+ * The length of the link.
+ *
+ * @var integer
+ */
+ protected $length;
+
+ /**
+ * Creates a AtomLink instance with specified text.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Parse an ATOM Link xml.
+ *
+ * @param string $xmlString an XML based string of ATOM Link.
+ *
+ * @return none
+ */
+ public function parseXml($xmlString)
+ {
+ Validate::notNull($xmlString, 'xmlString');
+ Validate::isString($xmlString, 'xmlString');
+ $atomLinkXml = simplexml_load_string($xmlString);
+ $attributes = $atomLinkXml->attributes();
+
+ if (!empty($attributes['href'])) {
+ $this->href = (string)$attributes['href'];
+ }
+
+ if (!empty($attributes['rel'])) {
+ $this->rel = (string)$attributes['rel'];
+ }
+
+ if (!empty($attributes['type'])) {
+ $this->type = (string)$attributes['type'];
+ }
+
+ if (!empty($attributes['hreflang'])) {
+ $this->hreflang = (string)$attributes['hreflang'];
+ }
+
+ if (!empty($attributes['title'])) {
+ $this->title = (string)$attributes['title'];
+ }
+
+ if (!empty($attributes['length'])) {
+ $this->length = (integer)$attributes['length'];
+ }
+
+ $undefinedContent = (string)$atomLinkXml;
+ if (empty($undefinedContent)) {
+ $this->undefinedContent = null;
+ } else {
+ $this->undefinedContent = (string)$atomLinkXml;
+ }
+ }
+
+ /**
+ * Gets the href of the link.
+ *
+ * @return string
+ */
+ public function getHref()
+ {
+ return $this->href;
+ }
+
+ /**
+ * Sets the href of the link.
+ *
+ * @param string $href The href of the link.
+ *
+ * @return none
+ */
+ public function setHref($href)
+ {
+ $this->href = $href;
+ }
+
+ /**
+ * Gets the rel of the atomLink.
+ *
+ * @return string
+ */
+ public function getRel()
+ {
+ return $this->rel;
+ }
+
+ /**
+ * Sets the rel of the link.
+ *
+ * @param string $rel The rel of the atomLink.
+ *
+ * @return none
+ */
+ public function setRel($rel)
+ {
+ $this->rel = $rel;
+ }
+
+ /**
+ * Gets the type of the link.
+ *
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * Sets the type of the link.
+ *
+ * @param string $type The type of the link.
+ *
+ * @return none
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ /**
+ * Gets the language of the href.
+ *
+ * @return string
+ */
+ public function getHrefLang()
+ {
+ return $this->hrefLang;
+ }
+
+ /**
+ * Sets the language of the href.
+ *
+ * @param string $hrefLang The language of the href.
+ *
+ * @return none
+ */
+ public function setHrefLang($hrefLang)
+ {
+ $this->hrefLang = $hrefLang;
+ }
+
+ /**
+ * Gets the title of the link.
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Sets the title of the link.
+ *
+ * @param string $title The title of the link.
+ *
+ * @return none
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ /**
+ * Gets the length of the link.
+ *
+ * @return string
+ */
+ public function getLength()
+ {
+ return $this->length;
+ }
+
+ /**
+ * Sets the length of the link.
+ *
+ * @param string $length The length of the link.
+ *
+ * @return none
+ */
+ public function setLength($length)
+ {
+ $this->length = $length;
+ }
+
+ /**
+ * Gets the undefined content.
+ *
+ * @return string
+ */
+ public function getUndefinedContent()
+ {
+ return $this->undefinedContent;
+ }
+
+ /**
+ * Sets the undefined content.
+ *
+ * @param string $undefinedContent The undefined content.
+ *
+ * @return none
+ */
+ public function setUndefinedContent($undefinedContent)
+ {
+ $this->undefinedContent = $undefinedContent;
+ }
+
+ /**
+ * Writes an XML representing the ATOM link item.
+ *
+ * @param \XMLWriter $xmlWriter The xml writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $xmlWriter->startElementNS(
+ 'atom',
+ Resources::LINK,
+ Resources::ATOM_NAMESPACE
+ );
+ $this->writeInnerXml($xmlWriter);
+ $xmlWriter->endElement();
+ }
+
+ /**
+ * Writes the inner XML representing the ATOM link item.
+ *
+ * @param \XMLWriter $xmlWriter The xml writer.
+ *
+ * @return none
+ */
+ public function writeInnerXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+
+ $this->writeOptionalAttribute($xmlWriter, 'href', $this->href);
+ $this->writeOptionalAttribute($xmlWriter, 'rel', $this->rel);
+ $this->writeOptionalAttribute($xmlWriter, 'type', $this->type);
+ $this->writeOptionalAttribute($xmlWriter, 'hreflang', $this->hreflang);
+ $this->writeOptionalAttribute($xmlWriter, 'title', $this->title);
+ $this->writeOptionalAttribute($xmlWriter, 'length', $this->length);
+
+ if (!empty($this->undefinedContent)) {
+ $xmlWriter->writeRaw($this->undefinedContent);
+ }
+
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Category.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Category.php
new file mode 100644
index 0000000..a2b9a8e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Category.php
@@ -0,0 +1,253 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Atom;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * The category class of the ATOM standard.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class Category extends AtomBase
+{
+ /**
+ * The term of the category.
+ *
+ * @var string
+ */
+ protected $term;
+
+ /**
+ * The scheme of the category.
+ *
+ * @var string
+ */
+ protected $scheme;
+
+ /**
+ * The label of the category.
+ *
+ * @var string
+ */
+ protected $label;
+
+ /**
+ * The undefined content of the category.
+ *
+ * @var string
+ */
+ protected $undefinedContent;
+
+ /**
+ * Creates a Category instance with specified text.
+ *
+ * @param string $undefinedContent The undefined content of the category.
+ *
+ * @return none
+ */
+ public function __construct($undefinedContent = Resources::EMPTY_STRING)
+ {
+ $this->undefinedContent = $undefinedContent;
+ }
+
+ /**
+ * Creates an ATOM Category instance with specified xml string.
+ *
+ * @param string $xmlString an XML based string of ATOM CONTENT.
+ *
+ * @return none
+ */
+ public function parseXml($xmlString)
+ {
+ Validate::notNull($xmlString, 'xmlString');
+ Validate::isString($xmlString, 'xmlString');
+ $categoryXml = simplexml_load_string($xmlString);
+ $attributes = $categoryXml->attributes();
+ if (!empty($attributes['term'])) {
+ $this->term = (string)$attributes['term'];
+ }
+
+ if (!empty($attributes['scheme'])) {
+ $this->scheme = (string)$attributes['scheme'];
+ }
+
+ if (!empty($attributes['label'])) {
+ $this->label = (string)$attributes['label'];
+ }
+
+ $this->undefinedContent =(string)$categoryXml;
+ }
+
+ /**
+ * Gets the term of the category.
+ *
+ * @return string
+ */
+ public function getTerm()
+ {
+ return $this->term;
+ }
+
+ /**
+ * Sets the term of the category.
+ *
+ * @param string $term The term of the category.
+ *
+ * @return none
+ */
+ public function setTerm($term)
+ {
+ $this->term = $term;
+ }
+
+ /**
+ * Gets the scheme of the category.
+ *
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->scheme;
+ }
+
+ /**
+ * Sets the scheme of the category.
+ *
+ * @param string $scheme The scheme of the category.
+ *
+ * @return none
+ */
+ public function setScheme($scheme)
+ {
+ $this->scheme = $scheme;
+ }
+
+ /**
+ * Gets the label of the category.
+ *
+ * @return string The label.
+ */
+ public function getLabel()
+ {
+ return $this->label;
+ }
+
+ /**
+ * Sets the label of the category.
+ *
+ * @param string $label The label of the category.
+ *
+ * @return none
+ */
+ public function setLabel($label)
+ {
+ $this->label = $label;
+ }
+
+ /**
+ * Gets the undefined content of the category.
+ *
+ * @return string
+ */
+ public function getUndefinedContent()
+ {
+ return $this->undefinedContent;
+ }
+
+ /**
+ * Sets the undefined content of the category.
+ *
+ * @param string $undefinedContent The undefined content of the category.
+ *
+ * @return none
+ */
+ public function setUndefinedContent($undefinedContent)
+ {
+ $this->undefinedContent = $undefinedContent;
+ }
+
+ /**
+ * Writes an XML representing the category.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $xmlWriter->startElementNS(
+ 'atom',
+ 'category',
+ Resources::ATOM_NAMESPACE
+ );
+ $this->writeInnerXml($xmlWriter);
+ $xmlWriter->endElement();
+ }
+
+ /**
+ * Writes an XML representing the category.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeInnerXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $this->writeOptionalAttribute(
+ $xmlWriter,
+ 'term',
+ $this->term
+ );
+
+ $this->writeOptionalAttribute(
+ $xmlWriter,
+ 'scheme',
+ $this->scheme
+ );
+
+ $this->writeOptionalAttribute(
+ $xmlWriter,
+ 'label',
+ $this->label
+ );
+
+ if (!empty($this->undefinedContent)) {
+ $xmlWriter->WriteRaw($this->undefinedContent);
+ }
+
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Content.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Content.php
new file mode 100644
index 0000000..35b4769
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Content.php
@@ -0,0 +1,213 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Atom;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Atom\AtomProperties;
+/**
+ * The content class of ATOM standard.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class Content extends AtomBase
+{
+ /**
+ * The text of the content.
+ *
+ * @var string
+ */
+ protected $text;
+
+ /**
+ * The type of the content.
+ *
+ * @var string
+ */
+ protected $type;
+
+ /**
+ * Source XML object
+ *
+ * @var \SimpleXMLElement
+ */
+ protected $xml;
+
+ /**
+ * Creates a Content instance with specified text.
+ *
+ * @param string $text The text of the content.
+ *
+ * @return none
+ */
+ public function __construct($text = null)
+ {
+ $this->text = $text;
+ }
+
+ /**
+ * Creates an ATOM CONTENT instance with specified xml string.
+ *
+ * @param string $xmlString an XML based string of ATOM CONTENT.
+ *
+ * @return none
+ */
+ public function parseXml($xmlString)
+ {
+ Validate::notNull($xmlString, 'xmlString');
+ Validate::isString($xmlString, 'xmlString');
+
+ $this->fromXml(simplexml_load_string($xmlString));
+ }
+
+ /**
+ * Creates an ATOM CONTENT instance with specified simpleXML object
+ *
+ * @param \SimpleXMLElement $contentXml xml element of ATOM CONTENT
+ *
+ * @return none
+ */
+ public function fromXml($contentXml)
+ {
+ Validate::notNull($contentXml, 'contentXml');
+ Validate::isA($contentXml, '\SimpleXMLElement', 'contentXml');
+
+ $attributes = $contentXml->attributes();
+
+ if (!empty($attributes['type'])) {
+ $this->content = (string)$attributes['type'];
+ }
+
+ $text = '';
+ foreach ($contentXml->children() as $child) {
+ $text .= $child->asXML();
+ }
+
+ $this->text = $text;
+
+ $this->xml = $contentXml;
+ }
+
+ /**
+ * Gets the text of the content.
+ *
+ * @return string
+ */
+ public function getText()
+ {
+ return $this->text;
+ }
+
+ /**
+ * Sets the text of the content.
+ *
+ * @param string $text The text of the content.
+ *
+ * @return none
+ */
+ public function setText($text)
+ {
+ $this->text = $text;
+ }
+
+ /**
+ * Gets the xml object of the content.
+ *
+ * @return \SimpleXMLElement
+ */
+ public function getXml()
+ {
+ return $this->xml;
+ }
+
+ /**
+ * Gets the type of the content.
+ *
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * Sets the type of the content.
+ *
+ * @param string $type The type of the content.
+ *
+ * @return none
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ /**
+ * Writes an XML representing the content.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $xmlWriter->startElementNS(
+ 'atom',
+ 'content',
+ Resources::ATOM_NAMESPACE
+ );
+
+ $this->writeOptionalAttribute(
+ $xmlWriter,
+ 'type',
+ $this->type
+ );
+
+ $this->writeInnerXml($xmlWriter);
+ $xmlWriter->endElement();
+ }
+
+ /**
+ * Writes an inner XML representing the content.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeInnerXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $xmlWriter->writeRaw($this->text);
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Entry.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Entry.php
new file mode 100644
index 0000000..a9d00b7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Entry.php
@@ -0,0 +1,645 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Atom;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * The Entry class of ATOM standard.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class Entry extends AtomBase
+{
+ // @codingStandardsIgnoreStart
+
+ /**
+ * The author of the entry.
+ *
+ * @var Person
+ */
+ protected $author;
+
+ /**
+ * The category of the entry.
+ *
+ * @var array
+ */
+ protected $category;
+
+ /**
+ * The content of the entry.
+ *
+ * @var string
+ */
+ protected $content;
+
+ /**
+ * The contributor of the entry.
+ *
+ * @var string
+ */
+ protected $contributor;
+
+ /**
+ * An unqiue ID representing the entry.
+ *
+ * @var string
+ */
+ protected $id;
+
+ /**
+ * The link of the entry.
+ *
+ * @var string
+ */
+ protected $link;
+
+ /**
+ * Is the entry published.
+ *
+ * @var boolean
+ */
+ protected $published;
+
+ /**
+ * The copy right of the entry.
+ *
+ * @var string
+ */
+ protected $rights;
+
+ /**
+ * The source of the entry.
+ *
+ * @var string
+ */
+ protected $source;
+
+ /**
+ * The summary of the entry.
+ *
+ * @var string
+ */
+ protected $summary;
+
+ /**
+ * The title of the entry.
+ *
+ * @var string
+ */
+ protected $title;
+
+ /**
+ * Is the entry updated.
+ *
+ * @var \DateTime
+ */
+ protected $updated;
+
+ /**
+ * The extension element of the entry.
+ *
+ * @var string
+ */
+ protected $extensionElement;
+
+ /**
+ * Creates an ATOM Entry instance with default parameters.
+ */
+ public function __construct()
+ {
+ $this->attributes = array();
+ }
+
+ /**
+ * Populate the properties of an ATOM Entry instance with specified XML..
+ *
+ * @param string $xmlString A string representing an ATOM entry instance.
+ *
+ * @return none
+ */
+ public function parseXml($xmlString)
+ {
+ Validate::notNull($xmlString, 'xmlString');
+
+ $this->fromXml(simplexml_load_string($xmlString));
+ }
+
+ /**
+ * Creates an ATOM ENTRY instance with specified simpleXML object
+ *
+ * @param \SimpleXMLElement $entryXml xml element of ATOM ENTRY
+ *
+ * @return none
+ */
+ public function fromXml($entryXml) {
+ Validate::notNull($entryXml, 'entryXml');
+ Validate::isA($entryXml, '\SimpleXMLElement', 'entryXml');
+
+ $this->attributes = (array)$entryXml->attributes();
+ $entryArray = (array)$entryXml;
+
+ if (array_key_exists(Resources::AUTHOR, $entryArray)) {
+ $this->author = $this->processAuthorNode($entryArray);
+ }
+
+ if (array_key_exists(Resources::CATEGORY, $entryArray)) {
+ $this->category = $this->processCategoryNode($entryArray);
+ }
+
+ if (array_key_exists('content', $entryArray)) {
+ $content = new Content();
+ $content->fromXml($entryArray['content']);
+ $this->content = $content;
+ }
+
+ if (array_key_exists(Resources::CONTRIBUTOR, $entryArray)) {
+ $this->contributor = $this->processContributorNode($entryArray);
+ }
+
+ if (array_key_exists('id', $entryArray)) {
+ $this->id = (string)$entryArray['id'];
+ }
+
+ if (array_key_exists(Resources::LINK, $entryArray)) {
+ $this->link = $this->processLinkNode($entryArray);
+ }
+
+ if (array_key_exists('published', $entryArray)) {
+ $this->published = $entryArray['published'];
+ }
+
+ if (array_key_exists('rights', $entryArray)) {
+ $this->rights = $entryArray['rights'];
+ }
+
+ if (array_key_exists('source', $entryArray)) {
+ $source = new Source();
+ $source->parseXml($entryArray['source']->asXML());
+ $this->source = $source;
+ }
+
+ if (array_key_exists('title', $entryArray)) {
+ $this->title = $entryArray['title'];
+ }
+
+ if (array_key_exists('updated', $entryArray)) {
+ $this->updated = \DateTime::createFromFormat(
+ \DateTime::ATOM,
+ (string)$entryArray['updated']
+ );
+ }
+ }
+
+ /**
+ * Gets the author of the entry.
+ *
+ * @return Person
+ */
+ public function getAuthor()
+ {
+ return $this->author;
+ }
+
+ /**
+ * Sets the author of the entry.
+ *
+ * @param Person $author The author of the entry.
+ *
+ * @return none
+ */
+ public function setAuthor($author)
+ {
+ $this->author = $author;
+ }
+
+ /**
+ * Gets the category.
+ *
+ * @return array
+ */
+ public function getCategory()
+ {
+ return $this->category;
+ }
+
+ /**
+ * Sets the category.
+ *
+ * @param string $category The category of the entry.
+ *
+ * @return none
+ */
+ public function setCategory($category)
+ {
+ $this->category = $category;
+ }
+
+ /**
+ * Gets the content.
+ *
+ * @return Content.
+ */
+ public function getContent()
+ {
+ return $this->content;
+ }
+
+ /**
+ * Sets the content.
+ *
+ * @param Content $content Sets the content of the entry.
+ *
+ * @return none
+ */
+ public function setContent($content)
+ {
+ $this->content = $content;
+ }
+
+ /**
+ * Gets the contributor.
+ *
+ * @return string
+ */
+ public function getContributor()
+ {
+ return $this->contributor;
+ }
+
+ /**
+ * Sets the contributor.
+ *
+ * @param string $contributor The contributor of the entry.
+ *
+ * @return none
+ */
+ public function setContributor($contributor)
+ {
+ $this->contributor = $contributor;
+ }
+
+ /**
+ * Gets the ID of the entry.
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Sets the ID of the entry.
+ *
+ * @param string $id The id of the entry.
+ *
+ * @return none
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ /**
+ * Gets the link of the entry.
+ *
+ * @return string
+ */
+ public function getLink()
+ {
+ return $this->link;
+ }
+
+ /**
+ * Sets the link of the entry.
+ *
+ * @param string $link The link of the entry.
+ *
+ * @return none
+ */
+ public function setLink($link)
+ {
+ $this->link = $link;
+ }
+
+ /**
+ * Gets published of the entry.
+ *
+ * @return boolean
+ */
+ public function getPublished()
+ {
+ return $this->published;
+ }
+
+ /**
+ * Sets published of the entry.
+ *
+ * @param boolean $published Is the entry published.
+ *
+ * @return none
+ */
+ public function setPublished($published)
+ {
+ $this->published = $published;
+ }
+
+ /**
+ * Gets the rights of the entry.
+ *
+ * @return string
+ */
+ public function getRights()
+ {
+ return $this->rights;
+ }
+
+ /**
+ * Sets the rights of the entry.
+ *
+ * @param string $rights The rights of the entry.
+ *
+ * @return none
+ */
+ public function setRights($rights)
+ {
+ $this->rights = $rights;
+ }
+
+ /**
+ * Gets the source of the entry.
+ *
+ * @return string
+ */
+ public function getSource()
+ {
+ return $this->source;
+ }
+
+ /**
+ * Sets the source of the entry.
+ *
+ * @param string $source The source of the entry.
+ *
+ * @return none
+ */
+ public function setSource($source)
+ {
+ $this->source = $source;
+ }
+
+ /**
+ * Gets the summary of the entry.
+ *
+ * @return string
+ */
+ public function getSummary()
+ {
+ return $this->summary;
+ }
+
+ /**
+ * Sets the summary of the entry.
+ *
+ * @param string $summary The summary of the entry.
+ *
+ * @return none
+ */
+ public function setSummary($summary)
+ {
+ $this->summary = $summary;
+ }
+
+ /**
+ * Gets the title of the entry.
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Sets the title of the entry.
+ *
+ * @param string $title The title of the entry.
+ *
+ * @return none
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ /**
+ * Gets updated.
+ *
+ * @return \DateTime
+ */
+ public function getUpdated()
+ {
+ return $this->updated;
+ }
+
+ /**
+ * Sets updated
+ *
+ * @param \DateTime $updated updated.
+ *
+ * @return none
+ */
+ public function setUpdated($updated)
+ {
+ $this->updated = $updated;
+ }
+
+ /**
+ * Gets extension element.
+ *
+ * @return string
+ */
+ public function getExtensionElement()
+ {
+ return $this->extensionElement;
+ }
+
+ /**
+ * Sets extension element.
+ *
+ * @param string $extensionElement The extension element of the entry.
+ *
+ * @return none
+ */
+ public function setExtensionElement($extensionElement)
+ {
+ $this->extensionElement = $extensionElement;
+ }
+
+ /**
+ * Writes a inner XML string representing the entry.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $xmlWriter->startElementNS(
+ 'atom',
+ Resources::ENTRY,
+ Resources::ATOM_NAMESPACE
+ );
+ $this->writeInnerXml($xmlWriter);
+ $xmlWriter->endElement();
+ }
+
+ /**
+ * Writes a inner XML string representing the entry.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeInnerXml($xmlWriter)
+ {
+ if (!is_null($this->attributes)) {
+ if (is_array($this->attributes)) {
+ foreach (
+ $this->attributes
+ as $attributeName => $attributeValue
+ ) {
+ $xmlWriter->writeAttribute($attributeName, $attributeValue);
+ }
+ }
+ }
+
+ if (!is_null($this->author)) {
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->author,
+ Resources::AUTHOR
+ );
+ }
+
+ if (!is_null($this->category)) {
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->category,
+ Resources::CATEGORY
+ );
+ }
+
+ if (!is_null($this->content)) {
+ $this->content->writeXml($xmlWriter);
+ }
+
+ if (!is_null($this->contributor)) {
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->contributor,
+ Resources::CONTRIBUTOR
+ );
+ }
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'id',
+ Resources::ATOM_NAMESPACE,
+ $this->id
+ );
+
+ if (!is_null($this->link)) {
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->link,
+ Resources::LINK
+ );
+ }
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'published',
+ Resources::ATOM_NAMESPACE,
+ $this->published
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'rights',
+ Resources::ATOM_NAMESPACE,
+ $this->rights
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'source',
+ Resources::ATOM_NAMESPACE,
+ $this->source
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'summary',
+ Resources::ATOM_NAMESPACE,
+ $this->summary
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'title',
+ Resources::ATOM_NAMESPACE,
+ $this->title
+ );
+
+ if (!is_null($this->updated)) {
+ $xmlWriter->writeElementNS(
+ 'atom',
+ 'updated',
+ Resources::ATOM_NAMESPACE,
+ $this->updated->format(\DateTime::ATOM)
+ );
+ }
+ }
+}
+
+// @codingStandardsIgnoreEnd
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Feed.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Feed.php
new file mode 100644
index 0000000..9f2fa8f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Feed.php
@@ -0,0 +1,730 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Atom;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The feed class of ATOM library.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class Feed extends AtomBase
+{
+ // @codingStandardsIgnoreStart
+
+ /**
+ * The entry of the feed.
+ *
+ * @var array
+ */
+ protected $entry;
+
+ /**
+ * the author of the feed.
+ *
+ * @var array
+ */
+ protected $author;
+
+ /**
+ * The category of the feed.
+ *
+ * @var array
+ */
+ protected $category;
+
+ /**
+ * The contributor of the feed.
+ *
+ * @var array
+ */
+ protected $contributor;
+
+ /**
+ * The generator of the feed.
+ *
+ * @var Generator
+ */
+ protected $generator;
+
+ /**
+ * The icon of the feed.
+ *
+ * @var string
+ */
+ protected $icon;
+
+ /**
+ * The ID of the feed.
+ *
+ * @var string
+ */
+ protected $id;
+
+ /**
+ * The link of the feed.
+ *
+ * @var array
+ */
+ protected $link;
+
+ /**
+ * The logo of the feed.
+ *
+ * @var string
+ */
+ protected $logo;
+
+ /**
+ * The rights of the feed.
+ *
+ * @var string
+ */
+ protected $rights;
+
+ /**
+ * The subtitle of the feed.
+ *
+ * @var string
+ */
+ protected $subtitle;
+
+ /**
+ * The title of the feed.
+ *
+ * @var string
+ */
+ protected $title;
+
+ /**
+ * The update of the feed.
+ *
+ * @var \DateTime
+ */
+ protected $updated;
+
+ /**
+ * The extension element of the feed.
+ *
+ * @var string
+ */
+ protected $extensionElement;
+
+ /**
+ * Creates an ATOM FEED object with default parameters.
+ */
+ public function __construct()
+ {
+ $this->attributes = array();
+ }
+
+ /**
+ * Creates a feed object with specified XML string.
+ *
+ * @param string $xmlString An XML string representing the feed object.
+ *
+ * @return none
+ */
+ public function parseXml($xmlString)
+ {
+ $feedXml = simplexml_load_string($xmlString);
+ $attributes = $feedXml->attributes();
+ $feedArray = (array)$feedXml;
+ if (!empty($attributes)) {
+ $this->attributes = (array)$attributes;
+ }
+
+ if (array_key_exists('author', $feedArray)) {
+ $this->author = $this->processAuthorNode($feedArray);
+ }
+
+ if (array_key_exists('entry', $feedArray)) {
+ $this->entry = $this->processEntryNode($feedArray);
+ }
+
+ if (array_key_exists('category', $feedArray)) {
+ $this->category = $this->processCategoryNode($feedArray);
+ }
+
+ if (array_key_exists('contributor', $feedArray)) {
+ $this->contributor = $this->processContributorNode($feedArray);
+ }
+
+ if (array_key_exists('generator', $feedArray)) {
+ $generator = new Generator();
+ $generatorValue = $feedArray['generator'];
+ if (is_string($generatorValue)) {
+ $generator->setText($generatorValue);
+ } else {
+ $generator->parseXml($generatorValue->asXML());
+ }
+
+ $this->generator = $generator;
+ }
+
+ if (array_key_exists('icon', $feedArray)) {
+ $this->icon = (string)$feedArray['icon'];
+ }
+
+ if (array_key_exists('id', $feedArray)) {
+ $this->id = (string)$feedArray['id'];
+ }
+
+ if (array_key_exists('link', $feedArray)) {
+ $this->link = $this->processLinkNode($feedArray);
+ }
+
+ if (array_key_exists('logo', $feedArray)) {
+ $this->logo = (string)$feedArray['logo'];
+ }
+
+ if (array_key_exists('rights', $feedArray)) {
+ $this->rights = (string)$feedArray['rights'];
+ }
+
+ if (array_key_exists('subtitle', $feedArray)) {
+ $this->subtitle = (string)$feedArray['subtitle'];
+ }
+
+ if (array_key_exists('title', $feedArray)) {
+ $this->title = (string)$feedArray['title'];
+ }
+
+ if (array_key_exists('updated', $feedArray)) {
+ $this->updated = \DateTime::createFromFormat(
+ \DateTime::ATOM,
+ (string)$feedArray['updated']
+ );
+ }
+ }
+
+ /**
+ * Gets the attributes of the feed.
+ *
+ * @return array
+ */
+ public function getAttributes()
+ {
+ return $this->attributes;
+ }
+
+ /**
+ * Sets the attributes of the feed.
+ *
+ * @param array $attributes The attributes of the array.
+ *
+ * @return array
+ */
+ public function setAttributes($attributes)
+ {
+ Validate::isArray($attributes, 'attributes');
+ $this->attributes = $attributes;
+ }
+
+ /**
+ * Adds an attribute to the feed object instance.
+ *
+ * @param string $attributeKey The key of the attribute.
+ * @param mixed $attributeValue The value of the attribute.
+ *
+ * @return none
+ */
+ public function addAttribute($attributeKey, $attributeValue)
+ {
+ $this->attributes[$attributeKey] = $attributeValue;
+ }
+
+ /**
+ * Gets the author of the feed.
+ *
+ * @return Person
+ */
+ public function getAuthor()
+ {
+ return $this->author;
+ }
+
+ /**
+ * Sets the author of the feed.
+ *
+ * @param Person $author The author of the feed.
+ *
+ * @return none
+ */
+ public function setAuthor($author)
+ {
+ Validate::isArray($author, 'author');
+ $person = new Person();
+ foreach ($author as $authorInstance) {
+ Validate::isInstanceOf($authorInstance, $person, 'author');
+ }
+ $this->author = $author;
+ }
+
+ /**
+ * Gets the category of the feed.
+ *
+ * @return Category
+ */
+ public function getCategory()
+ {
+ return $this->category;
+ }
+
+ /**
+ * Sets the category of the feed.
+ *
+ * @param Category $category The category of the feed.
+ *
+ * @return none
+ */
+ public function setCategory($category)
+ {
+ Validate::isArray($category, 'category');
+ $categoryClassInstance = new Category();
+ foreach ($category as $categoryInstance) {
+ Validate::isInstanceOf(
+ $categoryInstance,
+ $categoryClassInstance,
+ 'category'
+ );
+ }
+ $this->category = $category;
+ }
+
+ /**
+ * Gets contributor.
+ *
+ * @return array
+ */
+ public function getContributor()
+ {
+ return $this->contributor;
+ }
+
+ /**
+ * Sets contributor.
+ *
+ * @param string $contributor The contributor of the feed.
+ *
+ * @return none
+ */
+ public function setContributor($contributor)
+ {
+ Validate::isArray($contributor, 'contributor');
+ $person = new Person();
+ foreach ($contributor as $contributorInstance) {
+ Validate::isInstanceOf($contributorInstance, $person, 'contributor');
+ }
+ $this->contributor = $contributor;
+ }
+
+ /**
+ * Gets generator.
+ *
+ * @return string
+ */
+ public function getGenerator()
+ {
+ return $this->generator;
+ }
+
+ /**
+ * Sets the generator.
+ *
+ * @param string $generator Sets the generator of the feed.
+ *
+ * @return none
+ */
+ public function setGenerator($generator)
+ {
+ $this->generator = $generator;
+ }
+
+ /**
+ * Gets the icon of the feed.
+ *
+ * @return string
+ */
+ public function getIcon()
+ {
+ return $this->icon;
+ }
+
+ /**
+ * Sets the icon of the feed.
+ *
+ * @param string $icon The icon of the feed.
+ *
+ * @return none
+ */
+ public function setIcon($icon)
+ {
+ $this->icon = $icon;
+ }
+
+ /**
+ * Gets the ID of the feed.
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Sets the ID of the feed.
+ *
+ * @param string $id The ID of the feed.
+ *
+ * @return none
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ /**
+ * Gets the link of the feed.
+ *
+ * @return array
+ */
+ public function getLink()
+ {
+ return $this->link;
+ }
+
+ /**
+ * Sets the link of the feed.
+ *
+ * @param array $link The link of the feed.
+ *
+ * @return none
+ */
+ public function setLink($link)
+ {
+ Validate::isArray($link, 'link');
+ $this->link = $link;
+ }
+
+ /**
+ * Gets the logo of the feed.
+ *
+ * @return string
+ */
+ public function getLogo()
+ {
+ return $this->logo;
+ }
+
+ /**
+ * Sets the logo of the feed.
+ *
+ * @param string $logo The logo of the feed.
+ *
+ * @return none
+ */
+ public function setLogo($logo)
+ {
+ $this->logo = $logo;
+ }
+
+ /**
+ * Gets the rights of the feed.
+ *
+ * @return string
+ */
+ public function getRights()
+ {
+ return $this->rights;
+ }
+
+ /**
+ * Sets the rights of the feed.
+ *
+ * @param string $rights The rights of the feed.
+ *
+ * @return none
+ */
+ public function setRights($rights)
+ {
+ $this->rights = $rights;
+ }
+
+ /**
+ * Gets the sub title.
+ *
+ * @return string
+ */
+ public function getSubtitle()
+ {
+ return $this->subtitle;
+ }
+
+ /**
+ * Sets the sub title of the feed.
+ *
+ * @param string $subtitle Sets the sub title of the feed.
+ *
+ * @return none
+ */
+ public function setSubtitle($subtitle)
+ {
+ $this->subtitle = $subtitle;
+ }
+
+ /**
+ * Gets the title of the feed.
+ *
+ * @return string.
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Sets the title of the feed.
+ *
+ * @param string $title The title of the feed.
+ *
+ * @return none
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ /**
+ * Gets the updated.
+ *
+ * @return \DateTime
+ */
+ public function getUpdated()
+ {
+ return $this->updated;
+ }
+
+ /**
+ * Sets the updated.
+ *
+ * @param \DateTime $updated updated
+ *
+ * @return none
+ */
+ public function setUpdated($updated)
+ {
+ Validate::isInstanceOf($updated, new \DateTime(), 'updated');
+ $this->updated = $updated;
+ }
+
+ /**
+ * Gets the extension element.
+ *
+ * @return string
+ */
+ public function getExtensionElement()
+ {
+ return $this->extensionElement;
+ }
+
+ /**
+ * Sets the extension element.
+ *
+ * @param string $extensionElement The extension element.
+ *
+ * @return none
+ */
+ public function setExtensionElement($extensionElement)
+ {
+ $this->extensionElement = $extensionElement;
+ }
+
+ /**
+ * Gets the entry of the feed.
+ *
+ * @return Entry
+ */
+ public function getEntry()
+ {
+ return $this->entry;
+ }
+
+ /**
+ * Sets the entry of the feed.
+ *
+ * @param Entry $entry The entry of the feed.
+ *
+ * @return none
+ */
+ public function setEntry($entry)
+ {
+ $this->entry = $entry;
+ }
+
+ /**
+ * Writes an XML representing the feed object.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+
+ $xmlWriter->startElementNS('atom', 'feed', Resources::ATOM_NAMESPACE);
+ $this->writeInnerXml($xmlWriter);
+ $xmlWriter->endElement();
+ }
+
+ /**
+ * Writes an XML representing the feed object.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeInnerXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+
+ if (!is_null($this->attributes)) {
+ if (is_array($this->attributes)) {
+ foreach (
+ $this->attributes
+ as $attributeName => $attributeValue
+ ) {
+ $xmlWriter->writeAttribute($attributeName, $attributeValue);
+ }
+ }
+ }
+
+ if (!is_null($this->author)) {
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->author,
+ Resources::AUTHOR
+ );
+ }
+
+ if (!is_null($this->category)) {
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->category,
+ Resources::CATEGORY
+ );
+ }
+
+ if (!is_null($this->contributor)) {
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->contributor,
+ Resources::CONTRIBUTOR
+ );
+ }
+
+ if (!is_null($this->generator)) {
+ $this->generator->writeXml($xmlWriter);
+ }
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'icon',
+ Resources::ATOM_NAMESPACE,
+ $this->icon
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'logo',
+ Resources::ATOM_NAMESPACE,
+ $this->logo
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'id',
+ Resources::ATOM_NAMESPACE,
+ $this->id
+ );
+
+ if (!is_null($this->link)) {
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->link,
+ Resources::LINK
+ );
+ }
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'rights',
+ Resources::ATOM_NAMESPACE,
+ $this->rights
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'subtitle',
+ Resources::ATOM_NAMESPACE,
+ $this->subtitle
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'title',
+ Resources::ATOM_NAMESPACE,
+ $this->title
+ );
+
+ if (!is_null($this->updated)) {
+ $xmlWriter->writeElementNS(
+ 'atom',
+ 'updated',
+ Resources::ATOM_NAMESPACE,
+ $this->updated->format(\DateTime::ATOM)
+ );
+ }
+
+ }
+}
+
+// @codingStandardsIgnoreEnd
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Generator.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Generator.php
new file mode 100644
index 0000000..251cb1e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Generator.php
@@ -0,0 +1,200 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Atom;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The generator class of ATOM library.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class Generator extends AtomBase
+{
+ /**
+ * The of the generator.
+ *
+ * @var string
+ */
+ protected $text;
+
+ /**
+ * The Uri of the generator.
+ *
+ * @var string
+ */
+ protected $uri;
+
+ /**
+ * The version of the generator.
+ *
+ * @var string
+ */
+ protected $version;
+
+ /**
+ * Creates a generator instance with specified XML string.
+ *
+ * @param string $xmlString A string representing a generator
+ * instance.
+ *
+ * @return none
+ */
+ public static function parseXml($xmlString)
+ {
+ $generatorXml = new \SimpleXMLElement($xmlString);
+ $generatorArray = (array)$generatorXml;
+ $attributes = $generatorXml->attributes();
+ if (!empty($attributes['uri'])) {
+ $this->uri = (string)$attributes['uri'];
+ }
+
+ if (!empty($attributes['version'])) {
+ $this->version = (string)$attributes['version'];
+ }
+
+ $this->text = (string)$generatorXml;
+ }
+
+ /**
+ * Creates an ATOM generator instance with specified name.
+ *
+ * @param string $text The text content of the generator.
+ *
+ * @return none
+ */
+ public function __construct($text = null)
+ {
+ if (!empty($text)) {
+ $this->text = $text;
+ }
+ }
+
+ /**
+ * Gets the text of the generator.
+ *
+ * @return string
+ */
+ public function getText()
+ {
+ return $this->text;
+ }
+
+ /**
+ * Sets the text of the generator.
+ *
+ * @param string $text The text of the generator.
+ *
+ * @return none
+ */
+ public function setText($text)
+ {
+ $this->text = $text;
+ }
+
+ /**
+ * Gets the URI of the generator.
+ *
+ * @return string
+ */
+ public function getUri()
+ {
+ return $this->uri;
+ }
+
+ /**
+ * Sets the URI of the generator.
+ *
+ * @param string $uri The URI of the generator.
+ *
+ * @return none
+ */
+ public function setUri($uri)
+ {
+ $this->uri = $uri;
+ }
+
+
+ /**
+ * Gets the version of the generator.
+ *
+ * @return string
+ */
+ public function getVersion()
+ {
+ return $this->version;
+ }
+
+ /**
+ * Sets the version of the generator.
+ *
+ * @param string $version The version of the generator.
+ *
+ * @return none
+ */
+ public function setVersion($version)
+ {
+ $this->version = $version;
+ }
+
+ /**
+ * Writes an XML representing the generator.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ $xmlWriter->startElementNS(
+ 'atom',
+ Resources::CATEGORY,
+ Resources::ATOM_NAMESPACE
+ );
+
+ $this->writeOptionalAttribute(
+ $xmlWriter,
+ 'uri',
+ $this->uri
+ );
+
+ $this->writeOptionalAttribute(
+ $xmlWriter,
+ 'version',
+ $this->version
+ );
+
+ $xmlWriter->writeRaw($this->text);
+ $xmlWriter->endElement();
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Person.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Person.php
new file mode 100644
index 0000000..513d496
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Person.php
@@ -0,0 +1,222 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Atom;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * The person class of ATOM library.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class Person extends AtomBase
+{
+ /**
+ * The name of the person.
+ *
+ * @var string
+ */
+ protected $name;
+
+ /**
+ * The Uri of the person.
+ *
+ * @var string
+ */
+ protected $uri;
+
+ /**
+ * The email of the person.
+ *
+ * @var string
+ */
+ protected $email;
+
+ /**
+ * Creates an ATOM person instance with specified name.
+ *
+ * @param string $name The name of the person.
+ */
+ public function __construct($name = Resources::EMPTY_STRING)
+ {
+ $this->name = $name;
+ }
+
+ /**
+ * Populates the properties with a specified XML string.
+ *
+ * @param string $xmlString An XML based string representing
+ * the Person instance.
+ *
+ * @return none
+ */
+ public function parseXml($xmlString)
+ {
+ $personXml = simplexml_load_string($xmlString);
+ $attributes = $personXml->attributes();
+ $personArray = (array)$personXml;
+
+ if (array_key_exists('name', $personArray)) {
+ $this->name = (string)$personArray['name'];
+ }
+
+ if (array_key_exists('uri', $personArray)) {
+ $this->uri = (string)$personArray['uri'];
+ }
+
+ if (array_key_exists('email', $personArray)) {
+ $this->email = (string)$personArray['email'];
+ }
+ }
+
+ /**
+ * Gets the name of the person.
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Sets the name of the person.
+ *
+ * @param string $name The name of the person.
+ *
+ * @return none
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ /**
+ * Gets the URI of the person.
+ *
+ * @return string
+ */
+ public function getUri()
+ {
+ return $this->uri;
+ }
+
+ /**
+ * Sets the URI of the person.
+ *
+ * @param string $uri The URI of the person.
+ *
+ * @return none
+ */
+ public function setUri($uri)
+ {
+ $this->uri = $uri;
+ }
+
+
+ /**
+ * Gets the email of the person.
+ *
+ * @return string
+ */
+ public function getEmail()
+ {
+ return $this->email;
+ }
+
+ /**
+ * Sets the email of the person.
+ *
+ * @param string $email The email of the person.
+ *
+ * @return none
+ */
+ public function setEmail($email)
+ {
+ $this->email = $email;
+ }
+
+ /**
+ * Writes an XML representing the person.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $xmlWriter->startElementNS(
+ 'atom',
+ 'person',
+ Resources::ATOM_NAMESPACE
+ );
+ $this->writeInnerXml($xmlWriter);
+ $xmlWriter->endElement();
+ }
+
+ /**
+ * Writes a inner XML representing the person.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeInnerXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $xmlWriter->writeElementNS(
+ 'atom',
+ 'name',
+ Resources::ATOM_NAMESPACE,
+ $this->name
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'uri',
+ Resources::ATOM_NAMESPACE,
+ $this->uri
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'email',
+ Resources::ATOM_NAMESPACE,
+ $this->email
+ );
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Source.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Source.php
new file mode 100644
index 0000000..161ccfe
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Atom/Source.php
@@ -0,0 +1,632 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Atom;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The source class of ATOM library.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class Source extends AtomBase
+{
+ // @codingStandardsIgnoreStart
+
+ /**
+ * The author the source.
+ *
+ * @var array
+ */
+ protected $author;
+
+ /**
+ * The category of the source.
+ *
+ * @var array
+ */
+ protected $category;
+
+ /**
+ * The contributor of the source.
+ *
+ * @var array
+ */
+ protected $contributor;
+
+ /**
+ * The generator of the source.
+ *
+ * @var Generator
+ */
+ protected $generator;
+
+ /**
+ * The icon of the source.
+ *
+ * @var string
+ */
+ protected $icon;
+
+ /**
+ * The ID of the source.
+ *
+ * @var string
+ */
+ protected $id;
+
+ /**
+ * The link of the source.
+ *
+ * @var AtomLink
+ */
+ protected $link;
+
+ /**
+ * The logo of the source.
+ *
+ * @var string
+ */
+ protected $logo;
+
+ /**
+ * The rights of the source.
+ *
+ * @var string
+ */
+ protected $rights;
+
+ /**
+ * The subtitle of the source.
+ *
+ * @var string
+ */
+ protected $subtitle;
+
+ /**
+ * The title of the source.
+ *
+ * @var string
+ */
+ protected $title;
+
+ /**
+ * The update of the source.
+ *
+ * @var \DateTime
+ */
+ protected $updated;
+
+ /**
+ * The extension element of the source.
+ *
+ * @var string
+ */
+ protected $extensionElement;
+
+ /**
+ * Creates an ATOM FEED object with default parameters.
+ */
+ public function __construct()
+ {
+ $this->attributes = array();
+ $this->category = array();
+ $this->contributor = array();
+ $this->author = array();
+ }
+
+ /**
+ * Creates a source object with specified XML string.
+ *
+ * @param string $xmlString The XML string representing a source.
+ *
+ * @return none
+ */
+ public function parseXml($xmlString)
+ {
+ $sourceXml = new \SimpleXMLElement($xmlString);
+ $attributes = $sourceXml->attributes();
+ $sourceArray = (array)$sourceXml;
+
+ if (array_key_exists(Resources::AUTHOR, $sourceArray)) {
+ $this->content = $this->processAuthorNode($sourceArray);
+ }
+
+ if (array_key_exists(Resources::CATEGORY, $sourceArray)) {
+ $this->category = $this->processCategoryNode($sourceArray);
+ }
+
+ if (array_key_exists(Resources::CONTRIBUTOR, $sourceArray)) {
+ $this->contributor = $this->processContributorNode($sourceArray);
+ }
+
+ if (array_key_exists('generator', $sourceArray)) {
+ $generator = new Generator();
+ $generator->setText((string)$sourceArray['generator']->asXML());
+ $this->generator = $generator;
+ }
+
+ if (array_key_exists('icon', $sourceArray)) {
+ $this->icon = (string)$sourceArray['icon'];
+ }
+
+ if (array_key_exists('id', $sourceArray)) {
+ $this->id = (string)$sourceArray['id'];
+ }
+
+ if (array_key_exists(Resources::LINK, $sourceArray)) {
+ $this->link = $this->processLinkNode($sourceArray);
+ }
+
+ if (array_key_exists('logo', $sourceArray)) {
+ $this->logo = (string)$sourceArray['logo'];
+ }
+
+ if (array_key_exists('rights', $sourceArray)) {
+ $this->rights = (string)$sourceArray['rights'];
+ }
+
+ if (array_key_exists('subtitle', $sourceArray)) {
+ $this->subtitle = (string)$sourceArray['subtitle'];
+ }
+
+ if (array_key_exists('title', $sourceArray)) {
+ $this->title = (string)$sourceArray['title'];
+ }
+
+ if (array_key_exists('updated', $sourceArray)) {
+ $this->updated = \DateTime::createFromFormat(
+ \DateTime::ATOM,
+ (string)$sourceArray['updated']
+ );
+ }
+ }
+
+ /**
+ * Gets the author of the source.
+ *
+ * @return array
+ */
+ public function getAuthor()
+ {
+ return $this->author;
+ }
+
+ /**
+ * Sets the author of the source.
+ *
+ * @param array $author An array of authors of the sources.
+ *
+ * @return none
+ */
+ public function setAuthor($author)
+ {
+ $this->author = $author;
+ }
+
+ /**
+ * Gets the category of the source.
+ *
+ * @return array
+ */
+ public function getCategory()
+ {
+ return $this->category;
+ }
+
+ /**
+ * Sets the category of the source.
+ *
+ * @param array $category The category of the source.
+ *
+ * @return none
+ */
+ public function setCategory($category)
+ {
+ $this->category = $category;
+ }
+
+ /**
+ * Gets contributor.
+ *
+ * @return array
+ */
+ public function getContributor()
+ {
+ return $this->contributor;
+ }
+
+ /**
+ * Sets contributor.
+ *
+ * @param array $contributor The contributors of the source.
+ *
+ * @return none
+ */
+ public function setContributor($contributor)
+ {
+ $this->contributor = $contributor;
+ }
+
+ /**
+ * Gets generator.
+ *
+ * @return Generator
+ */
+ public function getGenerator()
+ {
+ return $this->generator;
+ }
+
+ /**
+ * Sets the generator.
+ *
+ * @param Generator $generator Sets the generator of the source.
+ *
+ * @return none
+ */
+ public function setGenerator($generator)
+ {
+ $this->generator = $generator;
+ }
+
+ /**
+ * Gets the icon of the source.
+ *
+ * @return string
+ */
+ public function getIcon()
+ {
+ return $this->icon;
+ }
+
+ /**
+ * Sets the icon of the source.
+ *
+ * @param string $icon The icon of the source.
+ *
+ * @return string
+ */
+ public function setIcon($icon)
+ {
+ $this->icon = $icon;
+ }
+
+ /**
+ * Gets the ID of the source.
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Sets the ID of the source.
+ *
+ * @param string $id The ID of the source.
+ *
+ * @return string
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ /**
+ * Gets the link of the source.
+ *
+ * @return array
+ */
+ public function getLink()
+ {
+ return $this->link;
+ }
+
+ /**
+ * Sets the link of the source.
+ *
+ * @param array $link The link of the source.
+ *
+ * @return none
+ */
+ public function setLink($link)
+ {
+ $this->link = $link;
+ }
+
+ /**
+ * Gets the logo of the source.
+ *
+ * @return string
+ */
+ public function getLogo()
+ {
+ return $this->logo;
+ }
+
+ /**
+ * Sets the logo of the source.
+ *
+ * @param string $logo The logo of the source.
+ *
+ * @return none
+ */
+ public function setLogo($logo)
+ {
+ $this->logo = $logo;
+ }
+
+ /**
+ * Gets the rights of the source.
+ *
+ * @return string
+ */
+ public function getRights()
+ {
+ return $this->rights;
+ }
+
+ /**
+ * Sets the rights of the source.
+ *
+ * @param string $rights The rights of the source.
+ *
+ * @return none
+ */
+ public function setRights($rights)
+ {
+ $this->rights = $rights;
+ }
+
+ /**
+ * Gets the sub title.
+ *
+ * @return string
+ */
+ public function getSubtitle()
+ {
+ return $this->subtitle;
+ }
+
+ /**
+ * Sets the sub title of the source.
+ *
+ * @param string $subtitle Sets the sub title of the source.
+ *
+ * @return none
+ */
+ public function setSubtitle($subtitle)
+ {
+ $this->subtitle = $subtitle;
+ }
+
+ /**
+ * Gets the title of the source.
+ *
+ * @return string.
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Sets the title of the source.
+ *
+ * @param string $title The title of the source.
+ *
+ * @return none
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ /**
+ * Gets the updated.
+ *
+ * @return \DateTime
+ */
+ public function getUpdated()
+ {
+ return $this->updated;
+ }
+
+ /**
+ * Sets the updated.
+ *
+ * @param \DateTime $updated updated
+ *
+ * @return none
+ */
+ public function setUpdated($updated)
+ {
+ $this->updated = $updated;
+ }
+
+ /**
+ * Gets the extension element.
+ *
+ * @return string
+ */
+ public function getExtensionElement()
+ {
+ return $this->extensionElement;
+ }
+
+ /**
+ * Sets the extension element.
+ *
+ * @param string $extensionElement The extension element.
+ *
+ * @return none
+ */
+ public function setExtensionElement($extensionElement)
+ {
+ $this->extensionElement = $extensionElement;
+ }
+
+ /**
+ * Writes an XML representing the source object.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $xmlWriter->startElementNS(
+ 'atom',
+ 'source',
+ Resources::ATOM_NAMESPACE
+ );
+ $this->writeInnerXml($xmlWriter);
+ $xmlWriter->endElement();
+ }
+ /**
+ * Writes a inner XML representing the source object.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeInnerXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ if (!is_null($this->attributes)) {
+ if (is_array($this->attributes)) {
+ foreach ($this->attributes as $attributeName => $attributeValue) {
+ $xmlWriter->writeAttribute($attributeName, $attributeValue);
+ }
+ }
+ }
+
+ if (!is_null($this->author)) {
+ Validate::isArray($this->author, Resources::AUTHOR);
+ $this->writeArrayItem($xmlWriter, $this->author, Resources::AUTHOR);
+ }
+
+ if (!is_null($this->category)) {
+ Validate::isArray($this->category, Resources::CATEGORY);
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->category,
+ Resources::CATEGORY
+ );
+ }
+
+ if (!is_null($this->contributor)) {
+ Validate::isArray($this->contributor, Resources::CONTRIBUTOR);
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->contributor,
+ Resources::CONTRIBUTOR
+ );
+ }
+
+ if (!is_null($this->generator)) {
+ $this->generator->writeXml($xmlWriter);
+ }
+
+ if (!is_null($this->icon)) {
+ $xmlWriter->writeElementNS(
+ 'atom',
+ 'icon',
+ Resources::ATOM_NAMESPACE,
+ $this->icon
+ );
+ }
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'logo',
+ Resources::ATOM_NAMESPACE,
+ $this->logo
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'id',
+ Resources::ATOM_NAMESPACE,
+ $this->id
+ );
+
+ if (!is_null($this->link)) {
+ Validate::isArray($this->link, Resources::LINK);
+ $this->writeArrayItem(
+ $xmlWriter,
+ $this->link,
+ Resources::LINK
+ );
+ }
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'rights',
+ Resources::ATOM_NAMESPACE,
+ $this->rights
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'subtitle',
+ Resources::ATOM_NAMESPACE,
+ $this->subtitle
+ );
+
+ $this->writeOptionalElementNS(
+ $xmlWriter,
+ 'atom',
+ 'title',
+ Resources::ATOM_NAMESPACE,
+ $this->title
+ );
+
+ if (!is_null($this->updated)) {
+ $xmlWriter->writeElementNS(
+ 'atom',
+ 'updated',
+ Resources::ATOM_NAMESPACE,
+ $this->updated->format(\DateTime::ATOM)
+ );
+ }
+ }
+}
+
+// @codingStandardsIgnoreEnd
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/IAuthScheme.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/IAuthScheme.php
new file mode 100644
index 0000000..413f8f1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/IAuthScheme.php
@@ -0,0 +1,60 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Authentication;
+
+/**
+ * Interface for azure authentication schemes.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Authentication
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+interface IAuthScheme
+{
+ /**
+ * Returns authorization header to be included in the request.
+ *
+ * @param array $headers request headers.
+ * @param string $url reuqest url.
+ * @param array $queryParams query variables.
+ * @param string $httpMethod request http method.
+ *
+ * @see Specifying the Authorization Header section at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @abstract
+ *
+ * @return string
+ */
+ public function getAuthorizationHeader($headers, $url, $queryParams,
+ $httpMethod
+ );
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/OAuthScheme.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/OAuthScheme.php
new file mode 100644
index 0000000..083205c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/OAuthScheme.php
@@ -0,0 +1,141 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link http://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Authentication;
+use WindowsAzure\Common\Internal\Authentication\IAuthScheme;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\OAuthRestProxy;
+use WindowsAzure\Common\Models\OAuthAccessToken;
+
+/**
+ * Provides shared key authentication scheme for OAuth.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Authentication
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link http://github.com/windowsazure/azure-sdk-for-php
+ */
+class OAuthScheme implements IAuthScheme
+{
+ /**
+ * @var string
+ */
+ protected $accountName;
+
+ /**
+ * @var string
+ */
+ protected $accountKey;
+
+ /**
+ * @var WindowsAzure\Common\Models\OAuthAccessToken
+ */
+ protected $accessToken;
+
+ /**
+ * @var WindowsAzure\Common\Internal\OAuthRestProxy
+ */
+ protected $oauthService;
+
+ /**
+ * @var string
+ */
+ protected $grantType;
+
+ /**
+ * @var string
+ */
+ protected $scope;
+
+ /**
+ * Constructor.
+ *
+ * @param string $accountName account name.
+ * @param string $accountKey account
+ * secondary key.
+ *
+ * @param string $grantType grant type
+ * for OAuth request.
+ *
+ * @param string $scope scope for
+ * OAurh request.
+ *
+ * @param WindowsAzure\Common\Internal\OAuthRestProxy $oauthService account
+ * primary or secondary key.
+ */
+ public function __construct(
+ $accountName,
+ $accountKey,
+ $grantType,
+ $scope,
+ $oauthService)
+ {
+ Validate::isString($accountName, 'accountName');
+ Validate::isString($accountKey, 'accountKey');
+ Validate::isString($grantType, 'grantType');
+ Validate::isString($scope, 'scope');
+ Validate::notNull($oauthService, 'oauthService');
+
+ $this->accountName = $accountName;
+ $this->accountKey = $accountKey;
+ $this->grantType = $grantType;
+ $this->scope = $scope;
+ $this->oauthService = $oauthService;
+ }
+
+ /**
+ * Returns authorization header to be included in the request.
+ *
+ * @param array $headers request headers.
+ * @param string $url reuqest url.
+ * @param array $queryParams query variables.
+ * @param string $httpMethod request http method.
+ *
+ * @see Specifying the Authorization Header section at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @return string
+ */
+ public function getAuthorizationHeader($headers, $url, $queryParams, $httpMethod)
+ {
+ if (($this->accessToken == null)
+ || ($this->accessToken->getExpiresIn() < time())) {
+ $this->accessToken = $this->oauthService->getAccessToken(
+ $this->grantType,
+ $this->accountName,
+ $this->accountKey,
+ $this->scope
+ );
+ }
+
+ return Resources::OAUTH_ACCESS_TOKEN_PREFIX .
+ $this->accessToken->getAccessToken();
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/SharedKeyAuthScheme.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/SharedKeyAuthScheme.php
new file mode 100644
index 0000000..2ecd5b9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/SharedKeyAuthScheme.php
@@ -0,0 +1,137 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Authentication;
+use WindowsAzure\Common\Internal\Authentication\StorageAuthScheme;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Provides shared key authentication scheme for blob and queue. For more info
+ * check: http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Authentication
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class SharedKeyAuthScheme extends StorageAuthScheme
+{
+ protected $includedHeaders;
+
+ /**
+ * Constructor.
+ *
+ * @param string $accountName storage account name.
+ * @param string $accountKey storage account primary or secondary key.
+ *
+ * @return
+ * WindowsAzure\Common\Internal\Authentication\SharedKeyAuthScheme
+ */
+ public function __construct($accountName, $accountKey)
+ {
+ parent::__construct($accountName, $accountKey);
+
+ $this->includedHeaders = array();
+ $this->includedHeaders[] = Resources::CONTENT_ENCODING;
+ $this->includedHeaders[] = Resources::CONTENT_LANGUAGE;
+ $this->includedHeaders[] = Resources::CONTENT_LENGTH;
+ $this->includedHeaders[] = Resources::CONTENT_MD5;
+ $this->includedHeaders[] = Resources::CONTENT_TYPE;
+ $this->includedHeaders[] = Resources::DATE;
+ $this->includedHeaders[] = Resources::IF_MODIFIED_SINCE;
+ $this->includedHeaders[] = Resources::IF_MATCH;
+ $this->includedHeaders[] = Resources::IF_NONE_MATCH;
+ $this->includedHeaders[] = Resources::IF_UNMODIFIED_SINCE;
+ $this->includedHeaders[] = Resources::RANGE;
+ }
+
+ /**
+ * Computes the authorization signature for blob and queue shared key.
+ *
+ * @param array $headers request headers.
+ * @param string $url reuqest url.
+ * @param array $queryParams query variables.
+ * @param string $httpMethod request http method.
+ *
+ * @see Blob and Queue Services (Shared Key Authentication) at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @return string
+ */
+ protected function computeSignature($headers, $url, $queryParams, $httpMethod)
+ {
+ $canonicalizedHeaders = parent::computeCanonicalizedHeaders($headers);
+
+ $canonicalizedResource = parent::computeCanonicalizedResource(
+ $url, $queryParams
+ );
+
+
+ $stringToSign = array();
+ $stringToSign[] = strtoupper($httpMethod);
+
+ foreach ($this->includedHeaders as $header) {
+ $stringToSign[] = Utilities::tryGetValue($headers, $header);
+ }
+
+ if (count($canonicalizedHeaders) > 0) {
+ $stringToSign[] = implode("\n", $canonicalizedHeaders);
+ }
+
+ $stringToSign[] = $canonicalizedResource;
+ $stringToSign = implode("\n", $stringToSign);
+
+ return $stringToSign;
+ }
+
+ /**
+ * Returns authorization header to be included in the request.
+ *
+ * @param array $headers request headers.
+ * @param string $url reuqest url.
+ * @param array $queryParams query variables.
+ * @param string $httpMethod request http method.
+ *
+ * @see Specifying the Authorization Header section at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @return string
+ */
+ public function getAuthorizationHeader($headers, $url, $queryParams, $httpMethod)
+ {
+ $signature = $this->computeSignature(
+ $headers, $url, $queryParams, $httpMethod
+ );
+
+ return 'SharedKey ' . $this->accountName . ':' . base64_encode(
+ hash_hmac('sha256', $signature, base64_decode($this->accountKey), true)
+ );
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/StorageAuthScheme.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/StorageAuthScheme.php
new file mode 100644
index 0000000..680011f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/StorageAuthScheme.php
@@ -0,0 +1,234 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Authentication;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Authentication\IAuthScheme;
+
+
+/**
+ * Base class for azure authentication schemes.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Authentication
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+abstract class StorageAuthScheme implements IAuthScheme
+{
+ protected $accountName;
+ protected $accountKey;
+
+ /**
+ * Constructor.
+ *
+ * @param string $accountName storage account name.
+ * @param string $accountKey storage account primary or secondary key.
+ *
+ * @return
+ * WindowsAzure\Common\Internal\Authentication\StorageAuthScheme
+ */
+ public function __construct($accountName, $accountKey)
+ {
+ $this->accountKey = $accountKey;
+ $this->accountName = $accountName;
+ }
+
+ /**
+ * Computes canonicalized headers for headers array.
+ *
+ * @param array $headers request headers.
+ *
+ * @see Constructing the Canonicalized Headers String section at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @return array
+ */
+ protected function computeCanonicalizedHeaders($headers)
+ {
+ $canonicalizedHeaders = array();
+ $normalizedHeaders = array();
+ $validPrefix = Resources::X_MS_HEADER_PREFIX;
+
+ if (is_null($normalizedHeaders)) {
+ return $canonicalizedHeaders;
+ }
+
+ foreach ($headers as $header => $value) {
+ // Convert header to lower case.
+ $header = strtolower($header);
+
+ // Retrieve all headers for the resource that begin with x-ms-,
+ // including the x-ms-date header.
+ if (Utilities::startsWith($header, $validPrefix)) {
+ // Unfold the string by replacing any breaking white space
+ // (meaning what splits the headers, which is \r\n) with a single
+ // space.
+ $value = str_replace("\r\n", ' ', $value);
+
+ // Trim any white space around the colon in the header.
+ $value = ltrim($value);
+ $header = rtrim($header);
+
+ $normalizedHeaders[$header] = $value;
+ }
+ }
+
+ // Sort the headers lexicographically by header name, in ascending order.
+ // Note that each header may appear only once in the string.
+ ksort($normalizedHeaders);
+
+ foreach ($normalizedHeaders as $key => $value) {
+ $canonicalizedHeaders[] = $key . ':' . $value;
+ }
+
+ return $canonicalizedHeaders;
+ }
+
+ /**
+ * Computes canonicalized resources from URL using Table formar
+ *
+ * @param string $url request url.
+ * @param array $queryParams request query variables.
+ *
+ * @see Constructing the Canonicalized Resource String section at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @return string
+ */
+ protected function computeCanonicalizedResourceForTable($url, $queryParams)
+ {
+ $queryParams = array_change_key_case($queryParams);
+
+ // 1. Beginning with an empty string (""), append a forward slash (/),
+ // followed by the name of the account that owns the accessed resource.
+ $canonicalizedResource = '/' . $this->accountName;
+
+ // 2. Append the resource's encoded URI path, without any query parameters.
+ $canonicalizedResource .= parse_url($url, PHP_URL_PATH);
+
+ // 3. The query string should include the question mark and the comp
+ // parameter (for example, ?comp=metadata). No other parameters should
+ // be included on the query string.
+ if (array_key_exists(Resources::QP_COMP, $queryParams)) {
+ $canonicalizedResource .= '?' . Resources::QP_COMP . '=';
+ $canonicalizedResource .= $queryParams[Resources::QP_COMP];
+ }
+
+ return $canonicalizedResource;
+ }
+
+ /**
+ * Computes canonicalized resources from URL.
+ *
+ * @param string $url request url.
+ * @param array $queryParams request query variables.
+ *
+ * @see Constructing the Canonicalized Resource String section at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @return string
+ */
+ protected function computeCanonicalizedResource($url, $queryParams)
+ {
+ $queryParams = array_change_key_case($queryParams);
+
+ // 1. Beginning with an empty string (""), append a forward slash (/),
+ // followed by the name of the account that owns the accessed resource.
+ $canonicalizedResource = '/' . $this->accountName;
+
+ // 2. Append the resource's encoded URI path, without any query parameters.
+ $canonicalizedResource .= parse_url($url, PHP_URL_PATH);
+
+ // 3. Retrieve all query parameters on the resource URI, including the comp
+ // parameter if it exists.
+ // 4. Sort the query parameters lexicographically by parameter name, in
+ // ascending order.
+ if (count($queryParams) > 0) {
+ ksort($queryParams);
+ }
+
+ // 5. Convert all parameter names to lowercase.
+ // 6. URL-decode each query parameter name and value.
+ // 7. Append each query parameter name and value to the string in the
+ // following format:
+ // parameter-name:parameter-value
+ // 9. Group query parameters
+ // 10. Append a new line character (\n) after each name-value pair.
+ foreach ($queryParams as $key => $value) {
+ // Grouping query parameters
+ $values = explode(Resources::SEPARATOR, $value);
+ sort($values);
+ $separated = implode(Resources::SEPARATOR, $values);
+
+ $canonicalizedResource .= "\n" . $key . ':' . $separated;
+ }
+
+ return $canonicalizedResource;
+ }
+
+ /**
+ * Returns authorization header to be included in the request.
+ *
+ * @param array $headers request headers.
+ * @param string $url reuqest url.
+ * @param array $queryParams query variables.
+ * @param string $httpMethod request http method.
+ *
+ * @see Specifying the Authorization Header section at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @abstract
+ *
+ * @return string
+ */
+ abstract public function getAuthorizationHeader($headers, $url, $queryParams,
+ $httpMethod
+ );
+
+ /**
+ * Computes the authorization signature.
+ *
+ * @param array $headers request headers.
+ * @param string $url reuqest url.
+ * @param array $queryParams query variables.
+ * @param string $httpMethod request http method.
+ *
+ * @see check all authentication schemes at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @abstract
+ *
+ * @return string
+ */
+ abstract protected function computeSignature($headers, $url, $queryParams,
+ $httpMethod
+ );
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/TableSharedKeyLiteAuthScheme.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/TableSharedKeyLiteAuthScheme.php
new file mode 100644
index 0000000..6dd08f9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Authentication/TableSharedKeyLiteAuthScheme.php
@@ -0,0 +1,118 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link http://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Authentication;
+use WindowsAzure\Common\Internal\Authentication\StorageAuthScheme;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Provides shared key authentication scheme for blob and queue. For more info
+ * check: http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Authentication
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link http://github.com/windowsazure/azure-sdk-for-php
+ */
+class TableSharedKeyLiteAuthScheme extends StorageAuthScheme
+{
+ protected $includedHeaders;
+
+ /**
+ * Constructor.
+ *
+ * @param string $accountName storage account name.
+ * @param string $accountKey storage account primary or secondary key.
+ *
+ * @return TableSharedKeyLiteAuthScheme
+ */
+ public function __construct($accountName, $accountKey)
+ {
+ parent::__construct($accountName, $accountKey);
+
+ $this->includedHeaders = array();
+ $this->includedHeaders[] = Resources::DATE;
+ }
+
+ /**
+ * Computes the authorization signature for blob and queue shared key.
+ *
+ * @param array $headers request headers.
+ * @param string $url reuqest url.
+ * @param array $queryParams query variables.
+ * @param string $httpMethod request http method.
+ *
+ * @see Blob and Queue Services (Shared Key Authentication) at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @return string
+ */
+ protected function computeSignature($headers, $url, $queryParams, $httpMethod)
+ {
+ $canonicalizedResource = parent::computeCanonicalizedResourceForTable(
+ $url, $queryParams
+ );
+
+ $stringToSign = array();
+
+ foreach ($this->includedHeaders as $header) {
+ $stringToSign[] = Utilities::tryGetValue($headers, $header);
+ }
+
+ $stringToSign[] = $canonicalizedResource;
+ $stringToSign = implode("\n", $stringToSign);
+
+ return $stringToSign;
+ }
+
+ /**
+ * Returns authorization header to be included in the request.
+ *
+ * @param array $headers request headers.
+ * @param string $url reuqest url.
+ * @param array $queryParams query variables.
+ * @param string $httpMethod request http method.
+ *
+ * @see Specifying the Authorization Header section at
+ * http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx
+ *
+ * @return string
+ */
+ public function getAuthorizationHeader($headers, $url, $queryParams, $httpMethod)
+ {
+ $signature = $this->computeSignature(
+ $headers, $url, $queryParams, $httpMethod
+ );
+
+ return 'SharedKeyLite ' . $this->accountName . ':' . base64_encode(
+ hash_hmac('sha256', $signature, base64_decode($this->accountKey), true)
+ );
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ConnectionStringParser.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ConnectionStringParser.php
new file mode 100644
index 0000000..0659d8b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ConnectionStringParser.php
@@ -0,0 +1,365 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+
+/**
+ * Helper methods for parsing connection strings. The rules for formatting connection
+ * strings are defined here:
+ * www.connectionstrings.com/articles/show/important-rules-for-connection-strings
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ConnectionStringParser
+{
+ /**
+ * @var string
+ */
+ private $_argumentName;
+
+ /**
+ * @var string
+ */
+ private $_value;
+
+ /**
+ * @var integer
+ */
+ private $_pos;
+
+ /**
+ * @var string
+ */
+ private $_state;
+
+ /**
+ * Parses the connection string into a collection of key/value pairs.
+ *
+ * @param string $argumentName Name of the argument to be used in error
+ * messages.
+ * @param string $connectionString Connection string.
+ *
+ * @return array
+ *
+ * @static
+ */
+ public static function parseConnectionString($argumentName, $connectionString)
+ {
+ Validate::isString($argumentName, 'argumentName');
+ Validate::notNullOrEmpty($argumentName, 'argumentName');
+ Validate::isString($connectionString, 'connectionString');
+ Validate::notNullOrEmpty($connectionString, 'connectionString');
+
+ $parser = new ConnectionStringParser($argumentName, $connectionString);
+ return $parser->_parse();
+ }
+
+ /**
+ * Initializes the object.
+ *
+ * @param string $argumentName Name of the argument to be used in error
+ * messages.
+ * @param string $value Connection string.
+ */
+ private function __construct($argumentName, $value)
+ {
+ $this->_argumentName = $argumentName;
+ $this->_value = $value;
+ $this->_pos = 0;
+ $this->_state = ParserState::EXPECT_KEY;
+ }
+
+ /**
+ * Parses the connection string.
+ *
+ * @return array
+ *
+ * @throws \RuntimeException
+ */
+ private function _parse()
+ {
+ $key = null;
+ $value = null;
+ $connectionStringValues = array();
+
+ while (true) {
+ $this->_skipWhiteSpaces();
+
+ if ( $this->_pos == strlen($this->_value)
+ && $this->_state != ParserState::EXPECT_VALUE
+ ) {
+ // Not stopping after the end has been reached and a value is
+ // expected results in creating an empty value, which we expect.
+ break;
+ }
+
+ switch ($this->_state) {
+ case ParserState::EXPECT_KEY:
+ $key = $this->_extractKey();
+ $this->_state = ParserState::EXPECT_ASSIGNMENT;
+ break;
+
+ case ParserState::EXPECT_ASSIGNMENT:
+ $this->_skipOperator('=');
+ $this->_state = ParserState::EXPECT_VALUE;
+ break;
+
+ case ParserState::EXPECT_VALUE:
+ $value = $this->_extractValue();
+ $this->_state = ParserState::EXPECT_SEPARATOR;
+ $connectionStringValues[$key] = $value;
+ $key = null;
+ $value = null;
+ break;
+
+ default:
+ $this->_skipOperator(';');
+ $this->_state = ParserState::EXPECT_KEY;
+ break;
+ }
+ }
+
+ // Must end parsing in the valid state (expected key or separator)
+ if ($this->_state == ParserState::EXPECT_ASSIGNMENT) {
+ throw $this->_createException(
+ $this->_pos,
+ Resources::MISSING_CONNECTION_STRING_CHAR,
+ '='
+ );
+ }
+
+ return $connectionStringValues;
+ }
+
+ /**
+ *Generates an invalid connection string exception with the detailed error
+ * message.
+ *
+ * @param integer $position The position of the error.
+ * @param string $errorString The short error formatting string.
+ *
+ * @return \RuntimeException
+ */
+ private function _createException($position, $errorString)
+ {
+ $arguments = func_get_args();
+
+ // Remove first argument (position)
+ unset($arguments[0]);
+
+ // Create a short error message.
+ $errorString = sprintf($errorString, $arguments);
+
+ // Add position.
+ $errorString = sprintf(
+ Resources::ERROR_PARSING_STRING,
+ $errorString,
+ $position
+ );
+
+ // Create final error message.
+ $errorString = sprintf(
+ Resources::INVALID_CONNECTION_STRING,
+ $this->_argumentName,
+ $errorString
+ );
+
+ return new \RuntimeException($errorString);
+ }
+
+ /**
+ * Skips whitespaces at the current position.
+ *
+ * @return none
+ */
+ private function _skipWhiteSpaces()
+ {
+ while ( $this->_pos < strlen($this->_value)
+ && ctype_space($this->_value[$this->_pos])
+ ) {
+ $this->_pos++;
+ }
+ }
+
+ /**
+ * Extracts the key's value.
+ *
+ * @return string
+ */
+ private function _extractValue()
+ {
+ $value = Resources::EMPTY_STRING;
+
+ if ($this->_pos < strlen($this->_value)) {
+ $ch = $this->_value[$this->_pos];
+
+ if ($ch == '"' || $ch == '\'') {
+ // Value is contained between double quotes or skipped single quotes.
+ $this->_pos++;
+ $value = $this->_extractString($ch);
+ } else {
+ $firstPos = $this->_pos;
+ $isFound = false;
+
+ while ($this->_pos < strlen($this->_value) && !$isFound) {
+ $ch = $this->_value[$this->_pos];
+
+ if ($ch == ';') {
+ $isFound = true;
+ } else {
+ $this->_pos++;
+ }
+ }
+
+ $value = rtrim(
+ substr($this->_value, $firstPos, $this->_pos - $firstPos)
+ );
+ }
+ }
+
+ return $value;
+ }
+
+ /**
+ * Extracts key at the current position.
+ *
+ * @return string
+ */
+ private function _extractKey()
+ {
+ $key = null;
+ $firstPos = $this->_pos;
+ $ch = $this->_value[$this->_pos];
+
+ if ($ch == '"' || $ch == '\'') {
+ $this->_pos++;
+ $key = $this->_extractString($ch);
+ } else if ($ch == ';' || $ch == '=') {
+ // Key name was expected.
+ throw $this->_createException(
+ $firstPos,
+ Resources::ERROR_CONNECTION_STRING_MISSING_KEY
+ );
+ } else {
+ while ($this->_pos < strlen($this->_value)) {
+ $ch = $this->_value[$this->_pos];
+
+ // At this point we've read the key, break.
+ if ($ch == '=') {
+ break;
+ }
+
+ $this->_pos++;
+ }
+ $key = rtrim(substr($this->_value, $firstPos, $this->_pos - $firstPos));
+ }
+
+ if (strlen($key) == 0) {
+ // Empty key name.
+ throw $this->_createException(
+ $firstPos,
+ Resources::ERROR_CONNECTION_STRING_EMPTY_KEY
+ );
+ }
+
+ return $key;
+ }
+
+ /**
+ * Extracts the string until the given quotation mark.
+ *
+ * @param string $quote The quotation mark terminating the string.
+ *
+ * @return string
+ */
+ private function _extractString($quote)
+ {
+ $firstPos = $this->_pos;
+
+ while ( $this->_pos < strlen($this->_value)
+ && $this->_value[$this->_pos] != $quote
+ ) {
+ $this->_pos++;
+ }
+
+ if ($this->_pos == strlen($this->_value)) {
+ // Runaway string.
+ throw $this->_createException(
+ $this->_pos,
+ Resources::ERROR_CONNECTION_STRING_MISSING_CHARACTER,
+ $quote
+ );
+ }
+
+ return substr($this->_value, $firstPos, $this->_pos++ - $firstPos);
+ }
+
+ /**
+ * Skips specified operator.
+ *
+ * @param string $operatorChar The operator character.
+ *
+ * @return none
+ *
+ * @throws \RuntimeException
+ */
+ private function _skipOperator($operatorChar)
+ {
+ if ($this->_value[$this->_pos] != $operatorChar) {
+ // Character was expected.
+ throw $this->_createException(
+ $this->_pos,
+ Resources::MISSING_CONNECTION_STRING_CHAR,
+ $operatorChar
+ );
+ }
+
+ $this->_pos++;
+ }
+}
+
+/**
+ * State of the connection string parser.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ParserState
+{
+ const EXPECT_KEY = 'ExpectKey';
+ const EXPECT_ASSIGNMENT = 'ExpectAssignment';
+ const EXPECT_VALUE = 'ExpectValue';
+ const EXPECT_SEPARATOR = 'ExpectSeparator';
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ConnectionStringSource.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ConnectionStringSource.php
new file mode 100644
index 0000000..20bf0a8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ConnectionStringSource.php
@@ -0,0 +1,98 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+
+/**
+ * Holder for default connection string sources used in CloudConfigurationManager.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ConnectionStringSource
+{
+ /**
+ * The list of all sources which comes as default.
+ *
+ * @var type
+ */
+ private static $_defaultSources;
+
+ /**
+ * @var boolean
+ */
+ private static $_isInitialized;
+
+ /**
+ * Environment variable source name.
+ */
+ const ENVIRONMENT_SOURCE = 'environment_source';
+
+ /**
+ * Initializes the default sources.
+ *
+ * @return none
+ */
+ private static function _init()
+ {
+ if (!self::$_isInitialized) {
+ self::$_defaultSources = array(
+ self::ENVIRONMENT_SOURCE => array(__CLASS__, 'environmentSource')
+ );
+ self::$_isInitialized = true;
+ }
+ }
+
+ /**
+ * Gets a connection string value from the system environment.
+ *
+ * @param string $key The connection string name.
+ *
+ * @return string
+ */
+ public static function environmentSource($key)
+ {
+ Validate::isString($key, 'key');
+
+ return getenv($key);
+ }
+
+ /**
+ * Gets list of default sources.
+ *
+ * @return array
+ */
+ public static function getDefaultSources()
+ {
+ self::_init();
+ return self::$_defaultSources;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/FilterableService.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/FilterableService.php
new file mode 100644
index 0000000..af86280
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/FilterableService.php
@@ -0,0 +1,52 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+
+/**
+ * Interface for service with filers.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+interface FilterableService
+{
+ /**
+ * Adds new filter to proxy object and returns new BlobRestProxy with
+ * that filter.
+ *
+ * @param WindowsAzure\Common\Internal\IServiceFilter $filter Filter to add for
+ * the pipeline.
+ *
+ * @return mix.
+ */
+ public function withFilter($filter);
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/AuthenticationFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/AuthenticationFilter.php
new file mode 100644
index 0000000..0944004
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/AuthenticationFilter.php
@@ -0,0 +1,93 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Filters;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\IServiceFilter;
+use WindowsAzure\Common\Internal\Authentication\SharedKeyAuthScheme;
+use WindowsAzure\Common\Internal\Authentication\TableSharedKeyLiteAuthScheme;
+use WindowsAzure\Common\Internal\InvalidArgumentTypeException;
+
+/**
+ * Adds authentication header to the http request object.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Filters
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AuthenticationFilter implements IServiceFilter
+{
+ /**
+ * @var WindowsAzure\Common\Internal\Authentication\StorageAuthScheme
+ */
+ private $_authenticationScheme;
+
+ /**
+ * Creates AuthenticationFilter with the passed scheme.
+ *
+ * @param StorageAuthScheme $authenticationScheme The authentication scheme.
+ */
+ public function __construct($authenticationScheme)
+ {
+ $this->_authenticationScheme = $authenticationScheme;
+ }
+
+ /**
+ * Adds authentication header to the request headers.
+ *
+ * @param HttpClient $request HTTP channel object.
+ *
+ * @return \HTTP_Request2
+ */
+ public function handleRequest($request)
+ {
+ $signedKey = $this->_authenticationScheme->getAuthorizationHeader(
+ $request->getHeaders(), $request->getUrl(),
+ $request->getUrl()->getQueryVariables(), $request->getMethod()
+ );
+ $request->setHeader(Resources::AUTHENTICATION, $signedKey);
+
+ return $request;
+ }
+
+ /**
+ * Does nothing with the response.
+ *
+ * @param HttpClient $request HTTP channel object.
+ * @param \HTTP_Request2_Response $response HTTP response object.
+ *
+ * @return \HTTP_Request2_Response
+ */
+ public function handleResponse($request, $response)
+ {
+ // Do nothing with the response.
+ return $response;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/DateFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/DateFilter.php
new file mode 100644
index 0000000..95d1fcb
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/DateFilter.php
@@ -0,0 +1,72 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Filters;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\IServiceFilter;
+
+/**
+ * Adds date header to the http request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Filters
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class DateFilter implements IServiceFilter
+{
+ /**
+ * Adds date (in GMT format) header to the request headers.
+ *
+ * @param HttpClient $request HTTP channel object.
+ *
+ * @return \HTTP_Request2
+ */
+ public function handleRequest($request)
+ {
+ $date = gmdate(Resources::AZURE_DATE_FORMAT, time());
+ $request->setHeader(Resources::DATE, $date);
+
+ return $request;
+ }
+
+ /**
+ * Does nothing with the response.
+ *
+ * @param HttpClient $request HTTP channel object.
+ * @param \HTTP_Request2_Response $response HTTP response object.
+ *
+ * @return \HTTP_Request2_Response
+ */
+ public function handleResponse($request, $response)
+ {
+ // Do nothing with the response.
+ return $response;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/ExponentialRetryPolicy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/ExponentialRetryPolicy.php
new file mode 100644
index 0000000..3e5ff94
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/ExponentialRetryPolicy.php
@@ -0,0 +1,134 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Filters;
+
+/**
+ * The exponential retry policy.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Filters
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ExponentialRetryPolicy extends RetryPolicy
+{
+ /**
+ * @var integer
+ */
+ private $_deltaBackoffIntervalInMs;
+
+ /**
+ * @var integer
+ */
+ private $_maximumAttempts;
+
+ /**
+ * @var integer
+ */
+ private $_resolvedMaxBackoff;
+
+ /**
+ * @var integer
+ */
+ private $_resolvedMinBackoff;
+
+ /**
+ * @var array
+ */
+ private $_retryableStatusCodes;
+
+ /**
+ * Initializes new object from ExponentialRetryPolicy.
+ *
+ * @param array $retryableStatusCodes The retryable status codes.
+ * @param integer $deltaBackoff The backoff time delta.
+ * @param integer $maximumAttempts The number of max attempts.
+ */
+ public function __construct($retryableStatusCodes,
+ $deltaBackoff = parent::DEFAULT_CLIENT_BACKOFF,
+ $maximumAttempts = parent::DEFAULT_CLIENT_RETRY_COUNT
+ ) {
+ $this->_deltaBackoffIntervalInMs = $deltaBackoff;
+ $this->_maximumAttempts = $maximumAttempts;
+ $this->_resolvedMaxBackoff = parent::DEFAULT_MAX_BACKOFF;
+ $this->_resolvedMinBackoff = parent::DEFAULT_MIN_BACKOFF;
+ $this->_retryableStatusCodes = $retryableStatusCodes;
+ sort($retryableStatusCodes);
+ }
+
+ /**
+ * Indicates if there should be a retry or not.
+ *
+ * @param integer $retryCount The retry count.
+ * @param \HTTP_Request2_Response $response The HTTP response object.
+ *
+ * @return boolean
+ */
+ public function shouldRetry($retryCount, $response)
+ {
+ if ( $retryCount >= $this->_maximumAttempts
+ || array_search($response->getStatus(), $this->_retryableStatusCodes)
+ || is_null($response)
+ ) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Calculates the backoff for the retry policy.
+ *
+ * @param integer $retryCount The retry count.
+ * @param \HTTP_Request2_Response $response The HTTP response object.
+ *
+ * @return integer
+ */
+ public function calculateBackoff($retryCount, $response)
+ {
+ // Calculate backoff Interval between 80% and 120% of the desired
+ // backoff, multiply by 2^n -1 for
+ // exponential
+ $incrementDelta = (int) (pow(2, $retryCount) - 1);
+ $boundedRandDelta = (int) ($this->_deltaBackoffIntervalInMs * 0.8)
+ + mt_rand(
+ 0,
+ (int) ($this->_deltaBackoffIntervalInMs * 1.2)
+ - (int) ($this->_deltaBackoffIntervalInMs * 0.8)
+ );
+ $incrementDelta *= $boundedRandDelta;
+
+ // Enforce max / min backoffs
+ return min(
+ $this->_resolvedMinBackoff + $incrementDelta,
+ $this->_resolvedMaxBackoff
+ );
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/HeadersFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/HeadersFilter.php
new file mode 100644
index 0000000..fe7e641
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/HeadersFilter.php
@@ -0,0 +1,93 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Filters;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\IServiceFilter;
+
+/**
+ * Adds all passed headers to the HTTP request headers.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Filters
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class HeadersFilter implements IServiceFilter
+{
+ /**
+ * @var array
+ */
+ private $_headers;
+
+ /**
+ * Constructor
+ *
+ * @param array $headers static headers to be added.
+ *
+ * @return HeadersFilter
+ */
+ public function __construct($headers)
+ {
+ $this->_headers = $headers;
+ }
+
+ /**
+ * Adds static header(s) to the HTTP request headers
+ *
+ * @param HttpClient $request HTTP channel object.
+ *
+ * @return \HTTP_Request2
+ */
+ public function handleRequest($request)
+ {
+ foreach ($this->_headers as $key => $value) {
+ $headers = $request->getHeaders();
+ if (!array_key_exists($key, $headers)) {
+ $request->setHeader($key, $value);
+ }
+ }
+
+ return $request;
+ }
+
+ /**
+ * Does nothing with the response.
+ *
+ * @param HttpClient $request HTTP channel object.
+ * @param \HTTP_Request2_Response $response HTTP response object.
+ *
+ * @return \HTTP_Request2_Response
+ */
+ public function handleResponse($request, $response)
+ {
+ // Do nothing with the response.
+ return $response;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/RetryPolicy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/RetryPolicy.php
new file mode 100644
index 0000000..f9688f9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/RetryPolicy.php
@@ -0,0 +1,66 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Filters;
+
+/**
+ * The retry policy abstract class.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Filters
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+abstract class RetryPolicy
+{
+ const DEFAULT_CLIENT_BACKOFF = 30000;
+ const DEFAULT_CLIENT_RETRY_COUNT = 3;
+ const DEFAULT_MAX_BACKOFF = 90000;
+ const DEFAULT_MIN_BACKOFF = 300;
+
+ /**
+ * Indicates if there should be a retry or not.
+ *
+ * @param integer $retryCount The retry count.
+ * @param \HTTP_Request2_Response $response The HTTP response object.
+ *
+ * @return boolean
+ */
+ public abstract function shouldRetry($retryCount, $response);
+
+ /**
+ * Calculates the backoff for the retry policy.
+ *
+ * @param integer $retryCount The retry count.
+ * @param \HTTP_Request2_Response $response The HTTP response object.
+ *
+ * @return integer
+ */
+ public abstract function calculateBackoff($retryCount, $response);
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/RetryPolicyFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/RetryPolicyFilter.php
new file mode 100644
index 0000000..dd4987c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/RetryPolicyFilter.php
@@ -0,0 +1,99 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Filters;
+use WindowsAzure\Common\Internal\IServiceFilter;
+
+/**
+ * Short description
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Filters
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class RetryPolicyFilter implements IServiceFilter
+{
+ /**
+ * @var RetryPolicy
+ */
+ private $_retryPolicy;
+
+ /**
+ * Initializes new object from RetryPolicyFilter.
+ *
+ * @param RetryPolicy $retryPolicy The retry policy object.
+ */
+ public function __construct($retryPolicy)
+ {
+ $this->_retryPolicy = $retryPolicy;
+ }
+
+ /**
+ * Handles the request before sending.
+ *
+ * @param \HTTP_Request2 $request The HTTP request.
+ *
+ * @return \HTTP_Request2
+ */
+ public function handleRequest($request)
+ {
+ return $request;
+ }
+
+ /**
+ * Handles the response after sending.
+ *
+ * @param \HTTP_Request2 $request The HTTP request.
+ * @param \HTTP_Request2_Response $response The HTTP response.
+ *
+ * @return \HTTP_Request2_Response
+ */
+ public function handleResponse($request, $response)
+ {
+ for ($retryCount = 0;; $retryCount++) {
+ $shouldRetry = $this->_retryPolicy->shouldRetry(
+ $retryCount,
+ $response
+ );
+
+ if (!$shouldRetry) {
+ return $response;
+ }
+
+ // Backoff for some time according to retry policy
+ $backoffTime = $this->_retryPolicy->calculateBackoff(
+ $retryCount,
+ $response
+ );
+ sleep($backoffTime * 0.001);
+ $response = $request->send(array());
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/WrapFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/WrapFilter.php
new file mode 100644
index 0000000..89cf581
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Filters/WrapFilter.php
@@ -0,0 +1,113 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Filters;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\IServiceFilter;
+use WindowsAzure\Common\Internal\Authentication\SharedKeyAuthScheme;
+use WindowsAzure\Common\Internal\Authentication\TableSharedKeyLiteAuthScheme;
+use WindowsAzure\Common\Internal\InvalidArgumentTypeException;
+use WindowsAzure\ServiceBus\Internal\WrapTokenManager;
+
+
+/**
+ * Adds WRAP authentication header to the http request object.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Filters
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class WrapFilter implements IServiceFilter
+{
+ /**
+ * @var WrapTokenManager
+ */
+ private $_wrapTokenManager;
+
+ /**
+ * Creates a WrapFilter with specified WRAP parameters.
+ *
+ * @param string $wrapUri The URI of the WRAP service.
+ * @param string $wrapUsername The user name of the WRAP account.
+ * @param string $wrapPassword The password of the WRAP account.
+ * @param IWrap $wrapRestProxy The WRAP service REST proxy.
+ */
+ public function __construct(
+ $wrapUri,
+ $wrapUsername,
+ $wrapPassword,
+ $wrapRestProxy
+ ) {
+ $this->_wrapTokenManager = new WrapTokenManager(
+ $wrapUri,
+ $wrapUsername,
+ $wrapPassword,
+ $wrapRestProxy
+ );
+ }
+
+ /**
+ * Adds WRAP authentication header to the request headers.
+ *
+ * @param HttpClient $request HTTP channel object.
+ *
+ * @return \HTTP_Request2
+ */
+ public function handleRequest($request)
+ {
+ Validate::notNull($request, 'request');
+ $wrapAccessToken = $this->_wrapTokenManager->getAccessToken(
+ $request->getUrl()
+ );
+
+ $authorization = sprintf(
+ Resources::WRAP_AUTHORIZATION,
+ $wrapAccessToken
+ );
+
+ $request->setHeader(Resources::AUTHENTICATION, $authorization);
+
+ return $request;
+ }
+
+ /**
+ * Returns the original response.
+ *
+ * @param HttpClient $request A HTTP channel object.
+ * @param \HTTP_Request2_Response $response A HTTP response object.
+ *
+ * @return \HTTP_Request2_Response
+ */
+ public function handleResponse($request, $response)
+ {
+ return $response;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/BatchRequest.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/BatchRequest.php
new file mode 100644
index 0000000..6c40caf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/BatchRequest.php
@@ -0,0 +1,162 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Http;
+require_once 'PEAR.php';
+require_once 'Mail/mimePart.php';
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Batch request marshaler
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BatchRequest
+{
+ /**
+ * Http call context list
+ *
+ * @var array
+ */
+ private $_contexts;
+
+ /**
+ * Headers
+ *
+ * @var array
+ */
+ private $_headers;
+
+ /**
+ * Request body
+ *
+ * @var string
+ */
+ private $_body;
+
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->_contexts = array();
+ }
+
+ /**
+ * Append new context to batch request
+ *
+ * @param WindowsAzure\Common\Internal\Http\HttpCallContext $context Http call
+ * context to add to batch request
+ *
+ * @return none
+ */
+ public function appendContext($context)
+ {
+ $this->_contexts[] = $context;
+ }
+
+ /**
+ * Encode contexts
+ *
+ * @return none
+ */
+ public function encode()
+ {
+ $mimeType = Resources::MULTIPART_MIXED_TYPE;
+ $batchGuid = Utilities::getGuid();
+ $batchId = sprintf('batch_%s', $batchGuid);
+ $contentType1 = array('content_type' => "$mimeType");
+ $changeSetGuid = Utilities::getGuid();
+ $changeSetId = sprintf('changeset_%s', $changeSetGuid);
+ $contentType2 = array('content_type' => "$mimeType; boundary=$changeSetId");
+ $options = array(
+ 'encoding' => 'binary',
+ 'content_type' => Resources::HTTP_TYPE
+ );
+
+ // Create changeset MIME part
+ $changeSet = new \Mail_mimePart();
+
+ $i = 1;
+ foreach ($this->_contexts as $context) {
+ $context->addHeader(Resources::CONTENT_ID, $i);
+ $changeSet->addSubpart((string)$context, $options);
+
+ $i++;
+ }
+
+ // Encode the changeset MIME part
+ $changeSetEncoded = $changeSet->encode($changeSetId);
+
+ // Create the batch MIME part
+ $batch = new \Mail_mimePart(Resources::EMPTY_STRING, $contentType1);
+
+ // Add changeset encoded to batch MIME part
+ $batch->addSubpart($changeSetEncoded['body'], $contentType2);
+
+ // Encode batch MIME part
+ $batchEncoded = $batch->encode($batchId);
+
+ $this->_headers = $batchEncoded['headers'];
+ $this->_body = $batchEncoded['body'];
+ }
+
+ /**
+ * Get "Request body"
+ *
+ * @return string
+ */
+ public function getBody()
+ {
+ return $this->_body;
+ }
+
+ /**
+ * Get "Headers"
+ *
+ * @return array
+ */
+ public function getHeaders()
+ {
+ return $this->_headers;
+ }
+
+ /**
+ * Get request contexts
+ *
+ * @return array
+ */
+ public function getContexts()
+ {
+ return $this->_contexts;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/BatchResponse.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/BatchResponse.php
new file mode 100644
index 0000000..cb4360d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/BatchResponse.php
@@ -0,0 +1,125 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Http;
+require_once 'PEAR.php';
+require_once 'Mail/mimeDecode.php';
+require_once 'HTTP/Request2/Response.php';
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\ServiceException;
+
+/**
+ * Batch response parser
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class BatchResponse
+{
+ /**
+ * Http responses list
+ *
+ * @var array
+ */
+ private $_contexts;
+
+ /**
+ * Constructor
+ *
+ * @param string $content Http response
+ * as string
+ *
+ * @param WindowsAzure\Common\Internal\Http\BatchRequest $request Source batch
+ * request object
+ */
+ public function __construct($content, $request = null)
+ {
+ $params['include_bodies'] = true;
+ $params['input'] = $content;
+ $mimeDecoder = new \Mail_mimeDecode($content);
+ $structure = $mimeDecoder->decode($params);
+ $parts = $structure->parts;
+ $this->_contexts = array();
+ $requestContexts = null;
+
+ if ($request != null) {
+ Validate::isA(
+ $request,
+ 'WindowsAzure\Common\Internal\Http\BatchRequest',
+ 'request'
+ );
+ $requestContexts = $request->getContexts();
+ }
+
+ $i = 0;
+ foreach ($parts as $part) {
+ if (!empty($part->body)) {
+ $headerEndPos = strpos($part->body, "\r\n\r\n");
+
+ $header = substr($part->body, 0, $headerEndPos);
+ $body = substr($part->body, $headerEndPos + 4);
+ $headerStrings = explode("\r\n", $header);
+
+ $response = new \HTTP_Request2_Response(array_shift($headerStrings));
+ foreach ($headerStrings as $headerString) {
+ $response->parseHeaderLine($headerString);
+ }
+ $response->appendBody($body);
+
+ $this->_contexts[] = $response;
+
+ if (is_array($requestContexts)) {
+ $expectedCodes = $requestContexts[$i]->getStatusCodes();
+ $statusCode = $response->getStatus();
+
+ if (!in_array($statusCode, $expectedCodes)) {
+ $reason = $response->getReasonPhrase();
+
+ throw new ServiceException($statusCode, $reason, $body);
+ }
+ }
+
+ $i++;
+ }
+ }
+ }
+
+ /**
+ * Get parsed contexts as array
+ *
+ * @return array
+ */
+ public function getContexts()
+ {
+ return $this->_contexts;
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/HttpCallContext.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/HttpCallContext.php
new file mode 100644
index 0000000..7989dc8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/HttpCallContext.php
@@ -0,0 +1,446 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Http;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Http\Url;
+
+/**
+ * Holds basic elements for making HTTP call.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Http
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class HttpCallContext
+{
+ /**
+ * The HTTP method used to make this call.
+ *
+ * @var string
+ */
+ private $_method;
+
+ /**
+ * HTTP request headers.
+ *
+ * @var array
+ */
+ private $_headers;
+
+ /**
+ * The URI query parameters.
+ *
+ * @var array
+ */
+ private $_queryParams;
+
+ /**
+ * The HTTP POST parameters.
+ *
+ * @var array.
+ */
+ private $_postParameters;
+
+ /**
+ * @var string
+ */
+ private $_uri;
+
+ /**
+ * The URI path.
+ *
+ * @var string
+ */
+ private $_path;
+
+ /**
+ * The expected status codes.
+ *
+ * @var array
+ */
+ private $_statusCodes;
+
+ /**
+ * The HTTP request body.
+ *
+ * @var string
+ */
+ private $_body;
+
+ /**
+ * Default constructor.
+ */
+ public function __construct()
+ {
+ $this->_method = null;
+ $this->_body = null;
+ $this->_path = null;
+ $this->_uri = null;
+ $this->_queryParams = array();
+ $this->_postParameters = array();
+ $this->_statusCodes = array();
+ $this->_headers = array();
+ }
+
+ /**
+ * Gets method.
+ *
+ * @return string
+ */
+ public function getMethod()
+ {
+ return $this->_method;
+ }
+
+ /**
+ * Sets method.
+ *
+ * @param string $method The method value.
+ *
+ * @return none
+ */
+ public function setMethod($method)
+ {
+ Validate::isString($method, 'method');
+
+ $this->_method = $method;
+ }
+
+ /**
+ * Gets headers.
+ *
+ * @return array
+ */
+ public function getHeaders()
+ {
+ return $this->_headers;
+ }
+
+ /**
+ * Sets headers.
+ *
+ * Ignores the header if its value is empty.
+ *
+ * @param array $headers The headers value.
+ *
+ * @return none
+ */
+ public function setHeaders($headers)
+ {
+ $this->_headers = array();
+ foreach ($headers as $key => $value) {
+ $this->addHeader($key, $value);
+ }
+ }
+
+ /**
+ * Gets queryParams.
+ *
+ * @return array
+ */
+ public function getQueryParameters()
+ {
+ return $this->_queryParams;
+ }
+
+ /**
+ * Sets queryParams.
+ *
+ * Ignores the query variable if its value is empty.
+ *
+ * @param array $queryParams The queryParams value.
+ *
+ * @return none
+ */
+ public function setQueryParameters($queryParams)
+ {
+ $this->_queryParams = array();
+ foreach ($queryParams as $key => $value) {
+ $this->addQueryParameter($key, $value);
+ }
+ }
+
+ /**
+ * Gets uri.
+ *
+ * @return string
+ */
+ public function getUri()
+ {
+ return $this->_uri;
+ }
+
+ /**
+ * Sets uri.
+ *
+ * @param string $uri The uri value.
+ *
+ * @return none
+ */
+ public function setUri($uri)
+ {
+ Validate::isString($uri, 'uri');
+
+ $this->_uri = $uri;
+ }
+
+ /**
+ * Gets path.
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return $this->_path;
+ }
+
+ /**
+ * Sets path.
+ *
+ * @param string $path The path value.
+ *
+ * @return none
+ */
+ public function setPath($path)
+ {
+ Validate::isString($path, 'path');
+
+ $this->_path = $path;
+ }
+
+ /**
+ * Gets statusCodes.
+ *
+ * @return array
+ */
+ public function getStatusCodes()
+ {
+ return $this->_statusCodes;
+ }
+
+ /**
+ * Sets statusCodes.
+ *
+ * @param array $statusCodes The statusCodes value.
+ *
+ * @return none
+ */
+ public function setStatusCodes($statusCodes)
+ {
+ $this->_statusCodes = array();
+ foreach ($statusCodes as $value) {
+ $this->addStatusCode($value);
+ }
+ }
+
+ /**
+ * Gets body.
+ *
+ * @return string
+ */
+ public function getBody()
+ {
+ return $this->_body;
+ }
+
+ /**
+ * Sets body.
+ *
+ * @param string $body The body value.
+ *
+ * @return none
+ */
+ public function setBody($body)
+ {
+ Validate::isString($body, 'body');
+
+ $this->_body = $body;
+ }
+
+ /**
+ * Adds or sets header pair.
+ *
+ * @param string $name The HTTP header name.
+ * @param string $value The HTTP header value.
+ *
+ * @return none
+ */
+ public function addHeader($name, $value)
+ {
+ Validate::isString($name, 'name');
+ Validate::isString($value, 'value');
+
+ $this->_headers[$name] = $value;
+ }
+
+ /**
+ * Adds or sets header pair.
+ *
+ * Ignores header if it's value satisfies empty().
+ *
+ * @param string $name The HTTP header name.
+ * @param string $value The HTTP header value.
+ *
+ * @return none
+ */
+ public function addOptionalHeader($name, $value)
+ {
+ Validate::isString($name, 'name');
+ Validate::isString($value, 'value');
+
+ if (!empty($value)) {
+ $this->_headers[$name] = $value;
+ }
+ }
+
+ /**
+ * Removes header from the HTTP request headers.
+ *
+ * @param string $name The HTTP header name.
+ *
+ * @return none
+ */
+ public function removeHeader($name)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ unset($this->_headers[$name]);
+ }
+
+ /**
+ * Adds or sets query parameter pair.
+ *
+ * @param string $name The URI query parameter name.
+ * @param string $value The URI query parameter value.
+ *
+ * @return none
+ */
+ public function addQueryParameter($name, $value)
+ {
+ Validate::isString($name, 'name');
+ Validate::isString($value, 'value');
+
+ $this->_queryParams[$name] = $value;
+ }
+
+ /**
+ * Gets HTTP POST parameters.
+ *
+ * @return array
+ */
+ public function getPostParameters()
+ {
+ return $this->_postParameters;
+ }
+
+ /**
+ * Sets HTTP POST parameters.
+ *
+ * @param array $postParameters The HTTP POST parameters.
+ *
+ * @return none
+ */
+ public function setPostParameters($postParameters)
+ {
+ Validate::isArray($postParameters, 'postParameters');
+ $this->_postParameters = $postParameters;
+ }
+
+ /**
+ * Adds or sets query parameter pair.
+ *
+ * Ignores query parameter if it's value satisfies empty().
+ *
+ * @param string $name The URI query parameter name.
+ * @param string $value The URI query parameter value.
+ *
+ * @return none
+ */
+ public function addOptionalQueryParameter($name, $value)
+ {
+ Validate::isString($name, 'name');
+ Validate::isString($value, 'value');
+
+ if (!empty($value)) {
+ $this->_queryParams[$name] = $value;
+ }
+ }
+
+ /**
+ * Adds status code to the expected status codes.
+ *
+ * @param integer $statusCode The expected status code.
+ *
+ * @return none
+ */
+ public function addStatusCode($statusCode)
+ {
+ Validate::isInteger($statusCode, 'statusCode');
+
+ $this->_statusCodes[] = $statusCode;
+ }
+
+ /**
+ * Gets header value.
+ *
+ * @param string $name The header name.
+ *
+ * @return mix
+ */
+ public function getHeader($name)
+ {
+ return Utilities::tryGetValue($this->_headers, $name);
+ }
+
+ /**
+ * Converts the context object to string.
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ $headers = Resources::EMPTY_STRING;
+ $uri = new Url($this->_uri);
+ $uri = $uri->getUrl();
+
+ foreach ($this->_headers as $key => $value) {
+ $headers .= "$key: $value\n";
+ }
+
+ $str = "$this->_method $uri$this->_path HTTP/1.1\n$headers\n";
+ $str .= "$this->_body";
+
+ return $str;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/HttpClient.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/HttpClient.php
new file mode 100644
index 0000000..f773ae2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/HttpClient.php
@@ -0,0 +1,387 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Http;
+use WindowsAzure\Common\Internal\Http\IHttpClient;
+use WindowsAzure\Common\Internal\IServiceFilter;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\ServiceException;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Http\IUrl;
+
+require_once 'HTTP/Request2.php';
+
+/**
+ * HTTP client which sends and receives HTTP requests and responses.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Http
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class HttpClient implements IHttpClient
+{
+ /**
+ * @var \HTTP_Request2
+ */
+ private $_request;
+
+ /**
+ * @var WindowsAzure\Common\Internal\Http\IUrl
+ */
+ private $_requestUrl;
+
+ /**
+ * Holds the latest response object
+ *
+ * @var \HTTP_Request2_Response
+ */
+ private $_response;
+
+ /**
+ * Holds expected status code after sending the request.
+ *
+ * @var array
+ */
+ private $_expectedStatusCodes;
+
+ /**
+ * Initializes new HttpClient object.
+ *
+ * @param string $certificatePath The certificate path.
+ * @param string $certificateAuthorityPath The path of the certificate authority.
+ *
+ * @return WindowsAzure\Common\Internal\Http\HttpClient
+ */
+ function __construct(
+ $certificatePath = Resources::EMPTY_STRING,
+ $certificateAuthorityPath = Resources::EMPTY_STRING
+ ) {
+ $config = array(
+ Resources::USE_BRACKETS => true,
+ Resources::SSL_VERIFY_PEER => false,
+ Resources::SSL_VERIFY_HOST => false
+ );
+
+ if (!empty($certificatePath)) {
+ $config[Resources::SSL_LOCAL_CERT] = $certificatePath;
+ $config[Resources::SSL_VERIFY_HOST] = true;
+ }
+
+ if (!empty($certificateAuthorityPath)) {
+ $config[Resources::SSL_CAFILE] = $certificateAuthorityPath;
+ $config[Resources::SSL_VERIFY_PEER] = true;
+ }
+
+ $this->_request = new \HTTP_Request2(
+ null, null, $config
+ );
+
+ $this->setHeader('user-agent', null);
+
+ $this->_requestUrl = null;
+ $this->_response = null;
+ $this->_expectedStatusCodes = array();
+ }
+
+ /**
+ * Makes deep copy from the current object.
+ *
+ * @return WindowsAzure\Common\Internal\Http\HttpClient
+ */
+ public function __clone()
+ {
+ $this->_request = clone $this->_request;
+
+ if (!is_null($this->_requestUrl)) {
+ $this->_requestUrl = clone $this->_requestUrl;
+ }
+ }
+
+ /**
+ * Sets the request url.
+ *
+ * @param WindowsAzure\Common\Internal\Http\IUrl $url request url.
+ *
+ * @return none.
+ */
+ public function setUrl($url)
+ {
+ $this->_requestUrl = $url;
+ }
+
+ /**
+ * Gets request url. Note that you must check if the returned object is null or
+ * not.
+ *
+ * @return WindowsAzure\Common\Internal\Http\IUrl
+ */
+ public function getUrl()
+ {
+ return $this->_requestUrl;
+ }
+
+ /**
+ * Sets request's HTTP method. You can use \HTTP_Request2 constants like
+ * Resources::HTTP_GET or strings like 'GET'.
+ *
+ * @param string $method request's HTTP method.
+ *
+ * @return none
+ */
+ public function setMethod($method)
+ {
+ $this->_request->setMethod($method);
+ }
+
+ /**
+ * Gets request's HTTP method.
+ *
+ * @return string
+ */
+ public function getMethod()
+ {
+ return $this->_request->getMethod();
+ }
+
+ /**
+ * Gets request's headers. The returned array key (header names) are all in
+ * lower case even if they were set having some upper letters.
+ *
+ * @return array
+ */
+ public function getHeaders()
+ {
+ return $this->_request->getHeaders();
+ }
+
+ /**
+ * Sets a an existing request header to value or creates a new one if the $header
+ * doesn't exist.
+ *
+ * @param string $header header name.
+ * @param string $value header value.
+ * @param bool $replace whether to replace previous header with the same name
+ * or append to its value (comma separated)
+ *
+ * @return none
+ */
+ public function setHeader($header, $value, $replace = false)
+ {
+ Validate::isString($value, 'value');
+
+ $this->_request->setHeader($header, $value, $replace);
+ }
+
+ /**
+ * Sets request headers using array
+ *
+ * @param array $headers headers key-value array
+ *
+ * @return none
+ */
+ public function setHeaders($headers)
+ {
+ foreach ($headers as $key => $value) {
+ $this->setHeader($key, $value);
+ }
+ }
+
+ /**
+ * Sets HTTP POST parameters.
+ *
+ * @param array $postParameters The HTTP POST parameters.
+ *
+ * @return none
+ */
+ public function setPostParameters($postParameters)
+ {
+ $this->_request->addPostParameter($postParameters);
+ }
+
+ /**
+ * Processes the reuqest through HTTP pipeline with passed $filters,
+ * sends HTTP request to the wire and process the response in the HTTP pipeline.
+ *
+ * @param array $filters HTTP filters which will be applied to the request before
+ * send and then applied to the response.
+ * @param IUrl $url Request url.
+ *
+ * @throws WindowsAzure\Common\ServiceException
+ *
+ * @return string The response body
+ */
+ public function send($filters, $url = null)
+ {
+ if (isset($url)) {
+ $this->setUrl($url);
+ $this->_request->setUrl($this->_requestUrl->getUrl());
+ }
+
+ $contentLength = Resources::EMPTY_STRING;
+ if ( strtoupper($this->getMethod()) != Resources::HTTP_GET
+ && strtoupper($this->getMethod()) != Resources::HTTP_DELETE
+ && strtoupper($this->getMethod()) != Resources::HTTP_HEAD
+ ) {
+ $contentLength = 0;
+
+ if (!is_null($this->getBody())) {
+ $contentLength = strlen($this->getBody());
+ }
+ $this->_request->setHeader(Resources::CONTENT_LENGTH, $contentLength);
+ }
+
+ foreach ($filters as $filter) {
+ $this->_request = $filter->handleRequest($this)->_request;
+ }
+
+ $this->_response = $this->_request->send();
+
+ $start = count($filters) - 1;
+ for ($index = $start; $index >= 0; $index--) {
+ $this->_response = $filters[$index]->handleResponse(
+ $this, $this->_response
+ );
+ }
+
+ self::throwIfError(
+ $this->_response->getStatus(),
+ $this->_response->getReasonPhrase(),
+ $this->_response->getBody(),
+ $this->_expectedStatusCodes
+ );
+
+ return $this->_response->getBody();
+ }
+
+ /**
+ * Sets successful status code
+ *
+ * @param array|string $statusCodes successful status code.
+ *
+ * @return none
+ */
+ public function setExpectedStatusCode($statusCodes)
+ {
+ if (!is_array($statusCodes)) {
+ $this->_expectedStatusCodes[] = $statusCodes;
+ } else {
+ $this->_expectedStatusCodes = $statusCodes;
+ }
+ }
+
+ /**
+ * Gets successful status code
+ *
+ * @return array
+ */
+ public function getSuccessfulStatusCode()
+ {
+ return $this->_expectedStatusCodes;
+ }
+
+ /**
+ * Sets configuration parameter.
+ *
+ * @param string $name The configuration parameter name.
+ * @param mix $value The configuration parameter value.
+ *
+ * @return none
+ */
+ public function setConfig($name, $value = null)
+ {
+ $this->_request->setConfig($name, $value);
+ }
+
+ /**
+ * Gets value for configuration parameter.
+ *
+ * @param string $name configuration parameter name.
+ *
+ * @return string
+ */
+ public function getConfig($name)
+ {
+ return $this->_request->getConfig($name);
+ }
+
+ /**
+ * Sets the request body.
+ *
+ * @param string $body body to use.
+ *
+ * @return none
+ */
+ public function setBody($body)
+ {
+ Validate::isString($body, 'body');
+ $this->_request->setBody($body);
+ }
+
+ /**
+ * Gets the request body.
+ *
+ * @return string
+ */
+ public function getBody()
+ {
+ return $this->_request->getBody();
+ }
+
+ /**
+ * Gets the response object.
+ *
+ * @return \HTTP_Request2_Response
+ */
+ public function getResponse()
+ {
+ return $this->_response;
+ }
+
+ /**
+ * Throws ServiceException if the recieved status code is not expected.
+ *
+ * @param string $actual The received status code.
+ * @param string $reason The reason phrase.
+ * @param string $message The detailed message (if any).
+ * @param array $expected The expected status codes.
+ *
+ * @return none
+ *
+ * @static
+ *
+ * @throws ServiceException
+ */
+ public static function throwIfError($actual, $reason, $message, $expected)
+ {
+ if (!in_array($actual, $expected)) {
+ throw new ServiceException($actual, $reason, $message);
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/IHttpClient.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/IHttpClient.php
new file mode 100644
index 0000000..79cd6b4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/IHttpClient.php
@@ -0,0 +1,204 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Http;
+
+/**
+ * Defines required methods for a HTTP client proxy.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Http
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+interface IHttpClient
+{
+ /**
+ * Sets the request url.
+ *
+ * @param WindowsAzure\Common\Internal\Http\IUrl $url request url.
+ *
+ * @return none.
+ */
+ public function setUrl($url);
+
+ /**
+ * Gets request url.
+ *
+ * @return WindowsAzure\Common\Internal\Http\IUrl
+ */
+ public function getUrl();
+
+ /**
+ * Sets request's HTTP method.
+ *
+ * @param string $method request's HTTP method.
+ *
+ * @return none.
+ */
+ public function setMethod($method);
+
+ /**
+ * Gets request's HTTP method.
+ *
+ * @return string
+ */
+ public function getMethod();
+
+ /**
+ * Gets request's headers
+ *
+ * @return array
+ */
+ public function getHeaders();
+
+ /**
+ * Sets a an existing request header to value or creates a new one if the $header
+ * doesn't exist.
+ *
+ * @param string $header header name.
+ * @param string $value header value.
+ * @param bool $replace whether to replace previous header with the same name
+ * or append to its value (comma separated)
+ *
+ * @return none.
+ */
+ public function setHeader($header, $value, $replace = false);
+
+ /**
+ * Sets request headers using array
+ *
+ * @param array $headers headers key-value array
+ *
+ * @return none.
+ */
+ public function setHeaders($headers);
+
+ /**
+ * Sets HTTP POST parameters.
+ *
+ * @param array $postParameters The HTTP POST parameters.
+ *
+ * @return none
+ */
+ public function setPostParameters($postParameters);
+
+ /**
+ * Processes the reuqest through HTTP pipeline with passed $filters,
+ * sends HTTP request to the wire and process the response in the HTTP pipeline.
+ *
+ * @param array $filters HTTP filters which will be applied to the request before
+ * send and then applied to the response.
+ * @param IUrl $url Request url.
+ *
+ * @return string The response body.
+ */
+ public function send($filters, $url = null);
+
+ /**
+ * Sets successful status code
+ *
+ * @param array|string $statusCodes successful status code.
+ *
+ * @return none.
+ */
+ public function setExpectedStatusCode($statusCodes);
+
+ /**
+ * Gets successful status code
+ *
+ * @return array.
+ */
+ public function getSuccessfulStatusCode();
+
+ /**
+ * Sets a configuration element for the request.
+ *
+ * @param string $name configuration parameter name.
+ * @param mix $value configuration parameter value.
+ *
+ * @return none.
+ */
+ public function setConfig($name, $value = null);
+
+ /**
+ * Gets value for configuration parameter.
+ *
+ * @param string $name configuration parameter name.
+ *
+ * @return string.
+ */
+ public function getConfig($name);
+
+ /**
+ * Sets the request body.
+ *
+ * @param string $body body to use.
+ *
+ * @return none.
+ */
+ public function setBody($body);
+
+ /**
+ * Gets the request body.
+ *
+ * @return string.
+ */
+ public function getBody();
+
+ /**
+ * Makes deep copy from the current object.
+ *
+ * @return WindowsAzure\Common\Internal\Http\HttpClient
+ */
+ public function __clone();
+
+ /**
+ * Gets the response object.
+ *
+ * @return \HTTP_Request2_Response.
+ */
+ public function getResponse();
+
+ /**
+ * Throws ServiceException if the recieved status code is not expected.
+ *
+ * @param string $actual The received status code.
+ * @param string $reason The reason phrase.
+ * @param string $message The detailed message (if any).
+ * @param array $expected The expected status codes.
+ *
+ * @return none
+ *
+ * @static
+ *
+ * @throws ServiceException
+ */
+ public static function throwIfError($actual, $reason, $message, $expected);
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/IUrl.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/IUrl.php
new file mode 100644
index 0000000..8707f4c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/IUrl.php
@@ -0,0 +1,114 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Http;
+
+/**
+ * Defines what are main url functionalities that should be supported
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Http
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+interface IUrl
+{
+ /**
+ * Returns the query portion of the url
+ *
+ * @return string
+ */
+ public function getQuery();
+
+ /**
+ * Returns the query portion of the url in array form
+ *
+ * @return array
+ */
+ public function getQueryVariables();
+
+ /**
+ * Sets a an existing query parameter to value or creates a new one if the $key
+ * doesn't exist.
+ *
+ * @param string $key query parameter name.
+ * @param string $value query value.
+ *
+ * @return none.
+ */
+ public function setQueryVariable($key, $value);
+
+ /**
+ * Gets actual URL string.
+ *
+ * @return string.
+ */
+ public function getUrl();
+
+ /**
+ * Sets url path
+ *
+ * @param string $urlPath url path to set.
+ *
+ * @return none.
+ */
+ public function setUrlPath($urlPath);
+
+ /**
+ * Appends url path
+ *
+ * @param string $urlPath url path to append.
+ *
+ * @return none.
+ */
+ public function appendUrlPath($urlPath);
+
+ /**
+ * Gets actual URL string.
+ *
+ * @return string.
+ */
+ public function __toString();
+
+ /**
+ * Makes deep copy from the current object.
+ *
+ * @return WindowsAzure\Common\Internal\Http\Url
+ */
+ public function __clone();
+
+ /**
+ * Sets the query string to the specified variables in $array
+ *
+ * @param array $array key/value representation of query variables.
+ *
+ * @return none.
+ */
+ public function setQueryVariables($array);
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/Url.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/Url.php
new file mode 100644
index 0000000..8967d35
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Http/Url.php
@@ -0,0 +1,192 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Http;
+require_once 'Net/URL2.php';
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Http\IUrl;
+
+/**
+ * Default IUrl implementation.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Http
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Url implements IUrl
+{
+ /**
+ * @var \Net_URL2
+ */
+ private $_url;
+
+ /**
+ * Sets the url path to '/' if it's empty
+ *
+ * @param string $url the url string
+ *
+ * @return none.
+ */
+ private function _setPathIfEmpty($url)
+ {
+ $path = parse_url($url, PHP_URL_PATH);
+
+ if (empty($path)) {
+ $this->setUrlPath('/');
+ }
+ }
+
+ /**
+ * Constructor
+ *
+ * @param string $url the url to set.
+ *
+ * @return WindowsAzure\Common\Internal\Http\Url
+ */
+ public function __construct($url)
+ {
+ $errorMessage = Resources::INVALID_URL_MSG;
+ Validate::isTrue(filter_var($url, FILTER_VALIDATE_URL), $errorMessage);
+
+ $this->_url = new \Net_URL2($url);
+ $this->_setPathIfEmpty($url);
+ }
+
+ /**
+ * Makes deep copy from the current object.
+ *
+ * @return WindowsAzure\Common\Internal\Http\Url
+ */
+ public function __clone()
+ {
+ $this->_url = clone $this->_url;
+ }
+
+ /**
+ * Returns the query portion of the url
+ *
+ * @return string
+ */
+ public function getQuery()
+ {
+ return $this->_url->getQuery();
+ }
+
+ /**
+ * Returns the query portion of the url in array form
+ *
+ * @return array
+ */
+ public function getQueryVariables()
+ {
+ return $this->_url->getQueryVariables();
+ }
+
+ /**
+ * Sets a an existing query parameter to value or creates a new one if the $key
+ * doesn't exist.
+ *
+ * @param string $key query parameter name.
+ * @param string $value query value.
+ *
+ * @return none
+ */
+ public function setQueryVariable($key, $value)
+ {
+ Validate::isString($key, 'key');
+ Validate::isString($value, 'value');
+
+ $this->_url->setQueryVariable($key, $value);
+ }
+
+ /**
+ * Gets actual URL string.
+ *
+ * @return string.
+ */
+ public function getUrl()
+ {
+ return $this->_url->getURL();
+ }
+
+ /**
+ * Sets url path
+ *
+ * @param string $urlPath url path to set.
+ *
+ * @return none.
+ */
+ public function setUrlPath($urlPath)
+ {
+ Validate::isString($urlPath, 'urlPath');
+
+ $this->_url->setPath($urlPath);
+ }
+
+ /**
+ * Appends url path
+ *
+ * @param string $urlPath url path to append.
+ *
+ * @return none.
+ */
+ public function appendUrlPath($urlPath)
+ {
+ Validate::isString($urlPath, 'urlPath');
+
+ $newUrlPath = parse_url($this->_url, PHP_URL_PATH) . $urlPath;
+ $this->_url->setPath($newUrlPath);
+ }
+
+ /**
+ * Gets actual URL string.
+ *
+ * @return string.
+ */
+ public function __toString()
+ {
+ return $this->_url->getURL();
+ }
+
+ /**
+ * Sets the query string to the specified variables in $array
+ *
+ * @param array $array key/value representation of query variables.
+ *
+ * @return none.
+ */
+ public function setQueryVariables($array)
+ {
+ foreach ($array as $key => $value) {
+ $this->setQueryVariable($key, $value);
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/IServiceFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/IServiceFilter.php
new file mode 100644
index 0000000..4c8b256
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/IServiceFilter.php
@@ -0,0 +1,61 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+
+/**
+ * ServceFilter is called when the sending the request and after receiving the
+ * response.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+interface IServiceFilter
+{
+ /**
+ * Processes HTTP request before send.
+ *
+ * @param mix $request HTTP request object.
+ *
+ * @return mix processed HTTP request object.
+ */
+ public function handleRequest($request);
+
+ /**
+ * Processes HTTP response after send.
+ *
+ * @param mix $request HTTP request object.
+ * @param mix $response HTTP response object.
+ *
+ * @return mix processed HTTP response object.
+ */
+ public function handleResponse($request, $response);
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/InvalidArgumentTypeException.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/InvalidArgumentTypeException.php
new file mode 100644
index 0000000..bcd1cc8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/InvalidArgumentTypeException.php
@@ -0,0 +1,57 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Exception thrown if an argument type does not match with the expected type.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class InvalidArgumentTypeException extends \InvalidArgumentException
+{
+ /**
+ * Constructor.
+ *
+ * @param string $validType The valid type that should be provided by the user.
+ * @param string $name The parameter name.
+ *
+ * @return WindowsAzure\Common\Internal\InvalidArgumentTypeException
+ */
+ public function __construct($validType, $name = null)
+ {
+ parent::__construct(
+ sprintf(Resources::INVALID_PARAM_MSG, $name, $validType)
+ );
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Logger.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Logger.php
new file mode 100644
index 0000000..3858a95
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Logger.php
@@ -0,0 +1,83 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+
+/**
+ * Logger class for debugging purpose.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Logger
+{
+ /**
+ * @var string
+ */
+ private static $_filePath;
+
+ /**
+ * Logs $var to file.
+ *
+ * @param mix $var The data to log.
+ * @param string $tip The help message.
+ *
+ * @static
+ *
+ * @return none
+ */
+ public static function log($var, $tip = Resources::EMPTY_STRING)
+ {
+ if (!empty($tip)) {
+ error_log($tip . "\n", 3, self::$_filePath);
+ }
+
+ if (is_array($var) || is_object($var)) {
+ error_log(print_r($var, true), 3, self::$_filePath);
+ } else {
+ error_log($var . "\n", 3, self::$_filePath);
+ }
+ }
+
+ /**
+ * Sets file path to use.
+ *
+ * @param string $filePath The log file path.
+ *
+ * @static
+ *
+ * @return none
+ */
+ public static function setLogFile($filePath)
+ {
+ self::$_filePath = $filePath;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/MediaServicesSettings.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/MediaServicesSettings.php
new file mode 100644
index 0000000..a7bc656
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/MediaServicesSettings.php
@@ -0,0 +1,268 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Represents the settings used to sign and access a request against the service
+ * management. For more information about service management connection strings check
+ * this page: http://msdn.microsoft.com/en-us/library/windowsazure/gg466228.aspx
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class MediaServicesSettings extends ServiceSettings
+{
+ /**
+ * @var string
+ */
+ private $_accountName;
+
+ /**
+ * @var string
+ */
+ private $_accessKey;
+
+ /**
+ * @var string
+ */
+ private $_endpointUri;
+
+ /**
+ * @var string
+ */
+ private $_oauthEndpointUri;
+
+ /**
+ * Validator for the MediaServicesAccountName setting. It has to be provided.
+ *
+ * @var array
+ */
+ private static $_accountNameSetting;
+
+ /**
+ * Validator for the MediaServicesAccessKey setting. It has to be provided.
+ *
+ * @var array
+ */
+ private static $_accessKeySetting;
+
+ /**
+ * Validator for the MediaServicesEndpoint setting. Must be a valid Uri.
+ *
+ * @var array
+ */
+ private static $_endpointUriSetting;
+
+ /**
+ * Validator for the MediaServicesOAuthEndpoint setting. Must be a valid Uri.
+ *
+ * @var array
+ */
+ private static $_oauthEndpointUriSetting;
+
+ /**
+ * @var boolean
+ */
+ protected static $isInitialized = false;
+
+ /**
+ * Holds the expected setting keys.
+ *
+ * @var array
+ */
+ protected static $validSettingKeys = array();
+
+ /**
+ * Initializes static members of the class.
+ *
+ * @return none
+ */
+ protected static function init()
+ {
+ self::$_endpointUriSetting = self::settingWithFunc(
+ Resources::MEDIA_SERVICES_ENDPOINT_URI_NAME,
+ Validate::getIsValidUri()
+ );
+
+ self::$_oauthEndpointUriSetting = self::settingWithFunc(
+ Resources::MEDIA_SERVICES_OAUTH_ENDPOINT_URI_NAME,
+ Validate::getIsValidUri()
+ );
+
+ self::$_accountNameSetting = self::setting(
+ Resources::MEDIA_SERVICES_ACCOUNT_NAME
+ );
+
+ self::$_accessKeySetting = self::setting(
+ Resources::MEDIA_SERVICES_ACCESS_KEY
+ );
+
+ self::$validSettingKeys[] = Resources::MEDIA_SERVICES_ENDPOINT_URI_NAME;
+ self::$validSettingKeys[] = Resources::MEDIA_SERVICES_OAUTH_ENDPOINT_URI_NAME;
+ self::$validSettingKeys[] = Resources::MEDIA_SERVICES_ACCOUNT_NAME;
+ self::$validSettingKeys[] = Resources::MEDIA_SERVICES_ACCESS_KEY;
+ }
+
+ /**
+ * Creates new media services settings instance.
+ *
+ * @param string $accountName The user provided account name.
+ * @param string $accessKey The user provided primary access key
+ * @param string $endpointUri The service management endpoint uri.
+ * @param string $oauthEndpointUri The OAuth service endpoint uri.
+ */
+ public function __construct(
+ $accountName,
+ $accessKey,
+ $endpointUri = null,
+ $oauthEndpointUri = null)
+ {
+ Validate::notNullOrEmpty($accountName, 'accountName');
+ Validate::notNullOrEmpty($accessKey, 'accountKey');
+ Validate::isString($accountName, 'accountName');
+ Validate::isString($accessKey, 'accountKey');
+
+ if ($endpointUri != null) {
+ Validate::isValidUri($endpointUri);
+ } else {
+ $endpointUri = Resources::MEDIA_SERVICES_URL;
+ }
+
+ if ($oauthEndpointUri != null) {
+ Validate::isValidUri($oauthEndpointUri);
+ } else {
+ $oauthEndpointUri = Resources::MEDIA_SERVICES_OAUTH_URL;
+ }
+
+ $this->_accountName = $accountName;
+ $this->_accessKey = $accessKey;
+ $this->_endpointUri = $endpointUri;
+ $this->_oauthEndpointUri = $oauthEndpointUri;
+ }
+
+ /**
+ * Creates a MediaServicesSettings object from the given connection string.
+ *
+ * @param string $connectionString The media services settings connection string.
+ *
+ * @return MediaServicesSettings
+ */
+ public static function createFromConnectionString($connectionString)
+ {
+ $tokenizedSettings = self::parseAndValidateKeys($connectionString);
+
+ $matchedSpecs = self::matchedSpecification(
+ $tokenizedSettings,
+ self::allRequired(
+ self::$_accountNameSetting,
+ self::$_accessKeySetting
+ ),
+ self::optional(
+ self::$_endpointUriSetting,
+ self::$_oauthEndpointUriSetting
+ )
+ );
+ if ($matchedSpecs) {
+ $endpointUri = Utilities::tryGetValueInsensitive(
+ Resources::MEDIA_SERVICES_ENDPOINT_URI_NAME,
+ $tokenizedSettings,
+ Resources::MEDIA_SERVICES_URL
+ );
+
+ $oauthEndpointUri = Utilities::tryGetValueInsensitive(
+ Resources::MEDIA_SERVICES_OAUTH_ENDPOINT_URI_NAME,
+ $tokenizedSettings,
+ Resources::MEDIA_SERVICES_OAUTH_URL
+ );
+
+ $accountName = Utilities::tryGetValueInsensitive(
+ Resources::MEDIA_SERVICES_ACCOUNT_NAME,
+ $tokenizedSettings
+ );
+
+ $accessKey = Utilities::tryGetValueInsensitive(
+ Resources::MEDIA_SERVICES_ACCESS_KEY,
+ $tokenizedSettings
+ );
+
+ return new MediaServicesSettings(
+ $accountName,
+ $accessKey,
+ $endpointUri,
+ $oauthEndpointUri
+ );
+ }
+
+ self::noMatch($connectionString);
+ }
+
+ /**
+ * Gets media services account name.
+ *
+ * @return string
+ */
+ public function getAccountName()
+ {
+ return $this->_accountName;
+ }
+
+ /**
+ * Gets media services access key.
+ *
+ * @return string
+ */
+ public function getAccessKey()
+ {
+ return $this->_accessKey;
+ }
+
+ /**
+ * Gets media services endpoint uri.
+ *
+ * @return string
+ */
+ public function getEndpointUri()
+ {
+ return $this->_endpointUri;
+ }
+
+ /**
+ * Gets media services OAuth endpoint uri.
+ *
+ * @return string
+ */
+ public function getOAuthEndpointUri()
+ {
+ return $this->_oauthEndpointUri;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/OAuthRestProxy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/OAuthRestProxy.php
new file mode 100644
index 0000000..bbd4eaf
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/OAuthRestProxy.php
@@ -0,0 +1,118 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\ServiceRestProxy;
+use WindowsAzure\Common\Models\OAuthAccessToken;
+use WindowsAzure\Common\Internal\Serialization\JsonSerializer;
+
+/**
+ * OAuth rest proxy.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class OAuthRestProxy extends ServiceRestProxy
+{
+ /**
+ * Initializes new OAuthRestProxy object.
+ *
+ * @param IHttpClient $channel The HTTP client used to send HTTP requests.
+ * @param string $uri The storage account uri.
+ */
+ public function __construct($channel, $uri)
+ {
+ parent::__construct(
+ $channel,
+ $uri,
+ Resources::EMPTY_STRING,
+ new JsonSerializer()
+ );
+ }
+
+
+ /**
+ * Get OAuth access token.
+ *
+ * @param string $grantType OAuth request grant_type field value.
+ * @param string $clientId OAuth request clent_id field value.
+ * @param string $clientSecret OAuth request clent_secret field value.
+ * @param string $scope OAuth request scope field value.
+ *
+ * @return WindowsAzure\Common\Internal\Models\OAuthAccessToken
+ */
+ public function getAccessToken($grantType, $clientId, $clientSecret, $scope)
+ {
+ $method = Resources::HTTP_POST;
+ $headers = array();
+ $queryParams = array();
+ $postParameters = array();
+ $statusCode = Resources::STATUS_OK;
+
+ $postParameters = $this->addPostParameter(
+ $postParameters,
+ Resources::OAUTH_GRANT_TYPE,
+ $grantType
+ );
+
+ $postParameters = $this->addPostParameter(
+ $postParameters,
+ Resources::OAUTH_CLIENT_ID,
+ $clientId
+ );
+
+ $postParameters = $this->addPostParameter(
+ $postParameters,
+ Resources::OAUTH_CLIENT_SECRET,
+ $clientSecret
+ );
+
+ $postParameters = $this->addPostParameter(
+ $postParameters,
+ Resources::OAUTH_SCOPE,
+ $scope
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParameters,
+ Resources::EMPTY_STRING,
+ $statusCode
+ );
+
+ return OAuthAccessToken::create(
+ $this->dataSerializer->unserialize($response->getBody())
+ );
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Resources.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Resources.php
new file mode 100644
index 0000000..2479da9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Resources.php
@@ -0,0 +1,454 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+
+/**
+ * Project resources.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Resources
+{
+ // @codingStandardsIgnoreStart
+
+ // Connection strings
+ const USE_DEVELOPMENT_STORAGE_NAME = 'UseDevelopmentStorage';
+ const DEVELOPMENT_STORAGE_PROXY_URI_NAME = 'DevelopmentStorageProxyUri';
+ const DEFAULT_ENDPOINTS_PROTOCOL_NAME = 'DefaultEndpointsProtocol';
+ const ACCOUNT_NAME_NAME = 'AccountName';
+ const ACCOUNT_KEY_NAME = 'AccountKey';
+ const BLOB_ENDPOINT_NAME = 'BlobEndpoint';
+ const QUEUE_ENDPOINT_NAME = 'QueueEndpoint';
+ const TABLE_ENDPOINT_NAME = 'TableEndpoint';
+ const SHARED_ACCESS_SIGNATURE_NAME = 'SharedAccessSignature';
+ const DEV_STORE_NAME = 'devstoreaccount1';
+ const DEV_STORE_KEY = 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==';
+ const BLOB_BASE_DNS_NAME = 'blob.core.windows.net';
+ const QUEUE_BASE_DNS_NAME = 'queue.core.windows.net';
+ const TABLE_BASE_DNS_NAME = 'table.core.windows.net';
+ const DEV_STORE_CONNECTION_STRING = 'BlobEndpoint=127.0.0.1:10000;QueueEndpoint=127.0.0.1:10001;TableEndpoint=127.0.0.1:10002;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==';
+ const SUBSCRIPTION_ID_NAME = 'SubscriptionID';
+ const CERTIFICATE_PATH_NAME = 'CertificatePath';
+ const SERVICE_MANAGEMENT_ENDPOINT_NAME = 'ServiceManagementEndpoint';
+ const SERVICE_BUS_ENDPOINT_NAME = 'Endpoint';
+ const SHARED_SECRET_ISSUER_NAME = 'SharedSecretIssuer';
+ const SHARED_SECRET_VALUE_NAME = 'SharedSecretValue';
+ const STS_ENDPOINT_NAME = 'StsEndpoint';
+ const MEDIA_SERVICES_ENDPOINT_URI_NAME = 'MediaServicesEndpoint';
+ const MEDIA_SERVICES_ACCOUNT_NAME = 'AccountName';
+ const MEDIA_SERVICES_ACCESS_KEY = 'AccessKey';
+ const MEDIA_SERVICES_OAUTH_ENDPOINT_URI_NAME = 'OAuthEndpoint';
+
+ // Messages
+ const INVALID_TYPE_MSG = 'The provided variable should be of type: ';
+ const INVALID_META_MSG = 'Metadata cannot contain newline characters.';
+ const AZURE_ERROR_MSG = "Fail:\nCode: %s\nValue: %s\ndetails (if any): %s.";
+ const NOT_IMPLEMENTED_MSG = 'This method is not implemented.';
+ const NULL_OR_EMPTY_MSG = "'%s' can't be NULL or empty.";
+ const NULL_MSG = "'%s' can't be NULL.";
+ const INVALID_URL_MSG = 'Provided URL is invalid.';
+ const INVALID_HT_MSG = 'The header type provided is invalid.';
+ const INVALID_EDM_MSG = 'The provided EDM type is invalid.';
+ const INVALID_PROP_MSG = 'One of the provided properties is not an instance of class Property';
+ const INVALID_ENTITY_MSG = 'The provided entity object is invalid.';
+ const INVALID_VERSION_MSG = 'Server does not support any known protocol versions.';
+ const INVALID_BO_TYPE_MSG = 'Batch operation name is not supported or invalid.';
+ const INVALID_BO_PN_MSG = 'Batch operation parameter is not supported.';
+ const INVALID_OC_COUNT_MSG = 'Operations and contexts must be of same size.';
+ const INVALID_EXC_OBJ_MSG = 'Exception object type should be ServiceException.';
+ const NULL_TABLE_KEY_MSG = 'Partition and row keys can\'t be NULL.';
+ const BATCH_ENTITY_DEL_MSG = 'The entity was deleted successfully.';
+ const INVALID_PROP_VAL_MSG = "'%s' property value must satisfy %s.";
+ const INVALID_PARAM_MSG = "The provided variable '%s' should be of type '%s'";
+ const INVALID_BTE_MSG = "The blob block type must exist in %s";
+ const INVALID_BLOB_PAT_MSG = 'The provided access type is invalid.';
+ const INVALID_SVC_PROP_MSG = 'The provided service properties is invalid.';
+ const UNKNOWN_SRILZER_MSG = 'The provided serializer type is unknown';
+ const INVALID_CREATE_SERVICE_OPTIONS_MSG = 'Must provide valid location or affinity group.';
+ const INVALID_UPDATE_SERVICE_OPTIONS_MSG = 'Must provide either description or label.';
+ const INVALID_CONFIG_MSG = 'Config object must be of type Configuration';
+ const INVALID_ACH_MSG = 'The provided access condition header is invalid';
+ const INVALID_RECEIVE_MODE_MSG = 'The receive message option is in neither RECEIVE_AND_DELETE nor PEEK_LOCK mode.';
+ const INVALID_CONFIG_URI = "The provided URI '%s' is invalid. It has to pass the check 'filter_var(, FILTER_VALIDATE_URL)'.";
+ const INVALID_CONFIG_VALUE = "The provided config value '%s' does not belong to the valid values subset:\n%s";
+ const INVALID_ACCOUNT_KEY_FORMAT = "The provided account key '%s' is not a valid base64 string. It has to pass the check 'base64_decode(, true)'.";
+ const MISSING_CONNECTION_STRING_SETTINGS = "The provided connection string '%s' does not have complete configuration settings.";
+ const INVALID_CONNECTION_STRING_SETTING_KEY = "The setting key '%s' is not found in the expected configuration setting keys:\n%s";
+ const INVALID_CERTIFICATE_PATH = "The provided certificate path '%s' is invalid.";
+ const INSTANCE_TYPE_VALIDATION_MSG = 'The type of %s is %s but is expected to be %s.';
+ const MISSING_CONNECTION_STRING_CHAR = "Missing %s character";
+ const ERROR_PARSING_STRING = "'%s' at position %d.";
+ const INVALID_CONNECTION_STRING = "Argument '%s' is not a valid connection string: '%s'";
+ const ERROR_CONNECTION_STRING_MISSING_KEY = 'Missing key name';
+ const ERROR_CONNECTION_STRING_EMPTY_KEY = 'Empty key name';
+ const ERROR_CONNECTION_STRING_MISSING_CHARACTER = "Missing %s character";
+ const ERROR_EMPTY_SETTINGS = 'No keys were found in the connection string';
+ const MISSING_LOCK_LOCATION_MSG = 'The lock location of the brokered message is missing.';
+ const INVALID_SLOT = "The provided deployment slot '%s' is not valid. Only 'staging' and 'production' are accepted.";
+ const INVALID_DEPLOYMENT_LOCATOR_MSG = 'A slot or deployment name must be provided.';
+ const INVALID_CHANGE_MODE_MSG = "The change mode must be 'Auto' or 'Manual'. Use Mode class constants for that purpose.";
+ const INVALID_DEPLOYMENT_STATUS_MSG = "The change mode must be 'Running' or 'Suspended'. Use DeploymentStatus class constants for that purpose.";
+ const ERROR_OAUTH_GET_ACCESS_TOKEN = 'Unable to get oauth access token for endpoint \'%s\', account name \'%s\'';
+ const ERROR_OAUTH_SERVICE_MISSING = 'OAuth service missing for account name \'%s\'';
+ const ERROR_METHOD_NOT_FOUND = 'Method \'%s\' not found in object class \'%s\'';
+ const ERROR_INVALID_DATE_STRING = 'Parameter \'%s\' is not a date formatted string \'%s\'';
+
+ // HTTP Headers
+ const X_MS_HEADER_PREFIX = 'x-ms-';
+ const X_MS_META_HEADER_PREFIX = 'x-ms-meta-';
+ const X_MS_APPROXIMATE_MESSAGES_COUNT = 'x-ms-approximate-messages-count';
+ const X_MS_POPRECEIPT = 'x-ms-popreceipt';
+ const X_MS_TIME_NEXT_VISIBLE = 'x-ms-time-next-visible';
+ const X_MS_BLOB_PUBLIC_ACCESS = 'x-ms-blob-public-access';
+ const X_MS_VERSION = 'x-ms-version';
+ const X_MS_DATE = 'x-ms-date';
+ const X_MS_BLOB_SEQUENCE_NUMBER = 'x-ms-blob-sequence-number';
+ const X_MS_BLOB_SEQUENCE_NUMBER_ACTION = 'x-ms-sequence-number-action';
+ const X_MS_BLOB_TYPE = 'x-ms-blob-type';
+ const X_MS_BLOB_CONTENT_TYPE = 'x-ms-blob-content-type';
+ const X_MS_BLOB_CONTENT_ENCODING = 'x-ms-blob-content-encoding';
+ const X_MS_BLOB_CONTENT_LANGUAGE = 'x-ms-blob-content-language';
+ const X_MS_BLOB_CONTENT_MD5 = 'x-ms-blob-content-md5';
+ const X_MS_BLOB_CACHE_CONTROL = 'x-ms-blob-cache-control';
+ const X_MS_BLOB_CONTENT_LENGTH = 'x-ms-blob-content-length';
+ const X_MS_COPY_SOURCE = 'x-ms-copy-source';
+ const X_MS_RANGE = 'x-ms-range';
+ const X_MS_RANGE_GET_CONTENT_MD5 = 'x-ms-range-get-content-md5';
+ const X_MS_LEASE_ID = 'x-ms-lease-id';
+ const X_MS_LEASE_TIME = 'x-ms-lease-time';
+ const X_MS_LEASE_STATUS = 'x-ms-lease-status';
+ const X_MS_LEASE_ACTION = 'x-ms-lease-action';
+ const X_MS_DELETE_SNAPSHOTS = 'x-ms-delete-snapshots';
+ const X_MS_PAGE_WRITE = 'x-ms-page-write';
+ const X_MS_SNAPSHOT = 'x-ms-snapshot';
+ const X_MS_SOURCE_IF_MODIFIED_SINCE = 'x-ms-source-if-modified-since';
+ const X_MS_SOURCE_IF_UNMODIFIED_SINCE = 'x-ms-source-if-unmodified-since';
+ const X_MS_SOURCE_IF_MATCH = 'x-ms-source-if-match';
+ const X_MS_SOURCE_IF_NONE_MATCH = 'x-ms-source-if-none-match';
+ const X_MS_SOURCE_LEASE_ID = 'x-ms-source-lease-id';
+ const X_MS_CONTINUATION_NEXTTABLENAME = 'x-ms-continuation-nexttablename';
+ const X_MS_CONTINUATION_NEXTPARTITIONKEY = 'x-ms-continuation-nextpartitionkey';
+ const X_MS_CONTINUATION_NEXTROWKEY = 'x-ms-continuation-nextrowkey';
+ const X_MS_REQUEST_ID = 'x-ms-request-id';
+ const ETAG = 'etag';
+ const LAST_MODIFIED = 'last-modified';
+ const DATE = 'date';
+ const AUTHENTICATION = 'authorization';
+ const WRAP_AUTHORIZATION = 'WRAP access_token="%s"';
+ const CONTENT_ENCODING = 'content-encoding';
+ const CONTENT_LANGUAGE = 'content-language';
+ const CONTENT_LENGTH = 'content-length';
+ const CONTENT_LENGTH_NO_SPACE = 'contentlength';
+ const CONTENT_MD5 = 'content-md5';
+ const CONTENT_TYPE = 'content-type';
+ const CONTENT_ID = 'content-id';
+ const CONTENT_RANGE = 'content-range';
+ const CACHE_CONTROL = 'cache-control';
+ const IF_MODIFIED_SINCE = 'if-modified-since';
+ const IF_MATCH = 'if-match';
+ const IF_NONE_MATCH = 'if-none-match';
+ const IF_UNMODIFIED_SINCE = 'if-unmodified-since';
+ const RANGE = 'range';
+ const DATA_SERVICE_VERSION = 'dataserviceversion';
+ const MAX_DATA_SERVICE_VERSION = 'maxdataserviceversion';
+ const ACCEPT_HEADER = 'accept';
+ const ACCEPT_CHARSET = 'accept-charset';
+ const USER_AGENT = 'User-Agent';
+
+ // Type
+ const QUEUE_TYPE_NAME = 'IQueue';
+ const BLOB_TYPE_NAME = 'IBlob';
+ const TABLE_TYPE_NAME = 'ITable';
+ const SERVICE_MANAGEMENT_TYPE_NAME = 'IServiceManagement';
+ const SERVICE_BUS_TYPE_NAME = 'IServiceBus';
+ const WRAP_TYPE_NAME = 'IWrap';
+
+ // WRAP
+ const WRAP_ACCESS_TOKEN = 'wrap_access_token';
+ const WRAP_ACCESS_TOKEN_EXPIRES_IN = 'wrap_access_token_expires_in';
+ const WRAP_NAME = 'wrap_name';
+ const WRAP_PASSWORD = 'wrap_password';
+ const WRAP_SCOPE = 'wrap_scope';
+
+ // OAuth
+ const OAUTH_GRANT_TYPE = 'grant_type';
+ const OAUTH_CLIENT_ID = 'client_id';
+ const OAUTH_CLIENT_SECRET = 'client_secret';
+ const OAUTH_SCOPE = 'scope';
+ const OAUTH_GT_CLIENT_CREDENTIALS = 'client_credentials';
+ const OAUTH_ACCESS_TOKEN = 'access_token';
+ const OAUTH_EXPIRES_IN = 'expires_in';
+ const OAUTH_ACCESS_TOKEN_PREFIX = 'Bearer ';
+
+ // HTTP Methods
+ const HTTP_GET = 'GET';
+ const HTTP_PUT = 'PUT';
+ const HTTP_POST = 'POST';
+ const HTTP_HEAD = 'HEAD';
+ const HTTP_DELETE = 'DELETE';
+ const HTTP_MERGE = 'MERGE';
+
+ // Misc
+ const EMPTY_STRING = '';
+ const SEPARATOR = ',';
+ const AZURE_DATE_FORMAT = 'D, d M Y H:i:s T';
+ const TIMESTAMP_FORMAT = 'Y-m-d H:i:s';
+ const EMULATED = 'EMULATED';
+ const EMULATOR_BLOB_URI = '127.0.0.1:10000';
+ const EMULATOR_QUEUE_URI = '127.0.0.1:10001';
+ const EMULATOR_TABLE_URI = '127.0.0.1:10002';
+ const ASTERISK = '*';
+ const SERVICE_MANAGEMENT_URL = 'https://management.core.windows.net';
+ const HTTP_SCHEME = 'http';
+ const HTTPS_SCHEME = 'https';
+ const SETTING_NAME = 'SettingName';
+ const SETTING_CONSTRAINT = 'SettingConstraint';
+ const DEV_STORE_URI = 'http://127.0.0.1';
+ const SERVICE_URI_FORMAT = "%s://%s.%s";
+ const WRAP_ENDPOINT_URI_FORMAT = "https://%s-sb.accesscontrol.windows.net/WRAPv0.9";
+
+ // Xml Namespaces
+ const WA_XML_NAMESPACE = 'http://schemas.microsoft.com/windowsazure';
+ const ATOM_XML_NAMESPACE = 'http://www.w3.org/2005/Atom';
+ const DS_XML_NAMESPACE = 'http://schemas.microsoft.com/ado/2007/08/dataservices';
+ const DSM_XML_NAMESPACE = 'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata';
+ const XSI_XML_NAMESPACE = 'http://www.w3.org/2001/XMLSchema-instance';
+
+
+ // Header values
+ const SDK_USER_AGENT = 'Azure-SDK-For-PHP/0.4.0';
+ const STORAGE_API_LATEST_VERSION = '2011-08-18';
+ const SM_API_LATEST_VERSION = '2011-10-01';
+ const DATA_SERVICE_VERSION_VALUE = '1.0;NetFx';
+ const MAX_DATA_SERVICE_VERSION_VALUE = '2.0;NetFx';
+ const ACCEPT_HEADER_VALUE = 'application/atom+xml,application/xml';
+ const ATOM_ENTRY_CONTENT_TYPE = 'application/atom+xml;type=entry;charset=utf-8';
+ const ATOM_FEED_CONTENT_TYPE = 'application/atom+xml;type=feed;charset=utf-8';
+ const ACCEPT_CHARSET_VALUE = 'utf-8';
+ const INT32_MAX = 2147483647;
+ const MEDIA_SERVICES_API_LATEST_VERSION = '2.2';
+ const MEDIA_SERVICES_DATA_SERVICE_VERSION_VALUE = '3.0;NetFx';
+ const MEDIA_SERVICES_MAX_DATA_SERVICE_VERSION_VALUE = '3.0;NetFx';
+
+ // Query parameter names
+ const QP_PREFIX = 'Prefix';
+ const QP_MAX_RESULTS = 'MaxResults';
+ const QP_METADATA = 'Metadata';
+ const QP_MARKER = 'Marker';
+ const QP_NEXT_MARKER = 'NextMarker';
+ const QP_COMP = 'comp';
+ const QP_VISIBILITY_TIMEOUT = 'visibilitytimeout';
+ const QP_POPRECEIPT = 'popreceipt';
+ const QP_NUM_OF_MESSAGES = 'numofmessages';
+ const QP_PEEK_ONLY = 'peekonly';
+ const QP_MESSAGE_TTL = 'messagettl';
+ const QP_INCLUDE = 'include';
+ const QP_TIMEOUT = 'timeout';
+ const QP_DELIMITER = 'Delimiter';
+ const QP_REST_TYPE = 'restype';
+ const QP_SNAPSHOT = 'snapshot';
+ const QP_BLOCKID = 'blockid';
+ const QP_BLOCK_LIST_TYPE = 'blocklisttype';
+ const QP_SELECT = '$select';
+ const QP_TOP = '$top';
+ const QP_SKIP = '$skip';
+ const QP_FILTER = '$filter';
+ const QP_NEXT_TABLE_NAME = 'NextTableName';
+ const QP_NEXT_PK = 'NextPartitionKey';
+ const QP_NEXT_RK = 'NextRowKey';
+ const QP_ACTION = 'action';
+ const QP_EMBED_DETAIL = 'embed-detail';
+
+ // Query parameter values
+ const QPV_REGENERATE = 'regenerate';
+ const QPV_CONFIG = 'config';
+ const QPV_STATUS = 'status';
+ const QPV_UPGRADE = 'upgrade';
+ const QPV_WALK_UPGRADE_DOMAIN = 'walkupgradedomain';
+ const QPV_REBOOT = 'reboot';
+ const QPV_REIMAGE = 'reimage';
+ const QPV_ROLLBACK = 'rollback';
+
+ // Request body content types
+ const URL_ENCODED_CONTENT_TYPE = 'application/x-www-form-urlencoded';
+ const XML_CONTENT_TYPE = 'application/xml';
+ const BINARY_FILE_TYPE = 'application/octet-stream';
+ const XML_ATOM_CONTENT_TYPE = 'application/atom+xml';
+ const HTTP_TYPE = 'application/http';
+ const MULTIPART_MIXED_TYPE = 'multipart/mixed';
+
+ // Common used XML tags
+ const XTAG_ATTRIBUTES = '@attributes';
+ const XTAG_NAMESPACE = '@namespace';
+ const XTAG_LABEL = 'Label';
+ const XTAG_NAME = 'Name';
+ const XTAG_DESCRIPTION = 'Description';
+ const XTAG_LOCATION = 'Location';
+ const XTAG_AFFINITY_GROUP = 'AffinityGroup';
+ const XTAG_HOSTED_SERVICES = 'HostedServices';
+ const XTAG_STORAGE_SERVICES = 'StorageServices';
+ const XTAG_STORAGE_SERVICE = 'StorageService';
+ const XTAG_DISPLAY_NAME = 'DisplayName';
+ const XTAG_SERVICE_NAME = 'ServiceName';
+ const XTAG_URL = 'Url';
+ const XTAG_ID = 'ID';
+ const XTAG_STATUS = 'Status';
+ const XTAG_HTTP_STATUS_CODE = 'HttpStatusCode';
+ const XTAG_CODE = 'Code';
+ const XTAG_MESSAGE = 'Message';
+ const XTAG_STORAGE_SERVICE_PROPERTIES = 'StorageServiceProperties';
+ const XTAG_ENDPOINT = 'Endpoint';
+ const XTAG_ENDPOINTS = 'Endpoints';
+ const XTAG_PRIMARY = 'Primary';
+ const XTAG_SECONDARY = 'Secondary';
+ const XTAG_KEY_TYPE = 'KeyType';
+ const XTAG_STORAGE_SERVICE_KEYS = 'StorageServiceKeys';
+ const XTAG_ERROR = 'Error';
+ const XTAG_HOSTED_SERVICE = 'HostedService';
+ const XTAG_HOSTED_SERVICE_PROPERTIES = 'HostedServiceProperties';
+ const XTAG_CREATE_HOSTED_SERVICE = 'CreateHostedService';
+ const XTAG_CREATE_STORAGE_SERVICE_INPUT = 'CreateStorageServiceInput';
+ const XTAG_UPDATE_STORAGE_SERVICE_INPUT = 'UpdateStorageServiceInput';
+ const XTAG_CREATE_AFFINITY_GROUP = 'CreateAffinityGroup';
+ const XTAG_UPDATE_AFFINITY_GROUP = 'UpdateAffinityGroup';
+ const XTAG_UPDATE_HOSTED_SERVICE = 'UpdateHostedService';
+ const XTAG_PACKAGE_URL = 'PackageUrl';
+ const XTAG_CONFIGURATION = 'Configuration';
+ const XTAG_START_DEPLOYMENT = 'StartDeployment';
+ const XTAG_TREAT_WARNINGS_AS_ERROR = 'TreatWarningsAsError';
+ const XTAG_CREATE_DEPLOYMENT = 'CreateDeployment';
+ const XTAG_DEPLOYMENT_SLOT = 'DeploymentSlot';
+ const XTAG_PRIVATE_ID = 'PrivateID';
+ const XTAG_ROLE_INSTANCE_LIST = 'RoleInstanceList';
+ const XTAG_UPGRADE_DOMAIN_COUNT = 'UpgradeDomainCount';
+ const XTAG_ROLE_LIST = 'RoleList';
+ const XTAG_SDK_VERSION = 'SdkVersion';
+ const XTAG_INPUT_ENDPOINT_LIST = 'InputEndpointList';
+ const XTAG_LOCKED = 'Locked';
+ const XTAG_ROLLBACK_ALLOWED = 'RollbackAllowed';
+ const XTAG_UPGRADE_STATUS = 'UpgradeStatus';
+ const XTAG_UPGRADE_TYPE = 'UpgradeType';
+ const XTAG_CURRENT_UPGRADE_DOMAIN_STATE = 'CurrentUpgradeDomainState';
+ const XTAG_CURRENT_UPGRADE_DOMAIN = 'CurrentUpgradeDomain';
+ const XTAG_ROLE_NAME = 'RoleName';
+ const XTAG_INSTANCE_NAME = 'InstanceName';
+ const XTAG_INSTANCE_STATUS = 'InstanceStatus';
+ const XTAG_INSTANCE_UPGRADE_DOMAIN = 'InstanceUpgradeDomain';
+ const XTAG_INSTANCE_FAULT_DOMAIN = 'InstanceFaultDomain';
+ const XTAG_INSTANCE_SIZE = 'InstanceSize';
+ const XTAG_INSTANCE_STATE_DETAILS = 'InstanceStateDetails';
+ const XTAG_INSTANCE_ERROR_CODE = 'InstanceErrorCode';
+ const XTAG_OS_VERSION = 'OsVersion';
+ const XTAG_ROLE_INSTANCE = 'RoleInstance';
+ const XTAG_ROLE = 'Role';
+ const XTAG_INPUT_ENDPOINT = 'InputEndpoint';
+ const XTAG_VIP = 'Vip';
+ const XTAG_PORT = 'Port';
+ const XTAG_DEPLOYMENT = 'Deployment';
+ const XTAG_DEPLOYMENTS = 'Deployments';
+ const XTAG_REGENERATE_KEYS = 'RegenerateKeys';
+ const XTAG_SWAP = 'Swap';
+ const XTAG_PRODUCTION = 'Production';
+ const XTAG_SOURCE_DEPLOYMENT = 'SourceDeployment';
+ const XTAG_CHANGE_CONFIGURATION = 'ChangeConfiguration';
+ const XTAG_MODE = 'Mode';
+ const XTAG_UPDATE_DEPLOYMENT_STATUS = 'UpdateDeploymentStatus';
+ const XTAG_ROLE_TO_UPGRADE = 'RoleToUpgrade';
+ const XTAG_FORCE = 'Force';
+ const XTAG_UPGRADE_DEPLOYMENT = 'UpgradeDeployment';
+ const XTAG_UPGRADE_DOMAIN = 'UpgradeDomain';
+ const XTAG_WALK_UPGRADE_DOMAIN = 'WalkUpgradeDomain';
+ const XTAG_ROLLBACK_UPDATE_OR_UPGRADE = 'RollbackUpdateOrUpgrade';
+ const XTAG_CONTAINER_NAME = 'ContainerName';
+ const XTAG_ACCOUNT_NAME = 'AccountName';
+
+ // Service Bus
+ const LIST_TOPICS_PATH = '$Resources/Topics';
+ const LIST_QUEUES_PATH = '$Resources/Queues';
+ const LIST_RULES_PATH = '%s/subscriptions/%s/rules';
+ const LIST_SUBSCRIPTIONS_PATH = '%s/subscriptions';
+ const RECEIVE_MESSAGE_PATH = '%s/messages/head';
+ const RECEIVE_SUBSCRIPTION_MESSAGE_PATH = '%s/subscriptions/%s/messages/head';
+ const SEND_MESSAGE_PATH = '%s/messages';
+ const RULE_PATH = '%s/subscriptions/%s/rules/%s';
+ const SUBSCRIPTION_PATH = '%s/subscriptions/%s';
+ const DEFAULT_RULE_NAME = '$Default';
+ const UNIQUE_ID_PREFIX = 'urn:uuid:';
+ const SERVICE_BUS_NAMESPACE = 'http://schemas.microsoft.com/netservices/2010/10/servicebus/connect';
+ const BROKER_PROPERTIES = 'BrokerProperties';
+ const XMLNS_ATOM = 'xmlns:atom';
+ const XMLNS = 'xmlns';
+ const ATOM_NAMESPACE = 'http://www.w3.org/2005/Atom';
+
+ // ATOM string
+ const AUTHOR = 'author';
+ const CATEGORY = 'category';
+ const CONTRIBUTOR = 'contributor';
+ const ENTRY = 'entry';
+ const LINK = 'link';
+ const PROPERTIES = 'properties';
+ const ELEMENT = 'element';
+
+ // PHP URL Keys
+ const PHP_URL_SCHEME = 'scheme';
+ const PHP_URL_HOST = 'host';
+ const PHP_URL_PORT = 'port';
+ const PHP_URL_USER = 'user';
+ const PHP_URL_PASS = 'pass';
+ const PHP_URL_PATH = 'path';
+ const PHP_URL_QUERY = 'query';
+ const PHP_URL_FRAGMENT = 'fragment';
+
+ // Status Codes
+ const STATUS_OK = 200;
+ const STATUS_CREATED = 201;
+ const STATUS_ACCEPTED = 202;
+ const STATUS_NO_CONTENT = 204;
+ const STATUS_PARTIAL_CONTENT = 206;
+ const STATUS_MOVED_PERMANENTLY = 301;
+
+ // HTTP_Request2 config parameter names
+ const USE_BRACKETS = 'use_brackets';
+ const SSL_VERIFY_PEER = 'ssl_verify_peer';
+ const SSL_VERIFY_HOST = 'ssl_verify_host';
+ const SSL_LOCAL_CERT = 'ssl_local_cert';
+ const SSL_CAFILE = 'ssl_cafile';
+ const CONNECT_TIMEOUT = 'connect_timeout';
+
+ // Media services
+ const MEDIA_SERVICES_URL = 'https://media.windows.net/API/';
+ const MEDIA_SERVICES_OAUTH_URL = 'https://wamsprodglobal001acs.accesscontrol.windows.net/v2/OAuth2-13';
+ const MEDIA_SERVICES_OAUTH_SCOPE = 'urn:WindowsAzureMediaServices';
+ const MEDIA_SERVICES_INPUT_ASSETS_REL = 'http://schemas.microsoft.com/ado/2007/08/dataservices/related/InputMediaAssets';
+
+
+ // @codingStandardsIgnoreEnd
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/RestProxy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/RestProxy.php
new file mode 100644
index 0000000..8991cc4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/RestProxy.php
@@ -0,0 +1,207 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Http\Url;
+
+/**
+ * Base class for all REST proxies.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class RestProxy
+{
+ /**
+ * @var WindowsAzure\Common\Internal\Http\IHttpClient
+ */
+ private $_channel;
+
+ /**
+ * @var array
+ */
+ private $_filters;
+
+ /**
+ * @var WindowsAzure\Common\Internal\Serialization\ISerializer
+ */
+ protected $dataSerializer;
+
+ /**
+ * @var string
+ */
+ private $_uri;
+
+ /**
+ * Initializes new RestProxy object.
+ *
+ * @param IHttpClient $channel The HTTP client used to send HTTP requests.
+ * @param ISerializer $dataSerializer The data serializer.
+ * @param string $uri The uri of the service.
+ */
+ public function __construct($channel, $dataSerializer, $uri)
+ {
+ $this->_channel = $channel;
+ $this->_filters = array();
+ $this->dataSerializer = $dataSerializer;
+ $this->_uri = $uri;
+ }
+
+ /**
+ * Gets HTTP filters that will process each request.
+ *
+ * @return array
+ */
+ public function getFilters()
+ {
+ return $this->_filters;
+ }
+
+ /**
+ * Gets the Uri of the service.
+ *
+ * @return string
+ */
+ public function getUri()
+ {
+ return $this->_uri;
+ }
+
+ /**
+ * Sets the Uri of the service.
+ *
+ * @param string $uri The URI of the request.
+ *
+ * @return none
+ */
+ public function setUri($uri)
+ {
+ $this->_uri = $uri;
+ }
+
+ /**
+ * Sends HTTP request with the specified HTTP call context.
+ *
+ * @param WindowsAzure\Common\Internal\Http\HttpCallContext $context The HTTP
+ * call context.
+ *
+ * @return \HTTP_Request2_Response
+ */
+ protected function sendContext($context)
+ {
+ $channel = clone $this->_channel;
+ $contextUrl = $context->getUri();
+ $url = new Url(empty($contextUrl) ? $this->_uri : $contextUrl);
+ $headers = $context->getHeaders();
+ $statusCodes = $context->getStatusCodes();
+ $body = $context->getBody();
+ $queryParams = $context->getQueryParameters();
+ $postParameters = $context->getPostParameters();
+ $path = $context->getPath();
+
+ $channel->setMethod($context->getMethod());
+ $channel->setExpectedStatusCode($statusCodes);
+ $channel->setBody($body);
+ $channel->setHeaders($headers);
+
+ if (count($postParameters) > 0) {
+ $channel->setPostParameters($postParameters);
+ }
+ $url->setQueryVariables($queryParams);
+ $url->appendUrlPath($path);
+
+ $channel->send($this->_filters, $url);
+
+ return $channel->getResponse();
+ }
+
+ /**
+ * Adds new filter to new service rest proxy object and returns that object back.
+ *
+ * @param WindowsAzure\Common\Internal\IServiceFilter $filter Filter to add for
+ * the pipeline.
+ *
+ * @return RestProxy.
+ */
+ public function withFilter($filter)
+ {
+ $serviceProxyWithFilter = clone $this;
+ $serviceProxyWithFilter->_filters[] = $filter;
+
+ return $serviceProxyWithFilter;
+ }
+
+ /**
+ * Adds optional query parameter.
+ *
+ * Doesn't add the value if it satisfies empty().
+ *
+ * @param array &$queryParameters The query parameters.
+ * @param string $key The query variable name.
+ * @param string $value The query variable value.
+ *
+ * @return none
+ */
+ protected function addOptionalQueryParam(&$queryParameters, $key, $value)
+ {
+ Validate::isArray($queryParameters, 'queryParameters');
+ Validate::isString($key, 'key');
+ Validate::isString($value, 'value');
+
+ if (!is_null($value) && Resources::EMPTY_STRING !== $value) {
+ $queryParameters[$key] = $value;
+ }
+ }
+
+ /**
+ * Adds optional header.
+ *
+ * Doesn't add the value if it satisfies empty().
+ *
+ * @param array &$headers The HTTP header parameters.
+ * @param string $key The HTTP header name.
+ * @param string $value The HTTP header value.
+ *
+ * @return none
+ */
+ protected function addOptionalHeader(&$headers, $key, $value)
+ {
+ Validate::isArray($headers, 'headers');
+ Validate::isString($key, 'key');
+ Validate::isString($value, 'value');
+
+ if (!is_null($value) && Resources::EMPTY_STRING !== $value) {
+ $headers[$key] = $value;
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Serialization/ISerializer.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Serialization/ISerializer.php
new file mode 100644
index 0000000..e3b79d2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Serialization/ISerializer.php
@@ -0,0 +1,73 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Serialization;
+
+/**
+ * The serialization interface.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Serialization
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+interface ISerializer
+{
+
+ /**
+ * Serialize an object into a XML.
+ *
+ * @param Object $targetObject The target object to be serialized.
+ * @param string $rootName The name of the root.
+ *
+ * @return string
+ */
+ public static function objectSerialize($targetObject, $rootName);
+
+ /**
+ * Serializes given array. The array indices must be string to use them as
+ * as element name.
+ *
+ * @param array $array The object to serialize represented in array.
+ * @param array $properties The used properties in the serialization process.
+ *
+ * @return string
+ */
+ public function serialize($array, $properties = null);
+
+
+ /**
+ * Unserializes given serialized string.
+ *
+ * @param string $serialized The serialized object in string representation.
+ *
+ * @return array
+ */
+ public function unserialize($serialized);
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Serialization/JsonSerializer.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Serialization/JsonSerializer.php
new file mode 100644
index 0000000..60a3d85
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Serialization/JsonSerializer.php
@@ -0,0 +1,96 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Serialization;
+use WindowsAzure\Common\Internal\Validate;
+/**
+ * Perform JSON serialization / deserialization
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Serialization
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class JsonSerializer implements ISerializer
+{
+ /**
+ * Serialize an object with specified root element name.
+ *
+ * @param object $targetObject The target object.
+ * @param string $rootName The name of the root element.
+ *
+ * @return string
+ */
+ public static function objectSerialize($targetObject, $rootName)
+ {
+ Validate::notNull($targetObject, 'targetObject');
+ Validate::isString($rootName, 'rootName');
+
+ $contianer = new \stdClass();
+
+ $contianer->$rootName = $targetObject;
+
+ return json_encode($contianer);
+ }
+
+ /**
+ * Serializes given array. The array indices must be string to use them as
+ * as element name.
+ *
+ * @param array $array The object to serialize represented in array.
+ * @param array $properties The used properties in the serialization process.
+ *
+ * @return string
+ */
+ public function serialize($array, $properties = null)
+ {
+ Validate::isArray($array, 'array');
+
+ return json_encode($array);
+ }
+
+ /**
+ * Unserializes given serialized string to array.
+ *
+ * @param string $serialized The serialized object in string representation.
+ *
+ * @return array
+ */
+ public function unserialize($serialized)
+ {
+ Validate::isString($serialized, 'serialized');
+
+ $json = json_decode($serialized);
+ if ($json && !is_array($json)) {
+ return get_object_vars($json);
+ } else {
+ return $json;
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Serialization/XmlSerializer.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Serialization/XmlSerializer.php
new file mode 100644
index 0000000..bcb338f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Serialization/XmlSerializer.php
@@ -0,0 +1,245 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal\Serialization;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Short description
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Serialization
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class XmlSerializer implements ISerializer
+{
+ const STANDALONE = 'standalone';
+ const ROOT_NAME = 'rootName';
+ const DEFAULT_TAG = 'defaultTag';
+
+ /**
+ * Converts a SimpleXML object to an Array recursively
+ * ensuring all sub-elements are arrays as well.
+ *
+ * @param string $sxml The SimpleXML object.
+ * @param array $arr The array into which to store results.
+ *
+ * @return array
+ */
+ private function _sxml2arr($sxml, $arr = null)
+ {
+ foreach ((array) $sxml as $key => $value) {
+ if (is_object($value) || (is_array($value))) {
+ $arr[$key] = $this->_sxml2arr($value);
+ } else {
+ $arr[$key] = $value;
+ }
+ }
+
+ return $arr;
+ }
+
+ /**
+ * Takes an array and produces XML based on it.
+ *
+ * @param XMLWriter $xmlw XMLWriter object that was previously instanted
+ * and is used for creating the XML.
+ * @param array $data Array to be converted to XML.
+ * @param string $defaultTag Default XML tag to be used if none specified.
+ *
+ * @return void
+ */
+ private function _arr2xml(\XMLWriter $xmlw, $data, $defaultTag = null)
+ {
+ foreach ($data as $key => $value) {
+ if ($key === Resources::XTAG_ATTRIBUTES) {
+ foreach ($value as $attributeName => $attributeValue) {
+ $xmlw->writeAttribute($attributeName, $attributeValue);
+ }
+ } else if (is_array($value)) {
+ if (!is_int($key)) {
+ if ($key != Resources::EMPTY_STRING) {
+ $xmlw->startElement($key);
+ } else {
+ $xmlw->startElement($defaultTag);
+ }
+ }
+
+ $this->_arr2xml($xmlw, $value);
+
+ if (!is_int($key)) {
+ $xmlw->endElement();
+ }
+ } else {
+ $xmlw->writeElement($key, $value);
+ }
+ }
+ }
+
+ /**
+ * Gets the attributes of a specified object if get attributes
+ * method is exposed.
+ *
+ * @param object $targetObject The target object.
+ * @param array $methodArray The array of method of the target object.
+ *
+ * @return mixed
+ */
+ private static function _getInstanceAttributes($targetObject, $methodArray)
+ {
+ foreach ($methodArray as $method) {
+ if ($method->name == 'getAttributes') {
+ $classProperty = $method->invoke($targetObject);
+ return $classProperty;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Serialize an object with specified root element name.
+ *
+ * @param object $targetObject The target object.
+ * @param string $rootName The name of the root element.
+ *
+ * @return string
+ */
+ public static function objectSerialize($targetObject, $rootName)
+ {
+ Validate::notNull($targetObject, 'targetObject');
+ Validate::isString($rootName, 'rootName');
+ $xmlWriter = new \XmlWriter();
+ $xmlWriter->openMemory();
+ $xmlWriter->setIndent(true);
+ $reflectionClass = new \ReflectionClass($targetObject);
+ $methodArray = $reflectionClass->getMethods();
+ $attributes = self::_getInstanceAttributes(
+ $targetObject,
+ $methodArray
+ );
+
+ $xmlWriter->startElement($rootName);
+ if (!is_null($attributes)) {
+ foreach (array_keys($attributes) as $attributeKey) {
+ $xmlWriter->writeAttribute(
+ $attributeKey,
+ $attributes[$attributeKey]
+ );
+ }
+ }
+
+ foreach ($methodArray as $method) {
+ if ((strpos($method->name, 'get') === 0)
+ && $method->isPublic()
+ && ($method->name != 'getAttributes')
+ ) {
+ $variableName = substr($method->name, 3);
+ $variableValue = $method->invoke($targetObject);
+ if (!empty($variableValue)) {
+ if (gettype($variableValue) === 'object') {
+ $xmlWriter->writeRaw(
+ XmlSerializer::objectSerialize(
+ $variableValue, $variableName
+ )
+ );
+ } else {
+ $xmlWriter->writeElement($variableName, $variableValue);
+ }
+ }
+ }
+ }
+ $xmlWriter->endElement();
+ return $xmlWriter->outputMemory(true);
+ }
+
+ /**
+ * Serializes given array. The array indices must be string to use them as
+ * as element name.
+ *
+ * @param array $array The object to serialize represented in array.
+ * @param array $properties The used properties in the serialization process.
+ *
+ * @return string
+ */
+ public function serialize($array, $properties = null)
+ {
+ $xmlVersion = '1.0';
+ $xmlEncoding = 'UTF-8';
+ $standalone = Utilities::tryGetValue($properties, self::STANDALONE);
+ $defaultTag = Utilities::tryGetValue($properties, self::DEFAULT_TAG);
+ $rootName = Utilities::tryGetValue($properties, self::ROOT_NAME);
+ $docNamespace = Utilities::tryGetValue(
+ $array,
+ Resources::XTAG_NAMESPACE,
+ null
+ );
+
+ if (!is_array($array)) {
+ return false;
+ }
+
+ $xmlw = new \XmlWriter();
+ $xmlw->openMemory();
+ $xmlw->setIndent(true);
+ $xmlw->startDocument($xmlVersion, $xmlEncoding, $standalone);
+
+ if (is_null($docNamespace)) {
+ $xmlw->startElement($rootName);
+ } else {
+ foreach ($docNamespace as $uri => $prefix) {
+ $xmlw->startElementNS($prefix, $rootName, $uri);
+ break;
+ }
+ }
+
+ unset($array[Resources::XTAG_NAMESPACE]);
+ self::_arr2xml($xmlw, $array, $defaultTag);
+
+ $xmlw->endElement();
+
+ return $xmlw->outputMemory(true);
+ }
+
+ /**
+ * Unserializes given serialized string.
+ *
+ * @param string $serialized The serialized object in string representation.
+ *
+ * @return array
+ */
+ public function unserialize($serialized)
+ {
+ $sxml = new \SimpleXMLElement($serialized);
+
+ return $this->_sxml2arr($sxml);
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceBusSettings.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceBusSettings.php
new file mode 100644
index 0000000..c23deb8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceBusSettings.php
@@ -0,0 +1,267 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Represents the settings used to sign and access a request against the service
+ * bus.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ServiceBusSettings extends ServiceSettings
+{
+ /**
+ * @var string
+ */
+ private $_serviceBusEndpointUri;
+
+ /**
+ * @var string
+ */
+ private $_wrapEndpointUri;
+
+ /**
+ * @var string
+ */
+ private $_wrapName;
+
+ /**
+ * @var string
+ */
+ private $_wrapPassword;
+
+ /**
+ * @var string
+ */
+ private $_namespace;
+
+ /**
+ * Validator for the SharedSecretValue setting. It has to be provided.
+ *
+ * @var array
+ */
+ private static $_wrapPasswordSetting;
+
+ /**
+ * Validator for the SharedSecretIssuer setting. It has to be provided.
+ *
+ * @var array
+ */
+ private static $_wrapNameSetting;
+
+ /**
+ * Validator for the Endpoint setting. Must be a valid Uri.
+ *
+ * @var array
+ */
+ private static $_serviceBusEndpointSetting;
+
+ /**
+ * Validator for the StsEndpoint setting. Must be a valid Uri.
+ *
+ * @var array
+ */
+ private static $_wrapEndpointUriSetting;
+
+ /**
+ * @var boolean
+ */
+ protected static $isInitialized = false;
+
+ /**
+ * Holds the expected setting keys.
+ *
+ * @var array
+ */
+ protected static $validSettingKeys = array();
+
+ /**
+ * Initializes static members of the class.
+ *
+ * @return none
+ */
+ protected static function init()
+ {
+ self::$_serviceBusEndpointSetting = self::settingWithFunc(
+ Resources::SERVICE_BUS_ENDPOINT_NAME,
+ Validate::getIsValidUri()
+ );
+
+ self::$_wrapNameSetting = self::setting(
+ Resources::SHARED_SECRET_ISSUER_NAME
+ );
+
+ self::$_wrapPasswordSetting = self::setting(
+ Resources::SHARED_SECRET_VALUE_NAME
+ );
+
+ self::$_wrapEndpointUriSetting = self::settingWithFunc(
+ Resources::STS_ENDPOINT_NAME,
+ Validate::getIsValidUri()
+ );
+
+ self::$validSettingKeys[] = Resources::SERVICE_BUS_ENDPOINT_NAME;
+ self::$validSettingKeys[] = Resources::SHARED_SECRET_ISSUER_NAME;
+ self::$validSettingKeys[] = Resources::SHARED_SECRET_VALUE_NAME;
+ self::$validSettingKeys[] = Resources::STS_ENDPOINT_NAME;
+ }
+
+ /**
+ * Creates new Service Bus settings instance.
+ *
+ * @param string $serviceBusEndpoint The Service Bus endpoint uri.
+ * @param string $namespace The service namespace.
+ * @param string $wrapName The wrap name.
+ * @param string $wrapPassword The wrap password.
+ */
+ public function __construct(
+ $serviceBusEndpoint,
+ $namespace,
+ $wrapEndpointUri,
+ $wrapName,
+ $wrapPassword
+ ) {
+ $this->_namespace = $namespace;
+ $this->_serviceBusEndpointUri = $serviceBusEndpoint;
+ $this->_wrapEndpointUri = $wrapEndpointUri;
+ $this->_wrapName = $wrapName;
+ $this->_wrapPassword = $wrapPassword;
+ }
+
+ /**
+ * Creates a ServiceBusSettings object from the given connection string.
+ *
+ * @param string $connectionString The storage settings connection string.
+ *
+ * @return ServiceBusSettings
+ */
+ public static function createFromConnectionString($connectionString)
+ {
+ $tokenizedSettings = self::parseAndValidateKeys($connectionString);
+
+ $matchedSpecs = self::matchedSpecification(
+ $tokenizedSettings,
+ self::allRequired(
+ self::$_serviceBusEndpointSetting,
+ self::$_wrapNameSetting,
+ self::$_wrapPasswordSetting
+ ),
+ self::optional(self::$_wrapEndpointUriSetting)
+ );
+
+ if ($matchedSpecs) {
+ $endpoint = Utilities::tryGetValueInsensitive(
+ Resources::SERVICE_BUS_ENDPOINT_NAME,
+ $tokenizedSettings
+ );
+
+ // Parse the namespace part from the URI
+ $namespace = explode('.', parse_url($endpoint, PHP_URL_HOST));
+ $namespace = $namespace[0];
+ $wrapEndpointUri = Utilities::tryGetValueInsensitive(
+ Resources::STS_ENDPOINT_NAME,
+ $tokenizedSettings,
+ sprintf(Resources::WRAP_ENDPOINT_URI_FORMAT, $namespace)
+ );
+ $issuerName = Utilities::tryGetValueInsensitive(
+ Resources::SHARED_SECRET_ISSUER_NAME,
+ $tokenizedSettings
+ );
+ $issuerValue = Utilities::tryGetValueInsensitive(
+ Resources::SHARED_SECRET_VALUE_NAME,
+ $tokenizedSettings
+ );
+
+ return new ServiceBusSettings(
+ $endpoint,
+ $namespace,
+ $wrapEndpointUri,
+ $issuerName,
+ $issuerValue
+ );
+ }
+
+ self::noMatch($connectionString);
+ }
+
+ /**
+ * Gets the Service Bus endpoint URI.
+ *
+ * @return string
+ */
+ public function getServiceBusEndpointUri()
+ {
+ return $this->_serviceBusEndpointUri;
+ }
+
+ /**
+ * Gets the wrap endpoint URI.
+ *
+ * @return string
+ */
+ public function getWrapEndpointUri()
+ {
+ return $this->_wrapEndpointUri;
+ }
+
+ /**
+ * Gets the wrap name.
+ *
+ * @return string
+ */
+ public function getWrapName()
+ {
+ return $this->_wrapName;
+ }
+
+ /**
+ * Gets the wrap password.
+ *
+ * @return string
+ */
+ public function getWrapPassword()
+ {
+ return $this->_wrapPassword;
+ }
+
+ /**
+ * Gets the namespace name.
+ *
+ * @return string
+ */
+ public function getNamespace()
+ {
+ return $this->_namespace;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceManagementSettings.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceManagementSettings.php
new file mode 100644
index 0000000..0e6f35b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceManagementSettings.php
@@ -0,0 +1,207 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Represents the settings used to sign and access a request against the service
+ * management. For more information about service management connection strings check
+ * this page: http://msdn.microsoft.com/en-us/library/windowsazure/gg466228.aspx
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ServiceManagementSettings extends ServiceSettings
+{
+ /**
+ * @var string
+ */
+ private $_subscriptionId;
+
+ /**
+ * @var string
+ */
+ private $_certificatePath;
+
+ /**
+ * @var string
+ */
+ private $_endpointUri;
+
+ /**
+ * Validator for the ServiceManagementEndpoint setting. Must be a valid Uri.
+ *
+ * @var array
+ */
+ private static $_endpointSetting;
+
+ /**
+ * Validator for the CertificatePath setting. It has to be provided.
+ *
+ * @var array
+ */
+ private static $_certificatePathSetting;
+
+ /**
+ * Validator for the SubscriptionId setting. It has to be provided.
+ *
+ * @var array
+ */
+ private static $_subscriptionIdSetting;
+
+ /**
+ * @var boolean
+ */
+ protected static $isInitialized = false;
+
+ /**
+ * Holds the expected setting keys.
+ *
+ * @var array
+ */
+ protected static $validSettingKeys = array();
+
+ /**
+ * Initializes static members of the class.
+ *
+ * @return none
+ */
+ protected static function init()
+ {
+ self::$_endpointSetting = self::settingWithFunc(
+ Resources::SERVICE_MANAGEMENT_ENDPOINT_NAME,
+ Validate::getIsValidUri()
+ );
+
+ self::$_certificatePathSetting = self::setting(
+ Resources::CERTIFICATE_PATH_NAME
+ );
+
+ self::$_subscriptionIdSetting = self::setting(
+ Resources::SUBSCRIPTION_ID_NAME
+ );
+
+ self::$validSettingKeys[] = Resources::SUBSCRIPTION_ID_NAME;
+ self::$validSettingKeys[] = Resources::CERTIFICATE_PATH_NAME;
+ self::$validSettingKeys[] = Resources::SERVICE_MANAGEMENT_ENDPOINT_NAME;
+ }
+
+ /**
+ * Creates new service management settings instance.
+ *
+ * @param string $subscriptionId The user provided subscription id.
+ * @param string $endpointUri The service management endpoint uri.
+ * @param string $certificatePath The management certificate path.
+ */
+ public function __construct($subscriptionId, $endpointUri, $certificatePath)
+ {
+ $this->_certificatePath = $certificatePath;
+ $this->_endpointUri = $endpointUri;
+ $this->_subscriptionId = $subscriptionId;
+ }
+
+ /**
+ * Creates a ServiceManagementSettings object from the given connection string.
+ *
+ * @param string $connectionString The storage settings connection string.
+ *
+ * @return ServiceManagementSettings
+ */
+ public static function createFromConnectionString($connectionString)
+ {
+ $tokenizedSettings = self::parseAndValidateKeys($connectionString);
+
+ $matchedSpecs = self::matchedSpecification(
+ $tokenizedSettings,
+ self::allRequired(
+ self::$_subscriptionIdSetting,
+ self::$_certificatePathSetting
+ ),
+ self::optional(
+ self::$_endpointSetting
+ )
+ );
+ if ($matchedSpecs) {
+ $endpointUri = Utilities::tryGetValueInsensitive(
+ Resources::SERVICE_MANAGEMENT_ENDPOINT_NAME,
+ $tokenizedSettings,
+ Resources::SERVICE_MANAGEMENT_URL
+ );
+ $subscriptionId = Utilities::tryGetValueInsensitive(
+ Resources::SUBSCRIPTION_ID_NAME,
+ $tokenizedSettings
+ );
+ $certificatePath = Utilities::tryGetValueInsensitive(
+ Resources::CERTIFICATE_PATH_NAME,
+ $tokenizedSettings
+ );
+
+ return new ServiceManagementSettings(
+ $subscriptionId,
+ $endpointUri,
+ $certificatePath
+ );
+ }
+
+ self::noMatch($connectionString);
+ }
+
+ /**
+ * Gets service management endpoint uri.
+ *
+ * @return string
+ */
+ public function getEndpointUri()
+ {
+ return $this->_endpointUri;
+ }
+
+ /**
+ * Gets the subscription id.
+ *
+ * @return string
+ */
+ public function getSubscriptionId()
+ {
+ return $this->_subscriptionId;
+ }
+
+ /**
+ * Gets the certificate path.
+ *
+ * @return string
+ */
+ public function getCertificatePath()
+ {
+ return $this->_certificatePath;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceRestProxy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceRestProxy.php
new file mode 100644
index 0000000..f2e73c1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceRestProxy.php
@@ -0,0 +1,347 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\RestProxy;
+use WindowsAzure\Common\Internal\Http\Url;
+use WindowsAzure\Common\Internal\Http\HttpCallContext;
+
+/**
+ * Base class for all services rest proxies.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ServiceRestProxy extends RestProxy
+{
+ /**
+ * @var string
+ */
+ private $_accountName;
+
+ /**
+ * Initializes new ServiceRestProxy object.
+ *
+ * @param IHttpClient $channel The HTTP client used to send HTTP requests.
+ * @param string $uri The storage account uri.
+ * @param string $accountName The name of the account.
+ * @param ISerializer $dataSerializer The data serializer.
+ */
+ public function __construct($channel, $uri, $accountName, $dataSerializer)
+ {
+ parent::__construct($channel, $dataSerializer, $uri);
+ $this->_accountName = $accountName;
+ }
+
+ /**
+ * Gets the account name.
+ *
+ * @return string
+ */
+ public function getAccountName()
+ {
+ return $this->_accountName;
+ }
+
+ /**
+ * Sends HTTP request with the specified HTTP call context.
+ *
+ * @param WindowsAzure\Common\Internal\Http\HttpCallContext $context The HTTP
+ * call context.
+ *
+ * @return \HTTP_Request2_Response
+ */
+ protected function sendContext($context)
+ {
+ $context->setUri($this->getUri());
+ return parent::sendContext($context);
+ }
+
+ /**
+ * Sends HTTP request with the specified parameters.
+ *
+ * @param string $method HTTP method used in the request
+ * @param array $headers HTTP headers.
+ * @param array $queryParams URL query parameters.
+ * @param array $postParameters The HTTP POST parameters.
+ * @param string $path URL path
+ * @param int $statusCode Expected status code received in the response
+ * @param string $body Request body
+ *
+ * @return \HTTP_Request2_Response
+ */
+ protected function send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParameters,
+ $path,
+ $statusCode,
+ $body = Resources::EMPTY_STRING
+ ) {
+ $context = new HttpCallContext();
+ $context->setBody($body);
+ $context->setHeaders($headers);
+ $context->setMethod($method);
+ $context->setPath($path);
+ $context->setQueryParameters($queryParams);
+ $context->setPostParameters($postParameters);
+
+ if (is_array($statusCode)) {
+ $context->setStatusCodes($statusCode);
+ } else {
+ $context->addStatusCode($statusCode);
+ }
+
+ return $this->sendContext($context);
+ }
+
+
+ /**
+ * Adds optional header to headers if set
+ *
+ * @param array $headers The array of request headers.
+ * @param AccessCondition $accessCondition The access condition object.
+ *
+ * @return array
+ */
+ public function addOptionalAccessConditionHeader($headers, $accessCondition)
+ {
+ if (!is_null($accessCondition)) {
+ $header = $accessCondition->getHeader();
+
+ if ($header != Resources::EMPTY_STRING) {
+ $value = $accessCondition->getValue();
+ if ($value instanceof \DateTime) {
+ $value = gmdate(
+ Resources::AZURE_DATE_FORMAT,
+ $value->getTimestamp()
+ );
+ }
+ $headers[$header] = $value;
+ }
+ }
+
+ return $headers;
+ }
+
+ /**
+ * Adds optional header to headers if set
+ *
+ * @param array $headers The array of request headers.
+ * @param AccessCondition $accessCondition The access condition object.
+ *
+ * @return array
+ */
+ public function addOptionalSourceAccessConditionHeader(
+ $headers,
+ $accessCondition
+ ) {
+ if (!is_null($accessCondition)) {
+ $header = $accessCondition->getHeader();
+ $headerName = null;
+ if (!empty($header)) {
+ switch($header) {
+ case Resources::IF_MATCH:
+ $headerName = Resources::X_MS_SOURCE_IF_MATCH;
+ break;
+
+ case Resources::IF_UNMODIFIED_SINCE:
+ $headerName = Resources::X_MS_SOURCE_IF_UNMODIFIED_SINCE;
+ break;
+
+ case Resources::IF_MODIFIED_SINCE:
+ $headerName = Resources::X_MS_SOURCE_IF_MODIFIED_SINCE;
+ break;
+
+ case Resources::IF_NONE_MATCH:
+ $headerName = Resources::X_MS_SOURCE_IF_NONE_MATCH;
+ break;
+
+ default:
+ throw new \Exception(Resources::INVALID_ACH_MSG);
+ break;
+ }
+ }
+ $value = $accessCondition->getValue();
+ if ($value instanceof \DateTime) {
+ $value = gmdate(
+ Resources::AZURE_DATE_FORMAT,
+ $value->getTimestamp()
+ );
+ }
+
+ $this->addOptionalHeader($headers, $headerName, $value);
+ }
+
+ return $headers;
+ }
+
+ /**
+ * Adds HTTP POST parameter to the specified
+ *
+ * @param array $postParameters An array of HTTP POST parameters.
+ * @param string $key The key of a HTTP POST parameter.
+ * @param string $value the value of a HTTP POST parameter.
+ *
+ * @return array
+ */
+ public function addPostParameter(
+ $postParameters,
+ $key,
+ $value
+ ) {
+ Validate::isArray($postParameters, 'postParameters');
+ $postParameters[$key] = $value;
+ return $postParameters;
+ }
+
+ /**
+ * Groups set of values into one value separated with Resources::SEPARATOR
+ *
+ * @param array $values array of values to be grouped.
+ *
+ * @return string
+ */
+ public function groupQueryValues($values)
+ {
+ Validate::isArray($values, 'values');
+ $joined = Resources::EMPTY_STRING;
+
+ foreach ($values as $value) {
+ if (!is_null($value) && !empty($value)) {
+ $joined .= $value . Resources::SEPARATOR;
+ }
+ }
+
+ return trim($joined, Resources::SEPARATOR);
+ }
+
+ /**
+ * Adds metadata elements to headers array
+ *
+ * @param array $headers HTTP request headers
+ * @param array $metadata user specified metadata
+ *
+ * @return array
+ */
+ protected function addMetadataHeaders($headers, $metadata)
+ {
+ $this->validateMetadata($metadata);
+
+ $metadata = $this->generateMetadataHeaders($metadata);
+ $headers = array_merge($headers, $metadata);
+
+ return $headers;
+ }
+
+ /**
+ * Generates metadata headers by prefixing each element with 'x-ms-meta'.
+ *
+ * @param array $metadata user defined metadata.
+ *
+ * @return array.
+ */
+ public function generateMetadataHeaders($metadata)
+ {
+ $metadataHeaders = array();
+
+ if (is_array($metadata) && !is_null($metadata)) {
+ foreach ($metadata as $key => $value) {
+ $headerName = Resources::X_MS_META_HEADER_PREFIX;
+ if ( strpos($value, "\r") !== false
+ || strpos($value, "\n") !== false
+ ) {
+ throw new \InvalidArgumentException(Resources::INVALID_META_MSG);
+ }
+
+ $headerName .= strtolower($key);
+ $metadataHeaders[$headerName] = $value;
+ }
+ }
+
+ return $metadataHeaders;
+ }
+
+ /**
+ * Gets metadata array by parsing them from given headers.
+ *
+ * @param array $headers HTTP headers containing metadata elements.
+ *
+ * @return array.
+ */
+ public function getMetadataArray($headers)
+ {
+ $metadata = array();
+ foreach ($headers as $key => $value) {
+ $isMetadataHeader = Utilities::startsWith(
+ strtolower($key),
+ Resources::X_MS_META_HEADER_PREFIX
+ );
+
+ if ($isMetadataHeader) {
+ $MetadataName = str_replace(
+ Resources::X_MS_META_HEADER_PREFIX,
+ Resources::EMPTY_STRING,
+ strtolower($key)
+ );
+
+ $metadata[$MetadataName] = $value;
+ }
+ }
+
+ return $metadata;
+ }
+
+ /**
+ * Validates the provided metadata array.
+ *
+ * @param mix $metadata The metadata array.
+ *
+ * @return none
+ */
+ public function validateMetadata($metadata)
+ {
+ if (!is_null($metadata)) {
+ Validate::isArray($metadata, 'metadata');
+ } else {
+ $metadata = array();
+ }
+
+ foreach ($metadata as $key => $value) {
+ Validate::isString($key, 'metadata key');
+ Validate::isString($value, 'metadata value');
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceSettings.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceSettings.php
new file mode 100644
index 0000000..274a0ff
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/ServiceSettings.php
@@ -0,0 +1,287 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Base class for all REST services settings.
+ *
+ * Derived classes must implement the following members:
+ * 1- $isInitialized: A static property that indicates whether the class's static
+ * members have been initialized.
+ * 2- init(): A protected static method that initializes static members.
+ * 3- $validSettingKeys: A static property that contains valid setting keys for this
+ * service.
+ * 4- createFromConnectionString($connectionString): A public static function that
+ * takes a connection string and returns the created settings object.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+abstract class ServiceSettings
+{
+ /**
+ * Throws an exception if the connection string format does not match any of the
+ * available formats.
+ *
+ * @param type $connectionString The invalid formatted connection string.
+ *
+ * @return none
+ *
+ * @throws \RuntimeException
+ */
+ protected static function noMatch($connectionString)
+ {
+ throw new \RuntimeException(
+ sprintf(Resources::MISSING_CONNECTION_STRING_SETTINGS, $connectionString)
+ );
+ }
+
+ /**
+ * Parses the connection string and then validate that the parsed keys belong to
+ * the $validSettingKeys
+ *
+ * @param string $connectionString The user provided connection string.
+ *
+ * @return array The tokenized connection string keys.
+ *
+ * @throws \RuntimeException
+ */
+ protected static function parseAndValidateKeys($connectionString)
+ {
+ // Initialize the static values if they are not initialized yet.
+ if (!static::$isInitialized) {
+ static::init();
+ static::$isInitialized = true;
+ }
+
+ $tokenizedSettings = ConnectionStringParser::parseConnectionString(
+ 'connectionString',
+ $connectionString
+ );
+
+ // Assure that all given keys are valid.
+ foreach ($tokenizedSettings as $key => $value) {
+ if (!Utilities::inArrayInsensitive($key, static::$validSettingKeys) ) {
+ throw new \RuntimeException(
+ sprintf(
+ Resources::INVALID_CONNECTION_STRING_SETTING_KEY,
+ $key,
+ implode("\n", static::$validSettingKeys)
+ )
+ );
+ }
+ }
+
+ return $tokenizedSettings;
+ }
+
+ /**
+ * Creates an anonymous function that acts as predicate.
+ *
+ * @param array $requirements The array of conditions to satisfy.
+ * @param boolean $isRequired Either these conditions are all required or all
+ * optional.
+ * @param boolean $atLeastOne Indicates that at least one requirement must
+ * succeed.
+ *
+ * @return callable
+ */
+ protected static function getValidator($requirements, $isRequired, $atLeastOne)
+ {
+ // @codingStandardsIgnoreStart
+
+ return function ($userSettings)
+ use ($requirements, $isRequired, $atLeastOne) {
+ $oneFound = false;
+ $result = array_change_key_case($userSettings);
+ foreach ($requirements as $requirement) {
+ $settingName = strtolower($requirement[Resources::SETTING_NAME]);
+
+ // Check if the setting name exists in the provided user settings.
+ if (array_key_exists($settingName, $result)) {
+ // Check if the provided user setting value is valid.
+ $validationFunc = $requirement[Resources::SETTING_CONSTRAINT];
+ $isValid = $validationFunc($result[$settingName]);
+
+ if ($isValid) {
+ // Remove the setting as indicator for successful validation.
+ unset($result[$settingName]);
+ $oneFound = true;
+ }
+ } else {
+ // If required then fail because the setting does not exist
+ if ($isRequired) {
+ return null;
+ }
+ }
+ }
+
+ if ($atLeastOne) {
+ // At least one requirement must succeed, otherwise fail.
+ return $oneFound ? $result : null;
+ } else {
+ return $result;
+ }
+ };
+
+ // @codingStandardsIgnoreEnd
+ }
+
+ /**
+ * Creates at lease one succeed predicate for the provided list of requirements.
+ *
+ * @return callable
+ */
+ protected static function atLeastOne()
+ {
+ $allSettings = func_get_args();
+ return self::getValidator($allSettings, false, true);
+ }
+
+ /**
+ * Creates an optional predicate for the provided list of requirements.
+ *
+ * @return callable
+ */
+ protected static function optional()
+ {
+ $optionalSettings = func_get_args();
+ return self::getValidator($optionalSettings, false, false);
+ }
+
+ /**
+ * Creates an required predicate for the provided list of requirements.
+ *
+ * @return callable
+ */
+ protected static function allRequired()
+ {
+ $requiredSettings = func_get_args();
+ return self::getValidator($requiredSettings, true, false);
+ }
+
+ /**
+ * Creates a setting value condition using the passed predicate.
+ *
+ * @param string $name The setting key name.
+ * @param callable $predicate The setting value predicate.
+ *
+ * @return array
+ */
+ protected static function settingWithFunc($name, $predicate)
+ {
+ $requirement = array();
+ $requirement[Resources::SETTING_NAME] = $name;
+ $requirement[Resources::SETTING_CONSTRAINT] = $predicate;
+
+ return $requirement;
+ }
+
+ /**
+ * Creates a setting value condition that validates it is one of the
+ * passed valid values.
+ *
+ * @param string $name The setting key name.
+ *
+ * @return array
+ */
+ protected static function setting($name)
+ {
+ $validValues = func_get_args();
+
+ // Remove $name argument.
+ unset($validValues[0]);
+
+ $validValuesCount = func_num_args();
+
+ $predicate = function ($settingValue) use ($validValuesCount, $validValues) {
+ if (empty($validValues)) {
+ // No restrictions, succeed,
+ return true;
+ }
+
+ // Check to find if the $settingValue is valid or not. The index must
+ // start from 1 as unset deletes the value but does not update the array
+ // indecies.
+ for ($index = 1; $index < $validValuesCount; $index++) {
+ if ($settingValue == $validValues[$index]) {
+ // $settingValue is found in valid values set, succeed.
+ return true;
+ }
+ }
+
+ throw new \RuntimeException(
+ sprintf(
+ Resources::INVALID_CONFIG_VALUE,
+ $settingValue,
+ implode("\n", $validValues)
+ )
+ );
+
+ // $settingValue is missing in valid values set, fail.
+ return false;
+ };
+
+ return self::settingWithFunc($name, $predicate);
+ }
+
+ /**
+ * Tests to see if a given list of settings matches a set of filters exactly.
+ *
+ * @param array $settings The settings to check.
+ *
+ * @return boolean If any filter returns null, false. If there are any settings
+ * left over after all filters are processed, false. Otherwise true.
+ */
+ protected static function matchedSpecification($settings)
+ {
+ $constraints = func_get_args();
+
+ // Remove first element which corresponds to $settings
+ unset($constraints[0]);
+
+ foreach ($constraints as $constraint) {
+ $remainingSettings = $constraint($settings);
+
+ if (is_null($remainingSettings)) {
+ return false;
+ } else {
+ $settings = $remainingSettings;
+ }
+ }
+
+ if (empty($settings)) {
+ return true;
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/StorageServiceSettings.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/StorageServiceSettings.php
new file mode 100644
index 0000000..f49c420
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/StorageServiceSettings.php
@@ -0,0 +1,485 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\ConnectionStringParser;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Represents the settings used to sign and access a request against the storage
+ * service. For more information about storage service connection strings check this
+ * page: http://msdn.microsoft.com/en-us/library/ee758697
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class StorageServiceSettings extends ServiceSettings
+{
+ /**
+ * The storage service name.
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * A base64 representation.
+ *
+ * @var string
+ */
+ private $_key;
+
+ /**
+ * The endpoint for the blob service.
+ *
+ * @var string
+ */
+ private $_blobEndpointUri;
+
+ /**
+ * The endpoint for the queue service.
+ *
+ * @var string
+ */
+ private $_queueEndpointUri;
+
+ /**
+ * The endpoint for the table service.
+ *
+ * @var string
+ */
+ private $_tableEndpointUri;
+
+ /**
+ * @var StorageServiceSettings
+ */
+ private static $_devStoreAccount;
+
+ /**
+ * Validator for the UseDevelopmentStorage setting. Must be "true".
+ *
+ * @var array
+ */
+ private static $_useDevelopmentStorageSetting;
+
+ /**
+ * Validator for the DevelopmentStorageProxyUri setting. Must be a valid Uri.
+ *
+ * @var array
+ */
+ private static $_developmentStorageProxyUriSetting;
+
+ /**
+ * Validator for the DefaultEndpointsProtocol setting. Must be either "http"
+ * or "https".
+ *
+ * @var array
+ */
+ private static $_defaultEndpointsProtocolSetting;
+
+ /**
+ * Validator for the AccountName setting. No restrictions.
+ *
+ * @var array
+ */
+ private static $_accountNameSetting;
+
+ /**
+ * Validator for the AccountKey setting. Must be a valid base64 string.
+ *
+ * @var array
+ */
+ private static $_accountKeySetting;
+
+ /**
+ * Validator for the BlobEndpoint setting. Must be a valid Uri.
+ *
+ * @var array
+ */
+ private static $_blobEndpointSetting;
+
+ /**
+ * Validator for the QueueEndpoint setting. Must be a valid Uri.
+ *
+ * @var array
+ */
+ private static $_queueEndpointSetting;
+
+ /**
+ * Validator for the TableEndpoint setting. Must be a valid Uri.
+ *
+ * @var array
+ */
+ private static $_tableEndpointSetting;
+
+ /**
+ * @var boolean
+ */
+ protected static $isInitialized = false;
+
+ /**
+ * Holds the expected setting keys.
+ *
+ * @var array
+ */
+ protected static $validSettingKeys = array();
+
+ /**
+ * Initializes static members of the class.
+ *
+ * @return none
+ */
+ protected static function init()
+ {
+ self::$_useDevelopmentStorageSetting = self::setting(
+ Resources::USE_DEVELOPMENT_STORAGE_NAME,
+ 'true'
+ );
+
+ self::$_developmentStorageProxyUriSetting = self::settingWithFunc(
+ Resources::DEVELOPMENT_STORAGE_PROXY_URI_NAME,
+ Validate::getIsValidUri()
+ );
+
+ self::$_defaultEndpointsProtocolSetting = self::setting(
+ Resources::DEFAULT_ENDPOINTS_PROTOCOL_NAME,
+ 'http', 'https'
+ );
+
+ self::$_accountNameSetting = self::setting(Resources::ACCOUNT_NAME_NAME);
+
+ self::$_accountKeySetting = self::settingWithFunc(
+ Resources::ACCOUNT_KEY_NAME,
+ // base64_decode will return false if the $key is not in base64 format.
+ function ($key) {
+ $isValidBase64String = base64_decode($key, true);
+ if ($isValidBase64String) {
+ return true;
+ } else {
+ throw new \RuntimeException(
+ sprintf(Resources::INVALID_ACCOUNT_KEY_FORMAT, $key)
+ );
+ }
+ }
+ );
+
+ self::$_blobEndpointSetting = self::settingWithFunc(
+ Resources::BLOB_ENDPOINT_NAME,
+ Validate::getIsValidUri()
+ );
+
+ self::$_queueEndpointSetting = self::settingWithFunc(
+ Resources::QUEUE_ENDPOINT_NAME,
+ Validate::getIsValidUri()
+ );
+
+ self::$_tableEndpointSetting = self::settingWithFunc(
+ Resources::TABLE_ENDPOINT_NAME,
+ Validate::getIsValidUri()
+ );
+
+ self::$validSettingKeys[] = Resources::USE_DEVELOPMENT_STORAGE_NAME;
+ self::$validSettingKeys[] = Resources::DEVELOPMENT_STORAGE_PROXY_URI_NAME;
+ self::$validSettingKeys[] = Resources::DEFAULT_ENDPOINTS_PROTOCOL_NAME;
+ self::$validSettingKeys[] = Resources::ACCOUNT_NAME_NAME;
+ self::$validSettingKeys[] = Resources::ACCOUNT_KEY_NAME;
+ self::$validSettingKeys[] = Resources::BLOB_ENDPOINT_NAME;
+ self::$validSettingKeys[] = Resources::QUEUE_ENDPOINT_NAME;
+ self::$validSettingKeys[] = Resources::TABLE_ENDPOINT_NAME;
+ }
+
+ /**
+ * Creates new storage service settings instance.
+ *
+ * @param string $name The storage service name.
+ * @param string $key The storage service key.
+ * @param string $blobEndpointUri The sotrage service blob endpoint.
+ * @param string $queueEndpointUri The sotrage service queue endpoint.
+ * @param string $tableEndpointUri The sotrage service table endpoint.
+ */
+ public function __construct(
+ $name,
+ $key,
+ $blobEndpointUri,
+ $queueEndpointUri,
+ $tableEndpointUri
+ ) {
+ $this->_name = $name;
+ $this->_key = $key;
+ $this->_blobEndpointUri = $blobEndpointUri;
+ $this->_queueEndpointUri = $queueEndpointUri;
+ $this->_tableEndpointUri = $tableEndpointUri;
+ }
+
+ /**
+ * Returns a StorageServiceSettings with development storage credentials using
+ * the specified proxy Uri.
+ *
+ * @param string $proxyUri The proxy endpoint to use.
+ *
+ * @return StorageServiceSettings
+ */
+ private static function _getDevelopmentStorageAccount($proxyUri)
+ {
+ if (is_null($proxyUri)) {
+ return self::developmentStorageAccount();
+ }
+
+ $scheme = parse_url($proxyUri, PHP_URL_SCHEME);
+ $host = parse_url($proxyUri, PHP_URL_HOST);
+ $prefix = $scheme . "://" . $host;
+
+ return new StorageServiceSettings(
+ Resources::DEV_STORE_NAME,
+ Resources::DEV_STORE_KEY,
+ $prefix . ':10000/devstoreaccount1/',
+ $prefix . ':10001/devstoreaccount1/',
+ $prefix . ':10002/devstoreaccount1/'
+ );
+ }
+
+ /**
+ * Gets a StorageServiceSettings object that references the development storage
+ * account.
+ *
+ * @return StorageServiceSettings
+ */
+ public static function developmentStorageAccount()
+ {
+ if (is_null(self::$_devStoreAccount)) {
+ self::$_devStoreAccount = self::_getDevelopmentStorageAccount(
+ Resources::DEV_STORE_URI
+ );
+ }
+
+ return self::$_devStoreAccount;
+ }
+
+ /**
+ * Gets the default service endpoint using the specified protocol and account
+ * name.
+ *
+ * @param array $settings The service settings.
+ * @param string $dns The service DNS.
+ *
+ * @return string
+ */
+ private static function _getDefaultServiceEndpoint($settings, $dns)
+ {
+ $scheme = Utilities::tryGetValueInsensitive(
+ Resources::DEFAULT_ENDPOINTS_PROTOCOL_NAME,
+ $settings
+ );
+ $accountName = Utilities::tryGetValueInsensitive(
+ Resources::ACCOUNT_NAME_NAME,
+ $settings
+ );
+
+ return sprintf(Resources::SERVICE_URI_FORMAT, $scheme, $accountName, $dns);
+ }
+
+ /**
+ * Creates StorageServiceSettings object given endpoints uri.
+ *
+ * @param array $settings The service settings.
+ * @param string $blobEndpointUri The blob endpoint uri.
+ * @param string $queueEndpointUri The queue endpoint uri.
+ * @param string $tableEndpointUri The table endpoint uri.
+ *
+ * @return \WindowsAzure\Common\Internal\StorageServiceSettings
+ */
+ private static function _createStorageServiceSettings(
+ $settings,
+ $blobEndpointUri = null,
+ $queueEndpointUri = null,
+ $tableEndpointUri = null
+ ) {
+ $blobEndpointUri = Utilities::tryGetValueInsensitive(
+ Resources::BLOB_ENDPOINT_NAME,
+ $settings,
+ $blobEndpointUri
+ );
+ $queueEndpointUri = Utilities::tryGetValueInsensitive(
+ Resources::QUEUE_ENDPOINT_NAME,
+ $settings,
+ $queueEndpointUri
+ );
+ $tableEndpointUri = Utilities::tryGetValueInsensitive(
+ Resources::TABLE_ENDPOINT_NAME,
+ $settings,
+ $tableEndpointUri
+ );
+ $accountName = Utilities::tryGetValueInsensitive(
+ Resources::ACCOUNT_NAME_NAME,
+ $settings
+ );
+ $accountKey = Utilities::tryGetValueInsensitive(
+ Resources::ACCOUNT_KEY_NAME,
+ $settings
+ );
+
+ return new StorageServiceSettings(
+ $accountName,
+ $accountKey,
+ $blobEndpointUri,
+ $queueEndpointUri,
+ $tableEndpointUri
+ );
+ }
+
+ /**
+ * Creates a StorageServiceSettings object from the given connection string.
+ *
+ * @param string $connectionString The storage settings connection string.
+ *
+ * @return StorageServiceSettings
+ */
+ public static function createFromConnectionString($connectionString)
+ {
+ $tokenizedSettings = self::parseAndValidateKeys($connectionString);
+
+ // Devstore case
+ $matchedSpecs = self::matchedSpecification(
+ $tokenizedSettings,
+ self::allRequired(self::$_useDevelopmentStorageSetting),
+ self::optional(self::$_developmentStorageProxyUriSetting)
+ );
+ if ($matchedSpecs) {
+ $proxyUri = Utilities::tryGetValueInsensitive(
+ Resources::DEVELOPMENT_STORAGE_PROXY_URI_NAME,
+ $tokenizedSettings
+ );
+
+ return self::_getDevelopmentStorageAccount($proxyUri);
+ }
+
+ // Automatic case
+ $matchedSpecs = self::matchedSpecification(
+ $tokenizedSettings,
+ self::allRequired(
+ self::$_defaultEndpointsProtocolSetting,
+ self::$_accountNameSetting,
+ self::$_accountKeySetting
+ ),
+ self::optional(
+ self::$_blobEndpointSetting,
+ self::$_queueEndpointSetting,
+ self::$_tableEndpointSetting
+ )
+ );
+ if ($matchedSpecs) {
+ return self::_createStorageServiceSettings(
+ $tokenizedSettings,
+ self::_getDefaultServiceEndpoint(
+ $tokenizedSettings,
+ Resources::BLOB_BASE_DNS_NAME
+ ),
+ self::_getDefaultServiceEndpoint(
+ $tokenizedSettings,
+ Resources::QUEUE_BASE_DNS_NAME
+ ),
+ self::_getDefaultServiceEndpoint(
+ $tokenizedSettings,
+ Resources::TABLE_BASE_DNS_NAME
+ )
+ );
+ }
+
+ // Explicit case
+ $matchedSpecs = self::matchedSpecification(
+ $tokenizedSettings,
+ self::atLeastOne(
+ self::$_blobEndpointSetting,
+ self::$_queueEndpointSetting,
+ self::$_tableEndpointSetting
+ ),
+ self::allRequired(
+ self::$_accountNameSetting,
+ self::$_accountKeySetting
+ )
+ );
+ if ($matchedSpecs) {
+ return self::_createStorageServiceSettings($tokenizedSettings);
+ }
+
+ self::noMatch($connectionString);
+ }
+
+ /**
+ * Gets storage service name.
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Gets storage service key.
+ *
+ * @return string
+ */
+ public function getKey()
+ {
+ return $this->_key;
+ }
+
+ /**
+ * Gets storage service blob endpoint uri.
+ *
+ * @return string
+ */
+ public function getBlobEndpointUri()
+ {
+ return $this->_blobEndpointUri;
+ }
+
+ /**
+ * Gets storage service queue endpoint uri.
+ *
+ * @return string
+ */
+ public function getQueueEndpointUri()
+ {
+ return $this->_queueEndpointUri;
+ }
+
+ /**
+ * Gets storage service table endpoint uri.
+ *
+ * @return string
+ */
+ public function getTableEndpointUri()
+ {
+ return $this->_tableEndpointUri;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Utilities.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Utilities.php
new file mode 100644
index 0000000..42a53f9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Utilities.php
@@ -0,0 +1,635 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+
+/**
+ * Utilities for the project
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Utilities
+{
+ /**
+ * Returns the specified value of the $key passed from $array and in case that
+ * this $key doesn't exist, the default value is returned.
+ *
+ * @param array $array The array to be used.
+ * @param mix $key The array key.
+ * @param mix $default The value to return if $key is not found in $array.
+ *
+ * @static
+ *
+ * @return mix
+ */
+ public static function tryGetValue($array, $key, $default = null)
+ {
+ return is_array($array) && array_key_exists($key, $array)
+ ? $array[$key]
+ : $default;
+ }
+
+ /**
+ * Adds a url scheme if there is no scheme.
+ *
+ * @param string $url The URL.
+ * @param string $scheme The scheme. By default HTTP
+ *
+ * @static
+ *
+ * @return string
+ */
+ public static function tryAddUrlScheme($url, $scheme = 'http')
+ {
+ $urlScheme = parse_url($url, PHP_URL_SCHEME);
+
+ if (empty($urlScheme)) {
+ $url = "$scheme://" . $url;
+ }
+
+ return $url;
+ }
+
+ /**
+ * tries to get nested array with index name $key from $array.
+ *
+ * Returns empty array object if the value is NULL.
+ *
+ * @param string $key The index name.
+ * @param array $array The array object.
+ *
+ * @static
+ *
+ * @return array
+ */
+ public static function tryGetArray($key, $array)
+ {
+ return Utilities::getArray(Utilities::tryGetValue($array, $key));
+ }
+
+ /**
+ * Adds the given key/value pair into array if the value doesn't satisfy empty().
+ *
+ * This function just validates that the given $array is actually array. If it's
+ * NULL the function treats it as array.
+ *
+ * @param string $key The key.
+ * @param string $value The value.
+ * @param array &$array The array. If NULL will be used as array.
+ *
+ * @static
+ *
+ * @return none
+ */
+ public static function addIfNotEmpty($key, $value, &$array)
+ {
+ if (!is_null($array)) {
+ Validate::isArray($array, 'array');
+ }
+
+ if (!empty($value)) {
+ $array[$key] = $value;
+ }
+ }
+
+ /**
+ * Returns the specified value of the key chain passed from $array and in case
+ * that key chain doesn't exist, null is returned.
+ *
+ * @param array $array Array to be used.
+ *
+ * @static
+ *
+ * @return mix
+ */
+ public static function tryGetKeysChainValue($array)
+ {
+ $arguments = func_get_args();
+ $numArguments = func_num_args();
+
+ $currentArray = $array;
+ for ($i = 1; $i < $numArguments; $i++) {
+ if (is_array($currentArray)) {
+ if (array_key_exists($arguments[$i], $currentArray)) {
+ $currentArray = $currentArray[$arguments[$i]];
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ }
+
+ return $currentArray;
+ }
+
+ /**
+ * Checks if the passed $string starts with $prefix
+ *
+ * @param string $string word to seaech in
+ * @param string $prefix prefix to be matched
+ * @param boolean $ignoreCase true to ignore case during the comparison;
+ * otherwise, false
+ *
+ * @static
+ *
+ * @return boolean
+ */
+ public static function startsWith($string, $prefix, $ignoreCase = false)
+ {
+ if ($ignoreCase) {
+ $string = strtolower($string);
+ $prefix = strtolower($prefix);
+ }
+ return ($prefix == substr($string, 0, strlen($prefix)));
+ }
+
+ /**
+ * Returns grouped items from passed $var
+ *
+ * @param array $var item to group
+ *
+ * @static
+ *
+ * @return array
+ */
+ public static function getArray($var)
+ {
+ if (is_null($var) || empty($var)) {
+ return array();
+ }
+
+ foreach ($var as $value) {
+ if ((gettype($value) == 'object')
+ && (get_class($value) == 'SimpleXMLElement')
+ ) {
+ return (array) $var;
+ } else if (!is_array($value)) {
+ return array($var);
+ }
+
+ }
+
+ return $var;
+ }
+
+ /**
+ * Unserializes the passed $xml into array.
+ *
+ * @param string $xml XML to be parsed.
+ *
+ * @static
+ *
+ * @return array
+ */
+ public static function unserialize($xml)
+ {
+ $sxml = new \SimpleXMLElement($xml);
+
+ return self::_sxml2arr($sxml);
+ }
+
+ /**
+ * Converts a SimpleXML object to an Array recursively
+ * ensuring all sub-elements are arrays as well.
+ *
+ * @param string $sxml SimpleXML object
+ * @param array $arr Array into which to store results
+ *
+ * @static
+ *
+ * @return array
+ */
+ private static function _sxml2arr($sxml, $arr = null)
+ {
+ foreach ((array) $sxml as $key => $value) {
+ if (is_object($value) || (is_array($value))) {
+ $arr[$key] = self::_sxml2arr($value);
+ } else {
+ $arr[$key] = $value;
+ }
+ }
+
+ return $arr;
+ }
+
+ /**
+ * Serializes given array into xml. The array indices must be string to use
+ * them as XML tags.
+ *
+ * @param array $array object to serialize represented in array.
+ * @param string $rootName name of the XML root element.
+ * @param string $defaultTag default tag for non-tagged elements.
+ * @param string $standalone adds 'standalone' header tag, values 'yes'/'no'
+ *
+ * @static
+ *
+ * @return string
+ */
+ public static function serialize($array, $rootName, $defaultTag = null,
+ $standalone = null
+ ) {
+ $xmlVersion = '1.0';
+ $xmlEncoding = 'UTF-8';
+
+ if (!is_array($array)) {
+ return false;
+ }
+
+ $xmlw = new \XmlWriter();
+ $xmlw->openMemory();
+ $xmlw->startDocument($xmlVersion, $xmlEncoding, $standalone);
+
+ $xmlw->startElement($rootName);
+
+ self::_arr2xml($xmlw, $array, $defaultTag);
+
+ $xmlw->endElement();
+
+ return $xmlw->outputMemory(true);
+ }
+
+ /**
+ * Takes an array and produces XML based on it.
+ *
+ * @param XMLWriter $xmlw XMLWriter object that was previously instanted
+ * and is used for creating the XML.
+ * @param array $data Array to be converted to XML
+ * @param string $defaultTag Default XML tag to be used if none specified.
+ *
+ * @static
+ *
+ * @return void
+ */
+ private static function _arr2xml(\XMLWriter $xmlw, $data, $defaultTag = null)
+ {
+ foreach ($data as $key => $value) {
+ if (strcmp($key, '@attributes') == 0) {
+ foreach ($value as $attributeName => $attributeValue) {
+ $xmlw->writeAttribute($attributeName, $attributeValue);
+ }
+ } else if (is_array($value)) {
+ if (!is_int($key)) {
+ if ($key != Resources::EMPTY_STRING) {
+ $xmlw->startElement($key);
+ } else {
+ $xmlw->startElement($defaultTag);
+ }
+ }
+
+ self::_arr2xml($xmlw, $value);
+
+ if (!is_int($key)) {
+ $xmlw->endElement();
+ }
+ continue;
+ } else {
+ $xmlw->writeElement($key, $value);
+ }
+ }
+ }
+
+ /**
+ * Converts string into boolean value.
+ *
+ * @param string $obj boolean value in string format.
+ *
+ * @static
+ *
+ * @return bool
+ */
+ public static function toBoolean($obj)
+ {
+ return filter_var($obj, FILTER_VALIDATE_BOOLEAN);
+ }
+
+ /**
+ * Converts string into boolean value.
+ *
+ * @param bool $obj boolean value to convert.
+ *
+ * @static
+ *
+ * @return string
+ */
+ public static function booleanToString($obj)
+ {
+ return $obj ? 'true' : 'false';
+ }
+
+ /**
+ * Converts a given date string into \DateTime object
+ *
+ * @param string $date windows azure date ins string represntation.
+ *
+ * @static
+ *
+ * @return \DateTime
+ */
+ public static function rfc1123ToDateTime($date)
+ {
+ $timeZone = new \DateTimeZone('GMT');
+ $format = Resources::AZURE_DATE_FORMAT;
+
+ return \DateTime::createFromFormat($format, $date, $timeZone);
+ }
+
+ /**
+ * Generate ISO 8601 compliant date string in UTC time zone
+ *
+ * @param int $timestamp The unix timestamp to convert
+ * (for DateTime check date_timestamp_get).
+ *
+ * @static
+ *
+ * @return string
+ */
+ public static function isoDate($timestamp = null)
+ {
+ $tz = date_default_timezone_get();
+ date_default_timezone_set('UTC');
+
+ if (is_null($timestamp)) {
+ $timestamp = time();
+ }
+
+ $returnValue = str_replace(
+ '+00:00', '.0000000Z', date('c', $timestamp)
+ );
+ date_default_timezone_set($tz);
+ return $returnValue;
+ }
+
+ /**
+ * Converts a DateTime object into an Edm.DaeTime value in UTC timezone,
+ * represented as a string.
+ *
+ * @param \DateTime $value The datetime value.
+ *
+ * @static
+ *
+ * @return string
+ */
+ public static function convertToEdmDateTime($value)
+ {
+ if (empty($value)) {
+ return $value;
+ }
+
+ if (is_string($value)) {
+ $value = self::convertToDateTime($value);
+ }
+
+ Validate::isDate($value);
+
+ $cloned = clone $value;
+ $cloned->setTimezone(new \DateTimeZone('UTC'));
+ return str_replace('+0000', 'Z', $cloned->format(\DateTime::ISO8601));
+ }
+
+ /**
+ * Converts a string to a \DateTime object. Returns false on failure.
+ *
+ * @param string $value The string value to parse.
+ *
+ * @static
+ *
+ * @return \DateTime
+ */
+ public static function convertToDateTime($value)
+ {
+ if ($value instanceof \DateTime) {
+ return $value;
+ }
+
+ if (substr($value, -1) == 'Z') {
+ $value = substr($value, 0, strlen($value) - 1);
+ }
+
+ return new \DateTime($value, new \DateTimeZone('UTC'));
+ }
+
+ /**
+ * Converts string to stream handle.
+ *
+ * @param type $string The string contents.
+ *
+ * @static
+ *
+ * @return resource
+ */
+ public static function stringToStream($string)
+ {
+ return fopen('data://text/plain,' . urlencode($string), 'rb');
+ }
+
+ /**
+ * Sorts an array based on given keys order.
+ *
+ * @param array $array The array to sort.
+ * @param array $order The keys order array.
+ *
+ * @return array
+ */
+ public static function orderArray($array, $order)
+ {
+ $ordered = array();
+
+ foreach ($order as $key) {
+ if (array_key_exists($key, $array)) {
+ $ordered[$key] = $array[$key];
+ }
+ }
+
+ return $ordered;
+ }
+
+ /**
+ * Checks if a value exists in an array. The comparison is done in a case
+ * insensitive manner.
+ *
+ * @param string $needle The searched value.
+ * @param array $haystack The array.
+ *
+ * @static
+ *
+ * @return boolean
+ */
+ public static function inArrayInsensitive($needle, $haystack)
+ {
+ return in_array(strtolower($needle), array_map('strtolower', $haystack));
+ }
+
+ /**
+ * Checks if the given key exists in the array. The comparison is done in a case
+ * insensitive manner.
+ *
+ * @param string $key The value to check.
+ * @param array $search The array with keys to check.
+ *
+ * @static
+ *
+ * @return boolean
+ */
+ public static function arrayKeyExistsInsensitive($key, $search)
+ {
+ return array_key_exists(strtolower($key), array_change_key_case($search));
+ }
+
+ /**
+ * Returns the specified value of the $key passed from $array and in case that
+ * this $key doesn't exist, the default value is returned. The key matching is
+ * done in a case insensitive manner.
+ *
+ * @param string $key The array key.
+ * @param array $haystack The array to be used.
+ * @param mix $default The value to return if $key is not found in $array.
+ *
+ * @static
+ *
+ * @return mix
+ */
+ public static function tryGetValueInsensitive($key, $haystack, $default = null)
+ {
+ $array = array_change_key_case($haystack);
+ return Utilities::tryGetValue($array, strtolower($key), $default);
+ }
+
+ /**
+ * Returns a string representation of a version 4 GUID, which uses random
+ * numbers.There are 6 reserved bits, and the GUIDs have this format:
+ * xxxxxxxx-xxxx-4xxx-[8|9|a|b]xxx-xxxxxxxxxxxx
+ * where 'x' is a hexadecimal digit, 0-9a-f.
+ *
+ * See http://tools.ietf.org/html/rfc4122 for more information.
+ *
+ * Note: This function is available on all platforms, while the
+ * com_create_guid() is only available for Windows.
+ *
+ * @static
+ *
+ * @return string A new GUID.
+ */
+ public static function getGuid()
+ {
+ // @codingStandardsIgnoreStart
+
+ return sprintf(
+ '%04x%04x-%04x-%04x-%02x%02x-%04x%04x%04x',
+ mt_rand(0, 65535),
+ mt_rand(0, 65535), // 32 bits for "time_low"
+ mt_rand(0, 65535), // 16 bits for "time_mid"
+ mt_rand(0, 4096) + 16384, // 16 bits for "time_hi_and_version", with
+ // the most significant 4 bits being 0100
+ // to indicate randomly generated version
+ mt_rand(0, 64) + 128, // 8 bits for "clock_seq_hi", with
+ // the most significant 2 bits being 10,
+ // required by version 4 GUIDs.
+ mt_rand(0, 256), // 8 bits for "clock_seq_low"
+ mt_rand(0, 65535), // 16 bits for "node 0" and "node 1"
+ mt_rand(0, 65535), // 16 bits for "node 2" and "node 3"
+ mt_rand(0, 65535) // 16 bits for "node 4" and "node 5"
+ );
+
+ // @codingStandardsIgnoreEnd
+ }
+
+ /**
+ * Creates a list of objects of type $class from the provided array using static
+ * create method.
+ *
+ * @param array $parsed The object in array representation
+ * @param string $class The class name. Must have static method create.
+ *
+ * @static
+ *
+ * @return array
+ */
+ public static function createInstanceList($parsed, $class)
+ {
+ $list = array();
+
+ foreach ($parsed as $value) {
+ $list[] = $class::create($value);
+ }
+
+ return $list;
+ }
+
+ /**
+ * Takes a string and return if it ends with the specified character/string.
+ *
+ * @param string $haystack The string to search in.
+ * @param string $needle postfix to match.
+ * @param boolean $ignoreCase Set true to ignore case during the comparison;
+ * otherwise, false
+ *
+ * @static
+ *
+ * @return boolean
+ */
+ public static function endsWith($haystack, $needle, $ignoreCase = false)
+ {
+ if ($ignoreCase) {
+ $haystack = strtolower($haystack);
+ $needle = strtolower($needle);
+ }
+ $length = strlen($needle);
+ if ($length == 0) {
+ return true;
+ }
+
+ return (substr($haystack, -$length) === $needle);
+ }
+
+ /**
+ * Get id from entity object or string.
+ * If entity is object than validate type and return $entity->$method()
+ * If entity is string than return this string
+ *
+ * @param object|string $entity Entity with id property
+ * @param string $type Entity type to validate
+ * @param string $method Methods that gets id (getId by default)
+ *
+ * @return string
+ */
+ public static function getEntityId($entity, $type, $method = 'getId')
+ {
+ if (is_string($entity)) {
+ return $entity;
+ } else {
+ Validate::isA($entity, $type, 'entity');
+ Validate::methodExists($entity, $method, $type);
+
+ return $entity->$method();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Validate.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Validate.php
new file mode 100644
index 0000000..a826e70
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Internal/Validate.php
@@ -0,0 +1,397 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Internal;
+use WindowsAzure\Common\Internal\InvalidArgumentTypeException;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Validates aganist a condition and throws an exception in case of failure.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Validate
+{
+ /**
+ * Throws exception if the provided variable type is not array.
+ *
+ * @param mix $var The variable to check.
+ * @param string $name The parameter name.
+ *
+ * @throws InvalidArgumentTypeException.
+ *
+ * @return none
+ */
+ public static function isArray($var, $name)
+ {
+ if (!is_array($var)) {
+ throw new InvalidArgumentTypeException(gettype(array()), $name);
+ }
+ }
+
+ /**
+ * Throws exception if the provided variable type is not string.
+ *
+ * @param mix $var The variable to check.
+ * @param string $name The parameter name.
+ *
+ * @throws InvalidArgumentTypeException
+ *
+ * @return none
+ */
+ public static function isString($var, $name)
+ {
+ try {
+ (string)$var;
+ } catch (\Exception $e) {
+ throw new InvalidArgumentTypeException(gettype(''), $name);
+ }
+ }
+
+ /**
+ * Throws exception if the provided variable type is not boolean.
+ *
+ * @param mix $var variable to check against.
+ *
+ * @throws InvalidArgumentTypeException
+ *
+ * @return none
+ */
+ public static function isBoolean($var)
+ {
+ (bool)$var;
+ }
+
+ /**
+ * Throws exception if the provided variable is set to null.
+ *
+ * @param mix $var The variable to check.
+ * @param string $name The parameter name.
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return none
+ */
+ public static function notNullOrEmpty($var, $name)
+ {
+ if (is_null($var) || empty($var)) {
+ throw new \InvalidArgumentException(
+ sprintf(Resources::NULL_OR_EMPTY_MSG, $name)
+ );
+ }
+ }
+
+ /**
+ * Throws exception if the provided variable is not double.
+ *
+ * @param mix $var The variable to check.
+ * @param string $name The parameter name.
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return none
+ */
+ public static function isDouble($var, $name)
+ {
+ if (!is_numeric($var)) {
+ throw new InvalidArgumentTypeException('double', $name);
+ }
+ }
+
+ /**
+ * Throws exception if the provided variable type is not integer.
+ *
+ * @param mix $var The variable to check.
+ * @param string $name The parameter name.
+ *
+ * @throws InvalidArgumentTypeException
+ *
+ * @return none
+ */
+ public static function isInteger($var, $name)
+ {
+ try {
+ (int)$var;
+ } catch (\Exception $e) {
+ throw new InvalidArgumentTypeException(gettype(123), $name);
+ }
+ }
+
+ /**
+ * Returns whether the variable is an empty or null string.
+ *
+ * @param string $var value.
+ *
+ * @return boolean
+ */
+ public static function isNullOrEmptyString($var)
+ {
+ try {
+ (string)$var;
+ } catch (\Exception $e) {
+ return false;
+ }
+
+ return (!isset($var) || trim($var)==='');
+ }
+
+ /**
+ * Throws exception if the provided condition is not satisfied.
+ *
+ * @param bool $isSatisfied condition result.
+ * @param string $failureMessage the exception message
+ *
+ * @throws \Exception
+ *
+ * @return none
+ */
+ public static function isTrue($isSatisfied, $failureMessage)
+ {
+ if (!$isSatisfied) {
+ throw new \InvalidArgumentException($failureMessage);
+ }
+ }
+
+ /**
+ * Throws exception if the provided $date is not of type \DateTime
+ *
+ * @param mix $date variable to check against.
+ *
+ * @throws WindowsAzure\Common\Internal\InvalidArgumentTypeException
+ *
+ * @return none
+ */
+ public static function isDate($date)
+ {
+ if (gettype($date) != 'object' || get_class($date) != 'DateTime') {
+ throw new InvalidArgumentTypeException('DateTime');
+ }
+ }
+
+ /**
+ * Throws exception if the provided variable is set to null.
+ *
+ * @param mix $var The variable to check.
+ * @param string $name The parameter name.
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return none
+ */
+ public static function notNull($var, $name)
+ {
+ if (is_null($var)) {
+ throw new \InvalidArgumentException(sprintf(Resources::NULL_MSG, $name));
+ }
+ }
+
+ /**
+ * Throws exception if the object is not of the specified class type.
+ *
+ * @param mixed $objectInstance An object that requires class type validation.
+ * @param mixed $classInstance The instance of the class the the
+ * object instance should be.
+ * @param string $name The name of the object.
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return none
+ */
+ public static function isInstanceOf($objectInstance, $classInstance, $name)
+ {
+ Validate::notNull($classInstance, 'classInstance');
+ if (is_null($objectInstance)) {
+ return true;
+ }
+
+ $objectType = gettype($objectInstance);
+ $classType = gettype($classInstance);
+
+ if ($objectType === $classType) {
+ return true;
+ } else {
+ throw new \InvalidArgumentException(
+ sprintf(
+ Resources::INSTANCE_TYPE_VALIDATION_MSG,
+ $name,
+ $objectType,
+ $classType
+ )
+ );
+ }
+ }
+
+ /**
+ * Creates a anonymous function that check if the given uri is valid or not.
+ *
+ * @return callable
+ */
+ public static function getIsValidUri()
+ {
+ return function ($uri) {
+ return Validate::isValidUri($uri);
+ };
+ }
+
+ /**
+ * Throws exception if the string is not of a valid uri.
+ *
+ * @param string $uri String to check.
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return boolean
+ */
+ public static function isValidUri($uri)
+ {
+ $isValid = filter_var($uri, FILTER_VALIDATE_URL);
+
+ if ($isValid) {
+ return true;
+ } else {
+ throw new \RuntimeException(
+ sprintf(Resources::INVALID_CONFIG_URI, $uri)
+ );
+ }
+ }
+
+ /**
+ * Throws exception if the provided variable type is not object.
+ *
+ * @param mix $var The variable to check.
+ * @param string $name The parameter name.
+ *
+ * @throws InvalidArgumentTypeException.
+ *
+ * @return boolean
+ */
+ public static function isObject($var, $name)
+ {
+ if (!is_object($var)) {
+ throw new InvalidArgumentTypeException('object', $name);
+ }
+
+ return true;
+ }
+
+ /**
+ * Throws exception if the object is not of the specified class type.
+ *
+ * @param mixed $objectInstance An object that requires class type validation.
+ * @param string $class The class the object instance should be.
+ * @param string $name The parameter name.
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return boolean
+ */
+ public static function isA($objectInstance, $class, $name)
+ {
+ Validate::isString($class, 'class');
+ Validate::notNull($objectInstance, 'objectInstance');
+ Validate::isObject($objectInstance, 'objectInstance');
+
+ $objectType = get_class($objectInstance);
+
+ if (is_a($objectInstance, $class)) {
+ return true;
+ } else {
+ throw new \InvalidArgumentException(
+ sprintf(
+ Resources::INSTANCE_TYPE_VALIDATION_MSG,
+ $name,
+ $objectType,
+ $class
+ )
+ );
+ }
+ }
+
+ /**
+ * Validate if method exists in object
+ *
+ * @param object $objectInstance An object that requires method existing
+ * validation
+ * @param string $method Method name
+ * @param string $name The parameter name
+ *
+ * @return boolean
+ */
+ public static function methodExists($objectInstance, $method, $name)
+ {
+ Validate::isString($method, 'method');
+ Validate::notNull($objectInstance, 'objectInstance');
+ Validate::isObject($objectInstance, 'objectInstance');
+
+ if (method_exists($objectInstance, $method)) {
+ return true;
+ } else {
+ throw new \InvalidArgumentException(
+ sprintf(
+ Resources::ERROR_METHOD_NOT_FOUND,
+ $method,
+ $name
+ )
+ );
+ }
+ }
+
+ /**
+ * Validate if string is date formatted
+ *
+ * @param string $value Value to validate
+ * @param string $name Name of parameter to insert in erro message
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return boolean
+ */
+ public static function isDateString($value, $name)
+ {
+ Validate::isString($value, 'value');
+
+ try {
+ new \DateTime($value);
+ return true;
+ }
+ catch (\Exception $e) {
+ throw new \InvalidArgumentException(
+ sprintf(
+ Resources::ERROR_INVALID_DATE_STRING,
+ $name,
+ $value
+ )
+ );
+ }
+ }
+
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/GetServicePropertiesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/GetServicePropertiesResult.php
new file mode 100644
index 0000000..97f69cd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/GetServicePropertiesResult.php
@@ -0,0 +1,81 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Models;
+use WindowsAzure\Common\Models\ServiceProperties;
+
+/**
+ * Result from calling GetQueueProperties REST wrapper.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetServicePropertiesResult
+{
+ private $_serviceProperties;
+
+ /**
+ * Creates object from $parsedResponse.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Common\Models\GetServicePropertiesResult
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new GetServicePropertiesResult();
+ $result->_serviceProperties = ServiceProperties::create($parsedResponse);
+
+ return $result;
+ }
+
+ /**
+ * Gets service properties object.
+ *
+ * @return WindowsAzure\Common\Models\ServiceProperties
+ */
+ public function getValue()
+ {
+ return $this->_serviceProperties;
+ }
+
+ /**
+ * Sets service properties object.
+ *
+ * @param ServiceProperties $serviceProperties object to use.
+ *
+ * @return none
+ */
+ public function setValue($serviceProperties)
+ {
+ $this->_serviceProperties = clone $serviceProperties;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/Logging.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/Logging.php
new file mode 100644
index 0000000..07e1826
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/Logging.php
@@ -0,0 +1,229 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Models;
+use WindowsAzure\Common\Models\RetentionPolicy;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds elements of queue properties logging field.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Logging
+{
+ /**
+ * The version of Storage Analytics to configure
+ *
+ * @var string
+ */
+ private $_version;
+
+ /**
+ * Applies only to logging configuration. Indicates whether all delete requests
+ * should be logged.
+ *
+ * @var bool
+ */
+ private $_delete;
+
+ /**
+ * Applies only to logging configuration. Indicates whether all read requests
+ * should be logged.
+ *
+ * @var bool.
+ */
+ private $_read;
+
+ /**
+ * Applies only to logging configuration. Indicates whether all write requests
+ * should be logged.
+ *
+ * @var bool
+ */
+ private $_write;
+
+ /**
+ * @var WindowsAzure\Common\Models\RetentionPolicy
+ */
+ private $_retentionPolicy;
+
+ /**
+ * Creates object from $parsedResponse.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Common\Models\Logging
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new Logging();
+ $result->setVersion($parsedResponse['Version']);
+ $result->setDelete(Utilities::toBoolean($parsedResponse['Delete']));
+ $result->setRead(Utilities::toBoolean($parsedResponse['Read']));
+ $result->setWrite(Utilities::toBoolean($parsedResponse['Write']));
+ $result->setRetentionPolicy(
+ RetentionPolicy::create($parsedResponse['RetentionPolicy'])
+ );
+
+ return $result;
+ }
+
+ /**
+ * Gets retention policy
+ *
+ * @return WindowsAzure\Common\Models\RetentionPolicy
+ *
+ */
+ public function getRetentionPolicy()
+ {
+ return $this->_retentionPolicy;
+ }
+
+ /**
+ * Sets retention policy
+ *
+ * @param RetentionPolicy $policy object to use
+ *
+ * @return none.
+ */
+ public function setRetentionPolicy($policy)
+ {
+ $this->_retentionPolicy = $policy;
+ }
+
+ /**
+ * Gets write
+ *
+ * @return bool.
+ */
+ public function getWrite()
+ {
+ return $this->_write;
+ }
+
+ /**
+ * Sets write
+ *
+ * @param bool $write new value.
+ *
+ * @return none.
+ */
+ public function setWrite($write)
+ {
+ $this->_write = $write;
+ }
+
+ /**
+ * Gets read
+ *
+ * @return bool.
+ */
+ public function getRead()
+ {
+ return $this->_read;
+ }
+
+ /**
+ * Sets read
+ *
+ * @param bool $read new value.
+ *
+ * @return none.
+ */
+ public function setRead($read)
+ {
+ $this->_read = $read;
+ }
+
+ /**
+ * Gets delete
+ *
+ * @return bool.
+ */
+ public function getDelete()
+ {
+ return $this->_delete;
+ }
+
+ /**
+ * Sets delete
+ *
+ * @param bool $delete new value.
+ *
+ * @return none.
+ */
+ public function setDelete($delete)
+ {
+ $this->_delete = $delete;
+ }
+
+ /**
+ * Gets version
+ *
+ * @return string.
+ */
+ public function getVersion()
+ {
+ return $this->_version;
+ }
+
+ /**
+ * Sets version
+ *
+ * @param string $version new value.
+ *
+ * @return none.
+ */
+ public function setVersion($version)
+ {
+ $this->_version = $version;
+ }
+
+ /**
+ * Converts this object to array with XML tags
+ *
+ * @return array.
+ */
+ public function toArray()
+ {
+ return array(
+ 'Version' => $this->_version,
+ 'Delete' => Utilities::booleanToString($this->_delete),
+ 'Read' => Utilities::booleanToString($this->_read),
+ 'Write' => Utilities::booleanToString($this->_write),
+ 'RetentionPolicy' => !empty($this->_retentionPolicy)
+ ? $this->_retentionPolicy->toArray()
+ : null
+ );
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/Metrics.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/Metrics.php
new file mode 100644
index 0000000..cd3e665
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/Metrics.php
@@ -0,0 +1,202 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Models;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds elements of queue properties metrics field.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Metrics
+{
+ /**
+ * The version of Storage Analytics to configure
+ *
+ * @var string
+ */
+ private $_version;
+
+ /**
+ * Indicates whether metrics is enabled for the storage service
+ *
+ * @var bool
+ */
+ private $_enabled;
+
+ /**
+ * Indicates whether a retention policy is enabled for the storage service
+ *
+ * @var bool
+ */
+ private $_includeAPIs;
+
+ /**
+ * @var WindowsAzure\Common\Models\RetentionPolicy
+ */
+ private $_retentionPolicy;
+
+ /**
+ * Creates object from $parsedResponse.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Common\Models\Metrics
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new Metrics();
+ $result->setVersion($parsedResponse['Version']);
+ $result->setEnabled(Utilities::toBoolean($parsedResponse['Enabled']));
+ if ($result->getEnabled()) {
+ $result->setIncludeAPIs(
+ Utilities::toBoolean($parsedResponse['IncludeAPIs'])
+ );
+ }
+ $result->setRetentionPolicy(
+ RetentionPolicy::create($parsedResponse['RetentionPolicy'])
+ );
+
+ return $result;
+ }
+
+ /**
+ * Gets retention policy
+ *
+ * @return WindowsAzure\Common\Models\RetentionPolicy
+ *
+ */
+ public function getRetentionPolicy()
+ {
+ return $this->_retentionPolicy;
+ }
+
+ /**
+ * Sets retention policy
+ *
+ * @param RetentionPolicy $policy object to use
+ *
+ * @return none.
+ */
+ public function setRetentionPolicy($policy)
+ {
+ $this->_retentionPolicy = $policy;
+ }
+
+ /**
+ * Gets include APIs.
+ *
+ * @return bool.
+ */
+ public function getIncludeAPIs()
+ {
+ return $this->_includeAPIs;
+ }
+
+ /**
+ * Sets include APIs.
+ *
+ * @param $bool $includeAPIs value to use.
+ *
+ * @return none.
+ */
+ public function setIncludeAPIs($includeAPIs)
+ {
+ $this->_includeAPIs = $includeAPIs;
+ }
+
+ /**
+ * Gets enabled.
+ *
+ * @return bool.
+ */
+ public function getEnabled()
+ {
+ return $this->_enabled;
+ }
+
+ /**
+ * Sets enabled.
+ *
+ * @param bool $enabled value to use.
+ *
+ * @return none.
+ */
+ public function setEnabled($enabled)
+ {
+ $this->_enabled = $enabled;
+ }
+
+ /**
+ * Gets version
+ *
+ * @return string.
+ */
+ public function getVersion()
+ {
+ return $this->_version;
+ }
+
+ /**
+ * Sets version
+ *
+ * @param string $version new value.
+ *
+ * @return none.
+ */
+ public function setVersion($version)
+ {
+ $this->_version = $version;
+ }
+
+ /**
+ * Converts this object to array with XML tags
+ *
+ * @return array.
+ */
+ public function toArray()
+ {
+ $array = array(
+ 'Version' => $this->_version,
+ 'Enabled' => Utilities::booleanToString($this->_enabled)
+ );
+ if ($this->_enabled) {
+ $array['IncludeAPIs'] = Utilities::booleanToString($this->_includeAPIs);
+ }
+ $array['RetentionPolicy'] = !empty($this->_retentionPolicy)
+ ? $this->_retentionPolicy->toArray()
+ : null;
+
+ return $array;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/OAuthAccessToken.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/OAuthAccessToken.php
new file mode 100644
index 0000000..101ca8b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/OAuthAccessToken.php
@@ -0,0 +1,153 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Models;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Holds OAuth access token data.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class OAuthAccessToken
+{
+ /**
+ * Access token itself
+ *
+ * @var string
+ */
+ private $_accessToken;
+
+ /**
+ * Unix time the access token valid before.
+ *
+ * @var int
+ */
+ private $_expiresIn;
+
+ /**
+ * Scope of access token
+ *
+ * @var string.
+ */
+ private $_scope;
+
+ /**
+ * Creates object from $parsedResponse.
+ *
+ * @param array $parsedResponse JSON response parsed into array.
+ *
+ * @return WindowsAzure\Common\Models\OAuthAccessToken
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new OAuthAccessToken();
+
+ $result->setAccessToken($parsedResponse[Resources::OAUTH_ACCESS_TOKEN]);
+ $result->setExpiresIn($parsedResponse[Resources::OAUTH_EXPIRES_IN] + time());
+ $result->setScope($parsedResponse[Resources::OAUTH_SCOPE]);
+
+ return $result;
+ }
+
+ /**
+ * Gets access token
+ *
+ * @return string
+ */
+ public function getAccessToken()
+ {
+ return $this->_accessToken;
+ }
+
+
+ /**
+ * Sets access token
+ *
+ * @param string $accessToken OAuth access token
+ *
+ * @return none
+ */
+ public function setAccessToken($accessToken)
+ {
+ $this->_accessToken = $accessToken;
+ }
+
+
+ /**
+ * Gets expired date of access token in unixdate
+ *
+ * @return int
+ *
+ */
+ public function getExpiresIn()
+ {
+ return $this->_expiresIn;
+ }
+
+
+ /**
+ * Sets access token expires date
+ *
+ * @param int $expiresIn OAuth access token expire date
+ *
+ * @return none
+ */
+ public function setExpiresIn($expiresIn)
+ {
+ $this->_expiresIn = $expiresIn;
+ }
+
+ /**
+ * Gets access token scope
+ *
+ * @return string
+ *
+ */
+ public function getScope()
+ {
+ return $this->_scope;
+ }
+
+
+ /**
+ * Sets access token scope
+ *
+ * @param string $scope OAuth access token scope
+ *
+ * @return none
+ */
+ public function setScope($scope)
+ {
+ $this->_scope = $scope;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/RetentionPolicy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/RetentionPolicy.php
new file mode 100644
index 0000000..c52885f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/RetentionPolicy.php
@@ -0,0 +1,136 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Models;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds elements of queue properties retention policy field.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class RetentionPolicy
+{
+ /**
+ * Indicates whether a retention policy is enabled for the storage service
+ *
+ * @var bool.
+ */
+ private $_enabled;
+
+ /**
+ * If $_enabled is true then this field indicates the number of days that metrics
+ * or logging data should be retained. All data older than this value will be
+ * deleted. The minimum value you can specify is 1;
+ * the largest value is 365 (one year)
+ *
+ * @var int
+ */
+ private $_days;
+
+ /**
+ * Creates object from $parsedResponse.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Common\Models\RetentionPolicy
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new RetentionPolicy();
+ $result->setEnabled(Utilities::toBoolean($parsedResponse['Enabled']));
+ if ($result->getEnabled()) {
+ $result->setDays(intval($parsedResponse['Days']));
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets enabled.
+ *
+ * @return bool.
+ */
+ public function getEnabled()
+ {
+ return $this->_enabled;
+ }
+
+ /**
+ * Sets enabled.
+ *
+ * @param bool $enabled value to use.
+ *
+ * @return none.
+ */
+ public function setEnabled($enabled)
+ {
+ $this->_enabled = $enabled;
+ }
+
+ /**
+ * Gets days field.
+ *
+ * @return int
+ */
+ public function getDays()
+ {
+ return $this->_days;
+ }
+
+ /**
+ * Sets days field.
+ *
+ * @param int $days value to use.
+ *
+ * @return none
+ */
+ public function setDays($days)
+ {
+ $this->_days = $days;
+ }
+
+ /**
+ * Converts this object to array with XML tags
+ *
+ * @return array.
+ */
+ public function toArray()
+ {
+ $array = array('Enabled' => Utilities::booleanToString($this->_enabled));
+ if (isset($this->_days)) {
+ $array['Days'] = strval($this->_days);
+ }
+
+ return $array;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/ServiceProperties.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/ServiceProperties.php
new file mode 100644
index 0000000..52145ae
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/Models/ServiceProperties.php
@@ -0,0 +1,136 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Models\Logging;
+use WindowsAzure\Common\Models\Metrics;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+
+/**
+ * Encapsulates service properties
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ServiceProperties
+{
+ private $_logging;
+ private $_metrics;
+ public static $xmlRootName = 'StorageServiceProperties';
+
+ /**
+ * Creates ServiceProperties object from parsed XML response.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Common\Models\ServiceProperties.
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new ServiceProperties();
+ $result->setLogging(Logging::create($parsedResponse['Logging']));
+ $result->setMetrics(Metrics::create($parsedResponse['Metrics']));
+
+ return $result;
+ }
+
+ /**
+ * Gets logging element.
+ *
+ * @return WindowsAzure\Common\Models\Logging.
+ */
+ public function getLogging()
+ {
+ return $this->_logging;
+ }
+
+ /**
+ * Sets logging element.
+ *
+ * @param WindowsAzure\Common\Models\Logging $logging new element.
+ *
+ * @return none.
+ */
+ public function setLogging($logging)
+ {
+ $this->_logging = clone $logging;
+ }
+
+ /**
+ * Gets metrics element.
+ *
+ * @return WindowsAzure\Common\Models\Metrics.
+ */
+ public function getMetrics()
+ {
+ return $this->_metrics;
+ }
+
+ /**
+ * Sets metrics element.
+ *
+ * @param WindowsAzure\Common\Models\Metrics $metrics new element.
+ *
+ * @return none.
+ */
+ public function setMetrics($metrics)
+ {
+ $this->_metrics = clone $metrics;
+ }
+
+ /**
+ * Converts this object to array with XML tags
+ *
+ * @return array.
+ */
+ public function toArray()
+ {
+ return array(
+ 'Logging' => !empty($this->_logging) ? $this->_logging->toArray() : null,
+ 'Metrics' => !empty($this->_metrics) ? $this->_metrics->toArray() : null
+ );
+ }
+
+ /**
+ * Converts this current object to XML representation.
+ *
+ * @param XmlSerializer $xmlSerializer The XML serializer.
+ *
+ * @return string
+ */
+ public function toXml($xmlSerializer)
+ {
+ $properties = array(XmlSerializer::ROOT_NAME => self::$xmlRootName);
+
+ return $xmlSerializer->serialize($this->toArray(), $properties);
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/ServiceException.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/ServiceException.php
new file mode 100644
index 0000000..b79a129
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/ServiceException.php
@@ -0,0 +1,84 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * Fires when the response code is incorrect.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ServiceException extends \LogicException
+{
+ private $_error;
+ private $_reason;
+
+ /**
+ * Constructor
+ *
+ * @param string $errorCode status error code.
+ * @param string $error string value of the error code.
+ * @param string $reason detailed message for the error.
+ *
+ * @return WindowsAzure\Common\ServiceException
+ */
+ public function __construct($errorCode, $error = null, $reason = null)
+ {
+ parent::__construct(
+ sprintf(Resources::AZURE_ERROR_MSG, $errorCode, $error, $reason)
+ );
+ $this->code = $errorCode;
+ $this->_error = $error;
+ $this->_reason = $reason;
+ }
+
+ /**
+ * Gets error text.
+ *
+ * @return string
+ */
+ public function getErrorText()
+ {
+ return $this->_error;
+ }
+
+ /**
+ * Gets detailed error reason.
+ *
+ * @return string
+ */
+ public function getErrorReason()
+ {
+ return $this->_reason;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/ServicesBuilder.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/ServicesBuilder.php
new file mode 100644
index 0000000..09d9c67
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Common/ServicesBuilder.php
@@ -0,0 +1,503 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Common;
+use WindowsAzure\Blob\BlobRestProxy;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Http\HttpClient;
+use WindowsAzure\Common\Internal\Filters\DateFilter;
+use WindowsAzure\Common\Internal\Filters\HeadersFilter;
+use WindowsAzure\Common\Internal\Filters\AuthenticationFilter;
+use WindowsAzure\Common\Internal\Filters\WrapFilter;
+use WindowsAzure\Common\Internal\InvalidArgumentTypeException;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+use WindowsAzure\Common\Internal\Authentication\SharedKeyAuthScheme;
+use WindowsAzure\Common\Internal\Authentication\TableSharedKeyLiteAuthScheme;
+use WindowsAzure\Common\Internal\StorageServiceSettings;
+use WindowsAzure\Common\Internal\ServiceManagementSettings;
+use WindowsAzure\Common\Internal\ServiceBusSettings;
+use WindowsAzure\Common\Internal\MediaServicesSettings;
+use WindowsAzure\Queue\QueueRestProxy;
+use WindowsAzure\ServiceBus\ServiceBusRestProxy;
+use WindowsAzure\ServiceBus\Internal\WrapRestProxy;
+use WindowsAzure\ServiceManagement\ServiceManagementRestProxy;
+use WindowsAzure\Table\TableRestProxy;
+use WindowsAzure\Table\Internal\AtomReaderWriter;
+use WindowsAzure\Table\Internal\MimeReaderWriter;
+use WindowsAzure\MediaServices\MediaServicesRestProxy;
+use WindowsAzure\Common\Internal\OAuthRestProxy;
+use WindowsAzure\Common\Internal\Authentication\OAuthScheme;
+
+
+/**
+ * Builds azure service objects.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ServicesBuilder
+{
+ /**
+ * @var ServicesBuilder
+ */
+ private static $_instance = null;
+
+ /**
+ * Gets the HTTP client used in the REST services construction.
+ *
+ * @return WindowsAzure\Common\Internal\Http\IHttpClient
+ */
+ protected function httpClient()
+ {
+ return new HttpClient();
+ }
+
+ /**
+ * Gets the serializer used in the REST services construction.
+ *
+ * @return WindowsAzure\Common\Internal\Serialization\ISerializer
+ */
+ protected function serializer()
+ {
+ return new XmlSerializer();
+ }
+
+ /**
+ * Gets the MIME serializer used in the REST services construction.
+ *
+ * @return \WindowsAzure\Table\Internal\IMimeReaderWriter
+ */
+ protected function mimeSerializer()
+ {
+ return new MimeReaderWriter();
+ }
+
+ /**
+ * Gets the Atom serializer used in the REST services construction.
+ *
+ * @return \WindowsAzure\Table\Internal\IAtomReaderWriter
+ */
+ protected function atomSerializer()
+ {
+ return new AtomReaderWriter();
+ }
+
+ /**
+ * Gets the Queue authentication scheme.
+ *
+ * @param string $accountName The account name.
+ * @param string $accountKey The account key.
+ *
+ * @return \WindowsAzure\Common\Internal\Authentication\StorageAuthScheme
+ */
+ protected function queueAuthenticationScheme($accountName, $accountKey)
+ {
+ return new SharedKeyAuthScheme($accountName, $accountKey);
+ }
+
+ /**
+ * Gets the Blob authentication scheme.
+ *
+ * @param string $accountName The account name.
+ * @param string $accountKey The account key.
+ *
+ * @return \WindowsAzure\Common\Internal\Authentication\StorageAuthScheme
+ */
+ protected function blobAuthenticationScheme($accountName, $accountKey)
+ {
+ return new SharedKeyAuthScheme($accountName, $accountKey);
+ }
+
+ /**
+ * Gets the Table authentication scheme.
+ *
+ * @param string $accountName The account name.
+ * @param string $accountKey The account key.
+ *
+ * @return TableSharedKeyLiteAuthScheme
+ */
+ protected function tableAuthenticationScheme($accountName, $accountKey)
+ {
+ return new TableSharedKeyLiteAuthScheme($accountName, $accountKey);
+ }
+
+ /**
+ * Builds a WRAP client.
+ *
+ * @param string $wrapEndpointUri The WRAP endpoint uri.
+ *
+ * @return WindowsAzure\ServiceBus\Internal\IWrap
+ */
+ protected function createWrapService($wrapEndpointUri)
+ {
+ $httpClient = $this->httpClient();
+ $wrapWrapper = new WrapRestProxy($httpClient, $wrapEndpointUri);
+
+ return $wrapWrapper;
+ }
+
+ /**
+ * Builds a queue object.
+ *
+ * @param string $connectionString The configuration connection string.
+ *
+ * @return WindowsAzure\Queue\Internal\IQueue
+ */
+ public function createQueueService($connectionString)
+ {
+ $settings = StorageServiceSettings::createFromConnectionString(
+ $connectionString
+ );
+
+ $httpClient = $this->httpClient();
+ $serializer = $this->serializer();
+ $uri = Utilities::tryAddUrlScheme(
+ $settings->getQueueEndpointUri()
+ );
+
+ $queueWrapper = new QueueRestProxy(
+ $httpClient,
+ $uri,
+ $settings->getName(),
+ $serializer
+ );
+
+ // Adding headers filter
+ $headers = array(
+ Resources::USER_AGENT => Resources::SDK_USER_AGENT,
+ );
+
+ $headers[Resources::X_MS_VERSION] = Resources::STORAGE_API_LATEST_VERSION;
+
+ $headersFilter = new HeadersFilter($headers);
+ $queueWrapper = $queueWrapper->withFilter($headersFilter);
+
+ // Adding date filter
+ $dateFilter = new DateFilter();
+ $queueWrapper = $queueWrapper->withFilter($dateFilter);
+
+ // Adding authentication filter
+ $authFilter = new AuthenticationFilter(
+ $this->queueAuthenticationScheme(
+ $settings->getName(),
+ $settings->getKey()
+ )
+ );
+
+ $queueWrapper = $queueWrapper->withFilter($authFilter);
+
+ return $queueWrapper;
+ }
+
+ /**
+ * Builds a blob object.
+ *
+ * @param string $connectionString The configuration connection string.
+ *
+ * @return WindowsAzure\Blob\Internal\IBlob
+ */
+ public function createBlobService($connectionString)
+ {
+ $settings = StorageServiceSettings::createFromConnectionString(
+ $connectionString
+ );
+
+ $httpClient = $this->httpClient();
+ $serializer = $this->serializer();
+ $uri = Utilities::tryAddUrlScheme(
+ $settings->getBlobEndpointUri()
+ );
+
+ $blobWrapper = new BlobRestProxy(
+ $httpClient,
+ $uri,
+ $settings->getName(),
+ $serializer
+ );
+
+ // Adding headers filter
+ $headers = array(
+ Resources::USER_AGENT => Resources::SDK_USER_AGENT,
+ );
+
+ $headers[Resources::X_MS_VERSION] = Resources::STORAGE_API_LATEST_VERSION;
+
+ $headersFilter = new HeadersFilter($headers);
+ $blobWrapper = $blobWrapper->withFilter($headersFilter);
+
+ // Adding date filter
+ $dateFilter = new DateFilter();
+ $blobWrapper = $blobWrapper->withFilter($dateFilter);
+
+ $authFilter = new AuthenticationFilter(
+ $this->blobAuthenticationScheme(
+ $settings->getName(),
+ $settings->getKey()
+ )
+ );
+
+ $blobWrapper = $blobWrapper->withFilter($authFilter);
+
+ return $blobWrapper;
+ }
+
+ /**
+ * Builds a table object.
+ *
+ * @param string $connectionString The configuration connection string.
+ *
+ * @return WindowsAzure\Table\Internal\ITable
+ */
+ public function createTableService($connectionString)
+ {
+ $settings = StorageServiceSettings::createFromConnectionString(
+ $connectionString
+ );
+
+ $httpClient = $this->httpClient();
+ $atomSerializer = $this->atomSerializer();
+ $mimeSerializer = $this->mimeSerializer();
+ $serializer = $this->serializer();
+ $uri = Utilities::tryAddUrlScheme(
+ $settings->getTableEndpointUri()
+ );
+
+ $tableWrapper = new TableRestProxy(
+ $httpClient,
+ $uri,
+ $atomSerializer,
+ $mimeSerializer,
+ $serializer
+ );
+
+ // Adding headers filter
+ $headers = array();
+ $latestServicesVersion = Resources::STORAGE_API_LATEST_VERSION;
+ $currentVersion = Resources::DATA_SERVICE_VERSION_VALUE;
+ $maxVersion = Resources::MAX_DATA_SERVICE_VERSION_VALUE;
+ $accept = Resources::ACCEPT_HEADER_VALUE;
+ $acceptCharset = Resources::ACCEPT_CHARSET_VALUE;
+ $userAgent = Resources::SDK_USER_AGENT;
+
+ $headers[Resources::X_MS_VERSION] = $latestServicesVersion;
+ $headers[Resources::DATA_SERVICE_VERSION] = $currentVersion;
+ $headers[Resources::MAX_DATA_SERVICE_VERSION] = $maxVersion;
+ $headers[Resources::MAX_DATA_SERVICE_VERSION] = $maxVersion;
+ $headers[Resources::ACCEPT_HEADER] = $accept;
+ $headers[Resources::ACCEPT_CHARSET] = $acceptCharset;
+ $headers[Resources::USER_AGENT] = $userAgent;
+
+ $headersFilter = new HeadersFilter($headers);
+ $tableWrapper = $tableWrapper->withFilter($headersFilter);
+
+ // Adding date filter
+ $dateFilter = new DateFilter();
+ $tableWrapper = $tableWrapper->withFilter($dateFilter);
+
+ // Adding authentication filter
+ $authFilter = new AuthenticationFilter(
+ $this->tableAuthenticationScheme(
+ $settings->getName(),
+ $settings->getKey()
+ )
+ );
+
+ $tableWrapper = $tableWrapper->withFilter($authFilter);
+
+ return $tableWrapper;
+ }
+
+ /**
+ * Builds a Service Bus object.
+ *
+ * @param string $connectionString The configuration connection string.
+ *
+ * @return WindowsAzure\ServiceBus\Internal\IServiceBus
+ */
+ public function createServiceBusService($connectionString)
+ {
+ $settings = ServiceBusSettings::createFromConnectionString(
+ $connectionString
+ );
+
+ $httpClient = $this->httpClient();
+ $serializer = $this->serializer();
+ $serviceBusWrapper = new ServiceBusRestProxy(
+ $httpClient,
+ $settings->getServiceBusEndpointUri(),
+ $serializer
+ );
+
+ // Adding headers filter
+ $headers = array(
+ Resources::USER_AGENT => Resources::SDK_USER_AGENT,
+ );
+
+ $headersFilter = new HeadersFilter($headers);
+ $serviceBusWrapper = $serviceBusWrapper->withFilter($headersFilter);
+
+ $wrapFilter = new WrapFilter(
+ $settings->getWrapEndpointUri(),
+ $settings->getWrapName(),
+ $settings->getWrapPassword(),
+ $this->createWrapService($settings->getWrapEndpointUri())
+ );
+
+ return $serviceBusWrapper->withFilter($wrapFilter);
+ }
+
+ /**
+ * Builds a service management object.
+ *
+ * @param string $connectionString The configuration connection string.
+ *
+ * @return WindowsAzure\ServiceManagement\Internal\IServiceManagement
+ */
+ public function createServiceManagementService($connectionString)
+ {
+ $settings = ServiceManagementSettings::createFromConnectionString(
+ $connectionString
+ );
+
+ $certificatePath = $settings->getCertificatePath();
+ $httpClient = new HttpClient($certificatePath);
+ $serializer = $this->serializer();
+ $uri = Utilities::tryAddUrlScheme(
+ $settings->getEndpointUri(),
+ Resources::HTTPS_SCHEME
+ );
+
+ $serviceManagementWrapper = new ServiceManagementRestProxy(
+ $httpClient,
+ $settings->getSubscriptionId(),
+ $uri,
+ $serializer
+ );
+
+ // Adding headers filter
+ $headers = array(
+ Resources::USER_AGENT => Resources::SDK_USER_AGENT
+ );
+
+ $headers[Resources::X_MS_VERSION] = Resources::SM_API_LATEST_VERSION;
+
+ $headersFilter = new HeadersFilter($headers);
+ $serviceManagementWrapper = $serviceManagementWrapper->withFilter(
+ $headersFilter
+ );
+
+ return $serviceManagementWrapper;
+ }
+
+ /**
+ * Builds a media services object.
+ *
+ * @param WindowsAzure\Common\Internal\MediaServicesSettings $settings The media
+ * services configuration settings.
+ *
+ * @return WindowsAzure\MediaServices\Internal\IMediaServices
+ */
+ public function createMediaServicesService($settings)
+ {
+ Validate::isA(
+ $settings,
+ 'WindowsAzure\Common\Internal\MediaServicesSettings',
+ 'settings'
+ );
+
+ $httpClient = new HttpClient();
+ $serializer = $this->serializer();
+ $uri = Utilities::tryAddUrlScheme(
+ $settings->getEndpointUri(),
+ Resources::HTTPS_SCHEME
+ );
+
+ $mediaServicesWrapper = new MediaServicesRestProxy(
+ $httpClient,
+ $uri,
+ $settings->getAccountName(),
+ $serializer
+ );
+
+ // Adding headers filter
+ $xMSVersion = Resources::MEDIA_SERVICES_API_LATEST_VERSION;
+ $dataVersion = Resources::MEDIA_SERVICES_DATA_SERVICE_VERSION_VALUE;
+ $dataMaxVersion = Resources::MEDIA_SERVICES_MAX_DATA_SERVICE_VERSION_VALUE;
+ $accept = Resources::ACCEPT_HEADER_VALUE;
+ $contentType = Resources::ATOM_ENTRY_CONTENT_TYPE;
+ $userAgent = Resources::SDK_USER_AGENT;
+
+ $headers = array(
+ Resources::X_MS_VERSION => $xMSVersion,
+ Resources::DATA_SERVICE_VERSION => $dataVersion,
+ Resources::MAX_DATA_SERVICE_VERSION => $dataMaxVersion,
+ Resources::ACCEPT_HEADER => $accept,
+ Resources::CONTENT_TYPE => $contentType,
+ Resources::USER_AGENT => $userAgent,
+ );
+
+ $headersFilter = new HeadersFilter($headers);
+ $mediaServicesWrapper = $mediaServicesWrapper->withFilter($headersFilter);
+
+ // Adding OAuth filter
+ $oauthService = new OAuthRestProxy(
+ new HttpClient(),
+ $settings->getOAuthEndpointUri()
+ );
+ $authentification = new OAuthScheme(
+ $settings->getAccountName(),
+ $settings->getAccessKey(),
+ Resources::OAUTH_GT_CLIENT_CREDENTIALS,
+ Resources::MEDIA_SERVICES_OAUTH_SCOPE,
+ $oauthService
+ );
+ $authentificationFilter = new AuthenticationFilter($authentification);
+ $mediaServicesWrapper = $mediaServicesWrapper->withFilter(
+ $authentificationFilter
+ );
+
+ return $mediaServicesWrapper;
+ }
+
+ /**
+ * Gets the static instance of this class.
+ *
+ * @return ServicesBuilder
+ */
+ public static function getInstance()
+ {
+ if (!isset(self::$instance)) {
+ self::$_instance = new ServicesBuilder();
+ }
+
+ return self::$_instance;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Internal/IMediaServices.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Internal/IMediaServices.php
new file mode 100644
index 0000000..063f026
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Internal/IMediaServices.php
@@ -0,0 +1,446 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Internal;
+use WindowsAzure\Common\Internal\FilterableService;
+
+/**
+ * This interface has all REST APIs provided by Windows Azure for Blob service.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Internal
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd135733.aspx
+ */
+interface IMediaServices extends FilterableService
+{
+ /**
+ * Create new asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset $asset Asset data
+ *
+ * @return WindowsAzure\MediaServices\Models\Asset Created asset
+ */
+ public function createAsset($asset);
+
+ /**
+ * Get asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Asset
+ */
+ public function getAsset($asset);
+
+ /**
+ * Get asset list
+ *
+ * @return array
+ */
+ public function getAssetList();
+
+ /**
+ * Get asset locators
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return array
+ */
+ public function getAssetLocators($asset);
+
+ /**
+ * Get parent assets of asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return array
+ */
+ public function getAssetParentAssets($asset);
+
+ /**
+ * Get assetFiles of asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return array
+ */
+ public function getAssetAssetFileList($asset);
+
+ /**
+ * Get storage account of asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return WindowsAzure\MediaServices\Models\StorageAccount
+ */
+ public function getAssetStorageAccount($asset);
+
+ /**
+ * Update asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset $asset New asset data with
+ * valid id
+ *
+ * @return none
+ */
+ public function updateAsset($asset);
+
+ /**
+ * Delete asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return none
+ */
+ public function deleteAsset($asset);
+
+ /**
+ * Create new access policy
+ *
+ * @param WindowsAzure\MediaServices\Models\AccessPolicy $accessPolicy Access
+ * policy data
+ *
+ * @return WindowsAzure\MediaServices\Models\AccessPolicy
+ */
+ public function createAccessPolicy($accessPolicy);
+
+ /**
+ * Get AccessPolicy.
+ *
+ * @param WindowsAzure\MediaServices\Models\AccessPolicy|string $accessPolicy A
+ * AccessPolicy data or AccessPolicy Id
+ *
+ * @return WindowsAzure\MediaServices\Models\AccessPolicy
+ */
+ public function getAccessPolicy($accessPolicy);
+
+ /**
+ * Get list of AccessPolicies.
+ *
+ * @return array
+ */
+ public function getAccessPolicyList();
+
+ /**
+ * Delete access policy
+ *
+ * @param WindowsAzure\MediaServices\Models\AccessPolicy|string $accessPolicy A
+ * Access policy data or access policy Id
+ *
+ * @return none
+ */
+ public function deleteAccessPolicy($accessPolicy);
+
+ /**
+ * Create new locator
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator $locator Locator data
+ *
+ * @return WindowsAzure\MediaServices\Models\Locator
+ */
+ public function createLocator($locator);
+
+ /**
+ * Get Locator.
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator|string $locator Locator data
+ * or locator Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Locator
+ */
+ public function getLocator($locator);
+
+ /**
+ * Get Locator access policy.
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator|string $locator Locator data
+ * or locator Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Locator
+ */
+ public function getLocatorAccessPolicy($locator);
+
+ /**
+ * Get Locator asset.
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator|string $locator Locator data
+ * or locator Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Locator
+ */
+ public function getLocatorAsset($locator);
+
+ /**
+ * Get list of Locators.
+ *
+ * @return array
+ */
+ public function getLocatorList();
+
+ /**
+ * Update locator
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator $locator New locator data
+ * with valid id
+ *
+ * @return none
+ */
+ public function updateLocator($locator);
+
+ /**
+ * Delete locator
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator|string $locator Asset data
+ * or asset Id
+ *
+ * @return none
+ */
+ public function deleteLocator($locator);
+
+ /**
+ * Generate file info for all files in asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return none
+ */
+ public function createFileInfos($asset);
+
+ /**
+ * Get asset file.
+ *
+ * @param WindowsAzure\MediaServices\Models\AssetFile|string $assetFile AssetFile
+ * data or assetFile Id
+ *
+ * @return WindowsAzure\MediaServices\Models\AssetFile
+ */
+ public function getAssetFile($assetFile);
+
+
+ /**
+ * Get list of all asset files.
+ *
+ * @return array
+ */
+ public function getAssetFileList();
+
+ /**
+ * Update asset file
+ *
+ * @param WindowsAzure\MediaServices\Models\AssetFile $assetFile New AssetFile
+ * data
+ *
+ * @return none
+ */
+ public function updateAssetFile($assetFile);
+
+ /**
+ * Upload asset file to storage.
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator $locator Write locator for
+ * file upload
+ *
+ * @param string $name Uploading filename
+ * @param string $body Uploading content
+ *
+ * @return none
+ */
+ public function uploadAssetFile($locator, $name, $body);
+
+ /**
+ * Create a job.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job $job Job data
+ * @param array $inputAssets Input assets list
+ * @param array $tasks Performed tasks
+ * array (optional)
+ *
+ * @return array
+ */
+ public function createJob($job, $inputAssets, $tasks = null);
+
+ /**
+ * Get Job.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Job
+ */
+ public function getJob($job);
+
+ /**
+ * Get list of Jobs.
+ *
+ * @return array
+ */
+ public function getJobList();
+
+ /**
+ * Get status of a job
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return string
+ */
+ public function getJobStatus($job);
+
+ /**
+ * Get job tasks.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return array
+ */
+ public function getJobTasks($job);
+
+
+ /**
+ * Get job input assets.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return array
+ */
+ public function getJobInputMediaAssets($job);
+
+ /**
+ * Get job output assets.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return array
+ */
+ public function getJobOutputMediaAssets($job);
+
+ /**
+ * Cancel a job
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return none
+ */
+ public function cancelJob($job);
+
+ /**
+ * Delete job
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return none
+ */
+ public function deleteJob($job);
+
+ /**
+ * Get list of tasks.
+ *
+ * @return array
+ */
+ public function getTaskList();
+
+ /**
+ * Create a job.
+ *
+ * @param WindowsAzure\MediaServices\Models\JobTemplate $jobTemplate Job
+ * template data
+ *
+ * @param array $taskTemplates Performed
+ * tasks template array
+ *
+ * @return array
+ */
+ public function createJobTemplate($jobTemplate, $taskTemplates);
+
+ /**
+ * Get job template.
+ *
+ * @param WindowsAzure\MediaServices\Models\JobTemplate|string $jobTemplate Job
+ * template data or jobTemplate Id
+ *
+ * @return WindowsAzure\MediaServices\Models\JobTemplate
+ */
+ public function getJobTemplate($jobTemplate);
+
+ /**
+ * Get list of Job Templates.
+ *
+ * @return array
+ */
+ public function getJobTemplateList();
+
+ /**
+ * Get task templates for job template.
+ *
+ * @param WindowsAzure\MediaServices\Models\JobTemplate|string $jobTemplate Job
+ * template data or jobTemplate Id
+ *
+ * @return array
+ */
+ public function getJobTemplateTaskTemplateList($jobTemplate);
+
+
+ /**
+ * Delete job template
+ *
+ * @param WindowsAzure\MediaServices\Models\JobTemplate|string $jobTemplate Job
+ * template data or job template Id
+ *
+ * @return none
+ */
+ public function deleteJobTemplate($jobTemplate);
+
+ /**
+ * Get list of task templates.
+ *
+ * @return array
+ */
+ public function getTaskTemplateList();
+
+ /**
+ * Get list of all media processors asset files
+ *
+ * @return array
+ */
+ public function getMediaProcessors();
+
+ /**
+ * Get media processor by name with latest version
+ *
+ * @param string $name Media processor name
+ *
+ * @return WindowsAzure\MediaServices\Models\JobTemplate\MediaProcessor
+ */
+ public function getLatestMediaProcessor($name);
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/MediaServicesRestProxy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/MediaServicesRestProxy.php
new file mode 100644
index 0000000..77aab47
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/MediaServicesRestProxy.php
@@ -0,0 +1,1484 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Http\HttpCallContext;
+use WindowsAzure\Common\Models\ServiceProperties;
+use WindowsAzure\Common\Internal\ServiceRestProxy;
+use WindowsAzure\MediaServices\Internal\IMediaServices;
+use WindowsAzure\MediaServices\Models\Asset;
+use WindowsAzure\MediaServices\Models\AccessPolicy;
+use WindowsAzure\MediaServices\Models\Locator;
+use WindowsAzure\MediaServices\Models\AssetFile;
+use WindowsAzure\MediaServices\Models\Job;
+use WindowsAzure\MediaServices\Models\Task;
+use WindowsAzure\MediaServices\Models\MediaProcessor;
+use WindowsAzure\MediaServices\Models\JobTemplate;
+use WindowsAzure\MediaServices\Models\TaskTemplate;
+use WindowsAzure\MediaServices\Models\ContentProperties;
+use WindowsAzure\Common\Internal\Atom\Feed;
+use WindowsAzure\Common\Internal\Atom\Entry;
+use WindowsAzure\Common\Internal\Atom\Content;
+use WindowsAzure\Common\Internal\Atom\AtomLink;
+use WindowsAzure\Blob\Models\BlobType;
+use WindowsAzure\Common\Internal\Http\HttpClient;
+use WindowsAzure\Common\Internal\Http\Url;
+use WindowsAzure\Common\Internal\Http\BatchRequest;
+use WindowsAzure\Common\Internal\Http\BatchResponse;
+use WindowsAzure\MediaServices\Models\StorageAccount;
+
+/**
+ * This class constructs HTTP requests and receive HTTP responses for media services
+ * service layer.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class MediaServicesRestProxy extends ServiceRestProxy implements IMediaServices
+{
+ /**
+ * Headers used in batch requests
+ *
+ * @var array
+ */
+ private $_batchHeaders = array(
+ Resources::DATA_SERVICE_VERSION => Resources::MEDIA_SERVICES_DATA_SERVICE_VERSION_VALUE,
+ Resources::MAX_DATA_SERVICE_VERSION => Resources::MEDIA_SERVICES_MAX_DATA_SERVICE_VERSION_VALUE,
+ Resources::ACCEPT_HEADER => Resources::ACCEPT_HEADER_VALUE,
+ Resources::CONTENT_TYPE => Resources::XML_ATOM_CONTENT_TYPE
+ );
+
+ /**
+ * Sends HTTP request with the specified parameters.
+ *
+ * @param string $method HTTP method used in the request
+ * @param array $headers HTTP headers.
+ * @param array $queryParams URL query parameters.
+ * @param array $postParameters The HTTP POST parameters.
+ * @param string $path URL path
+ * @param int $statusCode Expected status code received in the response
+ * @param string $body Request body
+ *
+ * @return \HTTP_Request2_Response
+ */
+ protected function send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParameters,
+ $path,
+ $statusCode,
+ $body = Resources::EMPTY_STRING
+ ) {
+ // Add redirect to expected results
+ if (!is_array($statusCode)) {
+ $statusCode = array($statusCode, );
+ }
+ array_push($statusCode, Resources::STATUS_MOVED_PERMANENTLY);
+
+ $response = parent::send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParameters,
+ $path,
+ $statusCode,
+ $body
+ );
+
+ // Set new URI endpoint if we get redirect response and perform query
+ if ($response->getStatus() == Resources::STATUS_MOVED_PERMANENTLY) {
+ $this->setUri($response->getHeader('location'));
+ array_pop($statusCode);
+
+ $response = parent::send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParameters,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+
+ return $response;
+ }
+
+ /**
+ * Wraps media services entity with Atom entry
+ *
+ * @param object $entity Media services entity
+ * @param array $links AtomLinks to other media services entities
+ *
+ * @return XML string representing Atom Entry
+ */
+ protected function wrapAtomEntry($entity, $links = null)
+ {
+ Validate::notNull($entity, 'entity');
+
+ $properties = new ContentProperties();
+ $properties->setPropertiesFromObject($entity);
+
+ $propertyWriter = new \XMLWriter();
+ $propertyWriter->openMemory();
+ $properties->writeXml($propertyWriter);
+
+ $content = new Content();
+ $content->setType(Resources::XML_CONTENT_TYPE);
+ $content->setText($propertyWriter->outputMemory());
+
+ $atomEntry = new Entry();
+ $atomEntry->setContent($content);
+
+ if ($links) {
+ Validate::isArray($links, 'links');
+
+ $atomEntry->setLink($links);
+ }
+
+ $xmlWriter = new \XMLWriter();
+ $xmlWriter->openMemory();
+ $atomEntry->writeXml($xmlWriter);
+
+ return $xmlWriter->outputMemory();
+ }
+
+ /**
+ * Extract media service entity from Atom Entry object
+ *
+ * @param WindowsAzure\Common\Internal\Atom\Entry $entry Atom Entry containing
+ * properties of media services object
+ *
+ * @return array
+ */
+ protected function getPropertiesFromAtomEntry($entry)
+ {
+ Validate::notNull($entry, 'entry');
+ Validate::isA($entry, 'WindowsAzure\Common\Internal\Atom\Entry', 'entry');
+
+ $result = array();
+ $content = $entry->getContent();
+ if (!empty($content)) {
+ $propertiesXml = $content->getXml()->children(
+ Resources::DSM_XML_NAMESPACE
+ );
+
+ $properties = new ContentProperties();
+ $properties->fromXml($propertiesXml);
+ $result = $properties->getProperties();
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get array of properties of atom entites passed via feed or single entry
+ *
+ * @param string $xmlString Atom xml
+ *
+ * @return array
+ */
+ protected function getEntryList($xmlString)
+ {
+ $xml = simplexml_load_string($xmlString);
+
+ if ($xml->getName() == Resources::ENTRY) {
+ $entry = new Entry();
+ $entry->fromXml($xml);
+ $entries = array($entry);
+ } else {
+ $feed = new Feed();
+ $feed->parseXml($xmlString);
+ $entries = $feed->getEntry();
+ }
+
+ $result = array();
+ if (is_array($entries)) {
+ foreach ($entries as $entry) {
+ $properties = $this->getPropertiesFromAtomEntry($entry);
+ if (!empty($properties)) {
+ $result[] = $properties;
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Create entity
+ *
+ * @param object $entity Entity data
+ * @param string $path REST path
+ *
+ * @return array Created entity data
+ */
+ private function _createEntity($entity, $path)
+ {
+ $method = Resources::HTTP_POST;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $statusCode = Resources::STATUS_CREATED;
+ $body = $this->wrapAtomEntry($entity);
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode,
+ $body
+ );
+
+ $entry = new Entry();
+ $entry->parseXml($response->getBody());
+ return $this->getPropertiesFromAtomEntry($entry);
+ }
+
+ /**
+ * Get entity from Azure
+ *
+ * @param string $path REST path
+ *
+ * @return array Entity data
+ */
+ private function _getEntity($path)
+ {
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $statusCode = Resources::STATUS_OK;
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode
+ );
+
+ $entry = new Entry();
+ $entry->parseXml($response->getBody());
+
+ return $this->getPropertiesFromAtomEntry($entry);
+ }
+
+ /**
+ * Create entity list
+ *
+ * @param string $path REST path
+ *
+ * @return array Entities list data
+ */
+ private function _getEntityList($path)
+ {
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $statusCode = Resources::STATUS_OK;
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode
+ );
+
+ return $this->getEntryList($response->getBody());
+ }
+
+ /**
+ * Update entity
+ *
+ * @param object $entity Entity data
+ * @param string $path REST path
+ *
+ * @return none
+ */
+ private function _updateEntity($entity, $path)
+ {
+ $method = Resources::HTTP_MERGE;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $statusCode = Resources::STATUS_NO_CONTENT;
+ $body = $this->wrapAtomEntry($entity);
+
+ $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+ /**
+ * Delete entity
+ *
+ * @param string $path REST path
+ *
+ * @return none
+ */
+ private function _deleteEntity($path)
+ {
+ $method = Resources::HTTP_DELETE;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $statusCode = Resources::STATUS_NO_CONTENT;
+
+ $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode
+ );
+ }
+
+ /**
+ * Create new asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset $asset Asset data
+ *
+ * @return WindowsAzure\MediaServices\Models\Asset Created asset
+ */
+ public function createAsset($asset)
+ {
+ Validate::isA($asset, 'WindowsAzure\Mediaservices\Models\Asset', 'asset');
+
+ return Asset::createFromOptions($this->_createEntity($asset, 'Assets'));
+ }
+
+ /**
+ * Get asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Asset
+ */
+ public function getAsset($asset)
+ {
+ $assetId = Utilities::getEntityId(
+ $asset,
+ 'WindowsAzure\MediaServices\Models\Asset'
+ );
+
+ return Asset::createFromOptions($this->_getEntity("Assets('{$assetId}')"));
+ }
+
+ /**
+ * Get asset list
+ *
+ * @return array
+ */
+ public function getAssetList()
+ {
+ $propertyList = $this->_getEntityList("Assets");
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = Asset::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get asset locators
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return array
+ */
+ public function getAssetLocators($asset)
+ {
+ $assetId = Utilities::getEntityId(
+ $asset,
+ 'WindowsAzure\MediaServices\Models\Asset'
+ );
+
+ $propertyList = $this->_getEntityList("Assets('{$assetId}')/Locators");
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = Locator::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get parent assets of asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return array
+ */
+ public function getAssetParentAssets($asset)
+ {
+ $assetId = Utilities::getEntityId(
+ $asset,
+ 'WindowsAzure\MediaServices\Models\Asset'
+ );
+
+ $propertyList = $this->_getEntityList("Assets('{$assetId}')/ParentAssets");
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = Asset::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get assetFiles of asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return array
+ */
+ public function getAssetAssetFileList($asset)
+ {
+ $assetId = Utilities::getEntityId(
+ $asset,
+ 'WindowsAzure\MediaServices\Models\Asset'
+ );
+
+ $propertyList = $this->_getEntityList("Assets('{$assetId}')/Files");
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = AssetFile::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get storage account of asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return WindowsAzure\MediaServices\Models\StorageAccount
+ */
+ public function getAssetStorageAccount($asset)
+ {
+ $assetId = Utilities::getEntityId(
+ $asset,
+ 'WindowsAzure\MediaServices\Models\Asset'
+ );
+
+ return StorageAccount::createFromOptions(
+ $this->_getEntity("Assets('{$assetId}')/StorageAccount")
+ );
+ }
+
+ /**
+ * Update asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset $asset New asset data with
+ * valid id
+ *
+ * @return none
+ */
+ public function updateAsset($asset)
+ {
+ Validate::isA($asset, 'WindowsAzure\MediaServices\Models\Asset', 'asset');
+
+ $this->_updateEntity($asset, "Assets('{$asset->getId()}')");
+ }
+
+ /**
+ * Delete asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return none
+ */
+ public function deleteAsset($asset)
+ {
+ $assetId = Utilities::getEntityId(
+ $asset,
+ 'WindowsAzure\MediaServices\Models\Asset'
+ );
+
+ $this->_deleteEntity("Assets('{$assetId}')");
+ }
+
+ /**
+ * Create new access policy
+ *
+ * @param WindowsAzure\MediaServices\Models\AccessPolicy $accessPolicy Access
+ * policy data
+ *
+ * @return WindowsAzure\MediaServices\Models\AccessPolicy
+ */
+ public function createAccessPolicy($accessPolicy)
+ {
+ Validate::isA(
+ $accessPolicy,
+ 'WindowsAzure\Mediaservices\Models\AccessPolicy',
+ 'accessPolicy'
+ );
+
+ return AccessPolicy::createFromOptions(
+ $this->_createEntity($accessPolicy, 'AccessPolicies')
+ );
+ }
+
+ /**
+ * Get AccessPolicy.
+ *
+ * @param WindowsAzure\MediaServices\Models\AccessPolicy|string $accessPolicy A
+ * AccessPolicy data or AccessPolicy Id
+ *
+ * @return WindowsAzure\MediaServices\Models\AccessPolicy
+ */
+ public function getAccessPolicy($accessPolicy)
+ {
+ $accessPolicyId = Utilities::getEntityId(
+ $accessPolicy,
+ 'WindowsAzure\Mediaservices\Models\AccessPolicy'
+ );
+
+ return AccessPolicy::createFromOptions(
+ $this->_getEntity("AccessPolicies('{$accessPolicyId}')")
+ );
+ }
+
+ /**
+ * Get list of AccessPolicies.
+ *
+ * @return array
+ */
+ public function getAccessPolicyList()
+ {
+ $propertyList = $this->_getEntityList('AccessPolicies');
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = AccessPolicy::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Delete access policy
+ *
+ * @param WindowsAzure\MediaServices\Models\AccessPolicy|string $accessPolicy A
+ * Access policy data or access policy Id
+ *
+ * @return none
+ */
+ public function deleteAccessPolicy($accessPolicy)
+ {
+ $accessPolicyId = Utilities::getEntityId(
+ $accessPolicy,
+ 'WindowsAzure\Mediaservices\Models\AccessPolicy'
+ );
+
+ $this->_deleteEntity("AccessPolicies('{$accessPolicyId}')");
+ }
+
+ /**
+ * Create new locator
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator $locator Locator data
+ *
+ * @return WindowsAzure\MediaServices\Models\Locator
+ */
+ public function createLocator($locator)
+ {
+ Validate::isA(
+ $locator,
+ 'WindowsAzure\Mediaservices\Models\Locator',
+ 'locator'
+ );
+
+ return Locator::createFromOptions(
+ $this->_createEntity($locator, 'Locators')
+ );
+ }
+
+ /**
+ * Get Locator.
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator|string $locator Locator data
+ * or locator Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Locator
+ */
+ public function getLocator($locator)
+ {
+ $locatorId = Utilities::getEntityId(
+ $locator,
+ 'WindowsAzure\Mediaservices\Models\Locator'
+ );
+
+ return Locator::createFromOptions(
+ $this->_getEntity("Locators('{$locatorId}')")
+ );
+ }
+
+ /**
+ * Get Locator access policy.
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator|string $locator Locator data
+ * or locator Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Locator
+ */
+ public function getLocatorAccessPolicy($locator)
+ {
+ $locatorId = Utilities::getEntityId(
+ $locator,
+ 'WindowsAzure\Mediaservices\Models\Locator'
+ );
+
+ return AccessPolicy::createFromOptions(
+ $this->_getEntity("Locators('{$locatorId}')/AccessPolicy")
+ );
+ }
+
+ /**
+ * Get Locator asset.
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator|string $locator Locator data
+ * or locator Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Locator
+ */
+ public function getLocatorAsset($locator)
+ {
+ $locatorId = Utilities::getEntityId(
+ $locator,
+ 'WindowsAzure\Mediaservices\Models\Locator'
+ );
+
+ return Asset::createFromOptions(
+ $this->_getEntity("Locators('{$locatorId}')/Asset")
+ );
+ }
+
+ /**
+ * Get list of Locators.
+ *
+ * @return array
+ */
+ public function getLocatorList()
+ {
+ $propertyList = $this->_getEntityList('Locators');
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = Locator::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Update locator
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator $locator New locator data
+ * with valid id
+ *
+ * @return none
+ */
+ public function updateLocator($locator)
+ {
+ Validate::isA(
+ $locator,
+ 'WindowsAzure\MediaServices\Models\Locator',
+ 'locator'
+ );
+
+ $this->_updateEntity($locator, "Locators('{$locator->getId()}')");
+ }
+
+ /**
+ * Delete locator
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator|string $locator Asset data
+ * or asset Id
+ *
+ * @return none
+ */
+ public function deleteLocator($locator)
+ {
+ $locatorId = Utilities::getEntityId(
+ $locator,
+ 'WindowsAzure\Mediaservices\Models\Locator'
+ );
+
+ $this->_deleteEntity("Locators('{$locatorId}')");
+ }
+
+ /**
+ * Generate file info for all files in asset
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset Asset data or
+ * asset Id
+ *
+ * @return none
+ */
+ public function createFileInfos($asset)
+ {
+ $assetId = Utilities::getEntityId(
+ $asset,
+ 'WindowsAzure\MediaServices\Models\Asset'
+ );
+ $assetIdEncoded = urlencode($assetId);
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = "CreateFileInfos?assetid='{$assetIdEncoded}'";
+ $statusCode = Resources::STATUS_NO_CONTENT;
+
+ $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode
+ );
+ }
+
+ /**
+ * Get asset file.
+ *
+ * @param WindowsAzure\MediaServices\Models\AssetFile|string $assetFile AssetFile
+ * data or assetFile Id
+ *
+ * @return WindowsAzure\MediaServices\Models\AssetFile
+ */
+ public function getAssetFile($assetFile)
+ {
+ $assetFileId = Utilities::getEntityId(
+ $assetFile,
+ 'WindowsAzure\Mediaservices\Models\AssetFile'
+ );
+
+ return AssetFile::createFromOptions(
+ $this->_getEntity("Files('{$assetFileId}')")
+ );
+ }
+
+
+ /**
+ * Get list of all asset files.
+ *
+ * @return array
+ */
+ public function getAssetFileList()
+ {
+ $propertyList = $this->_getEntityList('Files');
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = AssetFile::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Update asset file
+ *
+ * @param WindowsAzure\MediaServices\Models\AssetFile $assetFile New AssetFile
+ * data
+ *
+ * @return none
+ */
+ public function updateAssetFile($assetFile)
+ {
+ Validate::isA(
+ $assetFile,
+ 'WindowsAzure\MediaServices\Models\AssetFile',
+ 'assetFile'
+ );
+
+ $this->_updateEntity($assetFile, "Files('{$assetFile->getId()}')");
+ }
+
+ /**
+ * Upload asset file to storage.
+ *
+ * @param WindowsAzure\MediaServices\Models\Locator $locator Write locator for
+ * file upload
+ *
+ * @param string $name Uploading filename
+ * @param string $body Uploading content
+ *
+ * @return none
+ */
+ public function uploadAssetFile($locator, $name, $body)
+ {
+ Validate::isA(
+ $locator,
+ 'WindowsAzure\Mediaservices\Models\Locator',
+ 'locator'
+ );
+ Validate::isString($name, 'name');
+ Validate::notNull($body, 'body');
+
+ $method = Resources::HTTP_PUT;
+ $urlFile = $locator->getBaseUri() . '/' . $name;
+ $url = new Url($urlFile . $locator->getContentAccessComponent());
+ $filters = array();
+ $statusCode = Resources::STATUS_CREATED;
+ $headers = array(
+ Resources::CONTENT_TYPE => Resources::BINARY_FILE_TYPE,
+ Resources::X_MS_VERSION => Resources::STORAGE_API_LATEST_VERSION,
+ Resources::X_MS_BLOB_TYPE => BlobType::BLOCK_BLOB,
+ );
+
+ $httpClient = new HttpClient();
+ $httpClient->setMethod($method);
+ $httpClient->setHeaders($headers);
+ $httpClient->setExpectedStatusCode($statusCode);
+ $httpClient->setBody($body);
+ $httpClient->send($filters, $url);
+ }
+
+ /**
+ * Create a job HTTP call context.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job $job Job data
+ * @param array $inputAssets Input assets list
+ *
+ * @return WindowsAzure\Common\Internal\Http\HttpCallContext
+ */
+ private function _getCreateEmptyJobContext($job, $inputAssets)
+ {
+ Validate::isA($job, 'WindowsAzure\MediaServices\Models\Job', 'job');
+ Validate::isArray($inputAssets, 'inputAssets');
+
+ $atomLinks = array();
+ foreach ($inputAssets as $inputAsset) {
+ Validate::isA(
+ $inputAsset,
+ 'WindowsAzure\MediaServices\Models\Asset',
+ 'inputAssets'
+ );
+
+ $href = urlencode($inputAsset->getId());
+
+ $atomLink = new AtomLink();
+ $atomLink->setHref($this->getUri() . "Assets('{$href}')");
+ $atomLink->setType(Resources::ATOM_FEED_CONTENT_TYPE);
+ $atomLink->setTitle('InputAssets');
+ $atomLink->setRel(Resources::MEDIA_SERVICES_INPUT_ASSETS_REL);
+
+ $atomLinks[] = $atomLink;
+ }
+
+ $result = new HttpCallContext();
+ $result->setMethod(Resources::HTTP_POST);
+ $result->setHeaders($this->_batchHeaders);
+ $result->setUri($this->getUri());
+ $result->setPath('/Jobs');
+ $result->setBody($this->wrapAtomEntry($job, $atomLinks));
+ $result->addStatusCode(Resources::STATUS_CREATED);
+
+ return $result;
+ }
+
+
+ /**
+ * Create task HTTP call context
+ *
+ * @param WindowsAzure\MediaServices\Models\Task $task Task object to be created
+ *
+ * @return WindowsAzure\Common\Internal\Http\HttpCallContext
+ */
+ private function _getCreateTaskContext($task)
+ {
+ Validate::isA($task, 'WindowsAzure\MediaServices\Models\Task', 'task');
+
+ $result = new HttpCallContext();
+ $result->setMethod(Resources::HTTP_POST);
+ $result->setHeaders($this->_batchHeaders);
+ $result->setUri($this->getUri());
+ $result->setPath('/$1/Tasks');
+ $result->setBody($this->wrapAtomEntry($task));
+ $result->addStatusCode(Resources::STATUS_CREATED);
+
+ return $result;
+ }
+
+ /**
+ * Create a job.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job $job Job data
+ * @param array $inputAssets Input assets list
+ * @param array $tasks Performed tasks
+ * array (optional)
+ *
+ * @return array
+ */
+ public function createJob($job, $inputAssets, $tasks = null)
+ {
+ Validate::isA($job, 'WindowsAzure\MediaServices\Models\Job', 'job');
+ Validate::isArray($inputAssets, 'inputAssets');
+
+ $batch = new BatchRequest();
+ $batch->appendContext($this->_getCreateEmptyJobContext($job, $inputAssets));
+
+ if ($tasks != null) {
+ foreach ($tasks as $task) {
+ $batch->appendContext($this->_getCreateTaskContext($task));
+ }
+ }
+
+ $batch->encode();
+
+ $method = Resources::HTTP_POST;
+ $headers = $batch->getHeaders();
+ $postParams = array();
+ $queryParams = array();
+ $path = '$batch';
+ $statusCode = Resources::STATUS_ACCEPTED;
+ $body = $batch->getBody();
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode,
+ $body
+ );
+
+ $batchResponse = new BatchResponse($response->getBody(), $batch);
+ $responses = $batchResponse->getContexts();
+ $jobResponse = $responses[0];
+
+ $entry = new Entry();
+ $entry->parseXml($jobResponse->getBody());
+ $properties = $this->getPropertiesFromAtomEntry($entry);
+
+ return Job::createFromOptions($properties);
+ }
+
+ /**
+ * Get Job.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return WindowsAzure\MediaServices\Models\Job
+ */
+ public function getJob($job)
+ {
+ $jobId = Utilities::getEntityId(
+ $job,
+ 'WindowsAzure\Mediaservices\Models\Job'
+ );
+
+ return Job::createFromOptions($this->_getEntity("Jobs('{$jobId}')"));
+ }
+
+ /**
+ * Get list of Jobs.
+ *
+ * @return array
+ */
+ public function getJobList()
+ {
+ $propertyList = $this->_getEntityList('Jobs');
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = Job::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get status of a job
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return string
+ */
+ public function getJobStatus($job)
+ {
+ $jobId = Utilities::getEntityId(
+ $job,
+ 'WindowsAzure\MediaServices\Models\Job'
+ );
+ $jobIdEncoded = urlencode($jobId);
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = "Jobs('{$jobIdEncoded}')/State";
+ $statusCode = Resources::STATUS_OK;
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode
+ );
+
+ return strip_tags($response->getBody());
+ }
+
+ /**
+ * Get job tasks.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return array
+ */
+ public function getJobTasks($job)
+ {
+ $jobId = Utilities::getEntityId(
+ $job,
+ 'WindowsAzure\Mediaservices\Models\Job'
+ );
+
+ $propertyList = $this->_getEntityList("Jobs('{$jobId}')/Tasks");
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = Task::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+
+ /**
+ * Get job input assets.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return array
+ */
+ public function getJobInputMediaAssets($job)
+ {
+ $jobId = Utilities::getEntityId(
+ $job,
+ 'WindowsAzure\Mediaservices\Models\Job'
+ );
+
+ $propertyList = $this->_getEntityList("Jobs('{$jobId}')/InputMediaAssets");
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = Asset::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get job output assets.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return array
+ */
+ public function getJobOutputMediaAssets($job)
+ {
+ $jobId = Utilities::getEntityId(
+ $job,
+ 'WindowsAzure\Mediaservices\Models\Job'
+ );
+
+ $propertyList = $this->_getEntityList("Jobs('{$jobId}')/OutputMediaAssets");
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = Asset::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Cancel a job
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return none
+ */
+ public function cancelJob($job)
+ {
+ $jobId = Utilities::getEntityId(
+ $job,
+ 'WindowsAzure\MediaServices\Models\Job'
+ );
+ $jobIdEncoded = urlencode($jobId);
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = "CancelJob?jobid='{$jobIdEncoded}'";
+ $statusCode = Resources::STATUS_NO_CONTENT;
+
+ $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode
+ );
+ }
+
+ /**
+ * Delete job
+ *
+ * @param WindowsAzure\MediaServices\Models\Job|string $job Job data or job Id
+ *
+ * @return none
+ */
+ public function deleteJob($job)
+ {
+ $jobId = Utilities::getEntityId(
+ $job,
+ 'WindowsAzure\Mediaservices\Models\Job'
+ );
+
+ $this->_deleteEntity("Jobs('{$jobId}')");
+ }
+
+ /**
+ * Get list of tasks.
+ *
+ * @return array
+ */
+ public function getTaskList()
+ {
+ $propertyList = $this->_getEntityList('Tasks');
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = Task::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Create a job HTTP call context.
+ *
+ * @param WindowsAzure\MediaServices\Models\Job $jobTemplate JobTemplate data
+ *
+ * @return WindowsAzure\Common\Internal\Http\HttpCallContext
+ */
+ private function _getCreateEmptyJobTemplateContext($jobTemplate)
+ {
+ Validate::isA(
+ $jobTemplate,
+ 'WindowsAzure\MediaServices\Models\JobTemplate',
+ 'jobTemplate'
+ );
+
+ $result = new HttpCallContext();
+ $result->setMethod(Resources::HTTP_POST);
+ $result->setHeaders($this->_batchHeaders);
+ $result->setUri($this->getUri());
+ $result->setPath('/JobTemplates');
+ $result->setBody($this->wrapAtomEntry($jobTemplate));
+ $result->addStatusCode(Resources::STATUS_CREATED);
+
+ return $result;
+ }
+
+
+ /**
+ * Create task template HTTP call context
+ *
+ * @param WindowsAzure\MediaServices\Models\TaskTemplate $taskTemplate Task
+ * template object to be created
+ *
+ * @return WindowsAzure\Common\Internal\Http\HttpCallContext
+ */
+ private function _getCreateTaskTemplateContext($taskTemplate)
+ {
+ Validate::isA(
+ $taskTemplate,
+ 'WindowsAzure\MediaServices\Models\TaskTemplate',
+ 'taskTemplate'
+ );
+
+ $result = new HttpCallContext();
+ $result->setMethod(Resources::HTTP_POST);
+ $result->setHeaders($this->_batchHeaders);
+ $result->setUri($this->getUri());
+ $result->setPath('/$1/TaskTemplates');
+ $result->setBody($this->wrapAtomEntry($taskTemplate));
+ $result->addStatusCode(Resources::STATUS_CREATED);
+
+ return $result;
+ }
+
+ /**
+ * Create a job.
+ *
+ * @param WindowsAzure\MediaServices\Models\JobTemplate $jobTemplate Job
+ * template data
+ *
+ * @param array $taskTemplates Performed
+ * tasks template array
+ *
+ * @return array
+ */
+ public function createJobTemplate($jobTemplate, $taskTemplates)
+ {
+ Validate::isA(
+ $jobTemplate,
+ 'WindowsAzure\MediaServices\Models\JobTemplate',
+ 'jobTemplate'
+ );
+ Validate::isArray($taskTemplates, 'taskTemplates');
+
+ $batch = new BatchRequest();
+ $batch->appendContext(
+ $this->_getCreateEmptyJobTemplateContext($jobTemplate)
+ );
+
+ if ($taskTemplates != null) {
+ foreach ($taskTemplates as $taskTemplate) {
+ $batch->appendContext(
+ $this->_getCreateTaskTemplateContext($taskTemplate)
+ );
+ }
+ }
+
+ $batch->encode();
+
+ $method = Resources::HTTP_POST;
+ $headers = $batch->getHeaders();
+ $postParams = array();
+ $queryParams = array();
+ $path = '$batch';
+ $statusCode = Resources::STATUS_ACCEPTED;
+ $body = $batch->getBody();
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $postParams,
+ $queryParams,
+ $path,
+ $statusCode,
+ $body
+ );
+
+ $batchResponse = new BatchResponse($response->getBody(), $batch);
+ $responses = $batchResponse->getContexts();
+ $jobTemplateResponse = $responses[0];
+
+ $entry = new Entry();
+ $entry->parseXml($jobTemplateResponse->getBody());
+ $properties = $this->getPropertiesFromAtomEntry($entry);
+
+ return JobTemplate::createFromOptions($properties);
+ }
+
+ /**
+ * Get job template.
+ *
+ * @param WindowsAzure\MediaServices\Models\JobTemplate|string $jobTemplate Job
+ * template data or jobTemplate Id
+ *
+ * @return WindowsAzure\MediaServices\Models\JobTemplate
+ */
+ public function getJobTemplate($jobTemplate)
+ {
+ $jobTemplateId = Utilities::getEntityId(
+ $jobTemplate,
+ 'WindowsAzure\Mediaservices\Models\JobTemplate'
+ );
+
+ return JobTemplate::createFromOptions(
+ $this->_getEntity("JobTemplates('{$jobTemplateId}')")
+ );
+ }
+
+ /**
+ * Get list of Job Templates.
+ *
+ * @return array
+ */
+ public function getJobTemplateList()
+ {
+ $propertyList = $this->_getEntityList('JobTemplates');
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = JobTemplate::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get task templates for job template.
+ *
+ * @param WindowsAzure\MediaServices\Models\JobTemplate|string $jobTemplate Job
+ * template data or jobTemplate Id
+ *
+ * @return array
+ */
+ public function getJobTemplateTaskTemplateList($jobTemplate)
+ {
+ $jobTemplateId = Utilities::getEntityId(
+ $jobTemplate,
+ 'WindowsAzure\Mediaservices\Models\JobTemplate'
+ );
+
+ $propertyList = $this->_getEntityList(
+ "JobTemplates('{$jobTemplateId}')/TaskTemplates"
+ );
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = TaskTemplate::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+
+ /**
+ * Delete job template
+ *
+ * @param WindowsAzure\MediaServices\Models\JobTemplate|string $jobTemplate Job
+ * template data or job template Id
+ *
+ * @return none
+ */
+ public function deleteJobTemplate($jobTemplate)
+ {
+ $jobTemplateId = Utilities::getEntityId(
+ $jobTemplate,
+ 'WindowsAzure\Mediaservices\Models\JobTemplate'
+ );
+
+ $this->_deleteEntity("JobTemplates('{$jobTemplateId}')");
+ }
+
+ /**
+ * Get list of task templates.
+ *
+ * @return array
+ */
+ public function getTaskTemplateList()
+ {
+ $propertyList = $this->_getEntityList('TaskTemplates');
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = TaskTemplate::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get list of all media processors asset files
+ *
+ * @return array
+ */
+ public function getMediaProcessors()
+ {
+ $propertyList = $this->_getEntityList('MediaProcessors');
+ $result = array();
+
+ foreach ($propertyList as $properties) {
+ $result[] = MediaProcessor::createFromOptions($properties);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get media processor by name with latest version
+ *
+ * @param string $name Media processor name
+ *
+ * @return WindowsAzure\MediaServices\Models\JobTemplate\MediaProcessor
+ */
+ public function getLatestMediaProcessor($name)
+ {
+ $mediaProcessors = $this->getMediaProcessors();
+
+ $maxVersion = 0.0;
+ $result = null;
+ foreach ($mediaProcessors as $mediaProcessor) {
+ if (($mediaProcessor->getName() == $name)
+ && ($mediaProcessor->getVersion() > $maxVersion)) {
+ $result = $mediaProcessor;
+ $maxVersion = $mediaProcessor->getVersion();
+ }
+ }
+
+ return $result;
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/AccessPolicy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/AccessPolicy.php
new file mode 100644
index 0000000..7e9b0df
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/AccessPolicy.php
@@ -0,0 +1,293 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Represents access policy object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AccessPolicy
+{
+ /**
+ * The access rights the client has when interacting with the Asset. (None)
+ *
+ * @var int
+ */
+ const PERMISSIONS_NONE = 0;
+
+ /**
+ * The access rights the client has when interacting with the Asset. (Read)
+ *
+ * @var int
+ */
+ const PERMISSIONS_READ = 1;
+
+ /**
+ * The access rights the client has when interacting with the Asset.
+ * (Write)
+ *
+ * @var int
+ */
+ const PERMISSIONS_WRITE = 2;
+
+ /**
+ * The access rights the client has when interacting with the Asset.
+ * (Delete)
+ *
+ * @var int
+ */
+ const PERMISSIONS_DELETE = 4;
+
+ /**
+ * The access rights the client has when interacting with the Asset. (List)
+ *
+ * @var int
+ */
+ const PERMISSIONS_LIST = 8;
+
+ /**
+ * Access policy id
+ *
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * Created
+ *
+ * @var \DateTime
+ */
+ private $_created;
+
+ /**
+ * Last modified
+ *
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Duration in minutes
+ *
+ * @var double
+ */
+ private $_durationInMinutes;
+
+ /**
+ * Permissions
+ *
+ * @var int
+ */
+ private $_permissions;
+
+ /**
+ * Create access policy from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\AccessPolicy
+ */
+ public static function createFromOptions($options)
+ {
+ Validate::notNull($options['Name'], 'options[Name]');
+
+ $accessPolicy = new AccessPolicy($options['Name']);
+ $accessPolicy->fromArray($options);
+
+ return $accessPolicy;
+ }
+
+ /**
+ * Create access policy
+ *
+ * @param string $name Entity name
+ */
+ public function __construct($name)
+ {
+ $this->_name = $name;
+ }
+
+ /**
+ * Fill access policy from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Id'])) {
+ Validate::isString($options['Id'], 'options[Id]');
+ $this->_id = $options['Id'];
+ }
+
+ if (isset($options['Created'])) {
+ Validate::isDateString($options['Created'], 'options[Created]');
+ $this->_created = new \DateTime($options['Created']);
+ }
+
+ if (isset($options['LastModified'])) {
+ Validate::isDateString(
+ $options['LastModified'],
+ 'options[LastModified]'
+ );
+ $this->_lastModified = new \DateTime($options['LastModified']);
+ }
+
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['DurationInMinutes'])) {
+ Validate::isDouble(
+ $options['DurationInMinutes'],
+ 'options[DurationInMinutes]'
+ );
+ $this->_durationInMinutes = $options['DurationInMinutes'];
+ }
+
+ if (isset($options['Permissions'])) {
+ Validate::isInteger(
+ $options['Permissions'],
+ 'options[Permissions]'
+ );
+ $this->_permissions = $options['Permissions'];
+ }
+ }
+
+ /**
+ * Get "Permissions"
+ *
+ * @return int
+ */
+ public function getPermissions()
+ {
+ return $this->_permissions;
+ }
+
+ /**
+ * Set "Permissions"
+ *
+ * @param int $value Permissions
+ *
+ * @return none
+ */
+ public function setPermissions($value)
+ {
+ $this->_permissions = $value;
+ }
+
+ /**
+ * Get "Duration in minutes"
+ *
+ * @return double
+ */
+ public function getDurationInMinutes()
+ {
+ return $this->_durationInMinutes;
+ }
+
+ /**
+ * Set "Duration in minutes"
+ *
+ * @param double $value Duration in minutes
+ *
+ * @return none
+ */
+ public function setDurationInMinutes($value)
+ {
+ $this->_durationInMinutes = $value;
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set "Name"
+ *
+ * @param string $value Name
+ *
+ * @return none
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ }
+
+ /**
+ * Get "Last modified"
+ *
+ * @return \DateTime
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Get "Created"
+ *
+ * @return \DateTime
+ */
+ public function getCreated()
+ {
+ return $this->_created;
+ }
+
+ /**
+ * Get "Access policy id"
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Asset.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Asset.php
new file mode 100644
index 0000000..e7a722e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Asset.php
@@ -0,0 +1,372 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+
+
+/**
+ * Represents asset object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Asset
+{
+ /**
+ * The state of the asset "initialized"
+ *
+ * @var int
+ */
+ const STATE_INITIALIZED = 0;
+
+ /**
+ * The state of the asset "published"
+ *
+ * @var int
+ */
+ const STATE_PUBLISHED = 1;
+
+ /**
+ * The state of the asset "deleted"
+ *
+ * @var int
+ */
+ const STATE_DELETED = 2;
+
+ /**
+ * The encryption options "none"
+ *
+ * @var int
+ */
+ const OPTIONS_NONE = 0;
+
+ /**
+ * The encryption options "storage encrypted"
+ *
+ * @var int
+ */
+ const OPTIONS_STORAGE_ENCRYPTED = 1;
+
+ /**
+ * The encryption options "common encryption protected"
+ *
+ * @var int
+ */
+ const OPTIONS_COMMON_ENCRYPTION_PROTECTED = 2;
+
+ /**
+ * The encryption options "envelope encryption protected"
+ *
+ * @var int
+ */
+ const OPTIONS_ENVELOPE_ENCRYPTION_PROTECTED = 4;
+
+ /**
+ * Asset id
+ *
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * State
+ *
+ * @var int
+ */
+ private $_state;
+
+ /**
+ * Created
+ *
+ * @var \DateTime
+ */
+ private $_created;
+
+ /**
+ * Last modified
+ *
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * Alternate id
+ *
+ * @var string
+ */
+ private $_alternateId;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Options
+ *
+ * @var int
+ */
+ private $_options;
+
+ /**
+ * URI
+ *
+ * @var string
+ */
+ private $_uri;
+
+ /**
+ * Storage account name
+ *
+ * @var string
+ */
+ private $_storageAccountName;
+
+ /**
+ * Create asset from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\Asset
+ */
+ public static function createFromOptions($options)
+ {
+ Validate::notNull($options['Options'], 'options[Options]');
+
+ $asset = new Asset($options['Options']);
+ $asset->fromArray($options);
+
+ return $asset;
+ }
+
+ /**
+ * Create asset
+ *
+ * @param int $options Asset encrytion options.
+ *
+ * @return none
+ */
+ public function __construct($options)
+ {
+ $this->options = $options;
+ }
+
+ /**
+ * Fill asset from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Id'])) {
+ Validate::isString($options['Id'], 'options[Id]');
+ $this->_id = $options['Id'];
+ }
+
+ if (isset($options['State'])) {
+ Validate::isInteger($options['State'], 'options[State]');
+ $this->_state = $options['State'];
+ }
+
+ if (isset($options['Created'])) {
+ Validate::isDateString($options['Created'], 'options[Created]');
+ $this->_created = new \DateTime($options['Created']);
+ }
+
+ if (isset($options['LastModified'])) {
+ Validate::isDateString(
+ $options['LastModified'],
+ 'options[LastModified]'
+ );
+ $this->_lastModified = new \DateTime($options['LastModified']);
+ }
+
+ if (isset($options['AlternateId'])) {
+ Validate::isString($options['AlternateId'], 'options[AlternateId]');
+ $this->_alternateId = $options['AlternateId'];
+ }
+
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['Options'])) {
+ Validate::isInteger($options['Options'], 'options[Options]');
+ $this->_options = $options['Options'];
+ }
+
+ if (isset($options['Uri'])) {
+ Validate::isValidUri($options['Uri'], 'options[Uri]');
+ $this->_uri = $options['Uri'];
+ }
+
+ if (isset($options['StorageAccountName'])) {
+ Validate::isString(
+ $options['StorageAccountName'],
+ 'options[StorageAccountName]'
+ );
+ $this->_storageAccountName = $options['StorageAccountName'];
+ }
+ }
+
+ /**
+ * Get "Storage account name"
+ *
+ * @return string
+ */
+ public function getStorageAccountName()
+ {
+ return $this->_storageAccountName;
+ }
+
+ /**
+ * Get "URI"
+ *
+ * @return string
+ */
+ public function getUri()
+ {
+ return $this->_uri;
+ }
+
+ /**
+ * Get "Options"
+ *
+ * @return int
+ */
+ public function getOptions()
+ {
+ return $this->_options;
+ }
+
+ /**
+ * Set "Options"
+ *
+ * @param int $value Options
+ *
+ * @return none
+ */
+ public function setOptions($value)
+ {
+ $this->_options = $value;
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set "Name"
+ *
+ * @param string $value Name
+ *
+ * @return none
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ }
+
+ /**
+ * Get "Alternate id"
+ *
+ * @return string
+ */
+ public function getAlternateId()
+ {
+ return $this->_alternateId;
+ }
+
+ /**
+ * Set "Alternate id"
+ *
+ * @param string $value Alternate id
+ *
+ * @return none
+ */
+ public function setAlternateId($value)
+ {
+ $this->_alternateId = $value;
+ }
+
+ /**
+ * Get "Last modified"
+ *
+ * @return \DateTime
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Get "Created"
+ *
+ * @return \DateTime
+ */
+ public function getCreated()
+ {
+ return $this->_created;
+ }
+
+ /**
+ * Get "State"
+ *
+ * @return int
+ */
+ public function getState()
+ {
+ return $this->_state;
+ }
+
+ /**
+ * Get "Asset id"
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/AssetFile.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/AssetFile.php
new file mode 100644
index 0000000..41df61e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/AssetFile.php
@@ -0,0 +1,551 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Represents asset file object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AssetFile
+{
+ /**
+ * Asset file Id
+ *
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Content file size
+ *
+ * @var int
+ */
+ private $_contentFileSize;
+
+ /**
+ * Parent asset id
+ *
+ * @var string
+ */
+ private $_parentAssetId;
+
+ /**
+ * Encryption version
+ *
+ * @var string
+ */
+ private $_encryptionVersion;
+
+ /**
+ * Encryption scheme
+ *
+ * @var string
+ */
+ private $_encryptionScheme;
+
+ /**
+ * Is encrypted
+ *
+ * @var bool
+ */
+ private $_isEncrypted;
+
+ /**
+ * Encryption key id
+ *
+ * @var string
+ */
+ private $_encryptionKeyId;
+
+ /**
+ * Initialization vector
+ *
+ * @var string
+ */
+ private $_initializationVector;
+
+ /**
+ * Is primary
+ *
+ * @var bool
+ */
+ private $_isPrimary;
+
+ /**
+ * Last modified
+ *
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * Created
+ *
+ * @var \DateTime
+ */
+ private $_created;
+
+ /**
+ * Mime type
+ *
+ * @var string
+ */
+ private $_mimeType;
+
+ /**
+ * Content check sum
+ *
+ * @var string
+ */
+ private $_contentCheckSum;
+
+ /**
+ * Create asset file from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\AssetFile
+ */
+ public static function createFromOptions($options)
+ {
+ Validate::notNull($options['Name'], 'options[Name]');
+ Validate::notNull($options['ParentAssetId'], 'options[ParentAssetId]');
+
+ $assetFile = new AssetFile($options['Name'], $options['ParentAssetId']);
+ $assetFile->fromArray($options);
+
+ return $assetFile;
+ }
+
+ /**
+ * Create asset file
+ *
+ * @param string $name Friendly name for asset file.
+ * @param string $parentAssetId Asset Id of the Asset that this file is
+ * associated with.
+ */
+ public function __construct($name, $parentAssetId)
+ {
+ $this->_name = $name;
+ $this->_parentAssetId = $parentAssetId;
+ }
+
+ /**
+ * Fill asset file from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Id'])) {
+ Validate::isString($options['Id'], 'options[Id]');
+ $this->_id = $options['Id'];
+ }
+
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['ContentFileSize'])) {
+ Validate::isString(
+ $options['ContentFileSize'],
+ 'options[ContentFileSize]'
+ );
+ $this->_contentFileSize = $options['ContentFileSize'];
+ }
+
+ if (isset($options['ParentAssetId'])) {
+ Validate::isString(
+ $options['ParentAssetId'],
+ 'options[ParentAssetId]'
+ );
+ $this->_parentAssetId = $options['ParentAssetId'];
+ }
+
+ if (isset($options['EncryptionVersion'])) {
+ Validate::isString(
+ $options['EncryptionVersion'],
+ 'options[EncryptionVersion]'
+ );
+ $this->_encryptionVersion = $options['EncryptionVersion'];
+ }
+
+ if (isset($options['EncryptionScheme'])) {
+ Validate::isString(
+ $options['EncryptionScheme'],
+ 'options[EncryptionScheme]'
+ );
+ $this->_encryptionScheme = $options['EncryptionScheme'];
+ }
+
+ if (isset($options['IsEncrypted'])) {
+ Validate::isBoolean(
+ $options['IsEncrypted'],
+ 'options[IsEncrypted]'
+ );
+ $this->_isEncrypted = $options['IsEncrypted'];
+ }
+
+ if (isset($options['EncryptionKeyId'])) {
+ Validate::isString(
+ $options['EncryptionKeyId'],
+ 'options[EncryptionKeyId]'
+ );
+ $this->_encryptionKeyId = $options['EncryptionKeyId'];
+ }
+
+ if (isset($options['InitializationVector'])) {
+ Validate::isString(
+ $options['InitializationVector'],
+ 'options[InitializationVector]'
+ );
+ $this->_initializationVector = $options['InitializationVector'];
+ }
+
+ if (isset($options['IsPrimary'])) {
+ Validate::isBoolean($options['IsPrimary'], 'options[IsPrimary]');
+ $this->_isPrimary = $options['IsPrimary'];
+ }
+
+ if (isset($options['LastModified'])) {
+ Validate::isDateString(
+ $options['LastModified'],
+ 'options[LastModified]'
+ );
+ $this->_lastModified = new \DateTime($options['LastModified']);
+ }
+
+ if (isset($options['Created'])) {
+ Validate::isDateString($options['Created'], 'options[Created]');
+ $this->_created = new \DateTime($options['Created']);
+ }
+
+ if (isset($options['MimeType'])) {
+ Validate::isString($options['MimeType'], 'options[MimeType]');
+ $this->_mimeType = $options['MimeType'];
+ }
+
+ if (isset($options['ContentChecksum'])) {
+ Validate::isString(
+ $options['ContentChecksum'],
+ 'options[ContentChecksum]'
+ );
+ $this->_contentCheckSum = $options['ContentChecksum'];
+ }
+ }
+
+ /**
+ * Get "Content check sum"
+ *
+ * @return string
+ */
+ public function getContentCheckSum()
+ {
+ return $this->_contentCheckSum;
+ }
+
+ /**
+ * Set "Content check sum"
+ *
+ * @param string $value Content check sum
+ *
+ * @return none
+ */
+ public function setContentCheckSum($value)
+ {
+ $this->_contentCheckSum = $value;
+ }
+
+ /**
+ * Get "Mime type"
+ *
+ * @return string
+ */
+ public function getMimeType()
+ {
+ return $this->_mimeType;
+ }
+
+ /**
+ * Set "Mime type"
+ *
+ * @param string $value Mime type
+ *
+ * @return none
+ */
+ public function setMimeType($value)
+ {
+ $this->_mimeType = $value;
+ }
+
+ /**
+ * Get "Created"
+ *
+ * @return \DateTime
+ */
+ public function getCreated()
+ {
+ return $this->_created;
+ }
+
+ /**
+ * Get "Last modified"
+ *
+ * @return \DateTime
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Get "Is primary"
+ *
+ * @return bool
+ */
+ public function getIsPrimary()
+ {
+ return $this->_isPrimary;
+ }
+
+ /**
+ * Set "Is primary"
+ *
+ * @param bool $value Is primary
+ *
+ * @return none
+ */
+ public function setIsPrimary($value)
+ {
+ $this->_isPrimary = $value;
+ }
+
+ /**
+ * Get "Initialization vector"
+ *
+ * @return string
+ */
+ public function getInitializationVector()
+ {
+ return $this->_initializationVector;
+ }
+
+ /**
+ * Set "Initialization vector"
+ *
+ * @param string $value Initialization vector
+ *
+ * @return none
+ */
+ public function setInitializationVector($value)
+ {
+ $this->_initializationVector = $value;
+ }
+
+ /**
+ * Get "Encryption key id"
+ *
+ * @return string
+ */
+ public function getEncryptionKeyId()
+ {
+ return $this->_encryptionKeyId;
+ }
+
+ /**
+ * Set "Encryption key id"
+ *
+ * @param string $value Encryption key id
+ *
+ * @return none
+ */
+ public function setEncryptionKeyId($value)
+ {
+ $this->_encryptionKeyId = $value;
+ }
+
+ /**
+ * Get "Is encrypted"
+ *
+ * @return bool
+ */
+ public function getIsEncrypted()
+ {
+ return $this->_isEncrypted;
+ }
+
+ /**
+ * Set "Is encrypted"
+ *
+ * @param bool $value Is encrypted
+ *
+ * @return none
+ */
+ public function setIsEncrypted($value)
+ {
+ $this->_isEncrypted = $value;
+ }
+
+ /**
+ * Get "Encryption scheme"
+ *
+ * @return string
+ */
+ public function getEncryptionScheme()
+ {
+ return $this->_encryptionScheme;
+ }
+
+ /**
+ * Set "Encryption scheme"
+ *
+ * @param string $value Encryption scheme
+ *
+ * @return none
+ */
+ public function setEncryptionScheme($value)
+ {
+ $this->_encryptionScheme = $value;
+ }
+
+ /**
+ * Get "Encryption version"
+ *
+ * @return string
+ */
+ public function getEncryptionVersion()
+ {
+ return $this->_encryptionVersion;
+ }
+
+ /**
+ * Set "Encryption version"
+ *
+ * @param string $value Encryption version
+ *
+ * @return none
+ */
+ public function setEncryptionVersion($value)
+ {
+ $this->_encryptionVersion = $value;
+ }
+
+ /**
+ * Get "Parent asset id"
+ *
+ * @return string
+ */
+ public function getParentAssetId()
+ {
+ return $this->_parentAssetId;
+ }
+
+ /**
+ * Set "Parent asset id"
+ *
+ * @param string $value Parent asset id
+ *
+ * @return none
+ */
+ public function setParentAssetId($value)
+ {
+ $this->_parentAssetId = $value;
+ }
+
+ /**
+ * Get "Content file size"
+ *
+ * @return int
+ */
+ public function getContentFileSize()
+ {
+ return $this->_contentFileSize;
+ }
+
+ /**
+ * Set "Content file size"
+ *
+ * @param int $value Content file size
+ *
+ * @return none
+ */
+ public function setContentFileSize($value)
+ {
+ $this->_contentFileSize = $value;
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set "Name"
+ *
+ * @param string $value Name
+ *
+ * @return none
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ }
+
+ /**
+ * Get "Asset file Id"
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/ContentProperties.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/ContentProperties.php
new file mode 100644
index 0000000..72cd6a3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/ContentProperties.php
@@ -0,0 +1,185 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+
+
+/**
+ * Entity object properties.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Common\Internal\Atom
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ContentProperties
+{
+ /**
+ * The undefined content.
+ *
+ * @var array
+ */
+ protected $properties;
+
+ /**
+ * Creates a AtomProperties instance.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Parse an ATOM Properties xml.
+ *
+ * @param string $xmlContent An XML based string of ATOM Link.
+ *
+ * @return none
+ */
+ public function fromXml($xmlContent)
+ {
+ Validate::notNull($xmlContent, 'xmlContent');
+
+ $this->properties = $this->_fromXmlToArray($xmlContent);
+
+ }
+
+ /**
+ * Parse properties recursively
+ *
+ * @param \SimpleXML $xml XML object to parse
+ *
+ * @return array
+ */
+ private function _fromXmlToArray($xml) {
+ $result = array();
+ $dataNamespace = Resources::DS_XML_NAMESPACE;
+ foreach ($xml->children($dataNamespace) as $child) {
+ if (count($child->children($dataNamespace)) > 0) {
+ $value = array();
+ foreach ($child->children($dataNamespace) as $subChild) {
+ if ($subChild->getName() == 'element') {
+ $value[] = $this->_fromXmlToArray($subChild);
+ }
+ }
+ } else {
+ $value = (string)$child;
+ }
+
+ $result[$child->getName()] = $value;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Set properties from object.
+ *
+ * @param object $object Object to serialize
+ *
+ * @return none
+ */
+ public function setPropertiesFromObject($object)
+ {
+ Validate::notNull($object, 'object');
+
+ $reflectionClass = new \ReflectionClass($object);
+ $methodArray = $reflectionClass->getMethods();
+
+ $this->properties = array();
+ foreach ($methodArray as $method) {
+ if ((strpos($method->name, 'get') === 0)
+ && $method->isPublic()
+ ) {
+ $variableName = substr($method->name, 3);
+ $variableValue = $method->invoke($object);
+ if (!empty($variableValue)) {
+ if (is_a($variableValue, '\DateTime')) {
+ $variableValue = $variableValue->format(\DateTime::ATOM);
+ }
+ $this->properties[$variableName] = (string)$variableValue;
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Get properties
+ *
+ * @return array
+ */
+ public function getProperties() {
+ return $this->properties;
+ }
+
+ /**
+ * Writes an XML representing the ATOM properties item.
+ *
+ * @param \XMLWriter $xmlWriter The xml writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+ $xmlWriter->startElementNS(
+ 'meta',
+ Resources::PROPERTIES,
+ Resources::DSM_XML_NAMESPACE
+ );
+ $this->writeInnerXml($xmlWriter);
+ $xmlWriter->endElement();
+ }
+
+ /**
+ * Writes the inner XML representing the ATOM properties item.
+ *
+ * @param \XMLWriter $xmlWriter The xml writer.
+ *
+ * @return none
+ */
+ public function writeInnerXml($xmlWriter)
+ {
+ Validate::notNull($xmlWriter, 'xmlWriter');
+
+ if (is_array($this->properties)) {
+ foreach ($this->properties as $key => $value) {
+ $xmlWriter->writeElementNS(
+ 'data',
+ $key,
+ Resources::DS_XML_NAMESPACE,
+ $value
+ );
+ }
+ }
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/ErrorDetail.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/ErrorDetail.php
new file mode 100644
index 0000000..b593dff
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/ErrorDetail.php
@@ -0,0 +1,111 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+
+/**
+ * Represents error detail object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ErrorDetail
+{
+ /**
+ * Code
+ *
+ * @var int
+ */
+ private $_code;
+
+ /**
+ * Message
+ *
+ * @var string
+ */
+ private $_message;
+
+ /**
+ * Create error detail from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\ErrorDetail
+ */
+ public static function createFromOptions($options)
+ {
+ $errorDetail = new ErrorDetail();
+ $errorDetail->fromArray($options);
+
+ return $errorDetail;
+ }
+
+ /**
+ * Fill error detail from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Code'])) {
+ Validate::isInteger($options['Code'], 'options[Code]');
+ $this->_code = $options['Code'];
+ }
+
+ if (isset($options['Message'])) {
+ Validate::isString($options['Message'], 'options[Message]');
+ $this->_message = $options['Message'];
+ }
+ }
+
+ /**
+ * Get "Message"
+ *
+ * @return string
+ */
+ public function getMessage()
+ {
+ return $this->_message;
+ }
+
+ /**
+ * Get "Code"
+ *
+ * @return int
+ */
+ public function getCode()
+ {
+ return $this->_code;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Job.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Job.php
new file mode 100644
index 0000000..18792ca
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Job.php
@@ -0,0 +1,379 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+
+/**
+ * Represents job object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Job
+{
+ /**
+ * The state of the job "queued"
+ *
+ * @var int
+ */
+ const STATE_QUEUED = 0;
+
+ /**
+ * The state of the job "scheduled"
+ *
+ * @var int
+ */
+ const STATE_SCHEDULED = 1;
+
+ /**
+ * The state of the job "processing"
+ *
+ * @var int
+ */
+ const STATE_PROCESSING = 2;
+
+ /**
+ * The state of the job "finished"
+ *
+ * @var int
+ */
+ const STATE_FINISHED = 3;
+
+ /**
+ * The state of the job "error"
+ *
+ * @var int
+ */
+ const STATE_ERROR = 4;
+
+ /**
+ * The state of the job "canceled"
+ *
+ * @var int
+ */
+ const STATE_CANCELED = 5;
+
+ /**
+ * The state of the job "canceling"
+ *
+ * @var int
+ */
+ const STATE_CANCELING = 6;
+
+ /**
+ * Job id
+ *
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * State
+ *
+ * @var int
+ */
+ private $_state;
+
+ /**
+ * Created
+ *
+ * @var \DateTime
+ */
+ private $_created;
+
+ /**
+ * Last modified
+ *
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * End time
+ *
+ * @var \DateTime
+ */
+ private $_endTime;
+
+ /**
+ * Priority
+ *
+ * @var int
+ */
+ private $_priority;
+
+ /**
+ * Running duration
+ *
+ * @var double
+ */
+ private $_runningDuration;
+
+ /**
+ * Start time
+ *
+ * @var \DateTime
+ */
+ private $_startTime;
+
+ /**
+ * Template id
+ *
+ * @var string
+ */
+ private $_templateId;
+
+ /**
+ * Create asset from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\Job
+ */
+ public static function createFromOptions($options)
+ {
+ $job = new Job();
+ $job->fromArray($options);
+
+ return $job;
+ }
+
+ /**
+ * Fill asset from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Id'])) {
+ Validate::isString($options['Id'], 'options[Id]');
+ $this->_id = $options['Id'];
+ }
+
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['Created'])) {
+ Validate::isDateString($options['Created'], 'options[Created]');
+ $this->_created = new \DateTime($options['Created']);
+ }
+
+ if (isset($options['LastModified'])) {
+ Validate::isDateString(
+ $options['LastModified'],
+ 'options[LastModified]'
+ );
+ $this->_lastModified = new \DateTime($options['LastModified']);
+ }
+
+ if (isset($options['EndTime'])) {
+ Validate::isDateString($options['EndTime'], 'options[EndTime]');
+ $this->_endTime = new \DateTime($options['EndTime']);
+ }
+
+ if (isset($options['Priority'])) {
+ Validate::isInteger($options['Priority'], 'options[Priority]');
+ $this->_priority = $options['Priority'];
+ }
+
+ if (isset($options['RunningDuration'])) {
+ Validate::isDouble(
+ $options['RunningDuration'],
+ 'options[RunningDuration]'
+ );
+ $this->_runningDuration = $options['RunningDuration'];
+ }
+
+ if (isset($options['StartTime'])) {
+ Validate::isDateString($options['StartTime'], 'options[StartTime]');
+ $this->_startTime = new \DateTime($options['StartTime']);
+ }
+
+ if (isset($options['State'])) {
+ Validate::isInteger($options['State'], 'options[State]');
+ $this->_state = $options['State'];
+ }
+
+ if (isset($options['TemplateId'])) {
+ Validate::isString($options['TemplateId'], 'options[TemplateId]');
+ $this->_templateId = $options['TemplateId'];
+ }
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set "Name"
+ *
+ * @param string $value Name
+ *
+ * @return none
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ }
+
+ /**
+ * Get "Last modified"
+ *
+ * @return \DateTime
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Get "Created"
+ *
+ * @return \DateTime
+ */
+ public function getCreated()
+ {
+ return $this->_created;
+ }
+
+ /**
+ * Get "State"
+ *
+ * @return int
+ */
+ public function getState()
+ {
+ return $this->_state;
+ }
+
+ /**
+ * Get "Job id"
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * Get "Template id"
+ *
+ * @return string
+ */
+ public function getTemplateId()
+ {
+ return $this->_templateId;
+ }
+
+ /**
+ * Set "Template id"
+ *
+ * @param string $value Template id
+ *
+ * @return none
+ */
+ public function setTemplateId($value)
+ {
+ $this->_templateId = $value;
+ }
+
+ /**
+ * Get "Start time"
+ *
+ * @return \DateTime
+ */
+ public function getStartTime()
+ {
+ return $this->_startTime;
+ }
+
+ /**
+ * Get "Running duration"
+ *
+ * @return double
+ */
+ public function getRunningDuration()
+ {
+ return $this->_runningDuration;
+ }
+
+ /**
+ * Get "Priority"
+ *
+ * @return int
+ */
+ public function getPriority()
+ {
+ return $this->_priority;
+ }
+
+ /**
+ * Set "Priority"
+ *
+ * @param int $value Priority
+ *
+ * @return none
+ */
+ public function setPriority($value)
+ {
+ $this->_priority = $value;
+ }
+
+ /**
+ * Get "End time"
+ *
+ * @return \DateTime
+ */
+ public function getEndTime()
+ {
+ return $this->_endTime;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/JobTemplate.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/JobTemplate.php
new file mode 100644
index 0000000..ca48153
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/JobTemplate.php
@@ -0,0 +1,312 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+
+/**
+ * Represents job template object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class JobTemplate
+{
+ /**
+ * The type of JobTemplate "system level"
+ *
+ * @var int
+ */
+ const TYPE_SYSTEM_LEVEL = 0;
+
+ /**
+ * The type of JobTemplate "account level"
+ *
+ * @var int
+ */
+ const TYPE_ACCOUNT_LEVEL = 1;
+
+ /**
+ * Job template id
+ *
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Created
+ *
+ * @var \DateTime
+ */
+ private $_created;
+
+ /**
+ * Last modified
+ *
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * Job template body
+ *
+ * @var string
+ */
+ private $_jobTemplateBody;
+
+ /**
+ * Number of input assets
+ *
+ * @var int
+ */
+ private $_numberofInputAssets;
+
+ /**
+ * Template type
+ *
+ * @var int
+ */
+ private $_templateType;
+
+ /**
+ * Create asset from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\JobTemplate
+ */
+ public static function createFromOptions($options)
+ {
+ Validate::notNull($options['JobTemplateBody'], 'options[JobTemplateBody]');
+
+ $jobTemplate = new JobTemplate(
+ $options['JobTemplateBody'],
+ $options['TemplateType']
+ );
+ $jobTemplate->fromArray($options);
+
+ return $jobTemplate;
+ }
+
+ /**
+ * Create job template
+ *
+ * @param string $jobTemplateBody Job template XML body.
+ * @param string $templateType Template type default to AccountLevel.
+ */
+ public function __construct(
+ $jobTemplateBody,
+ $templateType = JobTemplate::TYPE_ACCOUNT_LEVEL)
+ {
+ $this->_jobTemplateBody = $jobTemplateBody;
+ $this->_templateType = $templateType;
+ }
+
+ /**
+ * Fill job template from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Id'])) {
+ Validate::isString($options['Id'], 'options[Id]');
+ $this->_id = $options['Id'];
+ }
+
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['Created'])) {
+ Validate::isDateString($options['Created'], 'options[Created]');
+ $this->_created = new \DateTime($options['Created']);
+ }
+
+ if (isset($options['LastModified'])) {
+ Validate::isDateString(
+ $options['LastModified'],
+ 'options[LastModified]'
+ );
+ $this->_lastModified = new \DateTime($options['LastModified']);
+ }
+
+ if (isset($options['JobTemplateBody'])) {
+ Validate::isString(
+ $options['JobTemplateBody'],
+ 'options[JobTemplateBody]'
+ );
+ $this->_jobTemplateBody = $options['JobTemplateBody'];
+ }
+
+ if (isset($options['NumberofInputAssets'])) {
+ Validate::isInteger(
+ $options['NumberofInputAssets'],
+ 'options[NumberofInputAssets]'
+ );
+ $this->_numberofInputAssets = $options['NumberofInputAssets'];
+ }
+
+ if (isset($options['TemplateType'])) {
+ Validate::isInteger($options['TemplateType'], 'options[TemplateType]');
+ $this->_templateType = $options['TemplateType'];
+ }
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set "Name"
+ *
+ * @param string $value Name
+ *
+ * @return none
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ }
+
+ /**
+ * Get "Last modified"
+ *
+ * @return \DateTime
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Get "Created"
+ *
+ * @return \DateTime
+ */
+ public function getCreated()
+ {
+ return $this->_created;
+ }
+
+ /**
+ * Get "job template id"
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * Get "Template type"
+ *
+ * @return int
+ */
+ public function getTemplateType()
+ {
+ return $this->_templateType;
+ }
+
+ /**
+ * Set "Template type"
+ *
+ * @param int $value Template type
+ *
+ * @return none
+ */
+ public function setTemplateType($value)
+ {
+ $this->_templateType = $value;
+ }
+
+ /**
+ * Get "Number of input assets"
+ *
+ * @return int
+ */
+ public function getNumberofInputAssets()
+ {
+ return $this->_numberofInputAssets;
+ }
+
+ /**
+ * Set "Number of input assets"
+ *
+ * @param int $value Number of input assets
+ *
+ * @return none
+ */
+ public function setNumberofInputAssets($value)
+ {
+ $this->_numberofInputAssets = $value;
+ }
+
+ /**
+ * Get "Job template body"
+ *
+ * @return string
+ */
+ public function getJobTemplateBody()
+ {
+ return $this->_jobTemplateBody;
+ }
+
+ /**
+ * Set "Job template body"
+ *
+ * @param string $value Job template body
+ *
+ * @return none
+ */
+ public function setJobTemplateBody($value)
+ {
+ $this->_jobTemplateBody = $value;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Locator.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Locator.php
new file mode 100644
index 0000000..be5ef0f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Locator.php
@@ -0,0 +1,413 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Represents locator object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Locator
+{
+ /**
+ * Type of Locator - none - The default enumeration value
+ *
+ * @var int
+ */
+ const TYPE_NONE = 0;
+
+ /**
+ * Type of Locator - SAS - Specifies Shared Access Signature (Sas)
+ *
+ * @var int
+ */
+ const TYPE_SAS = 1;
+
+ /**
+ * Type of Locator - OnDemandOrigin - Specifies a locator type which refers to
+ * an Azure Media Service On Demand Origin streaming endpoint
+ *
+ * @var int
+ */
+ const TYPE_ON_DEMAND_ORIGIN = 2;
+
+ /**
+ * Locator id
+ *
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Expiration date time
+ *
+ * @var \DateTime
+ */
+ private $_expirationDateTime;
+
+ /**
+ * Type
+ *
+ * @var int
+ */
+ private $_type;
+
+ /**
+ * Path
+ *
+ * @var string
+ */
+ private $_path;
+
+ /**
+ * Base URI
+ *
+ * @var string
+ */
+ private $_baseUri;
+
+ /**
+ * Content access component
+ *
+ * @var string
+ */
+ private $_contentAccessComponent;
+
+ /**
+ * Access policy Id
+ *
+ * @var string
+ */
+ private $_accessPolicyId;
+
+ /**
+ * Asset id
+ *
+ * @var string
+ */
+ private $_assetId;
+
+ /**
+ * Start time
+ *
+ * @var \DateTime
+ */
+ private $_startTime;
+
+ /**
+ * Create locator from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\Locator
+ */
+ public static function createFromOptions($options)
+ {
+ Validate::notNull($options['AssetId'], 'options[AssetId]');
+ Validate::notNull($options['AccessPolicyId'], 'options[AccessPolicyId]');
+ Validate::notNull($options['Type'], 'options[Type]');
+
+ $locator = new Locator(
+ $options['AssetId'],
+ $options['AccessPolicyId'],
+ $options['Type']
+ );
+ $locator->fromArray($options);
+
+ return $locator;
+ }
+
+ /**
+ * Create locator
+ *
+ * @param WindowsAzure\MediaServices\Models\Asset|string $asset A
+ * target asset
+ *
+ * @param WindowsAzure\MediaServices\Models\AccessPolicy|string $accessPolicy A
+ * target access policy
+ *
+ * @param int $type An
+ * enumeration value that describes the type of Locator.
+ */
+ public function __construct($asset, $accessPolicy, $type)
+ {
+ $this->_assetId = Utilities::getEntityId(
+ $asset,
+ 'WindowsAzure\MediaServices\Models\Asset'
+ );
+ $this->_accessPolicyId = Utilities::getEntityId(
+ $accessPolicy,
+ 'WindowsAzure\MediaServices\Models\AccessPolicy'
+ );
+ $this->_type = $type;
+ }
+
+ /**
+ * Fill locator from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Id'])) {
+ Validate::isString($options['Id'], 'options[Id]');
+ $this->_id = $options['Id'];
+ }
+
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['ExpirationDateTime'])) {
+ Validate::isDateString(
+ $options['ExpirationDateTime'],
+ 'options[ExpirationDateTime]'
+ );
+ $this->_expirationDateTime = new \DateTime(
+ $options['ExpirationDateTime']
+ );
+ }
+
+ if (isset($options['Type'])) {
+ Validate::isInteger($options['Type'], 'options[Type]');
+ $this->_type = $options['Type'];
+ }
+
+ if (isset($options['Path'])) {
+ Validate::isValidUri($options['Path'], 'options[Path]');
+ $this->_path = $options['Path'];
+ }
+
+ if (isset($options['BaseUri'])) {
+ Validate::isValidUri($options['BaseUri'], 'options[BaseUri]');
+ $this->_baseUri = $options['BaseUri'];
+ }
+
+ if (isset($options['ContentAccessComponent'])) {
+ Validate::isString(
+ $options['ContentAccessComponent'],
+ 'options[ContentAccessComponent]'
+ );
+ $this->_contentAccessComponent = $options['ContentAccessComponent'];
+ }
+
+ if (isset($options['AccessPolicyId'])) {
+ Validate::isString(
+ $options['AccessPolicyId'],
+ 'options[AccessPolicyId]'
+ );
+ $this->_accessPolicyId = $options['AccessPolicyId'];
+ }
+
+ if (isset($options['AssetId'])) {
+ Validate::isString($options['AssetId'], 'options[AssetId]');
+ $this->_assetId = $options['AssetId'];
+ }
+
+ if (isset($options['StartTime'])) {
+ Validate::isDateString($options['StartTime'], 'options[StartTime]');
+ $this->_startTime = new \DateTime($options['StartTime']);
+ }
+ }
+
+ /**
+ * Get "Start time"
+ *
+ * @return \DateTime
+ */
+ public function getStartTime()
+ {
+ return $this->_startTime;
+ }
+
+ /**
+ * Set "Start time"
+ *
+ * @param \DateTime $value Start time
+ *
+ * @return none
+ */
+ public function setStartTime($value)
+ {
+ $this->_startTime = $value;
+ }
+
+ /**
+ * Get "Asset id"
+ *
+ * @return string
+ */
+ public function getAssetId()
+ {
+ return $this->_assetId;
+ }
+
+ /**
+ * Get "Access policy Id"
+ *
+ * @return string
+ */
+ public function getAccessPolicyId()
+ {
+ return $this->_accessPolicyId;
+ }
+
+ /**
+ * Get "Content access component"
+ *
+ * @return string
+ */
+ public function getContentAccessComponent()
+ {
+ return $this->_contentAccessComponent;
+ }
+
+ /**
+ * Get "Base URI"
+ *
+ * @return string
+ */
+ public function getBaseUri()
+ {
+ return $this->_baseUri;
+ }
+
+ /**
+ * Get "Path"
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return $this->_path;
+ }
+
+ /**
+ * Get "Type"
+ *
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * Set "Type"
+ *
+ * @param int $value Type
+ *
+ * @return none
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ }
+
+ /**
+ * Get "Expiration date time"
+ *
+ * @return \DateTime
+ */
+ public function getExpirationDateTime()
+ {
+ return $this->_expirationDateTime;
+ }
+
+ /**
+ * Set "Expiration date time"
+ *
+ * @param \DateTime $value Expiration date time
+ *
+ * @return none
+ */
+ public function setExpirationDateTime($value)
+ {
+ $this->_expirationDateTime = $value;
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set "Name"
+ *
+ * @param string $value Name
+ *
+ * @return none
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ }
+
+ /**
+ * Get "Locator id"
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * Set "Locator id"
+ *
+ * @param string $value Locator id
+ *
+ * @return none
+ */
+ public function setId($value)
+ {
+ $this->_id = $value;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/MediaProcessor.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/MediaProcessor.php
new file mode 100644
index 0000000..f09fb9a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/MediaProcessor.php
@@ -0,0 +1,207 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+
+/**
+ * Represents task historical event object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class MediaProcessor
+{
+ /**
+ * id
+ *
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Description
+ *
+ * @var string
+ */
+ private $_description;
+
+ /**
+ * SKU
+ *
+ * @var string
+ */
+ private $_sku;
+
+ /**
+ * Vendor
+ *
+ * @var string
+ */
+ private $_vendor;
+
+ /**
+ * Version
+ *
+ * @var string
+ */
+ private $_version;
+
+ /**
+ * Create media processor from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\MediaProcessor
+ */
+ public static function createFromOptions($options)
+ {
+ $mediaProcessor = new MediaProcessor();
+ $mediaProcessor->fromArray($options);
+
+ return $mediaProcessor;
+ }
+
+ /**
+ * Create media processor
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Fill media processor from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Id'])) {
+ Validate::isString($options['Id'], 'options[Id]');
+ $this->_id = $options['Id'];
+ }
+
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['Description'])) {
+ Validate::isString($options['Description'], 'options[Description]');
+ $this->_description = $options['Description'];
+ }
+
+ if (isset($options['Sku'])) {
+ Validate::isString($options['Sku'], 'options[Sku]');
+ $this->_sku = $options['Sku'];
+ }
+
+ if (isset($options['Vendor'])) {
+ Validate::isString($options['Vendor'], 'options[Vendor]');
+ $this->_vendor = $options['Vendor'];
+ }
+
+ if (isset($options['Version'])) {
+ Validate::isString($options['Version'], 'options[Version]');
+ $this->_version = $options['Version'];
+ }
+
+ }
+
+ /**
+ * Get "Version"
+ *
+ * @return string
+ */
+ public function getVersion()
+ {
+ return $this->_version;
+ }
+
+ /**
+ * Get "Vendor"
+ *
+ * @return string
+ */
+ public function getVendor()
+ {
+ return $this->_vendor;
+ }
+
+ /**
+ * Get "SKU"
+ *
+ * @return string
+ */
+ public function getSku()
+ {
+ return $this->_sku;
+ }
+
+ /**
+ * Get "Description"
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->_description;
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Get "id"
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/StorageAccount.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/StorageAccount.php
new file mode 100644
index 0000000..c1c9a9b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/StorageAccount.php
@@ -0,0 +1,118 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Represents storage account object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class StorageAccount
+{
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Is default
+ *
+ * @var boolean
+ */
+ private $_isDefault;
+
+ /**
+ * Create storage account from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\StorageAccount
+ */
+ public static function createFromOptions($options)
+ {
+ $storageAccount = new StorageAccount();
+ $storageAccount->fromArray($options);
+
+ return $storageAccount;
+ }
+
+ /**
+ * Create storage account
+ *
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Fill storage account from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['IsDefault'])) {
+ Validate::isBoolean($options['IsDefault'], 'options[IsDefault]');
+ $this->_isDefault = $options['IsDefault'];
+ }
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Get "Is default"
+ *
+ * @return boolean
+ */
+ public function getIsDefault()
+ {
+ return $this->_isDefault;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Task.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Task.php
new file mode 100644
index 0000000..89728f8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/Task.php
@@ -0,0 +1,675 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\MediaServices\Models\TaskHistoricalEvent;
+use WindowsAzure\MediaServices\Models\ErrorDetail;
+
+
+/**
+ * Represents task object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Task
+{
+ /**
+ * The state of the task "none"
+ *
+ * @var int
+ */
+ const STATE_NONE = 0;
+
+ /**
+ * The state of the task "active"
+ *
+ * @var int
+ */
+ const STATE_ACTIVE = 1;
+
+ /**
+ * The state of the task "running"
+ *
+ * @var int
+ */
+ const STATE_RUNNING = 2;
+
+ /**
+ * The state of the task "completed"
+ *
+ * @var int
+ */
+ const STATE_COMPLETED = 3;
+
+ /**
+ * Task id
+ *
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * Configuration
+ *
+ * @var string
+ */
+ private $_configuration;
+
+ /**
+ * End tine
+ *
+ * @var \DateTime
+ */
+ private $_endTime;
+
+ /**
+ * Media procesot id
+ *
+ * @var string
+ */
+ private $_mediaProcessorId;
+
+ /**
+ * Perfoemance message
+ *
+ * @var string
+ */
+ private $_perfMessage;
+
+ /**
+ * Progress
+ *
+ * @var double
+ */
+ private $_progress;
+
+ /**
+ * Running duration
+ *
+ * @var double
+ */
+ private $_runningDuration;
+
+ /**
+ * Task body
+ *
+ * @var string
+ */
+ private $_taskBody;
+
+ /**
+ * Options
+ *
+ * @var int
+ */
+ private $_options;
+
+ /**
+ * Encription key id
+ *
+ * @var string
+ */
+ private $_encryptionKeyId;
+
+ /**
+ * Encryption scheme
+ *
+ * @var string
+ */
+ private $_encryptionScheme;
+
+ /**
+ * Encryption version
+ *
+ * @var string
+ */
+ private $_encryptionVersion;
+
+ /**
+ * Initialization vector
+ *
+ * @var string
+ */
+ private $_initializationVector;
+
+ /**
+ * State
+ *
+ * @var int
+ */
+ private $_state;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Priority
+ *
+ * @var int
+ */
+ private $_priority;
+
+ /**
+ * Start time
+ *
+ * @var \DateTime
+ */
+ private $_startTime;
+
+ /**
+ * HistoricalEvents
+ *
+ * @var array
+ */
+ private $_historicalEvents;
+
+ /**
+ * ErrorDetails
+ *
+ * @var array
+ */
+ private $_errorDetails;
+
+ /**
+ * Create task from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\Task
+ */
+ public static function createFromOptions($options)
+ {
+ Validate::notNull($options['TaskBody'], 'options[TaskBody]');
+ Validate::notNull($options['Options'], 'options[Options]');
+ Validate::notNull($options['MediaProcessorId'], 'options[MediaProcessorId]');
+
+ $task = new Task(
+ $options['TaskBody'],
+ $options['MediaProcessorId'],
+ $options['Options']
+ );
+ $task->fromArray($options);
+
+ return $task;
+ }
+
+ /**
+ * Create task
+ *
+ * @param string $taskBody Task body.
+ * @param string $mediaProcessorId Media processor identifier.
+ * @param int $options Task encryption options.
+ */
+ public function __construct($taskBody, $mediaProcessorId, $options)
+ {
+ $this->_taskBody = $taskBody;
+ $this->_options = $options;
+ $this->_mediaProcessorId = $mediaProcessorId;
+ }
+
+ /**
+ * Fill task from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Id'])) {
+ Validate::isString($options['Id'], 'options[Id]');
+ $this->_id = $options['Id'];
+ }
+
+ if (isset($options['Configuration'])) {
+ Validate::isString($options['Configuration'], 'options[Configuration]');
+ $this->_configuration = $options['Configuration'];
+ }
+
+ if (isset($options['EndTime'])) {
+ Validate::isDateString($options['EndTime'], 'options[EndTime]');
+ $this->_endTime = new \DateTime($options['EndTime']);
+ }
+
+ if (isset($options['MediaProcessorId'])) {
+ Validate::isString(
+ $options['MediaProcessorId'],
+ 'options[MediaProcessorId]'
+ );
+ $this->_mediaProcessorId = $options['MediaProcessorId'];
+ }
+
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['PerfMessage'])) {
+ Validate::isString($options['PerfMessage'], 'options[PerfMessage]');
+ $this->_perfMessage = $options['PerfMessage'];
+ }
+
+ if (isset($options['Priority'])) {
+ Validate::isInteger($options['Priority'], 'options[Priority]');
+ $this->_priority = $options['Priority'];
+ }
+
+ if (isset($options['Progress'])) {
+ Validate::isDouble($options['Progress'], 'options[Progress]');
+ $this->_progress = $options['Progress'];
+ }
+
+ if (isset($options['RunningDuration'])) {
+ Validate::isDouble(
+ $options['RunningDuration'],
+ 'options[RunningDuration]'
+ );
+ $this->_runningDuration = $options['RunningDuration'];
+ }
+
+ if (isset($options['StartTime'])) {
+ Validate::isDateString($options['StartTime'], 'options[StartTime]');
+ $this->_startTime = new \DateTime($options['StartTime']);
+ }
+
+ if (isset($options['State'])) {
+ Validate::isInteger($options['State'], 'options[State]');
+ $this->_state = $options['State'];
+ }
+
+ if (isset($options['TaskBody'])) {
+ Validate::isString($options['TaskBody'], 'options[TaskBody]');
+ $this->_taskBody = $options['TaskBody'];
+ }
+
+ if (isset($options['Options'])) {
+ Validate::isInteger($options['Options'], 'options[Options]');
+ $this->_options = $options['Options'];
+ }
+
+ if (isset($options['EncryptionKeyId'])) {
+ Validate::isString(
+ $options['EncryptionKeyId'],
+ 'options[EncryptionKeyId]'
+ );
+ $this->_encryptionKeyId = $options['EncryptionKeyId'];
+ }
+
+ if (isset($options['EncryptionScheme'])) {
+ Validate::isString(
+ $options['EncryptionScheme'],
+ 'options[EncryptionScheme]'
+ );
+ $this->_encryptionScheme = $options['EncryptionScheme'];
+ }
+
+ if (isset($options['EncryptionVersion'])) {
+ Validate::isString(
+ $options['EncryptionVersion'],
+ 'options[EncryptionVersion]'
+ );
+ $this->_encryptionVersion = $options['EncryptionVersion'];
+ }
+
+ if (isset($options['InitializationVector'])) {
+ Validate::isString(
+ $options['InitializationVector'],
+ 'options[InitializationVector]'
+ );
+ $this->_initializationVector = $options['InitializationVector'];
+ }
+
+ if (isset($options['ErrorDetails'])) {
+ $this->_errorDetails = array();
+ if (is_array($options['ErrorDetails'])) {
+ foreach ($options['ErrorDetails'] as $errorDetail) {
+ $this->_errorDetails[] = ErrorDetail::createFromOptions(
+ $errorDetail
+ );
+ }
+ }
+ }
+
+ if (isset($options['HistoricalEvents'])) {
+ $this->_historicalEvents = array();
+ if (is_array($options['HistoricalEvents'])) {
+ foreach ($options['HistoricalEvents'] as $historicalEvent) {
+ $evnt = TaskHistoricalEvent::createFromOptions($historicalEvent);
+ $this->_historicalEvents[] = $evnt;
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set "Name"
+ *
+ * @param string $value Name
+ *
+ * @return none
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ }
+
+ /**
+ * Get "State"
+ *
+ * @return int
+ */
+ public function getState()
+ {
+ return $this->_state;
+ }
+
+ /**
+ * Get "Task id"
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * Get "Start time"
+ *
+ * @return \DateTime
+ */
+ public function getStartTime()
+ {
+ return $this->_startTime;
+ }
+
+ /**
+ * Get "Running duration"
+ *
+ * @return double
+ */
+ public function getRunningDuration()
+ {
+ return $this->_runningDuration;
+ }
+
+ /**
+ * Get "Priority"
+ *
+ * @return int
+ */
+ public function getPriority()
+ {
+ return $this->_priority;
+ }
+
+ /**
+ * Set "Priority"
+ *
+ * @param int $value Priority
+ *
+ * @return none
+ */
+ public function setPriority($value)
+ {
+ $this->_priority = $value;
+ }
+
+ /**
+ * Get "End time"
+ *
+ * @return \DateTime
+ */
+ public function getEndTime()
+ {
+ return $this->_endTime;
+ }
+
+ /**
+ * Get "Initialization vector"
+ *
+ * @return string
+ */
+ public function getInitializationVector()
+ {
+ return $this->_initializationVector;
+ }
+
+ /**
+ * Set "Initialization vector"
+ *
+ * @param string $value Initialization vector
+ *
+ * @return none
+ */
+ public function setInitializationVector($value)
+ {
+ $this->_initializationVector = $value;
+ }
+
+ /**
+ * Get "Encryption version"
+ *
+ * @return string
+ */
+ public function getEncryptionVersion()
+ {
+ return $this->_encryptionVersion;
+ }
+
+ /**
+ * Set "Encryption version"
+ *
+ * @param string $value Encryption version
+ *
+ * @return none
+ */
+ public function setEncryptionVersion($value)
+ {
+ $this->_encryptionVersion = $value;
+ }
+
+ /**
+ * Get "Encryption scheme"
+ *
+ * @return string
+ */
+ public function getEncryptionScheme()
+ {
+ return $this->_encryptionScheme;
+ }
+
+ /**
+ * Set "Encryption scheme"
+ *
+ * @param string $value Encryption scheme
+ *
+ * @return none
+ */
+ public function setEncryptionScheme($value)
+ {
+ $this->_encryptionScheme = $value;
+ }
+
+ /**
+ * Get "Encription key id"
+ *
+ * @return string
+ */
+ public function getEncryptionKeyId()
+ {
+ return $this->_encryptionKeyId;
+ }
+
+ /**
+ * Set "Encription key id"
+ *
+ * @param string $value Encription key id
+ *
+ * @return none
+ */
+ public function setEncryptionKeyId($value)
+ {
+ $this->_encryptionKeyId = $value;
+ }
+
+ /**
+ * Get "Options"
+ *
+ * @return int
+ */
+ public function getOptions()
+ {
+ return $this->_options;
+ }
+
+ /**
+ * Get "Task body"
+ *
+ * @return string
+ */
+ public function getTaskBody()
+ {
+ return $this->_taskBody;
+ }
+
+ /**
+ * Set "Task body"
+ *
+ * @param string $value Task body
+ *
+ * @return none
+ */
+ public function setTaskBody($value)
+ {
+ $this->_taskBody = $value;
+ }
+
+ /**
+ * Get "Progress"
+ *
+ * @return double
+ */
+ public function getProgress()
+ {
+ return $this->_progress;
+ }
+
+ /**
+ * Get "Perfoemance message"
+ *
+ * @return string
+ */
+ public function getPerfMessage()
+ {
+ return $this->_perfMessage;
+ }
+
+ /**
+ * Get "Media procesot id"
+ *
+ * @return string
+ */
+ public function getMediaProcessorId()
+ {
+ return $this->_mediaProcessorId;
+ }
+
+ /**
+ * Set "Media procesot id"
+ *
+ * @param string $value Media procesot id
+ *
+ * @return none
+ */
+ public function setMediaProcessorId($value)
+ {
+ $this->_mediaProcessorId = $value;
+ }
+
+ /**
+ * Get "Configuration"
+ *
+ * @return string
+ */
+ public function getConfiguration()
+ {
+ return $this->_configuration;
+ }
+
+ /**
+ * Set "Configuration"
+ *
+ * @param string $value Configuration
+ *
+ * @return none
+ */
+ public function setConfiguration($value)
+ {
+ $this->_configuration = $value;
+ }
+
+ /**
+ * Get "ErrorDetails"
+ *
+ * @return array
+ */
+ public function getErrorDetails()
+ {
+ return $this->_errorDetails;
+ }
+
+ /**
+ * Get "HistoricalEvents"
+ *
+ * @return array
+ */
+ public function getHistoricalEvents()
+ {
+ return $this->_historicalEvents;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/TaskHistoricalEvent.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/TaskHistoricalEvent.php
new file mode 100644
index 0000000..f9c4d76
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/TaskHistoricalEvent.php
@@ -0,0 +1,140 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+
+/**
+ * Represents task historical event object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class TaskHistoricalEvent
+{
+ /**
+ * Code
+ *
+ * @var int
+ */
+ private $_code;
+
+ /**
+ * Message
+ *
+ * @var string
+ */
+ private $_message;
+
+ /**
+ * Time stamp
+ *
+ * @var \DateTime
+ */
+ private $_timeStamp;
+
+ /**
+ * Create task historical event from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\TaskHistoricalEvent
+ */
+ public static function createFromOptions($options)
+ {
+ $taskHistoricalEvent = new TaskHistoricalEvent();
+ $taskHistoricalEvent->fromArray($options);
+
+ return $taskHistoricalEvent;
+ }
+
+ /**
+ * Create task historical event
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Fill task historical event from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Code'])) {
+ Validate::isInteger($options['Code'], 'options[Code]');
+ $this->_code = $options['Code'];
+ }
+
+ if (isset($options['Message'])) {
+ Validate::isString($options['Message'], 'options[Message]');
+ $this->_message = $options['Message'];
+ }
+
+ if (isset($options['TimeStamp'])) {
+ Validate::isDateString($options['TimeStamp'], 'options[TimeStamp]');
+ $this->_timeStamp = new \DateTime($options['TimeStamp']);
+ }
+ }
+
+ /**
+ * Get "Time stamp"
+ *
+ * @return \DateTime
+ */
+ public function getTimeStamp()
+ {
+ return $this->_timeStamp;
+ }
+
+ /**
+ * Get "Message"
+ *
+ * @return string
+ */
+ public function getMessage()
+ {
+ return $this->_message;
+ }
+
+ /**
+ * Get "Code"
+ *
+ * @return int
+ */
+ public function getCode()
+ {
+ return $this->_code;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/TaskOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/TaskOptions.php
new file mode 100644
index 0000000..b3d9862
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/TaskOptions.php
@@ -0,0 +1,56 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+
+/**
+ * Represents task options enum used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class TaskOptions
+{
+ /**
+ * The options of the task "none"
+ *
+ * @var int
+ */
+ const NONE = 0;
+
+ /**
+ * The options of the task "protected configuration"
+ *
+ * @var int
+ */
+ const PROTECTED_CONFIGURATION = 1;
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/TaskTemplate.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/TaskTemplate.php
new file mode 100644
index 0000000..d00ed9c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/MediaServices/Models/TaskTemplate.php
@@ -0,0 +1,547 @@
+
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\MediaServices\Models;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+
+
+/**
+ * Represents task template object used in media services
+ *
+ * @category Microsoft
+ * @package WindowsAzure\MediaServices\Models
+ * @author Azure PHP SDK
+ * @copyright Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class TaskTemplate
+{
+ /**
+ * Task template id
+ *
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * Configuration
+ *
+ * @var string
+ */
+ private $_configuration;
+
+ /**
+ * Created
+ *
+ * @var \DateTime
+ */
+ private $_created;
+
+ /**
+ * Last modified date
+ *
+ * @var \DateTime
+ */
+ private $_lastModified;
+
+ /**
+ * Description
+ *
+ * @var string
+ */
+ private $_description;
+
+ /**
+ * Media processor id
+ *
+ * @var string
+ */
+ private $_mediaProcessorId;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Number of input assets
+ *
+ * @var int
+ */
+ private $_numberofInputAssets;
+
+ /**
+ * Number of output assets
+ *
+ * @var int
+ */
+ private $_numberofOutputAssets;
+
+ /**
+ * Options
+ *
+ * @var int
+ */
+ private $_options;
+
+ /**
+ * Encription key id
+ *
+ * @var string
+ */
+ private $_encryptionKeyId;
+
+ /**
+ * Encryption scheme
+ *
+ * @var string
+ */
+ private $_encryptionScheme;
+
+ /**
+ * Encryption version
+ *
+ * @var string
+ */
+ private $_encryptionVersion;
+
+ /**
+ * Initialization vector
+ *
+ * @var string
+ */
+ private $_initializationVector;
+
+ /**
+ * Create task template from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return WindowsAzure\MediaServices\Models\TaskTemplate
+ */
+ public static function createFromOptions($options)
+ {
+ Validate::notNull(
+ $options['NumberofInputAssets'],
+ 'options[NumberofInputAssets]'
+ );
+ Validate::notNull(
+ $options['NumberofOutputAssets'],
+ 'options[NumberofOutputAssets]'
+ );
+
+ $taskTemplate = new TaskTemplate(
+ $options['NumberofInputAssets'],
+ $options['NumberofOutputAssets']
+ );
+ $taskTemplate->fromArray($options);
+
+ return $taskTemplate;
+ }
+
+ /**
+ * Create task
+ *
+ * @param int $numberOfInputAssets Number of input Assets the TaskTemplate
+ * must process.
+ * @param int $numberOfOutputAssets Number of output Assets the TaskTemplate
+ * must process.
+ */
+ public function __construct($numberOfInputAssets, $numberOfOutputAssets)
+ {
+ $this->_id = 'nb:ttid:UUID:' . Utilities::getGuid();
+ $this->_numberofInputAssets = $numberOfInputAssets;
+ $this->_numberofOutputAssets = $numberOfOutputAssets;
+ }
+
+ /**
+ * Fill task template from array
+ *
+ * @param array $options Array containing values for object properties
+ *
+ * @return none
+ */
+ public function fromArray($options)
+ {
+ if (isset($options['Id'])) {
+ Validate::isString($options['Id'], 'options[Id]');
+ $this->_id = $options['Id'];
+ }
+
+ if (isset($options['Configuration'])) {
+ Validate::isString($options['Configuration'], 'options[Configuration]');
+ $this->_configuration = $options['Configuration'];
+ }
+
+ if (isset($options['Created'])) {
+ Validate::isDateString($options['Created'], 'options[Created]');
+ $this->_created = new \DateTime($options['Created']);
+ }
+
+ if (isset($options['Description'])) {
+ Validate::isString($options['Description'], 'options[Description]');
+ $this->_description = $options['Description'];
+ }
+
+ if (isset($options['LastModified'])) {
+ Validate::isDateString(
+ $options['LastModified'],
+ 'options[LastModified]'
+ );
+ $this->_lastModified = new \DateTime($options['LastModified']);
+ }
+
+ if (isset($options['MediaProcessorId'])) {
+ Validate::isString(
+ $options['MediaProcessorId'],
+ 'options[MediaProcessorId]'
+ );
+ $this->_mediaProcessorId = $options['MediaProcessorId'];
+ }
+
+ if (isset($options['Name'])) {
+ Validate::isString($options['Name'], 'options[Name]');
+ $this->_name = $options['Name'];
+ }
+
+ if (isset($options['NumberofInputAssets'])) {
+ Validate::isInteger(
+ $options['NumberofInputAssets'],
+ 'options[NumberofInputAssets]'
+ );
+ $this->_numberofInputAssets = $options['NumberofInputAssets'];
+ }
+
+ if (isset($options['NumberofOutputAssets'])) {
+ Validate::isInteger(
+ $options['NumberofOutputAssets'],
+ 'options[NumberofOutputAssets]'
+ );
+ $this->_numberofOutputAssets = $options['NumberofOutputAssets'];
+ }
+
+ if (isset($options['Options'])) {
+ Validate::isInteger($options['Options'], 'options[Options]');
+ $this->_options = $options['Options'];
+ }
+
+ if (isset($options['EncryptionKeyId'])) {
+ Validate::isString(
+ $options['EncryptionKeyId'],
+ 'options[EncryptionKeyId]'
+ );
+ $this->_encryptionKeyId = $options['EncryptionKeyId'];
+ }
+
+ if (isset($options['EncryptionScheme'])) {
+ Validate::isString(
+ $options['EncryptionScheme'],
+ 'options[EncryptionScheme]'
+ );
+ $this->_encryptionScheme = $options['EncryptionScheme'];
+ }
+
+ if (isset($options['EncryptionVersion'])) {
+ Validate::isString(
+ $options['EncryptionVersion'],
+ 'options[EncryptionVersion]'
+ );
+ $this->_encryptionVersion = $options['EncryptionVersion'];
+ }
+
+ if (isset($options['InitializationVector'])) {
+ Validate::isString(
+ $options['InitializationVector'],
+ 'options[InitializationVector]'
+ );
+ $this->_initializationVector = $options['InitializationVector'];
+ }
+ }
+
+ /**
+ * Get "Name"
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set "Name"
+ *
+ * @param string $value Name
+ *
+ * @return none
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ }
+
+ /**
+ * Get "Task template id"
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * Get "Initialization vector"
+ *
+ * @return string
+ */
+ public function getInitializationVector()
+ {
+ return $this->_initializationVector;
+ }
+
+ /**
+ * Set "Initialization vector"
+ *
+ * @param string $value Initialization vector
+ *
+ * @return none
+ */
+ public function setInitializationVector($value)
+ {
+ $this->_initializationVector = $value;
+ }
+
+ /**
+ * Get "Encryption version"
+ *
+ * @return string
+ */
+ public function getEncryptionVersion()
+ {
+ return $this->_encryptionVersion;
+ }
+
+ /**
+ * Set "Encryption version"
+ *
+ * @param string $value Encryption version
+ *
+ * @return none
+ */
+ public function setEncryptionVersion($value)
+ {
+ $this->_encryptionVersion = $value;
+ }
+
+ /**
+ * Get "Encryption scheme"
+ *
+ * @return string
+ */
+ public function getEncryptionScheme()
+ {
+ return $this->_encryptionScheme;
+ }
+
+ /**
+ * Set "Encryption scheme"
+ *
+ * @param string $value Encryption scheme
+ *
+ * @return none
+ */
+ public function setEncryptionScheme($value)
+ {
+ $this->_encryptionScheme = $value;
+ }
+
+ /**
+ * Get "Encription key id"
+ *
+ * @return string
+ */
+ public function getEncryptionKeyId()
+ {
+ return $this->_encryptionKeyId;
+ }
+
+ /**
+ * Set "Encription key id"
+ *
+ * @param string $value Encription key id
+ *
+ * @return none
+ */
+ public function setEncryptionKeyId($value)
+ {
+ $this->_encryptionKeyId = $value;
+ }
+
+ /**
+ * Get "Options"
+ *
+ * @return int
+ */
+ public function getOptions()
+ {
+ return $this->_options;
+ }
+
+ /**
+ * Get "Media processor id"
+ *
+ * @return string
+ */
+ public function getMediaProcessorId()
+ {
+ return $this->_mediaProcessorId;
+ }
+
+ /**
+ * Set "Media processor id"
+ *
+ * @param string $value Media procesot id
+ *
+ * @return none
+ */
+ public function setMediaProcessorId($value)
+ {
+ $this->_mediaProcessorId = $value;
+ }
+
+ /**
+ * Get "Configuration"
+ *
+ * @return string
+ */
+ public function getConfiguration()
+ {
+ return $this->_configuration;
+ }
+
+ /**
+ * Set "Configuration"
+ *
+ * @param string $value Configuration
+ *
+ * @return none
+ */
+ public function setConfiguration($value)
+ {
+ $this->_configuration = $value;
+ }
+
+ /**
+ * Get "Created"
+ *
+ * @return \DateTime
+ */
+ public function getCreated()
+ {
+ return $this->_created;
+ }
+
+ /**
+ * Get "Last modified date"
+ *
+ * @return \DateTime
+ */
+ public function getLastModified()
+ {
+ return $this->_lastModified;
+ }
+
+ /**
+ * Get "Description"
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->_description;
+ }
+
+ /**
+ * Set "Description"
+ *
+ * @param string $value Description
+ *
+ * @return none
+ */
+ public function setDescription($value)
+ {
+ $this->_description = $value;
+ }
+
+ /**
+ * Get "Number of output assets"
+ *
+ * @return int
+ */
+ public function getNumberofOutputAssets()
+ {
+ return $this->_numberofOutputAssets;
+ }
+
+ /**
+ * Set "Number of output assets"
+ *
+ * @param int $value Number of output assets
+ *
+ * @return none
+ */
+ public function setNumberofOutputAssets($value)
+ {
+ $this->_numberofOutputAssets = $value;
+ }
+
+ /**
+ * Get "Number of input assets"
+ *
+ * @return int
+ */
+ public function getNumberofInputAssets()
+ {
+ return $this->_numberofInputAssets;
+ }
+
+ /**
+ * Set "Number of input assets"
+ *
+ * @param int $value Number of input assets
+ *
+ * @return none
+ */
+ public function setNumberofInputAssets($value)
+ {
+ $this->_numberofInputAssets = $value;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Internal/IQueue.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Internal/IQueue.php
new file mode 100644
index 0000000..aa8fa56
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Internal/IQueue.php
@@ -0,0 +1,197 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Internal;
+use WindowsAzure\Common\Internal\FilterableService;
+
+/**
+ * This interface has all REST APIs provided by Windows Azure for queue service
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179363.aspx
+ */
+interface IQueue extends FilterableService
+{
+ /**
+ * Gets the properties of the Queue service.
+ *
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\GetServicePropertiesResult
+ */
+ public function getServiceProperties($options = null);
+
+ /**
+ * Sets the properties of the Queue service.
+ *
+ * It's recommended to use getServiceProperties, alter the returned object and
+ * then use setServiceProperties with this altered object.
+ *
+ * @param array $serviceProperties The new service properties.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function setServiceProperties($serviceProperties, $options = null);
+
+ /**
+ * Creates a new queue under the storage account.
+ *
+ * @param string $queueName The queue name.
+ * @param QueueCreateOptions $options The optional queue create options.
+ *
+ * @return none
+ */
+ public function createQueue($queueName, $options = null);
+
+ /**
+ * Deletes a queue.
+ *
+ * @param string $queueName The queue name.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function deleteQueue($queueName, $options);
+
+ /**
+ * Lists all queues in the storage account.
+ *
+ * @param ListQueuesOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\ListQueuesResult
+ */
+ public function listQueues($options = null);
+
+ /**
+ * Returns queue properties, including user-defined metadata.
+ *
+ * @param string $queueName The queue name.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\GetQueueMetadataResult
+ */
+ public function getQueueMetadata($queueName, $options = null);
+
+ /**
+ * Sets user-defined metadata on the queue. To delete queue metadata, call
+ * this API without specifying any metadata in $metadata.
+ *
+ * @param string $queueName The queue name.
+ * @param array $metadata The metadata array.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function setQueueMetadata($queueName, $metadata, $options = null);
+
+ /**
+ * Adds a message to the queue and optionally sets a visibility timeout
+ * for the message.
+ *
+ * @param string $queueName The queue name.
+ * @param string $messageText The message contents.
+ * @param CreateMessageOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function createMessage($queueName, $messageText, $options = null);
+
+ /**
+ * Updates the visibility timeout of a message and/or the message contents.
+ *
+ * @param string $queueName The queue name.
+ * @param string $messageId The id of the message.
+ * @param string $popReceipt The valid pop receipt
+ * value returned from an earlier call to the Get Messages or Update Message
+ * operation.
+ * @param string $messageText The message contents.
+ * @param int $visibilityTimeoutInSeconds Specifies the new
+ * visibility timeout value, in seconds, relative to server time.
+ * The new value must be larger than or equal to 0, and cannot be larger
+ * than 7 days. The visibility timeout of a message cannot be set to a value
+ * later than the expiry time. A message can be updated until it has been
+ * deleted or has expired.
+ * @param QueueServiceOptions $options The optional
+ * parameters.
+ *
+ * @return WindowsAzure\Common\Models\UpdateMessageResult
+ */
+ public function updateMessage($queueName, $messageId, $popReceipt, $messageText,
+ $visibilityTimeoutInSeconds, $options = null
+ );
+
+ /**
+ * Deletes a specified message from the queue.
+ *
+ * @param string $queueName The queue name.
+ * @param string $messageId The id of the message.
+ * @param string $popReceipt The valid pop receipt value returned
+ * from an earlier call to the Get Messages or Update Message operation.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function deleteMessage($queueName, $messageId, $popReceipt,
+ $options = null
+ );
+
+ /**
+ * Lists all messages in the queue.
+ *
+ * @param string $queueName The queue name.
+ * @param ListMessagesOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\ListMessagesResult
+ */
+ public function listMessages($queueName, $options = null);
+
+ /**
+ * Retrieves a message from the front of the queue, without changing
+ * the message visibility.
+ *
+ * @param string $queueName The queue name.
+ * @param PeekMessagesOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\PeekMessagesResult
+ */
+ public function peekMessages($queueName, $options = null);
+
+ /**
+ * Clears all messages from the queue.
+ *
+ * @param string $queueName The queue name.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\PeekMessagesResult
+ */
+ public function clearMessages($queueName, $options = null);
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/CreateMessageOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/CreateMessageOptions.php
new file mode 100644
index 0000000..dcf3b5b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/CreateMessageOptions.php
@@ -0,0 +1,107 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+
+/**
+ * Holds optional parameters for createMessage wrapper.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateMessageOptions extends QueueServiceOptions
+{
+ /**
+ * If specified, the request must be made using an x-ms-version
+ * of 2011-08-18 or newer. If not specified, the default value is 0.
+ * Specifies the new visibility timeout value, in seconds, relative to server
+ * time. The new value must be larger than or equal to 0, and cannot be
+ * larger than 7 days. The visibility timeout of a message cannot be set to a
+ * value later than the expiry time. visibilitytimeout should be set to a
+ * value smaller than the time-to-live value.
+ *
+ * @var integer
+ */
+ private $_visibilityTimeoutInSeconds;
+
+ /**
+ * Specifies the time-to-live interval for the message, in seconds.
+ * The maximum time-to-live allowed is 7 days. If this parameter is omitted,
+ * the default time-to-live is 7 days.
+ *
+ * @var integer
+ */
+ private $_timeToLiveInSeconds;
+
+ /**
+ * Gets visibilityTimeoutInSeconds field.
+ *
+ * @return integer
+ */
+ public function getVisibilityTimeoutInSeconds()
+ {
+ return $this->_visibilityTimeoutInSeconds;
+ }
+
+ /**
+ * Sets visibilityTimeoutInSeconds field.
+ *
+ * @param integer $visibilityTimeoutInSeconds value to use.
+ *
+ * @return none
+ */
+ public function setVisibilityTimeoutInSeconds($visibilityTimeoutInSeconds)
+ {
+ $this->_visibilityTimeoutInSeconds = $visibilityTimeoutInSeconds;
+ }
+
+ /**
+ * Gets timeToLiveInSeconds field.
+ *
+ * @return integer
+ */
+ public function getTimeToLiveInSeconds()
+ {
+ return $this->_timeToLiveInSeconds;
+ }
+
+ /**
+ * Sets timeToLiveInSeconds field.
+ *
+ * @param integer $timeToLiveInSeconds value to use.
+ *
+ * @return none
+ */
+ public function setTimeToLiveInSeconds($timeToLiveInSeconds)
+ {
+ $this->_timeToLiveInSeconds = $timeToLiveInSeconds;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/CreateQueueOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/CreateQueueOptions.php
new file mode 100644
index 0000000..32774ff
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/CreateQueueOptions.php
@@ -0,0 +1,80 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+
+/**
+ * Optional parameters for Create Queue REST API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateQueueOptions extends QueueServiceOptions
+{
+ private $_metadata;
+
+ /**
+ * Gets user defined metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets user defined metadata. This metadata should be added without the header
+ * prefix (x-ms-meta-*).
+ *
+ * @param array $metadata user defined metadata object in array form.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+ /**
+ * Adds new metadata element. This element should be added without the header
+ * prefix (x-ms-meta-*).
+ *
+ * @param string $key metadata key element.
+ * @param string $value metadata value element.
+ *
+ * @return none.
+ */
+ public function addMetadata($key, $value)
+ {
+ $this->_metadata[$key] = $value;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/GetQueueMetadataResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/GetQueueMetadataResult.php
new file mode 100644
index 0000000..667c649
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/GetQueueMetadataResult.php
@@ -0,0 +1,112 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+
+/**
+ * Holds result from calling GetQueueMetadata wrapper
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetQueueMetadataResult
+{
+ /**
+ * Indicates the approximate number of messages in the queue
+ *
+ * @var integer
+ */
+ private $_approximateMessageCount;
+
+ /**
+ * A user-defined name/value pair
+ *
+ * @var array
+ */
+ private $_metadata;
+
+ /**
+ * Constructor
+ *
+ * @param integer $approximateMessageCount Approximate number of queue messages.
+ * @param array $metadata user defined metadata.
+ */
+ public function __construct($approximateMessageCount, $metadata)
+ {
+ $this->_approximateMessageCount = $approximateMessageCount;
+ $this->_metadata = is_null($metadata) ? array() : $metadata;
+ }
+
+ /**
+ * Gets approximate message count.
+ *
+ * @return integer
+ */
+ public function getApproximateMessageCount()
+ {
+ return $this->_approximateMessageCount;
+ }
+
+ /**
+ * Sets approximate message count.
+ *
+ * @param integer $approximateMessageCount value to use.
+ *
+ * @return none
+ */
+ public function setApproximateMessageCount($approximateMessageCount)
+ {
+ $this->_approximateMessageCount = $approximateMessageCount;
+ }
+
+ /**
+ * Sets metadata.
+ *
+ * @return array
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets metadata.
+ *
+ * @param array $metadata value to use.
+ *
+ * @return none
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListMessagesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListMessagesOptions.php
new file mode 100644
index 0000000..08c2915
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListMessagesOptions.php
@@ -0,0 +1,107 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+
+/**
+ * Optional parameters for list messages wrapper.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListMessagesOptions extends QueueServiceOptions
+{
+ /**
+ * A nonzero integer value that specifies the number of messages to retrieve
+ * from the queue, up to a maximum of 32. If fewer are visible,
+ * the visible messages are returned. By default, a single message is retrieved
+ * from the queue with this operation.
+ *
+ * @var integer
+ */
+ private $_numberOfMessages;
+
+ /**
+ * Specifies the new visibility timeout value, in seconds,
+ * relative to server time. The new value must be larger than or equal to
+ * 1 second, and cannot be larger than 7 days, or larger than 2 hours on
+ * REST protocol versions prior to version 2011-08-18.
+ * The visibility timeout of a message can be set to a value later than the
+ * expiry time.
+ *
+ * @var integer
+ */
+ private $_visibilityTimeoutInSeconds;
+
+ /**
+ * Gets visibilityTimeoutInSeconds field.
+ *
+ * @return integer
+ */
+ public function getVisibilityTimeoutInSeconds()
+ {
+ return $this->_visibilityTimeoutInSeconds;
+ }
+
+ /**
+ * Sets visibilityTimeoutInSeconds field.
+ *
+ * @param integer $visibilityTimeoutInSeconds value to use.
+ *
+ * @return none
+ */
+ public function setVisibilityTimeoutInSeconds($visibilityTimeoutInSeconds)
+ {
+ $this->_visibilityTimeoutInSeconds = $visibilityTimeoutInSeconds;
+ }
+
+ /**
+ * Gets numberOfMessages field.
+ *
+ * @return integer
+ */
+ public function getNumberOfMessages()
+ {
+ return $this->_numberOfMessages;
+ }
+
+ /**
+ * Sets numberOfMessages field.
+ *
+ * @param integer $numberOfMessages value to use.
+ *
+ * @return none
+ */
+ public function setNumberOfMessages($numberOfMessages)
+ {
+ $this->_numberOfMessages = $numberOfMessages;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListMessagesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListMessagesResult.php
new file mode 100644
index 0000000..1b931e6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListMessagesResult.php
@@ -0,0 +1,101 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+use WindowsAzure\Queue\Models\WindowsAzureQueueMessage;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds results of listMessages wrapper.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListMessagesResult
+{
+ /**
+ * Holds all message entries.
+ *
+ * @var array.
+ */
+ private $_queueMessages;
+
+ /**
+ * Creates ListMessagesResult object from parsed XML response.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Queue\Models\ListMessagesResult.
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new ListMessagesResult();
+ $queueMessages = array();
+
+ if (!empty($parsedResponse)) {
+ $rawMessages = Utilities::getArray($parsedResponse['QueueMessage']);
+ foreach ($rawMessages as $value) {
+ $message = WindowsAzureQueueMessage::createFromListMessages($value);
+
+ $queueMessages[] = $message;
+ }
+ }
+ $result->setQueueMessages($queueMessages);
+
+ return $result;
+ }
+
+ /**
+ * Gets queueMessages field.
+ *
+ * @return array
+ */
+ public function getQueueMessages()
+ {
+ return $this->_queueMessages;
+ }
+
+ /**
+ * Sets queueMessages field.
+ *
+ * @param integer $queueMessages value to use.
+ *
+ * @return none
+ */
+ public function setQueueMessages($queueMessages)
+ {
+ $this->_queueMessages = array();
+
+ foreach ($queueMessages as $value) {
+ $this->_queueMessages[] = clone $value;
+ }
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListQueuesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListQueuesOptions.php
new file mode 100644
index 0000000..ac2673a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListQueuesOptions.php
@@ -0,0 +1,140 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+use WindowsAzure\Queue\Models\QueueServiceOptions;
+use \WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Options for listQueues API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListQueuesOptions extends QueueServiceOptions
+{
+ private $_prefix;
+ private $_marker;
+ private $_maxResults;
+ private $_includeMetadata;
+
+ /**
+ * Gets prefix.
+ *
+ * @return string.
+ */
+ public function getPrefix()
+ {
+ return $this->_prefix;
+ }
+
+ /**
+ * Sets prefix.
+ *
+ * @param string $prefix value.
+ *
+ * @return none.
+ */
+ public function setPrefix($prefix)
+ {
+ Validate::isString($prefix, 'prefix');
+ $this->_prefix = $prefix;
+ }
+
+ /**
+ * Gets marker.
+ *
+ * @return string.
+ */
+ public function getMarker()
+ {
+ return $this->_marker;
+ }
+
+ /**
+ * Sets marker.
+ *
+ * @param string $marker value.
+ *
+ * @return none.
+ */
+ public function setMarker($marker)
+ {
+ Validate::isString($marker, 'marker');
+ $this->_marker = $marker;
+ }
+
+ /**
+ * Gets max results.
+ *
+ * @return string.
+ */
+ public function getMaxResults()
+ {
+ return $this->_maxResults;
+ }
+
+ /**
+ * Sets max results.
+ *
+ * @param string $maxResults value.
+ *
+ * @return none.
+ */
+ public function setMaxResults($maxResults)
+ {
+ Validate::isString($maxResults, 'maxResults');
+ $this->_maxResults = $maxResults;
+ }
+
+ /**
+ * Indicates if metadata is included or not.
+ *
+ * @return boolean.
+ */
+ public function getIncludeMetadata()
+ {
+ return $this->_includeMetadata;
+ }
+
+ /**
+ * Sets the include metadata flag.
+ *
+ * @param bool $includeMetadata value.
+ *
+ * @return none.
+ */
+ public function setIncludeMetadata($includeMetadata)
+ {
+ Validate::isBoolean($includeMetadata);
+ $this->_includeMetadata = $includeMetadata;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListQueuesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListQueuesResult.php
new file mode 100644
index 0000000..7e5e4e9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/ListQueuesResult.php
@@ -0,0 +1,228 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Queue\Models\Queue;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Container to hold list queue response object.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListQueuesResult
+{
+ private $_queues;
+ private $_prefix;
+ private $_marker;
+ private $_nextMarker;
+ private $_maxResults;
+ private $_accountName;
+
+ /**
+ * Creates ListQueuesResult object from parsed XML response.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Queue\Models\ListQueuesResult.
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new ListQueuesResult();
+ $result->_accountName = Utilities::tryGetKeysChainValue(
+ $parsedResponse,
+ Resources::XTAG_ATTRIBUTES,
+ Resources::XTAG_ACCOUNT_NAME
+ );
+ $result->_prefix = Utilities::tryGetValue(
+ $parsedResponse, Resources::QP_PREFIX
+ );
+ $result->_marker = Utilities::tryGetValue(
+ $parsedResponse, Resources::QP_MARKER
+ );
+ $result->_nextMarker = Utilities::tryGetValue(
+ $parsedResponse, Resources::QP_NEXT_MARKER
+ );
+ $result->_maxResults = Utilities::tryGetValue(
+ $parsedResponse, Resources::QP_MAX_RESULTS
+ );
+ $result->_queues = array();
+ $rawQueues = array();
+
+ if ( !empty($parsedResponse['Queues']) ) {
+ $rawQueues = Utilities::getArray($parsedResponse['Queues']['Queue']);
+ }
+
+ foreach ($rawQueues as $value) {
+ $queue = new Queue($value['Name'], $value['Url']);
+ $metadata = Utilities::tryGetValue($value, Resources::QP_METADATA);
+ $queue->setMetadata(is_null($metadata) ? array() : $metadata);
+ $result->_queues[] = $queue;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets queues.
+ *
+ * @return array.
+ */
+ public function getQueues()
+ {
+ return $this->_queues;
+ }
+
+ /**
+ * Sets queues.
+ *
+ * @param array $queues list of queues
+ *
+ * @return none.
+ */
+ public function setQueues($queues)
+ {
+ $this->_queues = array();
+ foreach ($queues as $queue) {
+ $this->_queues[] = clone $queue;
+ }
+ }
+
+ /**
+ * Gets prefix.
+ *
+ * @return string.
+ */
+ public function getPrefix()
+ {
+ return $this->_prefix;
+ }
+
+ /**
+ * Sets prefix.
+ *
+ * @param string $prefix value.
+ *
+ * @return none.
+ */
+ public function setPrefix($prefix)
+ {
+ $this->_prefix = $prefix;
+ }
+
+ /**
+ * Gets marker.
+ *
+ * @return string.
+ */
+ public function getMarker()
+ {
+ return $this->_marker;
+ }
+
+ /**
+ * Sets marker.
+ *
+ * @param string $marker value.
+ *
+ * @return none.
+ */
+ public function setMarker($marker)
+ {
+ $this->_marker = $marker;
+ }
+
+ /**
+ * Gets max results.
+ *
+ * @return string.
+ */
+ public function getMaxResults()
+ {
+ return $this->_maxResults;
+ }
+
+ /**
+ * Sets max results.
+ *
+ * @param string $maxResults value.
+ *
+ * @return none.
+ */
+ public function setMaxResults($maxResults)
+ {
+ $this->_maxResults = $maxResults;
+ }
+
+ /**
+ * Gets next marker.
+ *
+ * @return string.
+ */
+ public function getNextMarker()
+ {
+ return $this->_nextMarker;
+ }
+
+ /**
+ * Sets next marker.
+ *
+ * @param string $nextMarker value.
+ *
+ * @return none.
+ */
+ public function setNextMarker($nextMarker)
+ {
+ $this->_nextMarker = $nextMarker;
+ }
+
+ /**
+ * Gets account name.
+ *
+ * @return string
+ */
+ public function getAccountName()
+ {
+ return $this->_accountName;
+ }
+
+ /**
+ * Sets account name.
+ *
+ * @param string $accountName value.
+ *
+ * @return none
+ */
+ public function setAccountName($accountName)
+ {
+ $this->_accountName = $accountName;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/PeekMessagesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/PeekMessagesOptions.php
new file mode 100644
index 0000000..040f4a4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/PeekMessagesOptions.php
@@ -0,0 +1,72 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+
+/**
+ * Short description
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class PeekMessagesOptions extends QueueServiceOptions
+{
+ /**
+ * A nonzero integer value that specifies the number of messages to peek from
+ * the queue, up to a maximum of 32. By default, a single message is peeked
+ * from the queue with this operation.
+ *
+ * @var integer
+ */
+ private $_numberOfMessages;
+
+ /**
+ * Gets numberOfMessages field.
+ *
+ * @return integer
+ */
+ public function getNumberOfMessages()
+ {
+ return $this->_numberOfMessages;
+ }
+
+ /**
+ * Sets numberOfMessages field.
+ *
+ * @param integer $numberOfMessages value to use.
+ *
+ * @return none
+ */
+ public function setNumberOfMessages($numberOfMessages)
+ {
+ $this->_numberOfMessages = $numberOfMessages;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/PeekMessagesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/PeekMessagesResult.php
new file mode 100644
index 0000000..a70540a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/PeekMessagesResult.php
@@ -0,0 +1,103 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+use WindowsAzure\Queue\Models\WindowsAzureQueueMessage;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds results of listMessages wrapper.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class PeekMessagesResult
+{
+ /**
+ * Holds all message entries.
+ *
+ * @var array.
+ */
+ private $_queueMessages;
+
+ /**
+ * Creates PeekMessagesResult object from parsed XML response.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Queue\Models\PeekMessagesResult.
+ */
+ public static function create($parsedResponse)
+ {
+ $result = new PeekMessagesResult();
+ $queueMessages = array();
+
+ if (!empty($parsedResponse)) {
+ $rawMessages = Utilities::getArray($parsedResponse['QueueMessage']);
+ foreach ($rawMessages as $value) {
+ $message = WindowsAzureQueueMessage::createFromPeekMessages($value);
+
+ $queueMessages[] = $message;
+ }
+ }
+ $result->setQueueMessages($queueMessages);
+
+ return $result;
+ }
+
+ /**
+ * Gets queueMessages field.
+ *
+ * @return integer
+ */
+ public function getQueueMessages()
+ {
+ $clonedMessages = array();
+
+ foreach ($this->_queueMessages as $value) {
+ $clonedMessages[] = clone $value;
+ }
+
+ return $clonedMessages;
+ }
+
+ /**
+ * Sets queueMessages field.
+ *
+ * @param integer $queueMessages value to use.
+ *
+ * @return none
+ */
+ public function setQueueMessages($queueMessages)
+ {
+ $this->_queueMessages = $queueMessages;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/Queue.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/Queue.php
new file mode 100644
index 0000000..2c1f4e4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/Queue.php
@@ -0,0 +1,126 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * WindowsAzure queue object.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Queue
+{
+ private $_name;
+ private $_url;
+ private $_metadata;
+
+ /**
+ * Constructor
+ *
+ * @param string $name queue name.
+ * @param string $url queue url.
+ *
+ * @return WindowsAzure\Queue\Models\Queue.
+ */
+ function __construct($name, $url)
+ {
+ $this->_name = $name;
+ $this->_url = $url;
+ }
+
+ /**
+ * Gets queue name.
+ *
+ * @return string.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Sets queue name.
+ *
+ * @param string $name value.
+ *
+ * @return none.
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ }
+
+ /**
+ * Gets queue url.
+ *
+ * @return string.
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * Sets queue url.
+ *
+ * @param string $url value.
+ *
+ * @return none.
+ */
+ public function setUrl($url)
+ {
+ $this->_url = $url;
+ }
+
+ /**
+ * Gets queue metadata.
+ *
+ * @return array.
+ */
+ public function getMetadata()
+ {
+ return $this->_metadata;
+ }
+
+ /**
+ * Sets queue metadata.
+ *
+ * @param string $metadata value.
+ *
+ * @return none.
+ */
+ public function setMetadata($metadata)
+ {
+ $this->_metadata = $metadata;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/QueueMessage.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/QueueMessage.php
new file mode 100644
index 0000000..8a4ba49
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/QueueMessage.php
@@ -0,0 +1,83 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+
+/**
+ * Wrappers queue message text.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class QueueMessage
+{
+ private $_messageText;
+ public static $xmlRootName = 'QueueMessage';
+
+ /**
+ * Gets message text field.
+ *
+ * @return string.
+ */
+ public function getMessageText()
+ {
+ return $this->_messageText;
+ }
+
+ /**
+ * Sets message text field.
+ *
+ * @param string $messageText message contents.
+ *
+ * @return string.
+ */
+ public function setMessageText($messageText)
+ {
+ $this->_messageText = $messageText;
+ }
+
+ /**
+ * Converts this current object to XML representation.
+ *
+ * @param XmlSerializer $xmlSerializer The XML serializer.
+ *
+ * @return string.
+ */
+ public function toXml($xmlSerializer)
+ {
+ $array = array('MessageText' => $this->_messageText);
+ $properties = array(XmlSerializer::ROOT_NAME => self::$xmlRootName);
+
+ return $xmlSerializer->serialize($array, $properties);
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/QueueServiceOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/QueueServiceOptions.php
new file mode 100644
index 0000000..57f7453
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/QueueServiceOptions.php
@@ -0,0 +1,65 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+
+/**
+ * Queue service options.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class QueueServiceOptions
+{
+ private $_timeout;
+
+ /**
+ * Gets timeout.
+ *
+ * @return string.
+ */
+ public function getTimeout()
+ {
+ return $this->_timeout;
+ }
+
+ /**
+ * Sets timeout.
+ *
+ * @param string $timeout value.
+ *
+ * @return none.
+ */
+ public function setTimeout($timeout)
+ {
+ $this->_timeout = $timeout;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/UpdateMessageResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/UpdateMessageResult.php
new file mode 100644
index 0000000..a58bc7a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/UpdateMessageResult.php
@@ -0,0 +1,106 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Holds results of updateMessage wrapper.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class UpdateMessageResult
+{
+ /**
+ * The value of PopReceipt is opaque to the client and its only purpose is to
+ * ensure that a message may be deleted with the delete message operation.
+ *
+ * @var string
+ */
+ private $_popReceipt;
+
+ /**
+ * A UTC date/time value that represents when the message will be visible on the
+ * queue.
+ *
+ * @var \DateTime
+ */
+ private $_timeNextVisible;
+
+ /**
+ * Gets timeNextVisible field.
+ *
+ * @return \DateTime.
+ */
+ public function getTimeNextVisible()
+ {
+ return $this->_timeNextVisible;
+ }
+
+ /**
+ * Sets timeNextVisible field.
+ *
+ * @param \DateTime $timeNextVisible A UTC date/time value that represents when
+ * the message will be visible on the queue.
+ *
+ * @return none.
+ */
+ public function setTimeNextVisible($timeNextVisible)
+ {
+ Validate::isDate($timeNextVisible);
+
+ $this->_timeNextVisible = $timeNextVisible;
+ }
+
+ /**
+ * Gets popReceipt field.
+ *
+ * @return string.
+ */
+ public function getPopReceipt()
+ {
+ return $this->_popReceipt;
+ }
+
+ /**
+ * Sets popReceipt field.
+ *
+ * @param string $popReceipt The pop receipt of the queue message.
+ *
+ * @return none.
+ */
+ public function setPopReceipt($popReceipt)
+ {
+ Validate::isString($popReceipt, 'popReceipt');
+ $this->_popReceipt = $popReceipt;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/WindowsAzureQueueMessage.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/WindowsAzureQueueMessage.php
new file mode 100644
index 0000000..0b8b748
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/Models/WindowsAzureQueueMessage.php
@@ -0,0 +1,297 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds data for single WindowsAzure queue message.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class WindowsAzureQueueMessage
+{
+ /**
+ * GUID value that identifies the message in the queue
+ *
+ * @var string
+ */
+ private $_messageId;
+
+ /**
+ * insertion date of the message.
+ *
+ * @var \DateTime
+ */
+ private $_insertionDate;
+
+ /**
+ * expiration date of the message.
+ *
+ * @var \DateTime
+ */
+ private $_expirationDate;
+
+ /**
+ * The value of PopReceipt is opaque to the client and its only purpose is to
+ * ensure that a message may be deleted with the delete message operation.
+ *
+ * @var string
+ */
+ private $_popReceipt;
+
+ /**
+ * next visibility time of the message.
+ *
+ * @var \DateTime
+ */
+ private $_timeNextVisible;
+
+ /**
+ * Dequeues count for this message. Note that this element is returned in the
+ * response body only if the queue was created with version 2009-09-19 of
+ * the Queue service.
+ *
+ * @var integer
+ */
+ private $_dequeueCount;
+
+ /**
+ * message contents.
+ *
+ * @var string
+ */
+ private $_messageText;
+
+ /**
+ * Creates WindowsAzureQueueMessage object from parsed XML response of
+ * ListMessages.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Queue\Models\WindowsAzureQueueMessage.
+ */
+ public static function createFromListMessages($parsedResponse)
+ {
+ $timeNextVisible = $parsedResponse['TimeNextVisible'];
+
+ $msg = self::createFromPeekMessages($parsedResponse);
+ $date = Utilities::rfc1123ToDateTime($timeNextVisible);
+ $msg->setTimeNextVisible($date);
+ $msg->setPopReceipt($parsedResponse['PopReceipt']);
+
+ return $msg;
+ }
+
+ /**
+ * Creates WindowsAzureQueueMessage object from parsed XML response of
+ * PeekMessages.
+ *
+ * @param array $parsedResponse XML response parsed into array.
+ *
+ * @return WindowsAzure\Queue\Models\WindowsAzureQueueMessage.
+ */
+ public static function createFromPeekMessages($parsedResponse)
+ {
+ $msg = new WindowsAzureQueueMessage();
+ $expirationDate = $parsedResponse['ExpirationTime'];
+ $insertionDate = $parsedResponse['InsertionTime'];
+
+ $msg->setDequeueCount(intval($parsedResponse['DequeueCount']));
+
+ $date = Utilities::rfc1123ToDateTime($expirationDate);
+ $msg->setExpirationDate($date);
+
+ $date = Utilities::rfc1123ToDateTime($insertionDate);
+ $msg->setInsertionDate($date);
+
+ $msg->setMessageId($parsedResponse['MessageId']);
+ $msg->setMessageText($parsedResponse['MessageText']);
+
+ return $msg;
+ }
+
+ /**
+ * Gets message text field.
+ *
+ * @return string.
+ */
+ public function getMessageText()
+ {
+ return $this->_messageText;
+ }
+
+ /**
+ * Sets message text field.
+ *
+ * @param string $messageText message contents.
+ *
+ * @return none.
+ */
+ public function setMessageText($messageText)
+ {
+ $this->_messageText = $messageText;
+ }
+
+ /**
+ * Gets messageId field.
+ *
+ * @return integer.
+ */
+ public function getMessageId()
+ {
+ return $this->_messageId;
+ }
+
+ /**
+ * Sets messageId field.
+ *
+ * @param string $messageId message contents.
+ *
+ * @return none.
+ */
+ public function setMessageId($messageId)
+ {
+ $this->_messageId = $messageId;
+ }
+
+ /**
+ * Gets insertionDate field.
+ *
+ * @return \DateTime.
+ */
+ public function getInsertionDate()
+ {
+ return $this->_insertionDate;
+ }
+
+ /**
+ * Sets insertionDate field.
+ *
+ * @param \DateTime $insertionDate message contents.
+ *
+ * @return none.
+ */
+ public function setInsertionDate($insertionDate)
+ {
+ $this->_insertionDate = $insertionDate;
+ }
+
+ /**
+ * Gets expirationDate field.
+ *
+ * @return \DateTime.
+ */
+ public function getExpirationDate()
+ {
+ return $this->_expirationDate;
+ }
+
+ /**
+ * Sets expirationDate field.
+ *
+ * @param \DateTime $expirationDate the expiration date of the message.
+ *
+ * @return none.
+ */
+ public function setExpirationDate($expirationDate)
+ {
+ $this->_expirationDate = $expirationDate;
+ }
+
+ /**
+ * Gets timeNextVisible field.
+ *
+ * @return \DateTime.
+ */
+ public function getTimeNextVisible()
+ {
+ return $this->_timeNextVisible;
+ }
+
+ /**
+ * Sets timeNextVisible field.
+ *
+ * @param \DateTime $timeNextVisible next visibile time for the message.
+ *
+ * @return none.
+ */
+ public function setTimeNextVisible($timeNextVisible)
+ {
+ $this->_timeNextVisible = $timeNextVisible;
+ }
+
+ /**
+ * Gets popReceipt field.
+ *
+ * @return string.
+ */
+ public function getPopReceipt()
+ {
+ return $this->_popReceipt;
+ }
+
+ /**
+ * Sets popReceipt field.
+ *
+ * @param string $popReceipt used when deleting the message.
+ *
+ * @return none.
+ */
+ public function setPopReceipt($popReceipt)
+ {
+ $this->_popReceipt = $popReceipt;
+ }
+
+ /**
+ * Gets dequeueCount field.
+ *
+ * @return integer.
+ */
+ public function getDequeueCount()
+ {
+ return $this->_dequeueCount;
+ }
+
+ /**
+ * Sets dequeueCount field.
+ *
+ * @param integer $dequeueCount number of dequeues for that message.
+ *
+ * @return none.
+ */
+ public function setDequeueCount($dequeueCount)
+ {
+ $this->_dequeueCount = $dequeueCount;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/QueueRestProxy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/QueueRestProxy.php
new file mode 100644
index 0000000..dcf4bf5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/Queue/QueueRestProxy.php
@@ -0,0 +1,778 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\Queue;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Http\IHttpClient;
+use WindowsAzure\Common\Internal\Http\Url;
+use WindowsAzure\Common\Internal\ServiceRestProxy;
+use WindowsAzure\Common\Models\GetServicePropertiesResult;
+use WindowsAzure\Common\Models\ServiceProperties;
+use WindowsAzure\Queue\Internal\IQueue;
+use WindowsAzure\Queue\Models\ListQueuesOptions;
+use WindowsAzure\Queue\Models\ListQueuesResult;
+use WindowsAzure\Queue\Models\CreateQueueOptions;
+use WindowsAzure\Queue\Models\QueueServiceOptions;
+use WindowsAzure\Queue\Models\GetQueueMetadataResult;
+use WindowsAzure\Queue\Models\CreateMessageOptions;
+use WindowsAzure\Queue\Models\QueueMessage;
+use WindowsAzure\Queue\Models\ListMessagesOptions;
+use WindowsAzure\Queue\Models\ListMessagesResult;
+use WindowsAzure\Queue\Models\PeekMessagesOptions;
+use WindowsAzure\Queue\Models\PeekMessagesResult;
+use WindowsAzure\Queue\Models\UpdateMessageResult;
+
+/**
+ * This class constructs HTTP requests and receive HTTP responses for queue
+ * service layer.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\Queue
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class QueueRestProxy extends ServiceRestProxy implements IQueue
+{
+ /**
+ * Lists all queues in the storage account.
+ *
+ * @param ListQueuesOptions $options The optional list queue options.
+ *
+ * @return WindowsAzure\Queue\Models\ListQueuesResult
+ */
+ public function listQueues($options = null)
+ {
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = Resources::EMPTY_STRING;
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new ListQueuesOptions();
+ }
+
+ $timeout = $options->getTimeout();
+ $maxResults = $options->getMaxResults();
+ $include = $options->getIncludeMetadata();
+ $include = $include ? 'metadata' : null;
+ $prefix = $options->getPrefix();
+ $marker = $options->getMarker();
+
+ $this->addOptionalQueryParam($queryParams, Resources::QP_TIMEOUT, $timeout);
+ $this->addOptionalQueryParam($queryParams, Resources::QP_COMP, 'list');
+ $this->addOptionalQueryParam($queryParams, Resources::QP_PREFIX, $prefix);
+ $this->addOptionalQueryParam($queryParams, Resources::QP_MARKER, $marker);
+ $this->addOptionalQueryParam($queryParams, Resources::QP_INCLUDE, $include);
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_MAX_RESULTS,
+ $maxResults
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListQueuesResult::create($parsed);
+ }
+
+ /**
+ * Clears all messages from the queue.
+ *
+ * If a queue contains a large number of messages, Clear Messages may time out
+ * before all messages have been deleted. In this case the Queue service will
+ * return status code 500 (Internal Server Error), with the additional error
+ * code OperationTimedOut. If the operation times out, the client should
+ * continue to retry Clear Messages until it succeeds, to ensure that all
+ * messages have been deleted.
+ *
+ * @param string $queueName The name of the queue.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function clearMessages($queueName, $options = null)
+ {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+
+ $method = Resources::HTTP_DELETE;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $queueName . '/messages';
+ $body = Resources::EMPTY_STRING;
+ $statusCode = Resources::STATUS_NO_CONTENT;
+
+ if (is_null($options)) {
+ $options = new QueueServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+ /**
+ * Adds a message to the queue and optionally sets a visibility timeout
+ * for the message.
+ *
+ * @param string $queueName The name of the queue.
+ * @param string $messageText The message contents.
+ * @param CreateMessageOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function createMessage($queueName, $messageText,
+ $options = null
+ ) {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+ Validate::isString($messageText, 'messageText');
+
+ $method = Resources::HTTP_POST;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $queueName . '/messages';
+ $body = Resources::EMPTY_STRING;
+ $statusCode = Resources::STATUS_CREATED;
+ $message = new QueueMessage();
+ $message->setMessageText($messageText);
+ $body = $message->toXml($this->dataSerializer);
+
+
+ if (is_null($options)) {
+ $options = new CreateMessageOptions();
+ }
+
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ Resources::URL_ENCODED_CONTENT_TYPE
+ );
+
+ $visibility = $options->getVisibilityTimeoutInSeconds();
+ $timeToLive = $options->getTimeToLiveInSeconds();
+ $timeout = $options->getTimeout();
+
+ $this->addOptionalQueryParam($queryParams, Resources::QP_TIMEOUT, $timeout);
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_VISIBILITY_TIMEOUT,
+ $visibility
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_MESSAGE_TTL,
+ $timeToLive
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+ /**
+ * Creates a new queue under the storage account.
+ *
+ * @param string $queueName The queue name.
+ * @param QueueCreateOptions $options The Optional parameters.
+ *
+ * @return none
+ */
+ public function createQueue($queueName, $options = null)
+ {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $queueName;
+ $statusCode = array(
+ Resources::STATUS_CREATED,
+ Resources::STATUS_NO_CONTENT
+ );
+
+ if (is_null($options)) {
+ $options = new CreateQueueOptions();
+ }
+
+ $metadata = $options->getMetadata();
+ $timeout = $options->getTimeout();
+ $headers = $this->generateMetadataHeaders($metadata);
+
+ $this->addOptionalQueryParam($queryParams, Resources::QP_TIMEOUT, $timeout);
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ }
+
+ /**
+ * Deletes a specified message from the queue.
+ *
+ * @param string $queueName The name of the queue.
+ * @param string $messageId The id of the message.
+ * @param string $popReceipt The valid pop receipt value returned
+ * from an earlier call to the Get Messages or Update Message operation.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function deleteMessage($queueName, $messageId, $popReceipt,
+ $options = null
+ ) {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+ Validate::isString($messageId, 'messageId');
+ Validate::notNullOrEmpty($messageId, 'messageId');
+ Validate::isString($popReceipt, 'popReceipt');
+ Validate::notNullOrEmpty($popReceipt, 'popReceipt');
+
+ $method = Resources::HTTP_DELETE;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $queueName . '/messages/' . $messageId;
+ $body = Resources::EMPTY_STRING;
+ $statusCode = Resources::STATUS_NO_CONTENT;
+
+ if (is_null($options)) {
+ $options = new QueueServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_POPRECEIPT,
+ $popReceipt
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+ /**
+ * Deletes a queue.
+ *
+ * @param string $queueName The queue name.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function deleteQueue($queueName, $options = null)
+ {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+
+ $method = Resources::HTTP_DELETE;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $queueName;
+ $statusCode = Resources::STATUS_NO_CONTENT;
+
+ if (is_null($options)) {
+ $options = new QueueServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ }
+
+ /**
+ * Returns queue properties, including user-defined metadata.
+ *
+ * @param string $queueName The queue name.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\GetQueueMetadataResult
+ */
+ public function getQueueMetadata($queueName, $options = null)
+ {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $queueName;
+ $body = Resources::EMPTY_STRING;
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new QueueServiceOptions();
+ }
+
+ $this->addOptionalQueryParam($queryParams, Resources::QP_COMP, 'metadata');
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+
+ $metadata = $this->getMetadataArray($response->getHeader());
+ $maxCount = intval(
+ $response->getHeader(Resources::X_MS_APPROXIMATE_MESSAGES_COUNT)
+ );
+
+ return new GetQueueMetadataResult($maxCount, $metadata);
+ }
+
+ /**
+ * Gets the properties of the Queue service.
+ *
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\GetServicePropertiesResult
+ */
+ public function getServiceProperties($options = null)
+ {
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = Resources::EMPTY_STRING;
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new QueueServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'service'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'properties'
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetServicePropertiesResult::create($parsed);
+ }
+
+ /**
+ * Lists all messages in the queue.
+ *
+ * @param string $queueName The queue name.
+ * @param ListMessagesOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\ListMessagesResult
+ */
+ public function listMessages($queueName, $options = null)
+ {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $path = $queueName . '/messages';
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new ListMessagesOptions();
+ }
+
+ $messagesCount = $options->getNumberOfMessages();
+ $visibility = $options->getVisibilityTimeoutInSeconds();
+ $timeout = $options->getTimeout();
+
+ $this->addOptionalQueryParam($queryParams, Resources::QP_TIMEOUT, $timeout);
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_NUM_OF_MESSAGES,
+ $messagesCount
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_VISIBILITY_TIMEOUT,
+ $visibility
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListMessagesResult::create($parsed);
+ }
+
+ /**
+ * Retrieves a message from the front of the queue, without changing
+ * the message visibility.
+ *
+ * @param string $queueName The queue name.
+ * @param PeekMessagesOptions $options The optional parameters.
+ *
+ * @return WindowsAzure\Common\Models\PeekMessagesResult
+ */
+ public function peekMessages($queueName, $options = null)
+ {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+
+ $method = Resources::HTTP_GET;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $path = $queueName . '/messages';
+ $statusCode = Resources::STATUS_OK;
+
+ if (is_null($options)) {
+ $options = new PeekMessagesOptions();
+ }
+
+ $messagesCount = $options->getNumberOfMessages();
+ $timeout = $options->getTimeout();
+
+ $this->addOptionalQueryParam($queryParams, Resources::QP_PEEK_ONLY, 'true');
+ $this->addOptionalQueryParam($queryParams, Resources::QP_TIMEOUT, $timeout);
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_NUM_OF_MESSAGES,
+ $messagesCount
+ );
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode
+ );
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return PeekMessagesResult::create($parsed);
+ }
+
+ /**
+ * Sets user-defined metadata on the queue. To delete queue metadata, call
+ * this API without specifying any metadata in $metadata.
+ *
+ * @param string $queueName The queue name.
+ * @param array $metadata The metadata array.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function setQueueMetadata($queueName, $metadata, $options = null)
+ {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+ $this->validateMetadata($metadata);
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $queryParams = array();
+ $postParams = array();
+ $path = $queueName;
+ $statusCode = Resources::STATUS_NO_CONTENT;
+ $body = Resources::EMPTY_STRING;
+
+ if (is_null($options)) {
+ $options = new QueueServiceOptions();
+ }
+
+ $this->addOptionalQueryParam($queryParams, Resources::QP_COMP, 'metadata');
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+
+ $metadataHeaders = $this->generateMetadataHeaders($metadata);
+ $headers = $metadataHeaders;
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+ /**
+ * Sets the properties of the Queue service.
+ *
+ * It's recommended to use getServiceProperties, alter the returned object and
+ * then use setServiceProperties with this altered object.
+ *
+ * @param array $serviceProperties The new service properties.
+ * @param QueueServiceOptions $options The optional parameters.
+ *
+ * @return none
+ */
+ public function setServiceProperties($serviceProperties, $options = null)
+ {
+ Validate::isTrue(
+ $serviceProperties instanceof ServiceProperties,
+ Resources::INVALID_SVC_PROP_MSG
+ );
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $statusCode = Resources::STATUS_ACCEPTED;
+ $path = Resources::EMPTY_STRING;
+ $body = $serviceProperties->toXml($this->dataSerializer);
+
+ if (is_null($options)) {
+ $options = new QueueServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_REST_TYPE,
+ 'service'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_COMP,
+ 'properties'
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ Resources::URL_ENCODED_CONTENT_TYPE
+ );
+
+ $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ }
+
+ /**
+ * Updates the visibility timeout of a message and/or the message contents.
+ *
+ * @param string $queueName The queue name.
+ * @param string $messageId The id of the message.
+ * @param string $popReceipt The valid pop receipt
+ * value returned from an earlier call to the Get Messages or Update Message
+ * operation.
+ * @param string $messageText The message contents.
+ * @param int $visibilityTimeoutInSeconds Specifies the new
+ * visibility timeout value, in seconds, relative to server time.
+ * The new value must be larger than or equal to 0, and cannot be larger
+ * than 7 days. The visibility timeout of a message cannot be set to a value
+ * later than the expiry time. A message can be updated until it has been
+ * deleted or has expired.
+ * @param QueueServiceOptions $options The optional
+ * parameters.
+ *
+ * @return WindowsAzure\Common\Models\UpdateMessageResult
+ */
+ public function updateMessage($queueName, $messageId, $popReceipt, $messageText,
+ $visibilityTimeoutInSeconds, $options = null
+ ) {
+ Validate::isString($queueName, 'queueName');
+ Validate::notNullOrEmpty($queueName, 'queueName');
+ Validate::isString($messageId, 'messageId');
+ Validate::notNullOrEmpty($messageId, 'messageId');
+ Validate::isString($popReceipt, 'popReceipt');
+ Validate::notNullOrEmpty($popReceipt, 'popReceipt');
+ Validate::isString($messageText, 'messageText');
+ Validate::isInteger(
+ $visibilityTimeoutInSeconds,
+ 'visibilityTimeoutInSeconds'
+ );
+ Validate::notNull(
+ $visibilityTimeoutInSeconds,
+ 'visibilityTimeoutInSeconds'
+ );
+
+ $method = Resources::HTTP_PUT;
+ $headers = array();
+ $postParams = array();
+ $queryParams = array();
+ $path = $queueName . '/messages' . '/' . $messageId;
+ $body = Resources::EMPTY_STRING;
+ $statusCode = Resources::STATUS_NO_CONTENT;
+
+ if (is_null($options)) {
+ $options = new QueueServiceOptions();
+ }
+
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_VISIBILITY_TIMEOUT,
+ $visibilityTimeoutInSeconds
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_TIMEOUT,
+ $options->getTimeout()
+ );
+ $this->addOptionalQueryParam(
+ $queryParams,
+ Resources::QP_POPRECEIPT,
+ $popReceipt
+ );
+
+ if (!empty($messageText)) {
+ $this->addOptionalHeader(
+ $headers,
+ Resources::CONTENT_TYPE,
+ Resources::URL_ENCODED_CONTENT_TYPE
+ );
+
+ $message = new QueueMessage();
+ $message->setMessageText($messageText);
+ $body = $message->toXml($this->dataSerializer);
+ }
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParams,
+ $path,
+ $statusCode,
+ $body
+ );
+ $popReceipt = $response->getHeader(Resources::X_MS_POPRECEIPT);
+ $timeNextVisible = $response->getHeader(Resources::X_MS_TIME_NEXT_VISIBLE);
+
+ $date = Utilities::rfc1123ToDateTime($timeNextVisible);
+ $result = new UpdateMessageResult();
+ $result->setPopReceipt($popReceipt);
+ $result->setTimeNextVisible($date);
+
+ return $result;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/Action.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/Action.php
new file mode 100644
index 0000000..cca4d25
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/Action.php
@@ -0,0 +1,79 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Internal;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The base class for rule action.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class Action
+{
+ /**
+ * The attributes of the filter.
+ *
+ * @var array
+ */
+ protected $attributes;
+
+ /**
+ * Creates an Action instance with default parameter.
+ */
+ public function __construct()
+ {
+ $this->attributes = array();
+ $this->attributes['xmlns:xsi'] = Resources::XSI_XML_NAMESPACE;
+ }
+
+ /**
+ * Gets the attributes.
+ *
+ * @return array
+ */
+ public function getAttributes()
+ {
+ return $this->attributes;
+ }
+
+ /**
+ * Sets an attribute.
+ *
+ * @param string $key The key of the attribute.
+ * @param string $value The value of the attribute.
+ *
+ * @return none
+ */
+ protected function setAttribute($key, $value)
+ {
+ $this->attributes[$key] = $value;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/ActiveToken.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/ActiveToken.php
new file mode 100644
index 0000000..4afcc09
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/ActiveToken.php
@@ -0,0 +1,112 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Internal;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\ServiceBus\Internal\WrapAccessTokenResult;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * An active WRAP access Token.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class ActiveToken
+{
+ /**
+ * The WRAP access token result.
+ *
+ * @var WrapAccessTokenResult
+ */
+ private $_wrapAccessTokenResult;
+
+ /**
+ * When the WRAP access token expires.
+ *
+ * @var \DateTime
+ */
+ private $_expirationDateTime;
+
+ /**
+ * Creates an ActiveToken with specified WRAP
+ * access token result.
+ *
+ * @param array $wrapAccessTokenResult A WRAP access token result.
+ */
+ public function __construct($wrapAccessTokenResult)
+ {
+ $this->_wrapAccessTokenResult = $wrapAccessTokenResult;
+ }
+
+ /**
+ * Gets WRAP access token.
+ *
+ * @return WrapAccessTokenResult
+ */
+ public function getWrapAccessTokenResult()
+ {
+ return $this->_wrapAccessTokenResult;
+ }
+
+ /**
+ * Sets WRAP access token.
+ *
+ * @param string $wrapAccessTokenResult The WRAP access token result.
+ *
+ * @return none
+ */
+ public function setWrapAccessTokenResult($wrapAccessTokenResult)
+ {
+ $this->_wrapAccessTokenResult = $wrapAccessTokenResult;
+ }
+
+ /**
+ * Gets expiration time.
+ *
+ * @return \DateTime
+ */
+ public function getExpirationDateTime()
+ {
+ return $this->_expirationDateTime;
+ }
+
+ /**
+ * Sets expiration time.
+ *
+ * @param \DateTime $expirationDateTime value.
+ *
+ * @return none
+ */
+ public function setExpirationDateTime($expirationDateTime)
+ {
+ $this->_expirationDateTime = $expirationDateTime;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/Filter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/Filter.php
new file mode 100644
index 0000000..07acd8f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/Filter.php
@@ -0,0 +1,106 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Internal;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The base class for rule filter.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class Filter
+{
+ /**
+ * The attributes of the filter.
+ *
+ * @var array
+ */
+ protected $attributes;
+
+ /**
+ * Creates a filter with default parameters.
+ */
+ public function __construct()
+ {
+ $this->attributes = array();
+ $this->attributes['xmlns:xsi'] = Resources::XSI_XML_NAMESPACE;
+ }
+
+ /**
+ * Creates a Filter with specifed XML based string.
+ *
+ * @param string $filterXmlString An XML based filter string.
+ *
+ * @return Filter
+ */
+ public static function create($filterXmlString)
+ {
+ $filterXml = simplexml_load_string($filterXmlString);
+ $attributes = (array)$filterXml->attributes();
+
+ if (array_key_exists('i:type', $attributes)) {
+ $type = (string)$attributes['i:type'];
+ if ($type === 'TrueFilter') {
+ return new TrueFilter();
+ }
+
+ if ($type === 'FalseFilter') {
+ return new FalseFilter();
+ }
+
+ return new Filter();
+ }
+ }
+
+ /**
+ * Gets the attributes.
+ *
+ * @return array
+ */
+ public function getAttributes()
+ {
+ return $this->attributes;
+ }
+
+ /**
+ * Sets an attribute.
+ *
+ * @param string $key The key of the attribute.
+ * @param string $value The value of the attribute.
+ *
+ * @return none
+ */
+ protected function setAttribute($key, $value)
+ {
+ $this->attributes[$key] = $value;
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/IServiceBus.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/IServiceBus.php
new file mode 100644
index 0000000..258eebd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/IServiceBus.php
@@ -0,0 +1,318 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Internal;
+use WindowsAzure\Common\Internal\FilterableService;
+
+/**
+ * This class constructs HTTP requests and receive HTTP responses for Service Bus.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+interface IServiceBus extends FilterableService
+{
+ /**
+ * Sends a brokered message.
+ *
+ * @param type $path The path to send message.
+ * @param type $brokeredMessage The brokered message.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function sendMessage($path, $brokeredMessage);
+
+ /**
+ * Sends a queue message.
+ *
+ * @param string $queueName The name of the queue to send
+ * message.
+ * @param \BrokeredMessage $brokeredMessage The brokered message.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function sendQueueMessage($queueName, $brokeredMessage);
+
+ /**
+ * Receives a queue message.
+ *
+ * @param string $queueName The name of the
+ * queue.
+ * @param \ReceivedMessageOptions $receivedMessageOptions The options to
+ * receive the message.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function receiveQueueMessage($queueName, $receivedMessageOptions);
+
+ /**
+ * Receives a message.
+ *
+ * @param string $path The path of the
+ * message.
+ * @param \ReceivedMessageOptions $receiveMessageOptions The options to
+ * receive the message.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function receiveMessage($path, $receiveMessageOptions);
+
+ /**
+ * Sends a brokered message to a specified topic.
+ *
+ * @param string $topicName The name of the topic.
+ * @param \BrokeredMessage $brokeredMessage The brokered message.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function sendTopicMessage($topicName, $brokeredMessage);
+
+ /**
+ * Receives a subscription message.
+ *
+ * @param string $topicName The name of the
+ * topic.
+ * @param string $subscriptionName The name of the
+ * subscription.
+ * @param \ReceiveMessageOptions $receiveMessageOptions The options to
+ * receive the subscription message.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function receiveSubscriptionMessage(
+ $topicName,
+ $subscriptionName,
+ $receiveMessageOptions
+ );
+
+ /**
+ * Unlocks a brokered message.
+ *
+ * @param \BrokeredMessage $brokeredMessage The brokered message.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function unlockMessage($brokeredMessage);
+
+ /**
+ * Deletes a brokered message.
+ *
+ * @param \BrokeredMessage $brokeredMessage The borkered message.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function deleteMessage($brokeredMessage);
+
+ /**
+ * Creates a queue with specified queue info.
+ *
+ * @param \QueueInfo $queueInfo The information of the queue.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function createQueue($queueInfo);
+
+ /**
+ * Deletes a queue.
+ *
+ * @param string $queuePath The path of the queue.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function deleteQueue($queuePath);
+
+ /**
+ * Gets a queue with specified path.
+ *
+ * @param string $queuePath The path of the queue.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function getQueue($queuePath);
+
+ /**
+ * Lists a queue.
+ *
+ * @param \ListQueueOptions $listQueueOptions The options to list the
+ * queues.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function listQueues($listQueueOptions);
+
+ /**
+ * Creates a topic with specified topic info.
+ *
+ * @param \TopicInfo $topicInfo The information of the topic.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function createTopic($topicInfo);
+
+ /**
+ * Deletes a topic with specified topic path.
+ *
+ * @param string $topicPath The path of the topic.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function deleteTopic($topicPath);
+
+ /**
+ * Gets a topic.
+ *
+ * @param string $topicPath The path of the topic.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function getTopic($topicPath);
+
+ /**
+ * Lists topics.
+ *
+ * @param \ListTopicsOptions $listTopicsOptions The options to list
+ * the topics.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function listTopics($listTopicsOptions);
+
+ /**
+ * Creates a subscription with specified topic path and
+ * subscription info.
+ *
+ * @param string $topicPath The path of the topic.
+ * @param \SubscriptionInfo $subscriptionInfo The information of the
+ * subscription.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function createSubscription($topicPath, $subscriptionInfo);
+
+ /**
+ * Deletes a subscription.
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function deleteSubscription($topicPath, $subscriptionName);
+
+ /**
+ * Gets a subscription.
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function getSubscription($topicPath, $subscriptionName);
+
+ /**
+ * Lists subscriptions.
+ *
+ * @param string $topicPath The path of
+ * the topic.
+ * @param ListSubscriptionsOptions $listSubscriptionsOptions The options
+ * to list the subscriptions.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function listSubscriptions($topicPath, $listSubscriptionsOptions);
+
+ /**
+ * Creates a rule.
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ * @param \RuleInfo $ruleInfo The info of the rule.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function createRule($topicPath, $subscriptionName, $ruleInfo);
+
+ /**
+ * Deletes a rule.
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ * @param string $ruleName The name of the rule.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function deleteRule($topicPath, $subscriptionName, $ruleName);
+
+ /**
+ * Gets a rule.
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ * @param string $ruleName The name of the rule.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function getRule($topicPath, $subscriptionName, $ruleName);
+
+ /**
+ * Lists rules.
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ * @param \ListRulesOptions $listRulesOptions The options to list the rules.
+ *
+ * @throws Exception
+ * @return none
+ */
+ public function listRules($topicPath, $subscriptionName, $listRulesOptions);
+
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/IWrap.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/IWrap.php
new file mode 100644
index 0000000..10b8e72
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/IWrap.php
@@ -0,0 +1,56 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Internal;
+use WindowsAzure\Common\Internal\FilterableService;
+
+/**
+ * This class constructs HTTP requests and receive HTTP responses for queue
+ * service layer.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+interface IWrap extends FilterableService
+{
+
+ /**
+ * Gets a WRAP access token with specified parameters.
+ *
+ * @param string $uri The URI of the WRAP service.
+ * @param string $name The user name of the WRAP service.
+ * @param string $password The password of the WRAP service.
+ * @param string $scope The scope of the WRAP service.
+ *
+ * @return WindowsAzure\ServiceBus\Internal\WrapAccessTokenResult
+ */
+ public function wrapAccessToken($uri, $name, $password, $scope);
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/WrapAccessTokenResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/WrapAccessTokenResult.php
new file mode 100644
index 0000000..603f5cd
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/WrapAccessTokenResult.php
@@ -0,0 +1,124 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Internal;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Container to hold wrap accesss token response object.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class WrapAccessTokenResult
+{
+ /**
+ * @var string
+ */
+ private $_accessToken;
+
+ /**
+ * @var integer
+ */
+ private $_expiresIn;
+
+ /**
+ * Creates WrapAccesTokenResult object from parsed XML response.
+ *
+ * @param array $response The get WRAP access token response.
+ *
+ * @return WindowsAzure\ServiceBus\Internal\WrapAccessTokenResult.
+ */
+ public static function create($response)
+ {
+ $wrapAccessTokenResult = new WrapAccessTokenResult();
+ parse_str($response, $parsedResponse);
+
+ $wrapAccessTokenResult->setAccessToken(
+ Utilities::tryGetValue(
+ $parsedResponse, Resources::WRAP_ACCESS_TOKEN
+ )
+ );
+
+ $wrapAccessTokenResult->setExpiresIn(
+ Utilities::tryGetValue(
+ $parsedResponse, Resources::WRAP_ACCESS_TOKEN_EXPIRES_IN
+ )
+ );
+
+ return $wrapAccessTokenResult;
+ }
+
+ /**
+ * Gets access token.
+ *
+ * @return string.
+ */
+ public function getAccessToken()
+ {
+ return $this->_accessToken;
+ }
+
+ /**
+ * Sets access token.
+ *
+ * @param string $accessToken The access token.
+ *
+ * @return none.
+ */
+ public function setAccessToken($accessToken)
+ {
+ $this->_accessToken = $accessToken;
+ }
+
+ /**
+ * Gets expires in.
+ *
+ * @return integer.
+ */
+ public function getExpiresIn()
+ {
+ return $this->_expiresIn;
+ }
+
+ /**
+ * Sets expires in.
+ *
+ * @param integer $expiresIn value.
+ *
+ * @return none.
+ */
+ public function setExpiresIn($expiresIn)
+ {
+ $this->_expiresIn = $expiresIn;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/WrapRestProxy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/WrapRestProxy.php
new file mode 100644
index 0000000..7c5dc6f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/WrapRestProxy.php
@@ -0,0 +1,115 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Internal;
+use WindowsAzure\Common\Internal\Http\IHttpClient;
+use WindowsAzure\Common\Internal\Http\Url;
+use WindowsAzure\Common\Internal\ServiceRestProxy;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Models\GetServicePropertiesResult;
+use WindowsAzure\Common\Models\ServiceProperties;
+use WindowsAzure\ServiceBus\Internal\IWrap;
+use WindowsAzure\ServiceBus\Internal\WrapAccessTokenResult;
+
+/**
+ * The WRAP service layer.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class WrapRestProxy extends ServiceRestProxy implements IWrap
+{
+ /**
+ * Creates a WrapRestProxy with specified parameters.
+ *
+ * @param IHttpClient $channel The channel to send the WRAP request.
+ * @param string $uri The Uri of the WRAP service.
+ *
+ * @return none
+ */
+ public function __construct($channel, $uri)
+ {
+ parent::__construct($channel, $uri, Resources::EMPTY_STRING, null);
+ }
+
+ /**
+ * Gets a WRAP access token with specified parameters.
+ *
+ * @param string $uri The URI of the WRAP service.
+ * @param string $name The user name of the WRAP service.
+ * @param string $password The password of the WRAP service.
+ * @param string $scope The scope of the WRAP service.
+ *
+ * @return WindowsAzure\ServiceBus\Internal\WrapAccessTokenResult
+ */
+ public function wrapAccessToken($uri, $name, $password, $scope)
+ {
+ $method = Resources::HTTP_POST;
+ $headers = array();
+ $queryParams = array();
+ $postParameters = array();
+ $statusCode = Resources::STATUS_OK;
+
+ $postParameters = $this->addPostParameter(
+ $postParameters,
+ Resources::WRAP_NAME,
+ $name
+ );
+
+ $postParameters = $this->addPostParameter(
+ $postParameters,
+ Resources::WRAP_PASSWORD,
+ $password
+ );
+
+ $postParameters = $this->addPostParameter(
+ $postParameters,
+ Resources::WRAP_SCOPE,
+ $scope
+ );
+
+ $this->setUri($uri);
+
+ $response = $this->send(
+ $method,
+ $headers,
+ $queryParams,
+ $postParameters,
+ Resources::EMPTY_STRING,
+ $statusCode
+ );
+
+ return WrapAccessTokenResult::create($response->getBody());
+ }
+
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/WrapTokenManager.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/WrapTokenManager.php
new file mode 100644
index 0000000..8d4b4db
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Internal/WrapTokenManager.php
@@ -0,0 +1,234 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Internal;
+use WindowsAzure\Common\Configuration;
+use WindowsAzure\Common\ServicesBuilder;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\ServiceBus\Internal\WrapRestProxy;
+use WindowsAzure\ServiceBus\Internal\ActiveToken;
+
+/**
+ * Manages WRAP tokens.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class WrapTokenManager
+{
+ /**
+ * The Uri of the WRAP service.
+ *
+ * @var string
+ */
+ private $_wrapUri;
+
+ /**
+ * The user name of the WRAP service.
+ *
+ * @var string
+ */
+ private $_wrapName;
+
+ /**
+ * The password of the WRAP service.
+ *
+ * @var string
+ */
+ private $_wrapPassword;
+
+ /**
+ * The proxy of the WRAP service.
+ *
+ * @var string
+ */
+ private $_wrapRestProxy;
+
+ /**
+ * The active WRAP access tokens.
+ *
+ * @var array
+ */
+ private $_activeTokens;
+
+ /**
+ * Creates a WRAP token manager with specified parameters.
+ *
+ * @param string $wrapUri The URI of the WRAP service.
+ * @param string $wrapName The user name of the WRAP service.
+ * @param string $wrapPassword The password of the WRAP service.
+ * @param IWrap $wrapRestProxy The WRAP service REST proxy.
+ */
+ public function __construct($wrapUri, $wrapName, $wrapPassword, $wrapRestProxy)
+ {
+ Validate::isString($wrapUri, 'wrapUri');
+ Validate::isString($wrapName, 'wrapName');
+ Validate::isString($wrapPassword, 'wrapPassword');
+ Validate::notNullOrEmpty($wrapRestProxy, 'wrapRestProxy');
+
+ $this->_wrapUri = $wrapUri;
+ $this->_wrapName = $wrapName;
+ $this->_wrapPassword = $wrapPassword;
+ $this->_wrapRestProxy = $wrapRestProxy;
+ $this->_activeTokens = array();
+
+ }
+
+ /**
+ * Gets WRAP access token with sepcified target Uri.
+ *
+ * @param string $targetUri The target Uri of the WRAP access Token.
+ *
+ * @return string
+ */
+ public function getAccessToken($targetUri)
+ {
+ Validate::isString($targetUri, '$targetUri');
+
+ $this->_sweepExpiredTokens();
+ $scopeUri = $this->_createScopeUri($targetUri);
+
+ if (array_key_exists($scopeUri, $this->_activeTokens)) {
+ $activeToken = $this->_activeTokens[$scopeUri];
+ return $activeToken->getWrapAccessTokenResult()->getAccessToken();
+ }
+
+ $wrapAccessTokenResult = $this->_wrapRestProxy->wrapAccessToken(
+ $this->_wrapUri,
+ $this->_wrapName,
+ $this->_wrapPassword,
+ $scopeUri
+ );
+
+ $expirationDateTime = new \DateTime("now");
+ $expiresIn = intval($wrapAccessTokenResult->getExpiresIn() / 2);
+ $expirationDateTime = $expirationDateTime->add(
+ new \DateInterval('PT'.$expiresIn.'S')
+ );
+
+ $acquiredActiveToken = new ActiveToken($wrapAccessTokenResult);
+ $acquiredActiveToken->setExpirationDateTime($expirationDateTime);
+ $this->_activeTokens[$scopeUri] = $acquiredActiveToken;
+
+ return $wrapAccessTokenResult->getAccessToken();
+ }
+
+ /**
+ * Removes the expired WRAP access tokens.
+ *
+ * @return none
+ */
+ private function _sweepExpiredTokens()
+ {
+ foreach ($this->_activeTokens as $scopeUri => $activeToken) {
+ $currentDateTime = new \DateTime("now");
+ if ($activeToken->getExpirationDateTime() < $currentDateTime ) {
+ unset($this->_activeTokens[$scopeUri]);
+ }
+ }
+ }
+
+ /**
+ * Creates a SCOPE URI with specified target URI.
+ *
+ * @param array $targetUri The target URI.
+ *
+ * @return string
+ */
+ private function _createScopeUri($targetUri)
+ {
+ $targetUriComponents = parse_url($targetUri);
+
+ $scopeUri = Resources::EMPTY_STRING;
+ $authority = Resources::EMPTY_STRING;
+ if ($this->_containsValidAuthority($targetUriComponents)) {
+ $authority = $this->_createAuthority($targetUriComponents);
+ }
+
+ $scopeUri = 'http://'
+ .$authority
+ .$targetUriComponents[Resources::PHP_URL_HOST];
+
+ if (array_key_exists(Resources::PHP_URL_PATH, $targetUriComponents)) {
+ $scopeUri .= $targetUriComponents[Resources::PHP_URL_PATH];
+ }
+
+ return $scopeUri;
+ }
+
+ /**
+ * Gets whether the authority related elements are valid.
+ *
+ * @param array $uriComponents The components of an URI.
+ *
+ * @return boolean
+ */
+ private function _containsValidAuthority($uriComponents)
+ {
+ if (! array_key_exists(Resources::PHP_URL_USER, $uriComponents)) {
+ return false;
+ }
+
+ if (empty($uriComponents[Resources::PHP_URL_USER])) {
+ return false;
+ }
+
+ if (! array_key_exists(Resources::PHP_URL_PASS, $uriComponents)) {
+ return false;
+ }
+
+ if (empty($uriComponents[Resources::PHP_URL_PASS])) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Creates an authority string with specified Uri components.
+ *
+ * @param array $uriComponents The URI components
+ *
+ * @return string
+ */
+ private function _createAuthority($uriComponents)
+ {
+ $authority = sprintf(
+ Resources::AUTHORITY_FORMAT,
+ $uriComponents[Resources::PHP_URL_USER],
+ $uriComponents[Resources::PHP_URL_PASS]
+ );
+
+ return $authority;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/BrokerProperties.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/BrokerProperties.php
new file mode 100644
index 0000000..ad5f202
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/BrokerProperties.php
@@ -0,0 +1,786 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The properties of the broker of a brokered message.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class BrokerProperties
+{
+ /**
+ * The correlation ID.
+ *
+ * @var string
+ */
+ private $_correlationId;
+
+ /**
+ * The session ID.
+ *
+ * @var string
+ */
+ private $_sessionId;
+
+ /**
+ * The delivery count.
+ *
+ * @var integer
+ */
+ private $_deliveryCount;
+
+ /**
+ * The locked until time.
+ *
+ * @var \DateTime
+ */
+ private $_lockedUntilUtc;
+
+ /**
+ * The lock token.
+ *
+ * @var string
+ */
+ private $_lockToken;
+
+ /**
+ * The message Id.
+ *
+ * @var string
+ */
+ private $_messageId;
+
+ /**
+ * The label.
+ *
+ * @var string
+ */
+ private $_label;
+
+ /**
+ * The reply to.
+ *
+ * @var string
+ */
+ private $_replyTo;
+
+ /**
+ * The sequence number.
+ *
+ * @var string
+ */
+ private $_sequenceNumber;
+
+ /**
+ * The time to live.
+ *
+ * @var float
+ */
+ private $_timeToLive;
+
+ /**
+ * The to.
+ *
+ * @var string
+ */
+ private $_to;
+
+ /**
+ * The scheduled enqueue time.
+ *
+ * @var \DateTime
+ */
+ private $_scheduledEnqueueTimeUtc;
+
+ /**
+ * The reply to session ID.
+ *
+ * @var string
+ */
+ private $_replyToSessionId;
+
+ /**
+ * The location of the message.
+ *
+ * @var string
+ */
+ private $_messageLocation;
+
+ /**
+ * The location of the lock.
+ *
+ * @var string
+ */
+ private $_lockLocation;
+
+
+ /**
+ * Creates a broker properties instance with default parameters.
+ */
+ public function __construct()
+ {
+ }
+
+ // @codingStandardsIgnoreStart
+
+ /**
+ * Creates a broker properties instance with specified JSON message.
+ *
+ * @param string $brokerPropertiesJson A JSON message representing a
+ * broker properties.
+ *
+ * @return none
+ */
+ public static function create($brokerPropertiesJson)
+ {
+ Validate::isString($brokerPropertiesJson, 'brokerPropertiesJson');
+
+ $brokerProperties = new BrokerProperties();
+
+ $brokerPropertiesArray = (array)json_decode($brokerPropertiesJson);
+
+ if (array_key_exists('CorrelationId', $brokerPropertiesArray)) {
+ $brokerProperties->setCorrelationId(
+ $brokerPropertiesArray['CorrelationId']
+ );
+ }
+
+ if (array_key_exists('SessionId', $brokerPropertiesArray)) {
+ $brokerProperties->setSessionId(
+ $brokerPropertiesArray['SessionId']
+ );
+ }
+
+ if (array_key_exists('DeliveryCount', $brokerPropertiesArray)) {
+ $brokerProperties->setDeliveryCount(
+ $brokerPropertiesArray['DeliveryCount']
+ );
+ }
+
+ if (array_key_exists('LockedUntilUtc', $brokerPropertiesArray)) {
+ $brokerProperties->setLockedUntilUtc(
+ \DateTime::createFromFormat(
+ Resources::AZURE_DATE_FORMAT,
+ $brokerPropertiesArray['LockedUntilUtc']
+ )
+ );
+ }
+
+ if (array_key_exists('LockToken', $brokerPropertiesArray)) {
+ $brokerProperties->setLockToken(
+ $brokerPropertiesArray['LockToken']
+ );
+ }
+
+ if (array_key_exists('MessageId', $brokerPropertiesArray)) {
+ $brokerProperties->setMessageId(
+ $brokerPropertiesArray['MessageId']
+ );
+ }
+
+ if (array_key_exists('Label', $brokerPropertiesArray)) {
+ $brokerProperties->setLabel($brokerPropertiesArray['Label']);
+ }
+
+ if (array_key_exists('ReplyTo', $brokerPropertiesArray)) {
+ $brokerProperties->setReplyTo($brokerPropertiesArray['ReplyTo']);
+ }
+
+ if (array_key_exists('SequenceNumber', $brokerPropertiesArray)) {
+ $brokerProperties->setSequenceNumber(
+ $brokerPropertiesArray['SequenceNumber']
+ );
+ }
+
+ if (array_key_exists('TimeToLive', $brokerPropertiesArray)) {
+ $brokerProperties->setTimeToLive(
+ doubleval($brokerPropertiesArray['TimeToLive'])
+ );
+ }
+
+ if (array_key_exists('To', $brokerPropertiesArray)) {
+ $brokerProperties->setTo($brokerPropertiesArray['To']);
+ }
+
+ if (array_key_exists(
+ 'ScheduledEnqueueTimeUtc',
+ $brokerPropertiesArray
+ )
+ ) {
+ $brokerProperties->setScheduledEnqueueTimeUtc(
+ \DateTime::createFromFormat(
+ Resources::AZURE_DATE_FORMAT,
+ $brokerPropertiesArray['ScheduledEnqueueTimeUtc']
+ )
+ );
+ }
+
+ if (array_key_exists('ReplyToSessionId', $brokerPropertiesArray)) {
+ $brokerProperties->setReplyToSessionId(
+ $brokerPropertiesArray['ReplyToSessionId']
+ );
+ }
+
+ if (array_key_exists('MessageLocation', $brokerPropertiesArray)) {
+ $brokerProperties->setMessageLocation(
+ $brokerPropertiesArray['MessageLocation']
+ );
+ }
+
+ if (array_key_exists('LockLocation', $brokerPropertiesArray)) {
+ $brokerProperties->setLockLocation(
+ $brokerPropertiesArray['LockLocation']
+ );
+ }
+
+ return $brokerProperties;
+ }
+
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Gets the correlation ID.
+ *
+ * @return string
+ */
+ public function getCorrelationId()
+ {
+ return $this->_correlationId;
+ }
+
+ /**
+ * Sets the correlation ID.
+ *
+ * @param string $correlationId The correlation ID.
+ *
+ * @return none
+ */
+ public function setCorrelationId($correlationId)
+ {
+ $this->_correlationId = $correlationId;
+ }
+
+ /**
+ * Gets the session ID.
+ *
+ * @return string
+ */
+ public function getSessionId()
+ {
+ return $this->_sessionId;
+ }
+
+ /**
+ * Sets the session ID.
+ *
+ * @param string $sessionId The ID of the session.
+ *
+ * @return none
+ */
+ public function setSessionId($sessionId)
+ {
+ $this->_sessionId = $sessionId;
+ }
+
+ /**
+ * Gets the delivery count.
+ *
+ * @return integer
+ */
+ public function getDeliveryCount()
+ {
+ return $this->_deliveryCount;
+ }
+
+ /**
+ * Sets the delivery count.
+ *
+ * @param integer $deliveryCount The count of the delivery.
+ *
+ * @return none
+ */
+ public function setDeliveryCount($deliveryCount)
+ {
+ $this->_deliveryCount = $deliveryCount;
+ }
+
+ /**
+ * Gets the locked until time.
+ *
+ * @return string
+ */
+ public function getLockedUntilUtc()
+ {
+ return $this->_lockedUntilUtc;
+ }
+
+ /**
+ * Sets the locked until time.
+ *
+ * @param string $lockedUntilUtc The locked until time.
+ *
+ * @return none
+ */
+ public function setLockedUntilUtc($lockedUntilUtc)
+ {
+ $this->_lockedUntilUtc = $lockedUntilUtc;
+ }
+
+ /**
+ * Gets lock token.
+ *
+ * @return string.
+ */
+ public function getLockToken()
+ {
+ return $this->_lockToken;
+ }
+
+ /**
+ * Sets the lock token.
+ *
+ * @param string $lockToken The lock token.
+ *
+ * @return none
+ */
+ public function setLockToken($lockToken)
+ {
+ $this->_lockToken = $lockToken;
+ }
+
+ /**
+ * Gets the message ID.
+ *
+ * @return string
+ */
+ public function getMessageId()
+ {
+ return $this->_messageId;
+ }
+
+ /**
+ * Sets the message ID.
+ *
+ * @param string $messageId The ID of the message.
+ *
+ * @return none
+ */
+ public function setMessageId($messageId)
+ {
+ $this->_messageId = $messageId;
+ }
+
+ /**
+ * Gets the label.
+ *
+ * @return string
+ */
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ /**
+ * Sets the label.
+ *
+ * @param string $label The label of the broker property.
+ *
+ * @return none
+ */
+ public function setLabel($label)
+ {
+ $this->_label = $label;
+ }
+
+ /**
+ * Gets the reply to.
+ *
+ * @return string
+ */
+ public function getReplyTo()
+ {
+ return $this->_replyTo;
+ }
+
+ /**
+ * Sets the reply to.
+ *
+ * @param string $replyTo The reply to.
+ *
+ * @return none
+ */
+ public function setReplyTo($replyTo)
+ {
+ $this->_replyTo = $replyTo;
+ }
+
+ /**
+ * Gets the sequence number.
+ *
+ * @return integer
+ */
+ public function getSequenceNumber()
+ {
+ return $this->_sequenceNumber;
+ }
+
+ /**
+ * Sets the sequence number.
+ *
+ * @param integer $sequenceNumber The sequence number.
+ *
+ * @return none
+ */
+ public function setSequenceNumber($sequenceNumber)
+ {
+ $this->_sequenceNumber = $sequenceNumber;
+ }
+
+ /**
+ * Gets time to live.
+ *
+ * @return string
+ */
+ public function getTimeToLive()
+ {
+ return $this->_timeToLive;
+ }
+
+ /**
+ * Sets time to live.
+ *
+ * @param string $timeToLive The time to live.
+ *
+ * @return none
+ */
+ public function setTimeToLive($timeToLive)
+ {
+ $this->_timeToLive = $timeToLive;
+ }
+
+ /**
+ * Gets to.
+ *
+ * @return string
+ */
+ public function getTo()
+ {
+ return $this->_to;
+ }
+
+ /**
+ * Sets to.
+ *
+ * @param string $to To.
+ *
+ * @return none
+ */
+ public function setTo($to)
+ {
+ $this->_to = $to;
+ }
+
+ /**
+ * Gets scheduled enqueue time UTC.
+ *
+ * @return string
+ */
+ public function getScheduledEnqueueTimeUtc()
+ {
+ return $this->_scheduledEnqueueTimeUtc;
+ }
+
+ /**
+ * Sets scheduled enqueue time UTC.
+ *
+ * @param string $scheduledEnqueueTimeUtc The scheduled enqueue time.
+ *
+ * @return none
+ */
+ public function setScheduledEnqueueTimeUtc($scheduledEnqueueTimeUtc)
+ {
+ $this->_scheduledEnqueueTimeUtc = $scheduledEnqueueTimeUtc;
+ }
+
+ /**
+ * Gets reply to session ID.
+ *
+ * @return string
+ */
+ public function getReplyToSessionId()
+ {
+ return $this->_replyToSessionId;
+ }
+
+ /**
+ * Sets reply to session.
+ *
+ * @param string $replyToSessionId reply to session.
+ *
+ * @return none
+ */
+ public function setReplyToSessionId($replyToSessionId)
+ {
+ $this->_replyToSessionId = $replyToSessionId;
+ }
+
+ /**
+ * Gets message location.
+ *
+ * @return string
+ */
+ public function getMessageLocation()
+ {
+ return $this->_messageLocation;
+ }
+
+ /**
+ * Sets the location of the message.
+ *
+ * @param string $messageLocation The location of the message.
+ *
+ * @return none
+ */
+ public function setMessageLocation($messageLocation)
+ {
+ $this->_messageLocation = $messageLocation;
+ }
+
+ /**
+ * Gets the location of the lock.
+ *
+ * @return string
+ */
+ public function getLockLocation()
+ {
+ return $this->_lockLocation;
+ }
+
+ /**
+ * Sets the location of the lock.
+ *
+ * @param string $lockLocation The location of the lock.
+ *
+ * @return none
+ */
+ public function setLockLocation($lockLocation)
+ {
+ $this->_lockLocation = $lockLocation;
+ }
+
+ /**
+ * Gets a string representing the broker property.
+ *
+ * @return string
+ */
+ public function toString()
+ {
+ $value = array();
+
+ $this->setValueArrayString(
+ $value,
+ 'CorrelationId',
+ $this->_correlationId
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'SessionId',
+ $this->_sessionId
+ );
+
+ $this->setValueArrayInt(
+ $value,
+ 'DeliveryCount',
+ $this->_deliveryCount
+ );
+
+ $this->setValueArrayDateTime(
+ $value,
+ 'LockedUntilUtc',
+ $this->_lockedUntilUtc
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'LockToken',
+ $this->_lockToken
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'MessageId',
+ $this->_messageId
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'Label',
+ $this->_label
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'ReplyTo',
+ $this->_replyTo
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'SequenceNumber',
+ $this->_sequenceNumber
+ );
+
+ $this->setValueArrayFloat(
+ $value,
+ 'TimeToLive',
+ $this->_timeToLive
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'To',
+ $this->_to
+ );
+
+ $this->setValueArrayDateTime(
+ $value,
+ 'ScheduledEnqueueTimeUtc',
+ $this->_scheduledEnqueueTimeUtc
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'ReplyToSessionId',
+ $this->_replyToSessionId
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'MessageLocation',
+ $this->_messageLocation
+ );
+
+ $this->setValueArrayString(
+ $value,
+ 'LockLocation',
+ $this->_lockLocation
+ );
+
+ $result = json_encode($value);
+ return $result;
+ }
+
+ /**
+ * Sets a string in an array.
+ *
+ * @param array &$valueArray The array of a set of values.
+ * @param string $key The key of the key value pair.
+ * @param string $value The value of the key value pair.
+ *
+ * @return none
+ */
+ public function setValueArrayString(&$valueArray, $key, $value)
+ {
+ Validate::isArray($valueArray, 'valueArray');
+ Validate::isString($key, 'key');
+
+ if (!empty($value)) {
+ Validate::isString($value, 'value');
+ $valueArray[$key] = $value;
+ }
+ }
+
+ /**
+ * Sets an integer value in an array.
+ *
+ * @param array &$valueArray The array of a set of values.
+ * @param string $key The key of the key value pair.
+ * @param int $value The value of the key value pair.
+ *
+ * @return none
+ */
+ public function setValueArrayInt(&$valueArray, $key, $value)
+ {
+ Validate::isArray($valueArray, 'valueArray');
+ Validate::isString($key, 'key');
+
+ if (!empty($value)) {
+ Validate::isInteger($value, 'value');
+ $valueArray[$key] = $value;
+ }
+ }
+
+ /**
+ * Sets a float value in an array.
+ *
+ * @param array &$valueArray The array of a set of values.
+ * @param string $key The key of the key value pair.
+ * @param float $value The value of the key value pair.
+ *
+ * @return none
+ */
+ public function setValueArrayFloat(&$valueArray, $key, $value)
+ {
+ Validate::isArray($valueArray, 'valueArray');
+ Validate::isString($key, 'key');
+
+ if (!empty($value)) {
+ Validate::isDouble($value, 'value');
+ $valueArray[$key] = (double)$value;
+ }
+ }
+
+ /**
+ * Sets a DateTime value in an array.
+ *
+ * @param array &$valueArray The array of a set of values.
+ * @param string $key The key of the key value pair.
+ * @param \DateTime $value The value of the key value pair.
+ *
+ * @return none
+ */
+ public function setValueArrayDateTime(&$valueArray, $key, $value)
+ {
+ Validate::isArray($valueArray, 'valueArray');
+ Validate::isString($key, 'key');
+
+ if (!empty($value)) {
+ Validate::isDate($value, 'value');
+ $valueArray[$key] = gmdate(
+ Resources::AZURE_DATE_FORMAT,
+ $value->getTimestamp()
+ );
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/BrokeredMessage.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/BrokeredMessage.php
new file mode 100644
index 0000000..15d432b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/BrokeredMessage.php
@@ -0,0 +1,552 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\ServiceBus\Models\BrokerProperties;
+
+/**
+ * A class representing the brokered message of Windows Azure Service Bus.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class BrokeredMessage
+{
+ /**
+ * The properties of the broker.
+ *
+ * @var BrokerProperties
+ */
+ private $_brokerProperties;
+
+ /**
+ * The body of the brokered message.
+ *
+ * @var string
+ */
+ private $_body;
+
+ /**
+ * The content type of the brokered message.
+ *
+ * @var string
+ */
+ private $_contentType;
+
+ /**
+ * The date of the brokered message.
+ *
+ * @var \DateTime
+ */
+ private $_date;
+
+ /**
+ * The properties of the message that are customized.
+ *
+ * @var array
+ */
+ private $_customProperties;
+
+ /**
+ * Creates a brokered message with specified broker properties.
+ *
+ * @param string $body The body of the message.
+ */
+ public function __construct($body = Resources::EMPTY_STRING)
+ {
+ Validate::isString($body, 'body');
+ $this->_body = $body;
+ $this->_brokerProperties = new BrokerProperties();
+ $this->_customProperties = array();
+ }
+
+ /**
+ * Gets the broker properties.
+ *
+ * @return BrokerProperties
+ */
+ public function getBrokerProperties()
+ {
+ return $this->_brokerProperties;
+ }
+
+ /**
+ * Sets the broker properties.
+ *
+ * @param BrokerProperties $brokerProperties The properties of broker.
+ *
+ * @return none
+ */
+ public function setBrokerProperties($brokerProperties)
+ {
+ $this->_brokerProperties = $brokerProperties;
+ }
+
+ /**
+ * Gets the body of the brokered message.
+ *
+ * @return string
+ */
+ public function getBody()
+ {
+ return $this->_body;
+ }
+
+ /**
+ * Sets the body of the brokered message.
+ *
+ * @param string $body The body of the brokered message.
+ *
+ * @return none
+ */
+ public function setBody($body)
+ {
+ $this->_body = $body;
+ }
+
+ /**
+ * Gets the content type of the brokered message.
+ *
+ * @return string
+ */
+ public function getContentType()
+ {
+ return $this->_contentType;
+ }
+
+ /**
+ * Sets the content type of the brokered message.
+ *
+ * @param string $contentType The content type of
+ * the brokered message.
+ *
+ * @return none
+ */
+ public function setContentType($contentType)
+ {
+ $this->_contentType = $contentType;
+ }
+
+ /**
+ * Gets the date of the brokered message.
+ *
+ * @return \DateTime
+ */
+ public function getDate()
+ {
+ return $this->_date;
+ }
+
+ /**
+ * Sets the date of the brokered message.
+ *
+ * @param \DateTime $date Sets the date of the brokered message.
+ *
+ * @return none
+ */
+ public function setDate($date)
+ {
+ $this->_date = $date;
+ }
+
+ /**
+ * Gets the value of a custom property.
+ *
+ * @param string $propertyName The name of the property.
+ *
+ * @return string
+ */
+ public function getProperty($propertyName)
+ {
+ Validate::isString($propertyName, 'propertyName');
+ return $this->_customProperties[strtolower($propertyName)];
+ }
+
+ /**
+ * Sets the value of a custom property.
+ *
+ * @param string $propertyName The name of the property.
+ * @param mixed $propertyValue The value of the property.
+ *
+ * @return none
+ */
+ public function setProperty($propertyName, $propertyValue)
+ {
+ Validate::isString($propertyName, 'propertyName');
+ Validate::notNull($propertyValue, 'propertyValue');
+
+ $this->_customProperties[strtolower($propertyName)] = $propertyValue;
+ }
+
+ /**
+ * Gets the custom properties.
+ *
+ * @return array
+ */
+ public function getProperties()
+ {
+ return $this->_customProperties;
+ }
+
+ /**
+ * Gets the delivery count.
+ *
+ * @return integer
+ */
+ public function getDeliveryCount()
+ {
+ return $this->_brokerProperties->getDeliveryCount();
+ }
+
+ /**
+ * Sets the delivery count.
+ *
+ * @param integer $deliveryCount The times that the message has been delivered.
+ *
+ * @return none
+ */
+ public function setDeliveryCount($deliveryCount)
+ {
+ $this->_brokerProperties->setDeliveryCount($deliveryCount);
+ }
+
+ /**
+ * Gets the ID of the message.
+ *
+ * @return string
+ */
+ public function getMessageId()
+ {
+ return $this->_brokerProperties->getMessageId();
+ }
+
+ /**
+ * Sets the ID of the message.
+ *
+ * @param string $messageId The ID of the message.
+ *
+ * @return none
+ */
+ public function setMessageId($messageId)
+ {
+ $this->_brokerProperties->setMessageId($messageId);
+ }
+
+ /**
+ * Gets the sequence number.
+ *
+ * @return integer
+ */
+ public function getSequenceNumber()
+ {
+ return $this->_brokerProperties->getSequenceNumber();
+ }
+
+ /**
+ * Sets the sequence number.
+ *
+ * @param integer $sequenceNumber The sequence number.
+ *
+ * @return none
+ */
+ public function setSequenceNumber($sequenceNumber)
+ {
+ $this->_brokerProperties->setSequenceNumber($sequenceNumber);
+ }
+
+ /**
+ * Gets the time to live.
+ *
+ * @return string
+ */
+ public function getTimeToLive()
+ {
+ return $this->_brokerProperties->getTimeToLive();
+ }
+
+ /**
+ * Sets the time to live.
+ *
+ * @param string $timeToLive The time to live.
+ *
+ * @return none
+ */
+ public function setTimeToLive($timeToLive)
+ {
+ $this->_brokerProperties->setTimeToLive($timeToLive);
+ }
+
+ /**
+ * Gets the lock token.
+ *
+ * @return string
+ */
+ public function getLockToken()
+ {
+ return $this->_brokerProperties->getLockToken();
+ }
+
+ /**
+ * Sets the lock token.
+ *
+ * @param string $lockToken The token of the lock.
+ *
+ * @return none
+ */
+ public function setLockToken($lockToken)
+ {
+ $this->_brokerProperties->setLockToken($lockToken);
+ }
+
+ /**
+ * Gets the time of locked until UTC.
+ *
+ * @return string
+ */
+ public function getLockedUntilUtc()
+ {
+ return $this->_brokerProperties->getLockedUntilUtc();
+ }
+
+ /**
+ * Sets the time of locked until UTC.
+ *
+ * @param string $lockedUntilUtc The time of locked until UTC.
+ *
+ * @return none
+ */
+ public function setLockedUntilUtc($lockedUntilUtc)
+ {
+ $this->_brokerProperties->setLockedUntilUtc($lockedUntilUtc);
+ }
+
+ /**
+ * Gets the correlation ID.
+ *
+ * @return string
+ */
+ public function getCorrelationId()
+ {
+ return $this->_brokerProperties->getCorrelationId();
+ }
+
+ /**
+ * Sets the correlation ID.
+ *
+ * @param string $correlationId The ID of the correlation.
+ *
+ * @return none
+ */
+ public function setCorrelationId($correlationId)
+ {
+ $this->_brokerProperties->setCorrelationId($correlationId);
+ }
+
+ /**
+ * Gets the session ID.
+ *
+ * @return string
+ */
+ public function getSessionId()
+ {
+ return $this->_brokerProperties->getSessionId();
+ }
+
+ /**
+ * Sets the session ID.
+ *
+ * @param string $sessionId The ID of the session.
+ *
+ * @return none
+ */
+ public function setSessionId($sessionId)
+ {
+ $this->_brokerProperties->setSessionId($sessionId);
+ }
+
+ /**
+ * Gets the label.
+ *
+ * @return string
+ */
+ public function getLabel()
+ {
+ return $this->_brokerProperties->getLabel();
+ }
+
+ /**
+ * Sets the label.
+ *
+ * @param string $label The label of the broker properties.
+ *
+ * @return none
+ */
+ public function setLabel($label)
+ {
+ $this->_brokerProperties->setLabel($label);
+ }
+
+ /**
+ * Gets reply to.
+ *
+ * @return string
+ */
+ public function getReplyTo()
+ {
+ return $this->_brokerProperties->getReplyTo();
+ }
+
+ /**
+ * Sets the reply to.
+ *
+ * @param string $replyTo The reply to value.
+ *
+ * @return none
+ */
+ public function setReplyTo($replyTo)
+ {
+ $this->_brokerProperties->setReplyTo($replyTo);
+ }
+
+ /**
+ * Gets to.
+ *
+ * @return string
+ */
+ public function getTo()
+ {
+ return $this->_brokerProperties->getTo();
+ }
+
+ /**
+ * Sets the to.
+ *
+ * @param string $to to.
+ *
+ * @return none
+ */
+ public function setTo($to)
+ {
+ $this->_brokerProperties->setTo($to);
+ }
+
+ /**
+ * Gets the scheduled enqueue time.
+ *
+ * @return string
+ */
+ public function getScheduledEnqueueTimeUtc()
+ {
+ return $this->_brokerProperties->getScheduledEnqueueTimeUtc();
+ }
+
+ /**
+ * Sets the scheduled enqueue time.
+ *
+ * @param string $scheduledEnqueueTime The date/time of the message.
+ *
+ * @return none
+ */
+ public function setScheduledEnqueueTimeUtc($scheduledEnqueueTime)
+ {
+ $this->_brokerProperties->setScheduledEnqueueTimeUtc($scheduledEnqueueTime);
+ }
+
+ /**
+ * Gets the reply to session ID.
+ *
+ * @return string
+ */
+ public function getReplyToSessionId()
+ {
+ return $this->_brokerProperties->getReplyToSessionId();
+ }
+
+ /**
+ * Sets the reply to session ID.
+ *
+ * @param string $replyToSessionId The session ID of the reply to recipient.
+ *
+ * @return none
+ */
+ public function setReplyToSessionId($replyToSessionId)
+ {
+ $this->_brokerProperties->setReplyToSessionId($replyToSessionId);
+ }
+
+ /**
+ * Gets the message location.
+ *
+ * @return string
+ */
+ public function getMessageLocation()
+ {
+ return $this->_brokerProperties->getMessageLocation();
+ }
+
+ /**
+ * Sets the message location.
+ *
+ * @param string $messageLocation The location of the message.
+ *
+ * @return none
+ */
+ public function setMessageLocation($messageLocation)
+ {
+ $this->_brokerProperties->setMessageLocation($messageLocation);
+ }
+
+
+ /**
+ * Gets the location of the lock.
+ *
+ * @return string
+ */
+ public function getLockLocation()
+ {
+ return $this->_brokerProperties->getLockLocation();
+ }
+
+ /**
+ * Sets the location of the lock.
+ *
+ * @param string $lockLocation The location of the lock.
+ *
+ * @return none
+ */
+ public function setLockLocation($lockLocation)
+ {
+ $this->_brokerProperties->setLockLocation($lockLocation);
+ }
+
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/CorrelationFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/CorrelationFilter.php
new file mode 100644
index 0000000..817580a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/CorrelationFilter.php
@@ -0,0 +1,78 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\ServiceBus\Internal\Filter;
+
+/**
+ * The base class for rule filter.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class CorrelationFilter extends Filter
+{
+ /**
+ * The ID of the correlation.
+ *
+ * @var string
+ */
+ private $_correlationId;
+
+ /**
+ * Creates a correlation filter with default parameter.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ $this->attributes['xsi:type'] = 'CorrelationFilter';
+ }
+
+ /**
+ * Gets the ID of the correlation.
+ *
+ * @return string
+ */
+ public function getCorrelationId()
+ {
+ return $this->_correlationId;
+ }
+
+ /**
+ * Sets the ID of the correlation.
+ *
+ * @param string $correlationId The ID of the correlation.
+ *
+ * @return none
+ */
+ public function setCorrelationId($correlationId)
+ {
+ $this->_correlationId = $correlationId;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/EmptyRuleAction.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/EmptyRuleAction.php
new file mode 100644
index 0000000..6b22d3a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/EmptyRuleAction.php
@@ -0,0 +1,50 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\ServiceBus\Internal\Action;
+
+/**
+ * The empty rule action class.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class EmptyRuleAction extends Action
+{
+ /**
+ * Creates an empty rule action with default parameter.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ $this->attributes['xsi:type'] = 'EmptyRuleAction';
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/FalseFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/FalseFilter.php
new file mode 100644
index 0000000..d89565e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/FalseFilter.php
@@ -0,0 +1,50 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\ServiceBus\Internal\Filter;
+
+/**
+ * The false filter.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class FalseFilter extends Filter
+{
+ /**
+ * Creates a filter with default parameter.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ $this->attributes['xsi:type'] = 'FalseFilter';
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListOptions.php
new file mode 100644
index 0000000..3e8337f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListOptions.php
@@ -0,0 +1,105 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+
+/**
+ * The base class for the options for list request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ListOptions
+{
+ /**
+ * The skip query parameter for list API.
+ *
+ * @var integer
+ */
+ private $_skip;
+
+ /**
+ * The top query parameter for list API.
+ *
+ * @var integer
+ */
+ private $_top;
+
+ /**
+ * Creates a list option instance with default parameters.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Gets the skip parameter.
+ *
+ * @return integer
+ */
+ public function getSkip()
+ {
+ return $this->_skip;
+ }
+
+ /**
+ * Sets the skip parameter.
+ *
+ * @param integer $skip value.
+ *
+ * @return none
+ */
+ public function setSkip($skip)
+ {
+ $this->_skip = $skip;
+ }
+
+ /**
+ * Gets the top parameter.
+ *
+ * @return integer
+ */
+ public function getTop()
+ {
+ return $this->_top;
+ }
+
+ /**
+ * Sets the top parameter.
+ *
+ * @param integer $top value.
+ *
+ * @return none
+ */
+ public function setTop($top)
+ {
+ $this->_top = $top;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListQueuesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListQueuesOptions.php
new file mode 100644
index 0000000..e697a7e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListQueuesOptions.php
@@ -0,0 +1,42 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\ServiceBus\Models\ListOptions;
+
+/**
+ * This options to list queues.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ListQueuesOptions extends ListOptions
+{
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListQueuesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListQueuesResult.php
new file mode 100644
index 0000000..ef905e3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListQueuesResult.php
@@ -0,0 +1,99 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+
+use WindowsAzure\Common\Internal\Atom\Feed;
+use WindowsAzure\Common\Internal\Atom\Entry;
+
+/**
+ * The results of list queues request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class ListQueuesResult extends Feed
+{
+ /**
+ * The information of the queue.
+ *
+ * @var array
+ */
+ private $_queueInfos;
+
+ /**
+ * Populates the properties with the response from the list queues request.
+ *
+ * @param string $response The body of the response of the list queues request.
+ *
+ * @return none
+ */
+ public function parseXml($response)
+ {
+ parent::parseXml($response);
+ $listQueuesResultXml = new \SimpleXMLElement($response);
+ $this->_queueInfos = array();
+ foreach ($listQueuesResultXml->entry as $entry) {
+ $queueInfo = new QueueInfo();
+ $queueInfo->parseXml($entry->asXml());
+ $this->_queueInfos[] = $queueInfo;
+ }
+ }
+
+ /**
+ * Creates a queue with default parameters.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Gets the queue information.
+ *
+ * @return array
+ */
+ public function getQueueInfos()
+ {
+ return $this->_queueInfos;
+ }
+
+ /**
+ * Sets the information of the queue.
+ *
+ * @param array $queueInfos The information of the queue.
+ *
+ * @return none
+ */
+ public function setQueueInfos($queueInfos)
+ {
+ $this->_queueInfos = $queueInfos;
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListRulesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListRulesOptions.php
new file mode 100644
index 0000000..776627c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListRulesOptions.php
@@ -0,0 +1,42 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+
+use WindowsAzure\ServiceBus\Models\ListOptions;
+
+/**
+ * The options to specify a list rules request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ListRulesOptions extends ListOptions
+{
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListRulesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListRulesResult.php
new file mode 100644
index 0000000..3d69682
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListRulesResult.php
@@ -0,0 +1,101 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+
+use WindowsAzure\Common\Internal\Atom\Feed;
+use WindowsAzure\Common\Internal\Atom\Entry;
+use WindowsAzure\ServiceBus\Models\RuleInfo;
+
+/**
+ * The result of the list rules request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class ListRulesResult extends Feed
+{
+ /**
+ * The information of the rule.
+ *
+ * @var array
+ */
+ private $_ruleInfos;
+
+ /**
+ * Populates the properties with the response from the list rules request.
+ *
+ * @param string $response The body of the response of the list rules request.
+ *
+ * @return none
+ */
+ public function parseXml($response)
+ {
+ parent::parseXml($response);
+ $listRulesResultXml = new \SimpleXMLElement($response);
+ $this->_ruleInfos = array();
+
+ foreach ($listRulesResultXml->entry as $entry) {
+ $ruleInfo = new RuleInfo();
+ $ruleInfo->parseXml($entry->asXml());
+ $this->_ruleInfos[] = $ruleInfo;
+ }
+ }
+
+ /**
+ * Creates a list rules result instance with default parameters.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Gets the information of the rules.
+ *
+ * @return array
+ */
+ public function getRuleInfos()
+ {
+ return $this->_ruleInfos;
+ }
+
+ /**
+ * Sets the information of the rule.
+ *
+ * @param array $ruleInfos The information of the rule.
+ *
+ * @return none
+ */
+ public function setRuleInfos($ruleInfos)
+ {
+ $this->_ruleInfos = $ruleInfos;
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListSubscriptionsOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListSubscriptionsOptions.php
new file mode 100644
index 0000000..41cd776
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListSubscriptionsOptions.php
@@ -0,0 +1,41 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\ServiceBus\Models\ListOptions;
+
+/**
+ * The options to list the subscriptions.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ListSubscriptionsOptions extends ListOptions
+{
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListSubscriptionsResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListSubscriptionsResult.php
new file mode 100644
index 0000000..f6c3d42
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListSubscriptionsResult.php
@@ -0,0 +1,104 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+
+use WindowsAzure\Common\Internal\Atom\Feed;
+use WindowsAzure\Common\Internal\Atom\Content;
+use WindowsAzure\ServiceBus\Models\SubscriptionInfo;
+
+/**
+ * The result of the list subscription request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ListSubscriptionsResult extends Feed
+{
+ /**
+ * The information of the subscription.
+ *
+ * @var array
+ */
+ private $_subscriptionInfos;
+
+ /**
+ * Populates the properties with the response from the list
+ * subscriptions request.
+ *
+ * @param string $response The body of the response of the list
+ * subscriptions request.
+ *
+ * @return none
+ */
+ public function parseXml($response)
+ {
+ parent::parseXml($response);
+ $listSubscriptionsResultXml = new \SimpleXMLElement($response);
+ $this->_subscriptionInfos = array();
+ foreach ($listSubscriptionsResultXml->entry as $entry) {
+ $subscriptionInfo = new SubscriptionInfo();
+ $subscriptionInfo->parseXml($entry->asXml());
+ $this->_subscriptionInfos[] = $subscriptionInfo;
+ }
+ }
+
+ /**
+ * Creates a list subscriptions result with default parameters.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Gets the information of the subscription.
+ *
+ * @return array
+ */
+ public function getSubscriptionInfos()
+ {
+ return $this->_subscriptionInfos;
+ }
+
+ /**
+ * Sets the information of the rule.
+ *
+ * @param array $subscriptionInfos The information of the
+ * subscription.
+ *
+ * @return none
+ */
+ public function setSubscriptionInfos($subscriptionInfos)
+ {
+ $this->_subscriptionInfos = $subscriptionInfos;
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListTopicsOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListTopicsOptions.php
new file mode 100644
index 0000000..575b963
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListTopicsOptions.php
@@ -0,0 +1,42 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+
+use WindowsAzure\ServiceBus\Models\ListOptions;
+
+/**
+ * This class contains the options for list topics request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ListTopicsOptions extends ListOptions
+{
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListTopicsResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListTopicsResult.php
new file mode 100644
index 0000000..7fbb4e2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ListTopicsResult.php
@@ -0,0 +1,99 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+
+use WindowsAzure\Common\Internal\Atom\Feed;
+use WindowsAzure\Common\Internal\Atom\Entry;
+
+/**
+ * The result of a list topics request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class ListTopicsResult extends Feed
+{
+ /**
+ * Gets the information of the topic.
+ *
+ * @var array
+ */
+ private $_topicInfos;
+
+ /**
+ * Populates the properties with a the response from the list topics request.
+ *
+ * @param string $response The body of the response of the list topics request.
+ *
+ * @return none
+ */
+ public function parseXml($response)
+ {
+ parent::parseXml($response);
+ $listTopicsResultXml = new \SimpleXMLElement($response);
+ $this->_topicInfos = array();
+ foreach ($listTopicsResultXml->entry as $entry) {
+ $topicInfo = new TopicInfo();
+ $topicInfo->parseXml($entry->asXml());
+ $this->_topicInfos[] = $topicInfo;
+ }
+ }
+
+ /**
+ * Creates a list topics result with default parameters.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Gets the information of the topic.
+ *
+ * @return array
+ */
+ public function getTopicInfos()
+ {
+ return $this->_topicInfos;
+ }
+
+ /**
+ * Sets the topic information.
+ *
+ * @param array $topicInfos The information of the topics.
+ *
+ * @return none
+ */
+ public function setTopicInfos($topicInfos)
+ {
+ $this->_topicInfos = $topicInfos;
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/QueueDescription.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/QueueDescription.php
new file mode 100644
index 0000000..6ae58f7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/QueueDescription.php
@@ -0,0 +1,477 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The description of a queue.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class QueueDescription
+{
+ /**
+ * The duration of the lock.
+ *
+ * @var string
+ */
+ private $_lockDuration;
+
+ /**
+ * The maximum size in mega bytes.
+ *
+ * @var integer
+ */
+ private $_maxSizeInMegabytes;
+
+ /**
+ * Requires duplicate detection for queue.
+ *
+ * @var boolean
+ */
+ private $_requiresDuplicateDetection;
+
+ /**
+ * Requires session for the queue.
+ *
+ * @var boolean
+ */
+ private $_requiresSession;
+
+ /**
+ * The default message time to live.
+ *
+ * @var string
+ */
+ private $_defaultMessageTimeToLive;
+
+ /**
+ * The dead lettering on message expiration.
+ *
+ * @var string
+ */
+ private $_deadLetteringOnMessageExpiration;
+
+ /**
+ * The duplicate detection history time window.
+ *
+ * @var integer
+ */
+ private $_duplicateDetectionHistoryTimeWindow;
+
+ /**
+ * The maximum delivery count.
+ *
+ * @var integer
+ */
+ private $_maxDeliveryCount;
+
+ /**
+ * Enables batched operations.
+ *
+ * @var boolean
+ */
+ private $_enableBatchedOperations;
+
+ /**
+ * The size in bytes.
+ *
+ * @var integer
+ */
+ private $_sizeInBytes;
+
+ /**
+ * The count of the message.
+ *
+ * @var integer
+ */
+ private $_messageCount;
+
+ // @codingStandardsIgnoreStart
+
+ /**
+ * Creates a queue description object with specified XML string.
+ *
+ * @param string $queueDescriptionXml A XML based string describing
+ * the queue.
+ *
+ * @return none
+ */
+ public static function create($queueDescriptionXml)
+ {
+ $queueDescription = new QueueDescription();
+ $root = simplexml_load_string(
+ $queueDescriptionXml
+ );
+ $queueDescriptionArray = (array)$root;
+ if (array_key_exists('LockDuration', $queueDescriptionArray)) {
+ $queueDescription->setLockDuration(
+ (string)$queueDescriptionArray['LockDuration']
+ );
+ }
+
+ if (array_key_exists('MaxSizeInMegabytes', $queueDescriptionArray)) {
+ $queueDescription->setMaxSizeInMegabytes(
+ (integer)$queueDescriptionArray['MaxSizeInMegabytes']
+ );
+ }
+
+ if (array_key_exists(
+ 'RequiresDuplicateDetection',
+ $queueDescriptionArray
+ )
+ ) {
+ $queueDescription->setRequiresDuplicateDetection(
+ (boolean)$queueDescriptionArray['RequiresDuplicateDetection']
+ );
+ }
+
+ if (array_key_exists('RequiresSession', $queueDescriptionArray)) {
+ $queueDescription->setRequiresSession(
+ (boolean)$queueDescriptionArray['RequiresSession']
+ );
+ }
+
+ if (array_key_exists(
+ 'DefaultMessageTimeToLive',
+ $queueDescriptionArray
+ )
+ ) {
+ $queueDescription->setDefaultMessageTimeToLive(
+ (string)$queueDescriptionArray['DefaultMessageTimeToLive']
+ );
+ }
+
+ if (array_key_exists(
+ 'DeadLetteringOnMessageExpiration',
+ $queueDescriptionArray
+ )
+ ) {
+ $queueDescription->setDeadLetteringOnMessageExpiration(
+ (string)$queueDescriptionArray['DeadLetteringOnMessageExpiration']
+ );
+ }
+
+ if (array_key_exists(
+ 'DuplicateDetectionHistoryTimeWindow',
+ $queueDescriptionArray
+ )
+ ) {
+ $queueDescription->setDuplicateDetectionHistoryTimeWindow(
+ (string)$queueDescriptionArray['DuplicateDetectionHistoryTimeWindow']
+ );
+ }
+
+ if (array_key_exists('MaxDeliveryCount', $queueDescriptionArray)) {
+ $queueDescription->setMaxDeliveryCount(
+ (integer)$queueDescriptionArray['MaxDeliveryCount']
+ );
+ }
+
+ if (array_key_exists('EnableBatchedOperations', $queueDescriptionArray)) {
+ $queueDescription->setEnableBatchedOperations(
+ (boolean)$queueDescriptionArray['EnableBatchedOperations']
+ );
+ }
+
+ if (array_key_exists('SizeInBytes', $queueDescriptionArray)) {
+ $queueDescription->setSizeInBytes(
+ (integer)$queueDescriptionArray['SizeInBytes']
+ );
+ }
+
+ if (array_key_exists('MessageCount', $queueDescriptionArray)) {
+ $queueDescription->setMessageCount(
+ (integer)$queueDescriptionArray['MessageCount']
+ );
+ }
+
+ return $queueDescription;
+ }
+
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Creates a queue description instance with default parameters.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Gets the lock duration.
+ *
+ * @return string
+ */
+ public function getLockDuration()
+ {
+ return $this->_lockDuration;
+ }
+
+ /**
+ * Sets the lock duration.
+ *
+ * @param string $lockDuration The lock duration.
+ *
+ * @return none
+ */
+ public function setLockDuration($lockDuration)
+ {
+ $this->_lockDuration = $lockDuration;
+ }
+
+ /**
+ * gets the maximum size in mega bytes.
+ *
+ * @return integer
+ */
+ public function getMaxSizeInMegabytes()
+ {
+ return $this->_maxSizeInMegabytes;
+ }
+
+ /**
+ * Sets the max size in mega bytes.
+ *
+ * @param integer $maxSizeInMegabytes The max size in mega bytes.
+ *
+ * @return none
+ */
+ public function setMaxSizeInMegabytes($maxSizeInMegabytes)
+ {
+ $this->_maxSizeInMegabytes = $maxSizeInMegabytes;
+ }
+
+ /**
+ * Gets requires duplicate detection.
+ *
+ * @return boolean
+ */
+ public function getRequiresDuplicateDetection()
+ {
+ return $this->_requiresDuplicateDetection;
+ }
+
+ /**
+ * Sets requires duplicate detection.
+ *
+ * @param boolean $requiresDuplicateDetection If duplicate detection is required.
+ *
+ * @return none
+ */
+ public function setRequiresDuplicateDetection($requiresDuplicateDetection)
+ {
+ $this->_requiresDuplicateDetection = $requiresDuplicateDetection;
+ }
+
+ /**
+ * Gets the requires session.
+ *
+ * @return boolean
+ */
+ public function getRequiresSession()
+ {
+ return $this->_requiresSession;
+ }
+
+ /**
+ * Sets the requires session.
+ *
+ * @param boolean $requiresSession If session is required.
+ *
+ * @return none
+ */
+ public function setRequiresSession($requiresSession)
+ {
+ $this->_requiresSession = $requiresSession;
+ }
+
+ /**
+ * gets the default message time to live.
+ *
+ * @return string
+ */
+ public function getDefaultMessageTimeToLive()
+ {
+ return $this->_defaultMessageTimeToLive;
+ }
+
+ /**
+ * Sets the default message time to live.
+ *
+ * @param string $defaultMessageTimeToLive The default message time to live.
+ *
+ * @return none
+ */
+ public function setDefaultMessageTimeToLive($defaultMessageTimeToLive)
+ {
+ $this->_defaultMessageTimeToLive = $defaultMessageTimeToLive;
+ }
+
+ /**
+ * Gets dead lettering on message expiration.
+ *
+ * @return string
+ */
+ public function getDeadLetteringOnMessageExpiration()
+ {
+ return $this->_deadLetteringOnMessageExpiration;
+ }
+
+ /**
+ * Sets dead lettering on message expiration.
+ *
+ * @param string $deadLetteringOnMessageExpiration The dead lettering on
+ * message expiration.
+ *
+ * @return none
+ */
+ public function setDeadLetteringOnMessageExpiration(
+ $deadLetteringOnMessageExpiration
+ ) {
+ $this->_deadLetteringOnMessageExpiration = $deadLetteringOnMessageExpiration;
+ }
+
+ /**
+ * Gets duplicate detection history time window.
+ *
+ * @return string
+ */
+ public function getDuplicateDetectionHistoryTimeWindow()
+ {
+ return $this->_duplicateDetectionHistoryTimeWindow;
+ }
+
+ /**
+ * Sets the duplicate detection history time window.
+ *
+ * @param string $duplicateDetectionHistoryTimeWindow The duplicate
+ * detection history time window.
+ *
+ * @return none
+ */
+ public function setDuplicateDetectionHistoryTimeWindow(
+ $duplicateDetectionHistoryTimeWindow
+ ) {
+ $value = $duplicateDetectionHistoryTimeWindow;
+
+ $this->_duplicateDetectionHistoryTimeWindow = $value;
+ }
+
+ /**
+ * Gets maximum delivery count.
+ *
+ * @return string
+ */
+ public function getMaxDeliveryCount()
+ {
+ return $this->_maxDeliveryCount;
+ }
+
+ /**
+ * Sets the maximum delivery count.
+ *
+ * @param string $maxDeliveryCount The maximum delivery count.
+ *
+ * @return none
+ */
+ public function setMaxDeliveryCount($maxDeliveryCount)
+ {
+ $this->_maxDeliveryCount = $maxDeliveryCount;
+ }
+
+ /**
+ * Gets enable batched operation.
+ *
+ * @return boolean
+ */
+ public function getEnableBatchedOperations()
+ {
+ return $this->_enableBatchedOperations;
+ }
+
+ /**
+ * Sets enable batched operations.
+ *
+ * @param boolean $enableBatchedOperations Enable batched operations.
+ *
+ * @return none
+ */
+ public function setEnableBatchedOperations($enableBatchedOperations)
+ {
+ $this->_enableBatchedOperations = $enableBatchedOperations;
+ }
+
+ /**
+ * Gets the size in bytes.
+ *
+ * @return integer
+ */
+ public function getSizeInBytes()
+ {
+ return $this->_sizeInBytes;
+ }
+
+ /**
+ * Sets the size in bytes.
+ *
+ * @param integer $sizeInBytes The size in bytes.
+ *
+ * @return none
+ */
+ public function setSizeInBytes($sizeInBytes)
+ {
+ $this->_sizeInBytes = $sizeInBytes;
+ }
+
+ /**
+ * Gets the message count.
+ *
+ * @return integer
+ */
+ public function getMessageCount()
+ {
+ return $this->_messageCount;
+ }
+
+ /**
+ * Sets the message count.
+ *
+ * @param string $messageCount The count of the message.
+ *
+ * @return none
+ */
+ public function setMessageCount($messageCount)
+ {
+ $this->_messageCount = $messageCount;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/QueueInfo.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/QueueInfo.php
new file mode 100644
index 0000000..852acc6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/QueueInfo.php
@@ -0,0 +1,452 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Atom\Content;
+use WindowsAzure\Common\Internal\Atom\Entry;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\ServiceBus\Models\QueueDescription;
+
+/**
+ * The information of a queue.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class QueueInfo
+{
+ /**
+ * The entry of the queue info.
+ *
+ * @var Entry
+ */
+ private $_entry;
+
+ /**
+ * The description of the queue.
+ *
+ * @var QueueDescription
+ */
+ private $_queueDescription;
+
+ /**
+ * Creates a QueueInfo instance with specified parameters.
+ *
+ * @param string $title The name of the queue.
+ * @param QueueDescription $queueDescription The description of the queue.
+ */
+ public function __construct(
+ $title = Resources::EMPTY_STRING,
+ $queueDescription = null
+ ) {
+
+ Validate::isString($title, 'title');
+ if (is_null($queueDescription)) {
+ $queueDescription = new QueueDescription();
+ }
+
+ $this->_queueDescription = $queueDescription;
+ $this->_entry = new Entry();
+ $this->_entry->setTitle($title);
+ $this->_entry->setAttribute(
+ Resources::XMLNS,
+ Resources::SERVICE_BUS_NAMESPACE
+ );
+ }
+
+ /**
+ * Populates the properties of the queue info instance with a
+ * ATOM ENTRY XML string.
+ *
+ * @param string $entryXml An ATOM entry based XML string.
+ *
+ * @return none
+ */
+ public function parseXml($entryXml)
+ {
+ $this->_entry->parseXml($entryXml);
+ $content = $this->_entry->getContent();
+ if (is_null($content)) {
+ $this->_queueDescription = null;
+ } else {
+ $this->_queueDescription = QueueDescription::create($content->getText());
+ }
+ }
+
+ /**
+ * Returns a XML string based on ATOM ENTRY schema.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ $content = null;
+ if (!is_null($this->_queueDescription)) {
+ $content = new Content();
+ $content->setText(
+ XmlSerializer::objectSerialize(
+ $this->_queueDescription,
+ 'QueueDescription'
+ )
+ );
+ $content->setType(Resources::XML_CONTENT_TYPE);
+ }
+ $this->_entry->setContent($content);
+ $this->_entry->writeXml($xmlWriter);
+ }
+
+ /**
+ * Gets the description of the queue.
+ *
+ * @return none
+ */
+ public function getQueueDescription()
+ {
+ return $this->_queueDescription;
+ }
+
+ /**
+ * Sets the description of the queue.
+ *
+ * @param QueueDescription $queueDescription The description of the queue.
+ *
+ * @return none
+ */
+ public function setQueueDescription($queueDescription)
+ {
+ $this->_queueDescription = $queueDescription;
+ }
+
+ /**
+ * Gets the title.
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->_entry->getTitle();
+ }
+
+ /**
+ * Sets the title.
+ *
+ * @param string $title The title of the queue info.
+ *
+ * @return none
+ */
+ public function setTitle($title)
+ {
+ $this->_entry->setTitle($title);
+ }
+
+ /**
+ * Gets the entry.
+ *
+ * @return Entry
+ */
+ public function getEntry()
+ {
+ return $this->_entry;
+ }
+
+ /**
+ * Sets the entry.
+ *
+ * @param Entry $entry The entry of the queue info.
+ *
+ * @return none
+ */
+ public function setEntry($entry)
+ {
+ $this->_entry = $entry;
+ }
+
+ /**
+ * Gets the lock duration.
+ *
+ * @return string
+ */
+ public function getLockDuration()
+ {
+ return $this->_queueDescription->getLockDuration();
+ }
+
+ /**
+ * Sets the lock duration.
+ *
+ * @param string $lockDuration The lock duration.
+ *
+ * @return none
+ */
+ public function setLockDuration($lockDuration)
+ {
+ $this->_queueDescription->setLockDuration($lockDuration);
+ }
+
+ /**
+ * gets the maximum size in mega bytes.
+ *
+ * @return integer
+ */
+ public function getMaxSizeInMegabytes()
+ {
+ return $this->_queueDescription->getMaxSizeInMegabytes();
+ }
+
+ /**
+ * Sets the max size in mega bytes.
+ *
+ * @param integer $maxSizeInMegabytes The max size in mega bytes.
+ *
+ * @return none
+ */
+ public function setMaxSizeInMegabytes($maxSizeInMegabytes)
+ {
+ $this->_queueDescription->setMaxSizeInMegabytes($maxSizeInMegabytes);
+ }
+
+ /**
+ * Gets requires duplicate detection.
+ *
+ * @return boolean
+ */
+ public function getRequiresDuplicateDetection()
+ {
+ return $this->_queueDescription->getRequiresDuplicateDetection();
+ }
+
+ /**
+ * Sets requires duplicate detection.
+ *
+ * @param boolean $requiresDuplicateDetection If duplicate detection is required.
+ *
+ * @return none
+ */
+ public function setRequiresDuplicateDetection($requiresDuplicateDetection)
+ {
+ $this->_queueDescription->setRequiresDuplicateDetection(
+ $requiresDuplicateDetection
+ );
+ }
+
+ /**
+ * Gets the requires session.
+ *
+ * @return boolean
+ */
+ public function getRequiresSession()
+ {
+ return $this->_queueDescription->getRequiresSession();
+ }
+
+ /**
+ * Sets the requires session.
+ *
+ * @param boolean $requiresSession If session is required.
+ *
+ * @return none
+ */
+ public function setRequiresSession($requiresSession)
+ {
+ $this->_queueDescription->setRequiresSession($requiresSession);
+ }
+
+ /**
+ * gets the default message time to live.
+ *
+ * @return string
+ */
+ public function getDefaultMessageTimeToLive()
+ {
+ return $this->_queueDescription->getDefaultMessageTimeToLive();
+ }
+
+ /**
+ * Sets the default message time to live.
+ *
+ * @param string $defaultMessageTimeToLive The default message time to live.
+ *
+ * @return none
+ */
+ public function setDefaultMessageTimeToLive($defaultMessageTimeToLive)
+ {
+ $this->_queueDescription->setDefaultMessageTimeToLive(
+ $defaultMessageTimeToLive
+ );
+ }
+
+ /**
+ * Gets dead lettering on message expiration.
+ *
+ * @return string
+ */
+ public function getDeadLetteringOnMessageExpiration()
+ {
+ return $this->_queueDescription->getDeadLetteringOnMessageExpiration();
+ }
+
+ /**
+ * Sets dead lettering on message expiration.
+ *
+ * @param string $deadLetteringOnMessageExpiration The dead lettering on
+ * message expiration.
+ *
+ * @return none
+ */
+ public function setDeadLetteringOnMessageExpiration(
+ $deadLetteringOnMessageExpiration
+ ) {
+ $this->_queueDescription->setDeadLetteringOnMessageExpiration(
+ $deadLetteringOnMessageExpiration
+ );
+ }
+
+ /**
+ * Gets duplicate detection history time window.
+ *
+ * @return string
+ */
+ public function getDuplicateDetectionHistoryTimeWindow()
+ {
+ return $this->_queueDescription->getDuplicateDetectionHistoryTimeWindow();
+ }
+
+ /**
+ * Sets the duplicate detection history time window.
+ *
+ * @param string $duplicateDetectionHistoryTimeWindow The duplicate
+ * detection history time window.
+ *
+ * @return none
+ */
+ public function setDuplicateDetectionHistoryTimeWindow(
+ $duplicateDetectionHistoryTimeWindow
+ ) {
+ $this->_queueDescription->setDuplicateDetectionHistoryTimeWindow(
+ $duplicateDetectionHistoryTimeWindow
+ );
+ }
+
+ /**
+ * Gets maximum delivery count.
+ *
+ * @return string
+ */
+ public function getMaxDeliveryCount()
+ {
+ return $this->_queueDescription->getMaxDeliveryCount();
+ }
+
+ /**
+ * Sets the maximum delivery count.
+ *
+ * @param string $maxDeliveryCount The maximum delivery count.
+ *
+ * @return none
+ */
+ public function setMaxDeliveryCount($maxDeliveryCount)
+ {
+ $this->_queueDescription->setMaxDeliveryCount($maxDeliveryCount);
+ }
+
+ /**
+ * Gets enable batched operation.
+ *
+ * @return boolean
+ */
+ public function getEnableBatchedOperations()
+ {
+ return $this->_queueDescription->getEnableBatchedOperations();
+ }
+
+ /**
+ * Sets enable batched operations.
+ *
+ * @param boolean $enableBatchedOperations Enable batched operations.
+ *
+ * @return none
+ */
+ public function setEnableBatchedOperations($enableBatchedOperations)
+ {
+ $this->_queueDescription->setEnableBatchedOperations(
+ $enableBatchedOperations
+ );
+ }
+
+ /**
+ * Gets the size in bytes.
+ *
+ * @return integer
+ */
+ public function getSizeInBytes()
+ {
+ return $this->_queueDescription->getSizeInBytes();
+ }
+
+ /**
+ * Sets the size in bytes.
+ *
+ * @param integer $sizeInBytes The size in bytes.
+ *
+ * @return none
+ */
+ public function setSizeInBytes($sizeInBytes)
+ {
+ $this->_queueDescription->setSizeInBytes($sizeInBytes);
+ }
+
+ /**
+ * Gets the message count.
+ *
+ * @return integer
+ */
+ public function getMessageCount()
+ {
+ return $this->_queueDescription->getMessageCount();
+ }
+
+ /**
+ * Sets the message count.
+ *
+ * @param string $messageCount The count of the message.
+ *
+ * @return none
+ */
+ public function setMessageCount($messageCount)
+ {
+ $this->_queueDescription->setMessageCount($messageCount);
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ReceiveMessageOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ReceiveMessageOptions.php
new file mode 100644
index 0000000..8afce67
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ReceiveMessageOptions.php
@@ -0,0 +1,148 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+
+use WindowsAzure\ServiceBus\Models\ReceiveMode;
+
+/**
+ * The options for a receive message request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ReceiveMessageOptions
+{
+ /**
+ * The timeout value of receiving message.
+ *
+ * @var integer
+ */
+ private $_timeout;
+
+ /**
+ * The mode of receiving message.
+ *
+ * @var integer
+ */
+ private $_receiveMode;
+
+ /**
+ * Creates a receive message option instance with default parameters.
+ */
+ public function __construct()
+ {
+ $this->_receiveMode = ReceiveMode::RECEIVE_AND_DELETE;
+ }
+ /**
+ * Gets the timeout of the receive message request.
+ *
+ * @return integer
+ */
+ public function getTimeout()
+ {
+ return $this->_timeout;
+ }
+
+ /**
+ * Sets the timeout of the receive message request.
+ *
+ * @param integer $timeout The timeout of the receive message request.
+ *
+ * @return none
+ */
+ public function setTimeout($timeout)
+ {
+ $this->_timeout = $timeout;
+ }
+
+ /**
+ * Gets the receive mode.
+ *
+ * @return integer
+ */
+ public function getReceiveMode()
+ {
+ return $this->_receiveMode;
+ }
+
+ /**
+ * Sets the receive mode.
+ *
+ * @param integer $receiveMode The mode of receiving the message.
+ *
+ * @return none
+ */
+ public function setReceiveMode($receiveMode)
+ {
+ $this->_receiveMode = $receiveMode;
+ }
+
+ /**
+ * Gets is receive and delete.
+ *
+ * @return boolean
+ */
+ public function getIsReceiveAndDelete()
+ {
+ return ($this->_receiveMode === ReceiveMode::RECEIVE_AND_DELETE);
+ }
+
+ /**
+ * Sets whether the mode of receiving is receive and delete.
+ *
+ * @return none
+ */
+ public function setReceiveAndDelete()
+ {
+ $this->_receiveMode = ReceiveMode::RECEIVE_AND_DELETE;
+ }
+
+ /**
+ * Gets peek lock.
+ *
+ * @return boolean
+ *
+ */
+ public function getIsPeekLock()
+ {
+ return ($this->_receiveMode === ReceiveMode::PEEK_LOCK);
+ }
+
+ /**
+ * Sets peek lock.
+ *
+ * @return none
+ */
+ public function setPeekLock()
+ {
+ $this->_receiveMode = ReceiveMode::PEEK_LOCK;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ReceiveMode.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ReceiveMode.php
new file mode 100644
index 0000000..a98b1b3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/ReceiveMode.php
@@ -0,0 +1,43 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+
+/**
+ * The mode of receiving message from Service Bus.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ReceiveMode
+{
+ const RECEIVE_AND_DELETE = 0;
+ const PEEK_LOCK = 1;
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/RuleDescription.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/RuleDescription.php
new file mode 100644
index 0000000..b702bd7
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/RuleDescription.php
@@ -0,0 +1,240 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\ServiceBus\Internal\Action;
+use WindowsAzure\ServiceBus\Internal\Filter;
+/**
+ * The description of the rule.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780753
+ */
+
+class RuleDescription
+{
+ /**
+ * The filter of the rule.
+ *
+ * @var Filter
+ */
+ private $_filter;
+
+ /**
+ * The action of the rule.
+ *
+ * @var Action
+ */
+ private $_action;
+
+ /**
+ * The name of the rule.
+ *
+ * @var string
+ */
+ private $_name;
+
+
+ /**
+ * Creates a rule description instance with default parameters.
+ */
+ public function __construct()
+ {
+ }
+
+ // @codingStandardsIgnoreStart
+
+ /**
+ * Creates a rule description instance with specified XML string.
+ *
+ * @param string $ruleDescriptionXml A XML string representing the
+ * rule description.
+ *
+ * @return none
+ */
+ public static function create($ruleDescriptionXml)
+ {
+ $ruleDescription = new RuleDescription();
+ $root = simplexml_load_string(
+ $ruleDescriptionXml
+ );
+ $nameSpaces = $root->getNameSpaces();
+ $ruleDescriptionArray = (array)$root;
+ if (array_key_exists('Filter', $ruleDescriptionArray)) {
+ $filterItem = $ruleDescriptionArray['Filter'];
+ $filterAttributes = $filterItem->attributes('i', true);
+ $filterItemArray = (array)$filterItem;
+ $filterType = (string)$filterAttributes['type'];
+ $filter = null;
+ switch ($filterType) {
+ case 'TrueFilter' :
+ $filter = new TrueFilter();
+ break;
+
+ case 'FalseFilter' :
+ $filter = new FalseFilter();
+ break;
+
+ case 'CorrelationFilter' :
+ $filter = new CorrelationFilter();
+
+ if (array_key_exists('CorrelationId', $filterItemArray)) {
+ $filter->setCorrelationId(
+ (string)$filterItemArray['CorrelationId']
+ );
+ }
+ break;
+
+ case 'SqlFilter' :
+ $filter = new SqlFilter();
+
+ if (array_key_exists('SqlExpression', $filterItemArray)) {
+ $filter->setSqlExpression(
+ (string)$filterItemArray['SqlExpression']
+ );
+ }
+ if (array_key_exists('CompatibilityLevel', $filterItemArray)) {
+ $filter->setCompatibilityLevel(
+ (integer)$filterItemArray['CompatibilityLevel']
+ );
+ }
+
+ break;
+
+ default :
+ $filter = new Filter();
+ }
+
+ $ruleDescription->setFilter($filter);
+ }
+
+ if (array_key_exists('Action', $ruleDescriptionArray)) {
+ $actionItem = $ruleDescriptionArray['Action'];
+ $actionAttributes = $actionItem->attributes('i', true);
+ $actionType = (string)$actionAttributes['type'];
+ $action = null;
+
+ switch ($actionType) {
+ case 'EmptyRuleAction' :
+ $action = new EmptyRuleAction();
+ break;
+
+ case 'SqlRuleAction' :
+ $action = new SqlRuleAction();
+
+ if (array_key_exists('SqlExpression', $actionItem)) {
+ $action->setSqlExpression((string)$actionItem['SqlExpression']);
+ }
+ break;
+
+ default :
+ $action = new Action();
+ }
+
+ $ruleDescription->setAction($action);
+ }
+
+ if (array_key_exists('Name', $ruleDescriptionArray)) {
+ $ruleDescription->setName((string)$ruleDescriptionArray['Name']);
+ }
+
+ return $ruleDescription;
+ }
+
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Gets the filter.
+ *
+ * @return Filter
+ */
+ public function getFilter()
+ {
+ return $this->_filter;
+ }
+
+ /**
+ * Sets the filter of the rule description.
+ *
+ * @param Filter $filter The filter of the rule description.
+ *
+ * @return none
+ */
+ public function setFilter($filter)
+ {
+ $this->_filter = $filter;
+ }
+
+ /**
+ * Gets the action.
+ *
+ * @return Action
+ */
+ public function getAction()
+ {
+ return $this->_action;
+
+ }
+
+ /**
+ * Sets the action of the rule description.
+ *
+ * @param Action $action The action of the rule description.
+ *
+ * @return none
+ */
+ public function setAction($action)
+ {
+ $this->_action = $action;
+ }
+
+ /**
+ * Gets the name of the rule description.
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Sets the name of the rule description.
+ *
+ * @param string $name The name of the rule description.
+ *
+ * @return none
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ }
+
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/RuleInfo.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/RuleInfo.php
new file mode 100644
index 0000000..39b9840
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/RuleInfo.php
@@ -0,0 +1,337 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Atom\Content;
+use WindowsAzure\Common\Internal\Atom\Entry;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+
+/**
+ * The information of a rule.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class RuleInfo
+{
+ /**
+ * The entry of the rule info.
+ *
+ * @var Entry
+ */
+ private $_entry;
+
+ /**
+ * The description of the rule.
+ *
+ * @var RuleDescription
+ */
+ private $_ruleDescription;
+
+ /**
+ * Creates an RuleInfo with specified parameters.
+ *
+ * @param string $title The title of the rule.
+ * @param RuleDescription $ruleDescription The description of the rule.
+ */
+ public function __construct(
+ $title = Resources::EMPTY_STRING,
+ $ruleDescription = null
+ ) {
+ Validate::isString($title, 'title');
+
+ if (is_null($ruleDescription)) {
+ $ruleDescription = new RuleDescription();
+ }
+ $this->_ruleDescription = $ruleDescription;
+ $this->_entry = new Entry();
+ $this->_entry->setTitle($title);
+ $this->_entry->setAttribute(
+ Resources::XMLNS,
+ Resources::SERVICE_BUS_NAMESPACE
+ );
+
+ }
+
+ /**
+ * Populates the properties with a specified XML string based on ATOM
+ * ENTRY schema.
+ *
+ * @param string $xmlString An XML string representing a rule info instance.
+ *
+ * @return none
+ */
+ public function parseXml($xmlString)
+ {
+ $this->_entry->parseXml($xmlString);
+ $content = $this->_entry->getContent();
+ if (is_null($content)) {
+ $this->_ruleDescription = null;
+ } else {
+ $this->_ruleDescription = RuleDescription::create($content->getText());
+ }
+ }
+
+ /**
+ * Writes an XML string representing the rule info instance.
+ *
+ * @param XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ $content = null;
+ if (!is_null($this->_ruleDescription)) {
+ $content = new Content();
+ $content->setText(
+ XmlSerializer::objectSerialize(
+ $this->_ruleDescription, 'RuleDescription'
+ )
+ );
+ }
+ $this->_entry->setContent($content);
+ $this->_entry->writeXml($xmlWriter);
+ }
+
+ /**
+ * Gets the entry.
+ *
+ * @return Entry
+ */
+ public function getEntry()
+ {
+ return $this->_entry;
+ }
+
+ /**
+ * Sets the entry.
+ *
+ * @param Entry $entry The entry of the queue info.
+ *
+ * @return none
+ */
+ public function setEntry($entry)
+ {
+ $this->_entry = $entry;
+ }
+
+ /**
+ * Gets the title.
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->_entry->getTitle();
+ }
+
+ /**
+ * Sets the title.
+ *
+ * @param string $title The title of the rule info.
+ *
+ * @return none
+ */
+ public function setTitle($title)
+ {
+ $this->_entry->setTitle($title);
+ }
+
+ /**
+ * Gets the filter.
+ *
+ * @return Filter
+ */
+ public function getFilter()
+ {
+ return $this->_ruleDescription->getFilter();
+ }
+
+ /**
+ * Sets the filter.
+ *
+ * @param Filter $filter The filter.
+ *
+ * @return none
+ */
+ public function setFilter($filter)
+ {
+ $this->_ruleDescription->setFilter($filter);
+ }
+
+ /**
+ * Gets the action.
+ *
+ * @return Action
+ */
+ public function getAction()
+ {
+ return $this->_ruleDescription->getAction();
+ }
+
+ /**
+ * Sets the action.
+ *
+ * @param Action $action The action.
+ *
+ * @return none
+ */
+ public function setAction($action)
+ {
+ $this->_ruleDescription->setAction($action);
+ }
+
+ /**
+ * Gets the description of the rule.
+ *
+ * @return RuleDescription
+ */
+ public function getRuleDescription()
+ {
+ return $this->_ruleDescription;
+ }
+
+ /**
+ * Sets the rule description.
+ *
+ * @param RuleDescription $ruleDescription The description of the rule.
+ *
+ * @return none
+ */
+ public function setRuleDescription($ruleDescription)
+ {
+ $this->_ruleDescription = $ruleDescription;
+ }
+
+ /**
+ * With correlation ID filter.
+ *
+ * @param string $correlationId The ID of the correlation.
+ *
+ * @return none
+ */
+ public function withCorrelationFilter($correlationId)
+ {
+ $filter = new CorrelationFilter();
+ $filter->setCorrelationId($correlationId);
+ $this->_ruleDescription->setFilter($filter);
+ }
+
+ /**
+ * With sql expression filter.
+ *
+ * @param string $sqlExpression The SQL expression of the filter.
+ *
+ * @return none
+ */
+ public function withSqlFilter($sqlExpression)
+ {
+ $filter = new SqlFilter();
+ $filter->setSqlExpression($sqlExpression);
+ $filter->setCompatibilityLevel(20);
+ $this->_ruleDescription->setFilter($filter);
+ }
+
+ /**
+ * With true filter.
+ *
+ * @return none
+ */
+ public function withTrueFilter()
+ {
+ $filter = new TrueFilter();
+ $this->_ruleDescription->setFilter($filter);
+ }
+
+ /**
+ * With false filter.
+ *
+ * @return none
+ */
+ public function withFalseFilter()
+ {
+ $filter = new FalseFilter();
+ $this->_ruleDescription->setFilter($filter);
+ }
+
+ /**
+ * With empty rule action.
+ *
+ * @return none
+ */
+ public function withEmptyRuleAction()
+ {
+ $action = new EmptyRuleAction();
+ $this->_ruleDescription->setAction($action);
+ }
+
+ /**
+ * With SQL rule action.
+ *
+ * @param string $sqlExpression The SQL expression
+ * of the rule action.
+ *
+ * @return none
+ */
+ public function withSqlRuleAction($sqlExpression)
+ {
+ $action = new SqlRuleAction();
+ $action->setCompatibilityLevel(20);
+ $action->setSqlExpression($sqlExpression);
+ $this->_ruleDescription->setAction($action);
+ }
+
+ /**
+ * Gets the name of the rule description.
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_ruleDescription->getName();
+ }
+
+ /**
+ * Sets the name of the rule description.
+ *
+ * @param string $name The name of the rule description.
+ *
+ * @return none
+ */
+ public function setName($name)
+ {
+ $this->_ruleDescription->setName($name);
+ }
+
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SqlFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SqlFilter.php
new file mode 100644
index 0000000..4ced56a
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SqlFilter.php
@@ -0,0 +1,115 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\ServiceBus\Internal\Filter;
+
+/**
+ * The SQL filter.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class SqlFilter extends Filter
+{
+ /**
+ * The SQL expression of the filter.
+ *
+ * @var string
+ */
+ private $_sqlExpression;
+
+ /**
+ * The compatibility level of the filter.
+ *
+ * @var string
+ */
+ private $_compatibilityLevel;
+
+
+ /**
+ * Creates a SQL filter with default parameters.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ $this->attributes['xsi:type'] = 'SqlFilter';
+ }
+ /**
+ * Gets the SQL expression.
+ *
+ * @var string
+ *
+ * @return none
+ */
+ public function getSqlExpression()
+ {
+ return $this->_sqlExpression;
+ }
+
+ /**
+ * Sets the SQL expression.
+ *
+ * @param string $sqlExpression The SQL expression of the filter.
+ *
+ * @return none
+ */
+ public function setSqlExpression($sqlExpression)
+ {
+ $this->_sqlExpression = $sqlExpression;
+ }
+
+ /**
+ * Gets the compatibility level.
+ *
+ * @return string
+ */
+ public function getCompatibilityLevel()
+ {
+ return $this->_compatibilityLevel;
+ }
+
+ /**
+ * Sets the compatibility level.
+ *
+ * @param string $compatibilityLevel The compatibility level.
+ *
+ * @return none
+ */
+ public function setCompatibilityLevel($compatibilityLevel)
+ {
+ $this->_compatibilityLevel = $compatibilityLevel;
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SqlRuleAction.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SqlRuleAction.php
new file mode 100644
index 0000000..5856185
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SqlRuleAction.php
@@ -0,0 +1,112 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\ServiceBus\Internal\Action;
+
+/**
+ * The SQL rule action.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class SqlRuleAction extends Action
+{
+ /**
+ * The SQL expression.
+ *
+ * @var string
+ */
+ private $_sqlExpression;
+
+ /**
+ * The compatibility level.
+ *
+ * @var string
+ */
+ private $_compatibilityLevel;
+
+ /**
+ * Creates a SQL Rule Action instance with default parameters.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ $this->attributes['xsi:type'] = 'SqlRuleAction';
+ }
+
+ /**
+ * Gets the SQL expression.
+ *
+ * @return string
+ */
+ public function getSqlExpression()
+ {
+ return $this->_sqlExpression;
+ }
+
+ /**
+ * Sets the SQL expression.
+ *
+ * @param string $sqlExpression Sets the SQL expression.
+ *
+ * @return none
+ */
+ public function setSqlExpression($sqlExpression)
+ {
+ $this->_sqlExpression = $sqlExpression;
+ }
+
+ /**
+ * Gets the compatibility level.
+ *
+ * @return string
+ */
+ public function getCompatibilityLevel()
+ {
+ return $this->_compatibilityLevel;
+ }
+
+ /**
+ * Sets the compatibility level.
+ *
+ * @param string $compatibilityLevel The level of compatibility.
+ *
+ * @return none
+ */
+ public function setCompatibilityLevel($compatibilityLevel)
+ {
+ $this->_compatibilityLevel = $compatibilityLevel;
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SubscriptionDescription.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SubscriptionDescription.php
new file mode 100644
index 0000000..1f29b4c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SubscriptionDescription.php
@@ -0,0 +1,414 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The subscription description.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780763
+ */
+
+class SubscriptionDescription
+{
+ /**
+ * The duration of the lock.
+ *
+ * @var string
+ */
+ private $_lockDuration;
+
+ /**
+ * Requires session.
+ *
+ * @var boolean
+ */
+ private $_requiresSession;
+
+ /**
+ * The default message time to live.
+ *
+ * @var string
+ */
+ private $_defaultMessageTimeToLive;
+
+ /**
+ * The dead lettering on message expiration.
+ *
+ * @var string
+ */
+ private $_deadLetteringOnMessageExpiration;
+
+ /**
+ * The dead lettering on filter evaluation exception.
+ *
+ * @var string
+ */
+ private $_deadLetteringOnFilterEvaluationExceptions;
+
+ /**
+ * The description of the default rule.
+ *
+ * @var string
+ */
+ private $_defaultRuleDescription;
+
+ /**
+ * The count of the message.
+ *
+ * @var integer
+ */
+ private $_messageCount;
+
+ /**
+ * The count of the delivery
+ *
+ * @var integer
+ */
+ private $_maxDeliveryCount;
+
+ /**
+ * Enables Batched operations.
+ *
+ * @var boolean
+ */
+ private $_enableBatchedOperations;
+
+ /**
+ * Creates a subscription description instance with default
+ * parameter.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Creates a subscription description with specified XML string.
+ *
+ * @param string $subscriptionDescriptionXml An XML based subscription
+ * description.
+ *
+ * @return none
+ */
+ public static function create($subscriptionDescriptionXml)
+ {
+ $subscriptionDescription = new SubscriptionDescription();
+ $root = simplexml_load_string(
+ $subscriptionDescriptionXml
+ );
+ $subscriptionDescriptionArray = (array)$root;
+ if (array_key_exists('LockDuration', $subscriptionDescriptionArray)) {
+ $subscriptionDescription->setLockDuration(
+ (string)$subscriptionDescriptionArray['LockDuration']
+ );
+ }
+
+ if (array_key_exists('RequiresSession', $subscriptionDescriptionArray)) {
+ $subscriptionDescription->setRequiresSession(
+ (boolean)$subscriptionDescriptionArray['RequiresSession']
+ );
+ }
+
+ if (array_key_exists(
+ 'DefaultMessageTimeToLive',
+ $subscriptionDescriptionArray
+ )
+ ) {
+ $subscriptionDescription->setDefaultMessageTimeToLive(
+ (string)$subscriptionDescriptionArray['DefaultMessageTimeToLive']
+ );
+ }
+
+ if (array_key_exists(
+ 'DeadLetteringOnMessageExpiration',
+ $subscriptionDescriptionArray
+ )
+ ) {
+ $subscriptionDescription->setDeadLetteringOnMessageExpiration(
+ (string)$subscriptionDescriptionArray[
+ 'DeadLetteringOnMessageExpiration'
+ ]
+ );
+ }
+
+ if (array_key_exists(
+ 'DeadLetteringOnFilterEvaluationException',
+ $subscriptionDescriptionArray
+ )
+ ) {
+ $subscriptionDescription->setDeadLetteringOnFilterEvaluationException(
+ (string)$subscriptionDescriptionArray[
+ 'DeadLetteringOnFilterEvaluationException'
+ ]
+ );
+ }
+
+ if (array_key_exists(
+ 'DefaultRuleDescription',
+ $subscriptionDescriptionArray
+ )
+ ) {
+ $subscriptionDescription->setDefaultRuleDescription(
+ (string)$subscriptionDescriptionArray['DefaultRuleDescription']
+ );
+ }
+
+ if (array_key_exists('MessageCount', $subscriptionDescriptionArray)) {
+ $subscriptionDescription->setMessageCount(
+ (string)$subscriptionDescriptionArray['MessageCount']
+ );
+ }
+
+ if (array_key_exists('MaxDeliveryCount', $subscriptionDescriptionArray)) {
+ $subscriptionDescription->setMaxDeliveryCount(
+ (string)$subscriptionDescriptionArray['MaxDeliveryCount']
+ );
+ }
+
+ if (array_key_exists(
+ 'EnableBatchedOperations',
+ $subscriptionDescriptionArray
+ )
+ ) {
+ $subscriptionDescription->setEnableBatchedOperations(
+ (boolean)$subscriptionDescriptionArray['EnableBatchedOperations']
+ );
+ }
+
+ return $subscriptionDescription;
+ }
+
+ /**
+ * Gets the lock duration.
+ *
+ * @return integer
+ */
+ public function getLockDuration()
+ {
+ return $this->_lockDuration;
+ }
+
+ /**
+ * Sets the lock duration.
+ *
+ * @param string $lockDuration The duration of the lock.
+ *
+ * @return none
+ */
+ public function setLockDuration($lockDuration)
+ {
+ $this->_lockDuration = $lockDuration;
+ }
+
+ /**
+ * Gets requires session.
+ *
+ * @return boolean
+ */
+ public function getRequiresSession()
+ {
+ return $this->_requiresSession;
+ }
+
+ /**
+ * Sets the requires session.
+ *
+ * @param boolean $requiresSession The requires session.
+ *
+ * @return none
+ */
+ public function setRequiresSession($requiresSession)
+ {
+ $this->_requiresSession = $requiresSession;
+ }
+
+ /**
+ * Gets default message time to live.
+ *
+ * @return string
+ */
+ public function getDefaultMessageTimeToLive()
+ {
+ return $this->_defaultMessageTimeToLive;
+ }
+
+ /**
+ * Sets default message time to live.
+ *
+ * @param string $defaultMessageTimeToLive The default message time to live.
+ *
+ * @return none
+ */
+ public function setDefaultMessageTimeToLive($defaultMessageTimeToLive)
+ {
+ $this->_defaultMessageTimeToLive = $defaultMessageTimeToLive;
+ }
+
+ /**
+ * Gets dead lettering on message expiration.
+ *
+ * @return string
+ */
+ public function getDeadLetteringOnMessageExpiration()
+ {
+ return $this->_deadLetteringOnMessageExpiration;
+ }
+
+ /**
+ * Sets dead lettering on message expiration.
+ *
+ * @param string $deadLetteringOnMessageExpiration The dead lettering
+ * on message expiration.
+ *
+ * @return none
+ */
+ public function setDeadLetteringOnMessageExpiration(
+ $deadLetteringOnMessageExpiration
+ ) {
+ $this->_deadLetteringOnMessageExpiration = $deadLetteringOnMessageExpiration;
+ }
+
+ /**
+ * Gets dead lettering on filter evaluation exceptions.
+ *
+ * @return string
+ */
+ public function getDeadLetteringOnFilterEvaluationExceptions()
+ {
+ return $this->_deadLetteringOnFilterEvaluationExceptions;
+ }
+
+ /**
+ * Sets dead lettering on filter evaluation exceptions.
+ *
+ * @param string $deadLetteringOnFilterEvaluationExceptions Sets dead lettering
+ * on filter evaluation exceptions.
+ *
+ * @return none
+ */
+ public function setDeadLetteringOnFilterEvaluationExceptions(
+ $deadLetteringOnFilterEvaluationExceptions
+ ) {
+ $value = $deadLetteringOnFilterEvaluationExceptions;
+
+ $this->_deadLetteringOnFilterEvaluationExceptions = $value;
+ }
+
+ /**
+ * Gets the default rule description.
+ *
+ * @return RuleDescription
+ */
+ public function getDefaultRuleDescription()
+ {
+ return $this->_defaultRuleDescription;
+ }
+
+ /**
+ * Sets the default rule description.
+ *
+ * @param string $defaultRuleDescription The default rule description.
+ *
+ * @return none
+ */
+ public function setDefaultRuleDescription($defaultRuleDescription)
+ {
+ $this->_defaultRuleDescription = $defaultRuleDescription;
+ }
+
+ /**
+ * Gets the count of the message.
+ *
+ * @return integer
+ */
+ public function getMessageCount()
+ {
+ return $this->_messageCount;
+ }
+
+ /**
+ * Sets the count of the message.
+ *
+ * @param string $messageCount The count of the message.
+ *
+ * @return none
+ */
+ public function setMessageCount($messageCount)
+ {
+ $this->_messageCount = $messageCount;
+ }
+
+ /**
+ * Gets maximum delivery count.
+ *
+ * @return integer
+ */
+ public function getMaxDeliveryCount()
+ {
+ return $this->_maxDeliveryCount;
+ }
+
+ /**
+ * Sets maximum delivery count.
+ *
+ * @param integer $maxDeliveryCount The maximum delivery count.
+ *
+ * @return none
+ */
+ public function setMaxDeliveryCount($maxDeliveryCount)
+ {
+ $this->_maxDeliveryCount = $maxDeliveryCount;
+ }
+
+ /**
+ * Gets enable batched operations.
+ *
+ * @return boolean
+ */
+ public function getEnableBatchedOperations()
+ {
+ return $this->_enableBatchedOperations;
+ }
+
+ /**
+ * Sets enable batched operations.
+ *
+ * @param boolean $enableBatchedOperations Enable batched operations.
+ *
+ * @return none
+ */
+ public function setEnableBatchedOperations($enableBatchedOperations)
+ {
+ $this->_enableBatchedOperations = $enableBatchedOperations;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SubscriptionInfo.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SubscriptionInfo.php
new file mode 100644
index 0000000..df2d5b4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/SubscriptionInfo.php
@@ -0,0 +1,412 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+
+use WindowsAzure\Common\Internal\Atom\Entry;
+use WindowsAzure\Common\Internal\Atom\Content;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\ServiceBus\Models\SubscriptionDescription;
+
+/**
+ * The information of a subscription.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class SubscriptionInfo extends Entry
+{
+ /**
+ * The entry of the subscription info.
+ *
+ * @var Entry
+ */
+ private $_entry;
+
+ /**
+ * The description of the subscription.
+ *
+ * @var SubscriptionDescription
+ */
+ private $_subscriptionDescription;
+
+ /**
+ * Creates a SubscriptionInfo instance with specified parameters.
+ *
+ * @param string $title The title of
+ * the subscription.
+ * @param SubscriptionDescription $subscriptionDescription The description
+ * of the subscription.
+ */
+ public function __construct(
+ $title = Resources::EMPTY_STRING,
+ $subscriptionDescription = null
+ ) {
+ Validate::isString($title, 'title');
+ if (is_null($subscriptionDescription)) {
+ $subscriptionDescription = new SubscriptionDescription();
+ }
+ $this->_subscriptionDescription = $subscriptionDescription;
+ $this->_entry = new Entry();
+ $this->_entry->setTitle($title);
+ $this->_entry->setAttribute(
+ Resources::XMLNS,
+ Resources::SERVICE_BUS_NAMESPACE
+ );
+ }
+
+ /**
+ * Populates the properties of the subscription info instance with a XML string.
+ *
+ * @param string $entryXml A XML string representing a subscription
+ * information instance.
+ *
+ * @return none
+ */
+ public function parseXml($entryXml)
+ {
+ $this->_entry->parseXml($entryXml);
+ $content = $this->_entry->getContent();
+ if (is_null($content)) {
+ $this->_subscriptionDescription = null;
+ } else {
+ $this->_subscriptionDescription = SubscriptionDescription::create(
+ $content->getText()
+ );
+ }
+ }
+
+ /**
+ * Writes XML based on the subscription information.
+ *
+ * @param XMLWriter $xmlWriter The XML writer.
+ *
+ * @return none
+ */
+ public function writeXml($xmlWriter)
+ {
+ $content = null;
+ if (!is_null($this->_subscriptionDescription)) {
+ $content = new Content();
+ $content->setText(
+ XmlSerializer::objectSerialize(
+ $this->_subscriptionDescription,
+ 'SubscriptionDescription'
+ )
+ );
+ }
+ $this->_entry->setContent($content);
+ $this->_entry->writeXml($xmlWriter);
+ }
+
+ /**
+ * Gets the entry of the subscription info.
+ *
+ * @return Entry
+ */
+ public function getEntry()
+ {
+ return $this->_entry;
+ }
+
+ /**
+ * Sets the entry of the subscription info.
+ *
+ * @param Entry $entry The entry of the subscription info.
+ *
+ * @return none
+ */
+ public function setEntry($entry)
+ {
+ $this->_entry = $entry;
+ }
+
+ /**
+ * Gets the title.
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->_entry->getTitle();
+ }
+
+ /**
+ * Sets the title.
+ *
+ * @param string $title The title of the queue info.
+ *
+ * @return none
+ */
+ public function setTitle($title)
+ {
+ $this->_entry->setTitle($title);
+ }
+
+ /**
+ * Gets the subscription description.
+ *
+ * @return none
+ */
+ public function getSubscriptionDescription()
+ {
+ return $this->_subscriptionDescription;
+ }
+
+ /**
+ * Sets the subscription description.
+ *
+ * @param string $subscriptionDescription The description of
+ * the subscription.
+ *
+ * @return none
+ */
+ public function setSubscriptionDescription($subscriptionDescription)
+ {
+ $this->_subscriptionDescription = $subscriptionDescription;
+ }
+
+ /**
+ * Gets the lock duration.
+ *
+ * @return integer
+ */
+ public function getLockDuration()
+ {
+ return $this->_subscriptionDescription->getLockDuration();
+ }
+
+ /**
+ * Sets the lock duration.
+ *
+ * @param string $lockDuration The duration of the lock.
+ *
+ * @return none
+ */
+ public function setLockDuration($lockDuration)
+ {
+ $this->_subscriptionDescription->setlockDuration($lockDuration);
+ }
+
+ /**
+ * Gets requires session.
+ *
+ * @return boolean
+ */
+ public function getRequiresSession()
+ {
+ return $this->_subscriptionDescription->getRequiresSession();
+ }
+
+ /**
+ * Sets the requires session.
+ *
+ * @param boolean $requiresSession The requires session.
+ *
+ * @return none
+ */
+ public function setRequiresSession($requiresSession)
+ {
+ $this->_subscriptionDescription->setRequiresSession($requiresSession);
+ }
+
+ /**
+ * Gets default message time to live.
+ *
+ * @return string
+ */
+ public function getDefaultMessageTimeToLive()
+ {
+ return $this->_subscriptionDescription->getDefaultMessageTimeToLive();
+ }
+
+ /**
+ * Sets default message time to live.
+ *
+ * @param string $defaultMessageTimeToLive The default message time to live.
+ *
+ * @return none
+ */
+ public function setDefaultMessageTimeToLive($defaultMessageTimeToLive)
+ {
+ $this->_subscriptionDescription->setDefaultMessageTimeToLive(
+ $defaultMessageTimeToLive
+ );
+ }
+
+ /**
+ * Gets dead lettering on message expiration.
+ *
+ * @return string
+ */
+ public function getDeadLetteringOnMessageExpiration()
+ {
+ $subscriptionDesc = $this->_subscriptionDescription;
+ return $subscriptionDesc->getDeadLetteringOnMessageExpiration();
+ }
+
+ /**
+ * Sets dead lettering on message expiration.
+ *
+ * @param string $deadLetteringOnMessageExpiration The dead lettering
+ * on message expiration.
+ *
+ * @return none
+ */
+ public function setDeadLetteringOnMessageExpiration(
+ $deadLetteringOnMessageExpiration
+ ) {
+ $this->_subscriptionDescription->setDeadLetteringOnMessageExpiration(
+ $deadLetteringOnMessageExpiration
+ );
+ }
+
+ /**
+ * Gets dead lettering on filter evaluation exceptions.
+ *
+ * @return string
+ */
+ public function getDeadLetteringOnFilterEvaluationExceptions()
+ {
+ $subscriptionDesc = $this->_subscriptionDescription;
+ return $subscriptionDesc->getDeadLetteringOnFilterEvaluationExceptions();
+ }
+
+ /**
+ * Sets dead lettering on filter evaluation exceptions.
+ *
+ * @param string $deadLetteringOnFilterEvaluationExceptions Sets dead lettering
+ * on filter evaluation exceptions.
+ *
+ * @return none
+ */
+ public function setDeadLetteringOnFilterEvaluationExceptions(
+ $deadLetteringOnFilterEvaluationExceptions
+ ) {
+ $subscriptionDesc = $this->_subscriptionDescription;
+ $subscriptionDesc->setdeadLetteringOnFilterEvaluationExceptions(
+ $deadLetteringOnFilterEvaluationExceptions
+ );
+ }
+
+ /**
+ * Gets the default rule description.
+ *
+ * @return RuleDescription
+ */
+ public function getDefaultRuleDescription()
+ {
+ return $this->_subscriptionDescription->getDefaultRuleDescription();
+ }
+
+ /**
+ * Sets the default rule description.
+ *
+ * @param string $defaultRuleDescription The default rule description.
+ *
+ * @return none
+ */
+ public function setDefaultRuleDescription($defaultRuleDescription)
+ {
+ $this->_subscriptionDescription->setDefaultRuleDescription(
+ $defaultRuleDescription
+ );
+ }
+
+ /**
+ * Gets the count of the message.
+ *
+ * @return integer
+ */
+ public function getMessageCount()
+ {
+ return $this->_subscriptionDescription->getMessageCount();
+ }
+
+ /**
+ * Sets the count of the message.
+ *
+ * @param string $messageCount The count of the message.
+ *
+ * @return none
+ */
+ public function setMessageCount($messageCount)
+ {
+ $this->_subscriptionDescription->setMessageCount($messageCount);
+ }
+
+ /**
+ * Gets maximum delivery count.
+ *
+ * @return integer
+ */
+ public function getMaxDeliveryCount()
+ {
+ return $this->_subscriptionDescription->getMaxDeliveryCount();
+ }
+
+ /**
+ * Sets maximum delivery count.
+ *
+ * @param integer $maxDeliveryCount The maximum delivery count.
+ *
+ * @return none
+ */
+ public function setMaxDeliveryCount($maxDeliveryCount)
+ {
+ $this->_subscriptionDescription->setmaxDeliveryCount($maxDeliveryCount);
+ }
+
+ /**
+ * Gets enable batched operations.
+ *
+ * @return boolean
+ */
+ public function getEnableBatchedOperations()
+ {
+ return $this->_subscriptionDescription->getEnableBatchedOperations();
+ }
+
+ /**
+ * Sets enable batched operations.
+ *
+ * @param boolean $enableBatchedOperations Enable batched operations.
+ *
+ * @return none
+ */
+ public function setEnableBatchedOperations($enableBatchedOperations)
+ {
+ $this->_subscriptionDescription->setEnableBatchedOperations(
+ $enableBatchedOperations
+ );
+ }
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/TopicDescription.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/TopicDescription.php
new file mode 100644
index 0000000..1e167e1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/TopicDescription.php
@@ -0,0 +1,286 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The description of the topic.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780749
+ */
+class TopicDescription
+{
+ /**
+ * The default message time to live.
+ *
+ * @var string
+ */
+ private $_defaultMessageTimeToLive;
+
+ /**
+ * The maxizmu size in mega bytes.
+ *
+ * @integer
+ */
+ private $_maxSizeInMegabytes;
+
+ /**
+ * Requires duplicate detection.
+ *
+ * @var boolean
+ */
+ private $_requiresDuplicateDetection;
+
+ /**
+ * Duplicate detection history time window.
+ *
+ * @var string
+ */
+ private $_duplicateDetectionHistoryTimeWindow;
+
+ /**
+ * Enables batched operations.
+ *
+ * @var boolean
+ */
+ private $_enableBatchedOperations;
+
+ /**
+ * The size in bytes.
+ *
+ * @var integer
+ */
+ private $_sizeInBytes;
+
+ /**
+ * Creates a topic description with default parameters.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Creates a topic description object with specified XML string.
+ *
+ * @param string $topicDescriptionXml A XML based string describing
+ * the topic.
+ *
+ * @return TopicDescription
+ */
+ public static function create($topicDescriptionXml)
+ {
+ $topicDescription = new TopicDescription();
+ $root = simplexml_load_string($topicDescriptionXml);
+ $topicDescriptionArray = (array)$root;
+
+ if (array_key_exists('DefaultMessageToLive', $topicDescriptionArray)) {
+ $topicDescription->setDefaultMessageToLive(
+ (string)$topicDescriptionArray['DefaultMessageToLive']
+ );
+ }
+
+ if (array_key_exists('MaxSizeInMegabytes', $topicDescriptionArray)) {
+ $topicDescription->setMaxSizeInMegabytes(
+ (integer)$topicDescriptionArray['MaxSizeInMegabytes']
+ );
+ }
+
+ if (array_key_exists(
+ 'RequiresDuplicateDetection',
+ $topicDescriptionArray
+ )
+ ) {
+ $topicDescription->setRequiresDuplicateDetection(
+ (boolean)$topicDescriptionArray['RequiresDuplicateDetection']
+ );
+ }
+
+ if (array_key_exists(
+ 'DuplicateDetectionHistoryTimeWindow',
+ $topicDescriptionArray
+ )
+ ) {
+ $topicDescription->setDuplicateDetectionHistoryTimeWindow(
+ (string)$topicDescriptionArray['DuplicateDetectionHistoryTimeWindow']
+ );
+ }
+
+ if (array_key_exists(
+ 'EnableBatchedOperations',
+ $topicDescriptionArray
+ )) {
+ $topicDescription->setEnableBatchedOperations(
+ (boolean)$topicDescriptionArray['EnableBatchedOperations']
+ );
+ }
+
+ return $topicDescription;
+ }
+
+ /**
+ * Gets default message time to live.
+ *
+ * @return string
+ */
+ public function getDefaultMessageTimeToLive()
+ {
+ return $this->_defaultMessageTimeToLive;
+ }
+
+ /**
+ * Sets the default message to live.
+ *
+ * @param string $defaultMessageTimeToLive The default message time to live.
+ *
+ * @return none
+ */
+ public function setDefaultMessageTimeToLive($defaultMessageTimeToLive)
+ {
+ $this->_defaultMessageTimeToLive = $defaultMessageTimeToLive;
+ }
+
+ /**
+ * Gets the msax size in mega bytes.
+ *
+ * @return integer
+ */
+ public function getMaxSizeInMegabytes()
+ {
+ return $this->_maxSizeInMegabytes;
+ }
+
+ /**
+ * Sets max size in mega bytes.
+ *
+ * @param integer $maxSizeInMegabytes The maximum size in mega bytes.
+ *
+ * @return none
+ */
+ public function setMaxSizeInMegabytes($maxSizeInMegabytes)
+ {
+ $this->_maxSizeInMegabytes = $maxSizeInMegabytes;
+ }
+
+ /**
+ * Gets requires duplicate detection.
+ *
+ * @return boolean
+ */
+ public function getRequiresDuplicateDetection()
+ {
+ return $this->_requiresDuplicateDetection;
+ }
+
+ /**
+ * Sets requires duplicate detection.
+ *
+ * @param boolean $requiresDuplicateDetection Sets requires duplicate detection.
+ *
+ * @return none
+ */
+ public function setRequiresDuplicateDetection($requiresDuplicateDetection)
+ {
+ $this->_requiresDuplicateDetection = $requiresDuplicateDetection;
+ }
+
+ /**
+ * Gets duplicate detection history time window.
+ *
+ * @return string
+ */
+ public function getDuplicateDetectionHistoryTimeWindow()
+ {
+ return $this->_duplicateDetectionHistoryTimeWindow;
+ }
+
+ /**
+ * Sets duplicate detection history time window.
+ *
+ * @param string $duplicateDetectionHistoryTimeWindow The duplicate
+ * detection history time window.
+ *
+ * @return none
+ */
+ public function setDuplicateDetectionHistoryTimeWindow(
+ $duplicateDetectionHistoryTimeWindow
+ ) {
+ $value = $duplicateDetectionHistoryTimeWindow;
+
+ $this->_duplicateDetectionHistoryTimeWindow = $value;
+ }
+
+ /**
+ * Gets enable batched operations.
+ *
+ * @return boolean
+ */
+ public function getEnableBatchedOperations()
+ {
+ return $this->_enableBatchedOperations;
+ }
+
+ /**
+ * Sets enable batched operations.
+ *
+ * @param boolean $enableBatchedOperations Enables batched operations.
+ *
+ * @return none
+ */
+ public function setEnableBatchedOperations($enableBatchedOperations)
+ {
+ $this->_enableBatchedOperations = $enableBatchedOperations;
+ }
+
+ /**
+ * Gets size in bytes.
+ *
+ * @return integer
+ */
+ public function getSizeInBytes()
+ {
+ return $this->_sizeInBytes;
+ }
+
+ /**
+ * Sets size in bytes.
+ *
+ * @param integer $sizeInBytes The size in bytes.
+ *
+ * @return none
+ */
+ public function setSizeInBytes($sizeInBytes)
+ {
+ $this->_sizeInBytes = $sizeInBytes;
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/TopicInfo.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/TopicInfo.php
new file mode 100644
index 0000000..802822f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/TopicInfo.php
@@ -0,0 +1,336 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\Common\Internal\Atom\Entry;
+use WindowsAzure\Common\Internal\Atom\Content;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\ServiceBus\Models\TopicDescription;
+
+/**
+ * The description of a topic.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+class TopicInfo extends Entry
+{
+ /**
+ * The entry of the topic info.
+ *
+ * @var Entry
+ */
+ private $_entry;
+
+ /**
+ * The description of the topics.
+ *
+ * @var TopicDescription
+ */
+ private $_topicDescription;
+
+ /**
+ * Creates a TopicInfo with specified parameters.
+ *
+ * @param string $title The name of the topic.
+ * @param TopicDescription $topicDescription The description of the
+ * topic.
+ */
+ public function __construct(
+ $title = Resources::EMPTY_STRING,
+ $topicDescription = null
+ ) {
+ Validate::isString($title, 'title');
+ if (is_null($topicDescription)) {
+ $topicDescription = new TopicDescription();
+ }
+ $this->title = $title;
+ $this->_topicDescription = $topicDescription;
+ $this->_entry = new Entry();
+ $this->_entry->setTitle($title);
+ $this->_entry->setAttribute(
+ Resources::XMLNS,
+ Resources::SERVICE_BUS_NAMESPACE
+ );
+ }
+
+ /**
+ * Populates properties with a specified XML string.
+ *
+ * @param string $xmlString An XML string representing the topic information.
+ *
+ * @return none
+ */
+ public function parseXml($xmlString)
+ {
+ $this->_entry->parseXml($xmlString);
+ $content = $this->_entry->getContent();
+ if (is_null($content)) {
+ $this->_topicDescription = null;
+ } else {
+ $this->_topicDescription = TopicDescription::create($content->getText());
+ }
+ }
+
+ /**
+ * Writes an XML string.
+ *
+ * @param \XMLWriter $xmlWriter The XML writer.
+ *
+ * @return string
+ */
+ public function writeXml($xmlWriter)
+ {
+ $content = null;
+ if (!is_null($this->_topicDescription)) {
+ $content = new Content();
+ $content->setText(
+ XmlSerializer::objectSerialize(
+ $this->_topicDescription,
+ 'TopicDescription'
+ )
+ );
+ $content->setType(Resources::XML_CONTENT_TYPE);
+ }
+ $this->_entry->setContent($content);
+ $this->_entry->writeXml($xmlWriter);
+ }
+
+ /**
+ * Gets the title.
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->_entry->getTitle();
+ }
+
+ /**
+ * Sets the title.
+ *
+ * @param string $title The title of the queue info.
+ *
+ * @return none
+ */
+ public function setTitle($title)
+ {
+ $this->_entry->setTitle($title);
+ }
+
+ /**
+ * Gets the entry.
+ *
+ * @return Entry
+ */
+ public function getEntry()
+ {
+ return $this->_entry;
+ }
+
+ /**
+ * Sets the entry.
+ *
+ * @param Entry $entry The entry of the queue info.
+ *
+ * @return none
+ */
+ public function setEntry($entry)
+ {
+ $this->_entry = $entry;
+ }
+
+ /**
+ * Gets the descriptions of the topic.
+ *
+ * @return TopicDescription
+ */
+ public function getTopicDescription()
+ {
+ return $this->_topicDescription;
+ }
+
+ /**
+ * Sets the descriptions of the topic.
+ *
+ * @param TopicDescription $topicDescription The description of the topic.
+ *
+ * @return none
+ */
+ public function setTopicDescription($topicDescription)
+ {
+ $this->_topicDescription = $topicDescription;
+ }
+
+ /**
+ * Gets default message time to live.
+ *
+ * @return string
+ */
+ public function getDefaultMessageTimeToLive()
+ {
+ return $this->_topicDescription->getDefaultMessageTimeToLive();
+ }
+
+ /**
+ * Sets the default message to live.
+ *
+ * @param string $defaultMessageTimeToLive The default message time to live.
+ *
+ * @return none
+ */
+ public function setDefaultMessageTimeToLive($defaultMessageTimeToLive)
+ {
+ $this->_topicDescription->setDefaultMessageTimeToLive(
+ $defaultMessageTimeToLive
+ );
+ }
+
+ /**
+ * Gets the msax size in mega bytes.
+ *
+ * @return integer
+ */
+ public function getMaxSizeInMegabytes()
+ {
+ return $this->_topicDescription->getMaxSizeInMegabytes();
+ }
+
+ /**
+ * Sets max size in mega bytes.
+ *
+ * @param integer $maxSizeInMegabytes The maximum size in mega bytes.
+ *
+ * @return none
+ */
+ public function setMaxSizeInMegabytes($maxSizeInMegabytes)
+ {
+ $this->_topicDescription->setmaxSizeInMegabytes($maxSizeInMegabytes);
+ }
+
+ /**
+ * Gets requires duplicate detection.
+ *
+ * @return boolean
+ */
+ public function getRequiresDuplicateDetection()
+ {
+ return $this->_topicDescription->getRequiresDuplicateDetection();
+ }
+
+ /**
+ * Sets requires duplicate detection.
+ *
+ * @param boolean $requiresDuplicateDetection Sets requires duplicate detection.
+ *
+ * @return none
+ */
+ public function setRequiresDuplicateDetection($requiresDuplicateDetection)
+ {
+ $this->_topicDescription->setrequiresDuplicateDetection(
+ $requiresDuplicateDetection
+ );
+ }
+
+ /**
+ * Gets duplicate detection history time window.
+ *
+ * @return string
+ */
+ public function getDuplicateDetectionHistoryTimeWindow()
+ {
+ return $this->_topicDescription->getDuplicateDetectionHistoryTimeWindow();
+ }
+
+ /**
+ * Sets duplicate detection history time window.
+ *
+ * @param string $duplicateDetectionHistoryTimeWindow The duplicate
+ * detection history time window.
+ *
+ * @return none
+ */
+ public function setDuplicateDetectionHistoryTimeWindow(
+ $duplicateDetectionHistoryTimeWindow
+ ) {
+ $this->_topicDescription->setduplicateDetectionHistoryTimeWindow(
+ $duplicateDetectionHistoryTimeWindow
+ );
+ }
+
+ /**
+ * Gets enable batched operations.
+ *
+ * @return boolean
+ */
+ public function getEnableBatchedOperations()
+ {
+ return $this->_topicDescription->getEnableBatchedOperations();
+ }
+
+ /**
+ * Sets enable batched operations.
+ *
+ * @param boolean $enableBatchedOperations Enables batched operations.
+ *
+ * @return none
+ */
+ public function setEnableBatchedOperations($enableBatchedOperations)
+ {
+ $this->_topicDescription->setenableBatchedOperations(
+ $enableBatchedOperations
+ );
+ }
+
+ /**
+ * Gets size in bytes.
+ *
+ * @return integer
+ */
+ public function getSizeInBytes()
+ {
+ return $this->_topicDescription->getSizeInBytes();
+ }
+
+ /**
+ * Sets size in bytes.
+ *
+ * @param integer $sizeInBytes The size in bytes.
+ *
+ * @return none
+ */
+ public function setSizeInBytes($sizeInBytes)
+ {
+ $this->_topicDescription->setSizeInBytes($sizeInBytes);
+ }
+
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/TrueFilter.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/TrueFilter.php
new file mode 100644
index 0000000..3eb3b17
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/Models/TrueFilter.php
@@ -0,0 +1,50 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+namespace WindowsAzure\ServiceBus\Models;
+use WindowsAzure\ServiceBus\Internal\Filter;
+
+/**
+ * The true filter.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class TrueFilter extends Filter
+{
+ /**
+ * Creates a true filter with default parameter.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ $this->attributes['xsi:type'] = 'TrueFilter';
+ }
+
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/ServiceBusRestProxy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/ServiceBusRestProxy.php
new file mode 100644
index 0000000..fd22fb0
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceBus/ServiceBusRestProxy.php
@@ -0,0 +1,916 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceBus;
+use WindowsAzure\Common\Internal\ServiceRestProxy;
+use WindowsAzure\Common\Internal\Http\HttpCallContext;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+use WindowsAzure\Common\Internal\Atom\Content;
+use WindowsAzure\Common\Internal\Atom\Entry;
+use WindowsAzure\Common\Internal\Atom\Feed;
+use WindowsAzure\Common\ServiceException;
+use WindowsAzure\ServiceBus\Internal\IServiceBus;
+use WindowsAzure\ServiceBus\Models\BrokeredMessage;
+use WindowsAzure\ServiceBus\Models\BrokerProperties;
+use WindowsAzure\ServiceBus\Models\ListQueuesOptions;
+use WindowsAzure\ServiceBus\Models\ListQueuesResult;
+use WindowsAzure\ServiceBus\Models\ListSubscriptionsOptions;
+use WindowsAzure\ServiceBus\Models\ListSubscriptionsResult;
+use WindowsAzure\ServiceBus\Models\ListTopicsOptions;
+use WindowsAzure\ServiceBus\Models\ListTopicsResult;
+use WindowsAzure\ServiceBus\Models\ListRulesOptions;
+use WindowsAzure\ServiceBus\Models\ListRulesResult;
+use WindowsAzure\ServiceBus\Models\ListOptions;
+use WindowsAzure\ServiceBus\Models\QueueDescription;
+use WindowsAzure\ServiceBus\Models\QueueInfo;
+use WindowsAzure\ServiceBus\Models\ReceiveMessageOptions;
+use WindowsAzure\ServiceBus\Models\RuleDescription;
+use WindowsAzure\ServiceBus\Models\RuleInfo;
+use WindowsAzure\ServiceBus\Models\SubscriptionDescription;
+use WindowsAzure\ServiceBus\Models\SubscriptionInfo;
+use WindowsAzure\ServiceBus\Models\TopicDescription;
+use WindowsAzure\ServiceBus\Models\TopicInfo;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * This class constructs HTTP requests and receive HTTP responses
+ * for Service Bus.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceBus
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/WindowsAzure/azure-sdk-for-php
+ */
+
+class ServiceBusRestProxy extends ServiceRestProxy implements IServiceBus
+{
+ /**
+ * Creates a ServiceBusRestProxy with specified parameter.
+ *
+ * @param IHttpClient $channel The channel to communicate.
+ * @param string $uri The URI of Service Bus service.
+ * @param ISerializer $dataSerializer The serializer of the Service Bus.
+ *
+ * @return none
+ */
+ public function __construct($channel, $uri, $dataSerializer)
+ {
+ parent::__construct(
+ $channel,
+ $uri,
+ Resources::EMPTY_STRING,
+ $dataSerializer
+ );
+ }
+
+ /**
+ * Sends a brokered message.
+ *
+ * Queues:
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780775
+ *
+ * Topic Subscriptions:
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780786
+ *
+ * @param type $path The path to send message.
+ * @param type $brokeredMessage The brokered message.
+ *
+ * @return none
+ */
+ public function sendMessage($path, $brokeredMessage)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_POST);
+ $httpCallContext->addStatusCode(Resources::STATUS_CREATED);
+ $httpCallContext->setPath($path);
+ $contentType = $brokeredMessage->getContentType();
+
+ if (!is_null($contentType)) {
+ $httpCallContext->addHeader(
+ Resources::CONTENT_TYPE,
+ $contentType
+ );
+ }
+
+ $brokerProperties = $brokeredMessage->getBrokerProperties();
+ if (!is_null($brokerProperties)) {
+ $httpCallContext->addHeader(
+ Resources::BROKER_PROPERTIES,
+ $brokerProperties->toString()
+ );
+ }
+ $customProperties = $brokeredMessage->getProperties();
+
+ if (!empty($customProperties)) {
+ foreach ($customProperties as $key => $value) {
+ $value = json_encode($value);
+ $httpCallContext->addHeader($key, $value);
+
+ }
+ }
+
+ $httpCallContext->setBody($brokeredMessage->getBody());
+ $this->sendContext($httpCallContext);
+ }
+
+ /**
+ * Sends a queue message.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780775
+ *
+ * @param string $queueName The name of the queue.
+ * @param BrokeredMessage $brokeredMessage The brokered message.
+ *
+ * @return none
+ */
+ public function sendQueueMessage($queueName, $brokeredMessage)
+ {
+ $path = sprintf(Resources::SEND_MESSAGE_PATH, $queueName);
+ $this->sendMessage($path, $brokeredMessage);
+ }
+
+ /**
+ * Receives a queue message.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780735
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780756
+ *
+ * @param string $queueName The name of the
+ * queue.
+ * @param ReceiveMessageOptions $receiveMessageOptions The options to
+ * receive the message.
+ *
+ * @return BrokeredMessage
+ */
+ public function receiveQueueMessage($queueName, $receiveMessageOptions = null)
+ {
+ $queueMessagePath = sprintf(Resources::RECEIVE_MESSAGE_PATH, $queueName);
+ return $this->receiveMessage(
+ $queueMessagePath,
+ $receiveMessageOptions
+ );
+ }
+
+ // @codingStandardsIgnoreStart
+
+ /**
+ * Receives a message.
+ *
+ * Queues:
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780735
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780756
+ *
+ * Topic Subscriptions:
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780722
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780770
+ *
+ * @param string $path The path of the
+ * message.
+ * @param ReceivedMessageOptions $receiveMessageOptions The options to
+ * receive the message.
+ *
+ * @return BrokeredMessage
+ */
+ public function receiveMessage($path, $receiveMessageOptions = null)
+ {
+ if (is_null($receiveMessageOptions)) {
+ $receiveMessageOptions = new ReceiveMessageOptions();
+ }
+
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setPath($path);
+ $httpCallContext->addStatusCode(Resources::STATUS_CREATED);
+ $httpCallContext->addStatusCode(Resources::STATUS_NO_CONTENT);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $timeout = $receiveMessageOptions->getTimeout();
+ if (!is_null($timeout)) {
+ $httpCallContext->addQueryParameter('timeout', $timeout);
+ }
+
+ if ($receiveMessageOptions->getIsReceiveAndDelete()) {
+ $httpCallContext->setMethod(Resources::HTTP_DELETE);
+ } else if ($receiveMessageOptions->getIsPeekLock()) {
+ $httpCallContext->setMethod(Resources::HTTP_POST);
+ } else {
+ throw new \InvalidArgumentException(
+ Resources::INVALID_RECEIVE_MODE_MSG
+ );
+ }
+
+ $response = $this->sendContext($httpCallContext);
+ if ($response->getStatus() === Resources::STATUS_NO_CONTENT) {
+ $brokeredMessage = null;
+ } else {
+ $responseHeaders = $response->getHeader();
+ $brokerProperties = new BrokerProperties();
+
+ if (array_key_exists('brokerproperties', $responseHeaders)) {
+ $brokerProperties = BrokerProperties::create(
+ $responseHeaders['brokerproperties']
+ );
+ }
+
+ if (array_key_exists('location', $responseHeaders)) {
+ $brokerProperties->setLockLocation($responseHeaders['location']);
+ }
+
+ $brokeredMessage = new BrokeredMessage();
+ $brokeredMessage->setBrokerProperties($brokerProperties);
+
+ if (array_key_exists(Resources::CONTENT_TYPE, $responseHeaders)) {
+ $brokeredMessage->setContentType(
+ $responseHeaders[Resources::CONTENT_TYPE]
+ );
+ }
+
+ if (array_key_exists('Date', $responseHeaders)) {
+ $brokeredMessage->setDate($responseHeaders['Date']);
+ }
+
+ $brokeredMessage->setBody($response->getBody());
+
+ foreach (array_keys($responseHeaders) as $headerKey) {
+ $value = $responseHeaders[$headerKey];
+ $decodedValue = json_decode($value);
+ if (is_scalar($decodedValue)) {
+ $brokeredMessage->setProperty(
+ $headerKey,
+ $decodedValue
+ );
+ }
+
+ }
+ }
+
+ return $brokeredMessage;
+ }
+
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Sends a brokered message to a specified topic.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780786
+ *
+ * @param string $topicName The name of the topic.
+ * @param BrokeredMessage $brokeredMessage The brokered message.
+ *
+ * @return none
+ */
+ public function sendTopicMessage($topicName, $brokeredMessage)
+ {
+ $topicMessagePath = sprintf(Resources::SEND_MESSAGE_PATH, $topicName);
+ $this->sendMessage($topicMessagePath, $brokeredMessage);
+ }
+
+ /**
+ * Receives a subscription message.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780722
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780770
+ *
+ * @param string $topicName The name of the
+ * topic.
+ * @param string $subscriptionName The name of the
+ * subscription.
+ * @param ReceiveMessageOptions $receiveMessageOptions The options to
+ * receive the subscription message.
+ *
+ * @return BrokeredMessage
+ */
+ public function receiveSubscriptionMessage(
+ $topicName,
+ $subscriptionName,
+ $receiveMessageOptions = null
+ ) {
+ $messagePath = sprintf(
+ Resources::RECEIVE_SUBSCRIPTION_MESSAGE_PATH,
+ $topicName,
+ $subscriptionName
+ );
+
+ $brokeredMessage = $this->receiveMessage(
+ $messagePath,
+ $receiveMessageOptions
+ );
+
+ return $brokeredMessage;
+ }
+
+ /**
+ * Unlocks a brokered message.
+ *
+ * Queues:
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780723
+ *
+ * Topic Subscriptions:
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780737
+ *
+ * @param BrokeredMessage $brokeredMessage The brokered message.
+ *
+ * @return none
+ */
+ public function unlockMessage($brokeredMessage)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_PUT);
+ $lockLocation = $brokeredMessage->getLockLocation();
+ $lockLocationArray = parse_url($lockLocation);
+ $lockLocationPath = Resources::EMPTY_STRING;
+
+ if (array_key_exists(Resources::PHP_URL_PATH, $lockLocationArray)) {
+ $lockLocationPath = $lockLocationArray[Resources::PHP_URL_PATH];
+ $lockLocationPath = preg_replace(
+ '@^\/@',
+ Resources::EMPTY_STRING,
+ $lockLocationPath
+ );
+ }
+
+ $httpCallContext->setPath($lockLocationPath);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $this->sendContext($httpCallContext);
+ }
+
+ /**
+ * Deletes a brokered message.
+ *
+ * Queues:
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780767
+ *
+ * Topic Subscriptions:
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780768
+ *
+ * @param BrokeredMessage $brokeredMessage The brokered message.
+ *
+ * @return none
+ */
+ public function deleteMessage($brokeredMessage)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_DELETE);
+ $lockLocation = $brokeredMessage->getLockLocation();
+ $lockLocationArray = parse_url($lockLocation);
+ $lockLocationPath = Resources::EMPTY_STRING;
+
+ if (array_key_exists(Resources::PHP_URL_PATH, $lockLocationArray)) {
+ $lockLocationPath = $lockLocationArray[Resources::PHP_URL_PATH];
+ $lockLocationPath = preg_replace(
+ '@^\/@',
+ Resources::EMPTY_STRING,
+ $lockLocationPath
+ );
+ }
+
+ if (empty($lockLocationPath)) {
+ throw new \InvalidArgumentException(
+ Resources::MISSING_LOCK_LOCATION_MSG
+ );
+ }
+ $httpCallContext->setPath($lockLocationPath);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $this->sendContext($httpCallContext);
+ }
+
+ /**
+ * Creates a queue with a specified queue information.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780716
+ *
+ * @param QueueInfo $queueInfo The information of the queue.
+ *
+ * @return QueueInfo
+ */
+ public function createQueue($queueInfo)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_PUT);
+ $httpCallContext->setPath($queueInfo->getTitle());
+ $httpCallContext->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::ATOM_ENTRY_CONTENT_TYPE
+ );
+ $httpCallContext->addStatusCode(Resources::STATUS_CREATED);
+
+ $xmlWriter = new \XMLWriter();
+ $xmlWriter->openMemory();
+ $queueInfo->writeXml($xmlWriter);
+ $body = $xmlWriter->outputMemory();
+ $httpCallContext->setBody($body);
+
+ $response = $this->sendContext($httpCallContext);
+ $queueInfo = new QueueInfo();
+ $queueInfo->parseXml($response->getBody());
+ return $queueInfo;
+ }
+
+ /**
+ * Deletes a queue.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780747
+ *
+ * @param string $queuePath The path of the queue.
+ *
+ * @return none
+ */
+ public function deleteQueue($queuePath)
+ {
+ Validate::isString($queuePath, 'queuePath');
+ Validate::notNullOrEmpty($queuePath, 'queuePath');
+
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_DELETE);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $httpCallContext->setPath($queuePath);
+
+ $this->sendContext($httpCallContext);
+ }
+
+ /**
+ * Gets a queue with specified path.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780764
+ *
+ * @param string $queuePath The path of the queue.
+ *
+ * @return QueueInfo
+ */
+ public function getQueue($queuePath)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setPath($queuePath);
+ $httpCallContext->setMethod(Resources::HTTP_GET);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $response = $this->sendContext($httpCallContext);
+ $queueInfo = new QueueInfo();
+ $queueInfo->parseXml($response->getBody());
+ return $queueInfo;
+ }
+
+ /**
+ * Lists a queue.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780759
+ *
+ * @param ListQueuesOptions $listQueuesOptions The options to list the
+ * queues.
+ *
+ * @return ListQueuesResult;
+ */
+ public function listQueues($listQueuesOptions = null)
+ {
+ $response = $this->_listOptions(
+ $listQueuesOptions,
+ Resources::LIST_QUEUES_PATH
+ );
+
+ $listQueuesResult = new ListQueuesResult();
+ $listQueuesResult->parseXml($response->getBody());
+ return $listQueuesResult;
+ }
+
+ /**
+ * The base method of all the list operations.
+ *
+ * @param ListOptions $listOptions The options for list operation.
+ * @param string $path The path of the list operation.
+ *
+ * @return none
+ */
+ private function _listOptions($listOptions, $path)
+ {
+ if (is_null($listOptions)) {
+ $listOptions = new ListOptions();
+ }
+
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_GET);
+ $httpCallContext->setPath($path);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $top = $listOptions->getTop();
+ $skip = $listOptions->getSkip();
+
+ if (!empty($top)) {
+ $httpCallContext->addQueryParameter(Resources::QP_TOP, $top);
+ }
+
+ if (!empty($skip)) {
+ $httpCallContext->addQueryParameter(Resources::QP_SKIP, $skip);
+ }
+
+ return $this->sendContext($httpCallContext);
+ }
+
+ /**
+ * Creates a topic with specified topic info.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780728
+ *
+ * @param TopicInfo $topicInfo The information of the topic.
+ *
+ * @return TopicInfo
+ */
+ public function createTopic($topicInfo)
+ {
+ Validate::notNullOrEmpty($topicInfo, 'topicInfo');
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_PUT);
+ $httpCallContext->setPath($topicInfo->getTitle());
+ $httpCallContext->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::ATOM_ENTRY_CONTENT_TYPE
+ );
+ $httpCallContext->addStatusCode(Resources::STATUS_CREATED);
+
+ $topicDescriptionXml = XmlSerializer::objectSerialize(
+ $topicInfo->getTopicDescription(),
+ 'TopicDescription'
+ );
+
+ $entry = new Entry();
+ $content = new Content($topicDescriptionXml);
+ $content->setType(Resources::XML_CONTENT_TYPE);
+ $entry->setContent($content);
+
+ $entry->setAttribute(
+ Resources::XMLNS,
+ Resources::SERVICE_BUS_NAMESPACE
+ );
+
+ $xmlWriter = new \XMLWriter();
+ $xmlWriter->openMemory();
+ $entry->writeXml($xmlWriter);
+ $httpCallContext->setBody($xmlWriter->outputMemory());
+
+ $response = $this->sendContext($httpCallContext);
+ $topicInfo = new TopicInfo();
+ $topicInfo->parseXml($response->getBody());
+ return $topicInfo;
+ }
+
+ /**
+ * Deletes a topic with specified topic path.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780721
+ *
+ * @param string $topicPath The path of the topic.
+ *
+ * @return none
+ */
+ public function deleteTopic($topicPath)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_DELETE);
+ $httpCallContext->setPath($topicPath);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+
+ $this->sendContext($httpCallContext);
+ }
+
+ /**
+ * Gets a topic.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780769
+ *
+ * @param string $topicPath The path of the topic.
+ *
+ * @return TopicInfo
+ */
+ public function getTopic($topicPath)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_GET);
+ $httpCallContext->setPath($topicPath);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $response = $this->sendContext($httpCallContext);
+ $topicInfo = new TopicInfo();
+ $topicInfo->parseXml($response->getBody());
+ return $topicInfo;
+ }
+
+ /**
+ * Lists topics.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780744
+ *
+ * @param ListTopicsOptions $listTopicsOptions The options to list
+ * the topics.
+ *
+ * @return ListTopicsResults
+ */
+ public function listTopics($listTopicsOptions = null)
+ {
+ $response = $this->_listOptions(
+ $listTopicsOptions,
+ Resources::LIST_TOPICS_PATH
+ );
+
+ $listTopicsResult = new ListTopicsResult();
+ $listTopicsResult->parseXml($response->getBody());
+ return $listTopicsResult;
+ }
+
+ /**
+ * Creates a subscription with specified topic path and
+ * subscription info.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780748
+ *
+ * @param string $topicPath The path of
+ * the topic.
+ * @param SubscriptionInfo $subscriptionInfo The information
+ * of the subscription.
+ *
+ * @return SubscriptionInfo
+ */
+ public function createSubscription($topicPath, $subscriptionInfo)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_PUT);
+ $subscriptionPath = sprintf(
+ Resources::SUBSCRIPTION_PATH,
+ $topicPath,
+ $subscriptionInfo->getTitle()
+ );
+ $httpCallContext->setPath($subscriptionPath);
+ $httpCallContext->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::ATOM_ENTRY_CONTENT_TYPE
+ );
+ $httpCallContext->addStatusCode(Resources::STATUS_CREATED);
+
+ $subscriptionDescriptionXml = XmlSerializer::objectSerialize(
+ $subscriptionInfo->getSubscriptionDescription(),
+ 'SubscriptionDescription'
+ );
+
+ $entry = new Entry();
+ $content = new Content($subscriptionDescriptionXml);
+ $content->setType(Resources::XML_CONTENT_TYPE);
+ $entry->setContent($content);
+
+ $entry->setAttribute(
+ Resources::XMLNS,
+ Resources::SERVICE_BUS_NAMESPACE
+ );
+
+ $xmlWriter = new \XMLWriter();
+ $xmlWriter->openMemory();
+ $entry->writeXml($xmlWriter);
+ $httpCallContext->setBody($xmlWriter->outputMemory());
+
+ $response = $this->sendContext($httpCallContext);
+ $subscriptionInfo = new SubscriptionInfo();
+ $subscriptionInfo->parseXml($response->getBody());
+ return $subscriptionInfo;
+ }
+
+ /**
+ * Deletes a subscription.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780740
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ *
+ * @return none
+ */
+ public function deleteSubscription($topicPath, $subscriptionName)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_DELETE);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $subscriptionPath = sprintf(
+ Resources::SUBSCRIPTION_PATH,
+ $topicPath,
+ $subscriptionName
+ );
+ $httpCallContext->setPath($subscriptionPath);
+ $this->sendContext($httpCallContext);
+ }
+
+ /**
+ * Gets a subscription.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780741
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ *
+ * @return SubscriptionInfo
+ */
+ public function getSubscription($topicPath, $subscriptionName)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_GET);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $subscriptionPath = sprintf(
+ Resources::SUBSCRIPTION_PATH,
+ $topicPath,
+ $subscriptionName
+ );
+ $httpCallContext->setPath($subscriptionPath);
+ $response = $this->sendContext($httpCallContext);
+ $subscriptionInfo = new SubscriptionInfo();
+ $subscriptionInfo->parseXml($response->getBody());
+ return $subscriptionInfo;
+ }
+
+ /**
+ * Lists subscription.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780766
+ *
+ * @param string $topicPath The path of
+ * the topic.
+ * @param ListSubscriptionsOptions $listSubscriptionsOptions The options
+ * to list the subscription.
+ *
+ * @return ListSubscriptionsResult
+ */
+ public function listSubscriptions(
+ $topicPath,
+ $listSubscriptionsOptions = null
+ ) {
+
+ $listSubscriptionsPath = sprintf(
+ Resources::LIST_SUBSCRIPTIONS_PATH,
+ $topicPath
+ );
+ $response = $this->_listOptions(
+ $listSubscriptionsOptions,
+ $listSubscriptionsPath
+ );
+ $listSubscriptionsResult = new ListSubscriptionsResult();
+ $listSubscriptionsResult->parseXml($response->getBody());
+ return $listSubscriptionsResult;
+ }
+
+ /**
+ * Creates a rule.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780774
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ * @param RuleInfo $ruleInfo The information of the rule.
+ *
+ * @return RuleInfo
+ */
+ public function createRule($topicPath, $subscriptionName, $ruleInfo)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_PUT);
+ $httpCallContext->addStatusCode(Resources::STATUS_CREATED);
+ $httpCallContext->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::ATOM_ENTRY_CONTENT_TYPE
+ );
+ $rulePath = sprintf(
+ Resources::RULE_PATH,
+ $topicPath,
+ $subscriptionName,
+ $ruleInfo->getTitle()
+ );
+
+ $ruleDescriptionXml = XmlSerializer::objectSerialize(
+ $ruleInfo->getRuleDescription(),
+ 'RuleDescription'
+ );
+
+ $entry = new Entry();
+ $content = new Content($ruleDescriptionXml);
+ $content->setType(Resources::XML_CONTENT_TYPE);
+ $entry->setContent($content);
+
+ $entry->setAttribute(
+ Resources::XMLNS,
+ Resources::SERVICE_BUS_NAMESPACE
+ );
+
+ $xmlWriter = new \XMLWriter();
+ $xmlWriter->openMemory();
+ $entry->writeXml($xmlWriter);
+ $httpCallContext->setBody($xmlWriter->outputMemory());
+
+ $httpCallContext->setPath($rulePath);
+ $response = $this->sendContext($httpCallContext);
+ $ruleInfo = new ruleInfo();
+ $ruleInfo->parseXml($response->getBody());
+ return $ruleInfo;
+ }
+
+ /**
+ * Deletes a rule.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780751
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ * @param string $ruleName The name of the rule.
+ *
+ * @return none
+ */
+ public function deleteRule($topicPath, $subscriptionName, $ruleName)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $httpCallContext->setMethod(Resources::HTTP_DELETE);
+ $rulePath = sprintf(
+ Resources::RULE_PATH,
+ $topicPath,
+ $subscriptionName,
+ $ruleName
+ );
+ $httpCallContext->setPath($rulePath);
+ $this->sendContext($httpCallContext);
+ }
+
+ /**
+ * Gets a rule.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780772
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ * @param string $ruleName The name of the rule.
+ *
+ * @return RuleInfo
+ */
+ public function getRule($topicPath, $subscriptionName, $ruleName)
+ {
+ $httpCallContext = new HttpCallContext();
+ $httpCallContext->setMethod(Resources::HTTP_GET);
+ $httpCallContext->addStatusCode(Resources::STATUS_OK);
+ $rulePath = sprintf(
+ Resources::RULE_PATH,
+ $topicPath,
+ $subscriptionName,
+ $ruleName
+ );
+ $httpCallContext->setPath($rulePath);
+ $response = $this->sendContext($httpCallContext);
+ $ruleInfo = new RuleInfo();
+ $ruleInfo->parseXml($response->getBody());
+ return $ruleInfo;
+ }
+
+ /**
+ * Lists rules.
+ *
+ * @link http://msdn.microsoft.com/en-us/library/windowsazure/hh780732
+ *
+ * @param string $topicPath The path of the topic.
+ * @param string $subscriptionName The name of the subscription.
+ * @param ListRulesOptions $listRulesOptions The options to list the rules.
+ *
+ * @return ListRuleResult
+ */
+ public function listRules(
+ $topicPath,
+ $subscriptionName,
+ $listRulesOptions = null
+ ) {
+ $listRulesPath = sprintf(
+ Resources::LIST_RULES_PATH,
+ $topicPath,
+ $subscriptionName
+ );
+
+ $response = $this->_listOptions(
+ $listRulesOptions,
+ $listRulesPath
+ );
+
+ $listRulesResult = new ListRulesResult();
+ $listRulesResult->parseXml($response->getBody());
+ return $listRulesResult;
+ }
+
+}
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Internal/IServiceManagement.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Internal/IServiceManagement.php
new file mode 100644
index 0000000..9a814ad
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Internal/IServiceManagement.php
@@ -0,0 +1,552 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Internal;
+use WindowsAzure\Common\Internal\FilterableService;
+
+/**
+ * The Windows Azure service management REST API wrappers.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+interface IServiceManagement extends FilterableService
+{
+ /**
+ * Lists the storage accounts available under the current subscription.
+ *
+ * @return ListStorageServicesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460787.aspx
+ */
+ public function listStorageServices();
+
+ /**
+ * Returns the system properties for the specified storage account.
+ *
+ * These properties include: the address, description, and label of the storage
+ * account; and the name of the affinity group to which the service belongs,
+ * or its geo-location if it is not part of an affinity group.
+ *
+ * @param string $name The storage account name.
+ *
+ * @return GetStorageServicePropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460802.aspx
+ */
+ public function getStorageServiceProperties($name);
+
+ /**
+ * Returns the primary and secondary access keys for the specified storage
+ * account.
+ *
+ * @param string $name The storage account name.
+ *
+ * @return GetStorageServiceKeysResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460785.aspx
+ */
+ public function getStorageServiceKeys($name);
+
+
+ /**
+ * Regenerates the primary or secondary access key for the specified storage
+ * account.
+ *
+ * @param string $name The storage account name.
+ * @param string $keyType Specifies which key to regenerate.
+ *
+ * @return GetStorageServiceKeysResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460795.aspx
+ */
+ public function regenerateStorageServiceKeys($name, $keyType);
+
+ /**
+ * Creates a new storage account in Windows Azure.
+ *
+ * In the optional parameters either location or affinity group must be provided.
+ * Because Create Storage Account is an asynchronous operation, it always returns
+ * status code 202 (Accepted). To determine the status code for the operation
+ * once it is complete, call Get Operation Status. The status code is embedded
+ * in the response for this operation; if successful, it will be
+ * status code 200 (OK).
+ *
+ * @param string $name The storage account name.
+ * @param string $label Name for the storage
+ * account specified as a base64-encoded string. The name may be up to 100
+ * characters in length. The name can be used identify the storage account for
+ * your tracking purposes.
+ * @param CreateServiceOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh264518.aspx
+ */
+ public function createStorageService($name, $label, $options);
+
+ /**
+ * Deletes the specified storage account from Windows Azure.
+ *
+ * @param string $name The storage account name.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh264517.aspx
+ */
+ public function deleteStorageService($name);
+
+ /**
+ * Updates the label and/or the description for a storage account in Windows
+ * Azure.
+ *
+ * @param string $name The storage account name.
+ * @param UpdateServiceOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh264516.aspx
+ */
+ public function updateStorageService($name, $options);
+
+ /**
+ * Lists the affinity groups associated with the specified subscription.
+ *
+ * @return ListAffinityGroupsResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460797.aspx
+ */
+ public function listAffinityGroups();
+
+ /**
+ * Creates a new affinity group for the specified subscription.
+ *
+ * @param string $name The affinity group name.
+ * @param string $label A base-64 encoded name for
+ * the affinity group. The name can be up to 100 characters in length.
+ * @param string $location The data center location
+ * where the affinity group will be created. To list available locations, use
+ * the listLocations API.
+ * @param CreateAffinityGroupOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg715317.aspx
+ */
+ public function createAffinityGroup($name, $label, $location, $options = null);
+
+ /**
+ * Deletes an affinity group in the specified subscription.
+ *
+ * @param string $name The affinity group name.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg715314.aspx
+ */
+ public function deleteAffinityGroup($name);
+
+ /**
+ * Updates the label and/or the description for an affinity group for the
+ * specified subscription.
+ *
+ * @param string $name The affinity group name.
+ * @param string $label The affinity group label.
+ * @param CreateAffinityGroupOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg715316.aspx
+ */
+ public function updateAffinityGroup($name, $label, $options = null);
+
+ /**
+ * Returns the system properties associated with the specified affinity group.
+ *
+ * @param string $name The affinity group name.
+ *
+ * @return GetAffinityGroupPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460789.aspx
+ */
+ public function getAffinityGroupProperties($name);
+
+ /**
+ * Lists all of the data center locations that are valid for your subscription.
+ *
+ * @return ListLocationsResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441293.aspx
+ */
+ public function listLocations();
+
+ /**
+ * Returns the status of the specified operation. After calling an asynchronous
+ * operation, you can call Get Operation Status to determine whether the
+ * operation has succeeded, failed, or is still in progress.
+ *
+ * @param AsynchronousOperationResult $requestInfo The request information for
+ * the REST call you want to track.
+ *
+ * @return GetOperationStatusResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
+ */
+ public function getOperationStatus($requestInfo);
+
+ /**
+ * Lists the hosted services available under the current subscription.
+ *
+ * @return ListHostedServicesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460781.aspx
+ */
+ public function listHostedServices();
+
+ /**
+ * Creates a new hosted service in Windows Azure.
+ *
+ * @param string $name The name for the hosted service
+ * that is unique within Windows Azure. This name is the DNS prefix name and can
+ * be used to access the hosted service.
+ * @param string $label The name for the hosted service
+ * that is base-64 encoded. The name can be used identify the storage account for
+ * your tracking purposes.
+ * @param CreateServiceOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441304.aspx
+ */
+ public function createHostedService($name, $label, $options);
+
+ /**
+ * updates the label and/or the description for a hosted service in Windows
+ * Azure.
+ *
+ * @param string $name The name for the hosted service that is
+ * unique within Windows Azure.
+ * @param UpdateServiceOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441303.aspx
+ */
+ public function updateHostedService($name, $options);
+
+ /**
+ * Deletes the specified hosted service from Windows Azure.
+ *
+ * Before you can delete a hosted service, you must delete any deployments it
+ * has. Attempting to delete a hosted service that has deployments results in
+ * an error. You can call the deleteDeployment API to delete a hosted service's
+ * deployments.
+ *
+ * @param string $name The name for the hosted service.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441305.aspx
+ */
+ public function deleteHostedService($name);
+
+ /**
+ * Retrieves system properties for the specified hosted service. These properties
+ * include the service name and service type; the name of the affinity group to
+ * which the service belongs, or its location if it is not part of an affinity
+ * group; and optionally, information on the service's deployments.
+ *
+ * @param string $name The name for the hosted
+ * service.
+ * @param GetHostedServicePropertiesOptions $options The optional parameters.
+ *
+ * @return GetHostedServicePropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460806.aspx
+ */
+ public function getHostedServiceProperties($name, $options = null);
+
+ /**
+ * Uploads a new service package and creates a new deployment on staging or
+ * production.
+ *
+ * The createDeployment API is an asynchronous operation. To determine whether
+ * the management service has finished processing the request, call
+ * getOperationStatus API.
+ *
+ * @param string $name The name for the hosted service
+ * that is unique within Windows Azure.
+ * @param string $deploymentName The name for the deployment.
+ * The deployment name must be unique among other deployments for the hosted
+ * service.
+ * @param string $slot The name of the deployment slot
+ * This can be "production" or "staging".
+ * @param string $packageUrl The URL that refers to the
+ * location of the service package in the Blob service. The service package can
+ * be located in a storage account beneath the same subscription.
+ * @param string $configuration The base-64 encoded service
+ * configuration file for the deployment.
+ * @param string $label The name for the hosted service
+ * that is base-64 encoded. The name can be up to 100 characters in length. It is
+ * recommended that the label be unique within the subscription. The name can be
+ * used identify the hosted service for your tracking purposes.
+ * @param CreateDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460813.aspx
+ */
+ public function createDeployment(
+ $name,
+ $deploymentName,
+ $slot,
+ $packageUrl,
+ $configuration,
+ $label,
+ $options = null
+ );
+
+ /**
+ * Returns configuration information, status, and system properties for a
+ * deployment.
+ *
+ * The getDeployment API can be used to retrieve information for a specific
+ * deployment or for all deployments in the staging or production environment.
+ * If you want to retrieve information about a specific deployment, you must
+ * first get the unique name for the deployment. This unique name is part of the
+ * response when you make a request to get all deployments in an environment.
+ *
+ * @param string $name The hosted service name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return GetDeploymentResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460804.aspx
+ */
+ public function getDeployment($name, $options);
+
+ /**
+ * Initiates a virtual IP swap between the staging and production deployment
+ * environments for a service. If the service is currently running in the staging
+ * environment, it will be swapped to the production environment. If it is
+ * running in the production environment, it will be swapped to staging.
+ *
+ * You can swap VIPs only if the number of endpoints specified by the service
+ * definition is identical for both deployments. For example, if you add an HTTPS
+ * endpoint to a web role that previously exposed only an HTTP endpoint, you
+ * cannot upgrade your service using a VIP swap; you must delete your production
+ * deployment and redeploy instead. You can obtain information about endpoints
+ * that are used by using the Get Deployment operation.
+ *
+ * @param string $name The hosted service name.
+ * @param string $source The name of the source deployment.
+ * @param string $destination The name of the destination deployment.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460814.aspx
+ */
+ public function swapDeployment($name, $source, $destination);
+
+ /**
+ * Deletes the specified deployment.
+ *
+ * Note that you can delete a deployment either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460815.aspx
+ */
+ public function deleteDeployment($name, $options);
+
+ /**
+ * Initiates a change to the deployment configuration.
+ *
+ * Note that you can change a deployment's configuration either by specifying the
+ * deployment environment (staging or production), or by specifying the
+ * deployment's unique name.
+ *
+ * @param string $name The hosted service
+ * name.
+ * @param string|resource $configuration The configuration
+ * file contents or file stream,
+ * @param ChangeDeploymentConfigurationOptions $options The optional
+ * parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460809.aspx
+ */
+ public function changeDeploymentConfiguration($name, $configuration, $options);
+
+ /**
+ * Initiates a change in deployment status.
+ *
+ * Note that you can change deployment status either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $status The change to initiate to the
+ * deployment status.
+ * Possible values include Running or Suspended.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460808.aspx
+ */
+ public function updateDeploymentStatus($name, $status, $options);
+
+ /**
+ * Initiates an upgrade to a deployment.
+ *
+ * Note that you can upgrade a deployment either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $mode The type of upgrade to initiate
+ * If not specified the default value is Auto. If set to Manual,
+ * walkUpgradeDomain API must be called to apply the update. If set to Auto, the
+ * Windows Azure platform will automatically apply the update to each Upgrade
+ * Domain in sequence.
+ * @param string $packageUrl The URL that refers to the
+ * location of the service package in the Blob service. The service package can
+ * be located in a storage account beneath the same subscription.
+ * @param string $configuration The base-64 encoded service
+ * configuration file for the deployment.
+ * @param string $label The name for the hosted service
+ * that is base-64 encoded. The name may be up to 100 characters in length.
+ * @param boolean $force Specifies whether the rollback
+ * should proceed even when it will cause local data to be lost from some role
+ * instances. True if the rollback should proceed; otherwise false if the
+ * rollback should fail.
+ * @param UpgradeDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460793.aspx
+ */
+ public function upgradeDeployment(
+ $name,
+ $mode,
+ $packageUrl,
+ $configuration,
+ $label,
+ $force,
+ $options
+ );
+
+ /**
+ * Specifies the next upgrade domain to be walked during manual in-place upgrade
+ * or configuration change.
+ *
+ * Note that you can walk an upgrade domain either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param integer $upgradeDomain The integer value that
+ * identifies the upgrade domain to walk. Upgrade domains are identified with a
+ * zero-based index: the first upgrade domain has an ID of 0, the second has an
+ * ID of 1, and so on.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460800.aspx
+ */
+ public function walkUpgradeDomain($name, $upgradeDomain, $options);
+
+ /**
+ * Requests a reboot of a role instance that is running in a deployment.
+ *
+ * Note that you can reboot role instance either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $roleName The role instance name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441298.aspx
+ */
+ public function rebootRoleInstance($name, $roleName, $options);
+
+ /**
+ * Requests a reimage of a role instance that is running in a deployment.
+ *
+ * Note that you can reimage role instance either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $roleName The role instance name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441292.aspx
+ */
+ public function reimageRoleInstance($name, $roleName, $options);
+
+ /**
+ * Cancels an in progress configuration change (update) or upgrade and returns
+ * the deployment to its state before the upgrade or configuration change was
+ * started.
+ *
+ * Note that you can rollback update or upgrade either by specifying the
+ * deployment environment (staging or production), or by specifying the
+ * deployment's unique name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $mode Specifies whether the rollback
+ * should proceed automatically or not. Auto, The rollback proceeds without
+ * further user input. Manual, You must call the walkUpgradeDomain API to apply
+ * the rollback to each upgrade domain.
+ * @param boolean $force Specifies whether the rollback
+ * should proceed even when it will cause local data to be lost from some role
+ * instances. True if the rollback should proceed; otherwise false if the
+ * rollback should fail.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh403977.aspx
+ */
+ public function rollbackUpdateOrUpgrade($name, $mode, $force, $options);
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Internal/Service.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Internal/Service.php
new file mode 100644
index 0000000..8948b82
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Internal/Service.php
@@ -0,0 +1,267 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Internal;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+
+/**
+ * Windows Azure service basic elements.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Service
+{
+ /**
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * @var string
+ */
+ private $_label;
+
+ /**
+ * @var string
+ */
+ private $_description;
+
+ /**
+ * @var string
+ */
+ private $_location;
+
+ /**
+ * @var array
+ */
+ private $_serializationProperties;
+
+ /**
+ * Creates Service object from the given raw array.
+ *
+ * @param array $sources The list of sources that has the row XML.
+ */
+ public function __construct($sources = array())
+ {
+ foreach ($sources as $source) {
+ $this->setLabel(
+ Utilities::tryGetValue(
+ $source,
+ Resources::XTAG_LABEL,
+ $this->getLabel()
+ )
+ );
+
+ $this->setLocation(
+ Utilities::tryGetValue(
+ $source,
+ Resources::XTAG_LOCATION,
+ $this->getLocation()
+ )
+ );
+
+ $this->setDescription(
+ Utilities::tryGetValue(
+ $source,
+ Resources::XTAG_DESCRIPTION,
+ $this->getDescription()
+ )
+ );
+ }
+ }
+
+ /**
+ * Gets the name.
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Sets the name.
+ *
+ * @param string $name The name.
+ *
+ * @return none
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ }
+
+ /**
+ * Gets the label.
+ *
+ * @return string
+ */
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ /**
+ * Sets the label.
+ *
+ * @param string $label The label.
+ *
+ * @return none
+ */
+ public function setLabel($label)
+ {
+ $this->_label = $label;
+ }
+
+ /**
+ * Gets the description.
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->_description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param string $description The description.
+ *
+ * @return none
+ */
+ public function setDescription($description)
+ {
+ $this->_description = $description;
+ }
+
+ /**
+ * Gets the location.
+ *
+ * @return string
+ */
+ public function getLocation()
+ {
+ return $this->_location;
+ }
+
+ /**
+ * Sets the location.
+ *
+ * @param string $location The location.
+ *
+ * @return none
+ */
+ public function setLocation($location)
+ {
+ $this->_location = $location;
+ }
+
+ /**
+ * Adds serialization property.
+ *
+ * @param string $key The property name.
+ * @param string $value The property value.
+ *
+ * @return none
+ */
+ public function addSerializationProperty($key, $value)
+ {
+ $this->_serializationProperties[$key] = $value;
+ }
+
+ /**
+ * Gets serialization property value.
+ *
+ * @param string $key The property key.
+ *
+ * @return string
+ */
+ public function getSerializationPropertyValue($key)
+ {
+ return Utilities::tryGetValue($this->_serializationProperties, $key);
+ }
+
+ /**
+ * Converts the current object into array representation.
+ *
+ * @return array
+ */
+ protected function toArray()
+ {
+ $arr = array();
+ $arr[Resources::XTAG_NAMESPACE] = array(
+ Resources::WA_XML_NAMESPACE => null
+ );
+
+ Utilities::addIfNotEmpty(Resources::XTAG_LABEL, $this->_label, $arr);
+ Utilities::addIfNotEmpty(
+ Resources::XTAG_DESCRIPTION,
+ $this->_description,
+ $arr
+ );
+ Utilities::addIfNotEmpty(
+ Resources::XTAG_LOCATION,
+ $this->_location,
+ $arr
+ );
+
+ return $arr;
+ }
+
+ /**
+ * Serializes the current object.
+ *
+ * @param ISerializer $serializer The serializer.
+ *
+ * @return string
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function serialize($serializer)
+ {
+ $serialized = Resources::EMPTY_STRING;
+
+ if ($serializer instanceof XmlSerializer) {
+ $arr = $this->toArray();
+ $serialized = $serializer->serialize(
+ $arr,
+ $this->_serializationProperties
+ );
+ } else {
+ throw new \InvalidArgumentException(Resources::UNKNOWN_SRILZER_MSG);
+ }
+
+ return $serialized;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Internal/WindowsAzureService.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Internal/WindowsAzureService.php
new file mode 100644
index 0000000..cd2fe12
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Internal/WindowsAzureService.php
@@ -0,0 +1,151 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Internal;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Base class for all windows azure provided services.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class WindowsAzureService extends Service
+{
+ /**
+ * @var string
+ */
+ private $_affinityGroup;
+
+ /**
+ * @var string
+ */
+ private $_url;
+
+ /**
+ * Constructs new storage service object.
+ *
+ * @param array $sources The list of sources that has the row XML.
+ */
+ public function __construct($sources = array())
+ {
+ parent::__construct($sources);
+
+ foreach ($sources as $source) {
+ $this->setName(
+ Utilities::tryGetValue(
+ $source,
+ Resources::XTAG_SERVICE_NAME,
+ $this->getName()
+ )
+ );
+
+ $this->setAffinityGroup(
+ Utilities::tryGetValue(
+ $source,
+ Resources::XTAG_AFFINITY_GROUP,
+ $this->getAffinityGroup()
+ )
+ );
+
+ $this->setUrl(
+ Utilities::tryGetValue(
+ $source,
+ Resources::XTAG_URL,
+ $this->getUrl()
+ )
+ );
+ }
+ }
+
+ /**
+ * Gets the affinityGroup name.
+ *
+ * @return string
+ */
+ public function getAffinityGroup()
+ {
+ return $this->_affinityGroup;
+ }
+
+ /**
+ * Sets the affinityGroup name.
+ *
+ * @param string $affinityGroup The affinityGroup name.
+ *
+ * @return none
+ */
+ public function setAffinityGroup($affinityGroup)
+ {
+ $this->_affinityGroup = $affinityGroup;
+ }
+
+ /**
+ * Gets the url name.
+ *
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * Sets the url name.
+ *
+ * @param string $url The url name.
+ *
+ * @return none
+ */
+ public function setUrl($url)
+ {
+ $this->_url = $url;
+ }
+
+ /**
+ * Converts the current object into ordered array representation.
+ *
+ * @return array
+ */
+ protected function toArray()
+ {
+ $arr = parent::toArray();
+ Utilities::addIfNotEmpty(
+ Resources::XTAG_SERVICE_NAME, $this->getName(),
+ $arr
+ );
+ Utilities::addIfNotEmpty(
+ Resources::XTAG_AFFINITY_GROUP, $this->getAffinityGroup(),
+ $arr
+ );
+
+ return $arr;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/AffinityGroup.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/AffinityGroup.php
new file mode 100644
index 0000000..f3b19a3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/AffinityGroup.php
@@ -0,0 +1,84 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\ServiceManagement\Internal\Service;
+
+/**
+ * The affinity group class.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AffinityGroup extends Service
+{
+ /**
+ * Constructs new affinity group object.
+ */
+ public function __construct()
+ {
+ $sources = func_get_args();
+ parent::__construct($sources);
+
+ foreach ($sources as $source) {
+ $this->setName(
+ Utilities::tryGetValue(
+ $source,
+ Resources::XTAG_NAME,
+ $this->getName()
+ )
+ );
+ }
+ }
+
+ /**
+ * Converts the current object into ordered array representation.
+ *
+ * @return array
+ */
+ protected function toArray()
+ {
+ $arr = parent::toArray();
+ $order = array(
+ Resources::XTAG_NAMESPACE,
+ Resources::XTAG_NAME,
+ Resources::XTAG_LABEL,
+ Resources::XTAG_DESCRIPTION,
+ Resources::XTAG_LOCATION
+ );
+ Utilities::addIfNotEmpty(Resources::XTAG_NAME, $this->getName(), $arr);
+ $ordered = Utilities::orderArray($arr, $order);
+
+ return $ordered;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/AsynchronousOperationResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/AsynchronousOperationResult.php
new file mode 100644
index 0000000..31d056f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/AsynchronousOperationResult.php
@@ -0,0 +1,88 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The result of an asynchronous operation.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AsynchronousOperationResult
+{
+ /**
+ * @var string
+ */
+ private $_requestId;
+
+ /**
+ * Creates new AsynchronousOperationResult from response HTTP headers.
+ *
+ * @param array $headers The HTTP response headers array.
+ *
+ * @return AsynchronousOperationResult
+ */
+ public static function create($headers)
+ {
+ $result = new AsynchronousOperationResult();
+ $result->_requestId = Utilities::tryGetValue(
+ $headers,
+ Resources::X_MS_REQUEST_ID
+ );
+
+ return $result;
+ }
+
+ /**
+ * Gets the requestId.
+ *
+ * @return string
+ */
+ public function getrequestId()
+ {
+ return $this->_requestId;
+ }
+
+ /**
+ * Sets the requestId.
+ *
+ * @param string $requestId The request Id of the asynchronous operation.
+ *
+ * @return none
+ */
+ public function setrequestId($requestId)
+ {
+ $this->_requestId = $requestId;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ChangeDeploymentConfigurationOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ChangeDeploymentConfigurationOptions.php
new file mode 100644
index 0000000..0004707
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ChangeDeploymentConfigurationOptions.php
@@ -0,0 +1,124 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The optional parameters for changeDeploymentConfiguration API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ChangeDeploymentConfigurationOptions extends GetDeploymentOptions
+{
+ /**
+ * Indicates whether to treat package validation warnings as errors.
+ *
+ * @var boolean
+ */
+ private $_treatWarningsAsErrors;
+
+ /**
+ * If not specified the default value is Auto. If set to Manual,
+ * WalkUpgradeDomain must be called to apply the update. If set to Auto, the
+ * Windows Azure platform will automatically apply the update To each upgrade
+ * domain for the service.
+ *
+ * @var string
+ */
+ private $_mode;
+
+ /**
+ * Constructs new ChangeDeploymentConfigurationOptions instance.
+ */
+ public function __construct()
+ {
+ $this->_treatWarningsAsErrors = false;
+ }
+
+ /**
+ * Gets treat warnings as errors flag.
+ *
+ * If not specified the default value is false. If set to true, the update will
+ * be blocked when warnings are encountered.
+ *
+ * @return boolean
+ */
+ public function getTreatWarningsAsErrors()
+ {
+ return $this->_treatWarningsAsErrors;
+ }
+
+ /**
+ * Sets treat warnings as errors flag.
+ *
+ * @param boolean $treatWarningsAsErrors Indicates whether to treat package
+ * validation warnings as errors.
+ *
+ * @return none
+ */
+ public function setTreatWarningsAsErrors($treatWarningsAsErrors)
+ {
+ Validate::isBoolean($treatWarningsAsErrors, 'treatWarningsAsErrors');
+
+ $this->_treatWarningsAsErrors = $treatWarningsAsErrors;
+ }
+
+ /**
+ * Gets change mode.
+ *
+ * If not specified the default value is Auto. If set to Manual,
+ * WalkUpgradeDomain must be called to apply the update. If set to Auto, the
+ * Windows Azure platform will automatically apply the update To each upgrade
+ * domain for the service.
+ *
+ * @return string
+ */
+ public function getMode()
+ {
+ return $this->_mode;
+ }
+
+ /**
+ * Sets mode.
+ *
+ * @param string $mode The change mode.
+ *
+ * @return none
+ */
+ public function setMode($mode)
+ {
+ Validate::isString($mode, 'mode');
+ Validate::isTrue(Mode::isValid($mode), Resources::INVALID_CHANGE_MODE_MSG);
+
+ $this->_mode = $mode;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/CreateAffinityGroupOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/CreateAffinityGroupOptions.php
new file mode 100644
index 0000000..93d186f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/CreateAffinityGroupOptions.php
@@ -0,0 +1,71 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * The optional parameters for createAffinityGroup API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateAffinityGroupOptions
+{
+ /**
+ * @var string
+ */
+ private $_description;
+
+ /**
+ * Gets the description.
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->_description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param string $description The description.
+ *
+ * @return none
+ */
+ public function setDescription($description)
+ {
+ Validate::isString($description, 'description');
+
+ $this->_description = $description;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/CreateDeploymentOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/CreateDeploymentOptions.php
new file mode 100644
index 0000000..9e01714
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/CreateDeploymentOptions.php
@@ -0,0 +1,113 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * The optional parameters for createDeployment API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateDeploymentOptions
+{
+ /**
+ * Indicates whether to start the deployment immediately after it is created.
+ *
+ * @var boolean
+ */
+ private $_startDeployment;
+
+ /**
+ * Indicates whether to treat package validation warnings as errors.
+ *
+ * @var boolean
+ */
+ private $_treatWarningsAsErrors;
+
+ /**
+ * Constructs new CreateDeploymentOptions instance.
+ */
+ public function __construct()
+ {
+ $this->_startDeployment = false;
+ $this->_treatWarningsAsErrors = false;
+ }
+
+ /**
+ * Gets start deployment flag.
+ *
+ * @return boolean
+ */
+ public function getStartDeployment()
+ {
+ return $this->_startDeployment;
+ }
+
+ /**
+ * Sets start deployment flag.
+ *
+ * @param boolean $startDeployment Indicates whether to start the deployment
+ * immediately after it is created.
+ *
+ * @return none
+ */
+ public function setStartDeployment($startDeployment)
+ {
+ Validate::isBoolean($startDeployment, 'startDeployment');
+
+ $this->_startDeployment = $startDeployment;
+ }
+
+ /**
+ * Gets treat warnings as errors flag.
+ *
+ * @return boolean
+ */
+ public function getTreatWarningsAsErrors()
+ {
+ return $this->_treatWarningsAsErrors;
+ }
+
+ /**
+ * Sets treat warnings as errors flag.
+ *
+ * @param boolean $treatWarningsAsErrors Indicates whether to treat package
+ * validation warnings as errors.
+ *
+ * @return none
+ */
+ public function setTreatWarningsAsErrors($treatWarningsAsErrors)
+ {
+ Validate::isBoolean($treatWarningsAsErrors, 'treatWarningsAsErrors');
+
+ $this->_treatWarningsAsErrors = $treatWarningsAsErrors;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/CreateServiceOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/CreateServiceOptions.php
new file mode 100644
index 0000000..0ba11f9
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/CreateServiceOptions.php
@@ -0,0 +1,131 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * Optional parameters for createStorageService API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CreateServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_location;
+
+ /**
+ * @var string
+ */
+ private $_affinityGroup;
+
+ /**
+ * @var string
+ */
+ private $_description;
+
+ /**
+ * Gets the location.
+ *
+ * @return string
+ */
+ public function getLocation()
+ {
+ return $this->_location;
+ }
+
+ /**
+ * Sets the location.
+ *
+ * @param string $location The location.
+ *
+ * @return none
+ */
+ public function setLocation($location)
+ {
+ Validate::isString($location, 'location');
+ Validate::notNullOrEmpty($location, 'location');
+
+ $this->_location = $location;
+ }
+
+ /**
+ * Gets the affinityGroup.
+ *
+ * @return string
+ */
+ public function getAffinityGroup()
+ {
+ return $this->_affinityGroup;
+ }
+
+ /**
+ * Sets the affinityGroup.
+ *
+ * @param string $affinityGroup The affinityGroup.
+ *
+ * @return none
+ */
+ public function setAffinityGroup($affinityGroup)
+ {
+ Validate::isString($affinityGroup, 'affinityGroup');
+ Validate::notNullOrEmpty($affinityGroup, 'affinityGroup');
+
+ $this->_affinityGroup = $affinityGroup;
+ }
+
+ /**
+ * Gets the description.
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->_description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param string $description The description.
+ *
+ * @return none
+ */
+ public function setDescription($description)
+ {
+ Validate::isString($description, 'description');
+
+ $this->_description = $description;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Deployment.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Deployment.php
new file mode 100644
index 0000000..dd307e8
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Deployment.php
@@ -0,0 +1,560 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Represents a Windows Azure deployment.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Deployment
+{
+ /**
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * @var string
+ */
+ private $_slot;
+
+ /**
+ * @var string
+ */
+ private $_privateId;
+
+ /**
+ * @var string
+ */
+ private $_status;
+
+ /**
+ * @var string
+ */
+ private $_label;
+
+ /**
+ * @var string
+ */
+ private $_configuration;
+
+ /**
+ * @var array
+ */
+ private $_roleInstanceList;
+
+ /**
+ * @var integer
+ */
+ private $_upgradeDomainCount;
+
+ /**
+ * @var array
+ */
+ private $_roleList;
+
+ /**
+ * @var string
+ */
+ private $_sdkVersion;
+
+ /**
+ * @var array
+ */
+ private $_inputEndpointList;
+
+ /**
+ * @var boolean
+ */
+ private $_locked;
+
+ /**
+ * @var boolean
+ */
+ private $_rollbackAllowed;
+
+ /**
+ * @var UpgradeStatus
+ */
+ private $_upgradeStatus;
+
+ /**
+ * Creates a new Deployment from parsed response body.
+ *
+ * @param array $parsed The parsed response body in array representation.
+ *
+ * @return Deployment
+ */
+ public static function create($parsed)
+ {
+ $result = new Deployment();
+ $name = Utilities::tryGetValue($parsed, Resources::XTAG_NAME);
+ $label = Utilities::tryGetValue($parsed, Resources::XTAG_LABEL);
+ $url = Utilities::tryGetValue($parsed, Resources::XTAG_URL);
+ $locked = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_LOCKED
+ );
+ $rollbackAllowed = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_ROLLBACK_ALLOWED
+ );
+ $sdkVersion = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_SDK_VERSION
+ );
+ $inputEndpointList = Utilities::tryGetKeysChainValue(
+ $parsed,
+ Resources::XTAG_INPUT_ENDPOINT_LIST,
+ Resources::XTAG_INPUT_ENDPOINT
+ );
+ $roleList = Utilities::tryGetKeysChainValue(
+ $parsed,
+ Resources::XTAG_ROLE_LIST,
+ Resources::XTAG_ROLE
+ );
+ $roleInstanceList = Utilities::tryGetKeysChainValue(
+ $parsed,
+ Resources::XTAG_ROLE_INSTANCE_LIST,
+ Resources::XTAG_ROLE_INSTANCE
+ );
+ $status = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_STATUS
+ );
+ $slot = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_DEPLOYMENT_SLOT
+ );
+ $privateId = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_PRIVATE_ID
+ );
+ $configuration = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_CONFIGURATION
+ );
+ $upgradeDomainCount = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_UPGRADE_DOMAIN_COUNT
+ );
+ $upgradeStatus = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_UPGRADE_STATUS
+ );
+
+ $result->setConfiguration($configuration);
+ $result->setLabel($label);
+ $result->setLocked(Utilities::toBoolean($locked));
+ $result->setName($name);
+ $result->setPrivateId($privateId);
+ $result->setRollbackAllowed(Utilities::toBoolean($rollbackAllowed));
+ $result->setSdkVersion($sdkVersion);
+ $result->setSlot($slot);
+ $result->setStatus($status);
+ $result->setUpgradeDomainCount(intval($upgradeDomainCount));
+ $result->setUpgradeStatus(UpgradeStatus::create($upgradeStatus));
+ $result->setUrl($url);
+ $result->setRoleInstanceList(
+ Utilities::createInstanceList(
+ Utilities::getArray($roleInstanceList),
+ 'WindowsAzure\ServiceManagement\Models\RoleInstance'
+ )
+ );
+ $result->setRoleList(
+ Utilities::createInstanceList(
+ Utilities::getArray($roleList),
+ 'WindowsAzure\ServiceManagement\Models\Role'
+ )
+ );
+ $result->setInputEndpointList(
+ Utilities::createInstanceList(
+ Utilities::getArray($inputEndpointList),
+ 'WindowsAzure\ServiceManagement\Models\InputEndpoint'
+ )
+ );
+
+ return $result;
+ }
+
+ /**
+ * Gets the deployment name.
+ *
+ * The user-supplied name for this deployment.
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Sets the deployment name.
+ *
+ * @param string $name The deployment name.
+ *
+ * @return none
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ }
+
+ /**
+ * Gets the deployment slot.
+ *
+ * The environment to which the hosted service is deployed, either staging or
+ * production.
+ *
+ * @return string
+ */
+ public function getSlot()
+ {
+ return $this->_slot;
+ }
+
+ /**
+ * Sets the deployment slot.
+ *
+ * @param string $slot The deployment slot.
+ *
+ * @return none
+ */
+ public function setSlot($slot)
+ {
+ $this->_slot = $slot;
+ }
+
+ /**
+ * Gets the deployment label.
+ *
+ * The user-supplied name of the deployment returned as a base-64 encoded string.
+ * This name can be used identify the deployment for your tracking purposes.
+ *
+ * @return string
+ */
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ /**
+ * Sets the deployment label.
+ *
+ * @param string $label The deployment label.
+ *
+ * @return none
+ */
+ public function setLabel($label)
+ {
+ $this->_label = $label;
+ }
+
+ /**
+ * Gets the deployment private Id.
+ *
+ * A unique identifier generated internally by Windows Azure for this deployment.
+ *
+ * @return string
+ */
+ public function getPrivateId()
+ {
+ return $this->_privateId;
+ }
+
+ /**
+ * Sets the deployment private Id.
+ *
+ * @param string $privateId The deployment privateId.
+ *
+ * @return none
+ */
+ public function setPrivateId($privateId)
+ {
+ $this->_privateId = $privateId;
+ }
+
+ /**
+ * Gets the deployment status.
+ *
+ * The status of the deployment. Possible values are: Running, Suspended,
+ * RunningTransitioning, SuspendedTransitioning, Starting, Suspending, Deploying,
+ * Deploying.
+ *
+ * @return string
+ */
+ public function getStatus()
+ {
+ return $this->_status;
+ }
+
+ /**
+ * Sets the deployment status.
+ *
+ * @param string $status The deployment status.
+ *
+ * @return none
+ */
+ public function setStatus($status)
+ {
+ $this->_status = $status;
+ }
+
+ /**
+ * Gets the deployment url.
+ *
+ * The URL used to access the hosted service.
+ *
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * Sets the deployment url.
+ *
+ * @param string $url The deployment url.
+ *
+ * @return none
+ */
+ public function setUrl($url)
+ {
+ $this->_url = $url;
+ }
+
+ /**
+ * Gets the deployment configuration.
+ *
+ * The base-64 encoded configuration file of the deployment.
+ *
+ * @return string
+ */
+ public function getConfiguration()
+ {
+ return $this->_configuration;
+ }
+
+ /**
+ * Sets the configuration.
+ *
+ * @param string $configuration The deployment configuration.
+ *
+ * @return none
+ */
+ public function setConfiguration($configuration)
+ {
+ $this->_configuration = $configuration;
+ }
+
+ /**
+ * Gets the deployment role instance list.
+ *
+ * @return array
+ */
+ public function getRoleInstanceList()
+ {
+ return $this->_roleInstanceList;
+ }
+
+ /**
+ * Sets the deployment role instance list.
+ *
+ * @param array $roleInstanceList The deployment role instance list.
+ *
+ * @return none
+ */
+ public function setRoleInstanceList($roleInstanceList)
+ {
+ $this->_roleInstanceList = $roleInstanceList;
+ }
+
+ /**
+ * Gets the deployment upgrade domain count.
+ *
+ * @return integer
+ */
+ public function getUpgradeDomainCount()
+ {
+ return $this->_upgradeDomainCount;
+ }
+
+ /**
+ * Sets the deployment upgradeDomainCount.
+ *
+ * @param integer $upgradeDomainCount The deployment upgrade domain count.
+ *
+ * @return none
+ */
+ public function setUpgradeDomainCount($upgradeDomainCount)
+ {
+ $this->_upgradeDomainCount = $upgradeDomainCount;
+ }
+
+ /**
+ * Gets the deployment role list.
+ *
+ * Contains the provisioning details for the new virtual machine deployment.
+ *
+ * @return array
+ */
+ public function getRoleList()
+ {
+ return $this->_roleList;
+ }
+
+ /**
+ * Sets the deployment role list.
+ *
+ * @param array $roleList The deployment role list.
+ *
+ * @return none
+ */
+ public function setRoleList($roleList)
+ {
+ $this->_roleList = $roleList;
+ }
+
+ /**
+ * Gets the deployment SDK version.
+ *
+ * @return string
+ */
+ public function getSdkVersion()
+ {
+ return $this->_sdkVersion;
+ }
+
+ /**
+ * Sets the deployment SDK version.
+ *
+ * @param string $sdkVersion The deployment SDK version.
+ *
+ * @return none
+ */
+ public function setSdkVersion($sdkVersion)
+ {
+ $this->_sdkVersion = $sdkVersion;
+ }
+
+ /**
+ * Gets the deployment input endpoint list.
+ *
+ * @return array
+ */
+ public function getInputEndpointList()
+ {
+ return $this->_inputEndpointList;
+ }
+
+ /**
+ * Sets the deployment input endpoint list.
+ *
+ * @param array $inputEndpointList The deployment input endpoint list.
+ *
+ * @return none
+ */
+ public function setInputEndpointList($inputEndpointList)
+ {
+ $this->_inputEndpointList = $inputEndpointList;
+ }
+
+ /**
+ * Gets the deployment locked flag.
+ *
+ * @return boolean
+ */
+ public function getLocked()
+ {
+ return $this->_locked;
+ }
+
+ /**
+ * Sets the deployment locked flag.
+ *
+ * @param boolean $locked The deployment locked flag.
+ *
+ * @return none
+ */
+ public function setLocked($locked)
+ {
+ $this->_locked = $locked;
+ }
+
+ /**
+ * Gets the deployment rollback allowed flag.
+ *
+ * @return boolean
+ */
+ public function getRollbackAllowed()
+ {
+ return $this->_rollbackAllowed;
+ }
+
+ /**
+ * Sets the deployment rollbackAllowed.
+ *
+ * @param boolean $rollbackAllowed The deployment rollback allowed flag.
+ *
+ * @return none
+ */
+ public function setRollbackAllowed($rollbackAllowed)
+ {
+ $this->_rollbackAllowed = $rollbackAllowed;
+ }
+
+ /**
+ * Gets the deployment upgrade status.
+ *
+ * @return UpgradeStatus
+ */
+ public function getUpgradeStatus()
+ {
+ return $this->_upgradeStatus;
+ }
+
+ /**
+ * Sets the deployment upgrade status.
+ *
+ * @param UpgradeStatus $upgradeStatus The deployment upgrade status.
+ *
+ * @return none
+ */
+ public function setUpgradeStatus($upgradeStatus)
+ {
+ $this->_upgradeStatus = $upgradeStatus;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/DeploymentSlot.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/DeploymentSlot.php
new file mode 100644
index 0000000..345f6cc
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/DeploymentSlot.php
@@ -0,0 +1,61 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+
+/**
+ * Valid deployment slots that can be used on Windows Azure.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class DeploymentSlot
+{
+ const STAGING = 'staging';
+ const PRODUCTION = 'production';
+
+ /**
+ * Validates the provided slot name.
+ *
+ * @param string $slot The deployment slot name.
+ *
+ * @return boolean
+ */
+ public static function isValid($slot)
+ {
+ switch (strtolower($slot)) {
+ case self::STAGING:
+ case self::PRODUCTION:
+ return true;
+
+ default:
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/DeploymentStatus.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/DeploymentStatus.php
new file mode 100644
index 0000000..cc1361f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/DeploymentStatus.php
@@ -0,0 +1,61 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+
+/**
+ * The possible values for deployment status.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class DeploymentStatus
+{
+ const SUSPENDED = 'Suspended';
+ const RUNNING = 'Running';
+
+ /**
+ * Validates the provided status.
+ *
+ * @param string $status The deployment status.
+ *
+ * @return boolean
+ */
+ public static function isValid($status)
+ {
+ switch (strtolower($status)) {
+ case strtolower(self::SUSPENDED):
+ case strtolower(self::RUNNING):
+ return true;
+
+ default:
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetAffinityGroupPropertiesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetAffinityGroupPropertiesResult.php
new file mode 100644
index 0000000..95287b1
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetAffinityGroupPropertiesResult.php
@@ -0,0 +1,158 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The result of calling getAffinityGroupProperties API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetAffinityGroupPropertiesResult
+{
+ /**
+ * @var AffinityGroup
+ */
+ private $_affinityGroup;
+
+ /**
+ * @var array
+ */
+ private $_hostedServices;
+
+ /**
+ * @var array
+ */
+ private $_storageServices;
+
+ /**
+ * Creates GetAffinityGroupPropertiesResult from parsed response into array.
+ *
+ * @param array $parsed The parsed HTTP response body.
+ *
+ * @return GetAffinityGroupPropertiesResult
+ */
+ public static function create($parsed)
+ {
+ $result = new GetAffinityGroupPropertiesResult();
+ $hostedServices = Utilities::tryGetArray(
+ Resources::XTAG_HOSTED_SERVICES,
+ $parsed
+ );
+ $storageServices = Utilities::tryGetArray(
+ Resources::XTAG_STORAGE_SERVICES,
+ $parsed
+ );
+
+ $result->_affinityGroup = new AffinityGroup($parsed);
+
+ foreach ($hostedServices as $value) {
+ $service = new HostedService($value);
+ $result->_hostedServices[] = $service;
+ }
+
+ foreach ($storageServices as $value) {
+ $service = new StorageService($value);
+ $result->_storageServices[] = $service;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets the affinityGroup.
+ *
+ * @return AffinityGroup
+ */
+ public function getAffinityGroup()
+ {
+ return $this->_affinityGroup;
+ }
+
+ /**
+ * Sets the affinityGroup.
+ *
+ * @param AffinityGroup $affinityGroup The affinityGroup.
+ *
+ * @return none
+ */
+ public function setAffinityGroup($affinityGroup)
+ {
+ $this->_affinityGroup = $affinityGroup;
+ }
+
+ /**
+ * Gets the hostedServices.
+ *
+ * @return array
+ */
+ public function getHostedServices()
+ {
+ return $this->_hostedServices;
+ }
+
+ /**
+ * Sets the hostedServices.
+ *
+ * @param array $hostedServices The hostedServices.
+ *
+ * @return none
+ */
+ public function setHostedServices($hostedServices)
+ {
+ $this->_hostedServices = $hostedServices;
+ }
+
+ /**
+ * Gets the storageServices.
+ *
+ * @return array
+ */
+ public function getStorageServices()
+ {
+ return $this->_storageServices;
+ }
+
+ /**
+ * Sets the storageServices.
+ *
+ * @param array $storageServices The storageServices.
+ *
+ * @return none
+ */
+ public function setStorageServices($storageServices)
+ {
+ $this->_storageServices = $storageServices;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetDeploymentOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetDeploymentOptions.php
new file mode 100644
index 0000000..77247a4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetDeploymentOptions.php
@@ -0,0 +1,106 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The parameters to get a deployment.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetDeploymentOptions
+{
+ /**
+ * @var string
+ */
+ private $_slot;
+
+ /**
+ * @var string
+ */
+ private $_deploymentName;
+
+
+ /**
+ * Gets the deployment slot.
+ *
+ * @return string
+ */
+ public function getSlot()
+ {
+ return $this->_slot;
+ }
+
+ /**
+ * Sets the deployment slot.
+ *
+ * @param string $slot The deployment slot name.
+ *
+ * @return none
+ */
+ public function setSlot($slot)
+ {
+ Validate::isString($slot, 'slot');
+ Validate::notNullOrEmpty($slot, 'slot');
+ Validate::isTrue(
+ DeploymentSlot::isValid($slot),
+ sprintf(Resources::INVALID_SLOT, $slot)
+ );
+
+ $this->_slot = $slot;
+ }
+
+ /**
+ * Gets the deployment name.
+ *
+ * @return string
+ */
+ public function getDeploymentName()
+ {
+ return $this->_deploymentName;
+ }
+
+ /**
+ * Sets the deployment name.
+ *
+ * @param string $deploymentName The deployment name.
+ *
+ * @return none
+ */
+ public function setDeploymentName($deploymentName)
+ {
+ Validate::isString($deploymentName, 'deploymentName');
+ Validate::notNullOrEmpty($deploymentName, 'deploymentName');
+
+ $this->_deploymentName = $deploymentName;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetDeploymentResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetDeploymentResult.php
new file mode 100644
index 0000000..8766de4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetDeploymentResult.php
@@ -0,0 +1,84 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+
+/**
+ * The result of calling getDeployment API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetDeploymentResult
+{
+ /**
+ * @var Deployment
+ */
+ private $_deployment;
+
+ /**
+ * Creates a new GetDeploymentResult from parsed response body.
+ *
+ * @param array $parsed The parsed response body in array representation.
+ *
+ * @return GetDeploymentResult
+ *
+ * @static
+ */
+ public static function create($parsed)
+ {
+ $result = new GetDeploymentResult();
+
+ $result->setDeployment(Deployment::create($parsed));
+
+ return $result;
+ }
+
+ /**
+ * Gets the deployment instance.
+ *
+ * @return Deployment
+ */
+ public function getDeployment()
+ {
+ return $this->_deployment;
+ }
+
+ /**
+ * Sets the deployment.
+ *
+ * @param Deployment $deployment The deployment instance.
+ *
+ * @return none
+ */
+ public function setDeployment($deployment)
+ {
+ $this->_deployment = $deployment;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetHostedServicePropertiesOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetHostedServicePropertiesOptions.php
new file mode 100644
index 0000000..d2b2ed6
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetHostedServicePropertiesOptions.php
@@ -0,0 +1,77 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * The optional parameter for getHostedServiceProperties API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetHostedServicePropertiesOptions
+{
+ /**
+ * @var boolean
+ */
+ private $_embedDetail;
+
+ /**
+ * Constructs new GetHostedServicePropertiesOptions instance.
+ */
+ public function __construct()
+ {
+ $this->_embedDetail = false;
+ }
+
+ /**
+ * Sets the embed detail flag.
+ *
+ * @param boolean $embedDetail The embed detail flag.
+ *
+ * @return none
+ */
+ public function setEmbedDetail($embedDetail)
+ {
+ Validate::isBoolean($embedDetail);
+
+ $this->_embedDetail = $embedDetail;
+ }
+
+ /**
+ * Gets the embed detail flag.
+ *
+ * @return boolean
+ */
+ public function getEmbedDetail()
+ {
+ return $this->_embedDetail;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetHostedServicePropertiesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetHostedServicePropertiesResult.php
new file mode 100644
index 0000000..bc8d7e4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetHostedServicePropertiesResult.php
@@ -0,0 +1,87 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The result of calling getHostedServiceProperties API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetHostedServicePropertiesResult
+{
+ /**
+ * @var HostedService
+ */
+ private $_hostedService;
+
+ /**
+ * Creates GetHostedServicePropertiesResult from parsed response.
+ *
+ * @param array $parsed The parsed response in array representation.
+ *
+ * @return GetHostedServicePropertiesResult
+ */
+ public static function create($parsed)
+ {
+ $result = new GetHostedServicePropertiesResult();
+ $properties = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_HOSTED_SERVICE_PROPERTIES
+ );
+ $result->_hostedService = new HostedService($parsed, $properties);
+
+ return $result;
+ }
+
+ /**
+ * Gets the hostedService.
+ *
+ * @return HostedService
+ */
+ public function getHostedService()
+ {
+ return $this->_hostedService;
+ }
+
+ /**
+ * Sets the hostedService.
+ *
+ * @param HostedService $hostedService The hostedService.
+ *
+ * @return none
+ */
+ public function setHostedService($hostedService)
+ {
+ $this->_hostedService = $hostedService;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetOperationStatusResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetOperationStatusResult.php
new file mode 100644
index 0000000..6c70b79
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetOperationStatusResult.php
@@ -0,0 +1,190 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\ServiceException;
+
+/**
+ * The result of calling getOperationStatus API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetOperationStatusResult
+{
+ /**
+ * @var string
+ */
+ private $_id;
+
+ /**
+ * @var string
+ */
+ private $_status;
+
+ /**
+ * @var string
+ */
+ private $_httpStatusCode;
+
+ /**
+ * @var ServiceException
+ */
+ private $_error;
+
+ /**
+ * Creates GetOperationStatusResult object from parsed response.
+ *
+ * @param array $parsed The parsed response.
+ *
+ * @return GetOperationStatusResult
+ */
+ public static function create($parsed)
+ {
+ $result = new GetOperationStatusResult();
+
+ $result->_id = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_ID
+ );
+ $result->_status = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_STATUS
+ );
+ $result->_httpStatusCode = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_HTTP_STATUS_CODE
+ );
+ $error = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_ERROR
+ );
+
+ if (!empty($error)) {
+ $code = Utilities::tryGetValue($error, Resources::XTAG_CODE);
+ $message = Utilities::tryGetValue($error, Resources::XTAG_MESSAGE);
+
+ $result->_error = new ServiceException($code, $message);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets the id.
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * Sets the id.
+ *
+ * @param string $id The id.
+ *
+ * @return none
+ */
+ public function setId($id)
+ {
+ $this->_id = $id;
+ }
+
+ /**
+ * Gets the status.
+ *
+ * @return string
+ */
+ public function getStatus()
+ {
+ return $this->_status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param string $status The status.
+ *
+ * @return none
+ */
+ public function setStatus($status)
+ {
+ $this->_status = $status;
+ }
+
+ /**
+ * Gets the httpStatusCode.
+ *
+ * @return string
+ */
+ public function getHttpStatusCode()
+ {
+ return $this->_httpStatusCode;
+ }
+
+ /**
+ * Sets the httpStatusCode.
+ *
+ * @param string $httpStatusCode The httpStatusCode.
+ *
+ * @return none
+ */
+ public function setHttpStatusCode($httpStatusCode)
+ {
+ $this->_httpStatusCode = $httpStatusCode;
+ }
+
+ /**
+ * Gets the error.
+ *
+ * @return ServiceException
+ */
+ public function getError()
+ {
+ return $this->_error;
+ }
+
+ /**
+ * Sets the error.
+ *
+ * @param ServiceException $error The error.
+ *
+ * @return none
+ */
+ public function setError($error)
+ {
+ $this->_error = $error;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetStorageServiceKeysResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetStorageServiceKeysResult.php
new file mode 100644
index 0000000..50d664f
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetStorageServiceKeysResult.php
@@ -0,0 +1,151 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * The result of calling getStorageServiceKeys and regenerateStorageServiceKeys API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetStorageServiceKeysResult
+{
+ /**
+ * @var string
+ */
+ private $_url;
+
+ /**
+ * @var string
+ */
+ private $_primary;
+
+ /**
+ * @var string
+ */
+ private $_secondary;
+
+ /**
+ * Creates new GetStorageServiceKeysResult object from parsed response.
+ *
+ * @param array $parsed The HTTP parsed response into array representation.
+ *
+ * @return GetStorageServiceKeysResult
+ */
+ public static function create($parsed)
+ {
+ $result = new GetStorageServiceKeysResult();
+ $keys = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_STORAGE_SERVICE_KEYS
+ );
+ $result->_url = Utilities::tryGetValue($parsed, Resources::XTAG_URL);
+ $result->_primary = Utilities::tryGetValue(
+ $keys,
+ Resources::XTAG_PRIMARY
+ );
+ $result->_secondary = Utilities::tryGetValue(
+ $keys,
+ Resources::XTAG_SECONDARY
+ );
+
+ return $result;
+ }
+
+ /**
+ * Gets the url.
+ *
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * Sets the url.
+ *
+ * @param string $url The url.
+ *
+ * @return none
+ */
+ public function setUrl($url)
+ {
+ $this->_url = $url;
+ }
+
+ /**
+ * Gets the primary.
+ *
+ * @return string
+ */
+ public function getPrimary()
+ {
+ return $this->_primary;
+ }
+
+ /**
+ * Sets the primary.
+ *
+ * @param string $primary The primary.
+ *
+ * @return none
+ */
+ public function setPrimary($primary)
+ {
+ $this->_primary = $primary;
+ }
+
+ /**
+ * Gets the secondary.
+ *
+ * @return string
+ */
+ public function getSecondary()
+ {
+ return $this->_secondary;
+ }
+
+ /**
+ * Sets the secondary.
+ *
+ * @param string $secondary The secondary.
+ *
+ * @return none
+ */
+ public function setSecondary($secondary)
+ {
+ $this->_secondary = $secondary;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetStorageServicePropertiesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetStorageServicePropertiesResult.php
new file mode 100644
index 0000000..769cbd3
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/GetStorageServicePropertiesResult.php
@@ -0,0 +1,87 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The result of calling getStorageServiceProperties API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GetStorageServicePropertiesResult
+{
+ /**
+ * @var StorageService
+ */
+ private $_storageService;
+
+ /**
+ * Creates GetStorageServicePropertiesResult from parsed response.
+ *
+ * @param array $parsed The parsed response in array representation.
+ *
+ * @return GetStorageServicePropertiesResult
+ */
+ public static function create($parsed)
+ {
+ $result = new GetStorageServicePropertiesResult();
+ $properties = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_STORAGE_SERVICE_PROPERTIES
+ );
+ $result->_storageService = new StorageService($parsed, $properties);
+
+ return $result;
+ }
+
+ /**
+ * Gets the storageService.
+ *
+ * @return StorageService
+ */
+ public function getStorageService()
+ {
+ return $this->_storageService;
+ }
+
+ /**
+ * Sets the storageService.
+ *
+ * @param StorageService $storageService The storageService.
+ *
+ * @return none
+ */
+ public function setStorageService($storageService)
+ {
+ $this->_storageService = $storageService;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/HostedService.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/HostedService.php
new file mode 100644
index 0000000..f79d9de
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/HostedService.php
@@ -0,0 +1,115 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\ServiceManagement\Internal\WindowsAzureService;
+
+/**
+ * The hosted service class.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class HostedService extends WindowsAzureService
+{
+ /**
+ * @var array
+ */
+ private $_deployments;
+
+ /**
+ * Constructs new hosted service object.
+ */
+ public function __construct()
+ {
+ $sources = func_get_args();
+ parent::__construct($sources);
+
+ $this->_deployments = array();
+ foreach ($sources as $source) {
+ $deployments = Utilities::tryGetKeysChainValue(
+ $source,
+ Resources::XTAG_DEPLOYMENTS,
+ Resources::XTAG_DEPLOYMENT
+ );
+
+ if (!empty($deployments)) {
+ $this->_deployments = Utilities::createInstanceList(
+ Utilities::getArray($deployments),
+ 'WindowsAzure\ServiceManagement\Models\Deployment'
+ );
+ }
+ }
+ }
+
+ /**
+ * Converts the current object into ordered array representation.
+ *
+ * @return array
+ */
+ protected function toArray()
+ {
+ $arr = parent::toArray();
+ $order = array(
+ Resources::XTAG_NAMESPACE,
+ Resources::XTAG_SERVICE_NAME,
+ Resources::XTAG_LABEL,
+ Resources::XTAG_DESCRIPTION,
+ Resources::XTAG_LOCATION,
+ Resources::XTAG_AFFINITY_GROUP
+ );
+ $ordered = Utilities::orderArray($arr, $order);
+
+ return $ordered;
+ }
+
+ /**
+ * Gets the deployments array.
+ *
+ * @return array
+ */
+ public function getDeployments()
+ {
+ return $this->_deployments;
+ }
+
+ /**
+ * Sets the deployments array.
+ *
+ * @param array $deployments The deployments array.
+ *
+ * @return none
+ */
+ public function setDeployments($deployments)
+ {
+ $this->_deployments = $deployments;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/InputEndpoint.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/InputEndpoint.php
new file mode 100644
index 0000000..0240e4e
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/InputEndpoint.php
@@ -0,0 +1,152 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Represents a Windows Azure deployment input endpoint.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class InputEndpoint
+{
+ /**
+ * @var string
+ */
+ private $_roleName;
+
+ /**
+ * @var string
+ */
+ private $_vip;
+
+ /**
+ * @var string
+ */
+ private $_port;
+
+ /**
+ * Creates a new InputEndpoint from parsed response body.
+ *
+ * @param array $parsed The parsed response body in array representation.
+ *
+ * @return InputEndpoint
+ */
+ public static function create($parsed)
+ {
+ $inputEndpoint = new InputEndpoint();
+ $vip = Utilities::tryGetValue($parsed, Resources::XTAG_VIP);
+ $port = Utilities::tryGetValue($parsed, Resources::XTAG_PORT);
+ $roleName = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_ROLE_NAME
+ );
+
+ $inputEndpoint->setPort($port);
+ $inputEndpoint->setRoleName($roleName);
+ $inputEndpoint->setVip($vip);
+
+ return $inputEndpoint;
+ }
+
+ /**
+ * Gets the input endpoint role name.
+ *
+ * The name of the role.
+ *
+ * @return string
+ */
+ public function getRoleName()
+ {
+ return $this->_roleName;
+ }
+
+ /**
+ * Sets the input endpoint role name.
+ *
+ * @param string $roleName The input endpoint role name.
+ *
+ * @return none
+ */
+ public function setRoleName($roleName)
+ {
+ $this->_roleName = $roleName;
+ }
+
+ /**
+ * Gets the input endpoint VIP.
+ *
+ * The virtual IP address that this input endpoint is exposed on.
+ *
+ * @return string
+ */
+ public function getVip()
+ {
+ return $this->_vip;
+ }
+
+ /**
+ * Sets the input endpoint VIP.
+ *
+ * @param string $vip The input endpoint VIP.
+ *
+ * @return none
+ */
+ public function setVip($vip)
+ {
+ $this->_vip = $vip;
+ }
+
+ /**
+ * Gets the input endpoint port.
+ *
+ * The port this input endpoint is exposed on.
+ *
+ * @return string
+ */
+ public function getPort()
+ {
+ return $this->_port;
+ }
+
+ /**
+ * Sets the input endpoint port.
+ *
+ * @param string $port The input endpoint port.
+ *
+ * @return none
+ */
+ public function setPort($port)
+ {
+ $this->_port = $port;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/KeyType.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/KeyType.php
new file mode 100644
index 0000000..9f7f248
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/KeyType.php
@@ -0,0 +1,44 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+
+/**
+ * The storage account key type.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class KeyType
+{
+ const PRIMARY_KEY = 'Primary';
+ const SECONDARY_KEY = 'Secondary';
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListAffinityGroupsResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListAffinityGroupsResult.php
new file mode 100644
index 0000000..5867f28
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListAffinityGroupsResult.php
@@ -0,0 +1,94 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The result of calling listAfinityGroups API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListAffinityGroupsResult
+{
+ /**
+ * @var array
+ */
+ private $_affinityGroups;
+
+ /**
+ * Creates new ListAffinityGroupsResult from parsed response body.
+ *
+ * @param array $parsed The parsed response body.
+ *
+ * @return ListAffinityGroupsResult
+ */
+ public static function create($parsed)
+ {
+ $result = new ListAffinityGroupsResult();
+
+ $result->_affinityGroups = array();
+ $entries = Utilities::tryGetArray(
+ Resources::XTAG_AFFINITY_GROUP,
+ $parsed
+ );
+
+ foreach ($entries as $value) {
+ $result->_affinityGroups[] = new AffinityGroup($value);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets affinity groups.
+ *
+ * @return array
+ */
+ public function getAffinityGroups()
+ {
+ return $this->_affinityGroups;
+ }
+
+ /**
+ * Sets affinity groups.
+ *
+ * @param array $affinityGroups The affinity groups.
+ *
+ * @return none
+ */
+ public function setAffinityGroups($affinityGroups)
+ {
+ $this->_affinityGroups = $affinityGroups;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListHostedServicesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListHostedServicesResult.php
new file mode 100644
index 0000000..ad60772
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListHostedServicesResult.php
@@ -0,0 +1,99 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The result of calling listHostedServices API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListHostedServicesResult
+{
+ /**
+ * @var array
+ */
+ private $_hostedServices;
+
+ /**
+ * Creates new ListHostedServicesResult from parsed response body.
+ *
+ * @param array $parsed The parsed response body.
+ *
+ * @return ListHostedServicesResult
+ */
+ public static function create($parsed)
+ {
+ $result = new ListHostedServicesResult();
+ $result->_hostedServices = array();
+ $rowHostedServices = Utilities::tryGetArray(
+ Resources::XTAG_HOSTED_SERVICE,
+ $parsed
+ );
+
+ foreach ($rowHostedServices as $rowHostedService) {
+ $properties = Utilities::tryGetArray(
+ Resources::XTAG_HOSTED_SERVICE_PROPERTIES,
+ $rowHostedService
+ );
+ $hostedService = new HostedService(
+ $rowHostedService,
+ $properties
+ );
+ $result->_hostedServices[] = $hostedService;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets hosted services.
+ *
+ * @return array
+ */
+ public function getHostedServices()
+ {
+ return $this->_hostedServices;
+ }
+
+ /**
+ * Sets hosted services.
+ *
+ * @param array $hostedServices The hosted services.
+ *
+ * @return none
+ */
+ public function setHostedServices($hostedServices)
+ {
+ $this->_hostedServices = $hostedServices;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListLocationsResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListLocationsResult.php
new file mode 100644
index 0000000..35ce099
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListLocationsResult.php
@@ -0,0 +1,100 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The result of calling listLocations API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListLocationsResult
+{
+ /**
+ * @var array
+ */
+ private $_locations;
+
+ /**
+ * Creates new ListLocationsResult from parsed response body.
+ *
+ * @param array $parsed The parsed response body.
+ *
+ * @return ListLocationsResult
+ */
+ public static function create($parsed)
+ {
+ $result = new ListLocationsResult();
+
+ $result->_locations = array();
+ $entries = array();
+
+ if (!empty($parsed)) {
+ $entries = Utilities::getArray($parsed[Resources::XTAG_LOCATION]);
+ }
+
+ foreach ($entries as $value) {
+ $location = new Location();
+ $location->setName(Utilities::tryGetValue($value, Resources::XTAG_NAME));
+ $location->setDisplayName(
+ Utilities::tryGetValue($value, Resources::XTAG_DISPLAY_NAME)
+ );
+ $result->_locations[] = $location;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets locations.
+ *
+ * @return array
+ */
+ public function getLocations()
+ {
+ return $this->_locations;
+ }
+
+ /**
+ * Sets locations.
+ *
+ * @param array $locations The locations.
+ *
+ * @return none
+ */
+ public function setLocations($locations)
+ {
+ $this->_locations = $locations;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListStorageServicesResult.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListStorageServicesResult.php
new file mode 100644
index 0000000..bc1504d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/ListStorageServicesResult.php
@@ -0,0 +1,90 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\Resources;
+
+/**
+ * The result of calling listStorageServices API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ListStorageServicesResult
+{
+ /**
+ * @var array
+ */
+ private $_storageServices;
+
+ /**
+ * Creates new ListStorageServicesResult from parsed response body.
+ *
+ * @param array $parsed The parsed response body.
+ *
+ * @return ListStorageServicesResult
+ */
+ public static function create($parsed)
+ {
+ $result = new ListStorageServicesResult();
+ $rowStorageServices = Utilities::tryGetArray(
+ Resources::XTAG_STORAGE_SERVICE,
+ $parsed
+ );
+
+ foreach ($rowStorageServices as $rowStorageService) {
+ $result->_storageServices[] = new StorageService($rowStorageService);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets storage accounts.
+ *
+ * @return array
+ */
+ public function getStorageServices()
+ {
+ return $this->_storageServices;
+ }
+
+ /**
+ * Sets storage accounts.
+ *
+ * @param array $storageServices The storage accounts.
+ *
+ * @return none
+ */
+ public function setStorageServices($storageServices)
+ {
+ $this->_storageServices = $storageServices;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Location.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Location.php
new file mode 100644
index 0000000..45e63aa
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Location.php
@@ -0,0 +1,95 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+
+/**
+ * The location class.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Location
+{
+ /**
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * @var string
+ */
+ private $_displayName;
+
+ /**
+ * Gets the name.
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Sets the name.
+ *
+ * @param string $name The name.
+ *
+ * @return none
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ }
+
+ /**
+ * Gets the displayName.
+ *
+ * @return string
+ */
+ public function getDisplayName()
+ {
+ return $this->_displayName;
+ }
+
+ /**
+ * Sets the displayName.
+ *
+ * @param string $displayName The displayName.
+ *
+ * @return none
+ */
+ public function setDisplayName($displayName)
+ {
+ $this->_displayName = $displayName;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Mode.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Mode.php
new file mode 100644
index 0000000..9b0b317
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Mode.php
@@ -0,0 +1,61 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+
+/**
+ * The possible values for deployment change mode.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Mode
+{
+ const AUTO = 'auto';
+ const MANUAL = 'manual';
+
+ /**
+ * Validates the provided mode.
+ *
+ * @param string $mode The deployment change mode.
+ *
+ * @return boolean
+ */
+ public static function isValid($mode)
+ {
+ switch (strtolower($mode)) {
+ case self::AUTO:
+ case self::MANUAL:
+ return true;
+
+ default:
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/OperationStatus.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/OperationStatus.php
new file mode 100644
index 0000000..81b0aef
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/OperationStatus.php
@@ -0,0 +1,45 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+
+/**
+ * The possible staus values of asynchronous request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class OperationStatus
+{
+ const IN_PROGRESS = 'InProgress';
+ const SUCCEEDED = 'Succeeded';
+ const FAILED = 'Failed';
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Role.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Role.php
new file mode 100644
index 0000000..c900833
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/Role.php
@@ -0,0 +1,125 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Represents a Windows Azure deployment role.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class Role
+{
+ /**
+ * @var string
+ */
+ private $_roleName;
+
+ /**
+ * @var string
+ */
+ private $_osVersion;
+
+ /**
+ * Creates a new Role from parsed response body.
+ *
+ * @param array $parsed The parsed response body in array representation.
+ *
+ * @return Role
+ */
+ public static function create($parsed)
+ {
+ $role = new Role();
+ $roleName = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_ROLE_NAME
+ );
+ $osVersion = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_OS_VERSION
+ );
+
+ $role->setOsVersion($osVersion);
+ $role->setRoleName($roleName);
+
+ return $role;
+ }
+
+ /**
+ * Gets the role name.
+ *
+ * The name of the role.
+ *
+ * @return string
+ */
+ public function getRoleName()
+ {
+ return $this->_roleName;
+ }
+
+ /**
+ * Sets the role name.
+ *
+ * @param string $roleName The role name.
+ *
+ * @return none
+ */
+ public function setRoleName($roleName)
+ {
+ $this->_roleName = $roleName;
+ }
+
+ /**
+ * Gets the role OS version.
+ *
+ * The version of the Windows Azure Guest Operating System on which this role's
+ * instances are running.
+ *
+ * @return string
+ */
+ public function getOsVersion()
+ {
+ return $this->_osVersion;
+ }
+
+ /**
+ * Sets the role OS version.
+ *
+ * @param string $osVersion The role OS version.
+ *
+ * @return none
+ */
+ public function setOsVersion($osVersion)
+ {
+ $this->_osVersion = $osVersion;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/RoleInstance.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/RoleInstance.php
new file mode 100644
index 0000000..016cd41
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/RoleInstance.php
@@ -0,0 +1,341 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Represents a Windows Azure deployment role instance.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class RoleInstance
+{
+ /**
+ * @var string
+ */
+ private $_roleName;
+
+ /**
+ * @var string
+ */
+ private $_instanceName;
+
+ /**
+ * @var string
+ */
+ private $_instanceStatus;
+
+ /**
+ * @var integer
+ */
+ private $_instanceUpgradeDomain;
+
+ /**
+ * @var integer
+ */
+ private $_instanceFaultDomain;
+
+ /**
+ * @var string
+ */
+ private $_instanceSize;
+
+ /**
+ * @var string
+ */
+ private $_instanceStateDetails;
+
+ /**
+ * @var string
+ */
+ private $_instanceErrorCode;
+
+ /**
+ * Creates a new RoleInstance from parsed response body.
+ *
+ * @param array $parsed The parsed response body in array representation.
+ *
+ * @return RoleInstance
+ */
+ public static function create($parsed)
+ {
+ $roleInstance = new RoleInstance();
+ $roleName = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_ROLE_NAME
+ );
+ $instanceName = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_INSTANCE_NAME
+ );
+ $instanceStatus = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_INSTANCE_STATUS
+ );
+ $instanceUpgradeDomain = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_INSTANCE_UPGRADE_DOMAIN
+ );
+ $instanceFaultDomain = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_INSTANCE_FAULT_DOMAIN
+ );
+ $instanceSize = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_INSTANCE_SIZE
+ );
+ $instanceStateDetails = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_INSTANCE_STATE_DETAILS
+ );
+ $instanceErrorCode = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_INSTANCE_ERROR_CODE
+ );
+
+ $roleInstance->setInstanceErrorCode($instanceErrorCode);
+ $roleInstance->setInstanceFaultDomain(intval($instanceFaultDomain));
+ $roleInstance->setInstanceName($instanceName);
+ $roleInstance->setInstanceSize($instanceSize);
+ $roleInstance->setInstanceStateDetails($instanceStateDetails);
+ $roleInstance->setInstanceStatus($instanceStatus);
+ $roleInstance->setInstanceUpgradeDomain(intval($instanceUpgradeDomain));
+ $roleInstance->setRoleName($roleName);
+
+ return $roleInstance;
+ }
+
+ /**
+ * Gets the role name.
+ *
+ * The name of the role.
+ *
+ * @return string
+ */
+ public function getRoleName()
+ {
+ return $this->_roleName;
+ }
+
+ /**
+ * Sets the role name.
+ *
+ * @param string $roleName The role name.
+ *
+ * @return none
+ */
+ public function setRoleName($roleName)
+ {
+ $this->_roleName = $roleName;
+ }
+
+ /**
+ * Gets the instance name.
+ *
+ * The name of the specific role instance (if any).
+ *
+ * @return string
+ */
+ public function getInstanceName()
+ {
+ return $this->_instanceName;
+ }
+
+ /**
+ * Sets the instance name.
+ *
+ * @param string $instanceName The instance name.
+ *
+ * @return none
+ */
+ public function setInstanceName($instanceName)
+ {
+ $this->_instanceName = $instanceName;
+ }
+
+ /**
+ * Gets the instance status.
+ *
+ * The current status of this instance.
+ *
+ * @return string
+ */
+ public function getInstanceStatus()
+ {
+ return $this->_instanceStatus;
+ }
+
+ /**
+ * Sets the instance status.
+ *
+ * @param string $instanceStatus The instance status.
+ *
+ * @return none
+ */
+ public function setInstanceStatus($instanceStatus)
+ {
+ $this->_instanceStatus = $instanceStatus;
+ }
+
+ /**
+ * Gets the instance upgrade domain.
+ *
+ * The upgrade domain that this role instance belongs to. During an upgrade
+ * deployment, all roles in the same upgrade domain are upgraded at the same
+ * time.
+ *
+ * @return integer
+ */
+ public function getInstanceUpgradeDomain()
+ {
+ return $this->_instanceUpgradeDomain;
+ }
+
+ /**
+ * Sets the instance upgrade domain.
+ *
+ * @param integer $instanceUpgradeDomain The instance upgrade domain.
+ *
+ * @return none
+ */
+ public function setInstanceUpgradeDomain($instanceUpgradeDomain)
+ {
+ $this->_instanceUpgradeDomain = $instanceUpgradeDomain;
+ }
+
+ /**
+ * Gets the instance fault domain.
+ *
+ * The fault domain that this role instance belongs to. Role instances in the
+ * same fault domain may be vulnerable to the failure of a single piece of
+ * hardware.
+ *
+ * @return integer
+ */
+ public function getInstanceFaultDomain()
+ {
+ return $this->_instanceFaultDomain;
+ }
+
+ /**
+ * Sets the instance fault domain.
+ *
+ * @param integer $instanceFaultDomain The instance fault domain.
+ *
+ * @return none
+ */
+ public function setInstanceFaultDomain($instanceFaultDomain)
+ {
+ $this->_instanceFaultDomain = $instanceFaultDomain;
+ }
+
+ /**
+ * Gets the instance size.
+ *
+ * The size of the role instance. Possible values are: ExtraSmall, Small, Medium,
+ * Large, ExtraLarge.
+ *
+ * @return string
+ */
+ public function getInstanceSize()
+ {
+ return $this->_instanceSize;
+ }
+
+ /**
+ * Sets the instance size.
+ *
+ * @param string $instanceSize The instance size.
+ *
+ * @return none
+ */
+ public function setInstanceSize($instanceSize)
+ {
+ $this->_instanceSize = $instanceSize;
+ }
+
+ /**
+ * Gets the instance state details.
+ *
+ * The instance state is returned as an English human-readable string that, when
+ * present, provides a snapshot of the state of the virtual machine at the time
+ * the operation was called. For example, when the instance is first being
+ * initialized a "Preparing Windows for first use." could be returned.
+ *
+ * @return string
+ */
+ public function getInstanceStateDetails()
+ {
+ return $this->_instanceStateDetails;
+ }
+
+ /**
+ * Sets the instance state details.
+ *
+ * @param string $instanceStateDetails The instance state details.
+ *
+ * @return none
+ */
+ public function setInstanceStateDetails($instanceStateDetails)
+ {
+ $this->_instanceStateDetails = $instanceStateDetails;
+ }
+
+ /**
+ * Gets the instance error code.
+ *
+ * Error code of the latest role or VM start. For VMRoles the error codes are:
+ * WaitTimeout, VhdTooLarge, AzureInternalError.
+ *
+ * For web and worker roles this field returns an error code that can be provided
+ * to Windows Azure support to assist in resolution of errors. Typically this
+ * field will be empty.
+ *
+ * @return string
+ */
+ public function getInstanceErrorCode()
+ {
+ return $this->_instanceErrorCode;
+ }
+
+ /**
+ * Sets the instance error code.
+ *
+ * @param string $instanceErrorCode The instance error code.
+ *
+ * @return none
+ */
+ public function setInstanceErrorCode($instanceErrorCode)
+ {
+ $this->_instanceErrorCode = $instanceErrorCode;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/StorageService.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/StorageService.php
new file mode 100644
index 0000000..42c4322
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/StorageService.php
@@ -0,0 +1,199 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\ServiceManagement\Internal\WindowsAzureService;
+
+/**
+ * The storage service class.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class StorageService extends WindowsAzureService
+{
+ /**
+ * @var string
+ */
+ private $_blobEndpointUri;
+
+ /**
+ * @var string
+ */
+ private $_queueEndpointUri;
+
+ /**
+ * @var string
+ */
+ private $_tableEndpointUri;
+
+ /**
+ * @var string
+ */
+ private $_status;
+
+ /**
+ * Constructs new storage service object.
+ */
+ public function __construct()
+ {
+ $sources = func_get_args();
+ parent::__construct($sources);
+
+ foreach ($sources as $source) {
+ $this->setStatus(
+ Utilities::tryGetValue(
+ $source,
+ Resources::XTAG_STATUS,
+ $this->getStatus()
+ )
+ );
+
+ $endpoints = Utilities::tryGetKeysChainValue(
+ $source,
+ Resources::XTAG_ENDPOINTS,
+ Resources::XTAG_ENDPOINT
+ );
+ $this->setBlobEndpointUri(Utilities::tryGetValue($endpoints, 0));
+ $this->setQueueEndpointUri(Utilities::tryGetValue($endpoints, 1));
+ $this->setTableEndpointUri(Utilities::tryGetValue($endpoints, 2));
+ }
+ }
+
+ /**
+ * Converts the current object into ordered array representation.
+ *
+ * @return array
+ */
+ protected function toArray()
+ {
+ $arr = parent::toArray();
+ $order = array(
+ Resources::XTAG_NAMESPACE,
+ Resources::XTAG_SERVICE_NAME,
+ Resources::XTAG_DESCRIPTION,
+ Resources::XTAG_LABEL,
+ Resources::XTAG_AFFINITY_GROUP,
+ Resources::XTAG_LOCATION
+ );
+ $ordered = Utilities::orderArray($arr, $order);
+
+ return $ordered;
+ }
+
+ /**
+ * Gets the status.
+ *
+ * @return string
+ */
+ public function getStatus()
+ {
+ return $this->_status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param string $status The status.
+ *
+ * @return none
+ */
+ public function setStatus($status)
+ {
+ $this->_status = $status;
+ }
+
+ /**
+ * Gets storage service blob endpoint uri.
+ *
+ * @return string
+ */
+ public function getBlobEndpointUri()
+ {
+ return $this->_blobEndpointUri;
+ }
+
+ /**
+ * Gets storage service queue endpoint uri.
+ *
+ * @return string
+ */
+ public function getQueueEndpointUri()
+ {
+ return $this->_queueEndpointUri;
+ }
+
+ /**
+ * Gets storage service table endpoint uri.
+ *
+ * @return string
+ */
+ public function getTableEndpointUri()
+ {
+ return $this->_tableEndpointUri;
+ }
+
+ /**
+ * Gets storage service blob endpoint uri.
+ *
+ * @param string $blobEndpointUri The endpoint URI.
+ *
+ * @return string
+ */
+ public function setBlobEndpointUri($blobEndpointUri)
+ {
+ $this->_blobEndpointUri = $blobEndpointUri;
+ }
+
+ /**
+ * Gets storage service queue endpoint uri.
+ *
+ * @param string $queueEndpointUri The endpoint URI.
+ *
+ * @return string
+ */
+ public function setQueueEndpointUri($queueEndpointUri)
+ {
+ $this->_queueEndpointUri = $queueEndpointUri;
+ }
+
+ /**
+ * Gets storage service table endpoint uri.
+ *
+ * @param string $tableEndpointUri The endpoint URI.
+ *
+ * @return string
+ */
+ public function setTableEndpointUri($tableEndpointUri)
+ {
+ $this->_tableEndpointUri = $tableEndpointUri;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/UpdateServiceOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/UpdateServiceOptions.php
new file mode 100644
index 0000000..1ecd7f5
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/UpdateServiceOptions.php
@@ -0,0 +1,100 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * The optional parameters for updateStorageService API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class UpdateServiceOptions
+{
+ /**
+ * @var string
+ */
+ private $_label;
+
+ /**
+ * @var string
+ */
+ private $_description;
+
+ /**
+ * Gets the label.
+ *
+ * @return string
+ */
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ /**
+ * Sets the label.
+ *
+ * @param string $label The label.
+ *
+ * @return none
+ */
+ public function setLabel($label)
+ {
+ Validate::isString($label, 'label');
+
+ $this->_label = $label;
+ }
+
+ /**
+ * Gets the description.
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->_description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param string $description The description.
+ *
+ * @return none
+ */
+ public function setDescription($description)
+ {
+ Validate::isString($description, 'description');
+
+ $this->_description = $description;
+ }
+}
+
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/UpgradeDeploymentOptions.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/UpgradeDeploymentOptions.php
new file mode 100644
index 0000000..ac57444
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/UpgradeDeploymentOptions.php
@@ -0,0 +1,72 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * The optional parameters for upgradeDeployment API.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class UpgradeDeploymentOptions extends GetDeploymentOptions
+{
+ /**
+ * @var string
+ */
+ private $_roleToUpgrade;
+
+ /**
+ * Gets the role to upgrade name.
+ *
+ * The name of the specific role to upgrade.
+ *
+ * @return string
+ */
+ public function getRoleToUpgrade()
+ {
+ return $this->_roleToUpgrade;
+ }
+
+ /**
+ * Sets the role to upgrade name.
+ *
+ * @param string $roleToUpgrade The role to upgrade name.
+ *
+ * @return none
+ */
+ public function setRoleToUpgrade($roleToUpgrade)
+ {
+ Validate::isString($roleToUpgrade, 'roleToUpgrade');
+ Validate::notNullOrEmpty($roleToUpgrade, 'roleToUpgrade');
+
+ $this->_roleToUpgrade = $roleToUpgrade;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/UpgradeStatus.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/UpgradeStatus.php
new file mode 100644
index 0000000..e862f58
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/Models/UpgradeStatus.php
@@ -0,0 +1,163 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement\Models;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Utilities;
+
+/**
+ * Holds a deployment upgrade status.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement\Models
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class UpgradeStatus
+{
+ /**
+ * @var string
+ */
+ private $_upgradeType;
+
+ /**
+ * @var string
+ */
+ private $_currentUpgradeDomainState;
+
+ /**
+ * @var integer
+ */
+ private $_currentUpgradeDomain;
+
+ /**
+ * Creates a new UpgradeStatus object from the parsed response.
+ *
+ * @param array $parsed The parsed response body in array representation
+ *
+ * @return \WindowsAzure\ServiceManagement\Models\UpgradeStatus
+ */
+ public static function create($parsed)
+ {
+ $result = new UpgradeStatus();
+ $upgradeType = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_UPGRADE_TYPE
+ );
+ $currentUpgradeDomainState = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_CURRENT_UPGRADE_DOMAIN_STATE
+ );
+ $currentUpgradeDomain = Utilities::tryGetValue(
+ $parsed,
+ Resources::XTAG_CURRENT_UPGRADE_DOMAIN
+ );
+
+ $result->setCurrentUpgradeDomain(intval($currentUpgradeDomain));
+ $result->setCurrentUpgradeDomainState($currentUpgradeDomainState);
+ $result->setUpgradeType($upgradeType);
+
+ return $result;
+ }
+
+ /**
+ * Gets the deployment upgrade type.
+ *
+ * The upgrade type designated for this deployment. Possible values are Auto and
+ * Manual.
+ *
+ * @return string
+ */
+ public function getUpgradeType()
+ {
+ return $this->_upgradeType;
+ }
+
+ /**
+ * Sets the deployment upgrade type.
+ *
+ * @param string $upgradeType The deployment upgrade type.
+ *
+ * @return none
+ */
+ public function setUpgradeType($upgradeType)
+ {
+ $this->_upgradeType = $upgradeType;
+ }
+
+ /**
+ * Gets the deployment current upgrade domain state.
+ *
+ * The state of the current upgrade domain. Possible values are Before and
+ * During.
+ *
+ * @return string
+ */
+ public function getCurrentUpgradeDomainState()
+ {
+ return $this->_currentUpgradeDomainState;
+ }
+
+ /**
+ * Sets the deployment current upgrade domain state.
+ *
+ * @param string $currentUpgradeDomainState The deployment current upgrade domain
+ * state.
+ *
+ * @return none
+ */
+ public function setCurrentUpgradeDomainState($currentUpgradeDomainState)
+ {
+ $this->_currentUpgradeDomainState = $currentUpgradeDomainState;
+ }
+
+ /**
+ * Gets the deployment current upgrade domain.
+ *
+ * An integer value that identifies the current upgrade domain. Upgrade domains
+ * are identified with a zero-based index: the first upgrade domain has an ID of
+ * 0, the second has an ID of 1, and so on.
+ *
+ * @return integer
+ */
+ public function getCurrentUpgradeDomain()
+ {
+ return $this->_currentUpgradeDomain;
+ }
+
+ /**
+ * Sets the deployment current upgrade domain.
+ *
+ * @param integer $currentUpgradeDomain The deployment current upgrade domain.
+ *
+ * @return none
+ */
+ public function setCurrentUpgradeDomain($currentUpgradeDomain)
+ {
+ $this->_currentUpgradeDomain = $currentUpgradeDomain;
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/ServiceManagementRestProxy.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/ServiceManagementRestProxy.php
new file mode 100644
index 0000000..b599a64
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceManagement/ServiceManagementRestProxy.php
@@ -0,0 +1,1534 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceManagement;
+use WindowsAzure\Common\Internal\Resources;
+use WindowsAzure\Common\Internal\Validate;
+use WindowsAzure\Common\Internal\Utilities;
+use WindowsAzure\Common\Internal\RestProxy;
+use WindowsAzure\Common\Internal\Http\HttpCallContext;
+use WindowsAzure\Common\Internal\Serialization\XmlSerializer;
+use WindowsAzure\ServiceManagement\Internal\IServiceManagement;
+use WindowsAzure\ServiceManagement\Models\CreateAffinityGroupOptions;
+use WindowsAzure\ServiceManagement\Models\AffinityGroup;
+use WindowsAzure\ServiceManagement\Models\ListAffinityGroupsResult;
+use WindowsAzure\ServiceManagement\Models\GetAffinityGroupPropertiesResult;
+use WindowsAzure\ServiceManagement\Models\ListLocationsResult;
+use WindowsAzure\ServiceManagement\Models\StorageService;
+use WindowsAzure\ServiceManagement\Models\ListStorageServicesResult;
+use WindowsAzure\ServiceManagement\Models\GetOperationStatusResult;
+use WindowsAzure\ServiceManagement\Models\AsynchronousOperationResult;
+use WindowsAzure\ServiceManagement\Models\UpdateServiceOptions;
+use WindowsAzure\ServiceManagement\Models\GetStorageServicePropertiesResult;
+use WindowsAzure\ServiceManagement\Models\GetStorageServiceKeysResult;
+use WindowsAzure\ServiceManagement\Models\ListHostedServicesResult;
+use WindowsAzure\ServiceManagement\Models\HostedService;
+use WindowsAzure\ServiceManagement\Models\GetHostedServicePropertiesOptions;
+use WindowsAzure\ServiceManagement\Models\GetHostedServicePropertiesResult;
+use WindowsAzure\ServiceManagement\Models\DeploymentSlot;
+use WindowsAzure\ServiceManagement\Models\CreateDeploymentOptions;
+use WindowsAzure\ServiceManagement\Models\GetDeploymentResult;
+use WindowsAzure\ServiceManagement\Models\DeploymentStatus;
+use WindowsAzure\ServiceManagement\Models\Mode;
+
+/**
+ * This class constructs HTTP requests and receive HTTP responses for service
+ * management service layer.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceManagement
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ServiceManagementRestProxy extends RestProxy
+ implements IServiceManagement
+{
+ /**
+ * @var string
+ */
+ private $_subscriptionId;
+
+ /**
+ * Sends an order request for the specified role instance.
+ *
+ * @param string $name The hosted service name.
+ * @param string $roleName The role instance name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ * @param string $order The order name which is used as value
+ * for query parameter 'comp'.
+ *
+ * @return AsynchronousOperationResult
+ */
+ private function _sendRoleInstanceOrder($name, $roleName, $options, $order)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($roleName, 'roleName');
+ Validate::notNullOrEmpty($roleName, 'roleName');
+ Validate::notNullOrEmpty($options, 'options');
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getRoleInstancePath($name, $options, $roleName));
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+ $context->addQueryParameter(Resources::QP_COMP, $order);
+ $context->addHeader(Resources::CONTENT_TYPE, Resources::XML_CONTENT_TYPE);
+ $context->addHeader(Resources::CONTENT_LENGTH_NO_SPACE, 0);
+
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+
+ /**
+ * Constructs URI path for given service management resource.
+ *
+ * @param string $serviceManagementResource The resource name.
+ * @param string $name The service name.
+ *
+ * @return string
+ */
+ private function _getPath($serviceManagementResource, $name)
+ {
+ $path = $this->_subscriptionId . '/' . $serviceManagementResource;
+
+ if (!is_null($name)) {
+ $path .= '/' . $name;
+ }
+
+ return $path;
+ }
+
+ /**
+ * Constructs URI path for locations.
+ *
+ * @return string
+ */
+ private function _getLocationPath()
+ {
+ return $this->_getPath('locations', null);
+ }
+
+ /**
+ * Constructs URI path for affinity group.
+ *
+ * @param string $name The affinity group name.
+ *
+ * @return string
+ */
+ private function _getAffinityGroupPath($name = null)
+ {
+ return $this->_getPath('affinitygroups', $name);
+ }
+
+ /**
+ * Constructs URI path for storage service.
+ *
+ * @param string $name The storage service name.
+ *
+ * @return string
+ */
+ private function _getStorageServicePath($name = null)
+ {
+ return $this->_getPath('services/storageservices', $name);
+ }
+
+ /**
+ * Constructs URI path for hosted service.
+ *
+ * @param string $name The hosted service name.
+ *
+ * @return string
+ */
+ private function _getHostedServicePath($name = null)
+ {
+ return $this->_getPath('services/hostedservices', $name);
+ }
+
+ /**
+ * Constructs URI path for deployment slot.
+ *
+ * @param string $name The hosted service name.
+ * @param string $slot The deployment slot name.
+ *
+ * @return string
+ */
+ private function _getDeploymentPathUsingSlot($name, $slot)
+ {
+ $path = "services/hostedservices/$name/deploymentslots";
+ return $this->_getPath($path, $slot);
+ }
+
+ /**
+ * Constructs URI path for deployment slot.
+ *
+ * @param string $name The hosted service name.
+ * @param string $deploymentName The deployment slot name.
+ *
+ * @return string
+ */
+ private function _getDeploymentPathUsingName($name, $deploymentName)
+ {
+ $path = "services/hostedservices/$name/deployments";
+ return $this->_getPath($path, $deploymentName);
+ }
+
+ /**
+ * Gets role instance path.
+ *
+ * @param string $name The hosted service name.
+ * @param GetDeploymentOptions $options The get deployment options.
+ * @param string $roleName The role instance name.
+ *
+ * @return string
+ */
+ private function _getRoleInstancePath($name, $options, $roleName)
+ {
+ $path = $this->_getDeploymentPath($name, $options) . '/roleinstances';
+ return "$path/$roleName";
+ }
+
+ /**
+ * Gets the deployment URI path using the slot or name.
+ *
+ * @param string $name The hosted service name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return string
+ */
+ private function _getDeploymentPath($name, $options)
+ {
+ $slot = $options->getSlot();
+ $deploymentName = $options->getDeploymentName();
+ $path = null;
+
+ Validate::isTrue(
+ !empty($slot) || !empty($deploymentName),
+ Resources::INVALID_DEPLOYMENT_LOCATOR_MSG
+ );
+
+ if (!empty($slot)) {
+ $path = $this->_getDeploymentPathUsingSlot($name, $slot);
+ } else {
+ $path = $this->_getDeploymentPathUsingName($name, $deploymentName);
+ }
+
+ return $path;
+ }
+
+ /**
+ * Constructs URI path for storage service key.
+ *
+ * @param string $name The storage service name.
+ *
+ * @return string
+ */
+ private function _getStorageServiceKeysPath($name = null)
+ {
+ return $this->_getPath('services/storageservices', $name) . '/keys';
+ }
+
+ /**
+ * Constructs URI path for operations.
+ *
+ * @param string $name The operation resource name.
+ *
+ * @return string
+ */
+ private function _getOperationPath($name = null)
+ {
+ return $this->_getPath('operations', $name);
+ }
+
+ /**
+ * Constructs request XML including windows azure XML namesoace.
+ *
+ * @param array $xmlElements The XML elements associated with their values.
+ * @param string $root The XML root name.
+ *
+ * @return string
+ */
+ private function _createRequestXml($xmlElements, $root)
+ {
+ $requestArray = array(
+ Resources::XTAG_NAMESPACE => array(Resources::WA_XML_NAMESPACE => null)
+ );
+
+ foreach ($xmlElements as $tagName => $value) {
+ if (!empty($value)) {
+ $requestArray[$tagName] = $value;
+ }
+ }
+
+ $properties = array(XmlSerializer::ROOT_NAME => $root);
+
+ return $this->dataSerializer->serialize($requestArray, $properties);
+ }
+
+ /**
+ * Prepare configuration XML for sending via REST API
+ *
+ * @param string|resource $configuration The configuration file contents
+ * or file stream.
+ * @return string
+ */
+ private function _encodeConfiguration($value) {
+ $value = is_resource($value) ? stream_get_contents($value) : $value;
+ $value = base64_encode($value);
+
+ // Cut the BOM if any. If the xml configuration would start with BOM Azure treats it as invalid XML file.
+ if (strpos($value, '77u/') === 0) {
+ $value = substr($value, 4);
+ }
+
+ return $value;
+ }
+
+ /**
+ * Initializes new ServiceManagementRestProxy object.
+ *
+ * @param IHttpClient $channel The HTTP channel.
+ * @param string $subscriptionId The user subscription id.
+ * @param string $uri The service URI.
+ * @param ISerializer $dataSerializer The data serializer.
+ */
+ public function __construct($channel, $subscriptionId, $uri, $dataSerializer)
+ {
+ parent::__construct(
+ $channel,
+ $dataSerializer,
+ $uri
+ );
+ $this->_subscriptionId = $subscriptionId;
+ }
+
+ /**
+ * Lists the storage accounts available under the current subscription.
+ *
+ * @return ListStorageServicesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460787.aspx
+ */
+ public function listStorageServices()
+ {
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($this->_getStorageServicePath());
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $response = $this->sendContext($context);
+ $serialized = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListStorageServicesResult::create($serialized);
+ }
+
+ /**
+ * Returns the system properties for the specified storage account.
+ *
+ * These properties include: the address, description, and label of the storage
+ * account; and the name of the affinity group to which the service belongs,
+ * or its geo-location if it is not part of an affinity group.
+ *
+ * @param string $name The storage account name.
+ *
+ * @return GetStorageServicePropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460802.aspx
+ */
+ public function getStorageServiceProperties($name)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($this->_getStorageServicePath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $response = $this->sendContext($context);
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetStorageServicePropertiesResult::create($parsed);
+ }
+
+ /**
+ * Returns the primary and secondary access keys for the specified storage
+ * account.
+ *
+ * @param string $name The storage account name.
+ *
+ * @return GetStorageServiceKeysResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460785.aspx
+ */
+ public function getStorageServiceKeys($name)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($this->_getStorageServiceKeysPath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $response = $this->sendContext($context);
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetStorageServiceKeysResult::create($parsed);
+ }
+
+ /**
+ * Regenerates the primary or secondary access key for the specified storage
+ * account.
+ *
+ * @param string $name The storage account name.
+ * @param string $keyType Specifies which key to regenerate.
+ *
+ * @return GetStorageServiceKeysResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460795.aspx
+ */
+ public function regenerateStorageServiceKeys($name, $keyType)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($keyType, 'keyType');
+ Validate::notNullOrEmpty($keyType, 'keyType');
+
+ $body = $this->_createRequestXml(
+ array(Resources::XTAG_KEY_TYPE => $keyType),
+ Resources::XTAG_REGENERATE_KEYS
+ );
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getStorageServiceKeysPath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+ $context->addQueryParameter(Resources::QP_ACTION, Resources::QPV_REGENERATE);
+ $context->setBody($body);
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ $response = $this->sendContext($context);
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetStorageServiceKeysResult::create($parsed);
+ }
+
+ /**
+ * Creates a new storage account in Windows Azure.
+ *
+ * In the optional parameters either location or affinity group must be provided.
+ * Because Create Storage Account is an asynchronous operation, it always returns
+ * status code 202 (Accepted). To determine the status code for the operation
+ * once it is complete, call getOperationStatus API. The status code is embedded
+ * in the response for this operation; if successful, it will be
+ * status code 200 (OK).
+ *
+ * @param string $name The storage account name.
+ * @param string $label The name for the storage account
+ * specified as a base64-encoded string. The name may be up to 100 characters
+ * in length. The name can be used identify the storage account for your tracking
+ * purposes.
+ * @param CreateServiceOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh264518.aspx
+ */
+ public function createStorageService($name, $label, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($label, 'label');
+ Validate::notNullOrEmpty($label, 'label');
+ Validate::notNullOrEmpty($options, 'options');
+ $affinityGroup = $options->getAffinityGroup();
+ $location = $options->getLocation();
+ Validate::isTrue(
+ !empty($location) || !empty($affinityGroup),
+ Resources::INVALID_CREATE_SERVICE_OPTIONS_MSG
+ );
+
+ $storageService = new StorageService();
+ $storageService->setName($name);
+ $storageService->setLabel($label);
+ $storageService->setLocation($options->getLocation());
+ $storageService->setAffinityGroup($options->getAffinityGroup());
+ $storageService->setDescription($options->getDescription());
+ $storageService->addSerializationProperty(
+ XmlSerializer::ROOT_NAME,
+ Resources::XTAG_CREATE_STORAGE_SERVICE_INPUT
+ );
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getStorageServicePath());
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+ $context->setBody($storageService->serialize($this->dataSerializer));
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+
+ /**
+ * Deletes the specified storage account from Windows Azure.
+ *
+ * @param string $name The storage account name.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh264517.aspx
+ */
+ public function deleteStorageService($name)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_DELETE);
+ $context->setPath($this->_getStorageServicePath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $this->sendContext($context);
+ }
+
+ /**
+ * Updates the label and/or the description for a storage account in Windows
+ * Azure.
+ *
+ * @param string $name The storage account name.
+ * @param UpdateServiceOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh264516.aspx
+ */
+ public function updateStorageService($name, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ $label = $options->getLabel();
+ $description = $options->getDescription();
+ Validate::isTrue(
+ !empty($label) || !empty($description),
+ Resources::INVALID_UPDATE_SERVICE_OPTIONS_MSG
+ );
+
+ $storageService = new StorageService();
+ $storageService->setLabel($options->getLabel());
+ $storageService->setDescription($options->getDescription());
+ $storageService->addSerializationProperty(
+ XmlSerializer::ROOT_NAME,
+ Resources::XTAG_UPDATE_STORAGE_SERVICE_INPUT
+ );
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_PUT);
+ $context->setPath($this->_getStorageServicePath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+ $context->setBody($storageService->serialize($this->dataSerializer));
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+ $this->sendContext($context);
+ }
+
+ /**
+ * Lists the affinity groups associated with the specified subscription.
+ *
+ * @return ListAffinityGroupsResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460797.aspx
+ */
+ public function listAffinityGroups()
+ {
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($this->_getAffinityGroupPath());
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $response = $this->sendContext($context);
+ $serialized = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListAffinityGroupsResult::create($serialized);
+ }
+
+ /**
+ * Creates a new affinity group for the specified subscription.
+ *
+ * @param string $name The affinity group name.
+ * @param string $label The base-64 encoded name for the
+ * affinity group. The name can be up to 100 characters in length.
+ * @param string $location The data center location where the
+ * affinity group will be created. To list available locations, use the
+ * listLocations API.
+ * @param CreateAffinityGroupOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg715317.aspx
+ */
+ public function createAffinityGroup($name, $label, $location, $options = null)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($label, 'label');
+ Validate::notNullOrEmpty($label, 'label');
+ Validate::isString($location, 'location');
+ Validate::notNullOrEmpty($location, 'location');
+
+ if (is_null($options)) {
+ $options = new CreateAffinityGroupOptions();
+ }
+
+ $affinityGroup = new AffinityGroup();
+ $affinityGroup->setName($name);
+ $affinityGroup->setLabel($label);
+ $affinityGroup->setLocation($location);
+ $affinityGroup->setDescription($options->getDescription());
+ $affinityGroup->addSerializationProperty(
+ XmlSerializer::ROOT_NAME,
+ Resources::XTAG_CREATE_AFFINITY_GROUP
+ );
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getAffinityGroupPath());
+ $context->addStatusCode(Resources::STATUS_CREATED);
+ $context->setBody($affinityGroup->serialize($this->dataSerializer));
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ $this->sendContext($context);
+ }
+
+ /**
+ * Deletes an affinity group in the specified subscription.
+ *
+ * @param string $name The affinity group name.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg715314.aspx
+ */
+ public function deleteAffinityGroup($name)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_DELETE);
+ $context->setPath($this->_getAffinityGroupPath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $this->sendContext($context);
+ }
+
+ /**
+ * Updates the label and/or the description for an affinity group for the
+ * specified subscription.
+ *
+ * @param string $name The affinity group name.
+ * @param string $label The affinity group label.
+ * @param CreateAffinityGroupOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg715316.aspx
+ */
+ public function updateAffinityGroup($name, $label, $options = null)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($label, 'label');
+ Validate::notNullOrEmpty($label, 'label');
+
+ if (is_null($options)) {
+ $options = new CreateAffinityGroupOptions();
+ }
+
+ $affinityGroup = new AffinityGroup();
+ $affinityGroup->setLabel($label);
+ $affinityGroup->setDescription($options->getDescription());
+ $affinityGroup->addSerializationProperty(
+ XmlSerializer::ROOT_NAME,
+ Resources::XTAG_UPDATE_AFFINITY_GROUP
+ );
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_PUT);
+ $context->setPath($this->_getAffinityGroupPath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+ $context->setBody($affinityGroup->serialize($this->dataSerializer));
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ $this->sendContext($context);
+ }
+
+ /**
+ * Returns the system properties associated with the specified affinity group.
+ *
+ * @param string $name The affinity group name.
+ *
+ * @return GetAffinityGroupPropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460789.aspx
+ */
+ public function getAffinityGroupProperties($name)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($this->_getAffinityGroupPath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $response = $this->sendContext($context);
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetAffinityGroupPropertiesResult::create($parsed);
+ }
+
+ /**
+ * Lists all of the data center locations that are valid for your subscription.
+ *
+ * @return ListLocationsResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441293.aspx
+ */
+ public function listLocations()
+ {
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($this->_getLocationPath());
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $response = $this->sendContext($context);
+ $serialized = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListLocationsResult::create($serialized);
+ }
+
+ /**
+ * Returns the status of the specified operation. After calling an asynchronous
+ * operation, you can call Get Operation Status to determine whether the
+ * operation has succeeded, failed, or is still in progress.
+ *
+ * @param AsynchronousOperationResult $requestInfo The request information for
+ * the REST call you want to track.
+ *
+ * @return GetOperationStatusResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
+ */
+ public function getOperationStatus($requestInfo)
+ {
+ Validate::notNullOrEmpty($requestInfo, 'requestInfo');
+ Validate::notNullOrEmpty($requestInfo->getrequestId(), 'requestId');
+
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($this->_getOperationPath($requestInfo->getrequestId()));
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $response = $this->sendContext($context);
+ $serialized = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetOperationStatusResult::create($serialized);
+ }
+
+ /**
+ * Lists the hosted services available under the current subscription.
+ *
+ * @return ListHostedServicesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460781.aspx
+ */
+ public function listHostedServices()
+ {
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($this->_getHostedServicePath());
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $response = $this->sendContext($context);
+ $serialized = $this->dataSerializer->unserialize($response->getBody());
+
+ return ListHostedServicesResult::create($serialized);
+ }
+
+ /**
+ * Creates a new hosted service in Windows Azure.
+ *
+ * @param string $name The name for the hosted service
+ * that is unique within Windows Azure. This name is the DNS prefix name and can
+ * be used to access the hosted service.
+ * @param string $label The name for the hosted service
+ * that is base-64 encoded. The name can be used identify the storage account for
+ * your tracking purposes.
+ * @param CreateServiceOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441304.aspx
+ */
+ public function createHostedService($name, $label, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($label, 'label');
+ Validate::notNullOrEmpty($label, 'label');
+ Validate::notNullOrEmpty($options, 'options');
+
+ // User have to set affinity group or location.
+ $affinityGroup = $options->getAffinityGroup();
+ $location = $options->getLocation();
+ Validate::isTrue(
+ !empty($location) || !empty($affinityGroup),
+ Resources::INVALID_CREATE_SERVICE_OPTIONS_MSG
+ );
+
+ $hostedService = new HostedService();
+ $hostedService->setName($name);
+ $hostedService->setLabel($label);
+ $hostedService->setLocation($options->getLocation());
+ $hostedService->setAffinityGroup($options->getAffinityGroup());
+ $hostedService->setDescription($options->getDescription());
+ $hostedService->addSerializationProperty(
+ XmlSerializer::ROOT_NAME,
+ Resources::XTAG_CREATE_HOSTED_SERVICE
+ );
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getHostedServicePath());
+ $context->addStatusCode(Resources::STATUS_CREATED);
+ $context->setBody($hostedService->serialize($this->dataSerializer));
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ $this->sendContext($context);
+ }
+
+ /**
+ * updates the label and/or the description for a hosted service in Windows
+ * Azure.
+ *
+ * @param string $name The name for the hosted service that is
+ * unique within Windows Azure.
+ * @param UpdateServiceOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441303.aspx
+ */
+ public function updateHostedService($name, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::notNullOrEmpty($options, 'options');
+ $label = $options->getLabel();
+ $description = $options->getDescription();
+ Validate::isTrue(
+ !empty($label) || !empty($description),
+ Resources::INVALID_UPDATE_SERVICE_OPTIONS_MSG
+ );
+
+ $hostedService = new HostedService();
+ $hostedService->setLabel($options->getLabel());
+ $hostedService->setDescription($options->getDescription());
+ $hostedService->addSerializationProperty(
+ XmlSerializer::ROOT_NAME,
+ Resources::XTAG_UPDATE_HOSTED_SERVICE
+ );
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_PUT);
+ $context->setPath($this->_getHostedServicePath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+ $context->setBody($hostedService->serialize($this->dataSerializer));
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+ $this->sendContext($context);
+ }
+
+ /**
+ * Deletes the specified hosted service from Windows Azure.
+ *
+ * Before you can delete a hosted service, you must delete any deployments it
+ * has. Attempting to delete a hosted service that has deployments results in
+ * an error. You can call the deleteDeployment API to delete a hosted service's
+ * deployments.
+ *
+ * @param string $name The name for the hosted service.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441305.aspx
+ */
+ public function deleteHostedService($name)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_DELETE);
+ $context->setPath($this->_getHostedServicePath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $this->sendContext($context);
+ }
+
+ /**
+ * Retrieves system properties for the specified hosted service. These properties
+ * include the service name and service type; the name of the affinity group to
+ * which the service belongs, or its location if it is not part of an affinity
+ * group; and optionally, information on the service's deployments.
+ *
+ * @param string $name The name for the hosted
+ * service.
+ * @param GetHostedServicePropertiesOptions $options The optional parameters.
+ *
+ * @return GetHostedServicePropertiesResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460806.aspx
+ */
+ public function getHostedServiceProperties($name, $options = null)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+
+ if (is_null($options)) {
+ $options = new GetHostedServicePropertiesOptions();
+ }
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($this->_getHostedServicePath($name));
+ $context->addStatusCode(Resources::STATUS_OK);
+ $context->addQueryParameter(
+ Resources::QP_EMBED_DETAIL,
+ Utilities::booleanToString($options->getEmbedDetail())
+ );
+
+ $response = $this->sendContext($context);
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetHostedServicePropertiesResult::create($parsed);
+ }
+
+ /**
+ * Uploads a new service package and creates a new deployment on staging or
+ * production.
+ *
+ * The createDeployment API is an asynchronous operation. To determine whether
+ * the management service has finished processing the request, call
+ * getOperationStatus API.
+ *
+ * @param string $name The name for the hosted service
+ * that is unique within Windows Azure.
+ * @param string $deploymentName The name for the deployment.
+ * The deployment name must be unique among other deployments for the hosted
+ * service.
+ * @param string $slot The name of the deployment slot
+ * This can be "production" or "staging".
+ * @param string $packageUrl The URL that refers to the
+ * location of the service package in the Blob service. The service package can
+ * be located in a storage account beneath the same subscription.
+ * @param string|resource $configuration The configuration file contents
+ * or file stream.
+ * @param string $label The name for the hosted service
+ * that is base-64 encoded. The name can be up to 100 characters in length. It is
+ * recommended that the label be unique within the subscription. The name can be
+ * used identify the hosted service for your tracking purposes.
+ * @param CreateDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460813.aspx
+ */
+ public function createDeployment(
+ $name,
+ $deploymentName,
+ $slot,
+ $packageUrl,
+ $configuration,
+ $label,
+ $options = null
+ ) {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($deploymentName, 'deploymentName');
+ Validate::notNullOrEmpty($deploymentName, 'deploymentName');
+ Validate::isString($slot, 'slot');
+ Validate::notNullOrEmpty($slot, 'slot');
+ Validate::isTrue(
+ DeploymentSlot::isValid($slot),
+ sprintf(Resources::INVALID_SLOT, $slot)
+ );
+ Validate::isString($packageUrl, 'packageUrl');
+ Validate::notNullOrEmpty($packageUrl, 'packageUrl');
+ Validate::isString($configuration, 'configuration');
+ Validate::notNullOrEmpty($configuration, 'configuration');
+ Validate::isString($label, 'label');
+ Validate::notNullOrEmpty($label, 'label');
+
+ if (is_null($options)) {
+ $options = new CreateDeploymentOptions();
+ }
+
+ $configuration = $this->_encodeConfiguration($configuration);
+
+ $startDeployment = Utilities::booleanToString(
+ $options->getStartDeployment()
+ );
+ $treatWarningsAsErrors = Utilities::booleanToString(
+ $options->getTreatWarningsAsErrors()
+ );
+ $xmlElements = array(
+ Resources::XTAG_NAME => $deploymentName,
+ Resources::XTAG_PACKAGE_URL => $packageUrl,
+ Resources::XTAG_LABEL => $label,
+ Resources::XTAG_CONFIGURATION => $configuration,
+ Resources::XTAG_START_DEPLOYMENT => $startDeployment,
+ Resources::XTAG_TREAT_WARNINGS_AS_ERROR => $treatWarningsAsErrors
+ );
+ $requestXml = $this->_createRequestXml(
+ $xmlElements,
+ Resources::XTAG_CREATE_DEPLOYMENT
+ );
+
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getDeploymentPathUsingSlot($name, $slot));
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+ $context->setBody($requestXml);
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+
+ /**
+ * Returns configuration information, status, and system properties for a
+ * deployment.
+ *
+ * The getDeployment API can be used to retrieve information for a specific
+ * deployment or for all deployments in the staging or production environment.
+ * If you want to retrieve information about a specific deployment, you must
+ * first get the unique name for the deployment. This unique name is part of the
+ * response when you make a request to get all deployments in an environment.
+ *
+ * @param string $name The hosted service name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return GetDeploymentResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460804.aspx
+ */
+ public function getDeployment($name, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::notNullOrEmpty($options, 'options');
+
+ $context = new HttpCallContext();
+ $path = $this->_getDeploymentPath($name, $options);
+ $context->setMethod(Resources::HTTP_GET);
+ $context->setPath($path);
+ $context->addStatusCode(Resources::STATUS_OK);
+
+ $response = $this->sendContext($context);
+ $parsed = $this->dataSerializer->unserialize($response->getBody());
+
+ return GetDeploymentResult::create($parsed);
+ }
+
+ /**
+ * Initiates a virtual IP swap between the staging and production deployment
+ * environments for a service. If the service is currently running in the staging
+ * environment, it will be swapped to the production environment. If it is
+ * running in the production environment, it will be swapped to staging.
+ *
+ * You can swap VIPs only if the number of endpoints specified by the service
+ * definition is identical for both deployments. For example, if you add an HTTPS
+ * endpoint to a web role that previously exposed only an HTTP endpoint, you
+ * cannot upgrade your service using a VIP swap; you must delete your production
+ * deployment and redeploy instead. You can obtain information about endpoints
+ * that are used by using the Get Deployment operation.
+ *
+ * @param string $name The hosted service name.
+ * @param string $source The name of the source deployment.
+ * @param string $destination The name of the destination deployment.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460814.aspx
+ */
+ public function swapDeployment($name, $source, $destination)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($destination, 'destination');
+ Validate::notNullOrEmpty($destination, 'destination');
+ Validate::isString($source, 'source');
+ Validate::notNullOrEmpty($source, 'source');
+
+ $xmlElements = array(
+ Resources::XTAG_PRODUCTION => $destination,
+ Resources::XTAG_SOURCE_DEPLOYMENT => $source
+ );
+ $body = $this->_createRequestXml($xmlElements, Resources::XTAG_SWAP);
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getHostedServicePath($name));
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+ $context->setBody($body);
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+
+ /**
+ * Deletes the specified deployment.
+ *
+ * Note that you can delete a deployment either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460815.aspx
+ */
+ public function deleteDeployment($name, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::notNullOrEmpty($options, 'options');
+
+ $context = new HttpCallContext();
+ $path = $this->_getDeploymentPath($name, $options);
+ $context->setMethod(Resources::HTTP_DELETE);
+ $context->setPath($path);
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+
+ /**
+ * Initiates a change to the deployment configuration.
+ *
+ * Note that you can change a deployment's configuration either by specifying the
+ * deployment environment (staging or production), or by specifying the
+ * deployment's unique name.
+ *
+ * @param string $name The hosted service
+ * name.
+ * @param string|resource $configuration The configuration
+ * file contents or file stream.
+ * @param ChangeDeploymentConfigurationOptions $options The optional
+ * parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460809.aspx
+ */
+ public function changeDeploymentConfiguration($name, $configuration, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($configuration, 'configuration');
+ Validate::notNullOrEmpty($configuration, 'configuration');
+ Validate::notNullOrEmpty($options, 'options');
+
+ $configuration = $this->_encodeConfiguration($configuration);
+ $warningsTreatment = Utilities::booleanToString(
+ $options->getTreatWarningsAsErrors()
+ );
+ $xmlElements = array(
+ Resources::XTAG_CONFIGURATION => $configuration,
+ Resources::XTAG_TREAT_WARNINGS_AS_ERROR => $warningsTreatment,
+ Resources::XTAG_MODE => $options->getMode()
+ );
+ $body = $this->_createRequestXml(
+ $xmlElements,
+ Resources::XTAG_CHANGE_CONFIGURATION
+ );
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getDeploymentPath($name, $options) . '/');
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+ $context->addQueryParameter(
+ Resources::QP_COMP,
+ Resources::QPV_CONFIG
+ );
+ $context->setBody($body);
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ assert(Utilities::endsWith($context->getPath(), '/'));
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+
+ /**
+ * Initiates a change in deployment status.
+ *
+ * Note that you can change deployment status either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $status The change to initiate to the
+ * deployment status.
+ * Possible values include Running or Suspended.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460808.aspx
+ */
+ public function updateDeploymentStatus($name, $status, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isTrue(
+ DeploymentStatus::isValid($status),
+ Resources::INVALID_DEPLOYMENT_STATUS_MSG
+ );
+ Validate::notNullOrEmpty($options, 'options');
+
+ $body = $this->_createRequestXml(
+ array(Resources::XTAG_STATUS => $status),
+ Resources::XTAG_UPDATE_DEPLOYMENT_STATUS
+ );
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getDeploymentPath($name, $options) . '/');
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+ $context->addQueryParameter(
+ Resources::QP_COMP,
+ Resources::QPV_STATUS
+ );
+ $context->setBody($body);
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ assert(Utilities::endsWith($context->getPath(), '/'));
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+
+ /**
+ * Initiates an upgrade to a deployment.
+ *
+ * Note that you can upgrade a deployment either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $mode The type of upgrade to initiate
+ * If not specified the default value is Auto. If set to Manual,
+ * walkUpgradeDomain API must be called to apply the update. If set to Auto, the
+ * Windows Azure platform will automatically apply the update to each Upgrade
+ * Domain in sequence.
+ * @param string $packageUrl The URL that refers to the
+ * location of the service package in the Blob service. The service package can
+ * be located in a storage account beneath the same subscription.
+ * @param string|resource $configuration The configuration file contents
+ * or file stream.
+ * @param string $label The name for the hosted service
+ * that is base-64 encoded. The name may be up to 100 characters in length.
+ * @param boolean $force Specifies whether the rollback
+ * should proceed even when it will cause local data to be lost from some role
+ * instances. True if the rollback should proceed; otherwise false if the
+ * rollback should fail.
+ * @param UpgradeDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460793.aspx
+ */
+ public function upgradeDeployment(
+ $name,
+ $mode,
+ $packageUrl,
+ $configuration,
+ $label,
+ $force,
+ $options
+ ) {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($mode, 'mode');
+ Validate::isTrue(Mode::isValid($mode), Resources::INVALID_CHANGE_MODE_MSG);
+ Validate::isString($packageUrl, 'packageUrl');
+ Validate::notNullOrEmpty($packageUrl, 'packageUrl');
+ Validate::isString($configuration, 'configuration');
+ Validate::notNullOrEmpty($configuration, 'configuration');
+ Validate::isString($label, 'label');
+ Validate::notNullOrEmpty($label, 'label');
+ Validate::isBoolean($force, 'force');
+ Validate::notNullOrEmpty($force, 'force');
+ Validate::notNullOrEmpty($options, 'options');
+
+ $configuration = $this->_encodeConfiguration($configuration);
+
+ $xmlElements = array(
+ Resources::XTAG_MODE => $mode,
+ Resources::XTAG_PACKAGE_URL => $packageUrl,
+ Resources::XTAG_CONFIGURATION => $configuration,
+ Resources::XTAG_LABEL => $label,
+ Resources::XTAG_ROLE_TO_UPGRADE => $options->getRoleToUpgrade(),
+ Resources::XTAG_FORCE => Utilities::booleanToString($force),
+ );
+ $body = $this->_createRequestXml(
+ $xmlElements,
+ Resources::XTAG_UPGRADE_DEPLOYMENT
+ );
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getDeploymentPath($name, $options) . '/');
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+ $context->addQueryParameter(
+ Resources::QP_COMP,
+ Resources::QPV_UPGRADE
+ );
+ $context->setBody($body);
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ assert(Utilities::endsWith($context->getPath(), '/'));
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+
+ /**
+ * Specifies the next upgrade domain to be walked during manual in-place upgrade
+ * or configuration change.
+ *
+ * Note that you can walk an upgrade domain either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param integer $upgradeDomain The integer value that
+ * identifies the upgrade domain to walk. Upgrade domains are identified with a
+ * zero-based index: the first upgrade domain has an ID of 0, the second has an
+ * ID of 1, and so on.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/ee460800.aspx
+ */
+ public function walkUpgradeDomain($name, $upgradeDomain, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isInteger($upgradeDomain, 'upgradeDomain');
+ Validate::notNullOrEmpty($options, 'options');
+
+ $body = $this->_createRequestXml(
+ array(Resources::XTAG_UPGRADE_DOMAIN => $upgradeDomain),
+ Resources::XTAG_WALK_UPGRADE_DOMAIN
+ );
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getDeploymentPath($name, $options) . '/');
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+ $context->addQueryParameter(
+ Resources::QP_COMP,
+ Resources::QPV_WALK_UPGRADE_DOMAIN
+ );
+ $context->setBody($body);
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ assert(Utilities::endsWith($context->getPath(), '/'));
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+
+ /**
+ * Requests a reboot of a role instance that is running in a deployment.
+ *
+ * Note that you can reboot role instance either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $roleName The role instance name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441298.aspx
+ */
+ public function rebootRoleInstance($name, $roleName, $options)
+ {
+ return $this->_sendRoleInstanceOrder(
+ $name,
+ $roleName,
+ $options,
+ Resources::QPV_REBOOT
+ );
+ }
+
+ /**
+ * Requests a reimage of a role instance that is running in a deployment.
+ *
+ * Note that you can reimage role instance either by specifying the deployment
+ * environment (staging or production), or by specifying the deployment's unique
+ * name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $roleName The role instance name.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return AsynchronousOperationResult
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/gg441292.aspx
+ */
+ public function reimageRoleInstance($name, $roleName, $options)
+ {
+ return $this->_sendRoleInstanceOrder(
+ $name,
+ $roleName,
+ $options,
+ Resources::QPV_REIMAGE
+ );
+ }
+
+ /**
+ * Cancels an in progress configuration change (update) or upgrade and returns
+ * the deployment to its state before the upgrade or configuration change was
+ * started.
+ *
+ * Note that you can rollback update or upgrade either by specifying the
+ * deployment environment (staging or production), or by specifying the
+ * deployment's unique name.
+ *
+ * @param string $name The hosted service name.
+ * @param string $mode Specifies whether the rollback
+ * should proceed automatically or not. Auto, The rollback proceeds without
+ * further user input. Manual, You must call the walkUpgradeDomain API to apply
+ * the rollback to each upgrade domain.
+ * @param boolean $force Specifies whether the rollback
+ * should proceed even when it will cause local data to be lost from some role
+ * instances. True if the rollback should proceed; otherwise false if the
+ * rollback should fail.
+ * @param GetDeploymentOptions $options The optional parameters.
+ *
+ * @return none
+ *
+ * @see http://msdn.microsoft.com/en-us/library/windowsazure/hh403977.aspx
+ */
+ public function rollbackUpdateOrUpgrade($name, $mode, $force, $options)
+ {
+ Validate::isString($name, 'name');
+ Validate::notNullOrEmpty($name, 'name');
+ Validate::isString($mode, 'mode');
+ Validate::isTrue(Mode::isValid($mode), Resources::INVALID_CHANGE_MODE_MSG);
+ Validate::isBoolean($force, 'force');
+ Validate::notNullOrEmpty($force, 'force');
+ Validate::notNullOrEmpty($options, 'options');
+
+ $xmlElements = array(
+ Resources::XTAG_MODE => $mode,
+ Resources::XTAG_FORCE => Utilities::booleanToString($force),
+ );
+ $body = $this->_createRequestXml(
+ $xmlElements,
+ Resources::XTAG_ROLLBACK_UPDATE_OR_UPGRADE
+ );
+ $context = new HttpCallContext();
+ $context->setMethod(Resources::HTTP_POST);
+ $context->setPath($this->_getDeploymentPath($name, $options) . '/');
+ $context->addStatusCode(Resources::STATUS_ACCEPTED);
+ $context->addQueryParameter(
+ Resources::QP_COMP,
+ Resources::QPV_ROLLBACK
+ );
+ $context->setBody($body);
+ $context->addHeader(
+ Resources::CONTENT_TYPE,
+ Resources::XML_CONTENT_TYPE
+ );
+
+ assert(Utilities::endsWith($context->getPath(), '/'));
+ $response = $this->sendContext($context);
+
+ return AsynchronousOperationResult::create($response->getHeader());
+ }
+}
\ No newline at end of file
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/AcquireCurrentState.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/AcquireCurrentState.php
new file mode 100644
index 0000000..fd4d594
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/AcquireCurrentState.php
@@ -0,0 +1,101 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceRuntime\Internal;
+
+/**
+ * The acquire current state request.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceRuntime\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class AcquireCurrentState extends CurrentState
+{
+ /**
+ * @var string
+ */
+ private $_incarnation;
+
+ /**
+ * @var CurrentStatus
+ */
+ private $_status;
+
+ /**
+ * @var \DateTime
+ */
+ private $_expiration;
+
+ /**
+ * Constructor
+ *
+ * @param string $clientId The client identifier.
+ * @param string $incarnation The incarnation.
+ * @param string $status The status.
+ * @param \DateTime $expiration The expiration date.
+ */
+ public function __construct($clientId, $incarnation, $status, $expiration)
+ {
+ parent::__construct($clientId);
+ $this->_incarnation = $incarnation;
+ $this->_status = $status;
+ $this->_expiration = $expiration;
+ }
+
+ /**
+ * Gets the incarnation.
+ *
+ * @return string
+ */
+ public function getIncarnation()
+ {
+ return $this->_incarnation;
+ }
+
+ /**
+ * Gets the status.
+ *
+ * @return string
+ */
+ public function getStatus()
+ {
+ return $this->_status;
+ }
+
+ /**
+ * Gets the expiration.
+ *
+ * @return \DateTime
+ */
+ public function getExpiration()
+ {
+ return $this->_expiration;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/ChannelNotAvailableException.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/ChannelNotAvailableException.php
new file mode 100644
index 0000000..8e87a99
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/ChannelNotAvailableException.php
@@ -0,0 +1,41 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceRuntime\Internal;
+
+/**
+ * Custom exception when a role environment channel is not available.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceRuntime\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ChannelNotAvailableException extends \Exception
+{
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/ChunkedGoalStateDeserializer.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/ChunkedGoalStateDeserializer.php
new file mode 100644
index 0000000..4e9c10c
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/ChunkedGoalStateDeserializer.php
@@ -0,0 +1,91 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceRuntime\Internal;
+
+/**
+ * The goal state representation.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceRuntime\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class ChunkedGoalStateDeserializer implements IGoalStateDeserializer
+{
+ /**
+ * @var XmlGoalStateDeserializer
+ */
+ private $_deserializer;
+
+ /**
+ * @var resource
+ */
+ private $_inputStream;
+
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->_deserializer = new XmlGoalStateDeserializer();
+ }
+
+ /**
+ * Initializes the goal state deserializer with the input stream.
+ *
+ * @param Stream $inputStream The input stream.
+ *
+ * @return none
+ */
+ public function initialize($inputStream)
+ {
+ $this->_inputStream = $inputStream;
+ }
+
+ /**
+ * Deserializes a goal state document.
+ *
+ * @return none
+ */
+ public function deserialize()
+ {
+ do {
+ $lengthString = stream_get_line($this->_inputStream, 100, "\n");
+ } while (
+ empty($lengthString) || $lengthString == "\n" || $lengthString == "\r"
+ );
+
+ $intLengthString = hexdec(trim($lengthString));
+
+ $chunkData = stream_get_contents($this->_inputStream, $intLengthString);
+ $goalState = $this->_deserializer->deserialize($chunkData);
+
+ return $goalState;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/CurrentState.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/CurrentState.php
new file mode 100644
index 0000000..a09e19d
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/CurrentState.php
@@ -0,0 +1,65 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceRuntime\Internal;
+
+/**
+ * The current state representation.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceRuntime\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CurrentState
+{
+ /**
+ * @var string
+ */
+ private $_clientId;
+
+ /**
+ * Constructor
+ *
+ * @param string $clientId The client identifier.
+ */
+ public function __construct($clientId)
+ {
+ $this->_clientId = $clientId;
+ }
+
+ /**
+ * Gets the client identifier.
+ *
+ * @return string
+ */
+ public function getClientId()
+ {
+ return $this->_clientId;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/CurrentStatus.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/CurrentStatus.php
new file mode 100644
index 0000000..9e32418
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/CurrentStatus.php
@@ -0,0 +1,60 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceRuntime\Internal;
+
+/**
+ * The current status.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceRuntime\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class CurrentStatus
+{
+ /**
+ * @var string
+ */
+ const STARTED = 'Started';
+
+ /**
+ * @var string
+ */
+ const BUSY = 'Busy';
+
+ /**
+ * @var string
+ */
+ const RECYCLE = 'Recycle';
+
+ /**
+ * @var string
+ */
+ const STOPPED = 'Stopped';
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/FileInputChannel.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/FileInputChannel.php
new file mode 100644
index 0000000..9ea4c74
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/FileInputChannel.php
@@ -0,0 +1,79 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceRuntime\Internal;
+
+/**
+ * The file input channel.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceRuntime\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class FileInputChannel implements IInputChannel
+{
+ // @codingStandardsIgnoreStart
+
+ /**
+ * @var Resource
+ */
+ private $_inputStream;
+
+ /**
+ * Gets the input stream.
+ *
+ * @param string $name The input stream path.
+ *
+ * @return none
+ */
+ public function getInputStream($name)
+ {
+ $this->_inputStream = @fopen($name, 'r');
+ if ($this->_inputStream) {
+ return $this->_inputStream;
+ } else {
+ throw new ChannelNotAvailableException();
+ }
+ }
+
+ /**
+ * Closes the input stream.
+ *
+ * @return none
+ */
+ public function closeInputStream()
+ {
+ if (!is_null($this->_inputStream)) {
+ fclose($this->_inputStream);
+ $this->_inputStream = null;
+ }
+ }
+
+ // @codingStandardsIgnoreEnd
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/FileOutputChannel.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/FileOutputChannel.php
new file mode 100644
index 0000000..068fac4
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/FileOutputChannel.php
@@ -0,0 +1,61 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceRuntime\Internal;
+
+/**
+ * The file output channel.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceRuntime\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class FileOutputChannel implements IOutputChannel
+{
+ // @codingStandardsIgnoreStart
+
+ /**
+ * Gets the output stream.
+ *
+ * @param string $name The output channel path.
+ *
+ * @return none
+ */
+ public function getOutputStream($name)
+ {
+ $fp = @fopen($name, 'w');
+ if ($fp) {
+ return $fp;
+ } else {
+ throw new ChannelNotAvailableException();
+ }
+ }
+
+ // @codingStandardsIgnoreEnd
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/GoalState.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/GoalState.php
new file mode 100644
index 0000000..1a7c3e2
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/GoalState.php
@@ -0,0 +1,137 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceRuntime\Internal;
+use WindowsAzure\Common\Internal\Validate;
+
+/**
+ * The goal state representation.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceRuntime\Internal
+ * @author Azure PHP SDK
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @version Release: 0.4.0_2014-01
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+class GoalState
+{
+ /**
+ * @var string
+ */
+ private $_incarnation;
+
+ /**
+ * @var string
+ */
+ private $_expectedState;
+
+ /**
+ * @var string
+ */
+ private $_environmentPath;
+
+ /**
+ * @var string
+ */
+ private $_deadline;
+
+ /**
+ * @var string
+ */
+ private $_currentStateEndpoint;
+
+ /**
+ * Constructor
+ *
+ * @param string $incarnation The incarnation.
+ * @param string $expectedState The expected state.
+ * @param string $environmentPath The environment path.
+ * @param \DateTime $deadline The deadline.
+ * @param string $currentStateEndpoint The current state endpoint.
+ */
+ public function __construct ($incarnation, $expectedState, $environmentPath,
+ $deadline, $currentStateEndpoint
+ ) {
+ Validate::isDate($deadline);
+
+ $this->_incarnation = $incarnation;
+ $this->_expectedState = $expectedState;
+ $this->_environmentPath = $environmentPath;
+ $this->_deadline = $deadline;
+ $this->_currentStateEndpoint = $currentStateEndpoint;
+ }
+
+ /**
+ * Gets the incarnation.
+ *
+ * @return string
+ */
+ public function getIncarnation()
+ {
+ return $this->_incarnation;
+ }
+
+ /**
+ * Gets the expected state.
+ *
+ * @return string
+ */
+ public function getExpectedState()
+ {
+ return $this->_expectedState;
+ }
+
+ /**
+ * Gets the environment path.
+ *
+ * @return string
+ */
+ public function getEnvironmentPath()
+ {
+ return $this->_environmentPath;
+ }
+
+ /**
+ * Gets the deadline.
+ *
+ * @return string
+ */
+ public function getDeadline()
+ {
+ return $this->_deadline;
+ }
+
+ /**
+ * Gets the current state endpoint.
+ *
+ * @return string
+ */
+ public function getCurrentStateEndpoint()
+ {
+ return $this->_currentStateEndpoint;
+ }
+}
+
diff --git a/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/ICurrentStateSerializer.php b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/ICurrentStateSerializer.php
new file mode 100644
index 0000000..71e811b
--- /dev/null
+++ b/lib/ckfinder/core/connector/php/vendor/microsoft/windowsazure/WindowsAzure/ServiceRuntime/Internal/ICurrentStateSerializer.php
@@ -0,0 +1,50 @@
+
+ * @copyright 2012 Microsoft Corporation
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
+ * @link https://github.com/windowsazure/azure-sdk-for-php
+ */
+
+namespace WindowsAzure\ServiceRuntime\Internal;
+
+/**
+ * The current state serializer.
+ *
+ * @category Microsoft
+ * @package WindowsAzure\ServiceRuntime\Internal
+ * @author Azure PHP SDK