Plugin Directory

Changeset 2048552


Ignore:
Timestamp:
03/11/2019 07:20:04 PM (7 years ago)
Author:
dwayneparton
Message:

Bug fix on editor observer

Location:
gecko-grid-layout/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • gecko-grid-layout/trunk/dist/editor-styles.css

    r2048530 r2048552  
    270270  background-color: #f0f0f0;
    271271}
     272
     273/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZWRpdG9yLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLG1CQUFlO01BQWYsZUFBZTtBQUNqQjtBQUNBO0VBQ0Usa0JBQWtCO0VBQ2xCLGtCQUFrQjtFQUNsQixvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLDRCQUFzQjtFQUF0Qiw2QkFBc0I7TUFBdEIsMEJBQXNCO1VBQXRCLHNCQUFzQjtFQUN0QixrQkFBa0I7RUFDbEIsd0JBQXVCO01BQXZCLHFCQUF1QjtVQUF2Qix1QkFBdUI7RUFDdkIseUJBQW1CO01BQW5CLHNCQUFtQjtVQUFuQixtQkFBbUI7RUFDbkIsZUFBZTtFQUNmLDZCQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsbUJBQVk7TUFBWixvQkFBWTtVQUFaLFlBQVk7RUFDWix5QkFBeUI7RUFDekIsZUFBZTtBQUNqQjtBQUNBO0VBQ0UseUJBQXlCO0FBQzNCO0FBQ0E7RUFDRSx5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsK0NBQStDO0VBQy9DLGtEQUFrRDtFQUNsRCw2RUFBNkU7QUFDL0U7QUFDQTtFQUNFLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0FBQ2Y7QUFDQTtFQUNFLFdBQVc7QUFDYjtBQUNBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxZQUFZO0FBQ2Q7QUFDQTtFQUNFLFlBQVk7QUFDZDtBQUNBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxZQUFZO0VBQ1oseUJBQXlCO0VBQ3pCLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UsY0FBYztFQUNkLFdBQVc7RUFDWCxXQUFXO0VBQ1gsdUJBQXVCO0VBQ3ZCLGtCQUFrQjtFQUNsQixvQkFBb0I7QUFDdEI7QUFDQTtFQUNFLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLFVBQVU7RUFDVixZQUFZO0VBQ1osdUJBQXVCO0VBQ3ZCLGtCQUFrQjtFQUNsQixxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLFdBQVc7RUFDWCxZQUFZO0VBQ1osc0JBQXNCO0VBQ3RCLGtCQUFrQjtFQUNsQixvQkFBb0I7RUFDcEIscUJBQXFCO0FBQ3ZCO0FBQ0E7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsYUFBYTtFQUNiLG1EQUFtRDtFQUNuRCxjQUFjO0VBQ2Qsa0NBQWtDO0VBQ2xDLHFCQUFxQjtFQUNyQiw0QkFBNEI7RUFDNUIsU0FBUztBQUNYO0FBQ0E7RUFDRTtJQUNFLGtEQUFrRDtJQUNsRCw0Q0FBNEM7RUFDOUM7QUFDRjtBQUNBO0VBQ0U7SUFDRSxrREFBa0Q7SUFDbEQsNENBQTRDO0VBQzlDO0FBQ0Y7QUFDQTs7O0VBR0UseUJBQXlCO0VBQ3pCLDBCQUEwQjtFQUMxQix1QkFBdUI7RUFDdkIsb0JBQW9CO0VBQ3BCLFlBQVk7RUFDWixzQkFBc0I7RUFDdEIseUJBQXlCO0VBQ3pCLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0VBQ2IsNEJBQXNCO0VBQXRCLDZCQUFzQjtNQUF0QiwwQkFBc0I7VUFBdEIsc0JBQXNCO0VBQ3RCLG1CQUFPO01BQVAsV0FBTztVQUFQLE9BQU87RUFDUCw2QkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsWUFBWTtFQUNaLHNCQUFzQjtFQUN0QiwyQkFBMkI7RUFDM0IsaUNBQWlDO0VBQ2pDLHdDQUF3QztFQUN4Qyw0QkFBNEI7QUFDOUI7QUFDQTtFQUNFOzs7SUFHRSw0QkFBNEI7RUFDOUI7QUFDRjtBQUNBOzs7RUFHRSxnQkFBZ0I7QUFDbEI7QUFDQTtFQUNFLDZCQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsb0JBQWE7RUFBYixvQkFBYTtFQUFiLGFBQWE7RUFDYiw0QkFBc0I7RUFBdEIsNkJBQXNCO01BQXRCLDBCQUFzQjtVQUF0QixzQkFBc0I7RUFDdEIsbUJBQU87TUFBUCxXQUFPO1VBQVAsT0FBTztBQUNUO0FBQ0E7RUFDRSw2QkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLFlBQVk7QUFDZDtBQUNBO0VBQ0UsZ0JBQWdCO0VBQ2hCLG1CQUFtQjtBQUNyQjtBQUNBO0VBQ0UsY0FBYztFQUNkLGtCQUFrQjtFQUNsQixpQkFBaUI7RUFDakIsb0JBQW9CO0VBQ3BCLGVBQWU7RUFDZix5QkFBeUI7QUFDM0I7QUFDQTtFQUNFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLHdCQUF3QjtBQUMxQjs7QUFFQTs7O0VBR0Usb0JBQWE7RUFBYixvQkFBYTtFQUFiLGFBQWE7RUFDYiw0QkFBc0I7RUFBdEIsNkJBQXNCO01BQXRCLDBCQUFzQjtVQUF0QixzQkFBc0I7RUFDdEIsWUFBWTtFQUNaLFdBQVc7RUFDWCxTQUFTO0FBQ1g7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UscUJBQXFCO0FBQ3ZCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHFEQUFxRDtFQUNyRCxjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLHVCQUF1QjtFQUN2QixvQkFBb0I7RUFDcEIsYUFBYTtFQUNiLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIseUJBQXlCO0VBQ3pCLGVBQWU7RUFDZixrQkFBa0I7QUFDcEI7QUFDQTtFQUNFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQix5QkFBeUI7RUFDekIsWUFBWTtFQUNaLGFBQWE7RUFDYixxREFBcUQ7RUFDckQsYUFBYTtFQUNiLGtDQUFrQztFQUNsQyxxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLGNBQWM7RUFDZCx1QkFBdUI7RUFDdkIsb0JBQW9CO0VBQ3BCLHlCQUF5QjtBQUMzQixDIiwiZmlsZSI6ImVkaXRvci1zdHlsZXMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0X19pdGVtIHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgZmxleC1iYXNpczogOTBweDtcbiAgZmxleC1ncm93OiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtdHlwZS1zZWxlY3RfX2l0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGQUZBO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0X19pdGVtLS1zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XG59XG5cbi5nZWNrby10cmJsIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiByZXBlYXQoMywgbWlubWF4KDFweCwgMWZyKSk7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgxcHgsIDFmcikpO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInRsIHRsIHQgdCB0IHRyIHRyXCIgXCJsIGwgbCBjIHIgciByIFwiIFwiYmwgYmwgYiBiIGIgYnIgYnJcIjtcbn1cbi5nZWNrby10cmJsX19pbnB1dCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uZ2Vja28tdHJibF9faW5wdXQgaW5wdXQge1xuICB3aWR0aDogMTAwJTtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tdCB7XG4gIGdyaWQtYXJlYTogdDtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tciB7XG4gIGdyaWQtYXJlYTogcjtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tYiB7XG4gIGdyaWQtYXJlYTogYjtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tbCB7XG4gIGdyaWQtYXJlYTogbDtcbn1cbi5nZWNrby10cmJsX19sb2NrIHtcbiAgZ3JpZC1hcmVhOiBjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBkaW1ncmF5O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZ2Vja28tdHJibF9fbG9ja19feCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYyg1MCUgLSAxcHgpO1xufVxuLmdlY2tvLXRyYmxfX2xvY2tfX3gudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbi5nZWNrby10cmJsX19sb2NrX195IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAycHg7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogY2FsYyg1MCUgLSAxcHgpO1xufVxuLmdlY2tvLXRyYmxfX2xvY2tfX3kudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbi5nZWNrby10cmJsX19sb2NrX194eSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDVweCk7XG59XG4uZ2Vja28tdHJibF9fbG9ja19feHkudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cblxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQge1xuICBwYWRkaW5nOiAxcmVtO1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMiwgbWlubWF4KDFweCwgMWZyKSk7XG4gIGdyaWQtZ2FwOiAxcmVtO1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KDUwcHgsIGF1dG8pO1xuICBncmlkLWF1dG8tZmxvdzogZGVuc2U7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7XG4gIG1hcmdpbjogMDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA5NjBweCkge1xuICAud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMHB4LCAxZnIpICFpbXBvcnRhbnQ7XG4gICAgZ3JpZC1hdXRvLXJvd3M6IG1pbm1heCgxcHgsIGF1dG8pICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMHB4LCAxZnIpICFpbXBvcnRhbnQ7XG4gICAgZ3JpZC1hdXRvLXJvd3M6IG1pbm1heCgxcHgsIGF1dG8pICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWl0ZW1cIl0sXG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCA+IFtkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1iYXNpY1wiXSxcbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWltYWdlXCJdIHtcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiAxO1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgbWluLXdpZHRoOiAwO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAxO1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBwYWRkaW5nLXRvcDogMDtcbiAgcGFkZGluZy1ib3R0b206IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQgPiBbZGF0YS10eXBlPVwiZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbVwiXSxcbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWJhc2ljXCJdLFxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQgPiBbZGF0YS10eXBlPVwiZ2Vja28vZ3JpZC1sYXlvdXQtaW1hZ2VcIl0ge1xuICAgIGdyaWQtY29sdW1uOiAxLy0xICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWl0ZW1cIl0gLmVkaXRvci1tZWRpYS1wbGFjZWhvbGRlcixcbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWJhc2ljXCJdIC5lZGl0b3ItbWVkaWEtcGxhY2Vob2xkZXIsXG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCA+IFtkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1pbWFnZVwiXSAuZWRpdG9yLW1lZGlhLXBsYWNlaG9sZGVyIHtcbiAgbWluLWhlaWdodDogMTAwJTtcbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0IC5lZGl0b3ItYmxvY2stbGlzdF9fYmxvY2stZWRpdCB7XG4gIGZsZXgtYmFzaXM6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6IDE7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCAuZWRpdG9yLWJsb2NrLWxpc3RfX2Jsb2NrLWVkaXQgPiBbZGF0YS1ibG9ja10ge1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCA+IC5lZGl0b3ItYmxvY2stbGlzdF9fYmxvY2sgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2Jsb2NrLWVkaXQge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciAuYmxvY2stbGlzdC1hcHBlbmRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGdyaWQtY29sdW1uOiAxLy0xO1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciAuYmxvY2stbGlzdC1hcHBlbmRlcjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2YzZjM7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtYmFzaWMsXG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UsXG4uZ2Vja28tZ3JpZC1sYXlvdXQtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cblxuW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWltYWdlXCJdLmlzLXNlbGVjdGVkIC5jb21wb25lbnRzLXJlc2l6YWJsZS1ib3hfX2hhbmRsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uaXMtZHJhZ2dpbmctY29tcG9uZW50cy1kcmFnZ2FibGUgLmdlY2tvLWdyaWQtbGF5b3V0LWltYWdlLmlzLXN0eWxlLWhvdmVyIC5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIG9wYWNpdHk6IDEgIWltcG9ydGFudDtcbn1cblxuLmdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGVzIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMTIsIG1pbm1heCgxNXB4LCBhdXRvKSk7XG4gIGdyaWQtZ2FwOiAxcmVtO1xuICBncmlkLWF1dG8tcm93czogYXV0bztcbiAgZ3JpZC1hdXRvLWZsb3c6IGRlbnNlO1xufVxuLmdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuIDQ7XG4gIGdyaWQtcm93LWVuZDogc3BhbiAxO1xuICBwYWRkaW5nOiAxcmVtO1xuICBmb250LXNpemU6IDFyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtc2VsZWN0X190ZW1wbGF0ZTpob3ZlciB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNmMGYwZjA7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1wcmV2aWV3IHtcbiAgbWluLWhlaWdodDogMTAwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIHBhZGRpbmc6IDNweDtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMTIsIG1pbm1heCgxNXB4LCBhdXRvKSk7XG4gIGdyaWQtZ2FwOiAzcHg7XG4gIGdyaWQtYXV0by1yb3dzOiBtaW5tYXgoMTVweCwgYXV0byk7XG4gIGdyaWQtYXV0by1mbG93OiBkZW5zZTtcbn1cbi5nZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1wcmV2aWV3X19pdGVtIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbn0iXSwic291cmNlUm9vdCI6IiJ9*/
  • gecko-grid-layout/trunk/dist/editor.bundle.js

    r2048530 r2048552  
    1 !function(n){var r={};function a(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.m=n,a.c=r,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)a.d(n,r,function(e){return t[e]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/wp-content/plugins/gecko-grid-layout/dist/",a(a.s=35)}([function(e,t){e.exports=React},function(e,t){e.exports=window.wp.components},function(e,t){e.exports=window.wp.i18n},function(e,t){e.exports=window.wp.editor},function(e,t){e.exports=window.wp.blocks},function(e,t){e.exports=window.wp.element},function(e,t){e.exports=window.wp.data},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}},function(e,t,n){var r=n(21),a=n(12);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?a(e):t}},function(t,e){function n(e){return t.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(e)}t.exports=n},function(e,t,n){var r=n(22);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var r=n(24),a="object"==typeof self&&self&&self.Object===Object&&self,o=r||a||Function("return this")();e.exports=o},function(e,t,n){var r=n(14).Symbol;e.exports=r},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t){e.exports=window.wp.hooks},function(U,G,q){var D;!function(f){var g=/^\s+/,d=/\s+$/,r=0,i=f.round,h=f.min,m=f.max,e=f.random;function u(e,t){if(t=t||{},(e=e||"")instanceof u)return e;if(!(this instanceof u))return new u(e,t);var n=function(e){var t={r:0,g:0,b:0},n=1,r=null,a=null,o=null,i=!1,l=!1;"string"==typeof e&&(e=function(e){e=e.replace(g,"").replace(d,"").toLowerCase();var t,n=!1;if(O[e])e=O[e],n=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};if(t=F.rgb.exec(e))return{r:t[1],g:t[2],b:t[3]};if(t=F.rgba.exec(e))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=F.hsl.exec(e))return{h:t[1],s:t[2],l:t[3]};if(t=F.hsla.exec(e))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=F.hsv.exec(e))return{h:t[1],s:t[2],v:t[3]};if(t=F.hsva.exec(e))return{h:t[1],s:t[2],v:t[3],a:t[4]};if(t=F.hex8.exec(e))return{r:L(t[1]),g:L(t[2]),b:L(t[3]),a:I(t[4]),format:n?"name":"hex8"};if(t=F.hex6.exec(e))return{r:L(t[1]),g:L(t[2]),b:L(t[3]),format:n?"name":"hex"};if(t=F.hex4.exec(e))return{r:L(t[1]+""+t[1]),g:L(t[2]+""+t[2]),b:L(t[3]+""+t[3]),a:I(t[4]+""+t[4]),format:n?"name":"hex8"};if(t=F.hex3.exec(e))return{r:L(t[1]+""+t[1]),g:L(t[2]+""+t[2]),b:L(t[3]+""+t[3]),format:n?"name":"hex"};return!1}(e));"object"==typeof e&&(z(e.r)&&z(e.g)&&z(e.b)?(c=e.r,s=e.g,u=e.b,t={r:255*A(c,255),g:255*A(s,255),b:255*A(u,255)},i=!0,l="%"===String(e.r).substr(-1)?"prgb":"rgb"):z(e.h)&&z(e.s)&&z(e.v)?(r=R(e.s),a=R(e.v),t=function(e,t,n){e=6*A(e,360),t=A(t,100),n=A(n,100);var r=f.floor(e),a=e-r,o=n*(1-t),i=n*(1-a*t),l=n*(1-(1-a)*t),c=r%6;return{r:255*[n,i,o,o,l,n][c],g:255*[l,n,n,i,o,o][c],b:255*[o,o,l,n,n,i][c]}}(e.h,r,a),i=!0,l="hsv"):z(e.h)&&z(e.s)&&z(e.l)&&(r=R(e.s),o=R(e.l),t=function(e,t,n){var r,a,o;function i(e,t,n){return n<0&&(n+=1),1<n&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}if(e=A(e,360),t=A(t,100),n=A(n,100),0===t)r=a=o=n;else{var l=n<.5?n*(1+t):n+t-n*t,c=2*n-l;r=i(c,l,e+1/3),a=i(c,l,e),o=i(c,l,e-1/3)}return{r:255*r,g:255*a,b:255*o}}(e.h,r,o),i=!0,l="hsl"),e.hasOwnProperty("a")&&(n=e.a));var c,s,u;return n=C(n),{ok:i,format:e.format||l,r:h(255,m(t.r,0)),g:h(255,m(t.g,0)),b:h(255,m(t.b,0)),a:n}}(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=i(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=i(this._r)),this._g<1&&(this._g=i(this._g)),this._b<1&&(this._b=i(this._b)),this._ok=n.ok,this._tc_id=r++}function a(e,t,n){e=A(e,255),t=A(t,255),n=A(n,255);var r,a,o=m(e,t,n),i=h(e,t,n),l=(o+i)/2;if(o==i)r=a=0;else{var c=o-i;switch(a=.5<l?c/(2-o-i):c/(o+i),o){case e:r=(t-n)/c+(t<n?6:0);break;case t:r=(n-e)/c+2;break;case n:r=(e-t)/c+4}r/=6}return{h:r,s:a,l:l}}function o(e,t,n){e=A(e,255),t=A(t,255),n=A(n,255);var r,a,o=m(e,t,n),i=h(e,t,n),l=o,c=o-i;if(a=0===o?0:c/o,o==i)r=0;else{switch(o){case e:r=(t-n)/c+(t<n?6:0);break;case t:r=(n-e)/c+2;break;case n:r=(e-t)/c+4}r/=6}return{h:r,s:a,v:l}}function t(e,t,n,r){var a=[M(i(e).toString(16)),M(i(t).toString(16)),M(i(n).toString(16))];return r&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function l(e,t,n,r){return[M(H(r)),M(i(e).toString(16)),M(i(t).toString(16)),M(i(n).toString(16))].join("")}function n(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.s-=t/100,n.s=B(n.s),u(n)}function c(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.s+=t/100,n.s=B(n.s),u(n)}function s(e){return u(e).desaturate(100)}function b(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.l+=t/100,n.l=B(n.l),u(n)}function p(e,t){t=0===t?0:t||10;var n=u(e).toRgb();return n.r=m(0,h(255,n.r-i(-t/100*255))),n.g=m(0,h(255,n.g-i(-t/100*255))),n.b=m(0,h(255,n.b-i(-t/100*255))),u(n)}function y(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.l-=t/100,n.l=B(n.l),u(n)}function v(e,t){var n=u(e).toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,u(n)}function _(e){var t=u(e).toHsl();return t.h=(t.h+180)%360,u(t)}function k(e){var t=u(e).toHsl(),n=t.h;return[u(e),u({h:(n+120)%360,s:t.s,l:t.l}),u({h:(n+240)%360,s:t.s,l:t.l})]}function w(e){var t=u(e).toHsl(),n=t.h;return[u(e),u({h:(n+90)%360,s:t.s,l:t.l}),u({h:(n+180)%360,s:t.s,l:t.l}),u({h:(n+270)%360,s:t.s,l:t.l})]}function x(e){var t=u(e).toHsl(),n=t.h;return[u(e),u({h:(n+72)%360,s:t.s,l:t.l}),u({h:(n+216)%360,s:t.s,l:t.l})]}function E(e,t,n){t=t||6,n=n||30;var r=u(e).toHsl(),a=360/n,o=[u(e)];for(r.h=(r.h-(a*t>>1)+720)%360;--t;)r.h=(r.h+a)%360,o.push(u(r));return o}function S(e,t){t=t||6;for(var n=u(e).toHsv(),r=n.h,a=n.s,o=n.v,i=[],l=1/t;t--;)i.push(u({h:r,s:a,v:o})),o=(o+l)%1;return i}u.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,n,r=this.toRgb();return e=r.r/255,t=r.g/255,n=r.b/255,.2126*(e<=.03928?e/12.92:f.pow((e+.055)/1.055,2.4))+.7152*(t<=.03928?t/12.92:f.pow((t+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:f.pow((n+.055)/1.055,2.4))},setAlpha:function(e){return this._a=C(e),this._roundA=i(100*this._a)/100,this},toHsv:function(){var e=o(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=o(this._r,this._g,this._b),t=i(360*e.h),n=i(100*e.s),r=i(100*e.v);return 1==this._a?"hsv("+t+", "+n+"%, "+r+"%)":"hsva("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var e=a(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=a(this._r,this._g,this._b),t=i(360*e.h),n=i(100*e.s),r=i(100*e.l);return 1==this._a?"hsl("+t+", "+n+"%, "+r+"%)":"hsla("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHex:function(e){return t(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return function(e,t,n,r,a){var o=[M(i(e).toString(16)),M(i(t).toString(16)),M(i(n).toString(16)),M(H(r))];if(a&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join("")}(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:i(this._r),g:i(this._g),b:i(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+i(this._r)+", "+i(this._g)+", "+i(this._b)+")":"rgba("+i(this._r)+", "+i(this._g)+", "+i(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:i(100*A(this._r,255))+"%",g:i(100*A(this._g,255))+"%",b:i(100*A(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+i(100*A(this._r,255))+"%, "+i(100*A(this._g,255))+"%, "+i(100*A(this._b,255))+"%)":"rgba("+i(100*A(this._r,255))+"%, "+i(100*A(this._g,255))+"%, "+i(100*A(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(j[t(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+l(this._r,this._g,this._b,this._a),n=t,r=this._gradientType?"GradientType = 1, ":"";if(e){var a=u(e);n="#"+l(a._r,a._g,a._b,a._a)}return"progid:DXImageTransform.Microsoft.gradient("+r+"startColorstr="+t+",endColorstr="+n+")"},toString:function(e){var t=!!e;e=e||this._format;var n=!1,r=this._a<1&&0<=this._a;return t||!r||"hex"!==e&&"hex6"!==e&&"hex3"!==e&&"hex4"!==e&&"hex8"!==e&&"name"!==e?("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString()):"name"===e&&0===this._a?this.toName():this.toRgbString()},clone:function(){return u(this.toString())},_applyModification:function(e,t){var n=e.apply(null,[this].concat([].slice.call(t)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(p,arguments)},darken:function(){return this._applyModification(y,arguments)},desaturate:function(){return this._applyModification(n,arguments)},saturate:function(){return this._applyModification(c,arguments)},greyscale:function(){return this._applyModification(s,arguments)},spin:function(){return this._applyModification(v,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(E,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(S,arguments)},splitcomplement:function(){return this._applyCombination(x,arguments)},triad:function(){return this._applyCombination(k,arguments)},tetrad:function(){return this._applyCombination(w,arguments)}},u.fromRatio=function(e,t){if("object"==typeof e){var n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]="a"===r?e[r]:R(e[r]));e=n}return u(e,t)},u.equals=function(e,t){return!(!e||!t)&&u(e).toRgbString()==u(t).toRgbString()},u.random=function(){return u.fromRatio({r:e(),g:e(),b:e()})},u.mix=function(e,t,n){n=0===n?0:n||50;var r=u(e).toRgb(),a=u(t).toRgb(),o=n/100;return u({r:(a.r-r.r)*o+r.r,g:(a.g-r.g)*o+r.g,b:(a.b-r.b)*o+r.b,a:(a.a-r.a)*o+r.a})},u.readability=function(e,t){var n=u(e),r=u(t);return(f.max(n.getLuminance(),r.getLuminance())+.05)/(f.min(n.getLuminance(),r.getLuminance())+.05)},u.isReadable=function(e,t,n){var r,a,o=u.readability(e,t);switch(a=!1,(r=function(e){var t,n;t=((e=e||{level:"AA",size:"small"}).level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA");"small"!==n&&"large"!==n&&(n="small");return{level:t,size:n}}(n)).level+r.size){case"AAsmall":case"AAAlarge":a=4.5<=o;break;case"AAlarge":a=3<=o;break;case"AAAsmall":a=7<=o}return a},u.mostReadable=function(e,t,n){var r,a,o,i,l=null,c=0;a=(n=n||{}).includeFallbackColors,o=n.level,i=n.size;for(var s=0;s<t.length;s++)c<(r=u.readability(e,t[s]))&&(c=r,l=u(t[s]));return u.isReadable(e,l,{level:o,size:i})||!a?l:(n.includeFallbackColors=!1,u.mostReadable(e,["#fff","#000"],n))};var O=u.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},j=u.hexNames=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}(O);function C(e){return e=parseFloat(e),(isNaN(e)||e<0||1<e)&&(e=1),e}function A(e,t){var n;"string"==typeof(n=e)&&-1!=n.indexOf(".")&&1===parseFloat(n)&&(e="100%");var r,a="string"==typeof(r=e)&&-1!=r.indexOf("%");return e=h(t,m(0,parseFloat(e))),a&&(e=parseInt(e*t,10)/100),f.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function B(e){return h(1,m(0,e))}function L(e){return parseInt(e,16)}function M(e){return 1==e.length?"0"+e:""+e}function R(e){return e<=1&&(e=100*e+"%"),e}function H(e){return f.round(255*parseFloat(e)).toString(16)}function I(e){return L(e)/255}var N,P,T,F=(P="[\\s|\\(]+("+(N="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+N+")[,|\\s]+("+N+")\\s*\\)?",T="[\\s|\\(]+("+N+")[,|\\s]+("+N+")[,|\\s]+("+N+")[,|\\s]+("+N+")\\s*\\)?",{CSS_UNIT:new RegExp(N),rgb:new RegExp("rgb"+P),rgba:new RegExp("rgba"+T),hsl:new RegExp("hsl"+P),hsla:new RegExp("hsla"+T),hsv:new RegExp("hsv"+P),hsva:new RegExp("hsva"+T),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function z(e){return!!F.CSS_UNIT.exec(e)}U.exports?U.exports=u:void 0===(D=function(){return u}.call(G,q,G,U))||(U.exports=D)}(Math)},function(e,t){e.exports=window.wp.deprecated},function(e,t,n){var y=n(13),v=n(23),_=n(26),k=Math.max,w=Math.min;e.exports=function(r,a,e){var o,i,l,c,s,u,f=0,g=!1,d=!1,t=!0;if("function"!=typeof r)throw new TypeError("Expected a function");function h(e){var t=o,n=i;return o=i=void 0,f=e,c=r.apply(n,t)}function m(e){var t=e-u;return void 0===u||a<=t||t<0||d&&l<=e-f}function b(){var e,t,n=v();if(m(n))return p(n);s=setTimeout(b,(t=a-((e=n)-u),d?w(t,l-(e-f)):t))}function p(e){return s=void 0,t&&o?h(e):(o=i=void 0,c)}function n(){var e,t=v(),n=m(t);if(o=arguments,i=this,u=t,n){if(void 0===s)return f=e=u,s=setTimeout(b,a),g?h(e):c;if(d)return s=setTimeout(b,a),h(u)}return void 0===s&&(s=setTimeout(b,a)),c}return a=_(a)||0,y(e)&&(g=!!e.leading,l=(d="maxWait"in e)?k(_(e.maxWait)||0,a):l,t="trailing"in e?!!e.trailing:t),n.cancel=function(){void 0!==s&&clearTimeout(s),o=u=i=s=void(f=0)},n.flush=function(){return void 0===s?c:p(v())},n}},function(t,e){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?t.exports=r=function(e){return n(e)}:t.exports=r=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":n(e)},r(e)}t.exports=r},function(n,e){function r(e,t){return n.exports=r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}n.exports=r},function(e,t,n){var r=n(14);e.exports=function(){return r.Date.now()}},function(n,e,t){(function(e){var t="object"==typeof e&&e&&e.Object===Object&&e;n.exports=t}).call(this,t(25))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var r=n(13),a=n(27),o=/^\s+|\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,c=/^0o[0-7]+$/i,s=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=l.test(e);return n||c.test(e)?s(e.slice(2),n?2:8):i.test(e)?NaN:+e}},function(e,t,n){var r=n(28),a=n(31);e.exports=function(e){return"symbol"==typeof e||a(e)&&"[object Symbol]"==r(e)}},function(e,t,n){var r=n(15),a=n(29),o=n(30),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?a(e):o(e)}},function(e,t,n){var r=n(15),a=Object.prototype,o=a.hasOwnProperty,i=a.toString,l=r?r.toStringTag:void 0;e.exports=function(e){var t=o.call(e,l),n=e[l];try{var r=!(e[l]=void 0)}catch(e){}var a=i.call(e);return r&&(t?e[l]=n:delete e[l]),a}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},,,,function(e,t,n){"use strict";n.r(t);var u=n(4),b=n(5),r=n(0),p=n.n(r),y=n(2),v=n(1),_=n(3),k=n(6),a=n(7),o=n.n(a),i=n(8),l=n.n(i),c=n(9),s=n.n(c),f=n(10),g=n.n(f),d=n(12),h=n.n(d),m=n(11),w=n.n(m),x=n(16),E=n.n(x),S=n(17);var O=function(e){function t(){return o()(this,t),s()(this,g()(t).apply(this,arguments))}return w()(t,e),l()(t,[{key:"render",value:function(){var e=this.props.layout;return p.a.createElement("div",{className:"gecko-grid-layout-template-preview"},e.map(function(e,t){var n={gridColumnEnd:"span "+e[1].w,gridRowEnd:"span "+e[1].h};return p.a.createElement("div",{key:t,className:"gecko-grid-layout-template-preview__item",style:n})}))}}]),t}(p.a.PureComponent),j=function(e){function n(e){var t;return o()(this,n),t=s()(this,g()(n).call(this,e)),E()(h()(t),"setTemplate",function(e){t.setState({selected:e})}),t.state={selected:null},t}return w()(n,e),l()(n,[{key:"render",value:function(){var e,n=this,t=this.props,r=t.hasInnnerBlocks,a=t.allowedBlocks,o=this.state.selected,i=[["gecko/grid-layout-basic",{w:6}]];return r||o?p.a.createElement(_.InnerBlocks,{template:o,templateLock:!1,allowedBlocks:a}):p.a.createElement("div",{className:"gecko-grid-layout-template-select"},p.a.createElement("h2",null,Object(y.__)("Choose a Template")),p.a.createElement("p",null,Object(y.__)("This is a starting point. Templates make it easy to choose a layout. Blocks can be changed once they are selected.")),p.a.createElement("div",{className:"gecko-grid-layout-template-select__templates"},(e=[{label:Object(y.__)("2 Columns"),layout:[["gecko/grid-layout-basic",{w:6}],["gecko/grid-layout-basic",{w:6}]]},{label:Object(y.__)("3 Columns"),layout:[["gecko/grid-layout-basic",{w:4}],["gecko/grid-layout-basic",{w:4}],["gecko/grid-layout-basic",{w:4}]]}],Object(S.applyFilters)("gecko.grid-layout.templates",e)).map(function(e,t){return p.a.createElement("div",{key:t,className:"gecko-grid-layout-template-select__template",onClick:function(){return n.setTemplate(e.layout)}},p.a.createElement(O,{layout:e.layout}),p.a.createElement("p",null,e.label))}),p.a.createElement("div",{className:"gecko-grid-layout-template-select__template",onClick:function(){return n.setTemplate(i)}},p.a.createElement(O,{layout:i}),p.a.createElement("p",null,Object(y.__)("Create New")))))}}]),n}(p.a.Component),C=["gecko/grid-layout-item","gecko/grid-layout-image","gecko/grid-layout-basic"],A={title:Object(y.__)("Grid"),icon:p.a.createElement(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},p.a.createElement(v.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),p.a.createElement(v.G,null,p.a.createElement(v.Path,{d:"M4,13 L8,13 L8,10 L4,10 L4,13 Z M4,15 L4,18 L8,18 L8,15 L4,15 Z M10,13 L14,13 L14,10 L10,10 L10,13 Z M10,15 L10,18 L14,18 L14,15 L10,15 Z M20,13 L20,10 L16,10 L16,13 L20,13 Z M20,15 L16,15 L16,18 L20,18 L20,15 Z M4,8 L8,8 L8,5 L4,5 L4,8 Z M10,8 L14,8 L14,5 L10,5 L10,8 Z M20,8 L20,5 L16,5 L16,8 L20,8 Z M4,3 L20,3 C21.1045695,3 22,3.95139491 22,5.125 L22,17.875 C22,19.0486051 21.1045695,20 20,20 L4,20 C2.8954305,20 2,19.0486051 2,17.875 L2,5.125 C2,3.95139491 2.8954305,3 4,3 Z"}))),category:"layout",description:Object(y.__)("Use CSS Grid to build layouts and, then add whatever content blocks you’d like."),supports:{align:["wide","full"],html:!1},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],transforms:{from:[{type:"block",blocks:["core/columns"],transform:function(e){var t=Object(k.select)("core/editor").getSelectedBlock().innerBlocks,n=t.length,r=Math.floor(12/n),a=[];return t.map(function(e){var t=Object(u.createBlock)("gecko/grid-layout-basic",{w:r},e.innerBlocks);a.push(t)}),Object(u.createBlock)("gecko/grid-layout",{},a)}}]},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0},{name:"no-gap",label:Object(y.__)("No Gap")}],edit:function(e){var t=e.insertBlocksAfter,n=e.clientId,r=Object(k.select)("core/editor").getBlocksByClientId(n)[0],a=!(!r||!r.innerBlocks)&&0<r.innerBlocks.length;return p.a.createElement(b.Fragment,null,p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor"},"function"==typeof t?p.a.createElement(j,{hasInnnerBlocks:a,allowedBlocks:C}):p.a.createElement("p",null,Object(y.__)("Preview Not Available"))))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},B=n(18),L=n.n(B),M=n(19),R=n.n(M),H={title:Object(y.__)("Item (deprecated)"),parent:["gecko/grid-layout"],icon:p.a.createElement(v.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},p.a.createElement(v.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),p.a.createElement(v.Path,{d:"M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16zm0-11.47L17.74 9 12 13.47 6.26 9 12 4.53z"})),description:Object(y.__)("This block is deprecated. Please use basic or image block instead."),category:"common",supports:{inserter:!1},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0},{name:"hover",label:Object(y.__)("Hover")}],attributes:{type:{type:"string",default:void 0},h:{type:"number",default:1},w:{type:"number"},minHeight:{type:"number",default:200},opacity:{type:"number",default:1},bgMedia:{type:"number"},bgMediaUrl:{type:"string"},bgColor:{type:"string"},bgColorSlug:{type:"string"},bgColorBrightness:{type:"number"}},deprecated:[{migrate:function(e,t){var n=e.h,r=e.w,a=e.bgMedia,o=e.bgMediaUrl,i=e.minHeight;return a?Object(u.createBlock)("gecko/grid-layout-image",{h:n,w:r,imgId:a,imgUrl:o,minHeight:i},t):Object(u.createBlock)("gecko/grid-layout-basic",{h:n,w:r},t)},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],edit:function(e){var t=e.attributes,a=e.setAttributes,n=(e.className,e.insertBlocksAfter),r=t.opacity,o=t.h,i=t.w,l=t.type,c=(t.padding,t.bgMedia),s=t.bgMediaUrl,u=t.bgColor,f=t.bgColorBrightness,g=t.bgColorSlug,d=t.minHeight;R()("Grid Layout Idem",{alternative:"Basic or Image",plugin:"Gecko Grid Layout"});var h={"--background":u,"--opacity":r,gridColumnEnd:"span "+i,gridRowEnd:"span "+o,backgroundColor:u,backgroundImage:"url("+s+")",minHeight:d+"px"},m="light";return f<130&&(m="dark"),p.a.createElement(b.Fragment,null,p.a.createElement(_.InspectorControls,null,p.a.createElement(v.PanelBody,{title:"Settings"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:i,onChange:function(e){a({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:o,onChange:function(e){a({h:e})},min:1,max:12})),p.a.createElement(v.PanelBody,{title:"Style"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Minimum Height"),value:d,onChange:function(e){a({minHeight:e})},min:"50",max:"600",step:"1"}),"solid"!==l&&p.a.createElement(_.MediaUpload,{onSelect:function(e){a({bgMedia:e.id,bgMediaUrl:e.url})},type:["image","video"],value:c||null,render:function(e){var t=e.open;return p.a.createElement("div",null,s&&p.a.createElement("img",{src:s,onClick:t,width:"100%",height:"auto",style:{cursor:"pointer"}}),!s&&p.a.createElement("div",{className:"button button-large",onClick:t},"Choose Background"))}}),p.a.createElement("hr",null),p.a.createElement("div",null,p.a.createElement(_.ColorPalette,{label:"Background Color",value:u?u.color:void 0,onChange:function(e){var t=Object(k.select)("core/editor").getEditorSettings(),n=e?Object(_.getColorObjectByColorValue)(t.colors,e).slug:void 0;a({bgColorSlug:n});var r=e?L()(e).getBrightness():void 0;a({bgColorBrightness:r}),a({bgColor:e})}}),p.a.createElement("hr",null)))),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:h}),p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor__wrap".concat(l," ").concat(t.className," has-").concat(g,"-background-color is-").concat(m,"-background")},("image"===l||"image-content"===l)&&!c&&p.a.createElement(_.MediaPlaceholder,{onSelect:function(e){a({bgMedia:e.id,bgMediaUrl:e.url})},allowedTypes:["image"],accept:"image/*"}),"function"==typeof n&&p.a.createElement(_.InnerBlocks,{templateLock:!1})))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},I=n(20),N=n.n(I),P=["core/paragraph","core/heading","core/button","core/list","core/quote"],T={title:Object(y.__)("Image"),parent:["gecko/grid-layout"],icon:p.a.createElement(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},p.a.createElement(v.Path,{d:"M0,0h24v24H0V0z",fill:"none"}),p.a.createElement(v.Path,{d:"m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z"}),p.a.createElement(v.Path,{d:"m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z"})),description:Object(y.__)("An image Grid Block."),category:"common",supports:{className:!0,inserter:!0,reusable:!1,html:!1},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0},{name:"hover",label:Object(y.__)("Hover")},{name:"no-caption",label:Object(y.__)("No Caption")}],attributes:{h:{type:"number",default:1},w:{type:"number",default:1},minHeight:{type:"number",default:200},imgId:{type:"number"},imgUrl:{type:"string"}},transforms:{from:[{type:"block",blocks:["gecko/grid-layout-basic","gecko/grid-layout-item"],transform:function(e,t){var n=Object(k.select)("core/editor").getSelectedBlock(),r=e.h,a=e.w,o=e.bgMedia,i=e.bgMediaUrl,l=e.mediaId,c=e.mediaUrl,s=e.minHeight;return Object(u.createBlock)("gecko/grid-layout-image",{h:r,w:a,imgId:o||l,imgUrl:i||c,minHeight:s},n.innerBlocks)}}]},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],edit:function(e){var t=e.attributes,c=e.setAttributes,n=(e.className,e.insertBlocksAfter),o=e.toggleSelection,r=t.h,s=t.w,a=t.imgId,i=t.imgUrl,l=t.minHeight,u={gridColumnEnd:"span "+s,gridRowEnd:"span "+r,minHeight:l+"px"};return p.a.createElement(b.Fragment,null,p.a.createElement(_.InspectorControls,null,p.a.createElement(v.PanelBody,{title:"Grid Item"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Minimum Height"),value:l,onChange:function(e){c({minHeight:e})},min:"50",max:"600",step:"1"}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:s,onChange:function(e){c({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:r,onChange:function(e){c({h:e})},min:1,max:12}))),p.a.createElement(_.BlockControls,null,p.a.createElement(v.Toolbar,null,p.a.createElement(_.MediaUpload,{onSelect:function(e){c({imgId:e.id,imgUrl:e.url})},type:["image"],value:a||null,render:function(e){var t=e.open;return p.a.createElement(v.IconButton,{className:"components-icon-button components-toolbar__control",label:Object(y.__)("Edit image"),onClick:t,icon:"edit"})}}))),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:u}),p.a.createElement(v.ResizableBox,{size:{width:"",height:"100%"},className:"wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-image ".concat(t.className),enable:{top:!1,right:!0,bottom:!0,left:!1},onResizeStart:function(e,t,n,r){o(!1)},onResize:N()(function(e,t,n,r){if("bottom"===t){var a=600<n.clientHeight?600:n.clientHeight;c({minHeight:a}),n.style.height="100%"}if("right"===t){var o=Math.floor(n.parentNode.offsetWidth/s),i=(Math.floor(n.parentNode.offsetWidth/o),Math.floor(n.clientWidth/s),Math.floor(n.clientWidth/o)),l=(Math.floor(parseInt(r.width,10)/o),i);12<l&&(l=12),l<1&&(l=1),c({w:l}),n.style.width="100%"}},250),onResizeStop:function(e,t,n,r){if(n.style.width="100%","bottom"===t){var a=600<n.clientHeight?600:n.clientHeight;c({minHeight:a}),o(!0)}}},!a&&p.a.createElement(_.MediaPlaceholder,{onSelect:function(e){c({imgId:e.id,imgUrl:e.url})},allowedTypes:["image"],accept:"image/*"}),i&&p.a.createElement("img",{className:"gecko-grid-layout-image__image",src:i}),a&&p.a.createElement("figcaption",{className:"gecko-grid-layout-image__caption"},"function"==typeof n?p.a.createElement(_.InnerBlocks,{templateLock:!1,allowedBlocks:P}):p.a.createElement("p",null,"Lorem Ipsum"))))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},F={title:Object(y.__)("Basic"),parent:["gecko/grid-layout"],icon:p.a.createElement(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},p.a.createElement(v.Path,{d:"M0,0h24v24H0V0z M0,0h24v24H0V0z",fill:"none"}),p.a.createElement(v.Path,{d:"m20 7v10h-16v-10h16m0-2h-16c-1.1 0-1.99 0.9-1.99 2l-0.01 10c0 1.1 0.9 2 2 2h16c1.1 0 2-0.9 2-2v-10c0-1.1-0.9-2-2-2z"}),p.a.createElement(v.Rect,{x:"11",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"11",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"8",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"8",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"5",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"5",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"8",y:"14",width:"8",height:"2"}),p.a.createElement(v.Rect,{x:"14",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"14",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"17",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"17",y:"8",width:"2",height:"2"})),description:Object(y.__)("An image grid block."),category:"common",supports:{className:!0,inserter:!0,reusable:!1,html:!1},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0}],attributes:{h:{type:"number",default:1},w:{type:"number",default:1}},transforms:{from:[{type:"block",blocks:["gecko/grid-layout-image","gecko/grid-layout-item"],transform:function(e,t){var n=Object(k.select)("core/editor").getSelectedBlock(),r=e.h,a=e.w;return Object(u.createBlock)("gecko/grid-layout-basic",{h:r,w:a},n.innerBlocks)}}]},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],edit:function(e){var t=e.attributes,n=e.setAttributes,r=(e.className,e.insertBlocksAfter),a=t.h,o=t.w,i={gridColumnEnd:"span "+o,gridRowEnd:"span "+a};return p.a.createElement(b.Fragment,null,p.a.createElement(_.InspectorControls,null,p.a.createElement(v.PanelBody,{title:"Grid Item"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:o,onChange:function(e){n({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:a,onChange:function(e){n({h:e})},min:1,max:12}))),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:i}),p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-basic ".concat(t.className)},"function"==typeof r?p.a.createElement(_.InnerBlocks,{templateLock:!1}):p.a.createElement("p",null,"Lorem Ipsum")))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}};Object(u.registerBlockType)("gecko/grid-layout",A),Object(u.registerBlockType)("gecko/grid-layout-basic",F),Object(u.registerBlockType)("gecko/grid-layout-image",T),Object(u.registerBlockType)("gecko/grid-layout-item",H),document.addEventListener("DOMContentLoaded",function(){var l=new MutationObserver(function(e){e.forEach(function(e){var t=e.target.closest('[data-type^="gecko/grid-layout-"]');if(t){var n=e.target.getAttribute("style");t.style=n}})});!function(){var e=document.querySelectorAll('[data-type^="gecko/grid-layout-"]');if(!(0<!e.length)){var t=!0,n=!1,r=void 0;try{for(var a,o=e[Symbol.iterator]();!(t=(a=o.next()).done);t=!0){var i=a.value,l=i.querySelector(".gecko-grid-layout-editor-styles").getAttribute("style");i.style=l}}catch(e){n=!0,r=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw r}}}}(),document.addEventListener("DOMNodeInserted",function(){var e=document.querySelectorAll(".gecko-grid-layout-editor-styles");if(!(0<!e.length)){var t=!0,n=!1,r=void 0;try{for(var a,o=e[Symbol.iterator]();!(t=(a=o.next()).done);t=!0){var i=a.value;l.observe(i,{attributes:!0,attributeFilter:["style"]})}}catch(e){n=!0,r=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw r}}}})})}]);
     1/******/ (function(modules) { // webpackBootstrap
     2/******/    // The module cache
     3/******/    var installedModules = {};
     4/******/
     5/******/    // The require function
     6/******/    function __webpack_require__(moduleId) {
     7/******/
     8/******/        // Check if module is in cache
     9/******/        if(installedModules[moduleId]) {
     10/******/            return installedModules[moduleId].exports;
     11/******/        }
     12/******/        // Create a new module (and put it into the cache)
     13/******/        var module = installedModules[moduleId] = {
     14/******/            i: moduleId,
     15/******/            l: false,
     16/******/            exports: {}
     17/******/        };
     18/******/
     19/******/        // Execute the module function
     20/******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
     21/******/
     22/******/        // Flag the module as loaded
     23/******/        module.l = true;
     24/******/
     25/******/        // Return the exports of the module
     26/******/        return module.exports;
     27/******/    }
     28/******/
     29/******/
     30/******/    // expose the modules object (__webpack_modules__)
     31/******/    __webpack_require__.m = modules;
     32/******/
     33/******/    // expose the module cache
     34/******/    __webpack_require__.c = installedModules;
     35/******/
     36/******/    // define getter function for harmony exports
     37/******/    __webpack_require__.d = function(exports, name, getter) {
     38/******/        if(!__webpack_require__.o(exports, name)) {
     39/******/            Object.defineProperty(exports, name, { enumerable: true, get: getter });
     40/******/        }
     41/******/    };
     42/******/
     43/******/    // define __esModule on exports
     44/******/    __webpack_require__.r = function(exports) {
     45/******/        if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
     46/******/            Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
     47/******/        }
     48/******/        Object.defineProperty(exports, '__esModule', { value: true });
     49/******/    };
     50/******/
     51/******/    // create a fake namespace object
     52/******/    // mode & 1: value is a module id, require it
     53/******/    // mode & 2: merge all properties of value into the ns
     54/******/    // mode & 4: return value when already ns object
     55/******/    // mode & 8|1: behave like require
     56/******/    __webpack_require__.t = function(value, mode) {
     57/******/        if(mode & 1) value = __webpack_require__(value);
     58/******/        if(mode & 8) return value;
     59/******/        if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
     60/******/        var ns = Object.create(null);
     61/******/        __webpack_require__.r(ns);
     62/******/        Object.defineProperty(ns, 'default', { enumerable: true, value: value });
     63/******/        if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
     64/******/        return ns;
     65/******/    };
     66/******/
     67/******/    // getDefaultExport function for compatibility with non-harmony modules
     68/******/    __webpack_require__.n = function(module) {
     69/******/        var getter = module && module.__esModule ?
     70/******/            function getDefault() { return module['default']; } :
     71/******/            function getModuleExports() { return module; };
     72/******/        __webpack_require__.d(getter, 'a', getter);
     73/******/        return getter;
     74/******/    };
     75/******/
     76/******/    // Object.prototype.hasOwnProperty.call
     77/******/    __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
     78/******/
     79/******/    // __webpack_public_path__
     80/******/    __webpack_require__.p = "/wp-content/plugins/gecko-grid-layout/dist/";
     81/******/
     82/******/
     83/******/    // Load entry module and return exports
     84/******/    return __webpack_require__(__webpack_require__.s = "./src/index.js");
     85/******/ })
     86/************************************************************************/
     87/******/ ({
     88
     89/***/ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js":
     90/*!**********************************************************************!*\
     91  !*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!
     92  \**********************************************************************/
     93/*! no static exports found */
     94/***/ (function(module, exports) {
     95
     96function _assertThisInitialized(self) {
     97  if (self === void 0) {
     98    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
     99  }
     100
     101  return self;
     102}
     103
     104module.exports = _assertThisInitialized;
     105
     106/***/ }),
     107
     108/***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js":
     109/*!***************************************************************!*\
     110  !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***!
     111  \***************************************************************/
     112/*! no static exports found */
     113/***/ (function(module, exports) {
     114
     115function _classCallCheck(instance, Constructor) {
     116  if (!(instance instanceof Constructor)) {
     117    throw new TypeError("Cannot call a class as a function");
     118  }
     119}
     120
     121module.exports = _classCallCheck;
     122
     123/***/ }),
     124
     125/***/ "./node_modules/@babel/runtime/helpers/createClass.js":
     126/*!************************************************************!*\
     127  !*** ./node_modules/@babel/runtime/helpers/createClass.js ***!
     128  \************************************************************/
     129/*! no static exports found */
     130/***/ (function(module, exports) {
     131
     132function _defineProperties(target, props) {
     133  for (var i = 0; i < props.length; i++) {
     134    var descriptor = props[i];
     135    descriptor.enumerable = descriptor.enumerable || false;
     136    descriptor.configurable = true;
     137    if ("value" in descriptor) descriptor.writable = true;
     138    Object.defineProperty(target, descriptor.key, descriptor);
     139  }
     140}
     141
     142function _createClass(Constructor, protoProps, staticProps) {
     143  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
     144  if (staticProps) _defineProperties(Constructor, staticProps);
     145  return Constructor;
     146}
     147
     148module.exports = _createClass;
     149
     150/***/ }),
     151
     152/***/ "./node_modules/@babel/runtime/helpers/defineProperty.js":
     153/*!***************************************************************!*\
     154  !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***!
     155  \***************************************************************/
     156/*! no static exports found */
     157/***/ (function(module, exports) {
     158
     159function _defineProperty(obj, key, value) {
     160  if (key in obj) {
     161    Object.defineProperty(obj, key, {
     162      value: value,
     163      enumerable: true,
     164      configurable: true,
     165      writable: true
     166    });
     167  } else {
     168    obj[key] = value;
     169  }
     170
     171  return obj;
     172}
     173
     174module.exports = _defineProperty;
     175
     176/***/ }),
     177
     178/***/ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js":
     179/*!***************************************************************!*\
     180  !*** ./node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!
     181  \***************************************************************/
     182/*! no static exports found */
     183/***/ (function(module, exports) {
     184
     185function _getPrototypeOf(o) {
     186  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
     187    return o.__proto__ || Object.getPrototypeOf(o);
     188  };
     189  return _getPrototypeOf(o);
     190}
     191
     192module.exports = _getPrototypeOf;
     193
     194/***/ }),
     195
     196/***/ "./node_modules/@babel/runtime/helpers/inherits.js":
     197/*!*********************************************************!*\
     198  !*** ./node_modules/@babel/runtime/helpers/inherits.js ***!
     199  \*********************************************************/
     200/*! no static exports found */
     201/***/ (function(module, exports, __webpack_require__) {
     202
     203var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js");
     204
     205function _inherits(subClass, superClass) {
     206  if (typeof superClass !== "function" && superClass !== null) {
     207    throw new TypeError("Super expression must either be null or a function");
     208  }
     209
     210  subClass.prototype = Object.create(superClass && superClass.prototype, {
     211    constructor: {
     212      value: subClass,
     213      writable: true,
     214      configurable: true
     215    }
     216  });
     217  if (superClass) setPrototypeOf(subClass, superClass);
     218}
     219
     220module.exports = _inherits;
     221
     222/***/ }),
     223
     224/***/ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js":
     225/*!**************************************************************************!*\
     226  !*** ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!
     227  \**************************************************************************/
     228/*! no static exports found */
     229/***/ (function(module, exports, __webpack_require__) {
     230
     231var _typeof = __webpack_require__(/*! ../helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");
     232
     233var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js");
     234
     235function _possibleConstructorReturn(self, call) {
     236  if (call && (_typeof(call) === "object" || typeof call === "function")) {
     237    return call;
     238  }
     239
     240  return assertThisInitialized(self);
     241}
     242
     243module.exports = _possibleConstructorReturn;
     244
     245/***/ }),
     246
     247/***/ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js":
     248/*!***************************************************************!*\
     249  !*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!
     250  \***************************************************************/
     251/*! no static exports found */
     252/***/ (function(module, exports) {
     253
     254function _setPrototypeOf(o, p) {
     255  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
     256    o.__proto__ = p;
     257    return o;
     258  };
     259
     260  return _setPrototypeOf(o, p);
     261}
     262
     263module.exports = _setPrototypeOf;
     264
     265/***/ }),
     266
     267/***/ "./node_modules/@babel/runtime/helpers/typeof.js":
     268/*!*******************************************************!*\
     269  !*** ./node_modules/@babel/runtime/helpers/typeof.js ***!
     270  \*******************************************************/
     271/*! no static exports found */
     272/***/ (function(module, exports) {
     273
     274function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }
     275
     276function _typeof(obj) {
     277  if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
     278    module.exports = _typeof = function _typeof(obj) {
     279      return _typeof2(obj);
     280    };
     281  } else {
     282    module.exports = _typeof = function _typeof(obj) {
     283      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
     284    };
     285  }
     286
     287  return _typeof(obj);
     288}
     289
     290module.exports = _typeof;
     291
     292/***/ }),
     293
     294/***/ "./node_modules/lodash/_Symbol.js":
     295/*!****************************************!*\
     296  !*** ./node_modules/lodash/_Symbol.js ***!
     297  \****************************************/
     298/*! no static exports found */
     299/***/ (function(module, exports, __webpack_require__) {
     300
     301var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
     302
     303/** Built-in value references. */
     304var Symbol = root.Symbol;
     305
     306module.exports = Symbol;
     307
     308
     309/***/ }),
     310
     311/***/ "./node_modules/lodash/_baseGetTag.js":
     312/*!********************************************!*\
     313  !*** ./node_modules/lodash/_baseGetTag.js ***!
     314  \********************************************/
     315/*! no static exports found */
     316/***/ (function(module, exports, __webpack_require__) {
     317
     318var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"),
     319    getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"),
     320    objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js");
     321
     322/** `Object#toString` result references. */
     323var nullTag = '[object Null]',
     324    undefinedTag = '[object Undefined]';
     325
     326/** Built-in value references. */
     327var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
     328
     329/**
     330 * The base implementation of `getTag` without fallbacks for buggy environments.
     331 *
     332 * @private
     333 * @param {*} value The value to query.
     334 * @returns {string} Returns the `toStringTag`.
     335 */
     336function baseGetTag(value) {
     337  if (value == null) {
     338    return value === undefined ? undefinedTag : nullTag;
     339  }
     340  return (symToStringTag && symToStringTag in Object(value))
     341    ? getRawTag(value)
     342    : objectToString(value);
     343}
     344
     345module.exports = baseGetTag;
     346
     347
     348/***/ }),
     349
     350/***/ "./node_modules/lodash/_freeGlobal.js":
     351/*!********************************************!*\
     352  !*** ./node_modules/lodash/_freeGlobal.js ***!
     353  \********************************************/
     354/*! no static exports found */
     355/***/ (function(module, exports, __webpack_require__) {
     356
     357/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
     358var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
     359
     360module.exports = freeGlobal;
     361
     362/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
     363
     364/***/ }),
     365
     366/***/ "./node_modules/lodash/_getRawTag.js":
     367/*!*******************************************!*\
     368  !*** ./node_modules/lodash/_getRawTag.js ***!
     369  \*******************************************/
     370/*! no static exports found */
     371/***/ (function(module, exports, __webpack_require__) {
     372
     373var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js");
     374
     375/** Used for built-in method references. */
     376var objectProto = Object.prototype;
     377
     378/** Used to check objects for own properties. */
     379var hasOwnProperty = objectProto.hasOwnProperty;
     380
     381/**
     382 * Used to resolve the
     383 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     384 * of values.
     385 */
     386var nativeObjectToString = objectProto.toString;
     387
     388/** Built-in value references. */
     389var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
     390
     391/**
     392 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
     393 *
     394 * @private
     395 * @param {*} value The value to query.
     396 * @returns {string} Returns the raw `toStringTag`.
     397 */
     398function getRawTag(value) {
     399  var isOwn = hasOwnProperty.call(value, symToStringTag),
     400      tag = value[symToStringTag];
     401
     402  try {
     403    value[symToStringTag] = undefined;
     404    var unmasked = true;
     405  } catch (e) {}
     406
     407  var result = nativeObjectToString.call(value);
     408  if (unmasked) {
     409    if (isOwn) {
     410      value[symToStringTag] = tag;
     411    } else {
     412      delete value[symToStringTag];
     413    }
     414  }
     415  return result;
     416}
     417
     418module.exports = getRawTag;
     419
     420
     421/***/ }),
     422
     423/***/ "./node_modules/lodash/_objectToString.js":
     424/*!************************************************!*\
     425  !*** ./node_modules/lodash/_objectToString.js ***!
     426  \************************************************/
     427/*! no static exports found */
     428/***/ (function(module, exports) {
     429
     430/** Used for built-in method references. */
     431var objectProto = Object.prototype;
     432
     433/**
     434 * Used to resolve the
     435 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     436 * of values.
     437 */
     438var nativeObjectToString = objectProto.toString;
     439
     440/**
     441 * Converts `value` to a string using `Object.prototype.toString`.
     442 *
     443 * @private
     444 * @param {*} value The value to convert.
     445 * @returns {string} Returns the converted string.
     446 */
     447function objectToString(value) {
     448  return nativeObjectToString.call(value);
     449}
     450
     451module.exports = objectToString;
     452
     453
     454/***/ }),
     455
     456/***/ "./node_modules/lodash/_root.js":
     457/*!**************************************!*\
     458  !*** ./node_modules/lodash/_root.js ***!
     459  \**************************************/
     460/*! no static exports found */
     461/***/ (function(module, exports, __webpack_require__) {
     462
     463var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js");
     464
     465/** Detect free variable `self`. */
     466var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
     467
     468/** Used as a reference to the global object. */
     469var root = freeGlobal || freeSelf || Function('return this')();
     470
     471module.exports = root;
     472
     473
     474/***/ }),
     475
     476/***/ "./node_modules/lodash/debounce.js":
     477/*!*****************************************!*\
     478  !*** ./node_modules/lodash/debounce.js ***!
     479  \*****************************************/
     480/*! no static exports found */
     481/***/ (function(module, exports, __webpack_require__) {
     482
     483var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"),
     484    now = __webpack_require__(/*! ./now */ "./node_modules/lodash/now.js"),
     485    toNumber = __webpack_require__(/*! ./toNumber */ "./node_modules/lodash/toNumber.js");
     486
     487/** Error message constants. */
     488var FUNC_ERROR_TEXT = 'Expected a function';
     489
     490/* Built-in method references for those with the same name as other `lodash` methods. */
     491var nativeMax = Math.max,
     492    nativeMin = Math.min;
     493
     494/**
     495 * Creates a debounced function that delays invoking `func` until after `wait`
     496 * milliseconds have elapsed since the last time the debounced function was
     497 * invoked. The debounced function comes with a `cancel` method to cancel
     498 * delayed `func` invocations and a `flush` method to immediately invoke them.
     499 * Provide `options` to indicate whether `func` should be invoked on the
     500 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
     501 * with the last arguments provided to the debounced function. Subsequent
     502 * calls to the debounced function return the result of the last `func`
     503 * invocation.
     504 *
     505 * **Note:** If `leading` and `trailing` options are `true`, `func` is
     506 * invoked on the trailing edge of the timeout only if the debounced function
     507 * is invoked more than once during the `wait` timeout.
     508 *
     509 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     510 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     511 *
     512 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     513 * for details over the differences between `_.debounce` and `_.throttle`.
     514 *
     515 * @static
     516 * @memberOf _
     517 * @since 0.1.0
     518 * @category Function
     519 * @param {Function} func The function to debounce.
     520 * @param {number} [wait=0] The number of milliseconds to delay.
     521 * @param {Object} [options={}] The options object.
     522 * @param {boolean} [options.leading=false]
     523 *  Specify invoking on the leading edge of the timeout.
     524 * @param {number} [options.maxWait]
     525 *  The maximum time `func` is allowed to be delayed before it's invoked.
     526 * @param {boolean} [options.trailing=true]
     527 *  Specify invoking on the trailing edge of the timeout.
     528 * @returns {Function} Returns the new debounced function.
     529 * @example
     530 *
     531 * // Avoid costly calculations while the window size is in flux.
     532 * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
     533 *
     534 * // Invoke `sendMail` when clicked, debouncing subsequent calls.
     535 * jQuery(element).on('click', _.debounce(sendMail, 300, {
     536 *   'leading': true,
     537 *   'trailing': false
     538 * }));
     539 *
     540 * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
     541 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
     542 * var source = new EventSource('/stream');
     543 * jQuery(source).on('message', debounced);
     544 *
     545 * // Cancel the trailing debounced invocation.
     546 * jQuery(window).on('popstate', debounced.cancel);
     547 */
     548function debounce(func, wait, options) {
     549  var lastArgs,
     550      lastThis,
     551      maxWait,
     552      result,
     553      timerId,
     554      lastCallTime,
     555      lastInvokeTime = 0,
     556      leading = false,
     557      maxing = false,
     558      trailing = true;
     559
     560  if (typeof func != 'function') {
     561    throw new TypeError(FUNC_ERROR_TEXT);
     562  }
     563  wait = toNumber(wait) || 0;
     564  if (isObject(options)) {
     565    leading = !!options.leading;
     566    maxing = 'maxWait' in options;
     567    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
     568    trailing = 'trailing' in options ? !!options.trailing : trailing;
     569  }
     570
     571  function invokeFunc(time) {
     572    var args = lastArgs,
     573        thisArg = lastThis;
     574
     575    lastArgs = lastThis = undefined;
     576    lastInvokeTime = time;
     577    result = func.apply(thisArg, args);
     578    return result;
     579  }
     580
     581  function leadingEdge(time) {
     582    // Reset any `maxWait` timer.
     583    lastInvokeTime = time;
     584    // Start the timer for the trailing edge.
     585    timerId = setTimeout(timerExpired, wait);
     586    // Invoke the leading edge.
     587    return leading ? invokeFunc(time) : result;
     588  }
     589
     590  function remainingWait(time) {
     591    var timeSinceLastCall = time - lastCallTime,
     592        timeSinceLastInvoke = time - lastInvokeTime,
     593        timeWaiting = wait - timeSinceLastCall;
     594
     595    return maxing
     596      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
     597      : timeWaiting;
     598  }
     599
     600  function shouldInvoke(time) {
     601    var timeSinceLastCall = time - lastCallTime,
     602        timeSinceLastInvoke = time - lastInvokeTime;
     603
     604    // Either this is the first call, activity has stopped and we're at the
     605    // trailing edge, the system time has gone backwards and we're treating
     606    // it as the trailing edge, or we've hit the `maxWait` limit.
     607    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
     608      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
     609  }
     610
     611  function timerExpired() {
     612    var time = now();
     613    if (shouldInvoke(time)) {
     614      return trailingEdge(time);
     615    }
     616    // Restart the timer.
     617    timerId = setTimeout(timerExpired, remainingWait(time));
     618  }
     619
     620  function trailingEdge(time) {
     621    timerId = undefined;
     622
     623    // Only invoke if we have `lastArgs` which means `func` has been
     624    // debounced at least once.
     625    if (trailing && lastArgs) {
     626      return invokeFunc(time);
     627    }
     628    lastArgs = lastThis = undefined;
     629    return result;
     630  }
     631
     632  function cancel() {
     633    if (timerId !== undefined) {
     634      clearTimeout(timerId);
     635    }
     636    lastInvokeTime = 0;
     637    lastArgs = lastCallTime = lastThis = timerId = undefined;
     638  }
     639
     640  function flush() {
     641    return timerId === undefined ? result : trailingEdge(now());
     642  }
     643
     644  function debounced() {
     645    var time = now(),
     646        isInvoking = shouldInvoke(time);
     647
     648    lastArgs = arguments;
     649    lastThis = this;
     650    lastCallTime = time;
     651
     652    if (isInvoking) {
     653      if (timerId === undefined) {
     654        return leadingEdge(lastCallTime);
     655      }
     656      if (maxing) {
     657        // Handle invocations in a tight loop.
     658        timerId = setTimeout(timerExpired, wait);
     659        return invokeFunc(lastCallTime);
     660      }
     661    }
     662    if (timerId === undefined) {
     663      timerId = setTimeout(timerExpired, wait);
     664    }
     665    return result;
     666  }
     667  debounced.cancel = cancel;
     668  debounced.flush = flush;
     669  return debounced;
     670}
     671
     672module.exports = debounce;
     673
     674
     675/***/ }),
     676
     677/***/ "./node_modules/lodash/isObject.js":
     678/*!*****************************************!*\
     679  !*** ./node_modules/lodash/isObject.js ***!
     680  \*****************************************/
     681/*! no static exports found */
     682/***/ (function(module, exports) {
     683
     684/**
     685 * Checks if `value` is the
     686 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     687 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     688 *
     689 * @static
     690 * @memberOf _
     691 * @since 0.1.0
     692 * @category Lang
     693 * @param {*} value The value to check.
     694 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     695 * @example
     696 *
     697 * _.isObject({});
     698 * // => true
     699 *
     700 * _.isObject([1, 2, 3]);
     701 * // => true
     702 *
     703 * _.isObject(_.noop);
     704 * // => true
     705 *
     706 * _.isObject(null);
     707 * // => false
     708 */
     709function isObject(value) {
     710  var type = typeof value;
     711  return value != null && (type == 'object' || type == 'function');
     712}
     713
     714module.exports = isObject;
     715
     716
     717/***/ }),
     718
     719/***/ "./node_modules/lodash/isObjectLike.js":
     720/*!*********************************************!*\
     721  !*** ./node_modules/lodash/isObjectLike.js ***!
     722  \*********************************************/
     723/*! no static exports found */
     724/***/ (function(module, exports) {
     725
     726/**
     727 * Checks if `value` is object-like. A value is object-like if it's not `null`
     728 * and has a `typeof` result of "object".
     729 *
     730 * @static
     731 * @memberOf _
     732 * @since 4.0.0
     733 * @category Lang
     734 * @param {*} value The value to check.
     735 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     736 * @example
     737 *
     738 * _.isObjectLike({});
     739 * // => true
     740 *
     741 * _.isObjectLike([1, 2, 3]);
     742 * // => true
     743 *
     744 * _.isObjectLike(_.noop);
     745 * // => false
     746 *
     747 * _.isObjectLike(null);
     748 * // => false
     749 */
     750function isObjectLike(value) {
     751  return value != null && typeof value == 'object';
     752}
     753
     754module.exports = isObjectLike;
     755
     756
     757/***/ }),
     758
     759/***/ "./node_modules/lodash/isSymbol.js":
     760/*!*****************************************!*\
     761  !*** ./node_modules/lodash/isSymbol.js ***!
     762  \*****************************************/
     763/*! no static exports found */
     764/***/ (function(module, exports, __webpack_require__) {
     765
     766var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"),
     767    isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js");
     768
     769/** `Object#toString` result references. */
     770var symbolTag = '[object Symbol]';
     771
     772/**
     773 * Checks if `value` is classified as a `Symbol` primitive or object.
     774 *
     775 * @static
     776 * @memberOf _
     777 * @since 4.0.0
     778 * @category Lang
     779 * @param {*} value The value to check.
     780 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     781 * @example
     782 *
     783 * _.isSymbol(Symbol.iterator);
     784 * // => true
     785 *
     786 * _.isSymbol('abc');
     787 * // => false
     788 */
     789function isSymbol(value) {
     790  return typeof value == 'symbol' ||
     791    (isObjectLike(value) && baseGetTag(value) == symbolTag);
     792}
     793
     794module.exports = isSymbol;
     795
     796
     797/***/ }),
     798
     799/***/ "./node_modules/lodash/now.js":
     800/*!************************************!*\
     801  !*** ./node_modules/lodash/now.js ***!
     802  \************************************/
     803/*! no static exports found */
     804/***/ (function(module, exports, __webpack_require__) {
     805
     806var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
     807
     808/**
     809 * Gets the timestamp of the number of milliseconds that have elapsed since
     810 * the Unix epoch (1 January 1970 00:00:00 UTC).
     811 *
     812 * @static
     813 * @memberOf _
     814 * @since 2.4.0
     815 * @category Date
     816 * @returns {number} Returns the timestamp.
     817 * @example
     818 *
     819 * _.defer(function(stamp) {
     820 *   console.log(_.now() - stamp);
     821 * }, _.now());
     822 * // => Logs the number of milliseconds it took for the deferred invocation.
     823 */
     824var now = function() {
     825  return root.Date.now();
     826};
     827
     828module.exports = now;
     829
     830
     831/***/ }),
     832
     833/***/ "./node_modules/lodash/toNumber.js":
     834/*!*****************************************!*\
     835  !*** ./node_modules/lodash/toNumber.js ***!
     836  \*****************************************/
     837/*! no static exports found */
     838/***/ (function(module, exports, __webpack_require__) {
     839
     840var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"),
     841    isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js");
     842
     843/** Used as references for various `Number` constants. */
     844var NAN = 0 / 0;
     845
     846/** Used to match leading and trailing whitespace. */
     847var reTrim = /^\s+|\s+$/g;
     848
     849/** Used to detect bad signed hexadecimal string values. */
     850var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
     851
     852/** Used to detect binary string values. */
     853var reIsBinary = /^0b[01]+$/i;
     854
     855/** Used to detect octal string values. */
     856var reIsOctal = /^0o[0-7]+$/i;
     857
     858/** Built-in method references without a dependency on `root`. */
     859var freeParseInt = parseInt;
     860
     861/**
     862 * Converts `value` to a number.
     863 *
     864 * @static
     865 * @memberOf _
     866 * @since 4.0.0
     867 * @category Lang
     868 * @param {*} value The value to process.
     869 * @returns {number} Returns the number.
     870 * @example
     871 *
     872 * _.toNumber(3.2);
     873 * // => 3.2
     874 *
     875 * _.toNumber(Number.MIN_VALUE);
     876 * // => 5e-324
     877 *
     878 * _.toNumber(Infinity);
     879 * // => Infinity
     880 *
     881 * _.toNumber('3.2');
     882 * // => 3.2
     883 */
     884function toNumber(value) {
     885  if (typeof value == 'number') {
     886    return value;
     887  }
     888  if (isSymbol(value)) {
     889    return NAN;
     890  }
     891  if (isObject(value)) {
     892    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
     893    value = isObject(other) ? (other + '') : other;
     894  }
     895  if (typeof value != 'string') {
     896    return value === 0 ? value : +value;
     897  }
     898  value = value.replace(reTrim, '');
     899  var isBinary = reIsBinary.test(value);
     900  return (isBinary || reIsOctal.test(value))
     901    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
     902    : (reIsBadHex.test(value) ? NAN : +value);
     903}
     904
     905module.exports = toNumber;
     906
     907
     908/***/ }),
     909
     910/***/ "./node_modules/tinycolor2/tinycolor.js":
     911/*!**********************************************!*\
     912  !*** ./node_modules/tinycolor2/tinycolor.js ***!
     913  \**********************************************/
     914/*! no static exports found */
     915/***/ (function(module, exports, __webpack_require__) {
     916
     917var __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1
     918// https://github.com/bgrins/TinyColor
     919// Brian Grinstead, MIT License
     920
     921(function(Math) {
     922
     923var trimLeft = /^\s+/,
     924    trimRight = /\s+$/,
     925    tinyCounter = 0,
     926    mathRound = Math.round,
     927    mathMin = Math.min,
     928    mathMax = Math.max,
     929    mathRandom = Math.random;
     930
     931function tinycolor (color, opts) {
     932
     933    color = (color) ? color : '';
     934    opts = opts || { };
     935
     936    // If input is already a tinycolor, return itself
     937    if (color instanceof tinycolor) {
     938       return color;
     939    }
     940    // If we are called as a function, call using new instead
     941    if (!(this instanceof tinycolor)) {
     942        return new tinycolor(color, opts);
     943    }
     944
     945    var rgb = inputToRGB(color);
     946    this._originalInput = color,
     947    this._r = rgb.r,
     948    this._g = rgb.g,
     949    this._b = rgb.b,
     950    this._a = rgb.a,
     951    this._roundA = mathRound(100*this._a) / 100,
     952    this._format = opts.format || rgb.format;
     953    this._gradientType = opts.gradientType;
     954
     955    // Don't let the range of [0,255] come back in [0,1].
     956    // Potentially lose a little bit of precision here, but will fix issues where
     957    // .5 gets interpreted as half of the total, instead of half of 1
     958    // If it was supposed to be 128, this was already taken care of by `inputToRgb`
     959    if (this._r < 1) { this._r = mathRound(this._r); }
     960    if (this._g < 1) { this._g = mathRound(this._g); }
     961    if (this._b < 1) { this._b = mathRound(this._b); }
     962
     963    this._ok = rgb.ok;
     964    this._tc_id = tinyCounter++;
     965}
     966
     967tinycolor.prototype = {
     968    isDark: function() {
     969        return this.getBrightness() < 128;
     970    },
     971    isLight: function() {
     972        return !this.isDark();
     973    },
     974    isValid: function() {
     975        return this._ok;
     976    },
     977    getOriginalInput: function() {
     978      return this._originalInput;
     979    },
     980    getFormat: function() {
     981        return this._format;
     982    },
     983    getAlpha: function() {
     984        return this._a;
     985    },
     986    getBrightness: function() {
     987        //http://www.w3.org/TR/AERT#color-contrast
     988        var rgb = this.toRgb();
     989        return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
     990    },
     991    getLuminance: function() {
     992        //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
     993        var rgb = this.toRgb();
     994        var RsRGB, GsRGB, BsRGB, R, G, B;
     995        RsRGB = rgb.r/255;
     996        GsRGB = rgb.g/255;
     997        BsRGB = rgb.b/255;
     998
     999        if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}
     1000        if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}
     1001        if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}
     1002        return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);
     1003    },
     1004    setAlpha: function(value) {
     1005        this._a = boundAlpha(value);
     1006        this._roundA = mathRound(100*this._a) / 100;
     1007        return this;
     1008    },
     1009    toHsv: function() {
     1010        var hsv = rgbToHsv(this._r, this._g, this._b);
     1011        return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };
     1012    },
     1013    toHsvString: function() {
     1014        var hsv = rgbToHsv(this._r, this._g, this._b);
     1015        var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
     1016        return (this._a == 1) ?
     1017          "hsv("  + h + ", " + s + "%, " + v + "%)" :
     1018          "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")";
     1019    },
     1020    toHsl: function() {
     1021        var hsl = rgbToHsl(this._r, this._g, this._b);
     1022        return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };
     1023    },
     1024    toHslString: function() {
     1025        var hsl = rgbToHsl(this._r, this._g, this._b);
     1026        var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
     1027        return (this._a == 1) ?
     1028          "hsl("  + h + ", " + s + "%, " + l + "%)" :
     1029          "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")";
     1030    },
     1031    toHex: function(allow3Char) {
     1032        return rgbToHex(this._r, this._g, this._b, allow3Char);
     1033    },
     1034    toHexString: function(allow3Char) {
     1035        return '#' + this.toHex(allow3Char);
     1036    },
     1037    toHex8: function(allow4Char) {
     1038        return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);
     1039    },
     1040    toHex8String: function(allow4Char) {
     1041        return '#' + this.toHex8(allow4Char);
     1042    },
     1043    toRgb: function() {
     1044        return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };
     1045    },
     1046    toRgbString: function() {
     1047        return (this._a == 1) ?
     1048          "rgb("  + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" :
     1049          "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")";
     1050    },
     1051    toPercentageRgb: function() {
     1052        return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a };
     1053    },
     1054    toPercentageRgbString: function() {
     1055        return (this._a == 1) ?
     1056          "rgb("  + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" :
     1057          "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
     1058    },
     1059    toName: function() {
     1060        if (this._a === 0) {
     1061            return "transparent";
     1062        }
     1063
     1064        if (this._a < 1) {
     1065            return false;
     1066        }
     1067
     1068        return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
     1069    },
     1070    toFilter: function(secondColor) {
     1071        var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);
     1072        var secondHex8String = hex8String;
     1073        var gradientType = this._gradientType ? "GradientType = 1, " : "";
     1074
     1075        if (secondColor) {
     1076            var s = tinycolor(secondColor);
     1077            secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);
     1078        }
     1079
     1080        return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
     1081    },
     1082    toString: function(format) {
     1083        var formatSet = !!format;
     1084        format = format || this._format;
     1085
     1086        var formattedString = false;
     1087        var hasAlpha = this._a < 1 && this._a >= 0;
     1088        var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name");
     1089
     1090        if (needsAlphaFormat) {
     1091            // Special case for "transparent", all other non-alpha formats
     1092            // will return rgba when there is transparency.
     1093            if (format === "name" && this._a === 0) {
     1094                return this.toName();
     1095            }
     1096            return this.toRgbString();
     1097        }
     1098        if (format === "rgb") {
     1099            formattedString = this.toRgbString();
     1100        }
     1101        if (format === "prgb") {
     1102            formattedString = this.toPercentageRgbString();
     1103        }
     1104        if (format === "hex" || format === "hex6") {
     1105            formattedString = this.toHexString();
     1106        }
     1107        if (format === "hex3") {
     1108            formattedString = this.toHexString(true);
     1109        }
     1110        if (format === "hex4") {
     1111            formattedString = this.toHex8String(true);
     1112        }
     1113        if (format === "hex8") {
     1114            formattedString = this.toHex8String();
     1115        }
     1116        if (format === "name") {
     1117            formattedString = this.toName();
     1118        }
     1119        if (format === "hsl") {
     1120            formattedString = this.toHslString();
     1121        }
     1122        if (format === "hsv") {
     1123            formattedString = this.toHsvString();
     1124        }
     1125
     1126        return formattedString || this.toHexString();
     1127    },
     1128    clone: function() {
     1129        return tinycolor(this.toString());
     1130    },
     1131
     1132    _applyModification: function(fn, args) {
     1133        var color = fn.apply(null, [this].concat([].slice.call(args)));
     1134        this._r = color._r;
     1135        this._g = color._g;
     1136        this._b = color._b;
     1137        this.setAlpha(color._a);
     1138        return this;
     1139    },
     1140    lighten: function() {
     1141        return this._applyModification(lighten, arguments);
     1142    },
     1143    brighten: function() {
     1144        return this._applyModification(brighten, arguments);
     1145    },
     1146    darken: function() {
     1147        return this._applyModification(darken, arguments);
     1148    },
     1149    desaturate: function() {
     1150        return this._applyModification(desaturate, arguments);
     1151    },
     1152    saturate: function() {
     1153        return this._applyModification(saturate, arguments);
     1154    },
     1155    greyscale: function() {
     1156        return this._applyModification(greyscale, arguments);
     1157    },
     1158    spin: function() {
     1159        return this._applyModification(spin, arguments);
     1160    },
     1161
     1162    _applyCombination: function(fn, args) {
     1163        return fn.apply(null, [this].concat([].slice.call(args)));
     1164    },
     1165    analogous: function() {
     1166        return this._applyCombination(analogous, arguments);
     1167    },
     1168    complement: function() {
     1169        return this._applyCombination(complement, arguments);
     1170    },
     1171    monochromatic: function() {
     1172        return this._applyCombination(monochromatic, arguments);
     1173    },
     1174    splitcomplement: function() {
     1175        return this._applyCombination(splitcomplement, arguments);
     1176    },
     1177    triad: function() {
     1178        return this._applyCombination(triad, arguments);
     1179    },
     1180    tetrad: function() {
     1181        return this._applyCombination(tetrad, arguments);
     1182    }
     1183};
     1184
     1185// If input is an object, force 1 into "1.0" to handle ratios properly
     1186// String input requires "1.0" as input, so 1 will be treated as 1
     1187tinycolor.fromRatio = function(color, opts) {
     1188    if (typeof color == "object") {
     1189        var newColor = {};
     1190        for (var i in color) {
     1191            if (color.hasOwnProperty(i)) {
     1192                if (i === "a") {
     1193                    newColor[i] = color[i];
     1194                }
     1195                else {
     1196                    newColor[i] = convertToPercentage(color[i]);
     1197                }
     1198            }
     1199        }
     1200        color = newColor;
     1201    }
     1202
     1203    return tinycolor(color, opts);
     1204};
     1205
     1206// Given a string or object, convert that input to RGB
     1207// Possible string inputs:
     1208//
     1209//     "red"
     1210//     "#f00" or "f00"
     1211//     "#ff0000" or "ff0000"
     1212//     "#ff000000" or "ff000000"
     1213//     "rgb 255 0 0" or "rgb (255, 0, 0)"
     1214//     "rgb 1.0 0 0" or "rgb (1, 0, 0)"
     1215//     "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
     1216//     "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
     1217//     "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
     1218//     "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
     1219//     "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
     1220//
     1221function inputToRGB(color) {
     1222
     1223    var rgb = { r: 0, g: 0, b: 0 };
     1224    var a = 1;
     1225    var s = null;
     1226    var v = null;
     1227    var l = null;
     1228    var ok = false;
     1229    var format = false;
     1230
     1231    if (typeof color == "string") {
     1232        color = stringInputToObject(color);
     1233    }
     1234
     1235    if (typeof color == "object") {
     1236        if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
     1237            rgb = rgbToRgb(color.r, color.g, color.b);
     1238            ok = true;
     1239            format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
     1240        }
     1241        else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
     1242            s = convertToPercentage(color.s);
     1243            v = convertToPercentage(color.v);
     1244            rgb = hsvToRgb(color.h, s, v);
     1245            ok = true;
     1246            format = "hsv";
     1247        }
     1248        else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
     1249            s = convertToPercentage(color.s);
     1250            l = convertToPercentage(color.l);
     1251            rgb = hslToRgb(color.h, s, l);
     1252            ok = true;
     1253            format = "hsl";
     1254        }
     1255
     1256        if (color.hasOwnProperty("a")) {
     1257            a = color.a;
     1258        }
     1259    }
     1260
     1261    a = boundAlpha(a);
     1262
     1263    return {
     1264        ok: ok,
     1265        format: color.format || format,
     1266        r: mathMin(255, mathMax(rgb.r, 0)),
     1267        g: mathMin(255, mathMax(rgb.g, 0)),
     1268        b: mathMin(255, mathMax(rgb.b, 0)),
     1269        a: a
     1270    };
     1271}
     1272
     1273
     1274// Conversion Functions
     1275// --------------------
     1276
     1277// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
     1278// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
     1279
     1280// `rgbToRgb`
     1281// Handle bounds / percentage checking to conform to CSS color spec
     1282// <http://www.w3.org/TR/css3-color/>
     1283// *Assumes:* r, g, b in [0, 255] or [0, 1]
     1284// *Returns:* { r, g, b } in [0, 255]
     1285function rgbToRgb(r, g, b){
     1286    return {
     1287        r: bound01(r, 255) * 255,
     1288        g: bound01(g, 255) * 255,
     1289        b: bound01(b, 255) * 255
     1290    };
     1291}
     1292
     1293// `rgbToHsl`
     1294// Converts an RGB color value to HSL.
     1295// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
     1296// *Returns:* { h, s, l } in [0,1]
     1297function rgbToHsl(r, g, b) {
     1298
     1299    r = bound01(r, 255);
     1300    g = bound01(g, 255);
     1301    b = bound01(b, 255);
     1302
     1303    var max = mathMax(r, g, b), min = mathMin(r, g, b);
     1304    var h, s, l = (max + min) / 2;
     1305
     1306    if(max == min) {
     1307        h = s = 0; // achromatic
     1308    }
     1309    else {
     1310        var d = max - min;
     1311        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
     1312        switch(max) {
     1313            case r: h = (g - b) / d + (g < b ? 6 : 0); break;
     1314            case g: h = (b - r) / d + 2; break;
     1315            case b: h = (r - g) / d + 4; break;
     1316        }
     1317
     1318        h /= 6;
     1319    }
     1320
     1321    return { h: h, s: s, l: l };
     1322}
     1323
     1324// `hslToRgb`
     1325// Converts an HSL color value to RGB.
     1326// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
     1327// *Returns:* { r, g, b } in the set [0, 255]
     1328function hslToRgb(h, s, l) {
     1329    var r, g, b;
     1330
     1331    h = bound01(h, 360);
     1332    s = bound01(s, 100);
     1333    l = bound01(l, 100);
     1334
     1335    function hue2rgb(p, q, t) {
     1336        if(t < 0) t += 1;
     1337        if(t > 1) t -= 1;
     1338        if(t < 1/6) return p + (q - p) * 6 * t;
     1339        if(t < 1/2) return q;
     1340        if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
     1341        return p;
     1342    }
     1343
     1344    if(s === 0) {
     1345        r = g = b = l; // achromatic
     1346    }
     1347    else {
     1348        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
     1349        var p = 2 * l - q;
     1350        r = hue2rgb(p, q, h + 1/3);
     1351        g = hue2rgb(p, q, h);
     1352        b = hue2rgb(p, q, h - 1/3);
     1353    }
     1354
     1355    return { r: r * 255, g: g * 255, b: b * 255 };
     1356}
     1357
     1358// `rgbToHsv`
     1359// Converts an RGB color value to HSV
     1360// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
     1361// *Returns:* { h, s, v } in [0,1]
     1362function rgbToHsv(r, g, b) {
     1363
     1364    r = bound01(r, 255);
     1365    g = bound01(g, 255);
     1366    b = bound01(b, 255);
     1367
     1368    var max = mathMax(r, g, b), min = mathMin(r, g, b);
     1369    var h, s, v = max;
     1370
     1371    var d = max - min;
     1372    s = max === 0 ? 0 : d / max;
     1373
     1374    if(max == min) {
     1375        h = 0; // achromatic
     1376    }
     1377    else {
     1378        switch(max) {
     1379            case r: h = (g - b) / d + (g < b ? 6 : 0); break;
     1380            case g: h = (b - r) / d + 2; break;
     1381            case b: h = (r - g) / d + 4; break;
     1382        }
     1383        h /= 6;
     1384    }
     1385    return { h: h, s: s, v: v };
     1386}
     1387
     1388// `hsvToRgb`
     1389// Converts an HSV color value to RGB.
     1390// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
     1391// *Returns:* { r, g, b } in the set [0, 255]
     1392 function hsvToRgb(h, s, v) {
     1393
     1394    h = bound01(h, 360) * 6;
     1395    s = bound01(s, 100);
     1396    v = bound01(v, 100);
     1397
     1398    var i = Math.floor(h),
     1399        f = h - i,
     1400        p = v * (1 - s),
     1401        q = v * (1 - f * s),
     1402        t = v * (1 - (1 - f) * s),
     1403        mod = i % 6,
     1404        r = [v, q, p, p, t, v][mod],
     1405        g = [t, v, v, q, p, p][mod],
     1406        b = [p, p, t, v, v, q][mod];
     1407
     1408    return { r: r * 255, g: g * 255, b: b * 255 };
     1409}
     1410
     1411// `rgbToHex`
     1412// Converts an RGB color to hex
     1413// Assumes r, g, and b are contained in the set [0, 255]
     1414// Returns a 3 or 6 character hex
     1415function rgbToHex(r, g, b, allow3Char) {
     1416
     1417    var hex = [
     1418        pad2(mathRound(r).toString(16)),
     1419        pad2(mathRound(g).toString(16)),
     1420        pad2(mathRound(b).toString(16))
     1421    ];
     1422
     1423    // Return a 3 character hex if possible
     1424    if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
     1425        return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
     1426    }
     1427
     1428    return hex.join("");
     1429}
     1430
     1431// `rgbaToHex`
     1432// Converts an RGBA color plus alpha transparency to hex
     1433// Assumes r, g, b are contained in the set [0, 255] and
     1434// a in [0, 1]. Returns a 4 or 8 character rgba hex
     1435function rgbaToHex(r, g, b, a, allow4Char) {
     1436
     1437    var hex = [
     1438        pad2(mathRound(r).toString(16)),
     1439        pad2(mathRound(g).toString(16)),
     1440        pad2(mathRound(b).toString(16)),
     1441        pad2(convertDecimalToHex(a))
     1442    ];
     1443
     1444    // Return a 4 character hex if possible
     1445    if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {
     1446        return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
     1447    }
     1448
     1449    return hex.join("");
     1450}
     1451
     1452// `rgbaToArgbHex`
     1453// Converts an RGBA color to an ARGB Hex8 string
     1454// Rarely used, but required for "toFilter()"
     1455function rgbaToArgbHex(r, g, b, a) {
     1456
     1457    var hex = [
     1458        pad2(convertDecimalToHex(a)),
     1459        pad2(mathRound(r).toString(16)),
     1460        pad2(mathRound(g).toString(16)),
     1461        pad2(mathRound(b).toString(16))
     1462    ];
     1463
     1464    return hex.join("");
     1465}
     1466
     1467// `equals`
     1468// Can be called with any tinycolor input
     1469tinycolor.equals = function (color1, color2) {
     1470    if (!color1 || !color2) { return false; }
     1471    return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
     1472};
     1473
     1474tinycolor.random = function() {
     1475    return tinycolor.fromRatio({
     1476        r: mathRandom(),
     1477        g: mathRandom(),
     1478        b: mathRandom()
     1479    });
     1480};
     1481
     1482
     1483// Modification Functions
     1484// ----------------------
     1485// Thanks to less.js for some of the basics here
     1486// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>
     1487
     1488function desaturate(color, amount) {
     1489    amount = (amount === 0) ? 0 : (amount || 10);
     1490    var hsl = tinycolor(color).toHsl();
     1491    hsl.s -= amount / 100;
     1492    hsl.s = clamp01(hsl.s);
     1493    return tinycolor(hsl);
     1494}
     1495
     1496function saturate(color, amount) {
     1497    amount = (amount === 0) ? 0 : (amount || 10);
     1498    var hsl = tinycolor(color).toHsl();
     1499    hsl.s += amount / 100;
     1500    hsl.s = clamp01(hsl.s);
     1501    return tinycolor(hsl);
     1502}
     1503
     1504function greyscale(color) {
     1505    return tinycolor(color).desaturate(100);
     1506}
     1507
     1508function lighten (color, amount) {
     1509    amount = (amount === 0) ? 0 : (amount || 10);
     1510    var hsl = tinycolor(color).toHsl();
     1511    hsl.l += amount / 100;
     1512    hsl.l = clamp01(hsl.l);
     1513    return tinycolor(hsl);
     1514}
     1515
     1516function brighten(color, amount) {
     1517    amount = (amount === 0) ? 0 : (amount || 10);
     1518    var rgb = tinycolor(color).toRgb();
     1519    rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));
     1520    rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));
     1521    rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));
     1522    return tinycolor(rgb);
     1523}
     1524
     1525function darken (color, amount) {
     1526    amount = (amount === 0) ? 0 : (amount || 10);
     1527    var hsl = tinycolor(color).toHsl();
     1528    hsl.l -= amount / 100;
     1529    hsl.l = clamp01(hsl.l);
     1530    return tinycolor(hsl);
     1531}
     1532
     1533// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
     1534// Values outside of this range will be wrapped into this range.
     1535function spin(color, amount) {
     1536    var hsl = tinycolor(color).toHsl();
     1537    var hue = (hsl.h + amount) % 360;
     1538    hsl.h = hue < 0 ? 360 + hue : hue;
     1539    return tinycolor(hsl);
     1540}
     1541
     1542// Combination Functions
     1543// ---------------------
     1544// Thanks to jQuery xColor for some of the ideas behind these
     1545// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>
     1546
     1547function complement(color) {
     1548    var hsl = tinycolor(color).toHsl();
     1549    hsl.h = (hsl.h + 180) % 360;
     1550    return tinycolor(hsl);
     1551}
     1552
     1553function triad(color) {
     1554    var hsl = tinycolor(color).toHsl();
     1555    var h = hsl.h;
     1556    return [
     1557        tinycolor(color),
     1558        tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
     1559        tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
     1560    ];
     1561}
     1562
     1563function tetrad(color) {
     1564    var hsl = tinycolor(color).toHsl();
     1565    var h = hsl.h;
     1566    return [
     1567        tinycolor(color),
     1568        tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
     1569        tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
     1570        tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
     1571    ];
     1572}
     1573
     1574function splitcomplement(color) {
     1575    var hsl = tinycolor(color).toHsl();
     1576    var h = hsl.h;
     1577    return [
     1578        tinycolor(color),
     1579        tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),
     1580        tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})
     1581    ];
     1582}
     1583
     1584function analogous(color, results, slices) {
     1585    results = results || 6;
     1586    slices = slices || 30;
     1587
     1588    var hsl = tinycolor(color).toHsl();
     1589    var part = 360 / slices;
     1590    var ret = [tinycolor(color)];
     1591
     1592    for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
     1593        hsl.h = (hsl.h + part) % 360;
     1594        ret.push(tinycolor(hsl));
     1595    }
     1596    return ret;
     1597}
     1598
     1599function monochromatic(color, results) {
     1600    results = results || 6;
     1601    var hsv = tinycolor(color).toHsv();
     1602    var h = hsv.h, s = hsv.s, v = hsv.v;
     1603    var ret = [];
     1604    var modification = 1 / results;
     1605
     1606    while (results--) {
     1607        ret.push(tinycolor({ h: h, s: s, v: v}));
     1608        v = (v + modification) % 1;
     1609    }
     1610
     1611    return ret;
     1612}
     1613
     1614// Utility Functions
     1615// ---------------------
     1616
     1617tinycolor.mix = function(color1, color2, amount) {
     1618    amount = (amount === 0) ? 0 : (amount || 50);
     1619
     1620    var rgb1 = tinycolor(color1).toRgb();
     1621    var rgb2 = tinycolor(color2).toRgb();
     1622
     1623    var p = amount / 100;
     1624
     1625    var rgba = {
     1626        r: ((rgb2.r - rgb1.r) * p) + rgb1.r,
     1627        g: ((rgb2.g - rgb1.g) * p) + rgb1.g,
     1628        b: ((rgb2.b - rgb1.b) * p) + rgb1.b,
     1629        a: ((rgb2.a - rgb1.a) * p) + rgb1.a
     1630    };
     1631
     1632    return tinycolor(rgba);
     1633};
     1634
     1635
     1636// Readability Functions
     1637// ---------------------
     1638// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)
     1639
     1640// `contrast`
     1641// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)
     1642tinycolor.readability = function(color1, color2) {
     1643    var c1 = tinycolor(color1);
     1644    var c2 = tinycolor(color2);
     1645    return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05);
     1646};
     1647
     1648// `isReadable`
     1649// Ensure that foreground and background color combinations meet WCAG2 guidelines.
     1650// The third argument is an optional Object.
     1651//      the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';
     1652//      the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.
     1653// If the entire object is absent, isReadable defaults to {level:"AA",size:"small"}.
     1654
     1655// *Example*
     1656//    tinycolor.isReadable("#000", "#111") => false
     1657//    tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false
     1658tinycolor.isReadable = function(color1, color2, wcag2) {
     1659    var readability = tinycolor.readability(color1, color2);
     1660    var wcag2Parms, out;
     1661
     1662    out = false;
     1663
     1664    wcag2Parms = validateWCAG2Parms(wcag2);
     1665    switch (wcag2Parms.level + wcag2Parms.size) {
     1666        case "AAsmall":
     1667        case "AAAlarge":
     1668            out = readability >= 4.5;
     1669            break;
     1670        case "AAlarge":
     1671            out = readability >= 3;
     1672            break;
     1673        case "AAAsmall":
     1674            out = readability >= 7;
     1675            break;
     1676    }
     1677    return out;
     1678
     1679};
     1680
     1681// `mostReadable`
     1682// Given a base color and a list of possible foreground or background
     1683// colors for that base, returns the most readable color.
     1684// Optionally returns Black or White if the most readable color is unreadable.
     1685// *Example*
     1686//    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255"
     1687//    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString();  // "#ffffff"
     1688//    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3"
     1689//    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff"
     1690tinycolor.mostReadable = function(baseColor, colorList, args) {
     1691    var bestColor = null;
     1692    var bestScore = 0;
     1693    var readability;
     1694    var includeFallbackColors, level, size ;
     1695    args = args || {};
     1696    includeFallbackColors = args.includeFallbackColors ;
     1697    level = args.level;
     1698    size = args.size;
     1699
     1700    for (var i= 0; i < colorList.length ; i++) {
     1701        readability = tinycolor.readability(baseColor, colorList[i]);
     1702        if (readability > bestScore) {
     1703            bestScore = readability;
     1704            bestColor = tinycolor(colorList[i]);
     1705        }
     1706    }
     1707
     1708    if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) {
     1709        return bestColor;
     1710    }
     1711    else {
     1712        args.includeFallbackColors=false;
     1713        return tinycolor.mostReadable(baseColor,["#fff", "#000"],args);
     1714    }
     1715};
     1716
     1717
     1718// Big List of Colors
     1719// ------------------
     1720// <http://www.w3.org/TR/css3-color/#svg-color>
     1721var names = tinycolor.names = {
     1722    aliceblue: "f0f8ff",
     1723    antiquewhite: "faebd7",
     1724    aqua: "0ff",
     1725    aquamarine: "7fffd4",
     1726    azure: "f0ffff",
     1727    beige: "f5f5dc",
     1728    bisque: "ffe4c4",
     1729    black: "000",
     1730    blanchedalmond: "ffebcd",
     1731    blue: "00f",
     1732    blueviolet: "8a2be2",
     1733    brown: "a52a2a",
     1734    burlywood: "deb887",
     1735    burntsienna: "ea7e5d",
     1736    cadetblue: "5f9ea0",
     1737    chartreuse: "7fff00",
     1738    chocolate: "d2691e",
     1739    coral: "ff7f50",
     1740    cornflowerblue: "6495ed",
     1741    cornsilk: "fff8dc",
     1742    crimson: "dc143c",
     1743    cyan: "0ff",
     1744    darkblue: "00008b",
     1745    darkcyan: "008b8b",
     1746    darkgoldenrod: "b8860b",
     1747    darkgray: "a9a9a9",
     1748    darkgreen: "006400",
     1749    darkgrey: "a9a9a9",
     1750    darkkhaki: "bdb76b",
     1751    darkmagenta: "8b008b",
     1752    darkolivegreen: "556b2f",
     1753    darkorange: "ff8c00",
     1754    darkorchid: "9932cc",
     1755    darkred: "8b0000",
     1756    darksalmon: "e9967a",
     1757    darkseagreen: "8fbc8f",
     1758    darkslateblue: "483d8b",
     1759    darkslategray: "2f4f4f",
     1760    darkslategrey: "2f4f4f",
     1761    darkturquoise: "00ced1",
     1762    darkviolet: "9400d3",
     1763    deeppink: "ff1493",
     1764    deepskyblue: "00bfff",
     1765    dimgray: "696969",
     1766    dimgrey: "696969",
     1767    dodgerblue: "1e90ff",
     1768    firebrick: "b22222",
     1769    floralwhite: "fffaf0",
     1770    forestgreen: "228b22",
     1771    fuchsia: "f0f",
     1772    gainsboro: "dcdcdc",
     1773    ghostwhite: "f8f8ff",
     1774    gold: "ffd700",
     1775    goldenrod: "daa520",
     1776    gray: "808080",
     1777    green: "008000",
     1778    greenyellow: "adff2f",
     1779    grey: "808080",
     1780    honeydew: "f0fff0",
     1781    hotpink: "ff69b4",
     1782    indianred: "cd5c5c",
     1783    indigo: "4b0082",
     1784    ivory: "fffff0",
     1785    khaki: "f0e68c",
     1786    lavender: "e6e6fa",
     1787    lavenderblush: "fff0f5",
     1788    lawngreen: "7cfc00",
     1789    lemonchiffon: "fffacd",
     1790    lightblue: "add8e6",
     1791    lightcoral: "f08080",
     1792    lightcyan: "e0ffff",
     1793    lightgoldenrodyellow: "fafad2",
     1794    lightgray: "d3d3d3",
     1795    lightgreen: "90ee90",
     1796    lightgrey: "d3d3d3",
     1797    lightpink: "ffb6c1",
     1798    lightsalmon: "ffa07a",
     1799    lightseagreen: "20b2aa",
     1800    lightskyblue: "87cefa",
     1801    lightslategray: "789",
     1802    lightslategrey: "789",
     1803    lightsteelblue: "b0c4de",
     1804    lightyellow: "ffffe0",
     1805    lime: "0f0",
     1806    limegreen: "32cd32",
     1807    linen: "faf0e6",
     1808    magenta: "f0f",
     1809    maroon: "800000",
     1810    mediumaquamarine: "66cdaa",
     1811    mediumblue: "0000cd",
     1812    mediumorchid: "ba55d3",
     1813    mediumpurple: "9370db",
     1814    mediumseagreen: "3cb371",
     1815    mediumslateblue: "7b68ee",
     1816    mediumspringgreen: "00fa9a",
     1817    mediumturquoise: "48d1cc",
     1818    mediumvioletred: "c71585",
     1819    midnightblue: "191970",
     1820    mintcream: "f5fffa",
     1821    mistyrose: "ffe4e1",
     1822    moccasin: "ffe4b5",
     1823    navajowhite: "ffdead",
     1824    navy: "000080",
     1825    oldlace: "fdf5e6",
     1826    olive: "808000",
     1827    olivedrab: "6b8e23",
     1828    orange: "ffa500",
     1829    orangered: "ff4500",
     1830    orchid: "da70d6",
     1831    palegoldenrod: "eee8aa",
     1832    palegreen: "98fb98",
     1833    paleturquoise: "afeeee",
     1834    palevioletred: "db7093",
     1835    papayawhip: "ffefd5",
     1836    peachpuff: "ffdab9",
     1837    peru: "cd853f",
     1838    pink: "ffc0cb",
     1839    plum: "dda0dd",
     1840    powderblue: "b0e0e6",
     1841    purple: "800080",
     1842    rebeccapurple: "663399",
     1843    red: "f00",
     1844    rosybrown: "bc8f8f",
     1845    royalblue: "4169e1",
     1846    saddlebrown: "8b4513",
     1847    salmon: "fa8072",
     1848    sandybrown: "f4a460",
     1849    seagreen: "2e8b57",
     1850    seashell: "fff5ee",
     1851    sienna: "a0522d",
     1852    silver: "c0c0c0",
     1853    skyblue: "87ceeb",
     1854    slateblue: "6a5acd",
     1855    slategray: "708090",
     1856    slategrey: "708090",
     1857    snow: "fffafa",
     1858    springgreen: "00ff7f",
     1859    steelblue: "4682b4",
     1860    tan: "d2b48c",
     1861    teal: "008080",
     1862    thistle: "d8bfd8",
     1863    tomato: "ff6347",
     1864    turquoise: "40e0d0",
     1865    violet: "ee82ee",
     1866    wheat: "f5deb3",
     1867    white: "fff",
     1868    whitesmoke: "f5f5f5",
     1869    yellow: "ff0",
     1870    yellowgreen: "9acd32"
     1871};
     1872
     1873// Make it easy to access colors via `hexNames[hex]`
     1874var hexNames = tinycolor.hexNames = flip(names);
     1875
     1876
     1877// Utilities
     1878// ---------
     1879
     1880// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
     1881function flip(o) {
     1882    var flipped = { };
     1883    for (var i in o) {
     1884        if (o.hasOwnProperty(i)) {
     1885            flipped[o[i]] = i;
     1886        }
     1887    }
     1888    return flipped;
     1889}
     1890
     1891// Return a valid alpha value [0,1] with all invalid values being set to 1
     1892function boundAlpha(a) {
     1893    a = parseFloat(a);
     1894
     1895    if (isNaN(a) || a < 0 || a > 1) {
     1896        a = 1;
     1897    }
     1898
     1899    return a;
     1900}
     1901
     1902// Take input from [0, n] and return it as [0, 1]
     1903function bound01(n, max) {
     1904    if (isOnePointZero(n)) { n = "100%"; }
     1905
     1906    var processPercent = isPercentage(n);
     1907    n = mathMin(max, mathMax(0, parseFloat(n)));
     1908
     1909    // Automatically convert percentage into number
     1910    if (processPercent) {
     1911        n = parseInt(n * max, 10) / 100;
     1912    }
     1913
     1914    // Handle floating point rounding errors
     1915    if ((Math.abs(n - max) < 0.000001)) {
     1916        return 1;
     1917    }
     1918
     1919    // Convert into [0, 1] range if it isn't already
     1920    return (n % max) / parseFloat(max);
     1921}
     1922
     1923// Force a number between 0 and 1
     1924function clamp01(val) {
     1925    return mathMin(1, mathMax(0, val));
     1926}
     1927
     1928// Parse a base-16 hex value into a base-10 integer
     1929function parseIntFromHex(val) {
     1930    return parseInt(val, 16);
     1931}
     1932
     1933// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
     1934// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
     1935function isOnePointZero(n) {
     1936    return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
     1937}
     1938
     1939// Check to see if string passed in is a percentage
     1940function isPercentage(n) {
     1941    return typeof n === "string" && n.indexOf('%') != -1;
     1942}
     1943
     1944// Force a hex value to have 2 characters
     1945function pad2(c) {
     1946    return c.length == 1 ? '0' + c : '' + c;
     1947}
     1948
     1949// Replace a decimal with it's percentage value
     1950function convertToPercentage(n) {
     1951    if (n <= 1) {
     1952        n = (n * 100) + "%";
     1953    }
     1954
     1955    return n;
     1956}
     1957
     1958// Converts a decimal to a hex value
     1959function convertDecimalToHex(d) {
     1960    return Math.round(parseFloat(d) * 255).toString(16);
     1961}
     1962// Converts a hex value to a decimal
     1963function convertHexToDecimal(h) {
     1964    return (parseIntFromHex(h) / 255);
     1965}
     1966
     1967var matchers = (function() {
     1968
     1969    // <http://www.w3.org/TR/css3-values/#integers>
     1970    var CSS_INTEGER = "[-\\+]?\\d+%?";
     1971
     1972    // <http://www.w3.org/TR/css3-values/#number-value>
     1973    var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
     1974
     1975    // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.
     1976    var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
     1977
     1978    // Actual matching.
     1979    // Parentheses and commas are optional, but not required.
     1980    // Whitespace can take the place of commas or opening paren
     1981    var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
     1982    var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
     1983
     1984    return {
     1985        CSS_UNIT: new RegExp(CSS_UNIT),
     1986        rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
     1987        rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
     1988        hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
     1989        hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
     1990        hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
     1991        hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
     1992        hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
     1993        hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
     1994        hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
     1995        hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
     1996    };
     1997})();
     1998
     1999// `isValidCSSUnit`
     2000// Take in a single string / number and check to see if it looks like a CSS unit
     2001// (see `matchers` above for definition).
     2002function isValidCSSUnit(color) {
     2003    return !!matchers.CSS_UNIT.exec(color);
     2004}
     2005
     2006// `stringInputToObject`
     2007// Permissive string parsing.  Take in a number of formats, and output an object
     2008// based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
     2009function stringInputToObject(color) {
     2010
     2011    color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();
     2012    var named = false;
     2013    if (names[color]) {
     2014        color = names[color];
     2015        named = true;
     2016    }
     2017    else if (color == 'transparent') {
     2018        return { r: 0, g: 0, b: 0, a: 0, format: "name" };
     2019    }
     2020
     2021    // Try to match string input using regular expressions.
     2022    // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
     2023    // Just return an object and let the conversion functions handle that.
     2024    // This way the result will be the same whether the tinycolor is initialized with string or object.
     2025    var match;
     2026    if ((match = matchers.rgb.exec(color))) {
     2027        return { r: match[1], g: match[2], b: match[3] };
     2028    }
     2029    if ((match = matchers.rgba.exec(color))) {
     2030        return { r: match[1], g: match[2], b: match[3], a: match[4] };
     2031    }
     2032    if ((match = matchers.hsl.exec(color))) {
     2033        return { h: match[1], s: match[2], l: match[3] };
     2034    }
     2035    if ((match = matchers.hsla.exec(color))) {
     2036        return { h: match[1], s: match[2], l: match[3], a: match[4] };
     2037    }
     2038    if ((match = matchers.hsv.exec(color))) {
     2039        return { h: match[1], s: match[2], v: match[3] };
     2040    }
     2041    if ((match = matchers.hsva.exec(color))) {
     2042        return { h: match[1], s: match[2], v: match[3], a: match[4] };
     2043    }
     2044    if ((match = matchers.hex8.exec(color))) {
     2045        return {
     2046            r: parseIntFromHex(match[1]),
     2047            g: parseIntFromHex(match[2]),
     2048            b: parseIntFromHex(match[3]),
     2049            a: convertHexToDecimal(match[4]),
     2050            format: named ? "name" : "hex8"
     2051        };
     2052    }
     2053    if ((match = matchers.hex6.exec(color))) {
     2054        return {
     2055            r: parseIntFromHex(match[1]),
     2056            g: parseIntFromHex(match[2]),
     2057            b: parseIntFromHex(match[3]),
     2058            format: named ? "name" : "hex"
     2059        };
     2060    }
     2061    if ((match = matchers.hex4.exec(color))) {
     2062        return {
     2063            r: parseIntFromHex(match[1] + '' + match[1]),
     2064            g: parseIntFromHex(match[2] + '' + match[2]),
     2065            b: parseIntFromHex(match[3] + '' + match[3]),
     2066            a: convertHexToDecimal(match[4] + '' + match[4]),
     2067            format: named ? "name" : "hex8"
     2068        };
     2069    }
     2070    if ((match = matchers.hex3.exec(color))) {
     2071        return {
     2072            r: parseIntFromHex(match[1] + '' + match[1]),
     2073            g: parseIntFromHex(match[2] + '' + match[2]),
     2074            b: parseIntFromHex(match[3] + '' + match[3]),
     2075            format: named ? "name" : "hex"
     2076        };
     2077    }
     2078
     2079    return false;
     2080}
     2081
     2082function validateWCAG2Parms(parms) {
     2083    // return valid WCAG2 parms for isReadable.
     2084    // If input parms are invalid, return {"level":"AA", "size":"small"}
     2085    var level, size;
     2086    parms = parms || {"level":"AA", "size":"small"};
     2087    level = (parms.level || "AA").toUpperCase();
     2088    size = (parms.size || "small").toLowerCase();
     2089    if (level !== "AA" && level !== "AAA") {
     2090        level = "AA";
     2091    }
     2092    if (size !== "small" && size !== "large") {
     2093        size = "small";
     2094    }
     2095    return {"level":level, "size":size};
     2096}
     2097
     2098// Node: Export function
     2099if ( true && module.exports) {
     2100    module.exports = tinycolor;
     2101}
     2102// AMD/requirejs: Define the module
     2103else if (true) {
     2104    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {return tinycolor;}).call(exports, __webpack_require__, exports, module),
     2105                __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
     2106}
     2107// Browser: Expose to window
     2108else {}
     2109
     2110})(Math);
     2111
     2112
     2113/***/ }),
     2114
     2115/***/ "./node_modules/webpack/buildin/global.js":
     2116/*!***********************************!*\
     2117  !*** (webpack)/buildin/global.js ***!
     2118  \***********************************/
     2119/*! no static exports found */
     2120/***/ (function(module, exports) {
     2121
     2122var g;
     2123
     2124// This works in non-strict mode
     2125g = (function() {
     2126    return this;
     2127})();
     2128
     2129try {
     2130    // This works if eval is allowed (see CSP)
     2131    g = g || new Function("return this")();
     2132} catch (e) {
     2133    // This works if the window reference is available
     2134    if (typeof window === "object") g = window;
     2135}
     2136
     2137// g can still be undefined, but nothing to do about it...
     2138// We return undefined, instead of nothing here, so it's
     2139// easier to handle this case. if(!global) { ...}
     2140
     2141module.exports = g;
     2142
     2143
     2144/***/ }),
     2145
     2146/***/ "./src/grid-layout-basic.js":
     2147/*!**********************************!*\
     2148  !*** ./src/grid-layout-basic.js ***!
     2149  \**********************************/
     2150/*! exports provided: name, settings */
     2151/***/ (function(module, __webpack_exports__, __webpack_require__) {
     2152
     2153"use strict";
     2154__webpack_require__.r(__webpack_exports__);
     2155/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
     2156/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
     2157/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     2158/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     2159/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
     2160/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
     2161/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
     2162/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__);
     2163/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     2164/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
     2165/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
     2166/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);
     2167/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
     2168/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__);
     2169/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
     2170/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__);
     2171
     2172
     2173
     2174/**
     2175 * WordPress dependencies
     2176 */
     2177
     2178
     2179
     2180
     2181
     2182
     2183var name = 'gecko/grid-layout-basic';
     2184var settings = {
     2185  title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Basic'),
     2186  parent: ['gecko/grid-layout'],
     2187  icon: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["SVG"], {
     2188    viewBox: "0 0 24 24",
     2189    xmlns: "http://www.w3.org/2000/svg"
     2190  }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Path"], {
     2191    d: "M0,0h24v24H0V0z M0,0h24v24H0V0z",
     2192    fill: "none"
     2193  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Path"], {
     2194    d: "m20 7v10h-16v-10h16m0-2h-16c-1.1 0-1.99 0.9-1.99 2l-0.01 10c0 1.1 0.9 2 2 2h16c1.1 0 2-0.9 2-2v-10c0-1.1-0.9-2-2-2z"
     2195  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2196    x: "11",
     2197    y: "8",
     2198    width: "2",
     2199    height: "2"
     2200  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2201    x: "11",
     2202    y: "11",
     2203    width: "2",
     2204    height: "2"
     2205  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2206    x: "8",
     2207    y: "8",
     2208    width: "2",
     2209    height: "2"
     2210  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2211    x: "8",
     2212    y: "11",
     2213    width: "2",
     2214    height: "2"
     2215  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2216    x: "5",
     2217    y: "11",
     2218    width: "2",
     2219    height: "2"
     2220  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2221    x: "5",
     2222    y: "8",
     2223    width: "2",
     2224    height: "2"
     2225  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2226    x: "8",
     2227    y: "14",
     2228    width: "8",
     2229    height: "2"
     2230  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2231    x: "14",
     2232    y: "11",
     2233    width: "2",
     2234    height: "2"
     2235  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2236    x: "14",
     2237    y: "8",
     2238    width: "2",
     2239    height: "2"
     2240  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2241    x: "17",
     2242    y: "11",
     2243    width: "2",
     2244    height: "2"
     2245  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
     2246    x: "17",
     2247    y: "8",
     2248    width: "2",
     2249    height: "2"
     2250  })),
     2251  description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('An image grid block.'),
     2252  category: 'common',
     2253  supports: {
     2254    className: true,
     2255    inserter: true,
     2256    reusable: false,
     2257    html: false
     2258  },
     2259  styles: [{
     2260    name: 'default',
     2261    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Default'),
     2262    isDefault: true
     2263  }],
     2264  attributes: {
     2265    h: {
     2266      type: 'number',
     2267      default: 1
     2268    },
     2269    w: {
     2270      type: 'number',
     2271      default: 1
     2272    }
     2273  },
     2274  transforms: {
     2275    from: [{
     2276      type: 'block',
     2277      blocks: ['gecko/grid-layout-image', 'gecko/grid-layout-item'],
     2278      transform: function transform(attributes, innerBlocks) {
     2279        var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work.
     2280        // It appears that innerBlocks will be added in the future.
     2281
     2282        var h = attributes.h,
     2283            w = attributes.w;
     2284        return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__["createBlock"])('gecko/grid-layout-basic', {
     2285          h: h,
     2286          w: w
     2287        }, selected.innerBlocks);
     2288      }
     2289    }]
     2290  },
     2291  deprecated: [{
     2292    migrate: function migrate() {},
     2293    save: function save() {
     2294      return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null);
     2295    }
     2296  }],
     2297  edit: function edit(_ref) {
     2298    var attributes = _ref.attributes,
     2299        setAttributes = _ref.setAttributes,
     2300        className = _ref.className,
     2301        insertBlocksAfter = _ref.insertBlocksAfter;
     2302    var h = attributes.h,
     2303        w = attributes.w;
     2304    var styles = {
     2305      gridColumnEnd: 'span ' + w,
     2306      gridRowEnd: 'span ' + h
     2307    };
     2308    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["PanelBody"], {
     2309      title: "Grid Item"
     2310    }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["RangeControl"], {
     2311      label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Width'),
     2312      value: w,
     2313      onChange: function onChange(next) {
     2314        setAttributes({
     2315          w: next
     2316        });
     2317      },
     2318      min: 1,
     2319      max: 12
     2320    }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["RangeControl"], {
     2321      label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Span Rows'),
     2322      value: h,
     2323      onChange: function onChange(next) {
     2324        setAttributes({
     2325          h: next
     2326        });
     2327      },
     2328      min: 1,
     2329      max: 12
     2330    }))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
     2331      className: "gecko-grid-layout-editor-styles",
     2332      style: styles
     2333    }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
     2334      className: "wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-basic ".concat(attributes.className)
     2335    }, typeof insertBlocksAfter === 'function' //This line makes sure styles do not break
     2336    ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"], {
     2337      templateLock: false
     2338    }) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, "Lorem Ipsum") // This is what shows as the preview content.
     2339    ));
     2340  },
     2341  save: function save() {
     2342    // Honestly I don't want to do this but conventions are conventions.
     2343    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null));
     2344  }
     2345};
     2346
     2347/***/ }),
     2348
     2349/***/ "./src/grid-layout-image.js":
     2350/*!**********************************!*\
     2351  !*** ./src/grid-layout-image.js ***!
     2352  \**********************************/
     2353/*! exports provided: name, settings */
     2354/***/ (function(module, __webpack_exports__, __webpack_require__) {
     2355
     2356"use strict";
     2357__webpack_require__.r(__webpack_exports__);
     2358/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
     2359/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
     2360/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     2361/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     2362/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
     2363/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
     2364/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/debounce */ "./node_modules/lodash/debounce.js");
     2365/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_2__);
     2366/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
     2367/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__);
     2368/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     2369/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
     2370/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
     2371/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__);
     2372/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
     2373/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__);
     2374/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
     2375/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_7__);
     2376
     2377
     2378
     2379/**
     2380 * WordPress dependencies
     2381 */
     2382
     2383
     2384
     2385
     2386
     2387
     2388
     2389var ALLOWED_BLOCKS = ['core/paragraph', 'core/heading', 'core/button', 'core/list', 'core/quote'];
     2390var name = 'gecko/grid-layout-image';
     2391var settings = {
     2392  title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Image'),
     2393  parent: ['gecko/grid-layout'],
     2394  icon: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["SVG"], {
     2395    viewBox: "0 0 24 24",
     2396    xmlns: "http://www.w3.org/2000/svg"
     2397  }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
     2398    d: "M0,0h24v24H0V0z",
     2399    fill: "none"
     2400  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
     2401    d: "m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z"
     2402  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
     2403    d: "m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z"
     2404  })),
     2405  description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('An image Grid Block.'),
     2406  category: 'common',
     2407  supports: {
     2408    className: true,
     2409    inserter: true,
     2410    reusable: false,
     2411    html: false
     2412  },
     2413  styles: [{
     2414    name: 'default',
     2415    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Default'),
     2416    isDefault: true
     2417  }, {
     2418    name: 'hover',
     2419    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Hover')
     2420  }, {
     2421    name: 'no-caption',
     2422    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('No Caption')
     2423  }],
     2424  attributes: {
     2425    h: {
     2426      type: 'number',
     2427      default: 1
     2428    },
     2429    w: {
     2430      type: 'number',
     2431      default: 1
     2432    },
     2433    minHeight: {
     2434      type: 'number',
     2435      default: 200
     2436    },
     2437    imgId: {
     2438      type: 'number'
     2439    },
     2440    imgUrl: {
     2441      type: 'string'
     2442    }
     2443  },
     2444  transforms: {
     2445    from: [{
     2446      type: 'block',
     2447      blocks: ['gecko/grid-layout-basic', 'gecko/grid-layout-item'],
     2448      transform: function transform(attributes, innerBlocks) {
     2449        var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_7__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work.
     2450        // It appears that innerBlocks will be added in the future.
     2451
     2452        var h = attributes.h,
     2453            w = attributes.w,
     2454            bgMedia = attributes.bgMedia,
     2455            bgMediaUrl = attributes.bgMediaUrl,
     2456            mediaId = attributes.mediaId,
     2457            mediaUrl = attributes.mediaUrl,
     2458            minHeight = attributes.minHeight;
     2459        return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__["createBlock"])('gecko/grid-layout-image', {
     2460          h: h,
     2461          w: w,
     2462          imgId: bgMedia || mediaId,
     2463          imgUrl: bgMediaUrl || mediaUrl,
     2464          minHeight: minHeight
     2465        }, selected.innerBlocks);
     2466      }
     2467    }]
     2468  },
     2469  deprecated: [{
     2470    migrate: function migrate() {},
     2471    save: function save() {
     2472      return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"].Content, null);
     2473    }
     2474  }],
     2475  edit: function edit(_ref) {
     2476    var attributes = _ref.attributes,
     2477        setAttributes = _ref.setAttributes,
     2478        className = _ref.className,
     2479        insertBlocksAfter = _ref.insertBlocksAfter,
     2480        toggleSelection = _ref.toggleSelection;
     2481    var h = attributes.h,
     2482        w = attributes.w,
     2483        imgId = attributes.imgId,
     2484        imgUrl = attributes.imgUrl,
     2485        minHeight = attributes.minHeight;
     2486    var styles = {
     2487      gridColumnEnd: 'span ' + w,
     2488      gridRowEnd: 'span ' + h,
     2489      minHeight: minHeight + 'px'
     2490    };
     2491
     2492    var onResizing = function onResizing(event, direction, elt, delta) {
     2493      if (direction === 'bottom') {
     2494        var newMinHeight = elt.clientHeight > 600 ? 600 : elt.clientHeight;
     2495        setAttributes({
     2496          minHeight: newMinHeight
     2497        });
     2498        elt.style.height = "100%";
     2499      }
     2500
     2501      ;
     2502      if (direction !== 'right') return; // console.log(elt);
     2503
     2504      var columnWidth = Math.floor(elt.parentNode.offsetWidth / w);
     2505      var currentSpan = Math.floor(elt.parentNode.offsetWidth / columnWidth);
     2506      var elColWidth = Math.floor(elt.clientWidth / w);
     2507      var spans = Math.floor(elt.clientWidth / columnWidth);
     2508      var toUpdate = Math.floor(parseInt(delta.width, 10) / columnWidth);
     2509      var original = w - toUpdate;
     2510      var newWidth = spans;
     2511
     2512      if (newWidth > 12) {
     2513        newWidth = 12;
     2514      }
     2515
     2516      if (newWidth < 1) {
     2517        newWidth = 1;
     2518      }
     2519
     2520      setAttributes({
     2521        w: newWidth
     2522      });
     2523      elt.style.width = "100%"; // }
     2524
     2525      return;
     2526    };
     2527
     2528    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelBody"], {
     2529      title: "Grid Item"
     2530    }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
     2531      label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Minimum Height'),
     2532      value: minHeight,
     2533      onChange: function onChange(next) {
     2534        setAttributes({
     2535          minHeight: next
     2536        });
     2537      },
     2538      min: "50",
     2539      max: "600",
     2540      step: "1"
     2541    }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
     2542      label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Width'),
     2543      value: w,
     2544      onChange: function onChange(next) {
     2545        setAttributes({
     2546          w: next
     2547        });
     2548      },
     2549      min: 1,
     2550      max: 12
     2551    }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
     2552      label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Span Rows'),
     2553      value: h,
     2554      onChange: function onChange(next) {
     2555        setAttributes({
     2556          h: next
     2557        });
     2558      },
     2559      min: 1,
     2560      max: 12
     2561    }))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["BlockControls"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Toolbar"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["MediaUpload"], {
     2562      onSelect: function onSelect(value) {
     2563        // console.log(value);
     2564        setAttributes({
     2565          imgId: value.id,
     2566          imgUrl: value.url
     2567        });
     2568      },
     2569      type: ['image'],
     2570      value: imgId ? imgId : null,
     2571      render: function render(_ref2) {
     2572        var open = _ref2.open;
     2573        return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["IconButton"], {
     2574          className: "components-icon-button components-toolbar__control",
     2575          label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Edit image'),
     2576          onClick: open,
     2577          icon: "edit"
     2578        });
     2579      }
     2580    }))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
     2581      className: "gecko-grid-layout-editor-styles",
     2582      style: styles
     2583    }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["ResizableBox"], {
     2584      size: {
     2585        width: '',
     2586        height: '100%'
     2587      } // minHeight = "50"
     2588      // minWidth = "100%"
     2589      ,
     2590      className: "wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-image ".concat(attributes.className) // minHeight={ minHeight }
     2591      // maxHeight={600}
     2592      // lockAspectRatio
     2593      ,
     2594      enable: {
     2595        top: false,
     2596        right: true,
     2597        bottom: true,
     2598        left: false
     2599      },
     2600      onResizeStart: function onResizeStart(event, direction, elt, delta) {
     2601        toggleSelection(false);
     2602      },
     2603      onResize: lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default()(onResizing, 250),
     2604      onResizeStop: function onResizeStop(event, direction, elt, delta) {
     2605        elt.style.width = "100%";
     2606        if (direction !== 'bottom') return;
     2607        var newMinHeight = elt.clientHeight > 600 ? 600 : elt.clientHeight;
     2608        setAttributes({
     2609          minHeight: newMinHeight
     2610        });
     2611        toggleSelection(true);
     2612      }
     2613    }, !imgId && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["MediaPlaceholder"], {
     2614      onSelect: function onSelect(value) {
     2615        setAttributes({
     2616          imgId: value.id,
     2617          imgUrl: value.url
     2618        });
     2619      },
     2620      allowedTypes: ['image'],
     2621      accept: "image/*"
     2622    }), imgUrl && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", {
     2623      className: "gecko-grid-layout-image__image",
     2624      src: imgUrl
     2625    }), imgId && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("figcaption", {
     2626      className: "gecko-grid-layout-image__caption"
     2627    }, typeof insertBlocksAfter === 'function' //This line makes sure styles do not break
     2628    ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"], {
     2629      templateLock: false,
     2630      allowedBlocks: ALLOWED_BLOCKS
     2631    }) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, "Lorem Ipsum") // This is what shows as the preview content.
     2632    )));
     2633  },
     2634  save: function save() {
     2635    // Honestly I don't want to do this but conventions are conventions.
     2636    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"].Content, null));
     2637  }
     2638};
     2639
     2640/***/ }),
     2641
     2642/***/ "./src/grid-layout-item.js":
     2643/*!*********************************!*\
     2644  !*** ./src/grid-layout-item.js ***!
     2645  \*********************************/
     2646/*! exports provided: name, settings */
     2647/***/ (function(module, __webpack_exports__, __webpack_require__) {
     2648
     2649"use strict";
     2650__webpack_require__.r(__webpack_exports__);
     2651/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
     2652/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
     2653/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     2654/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     2655/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
     2656/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
     2657/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinycolor2 */ "./node_modules/tinycolor2/tinycolor.js");
     2658/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinycolor2__WEBPACK_IMPORTED_MODULE_2__);
     2659/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
     2660/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__);
     2661/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     2662/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
     2663/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
     2664/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__);
     2665/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
     2666/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__);
     2667/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
     2668/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_7__);
     2669/* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated");
     2670/* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_8__);
     2671
     2672
     2673
     2674/**
     2675 * WordPress dependencies
     2676 */
     2677
     2678
     2679
     2680
     2681
     2682
     2683
     2684
     2685var name = 'gecko/grid-layout-item';
     2686var settings = {
     2687  title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Item (deprecated)'),
     2688  parent: ['gecko/grid-layout'],
     2689  icon: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["SVG"], {
     2690    xmlns: "http://www.w3.org/2000/svg",
     2691    viewBox: "0 0 24 24"
     2692  }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
     2693    fill: "none",
     2694    d: "M0 0h24v24H0V0z"
     2695  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
     2696    d: "M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16zm0-11.47L17.74 9 12 13.47 6.26 9 12 4.53z"
     2697  })),
     2698  description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('This block is deprecated. Please use basic or image block instead.'),
     2699  category: 'common',
     2700  supports: {
     2701    inserter: false
     2702  },
     2703  styles: [{
     2704    name: 'default',
     2705    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Default'),
     2706    isDefault: true
     2707  }, {
     2708    name: 'hover',
     2709    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Hover')
     2710  }],
     2711  attributes: {
     2712    type: {
     2713      type: 'string',
     2714      default: undefined
     2715    },
     2716    //solid, image, image-content
     2717    h: {
     2718      type: 'number',
     2719      default: 1
     2720    },
     2721    w: {
     2722      type: 'number'
     2723    },
     2724    minHeight: {
     2725      type: 'number',
     2726      default: 200
     2727    },
     2728    opacity: {
     2729      type: 'number',
     2730      default: 1
     2731    },
     2732    bgMedia: {
     2733      type: 'number'
     2734    },
     2735    bgMediaUrl: {
     2736      type: 'string'
     2737    },
     2738    bgColor: {
     2739      type: 'string'
     2740    },
     2741    bgColorSlug: {
     2742      type: 'string'
     2743    },
     2744    bgColorBrightness: {
     2745      type: 'number'
     2746    } //light or dark
     2747
     2748  },
     2749  deprecated: [{
     2750    migrate: function migrate(attributes, innerBlocks) {
     2751      // const selected = select('core/editor').getSelectedBlock(); // because innerBlocks does not work.
     2752      // It appears that innerBlocks will be added in the future.
     2753      var h = attributes.h,
     2754          w = attributes.w,
     2755          bgMedia = attributes.bgMedia,
     2756          bgMediaUrl = attributes.bgMediaUrl,
     2757          minHeight = attributes.minHeight;
     2758
     2759      if (bgMedia) {
     2760        return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__["createBlock"])('gecko/grid-layout-image', {
     2761          h: h,
     2762          w: w,
     2763          imgId: bgMedia,
     2764          imgUrl: bgMediaUrl,
     2765          minHeight: minHeight
     2766        }, innerBlocks);
     2767      }
     2768
     2769      return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__["createBlock"])('gecko/grid-layout-basic', {
     2770        h: h,
     2771        w: w
     2772      }, innerBlocks);
     2773    },
     2774    save: function save() {
     2775      return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"].Content, null);
     2776    }
     2777  }],
     2778  edit: function edit(_ref) {
     2779    var attributes = _ref.attributes,
     2780        setAttributes = _ref.setAttributes,
     2781        className = _ref.className,
     2782        insertBlocksAfter = _ref.insertBlocksAfter;
     2783    var opacity = attributes.opacity,
     2784        h = attributes.h,
     2785        w = attributes.w,
     2786        type = attributes.type,
     2787        padding = attributes.padding,
     2788        bgMedia = attributes.bgMedia,
     2789        bgMediaUrl = attributes.bgMediaUrl,
     2790        bgColor = attributes.bgColor,
     2791        bgColorBrightness = attributes.bgColorBrightness,
     2792        bgColorSlug = attributes.bgColorSlug,
     2793        minHeight = attributes.minHeight;
     2794    _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_8___default()('Grid Layout Idem', {
     2795      alternative: 'Basic or Image',
     2796      plugin: 'Gecko Grid Layout'
     2797    });
     2798    var styles = {
     2799      '--background': bgColor,
     2800      '--opacity': opacity,
     2801      gridColumnEnd: 'span ' + w,
     2802      gridRowEnd: 'span ' + h,
     2803      backgroundColor: bgColor,
     2804      backgroundImage: 'url(' + bgMediaUrl + ')',
     2805      minHeight: minHeight + 'px'
     2806    };
     2807    var lightOrDark = 'light';
     2808    if (bgColorBrightness < 130) lightOrDark = 'dark';
     2809    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelBody"], {
     2810      title: "Settings"
     2811    }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
     2812      label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Width'),
     2813      value: w,
     2814      onChange: function onChange(next) {
     2815        setAttributes({
     2816          w: next
     2817        });
     2818      },
     2819      min: 1,
     2820      max: 12
     2821    }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
     2822      label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Span Rows'),
     2823      value: h,
     2824      onChange: function onChange(next) {
     2825        setAttributes({
     2826          h: next
     2827        });
     2828      },
     2829      min: 1,
     2830      max: 12
     2831    })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelBody"], {
     2832      title: "Style"
     2833    }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
     2834      label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Minimum Height'),
     2835      value: minHeight,
     2836      onChange: function onChange(next) {
     2837        setAttributes({
     2838          minHeight: next
     2839        });
     2840      },
     2841      min: "50",
     2842      max: "600",
     2843      step: "1"
     2844    }), type !== "solid" && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["MediaUpload"], {
     2845      onSelect: function onSelect(value) {
     2846        // console.log(value);
     2847        setAttributes({
     2848          bgMedia: value.id,
     2849          bgMediaUrl: value.url
     2850        });
     2851      },
     2852      type: ['image', 'video'],
     2853      value: bgMedia ? bgMedia : null,
     2854      render: function render(_ref2) {
     2855        var open = _ref2.open;
     2856        return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, bgMediaUrl && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", {
     2857          src: bgMediaUrl,
     2858          onClick: open,
     2859          width: "100%",
     2860          height: "auto",
     2861          style: {
     2862            cursor: "pointer"
     2863          }
     2864        }), !bgMediaUrl && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
     2865          className: 'button button-large',
     2866          onClick: open
     2867        }, "Choose Background"));
     2868      }
     2869    }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("hr", null), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["ColorPalette"], {
     2870      label: "Background Color",
     2871      value: bgColor ? bgColor.color : undefined,
     2872      onChange: function onChange(value) {
     2873        var settings = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_7__["select"])('core/editor').getEditorSettings();
     2874        var colorSlug = value ? Object(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["getColorObjectByColorValue"])(settings.colors, value).slug : undefined;
     2875        setAttributes({
     2876          bgColorSlug: colorSlug
     2877        });
     2878        var brightness = value ? tinycolor2__WEBPACK_IMPORTED_MODULE_2___default()(value).getBrightness() : undefined;
     2879        setAttributes({
     2880          bgColorBrightness: brightness
     2881        });
     2882        setAttributes({
     2883          bgColor: value
     2884        });
     2885      }
     2886    }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("hr", null)))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
     2887      className: "gecko-grid-layout-editor-styles",
     2888      style: styles
     2889    }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
     2890      className: "wp-block-gecko-grid-layout-editor__wrap".concat(type, " ").concat(attributes.className, " has-").concat(bgColorSlug, "-background-color is-").concat(lightOrDark, "-background")
     2891    }, (type === 'image' || type === 'image-content') && !bgMedia && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["MediaPlaceholder"], {
     2892      onSelect: function onSelect(value) {
     2893        setAttributes({
     2894          bgMedia: value.id,
     2895          bgMediaUrl: value.url
     2896        });
     2897      },
     2898      allowedTypes: ['image'],
     2899      accept: "image/*"
     2900    }), typeof insertBlocksAfter === 'function' && //This line makes sure styles do not break
     2901    react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"], {
     2902      templateLock: false
     2903    })));
     2904  },
     2905  save: function save() {
     2906    // Honestly I don't want to do this but conventions are conventions.
     2907    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"].Content, null));
     2908  }
     2909};
     2910
     2911/***/ }),
     2912
     2913/***/ "./src/grid-layout.js":
     2914/*!****************************!*\
     2915  !*** ./src/grid-layout.js ***!
     2916  \****************************/
     2917/*! exports provided: name, settings */
     2918/***/ (function(module, __webpack_exports__, __webpack_require__) {
     2919
     2920"use strict";
     2921__webpack_require__.r(__webpack_exports__);
     2922/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
     2923/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
     2924/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     2925/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     2926/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
     2927/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
     2928/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     2929/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
     2930/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
     2931/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__);
     2932/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
     2933/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_4__);
     2934/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
     2935/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_5__);
     2936/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
     2937/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_6__);
     2938/* harmony import */ var _template_select__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./template-select */ "./src/template-select.js");
     2939
     2940
     2941
     2942/**
     2943 * WordPress dependencies
     2944 */
     2945
     2946
     2947
     2948
     2949
     2950
     2951
     2952/**
     2953 * Allowed blocks constant is passed to InnerBlocks precisely as specified here.
     2954 * The contents of the array should never change.
     2955 * The array should contain the name of each block that is allowed.
     2956 *
     2957 * @constant
     2958 * @type {string[]}
     2959*/
     2960
     2961var ALLOWED_BLOCKS = ['gecko/grid-layout-item', 'gecko/grid-layout-image', 'gecko/grid-layout-basic'];
     2962var name = 'gecko/grid-layout';
     2963var settings = {
     2964  title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Grid'),
     2965  icon: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["SVG"], {
     2966    viewBox: "0 0 24 24",
     2967    xmlns: "http://www.w3.org/2000/svg"
     2968  }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
     2969    fill: "none",
     2970    d: "M0 0h24v24H0V0z"
     2971  }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["G"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
     2972    d: "M4,13 L8,13 L8,10 L4,10 L4,13 Z M4,15 L4,18 L8,18 L8,15 L4,15 Z M10,13 L14,13 L14,10 L10,10 L10,13 Z M10,15 L10,18 L14,18 L14,15 L10,15 Z M20,13 L20,10 L16,10 L16,13 L20,13 Z M20,15 L16,15 L16,18 L20,18 L20,15 Z M4,8 L8,8 L8,5 L4,5 L4,8 Z M10,8 L14,8 L14,5 L10,5 L10,8 Z M20,8 L20,5 L16,5 L16,8 L20,8 Z M4,3 L20,3 C21.1045695,3 22,3.95139491 22,5.125 L22,17.875 C22,19.0486051 21.1045695,20 20,20 L4,20 C2.8954305,20 2,19.0486051 2,17.875 L2,5.125 C2,3.95139491 2.8954305,3 4,3 Z"
     2973  }))),
     2974  category: 'layout',
     2975  description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Use CSS Grid to build layouts and, then add whatever content blocks you’d like.'),
     2976  supports: {
     2977    align: ['wide', 'full'],
     2978    html: false
     2979  },
     2980  deprecated: [{
     2981    migrate: function migrate() {},
     2982    save: function save() {
     2983      return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_4__["InnerBlocks"].Content, null);
     2984    }
     2985  }],
     2986  transforms: {
     2987    from: [{
     2988      type: 'block',
     2989      blocks: ['core/columns'],
     2990      transform: function transform(attributes) {
     2991        var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_5__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work.
     2992
     2993        var columns = selected.innerBlocks;
     2994        var count = columns.length;
     2995        var w = Math.floor(12 / count);
     2996        var innerBlocks = [];
     2997        columns.map(function (column) {
     2998          var block = Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_6__["createBlock"])('gecko/grid-layout-basic', {
     2999            w: w
     3000          }, column.innerBlocks);
     3001          innerBlocks.push(block);
     3002        });
     3003        return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_6__["createBlock"])('gecko/grid-layout', {}, innerBlocks);
     3004      }
     3005    }]
     3006  },
     3007  styles: [{
     3008    name: 'default',
     3009    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Default'),
     3010    isDefault: true
     3011  }, {
     3012    name: 'no-gap',
     3013    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('No Gap')
     3014  }],
     3015  edit: function edit(_ref) {
     3016    var insertBlocksAfter = _ref.insertBlocksAfter,
     3017        clientId = _ref.clientId;
     3018    // Get the block so we can see if it had innerblocks
     3019    var block = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_5__["select"])('core/editor').getBlocksByClientId(clientId)[0];
     3020    var hasInnerBlocks = block && block.innerBlocks ? block.innerBlocks.length > 0 : false;
     3021    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
     3022      className: "wp-block-gecko-grid-layout-editor"
     3023    }, typeof insertBlocksAfter === 'function' ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_template_select__WEBPACK_IMPORTED_MODULE_7__["default"], {
     3024      hasInnnerBlocks: hasInnerBlocks,
     3025      allowedBlocks: ALLOWED_BLOCKS
     3026    }) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Preview Not Available'))));
     3027  },
     3028  save: function save() {
     3029    // Honestly I don't want to do this but conventions are conventions.
     3030    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_4__["InnerBlocks"].Content, null));
     3031  }
     3032};
     3033
     3034/***/ }),
     3035
     3036/***/ "./src/index.js":
     3037/*!**********************!*\
     3038  !*** ./src/index.js ***!
     3039  \**********************/
     3040/*! no exports provided */
     3041/***/ (function(module, __webpack_exports__, __webpack_require__) {
     3042
     3043"use strict";
     3044__webpack_require__.r(__webpack_exports__);
     3045/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
     3046/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);
     3047/* harmony import */ var _grid_layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./grid-layout */ "./src/grid-layout.js");
     3048/* harmony import */ var _grid_layout_item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./grid-layout-item */ "./src/grid-layout-item.js");
     3049/* harmony import */ var _grid_layout_image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./grid-layout-image */ "./src/grid-layout-image.js");
     3050/* harmony import */ var _grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./grid-layout-basic */ "./src/grid-layout-basic.js");
     3051/**
     3052 * WordPress dependencies
     3053 */
     3054
     3055/**
     3056 * Internal dependencies
     3057 */
     3058
     3059
     3060
     3061
     3062
     3063Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout__WEBPACK_IMPORTED_MODULE_1__["name"], _grid_layout__WEBPACK_IMPORTED_MODULE_1__["settings"]);
     3064Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__["name"], _grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__["settings"]);
     3065Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_image__WEBPACK_IMPORTED_MODULE_3__["name"], _grid_layout_image__WEBPACK_IMPORTED_MODULE_3__["settings"]);
     3066Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_item__WEBPACK_IMPORTED_MODULE_2__["name"], _grid_layout_item__WEBPACK_IMPORTED_MODULE_2__["settings"]);
     3067/**
     3068 * This make sure the grid works in the editor.
     3069 */
     3070
     3071document.addEventListener("DOMContentLoaded", function () {
     3072  // Create the observer
     3073  var observer = new MutationObserver(function (mutations) {
     3074    mutations.forEach(function (mutation) {
     3075      // On style mutation update blocks styles.
     3076      var block = mutation.target.closest('[data-type^="gecko/grid-layout-"]');
     3077      if (!block) return;
     3078      var styles = mutation.target.getAttribute('style');
     3079      block.style = styles;
     3080    });
     3081  }); // Add style elements to the observer
     3082
     3083  var addStyleElementsToObserver = function addStyleElementsToObserver() {
     3084    var styleElements = document.querySelectorAll('.gecko-grid-layout-editor-styles');
     3085    if (!styleElements.length > 0) return;
     3086    var _iteratorNormalCompletion = true;
     3087    var _didIteratorError = false;
     3088    var _iteratorError = undefined;
     3089
     3090    try {
     3091      for (var _iterator = styleElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
     3092        var element = _step.value;
     3093        observer.observe(element, {
     3094          attributes: true,
     3095          attributeFilter: ['style']
     3096        });
     3097      }
     3098    } catch (err) {
     3099      _didIteratorError = true;
     3100      _iteratorError = err;
     3101    } finally {
     3102      try {
     3103        if (!_iteratorNormalCompletion && _iterator.return != null) {
     3104          _iterator.return();
     3105        }
     3106      } finally {
     3107        if (_didIteratorError) {
     3108          throw _iteratorError;
     3109        }
     3110      }
     3111    }
     3112  }; // Add the styles to grid layout items for editor.
     3113
     3114
     3115  function applyAllGridItemStyles() {
     3116    var blocks = document.querySelectorAll('[data-type^="gecko/grid-layout-"]');
     3117    if (!blocks.length > 0) return;
     3118    var _iteratorNormalCompletion2 = true;
     3119    var _didIteratorError2 = false;
     3120    var _iteratorError2 = undefined;
     3121
     3122    try {
     3123      for (var _iterator2 = blocks[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
     3124        var block = _step2.value;
     3125        applyGridItemStyle(block);
     3126      }
     3127    } catch (err) {
     3128      _didIteratorError2 = true;
     3129      _iteratorError2 = err;
     3130    } finally {
     3131      try {
     3132        if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
     3133          _iterator2.return();
     3134        }
     3135      } finally {
     3136        if (_didIteratorError2) {
     3137          throw _iteratorError2;
     3138        }
     3139      }
     3140    }
     3141  }
     3142
     3143  function applyGridItemStyle(block) {
     3144    var styles = block.querySelector('.gecko-grid-layout-editor-styles').getAttribute('style');
     3145    block.style = styles;
     3146  } // Add the styles to grid layout items for editor.
     3147
     3148
     3149  function newGridInserted(e) {
     3150    if (typeof e.target.querySelectorAll !== 'function') return;
     3151    var blocks = e.target.querySelectorAll('[data-type^="gecko/grid-layout-"]');
     3152    if (!blocks.length > 0) return;
     3153    var _iteratorNormalCompletion3 = true;
     3154    var _didIteratorError3 = false;
     3155    var _iteratorError3 = undefined;
     3156
     3157    try {
     3158      for (var _iterator3 = blocks[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
     3159        var block = _step3.value;
     3160        applyGridItemStyle(block);
     3161      }
     3162    } catch (err) {
     3163      _didIteratorError3 = true;
     3164      _iteratorError3 = err;
     3165    } finally {
     3166      try {
     3167        if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
     3168          _iterator3.return();
     3169        }
     3170      } finally {
     3171        if (_didIteratorError3) {
     3172          throw _iteratorError3;
     3173        }
     3174      }
     3175    }
     3176  }
     3177
     3178  applyAllGridItemStyles();
     3179  document.addEventListener("DOMNodeInserted", addStyleElementsToObserver);
     3180  document.addEventListener("DOMNodeInserted", newGridInserted);
     3181});
     3182
     3183/***/ }),
     3184
     3185/***/ "./src/template-preview.js":
     3186/*!*********************************!*\
     3187  !*** ./src/template-preview.js ***!
     3188  \*********************************/
     3189/*! exports provided: default */
     3190/***/ (function(module, __webpack_exports__, __webpack_require__) {
     3191
     3192"use strict";
     3193__webpack_require__.r(__webpack_exports__);
     3194/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Preview; });
     3195/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
     3196/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
     3197/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");
     3198/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
     3199/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
     3200/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
     3201/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");
     3202/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
     3203/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");
     3204/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
     3205/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     3206/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_5__);
     3207/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "react");
     3208/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
     3209/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     3210/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__);
     3211
     3212
     3213
     3214
     3215
     3216
     3217
     3218 // import { Fragment } from '@wordpress/element';
     3219
     3220var Preview =
     3221/*#__PURE__*/
     3222function (_React$PureComponent) {
     3223  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(Preview, _React$PureComponent);
     3224
     3225  function Preview() {
     3226    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, Preview);
     3227
     3228    return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(Preview).apply(this, arguments));
     3229  }
     3230
     3231  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(Preview, [{
     3232    key: "render",
     3233    value: function render() {
     3234      var layout = this.props.layout;
     3235      return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("div", {
     3236        className: "gecko-grid-layout-template-preview"
     3237      }, layout.map(function (block, key) {
     3238        var styles = {
     3239          gridColumnEnd: 'span ' + block[1].w,
     3240          gridRowEnd: 'span ' + block[1].h
     3241        };
     3242        return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("div", {
     3243          key: key,
     3244          className: "gecko-grid-layout-template-preview__item",
     3245          style: styles
     3246        });
     3247      }));
     3248    }
     3249  }]);
     3250
     3251  return Preview;
     3252}(react__WEBPACK_IMPORTED_MODULE_6___default.a.PureComponent);
     3253
     3254
     3255
     3256/***/ }),
     3257
     3258/***/ "./src/template-select.js":
     3259/*!********************************!*\
     3260  !*** ./src/template-select.js ***!
     3261  \********************************/
     3262/*! exports provided: default */
     3263/***/ (function(module, __webpack_exports__, __webpack_require__) {
     3264
     3265"use strict";
     3266__webpack_require__.r(__webpack_exports__);
     3267/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TemplateSelect; });
     3268/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
     3269/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
     3270/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");
     3271/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
     3272/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
     3273/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
     3274/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");
     3275/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
     3276/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js");
     3277/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
     3278/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");
     3279/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
     3280/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
     3281/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__);
     3282/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     3283/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_7__);
     3284/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react */ "react");
     3285/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__);
     3286/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     3287/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__);
     3288/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
     3289/* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_10__);
     3290/* harmony import */ var _templates__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./templates */ "./src/templates.js");
     3291/* harmony import */ var _template_preview__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./template-preview */ "./src/template-preview.js");
     3292
     3293
     3294
     3295
     3296
     3297
     3298
     3299
     3300
     3301
     3302
     3303 // Custom Templates to choose from.
     3304
     3305 // Custom Templates to choose from.
     3306// import { Fragment } from '@wordpress/element';
     3307
     3308var TemplateSelect =
     3309/*#__PURE__*/
     3310function (_React$Component) {
     3311  _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(TemplateSelect, _React$Component);
     3312
     3313  function TemplateSelect(props) {
     3314    var _this;
     3315
     3316    _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, TemplateSelect);
     3317
     3318    _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(TemplateSelect).call(this, props));
     3319
     3320    _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this), "setTemplate", function (template) {
     3321      _this.setState({
     3322        selected: template
     3323      });
     3324    });
     3325
     3326    _this.state = {
     3327      selected: null
     3328    };
     3329    return _this;
     3330  }
     3331
     3332  _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(TemplateSelect, [{
     3333    key: "render",
     3334    value: function render() {
     3335      var _this2 = this;
     3336
     3337      var _this$props = this.props,
     3338          hasInnnerBlocks = _this$props.hasInnnerBlocks,
     3339          allowedBlocks = _this$props.allowedBlocks;
     3340      var selected = this.state.selected;
     3341      var blankTemplate = [['gecko/grid-layout-basic', {
     3342        w: 6
     3343      }]];
     3344
     3345      if (!hasInnnerBlocks && !selected) {
     3346        return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("div", {
     3347          className: "gecko-grid-layout-template-select"
     3348        }, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("h2", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__["__"])('Choose a Template')), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__["__"])('This is a starting point. Templates make it easy to choose a layout. Blocks can be changed once they are selected.')), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("div", {
     3349          className: "gecko-grid-layout-template-select__templates"
     3350        }, Object(_templates__WEBPACK_IMPORTED_MODULE_11__["default"])().map(function (template, key) {
     3351          return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("div", {
     3352            key: key,
     3353            className: "gecko-grid-layout-template-select__template",
     3354            onClick: function onClick() {
     3355              return _this2.setTemplate(template.layout);
     3356            }
     3357          }, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(_template_preview__WEBPACK_IMPORTED_MODULE_12__["default"], {
     3358            layout: template.layout
     3359          }), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("p", null, template.label));
     3360        }), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("div", {
     3361          className: "gecko-grid-layout-template-select__template",
     3362          onClick: function onClick() {
     3363            return _this2.setTemplate(blankTemplate);
     3364          }
     3365        }, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(_template_preview__WEBPACK_IMPORTED_MODULE_12__["default"], {
     3366          layout: blankTemplate
     3367        }), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__["__"])('Create New')))));
     3368      }
     3369
     3370      return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_10__["InnerBlocks"], {
     3371        template: selected,
     3372        templateLock: false,
     3373        allowedBlocks: allowedBlocks
     3374      });
     3375    }
     3376  }]);
     3377
     3378  return TemplateSelect;
     3379}(react__WEBPACK_IMPORTED_MODULE_8___default.a.Component);
     3380
     3381
     3382
     3383/***/ }),
     3384
     3385/***/ "./src/templates.js":
     3386/*!**************************!*\
     3387  !*** ./src/templates.js ***!
     3388  \**************************/
     3389/*! exports provided: default */
     3390/***/ (function(module, __webpack_exports__, __webpack_require__) {
     3391
     3392"use strict";
     3393__webpack_require__.r(__webpack_exports__);
     3394/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getTemplates; });
     3395/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     3396/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__);
     3397/* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks");
     3398/* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__);
     3399/**
     3400 * WordPress dependencies
     3401 */
     3402
     3403
     3404function getTemplates() {
     3405  var templates = [{
     3406    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('2 Columns'),
     3407    layout: [['gecko/grid-layout-basic', {
     3408      w: 6
     3409    }], ['gecko/grid-layout-basic', {
     3410      w: 6
     3411    }]]
     3412  }, {
     3413    label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('3 Columns'),
     3414    layout: [['gecko/grid-layout-basic', {
     3415      w: 4
     3416    }], ['gecko/grid-layout-basic', {
     3417      w: 4
     3418    }], ['gecko/grid-layout-basic', {
     3419      w: 4
     3420    }]]
     3421  }];
     3422  return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__["applyFilters"])('gecko.grid-layout.templates', templates);
     3423}
     3424
     3425/***/ }),
     3426
     3427/***/ "@wordpress/blocks":
     3428/*!***********************************!*\
     3429  !*** external "window.wp.blocks" ***!
     3430  \***********************************/
     3431/*! no static exports found */
     3432/***/ (function(module, exports) {
     3433
     3434module.exports = window.wp.blocks;
     3435
     3436/***/ }),
     3437
     3438/***/ "@wordpress/components":
     3439/*!***************************************!*\
     3440  !*** external "window.wp.components" ***!
     3441  \***************************************/
     3442/*! no static exports found */
     3443/***/ (function(module, exports) {
     3444
     3445module.exports = window.wp.components;
     3446
     3447/***/ }),
     3448
     3449/***/ "@wordpress/data":
     3450/*!*********************************!*\
     3451  !*** external "window.wp.data" ***!
     3452  \*********************************/
     3453/*! no static exports found */
     3454/***/ (function(module, exports) {
     3455
     3456module.exports = window.wp.data;
     3457
     3458/***/ }),
     3459
     3460/***/ "@wordpress/deprecated":
     3461/*!***************************************!*\
     3462  !*** external "window.wp.deprecated" ***!
     3463  \***************************************/
     3464/*! no static exports found */
     3465/***/ (function(module, exports) {
     3466
     3467module.exports = window.wp.deprecated;
     3468
     3469/***/ }),
     3470
     3471/***/ "@wordpress/editor":
     3472/*!***********************************!*\
     3473  !*** external "window.wp.editor" ***!
     3474  \***********************************/
     3475/*! no static exports found */
     3476/***/ (function(module, exports) {
     3477
     3478module.exports = window.wp.editor;
     3479
     3480/***/ }),
     3481
     3482/***/ "@wordpress/element":
     3483/*!************************************!*\
     3484  !*** external "window.wp.element" ***!
     3485  \************************************/
     3486/*! no static exports found */
     3487/***/ (function(module, exports) {
     3488
     3489module.exports = window.wp.element;
     3490
     3491/***/ }),
     3492
     3493/***/ "@wordpress/hooks":
     3494/*!**********************************!*\
     3495  !*** external "window.wp.hooks" ***!
     3496  \**********************************/
     3497/*! no static exports found */
     3498/***/ (function(module, exports) {
     3499
     3500module.exports = window.wp.hooks;
     3501
     3502/***/ }),
     3503
     3504/***/ "@wordpress/i18n":
     3505/*!*********************************!*\
     3506  !*** external "window.wp.i18n" ***!
     3507  \*********************************/
     3508/*! no static exports found */
     3509/***/ (function(module, exports) {
     3510
     3511module.exports = window.wp.i18n;
     3512
     3513/***/ }),
     3514
     3515/***/ "react":
     3516/*!************************!*\
     3517  !*** external "React" ***!
     3518  \************************/
     3519/*! no static exports found */
     3520/***/ (function(module, exports) {
     3521
     3522module.exports = React;
     3523
     3524/***/ })
     3525
     3526/******/ });
     3527//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9ub3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGlueWNvbG9yMi90aW55Y29sb3IuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZ3JpZC1sYXlvdXQtYmFzaWMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2dyaWQtbGF5b3V0LWltYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy9ncmlkLWxheW91dC1pdGVtLmpzIiwid2VicGFjazovLy8uL3NyYy9ncmlkLWxheW91dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLXByZXZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLXNlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5ibG9ja3NcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuY29tcG9uZW50c1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5kYXRhXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmRlcHJlY2F0ZWRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuZWRpdG9yXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmVsZW1lbnRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuaG9va3NcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuaTE4blwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIlJlYWN0XCIiXSwibmFtZXMiOlsibmFtZSIsInNldHRpbmdzIiwidGl0bGUiLCJfXyIsInBhcmVudCIsImljb24iLCJkZXNjcmlwdGlvbiIsImNhdGVnb3J5Iiwic3VwcG9ydHMiLCJjbGFzc05hbWUiLCJpbnNlcnRlciIsInJldXNhYmxlIiwiaHRtbCIsInN0eWxlcyIsImxhYmVsIiwiaXNEZWZhdWx0IiwiYXR0cmlidXRlcyIsImgiLCJ0eXBlIiwiZGVmYXVsdCIsInciLCJ0cmFuc2Zvcm1zIiwiZnJvbSIsImJsb2NrcyIsInRyYW5zZm9ybSIsImlubmVyQmxvY2tzIiwic2VsZWN0ZWQiLCJzZWxlY3QiLCJnZXRTZWxlY3RlZEJsb2NrIiwiY3JlYXRlQmxvY2siLCJkZXByZWNhdGVkIiwibWlncmF0ZSIsInNhdmUiLCJlZGl0Iiwic2V0QXR0cmlidXRlcyIsImluc2VydEJsb2Nrc0FmdGVyIiwiZ3JpZENvbHVtbkVuZCIsImdyaWRSb3dFbmQiLCJuZXh0IiwiQUxMT1dFRF9CTE9DS1MiLCJtaW5IZWlnaHQiLCJpbWdJZCIsImltZ1VybCIsImJnTWVkaWEiLCJiZ01lZGlhVXJsIiwibWVkaWFJZCIsIm1lZGlhVXJsIiwidG9nZ2xlU2VsZWN0aW9uIiwib25SZXNpemluZyIsImV2ZW50IiwiZGlyZWN0aW9uIiwiZWx0IiwiZGVsdGEiLCJuZXdNaW5IZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJzdHlsZSIsImhlaWdodCIsImNvbHVtbldpZHRoIiwiTWF0aCIsImZsb29yIiwicGFyZW50Tm9kZSIsIm9mZnNldFdpZHRoIiwiY3VycmVudFNwYW4iLCJlbENvbFdpZHRoIiwiY2xpZW50V2lkdGgiLCJzcGFucyIsInRvVXBkYXRlIiwicGFyc2VJbnQiLCJ3aWR0aCIsIm9yaWdpbmFsIiwibmV3V2lkdGgiLCJ2YWx1ZSIsImlkIiwidXJsIiwib3BlbiIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsImRlYm91bmNlIiwidW5kZWZpbmVkIiwib3BhY2l0eSIsImJnQ29sb3IiLCJiZ0NvbG9yU2x1ZyIsImJnQ29sb3JCcmlnaHRuZXNzIiwicGFkZGluZyIsImFsdGVybmF0aXZlIiwicGx1Z2luIiwiYmFja2dyb3VuZENvbG9yIiwiYmFja2dyb3VuZEltYWdlIiwibGlnaHRPckRhcmsiLCJjdXJzb3IiLCJjb2xvciIsImdldEVkaXRvclNldHRpbmdzIiwiY29sb3JTbHVnIiwiZ2V0Q29sb3JPYmplY3RCeUNvbG9yVmFsdWUiLCJjb2xvcnMiLCJzbHVnIiwiYnJpZ2h0bmVzcyIsInRpbnljb2xvciIsImdldEJyaWdodG5lc3MiLCJhbGlnbiIsImNvbHVtbnMiLCJjb3VudCIsImxlbmd0aCIsIm1hcCIsImNvbHVtbiIsImJsb2NrIiwicHVzaCIsImNsaWVudElkIiwiZ2V0QmxvY2tzQnlDbGllbnRJZCIsImhhc0lubmVyQmxvY2tzIiwicmVnaXN0ZXJCbG9ja1R5cGUiLCJncmlkIiwiZ3JpZEl0ZW1CYXNpYyIsImdyaWRJdGVtSW1hZ2UiLCJncmlkSXRlbSIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsImZvckVhY2giLCJtdXRhdGlvbiIsInRhcmdldCIsImNsb3Nlc3QiLCJnZXRBdHRyaWJ1dGUiLCJhZGRTdHlsZUVsZW1lbnRzVG9PYnNlcnZlciIsInN0eWxlRWxlbWVudHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZWxlbWVudCIsIm9ic2VydmUiLCJhdHRyaWJ1dGVGaWx0ZXIiLCJhcHBseUFsbEdyaWRJdGVtU3R5bGVzIiwiYXBwbHlHcmlkSXRlbVN0eWxlIiwicXVlcnlTZWxlY3RvciIsIm5ld0dyaWRJbnNlcnRlZCIsImUiLCJQcmV2aWV3IiwibGF5b3V0IiwicHJvcHMiLCJrZXkiLCJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUZW1wbGF0ZVNlbGVjdCIsInRlbXBsYXRlIiwic2V0U3RhdGUiLCJzdGF0ZSIsImhhc0lubm5lckJsb2NrcyIsImFsbG93ZWRCbG9ja3MiLCJibGFua1RlbXBsYXRlIiwidGVtcGxhdGVzIiwic2V0VGVtcGxhdGUiLCJDb21wb25lbnQiLCJnZXRUZW1wbGF0ZXMiLCJhcHBseUZpbHRlcnMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDOzs7Ozs7Ozs7OztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7O0FDTkE7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtB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Q0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsOENBQThDLGtCQUFrQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7O0FDN0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7O0FDOUJBO0FBQ0E7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Z0I7QUFDaEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQsd0NBQXdDO0FBQ3hDLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBOztBQUVBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQsd0NBQXdDO0FBQ3hDLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGNBQWM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix5Q0FBeUM7QUFDNUQsbUJBQW1CLHlDQUF5QztBQUM1RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsd0NBQXdDO0FBQzNELG1CQUFtQix5Q0FBeUM7QUFDNUQsbUJBQW1CLHlDQUF5QztBQUM1RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsdUNBQXVDO0FBQzFELG1CQUFtQix3Q0FBd0M7QUFDM0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtEQUErRCxXQUFXO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLGtCQUFrQjtBQUM5QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELHdCQUF3Qjs7QUFFbkY7QUFDQTtBQUNBLDJDQUEyQyx3QkFBd0I7QUFDbkU7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSw0QkFBNEIsZ0JBQWdCO0FBQzFILDhFQUE4RSwyQkFBMkIsZ0JBQWdCO0FBQ3pILHFEQUFxRCxvREFBb0QsZ0JBQWdCO0FBQ3pILHFEQUFxRCxvREFBb0QsZ0JBQWdCO0FBQ3pIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsdUJBQXVCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0QsMEJBQTBCO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBLEtBQUssa0JBQWtCLFlBQVksa0JBQWtCO0FBQ3JEO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEJBQTRCLFlBQVk7O0FBRXhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FB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QUE7QUFBQTtBQUFBO0FBQUE7OztBQUdBO0FBQ0E7QUFDZSxTQUFTQyxZQUFULEdBQXdCO0FBQ3RDLE1BQU1ILFNBQVMsR0FBRyxDQUFDO0FBQ2pCekksU0FBSyxFQUFFWCwwREFBRSxDQUFDLFdBQUQsQ0FEUTtBQUVqQndJLFVBQU0sRUFBRSxDQUNQLENBQUMseUJBQUQsRUFBNEI7QUFDM0J2SCxPQUFDLEVBQUU7QUFEd0IsS0FBNUIsQ0FETyxFQUlQLENBQUMseUJBQUQsRUFBNEI7QUFDM0JBLE9BQUMsRUFBRTtBQUR3QixLQUE1QixDQUpPO0FBRlMsR0FBRCxFQVdqQjtBQUNDTixTQUFLLEVBQUVYLDBEQUFFLENBQUMsV0FBRCxDQURWO0FBRUN3SSxVQUFNLEVBQUUsQ0FDUCxDQUFDLHlCQUFELEVBQTRCO0FBQzNCdkgsT0FBQyxFQUFFO0FBRHdCLEtBQTVCLENBRE8sRUFJUCxDQUFDLHlCQUFELEVBQTRCO0FBQzNCQSxPQUFDLEVBQUU7QUFEd0IsS0FBNUIsQ0FKTyxFQU9QLENBQUMseUJBQUQsRUFBNEI7QUFDM0JBLE9BQUMsRUFBRTtBQUR3QixLQUE1QixDQVBPO0FBRlQsR0FYaUIsQ0FBbEI7QUEwQkEsU0FBT3VJLHFFQUFZLENBQUMsNkJBQUQsRUFBZ0NKLFNBQWhDLENBQW5CO0FBQ0EsQzs7Ozs7Ozs7Ozs7QUNqQ0Qsa0M7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsZ0M7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsaUM7Ozs7Ozs7Ozs7O0FDQUEsZ0M7Ozs7Ozs7Ozs7O0FDQUEsdUIiLCJmaWxlIjoiZWRpdG9yLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL3dwLWNvbnRlbnQvcGx1Z2lucy9nZWNrby1ncmlkLWxheW91dC9kaXN0L1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC5qc1wiKTtcbiIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZDsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjazsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eTsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2Y7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2ZcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwiZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBub3cgPSByZXF1aXJlKCcuL25vdycpLFxuICAgIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICogaW52b2NhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICpcbiAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICpcbiAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gKlxuICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAqIH0pKTtcbiAqXG4gKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsYXN0QXJncyxcbiAgICAgIGxhc3RUaGlzLFxuICAgICAgbWF4V2FpdCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVySWQsXG4gICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KSB8fCAwLCB3YWl0KSA6IG1heFdhaXQ7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkge1xuICAgIHZhciBhcmdzID0gbGFzdEFyZ3MsXG4gICAgICAgIHRoaXNBcmcgPSBsYXN0VGhpcztcblxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgLy8gSW52b2tlIHRoZSBsZWFkaW5nIGVkZ2UuXG4gICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgdGltZVdhaXRpbmcgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICByZXR1cm4gbWF4aW5nXG4gICAgICA/IG5hdGl2ZU1pbih0aW1lV2FpdGluZywgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpXG4gICAgICA6IHRpbWVXYWl0aW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgfVxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVib3VuY2U7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG52YXIgbm93ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vdztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltID0gL15cXHMrfFxccyskL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVUcmltLCAnJyk7XG4gIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvTnVtYmVyO1xuIiwiLy8gVGlueUNvbG9yIHYxLjQuMVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jncmlucy9UaW55Q29sb3Jcbi8vIEJyaWFuIEdyaW5zdGVhZCwgTUlUIExpY2Vuc2VcblxuKGZ1bmN0aW9uKE1hdGgpIHtcblxudmFyIHRyaW1MZWZ0ID0gL15cXHMrLyxcbiAgICB0cmltUmlnaHQgPSAvXFxzKyQvLFxuICAgIHRpbnlDb3VudGVyID0gMCxcbiAgICBtYXRoUm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIG1hdGhNaW4gPSBNYXRoLm1pbixcbiAgICBtYXRoTWF4ID0gTWF0aC5tYXgsXG4gICAgbWF0aFJhbmRvbSA9IE1hdGgucmFuZG9tO1xuXG5mdW5jdGlvbiB0aW55Y29sb3IgKGNvbG9yLCBvcHRzKSB7XG5cbiAgICBjb2xvciA9IChjb2xvcikgPyBjb2xvciA6ICcnO1xuICAgIG9wdHMgPSBvcHRzIHx8IHsgfTtcblxuICAgIC8vIElmIGlucHV0IGlzIGFscmVhZHkgYSB0aW55Y29sb3IsIHJldHVybiBpdHNlbGZcbiAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiB0aW55Y29sb3IpIHtcbiAgICAgICByZXR1cm4gY29sb3I7XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgY2FsbCB1c2luZyBuZXcgaW5zdGVhZFxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiB0aW55Y29sb3IpKSB7XG4gICAgICAgIHJldHVybiBuZXcgdGlueWNvbG9yKGNvbG9yLCBvcHRzKTtcbiAgICB9XG5cbiAgICB2YXIgcmdiID0gaW5wdXRUb1JHQihjb2xvcik7XG4gICAgdGhpcy5fb3JpZ2luYWxJbnB1dCA9IGNvbG9yLFxuICAgIHRoaXMuX3IgPSByZ2IucixcbiAgICB0aGlzLl9nID0gcmdiLmcsXG4gICAgdGhpcy5fYiA9IHJnYi5iLFxuICAgIHRoaXMuX2EgPSByZ2IuYSxcbiAgICB0aGlzLl9yb3VuZEEgPSBtYXRoUm91bmQoMTAwKnRoaXMuX2EpIC8gMTAwLFxuICAgIHRoaXMuX2Zvcm1hdCA9IG9wdHMuZm9ybWF0IHx8IHJnYi5mb3JtYXQ7XG4gICAgdGhpcy5fZ3JhZGllbnRUeXBlID0gb3B0cy5ncmFkaWVudFR5cGU7XG5cbiAgICAvLyBEb24ndCBsZXQgdGhlIHJhbmdlIG9mIFswLDI1NV0gY29tZSBiYWNrIGluIFswLDFdLlxuICAgIC8vIFBvdGVudGlhbGx5IGxvc2UgYSBsaXR0bGUgYml0IG9mIHByZWNpc2lvbiBoZXJlLCBidXQgd2lsbCBmaXggaXNzdWVzIHdoZXJlXG4gICAgLy8gLjUgZ2V0cyBpbnRlcnByZXRlZCBhcyBoYWxmIG9mIHRoZSB0b3RhbCwgaW5zdGVhZCBvZiBoYWxmIG9mIDFcbiAgICAvLyBJZiBpdCB3YXMgc3VwcG9zZWQgdG8gYmUgMTI4LCB0aGlzIHdhcyBhbHJlYWR5IHRha2VuIGNhcmUgb2YgYnkgYGlucHV0VG9SZ2JgXG4gICAgaWYgKHRoaXMuX3IgPCAxKSB7IHRoaXMuX3IgPSBtYXRoUm91bmQodGhpcy5fcik7IH1cbiAgICBpZiAodGhpcy5fZyA8IDEpIHsgdGhpcy5fZyA9IG1hdGhSb3VuZCh0aGlzLl9nKTsgfVxuICAgIGlmICh0aGlzLl9iIDwgMSkgeyB0aGlzLl9iID0gbWF0aFJvdW5kKHRoaXMuX2IpOyB9XG5cbiAgICB0aGlzLl9vayA9IHJnYi5vaztcbiAgICB0aGlzLl90Y19pZCA9IHRpbnlDb3VudGVyKys7XG59XG5cbnRpbnljb2xvci5wcm90b3R5cGUgPSB7XG4gICAgaXNEYXJrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpIDwgMTI4O1xuICAgIH0sXG4gICAgaXNMaWdodDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0RhcmsoKTtcbiAgICB9LFxuICAgIGlzVmFsaWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2s7XG4gICAgfSxcbiAgICBnZXRPcmlnaW5hbElucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vcmlnaW5hbElucHV0O1xuICAgIH0sXG4gICAgZ2V0Rm9ybWF0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgICB9LFxuICAgIGdldEFscGhhOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2E7XG4gICAgfSxcbiAgICBnZXRCcmlnaHRuZXNzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy9odHRwOi8vd3d3LnczLm9yZy9UUi9BRVJUI2NvbG9yLWNvbnRyYXN0XG4gICAgICAgIHZhciByZ2IgPSB0aGlzLnRvUmdiKCk7XG4gICAgICAgIHJldHVybiAocmdiLnIgKiAyOTkgKyByZ2IuZyAqIDU4NyArIHJnYi5iICogMTE0KSAvIDEwMDA7XG4gICAgfSxcbiAgICBnZXRMdW1pbmFuY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvL2h0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICAgICAgdmFyIHJnYiA9IHRoaXMudG9SZ2IoKTtcbiAgICAgICAgdmFyIFJzUkdCLCBHc1JHQiwgQnNSR0IsIFIsIEcsIEI7XG4gICAgICAgIFJzUkdCID0gcmdiLnIvMjU1O1xuICAgICAgICBHc1JHQiA9IHJnYi5nLzI1NTtcbiAgICAgICAgQnNSR0IgPSByZ2IuYi8yNTU7XG5cbiAgICAgICAgaWYgKFJzUkdCIDw9IDAuMDM5MjgpIHtSID0gUnNSR0IgLyAxMi45Mjt9IGVsc2Uge1IgPSBNYXRoLnBvdygoKFJzUkdCICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpO31cbiAgICAgICAgaWYgKEdzUkdCIDw9IDAuMDM5MjgpIHtHID0gR3NSR0IgLyAxMi45Mjt9IGVsc2Uge0cgPSBNYXRoLnBvdygoKEdzUkdCICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpO31cbiAgICAgICAgaWYgKEJzUkdCIDw9IDAuMDM5MjgpIHtCID0gQnNSR0IgLyAxMi45Mjt9IGVsc2Uge0IgPSBNYXRoLnBvdygoKEJzUkdCICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpO31cbiAgICAgICAgcmV0dXJuICgwLjIxMjYgKiBSKSArICgwLjcxNTIgKiBHKSArICgwLjA3MjIgKiBCKTtcbiAgICB9LFxuICAgIHNldEFscGhhOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9hID0gYm91bmRBbHBoYSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3JvdW5kQSA9IG1hdGhSb3VuZCgxMDAqdGhpcy5fYSkgLyAxMDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgdG9Ic3Y6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaHN2ID0gcmdiVG9Ic3YodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgICAgIHJldHVybiB7IGg6IGhzdi5oICogMzYwLCBzOiBoc3YucywgdjogaHN2LnYsIGE6IHRoaXMuX2EgfTtcbiAgICB9LFxuICAgIHRvSHN2U3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhzdiA9IHJnYlRvSHN2KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IpO1xuICAgICAgICB2YXIgaCA9IG1hdGhSb3VuZChoc3YuaCAqIDM2MCksIHMgPSBtYXRoUm91bmQoaHN2LnMgKiAxMDApLCB2ID0gbWF0aFJvdW5kKGhzdi52ICogMTAwKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9hID09IDEpID9cbiAgICAgICAgICBcImhzdihcIiAgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyB2ICsgXCIlKVwiIDpcbiAgICAgICAgICBcImhzdmEoXCIgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyB2ICsgXCIlLCBcIisgdGhpcy5fcm91bmRBICsgXCIpXCI7XG4gICAgfSxcbiAgICB0b0hzbDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoc2wgPSByZ2JUb0hzbCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICAgICAgcmV0dXJuIHsgaDogaHNsLmggKiAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCwgYTogdGhpcy5fYSB9O1xuICAgIH0sXG4gICAgdG9Ic2xTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaHNsID0gcmdiVG9Ic2wodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgICAgIHZhciBoID0gbWF0aFJvdW5kKGhzbC5oICogMzYwKSwgcyA9IG1hdGhSb3VuZChoc2wucyAqIDEwMCksIGwgPSBtYXRoUm91bmQoaHNsLmwgKiAxMDApO1xuICAgICAgICByZXR1cm4gKHRoaXMuX2EgPT0gMSkgP1xuICAgICAgICAgIFwiaHNsKFwiICArIGggKyBcIiwgXCIgKyBzICsgXCIlLCBcIiArIGwgKyBcIiUpXCIgOlxuICAgICAgICAgIFwiaHNsYShcIiArIGggKyBcIiwgXCIgKyBzICsgXCIlLCBcIiArIGwgKyBcIiUsIFwiKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgICB9LFxuICAgIHRvSGV4OiBmdW5jdGlvbihhbGxvdzNDaGFyKSB7XG4gICAgICAgIHJldHVybiByZ2JUb0hleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCBhbGxvdzNDaGFyKTtcbiAgICB9LFxuICAgIHRvSGV4U3RyaW5nOiBmdW5jdGlvbihhbGxvdzNDaGFyKSB7XG4gICAgICAgIHJldHVybiAnIycgKyB0aGlzLnRvSGV4KGFsbG93M0NoYXIpO1xuICAgIH0sXG4gICAgdG9IZXg4OiBmdW5jdGlvbihhbGxvdzRDaGFyKSB7XG4gICAgICAgIHJldHVybiByZ2JhVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgdGhpcy5fYSwgYWxsb3c0Q2hhcik7XG4gICAgfSxcbiAgICB0b0hleDhTdHJpbmc6IGZ1bmN0aW9uKGFsbG93NENoYXIpIHtcbiAgICAgICAgcmV0dXJuICcjJyArIHRoaXMudG9IZXg4KGFsbG93NENoYXIpO1xuICAgIH0sXG4gICAgdG9SZ2I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4geyByOiBtYXRoUm91bmQodGhpcy5fciksIGc6IG1hdGhSb3VuZCh0aGlzLl9nKSwgYjogbWF0aFJvdW5kKHRoaXMuX2IpLCBhOiB0aGlzLl9hIH07XG4gICAgfSxcbiAgICB0b1JnYlN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fYSA9PSAxKSA/XG4gICAgICAgICAgXCJyZ2IoXCIgICsgbWF0aFJvdW5kKHRoaXMuX3IpICsgXCIsIFwiICsgbWF0aFJvdW5kKHRoaXMuX2cpICsgXCIsIFwiICsgbWF0aFJvdW5kKHRoaXMuX2IpICsgXCIpXCIgOlxuICAgICAgICAgIFwicmdiYShcIiArIG1hdGhSb3VuZCh0aGlzLl9yKSArIFwiLCBcIiArIG1hdGhSb3VuZCh0aGlzLl9nKSArIFwiLCBcIiArIG1hdGhSb3VuZCh0aGlzLl9iKSArIFwiLCBcIiArIHRoaXMuX3JvdW5kQSArIFwiKVwiO1xuICAgIH0sXG4gICAgdG9QZXJjZW50YWdlUmdiOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHsgcjogbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fciwgMjU1KSAqIDEwMCkgKyBcIiVcIiwgZzogbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fZywgMjU1KSAqIDEwMCkgKyBcIiVcIiwgYjogbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fYiwgMjU1KSAqIDEwMCkgKyBcIiVcIiwgYTogdGhpcy5fYSB9O1xuICAgIH0sXG4gICAgdG9QZXJjZW50YWdlUmdiU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9hID09IDEpID9cbiAgICAgICAgICBcInJnYihcIiAgKyBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9yLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9nLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9iLCAyNTUpICogMTAwKSArIFwiJSlcIiA6XG4gICAgICAgICAgXCJyZ2JhKFwiICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fciwgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fZywgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fYiwgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgdGhpcy5fcm91bmRBICsgXCIpXCI7XG4gICAgfSxcbiAgICB0b05hbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fYSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9hIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhleE5hbWVzW3JnYlRvSGV4KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IsIHRydWUpXSB8fCBmYWxzZTtcbiAgICB9LFxuICAgIHRvRmlsdGVyOiBmdW5jdGlvbihzZWNvbmRDb2xvcikge1xuICAgICAgICB2YXIgaGV4OFN0cmluZyA9ICcjJyArIHJnYmFUb0FyZ2JIZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgdGhpcy5fYSk7XG4gICAgICAgIHZhciBzZWNvbmRIZXg4U3RyaW5nID0gaGV4OFN0cmluZztcbiAgICAgICAgdmFyIGdyYWRpZW50VHlwZSA9IHRoaXMuX2dyYWRpZW50VHlwZSA/IFwiR3JhZGllbnRUeXBlID0gMSwgXCIgOiBcIlwiO1xuXG4gICAgICAgIGlmIChzZWNvbmRDb2xvcikge1xuICAgICAgICAgICAgdmFyIHMgPSB0aW55Y29sb3Ioc2Vjb25kQ29sb3IpO1xuICAgICAgICAgICAgc2Vjb25kSGV4OFN0cmluZyA9ICcjJyArIHJnYmFUb0FyZ2JIZXgocy5fciwgcy5fZywgcy5fYiwgcy5fYSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoXCIrZ3JhZGllbnRUeXBlK1wic3RhcnRDb2xvcnN0cj1cIitoZXg4U3RyaW5nK1wiLGVuZENvbG9yc3RyPVwiK3NlY29uZEhleDhTdHJpbmcrXCIpXCI7XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBmb3JtYXRTZXQgPSAhIWZvcm1hdDtcbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8IHRoaXMuX2Zvcm1hdDtcblxuICAgICAgICB2YXIgZm9ybWF0dGVkU3RyaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBoYXNBbHBoYSA9IHRoaXMuX2EgPCAxICYmIHRoaXMuX2EgPj0gMDtcbiAgICAgICAgdmFyIG5lZWRzQWxwaGFGb3JtYXQgPSAhZm9ybWF0U2V0ICYmIGhhc0FscGhhICYmIChmb3JtYXQgPT09IFwiaGV4XCIgfHwgZm9ybWF0ID09PSBcImhleDZcIiB8fCBmb3JtYXQgPT09IFwiaGV4M1wiIHx8IGZvcm1hdCA9PT0gXCJoZXg0XCIgfHwgZm9ybWF0ID09PSBcImhleDhcIiB8fCBmb3JtYXQgPT09IFwibmFtZVwiKTtcblxuICAgICAgICBpZiAobmVlZHNBbHBoYUZvcm1hdCkge1xuICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBcInRyYW5zcGFyZW50XCIsIGFsbCBvdGhlciBub24tYWxwaGEgZm9ybWF0c1xuICAgICAgICAgICAgLy8gd2lsbCByZXR1cm4gcmdiYSB3aGVuIHRoZXJlIGlzIHRyYW5zcGFyZW5jeS5cbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09IFwibmFtZVwiICYmIHRoaXMuX2EgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b05hbWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvUmdiU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJyZ2JcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b1JnYlN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwicHJnYlwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaGV4XCIgfHwgZm9ybWF0ID09PSBcImhleDZcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleFN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaGV4M1wiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvSGV4U3RyaW5nKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaGV4NFwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvSGV4OFN0cmluZyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleDhcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleDhTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcIm5hbWVcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b05hbWUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhzbFwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvSHNsU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoc3ZcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hzdlN0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFN0cmluZyB8fCB0aGlzLnRvSGV4U3RyaW5nKCk7XG4gICAgfSxcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aW55Y29sb3IodGhpcy50b1N0cmluZygpKTtcbiAgICB9LFxuXG4gICAgX2FwcGx5TW9kaWZpY2F0aW9uOiBmdW5jdGlvbihmbiwgYXJncykge1xuICAgICAgICB2YXIgY29sb3IgPSBmbi5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncykpKTtcbiAgICAgICAgdGhpcy5fciA9IGNvbG9yLl9yO1xuICAgICAgICB0aGlzLl9nID0gY29sb3IuX2c7XG4gICAgICAgIHRoaXMuX2IgPSBjb2xvci5fYjtcbiAgICAgICAgdGhpcy5zZXRBbHBoYShjb2xvci5fYSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgbGlnaHRlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihsaWdodGVuLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgYnJpZ2h0ZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYnJpZ2h0ZW4sIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBkYXJrZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZGFya2VuLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZGVzYXR1cmF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkZXNhdHVyYXRlLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgc2F0dXJhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oc2F0dXJhdGUsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBncmV5c2NhbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZ3JleXNjYWxlLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgc3BpbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihzcGluLCBhcmd1bWVudHMpO1xuICAgIH0sXG5cbiAgICBfYXBwbHlDb21iaW5hdGlvbjogZnVuY3Rpb24oZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmdzKSkpO1xuICAgIH0sXG4gICAgYW5hbG9nb3VzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oYW5hbG9nb3VzLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgY29tcGxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGNvbXBsZW1lbnQsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtb25vY2hyb21hdGljOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24obW9ub2Nocm9tYXRpYywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHNwbGl0Y29tcGxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHNwbGl0Y29tcGxlbWVudCwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHRyaWFkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odHJpYWQsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICB0ZXRyYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih0ZXRyYWQsIGFyZ3VtZW50cyk7XG4gICAgfVxufTtcblxuLy8gSWYgaW5wdXQgaXMgYW4gb2JqZWN0LCBmb3JjZSAxIGludG8gXCIxLjBcIiB0byBoYW5kbGUgcmF0aW9zIHByb3Blcmx5XG4vLyBTdHJpbmcgaW5wdXQgcmVxdWlyZXMgXCIxLjBcIiBhcyBpbnB1dCwgc28gMSB3aWxsIGJlIHRyZWF0ZWQgYXMgMVxudGlueWNvbG9yLmZyb21SYXRpbyA9IGZ1bmN0aW9uKGNvbG9yLCBvcHRzKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHZhciBuZXdDb2xvciA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpIGluIGNvbG9yKSB7XG4gICAgICAgICAgICBpZiAoY29sb3IuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gXCJhXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29sb3JbaV0gPSBjb2xvcltpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbG9yW2ldID0gY29udmVydFRvUGVyY2VudGFnZShjb2xvcltpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbG9yID0gbmV3Q29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbnljb2xvcihjb2xvciwgb3B0cyk7XG59O1xuXG4vLyBHaXZlbiBhIHN0cmluZyBvciBvYmplY3QsIGNvbnZlcnQgdGhhdCBpbnB1dCB0byBSR0Jcbi8vIFBvc3NpYmxlIHN0cmluZyBpbnB1dHM6XG4vL1xuLy8gICAgIFwicmVkXCJcbi8vICAgICBcIiNmMDBcIiBvciBcImYwMFwiXG4vLyAgICAgXCIjZmYwMDAwXCIgb3IgXCJmZjAwMDBcIlxuLy8gICAgIFwiI2ZmMDAwMDAwXCIgb3IgXCJmZjAwMDAwMFwiXG4vLyAgICAgXCJyZ2IgMjU1IDAgMFwiIG9yIFwicmdiICgyNTUsIDAsIDApXCJcbi8vICAgICBcInJnYiAxLjAgMCAwXCIgb3IgXCJyZ2IgKDEsIDAsIDApXCJcbi8vICAgICBcInJnYmEgKDI1NSwgMCwgMCwgMSlcIiBvciBcInJnYmEgMjU1LCAwLCAwLCAxXCJcbi8vICAgICBcInJnYmEgKDEuMCwgMCwgMCwgMSlcIiBvciBcInJnYmEgMS4wLCAwLCAwLCAxXCJcbi8vICAgICBcImhzbCgwLCAxMDAlLCA1MCUpXCIgb3IgXCJoc2wgMCAxMDAlIDUwJVwiXG4vLyAgICAgXCJoc2xhKDAsIDEwMCUsIDUwJSwgMSlcIiBvciBcImhzbGEgMCAxMDAlIDUwJSwgMVwiXG4vLyAgICAgXCJoc3YoMCwgMTAwJSwgMTAwJSlcIiBvciBcImhzdiAwIDEwMCUgMTAwJVwiXG4vL1xuZnVuY3Rpb24gaW5wdXRUb1JHQihjb2xvcikge1xuXG4gICAgdmFyIHJnYiA9IHsgcjogMCwgZzogMCwgYjogMCB9O1xuICAgIHZhciBhID0gMTtcbiAgICB2YXIgcyA9IG51bGw7XG4gICAgdmFyIHYgPSBudWxsO1xuICAgIHZhciBsID0gbnVsbDtcbiAgICB2YXIgb2sgPSBmYWxzZTtcbiAgICB2YXIgZm9ybWF0ID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIGNvbG9yID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29sb3IgPSBzdHJpbmdJbnB1dFRvT2JqZWN0KGNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbG9yID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKGlzVmFsaWRDU1NVbml0KGNvbG9yLnIpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLmcpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLmIpKSB7XG4gICAgICAgICAgICByZ2IgPSByZ2JUb1JnYihjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iKTtcbiAgICAgICAgICAgIG9rID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm1hdCA9IFN0cmluZyhjb2xvci5yKS5zdWJzdHIoLTEpID09PSBcIiVcIiA/IFwicHJnYlwiIDogXCJyZ2JcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1ZhbGlkQ1NTVW5pdChjb2xvci5oKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5zKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci52KSkge1xuICAgICAgICAgICAgcyA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3Iucyk7XG4gICAgICAgICAgICB2ID0gY29udmVydFRvUGVyY2VudGFnZShjb2xvci52KTtcbiAgICAgICAgICAgIHJnYiA9IGhzdlRvUmdiKGNvbG9yLmgsIHMsIHYpO1xuICAgICAgICAgICAgb2sgPSB0cnVlO1xuICAgICAgICAgICAgZm9ybWF0ID0gXCJoc3ZcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1ZhbGlkQ1NTVW5pdChjb2xvci5oKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5zKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5sKSkge1xuICAgICAgICAgICAgcyA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3Iucyk7XG4gICAgICAgICAgICBsID0gY29udmVydFRvUGVyY2VudGFnZShjb2xvci5sKTtcbiAgICAgICAgICAgIHJnYiA9IGhzbFRvUmdiKGNvbG9yLmgsIHMsIGwpO1xuICAgICAgICAgICAgb2sgPSB0cnVlO1xuICAgICAgICAgICAgZm9ybWF0ID0gXCJoc2xcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2xvci5oYXNPd25Qcm9wZXJ0eShcImFcIikpIHtcbiAgICAgICAgICAgIGEgPSBjb2xvci5hO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYSA9IGJvdW5kQWxwaGEoYSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBvazogb2ssXG4gICAgICAgIGZvcm1hdDogY29sb3IuZm9ybWF0IHx8IGZvcm1hdCxcbiAgICAgICAgcjogbWF0aE1pbigyNTUsIG1hdGhNYXgocmdiLnIsIDApKSxcbiAgICAgICAgZzogbWF0aE1pbigyNTUsIG1hdGhNYXgocmdiLmcsIDApKSxcbiAgICAgICAgYjogbWF0aE1pbigyNTUsIG1hdGhNYXgocmdiLmIsIDApKSxcbiAgICAgICAgYTogYVxuICAgIH07XG59XG5cblxuLy8gQ29udmVyc2lvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIGByZ2JUb0hzbGAsIGByZ2JUb0hzdmAsIGBoc2xUb1JnYmAsIGBoc3ZUb1JnYmAgbW9kaWZpZWQgZnJvbTpcbi8vIDxodHRwOi8vbWppamFja3Nvbi5jb20vMjAwOC8wMi9yZ2ItdG8taHNsLWFuZC1yZ2ItdG8taHN2LWNvbG9yLW1vZGVsLWNvbnZlcnNpb24tYWxnb3JpdGhtcy1pbi1qYXZhc2NyaXB0PlxuXG4vLyBgcmdiVG9SZ2JgXG4vLyBIYW5kbGUgYm91bmRzIC8gcGVyY2VudGFnZSBjaGVja2luZyB0byBjb25mb3JtIHRvIENTUyBjb2xvciBzcGVjXG4vLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8+XG4vLyAqQXNzdW1lczoqIHIsIGcsIGIgaW4gWzAsIDI1NV0gb3IgWzAsIDFdXG4vLyAqUmV0dXJuczoqIHsgciwgZywgYiB9IGluIFswLCAyNTVdXG5mdW5jdGlvbiByZ2JUb1JnYihyLCBnLCBiKXtcbiAgICByZXR1cm4ge1xuICAgICAgICByOiBib3VuZDAxKHIsIDI1NSkgKiAyNTUsXG4gICAgICAgIGc6IGJvdW5kMDEoZywgMjU1KSAqIDI1NSxcbiAgICAgICAgYjogYm91bmQwMShiLCAyNTUpICogMjU1XG4gICAgfTtcbn1cblxuLy8gYHJnYlRvSHNsYFxuLy8gQ29udmVydHMgYW4gUkdCIGNvbG9yIHZhbHVlIHRvIEhTTC5cbi8vICpBc3N1bWVzOiogciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiBbMCwgMjU1XSBvciBbMCwgMV1cbi8vICpSZXR1cm5zOiogeyBoLCBzLCBsIH0gaW4gWzAsMV1cbmZ1bmN0aW9uIHJnYlRvSHNsKHIsIGcsIGIpIHtcblxuICAgIHIgPSBib3VuZDAxKHIsIDI1NSk7XG4gICAgZyA9IGJvdW5kMDEoZywgMjU1KTtcbiAgICBiID0gYm91bmQwMShiLCAyNTUpO1xuXG4gICAgdmFyIG1heCA9IG1hdGhNYXgociwgZywgYiksIG1pbiA9IG1hdGhNaW4ociwgZywgYik7XG4gICAgdmFyIGgsIHMsIGwgPSAobWF4ICsgbWluKSAvIDI7XG5cbiAgICBpZihtYXggPT0gbWluKSB7XG4gICAgICAgIGggPSBzID0gMDsgLy8gYWNocm9tYXRpY1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGQgPSBtYXggLSBtaW47XG4gICAgICAgIHMgPSBsID4gMC41ID8gZCAvICgyIC0gbWF4IC0gbWluKSA6IGQgLyAobWF4ICsgbWluKTtcbiAgICAgICAgc3dpdGNoKG1heCkge1xuICAgICAgICAgICAgY2FzZSByOiBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBnOiBoID0gKGIgLSByKSAvIGQgKyAyOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYjogaCA9IChyIC0gZykgLyBkICsgNDsgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBoIC89IDY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgaDogaCwgczogcywgbDogbCB9O1xufVxuXG4vLyBgaHNsVG9SZ2JgXG4vLyBDb252ZXJ0cyBhbiBIU0wgY29sb3IgdmFsdWUgdG8gUkdCLlxuLy8gKkFzc3VtZXM6KiBoIGlzIGNvbnRhaW5lZCBpbiBbMCwgMV0gb3IgWzAsIDM2MF0gYW5kIHMgYW5kIGwgYXJlIGNvbnRhaW5lZCBbMCwgMV0gb3IgWzAsIDEwMF1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gdGhlIHNldCBbMCwgMjU1XVxuZnVuY3Rpb24gaHNsVG9SZ2IoaCwgcywgbCkge1xuICAgIHZhciByLCBnLCBiO1xuXG4gICAgaCA9IGJvdW5kMDEoaCwgMzYwKTtcbiAgICBzID0gYm91bmQwMShzLCAxMDApO1xuICAgIGwgPSBib3VuZDAxKGwsIDEwMCk7XG5cbiAgICBmdW5jdGlvbiBodWUycmdiKHAsIHEsIHQpIHtcbiAgICAgICAgaWYodCA8IDApIHQgKz0gMTtcbiAgICAgICAgaWYodCA+IDEpIHQgLT0gMTtcbiAgICAgICAgaWYodCA8IDEvNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgICAgIGlmKHQgPCAxLzIpIHJldHVybiBxO1xuICAgICAgICBpZih0IDwgMi8zKSByZXR1cm4gcCArIChxIC0gcCkgKiAoMi8zIC0gdCkgKiA2O1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICBpZihzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IGw7IC8vIGFjaHJvbWF0aWNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgdmFyIHAgPSAyICogbCAtIHE7XG4gICAgICAgIHIgPSBodWUycmdiKHAsIHEsIGggKyAxLzMpO1xuICAgICAgICBnID0gaHVlMnJnYihwLCBxLCBoKTtcbiAgICAgICAgYiA9IGh1ZTJyZ2IocCwgcSwgaCAtIDEvMyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcjogciAqIDI1NSwgZzogZyAqIDI1NSwgYjogYiAqIDI1NSB9O1xufVxuXG4vLyBgcmdiVG9Ic3ZgXG4vLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNWXG4vLyAqQXNzdW1lczoqIHIsIGcsIGFuZCBiIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMjU1XSBvciBbMCwgMV1cbi8vICpSZXR1cm5zOiogeyBoLCBzLCB2IH0gaW4gWzAsMV1cbmZ1bmN0aW9uIHJnYlRvSHN2KHIsIGcsIGIpIHtcblxuICAgIHIgPSBib3VuZDAxKHIsIDI1NSk7XG4gICAgZyA9IGJvdW5kMDEoZywgMjU1KTtcbiAgICBiID0gYm91bmQwMShiLCAyNTUpO1xuXG4gICAgdmFyIG1heCA9IG1hdGhNYXgociwgZywgYiksIG1pbiA9IG1hdGhNaW4ociwgZywgYik7XG4gICAgdmFyIGgsIHMsIHYgPSBtYXg7XG5cbiAgICB2YXIgZCA9IG1heCAtIG1pbjtcbiAgICBzID0gbWF4ID09PSAwID8gMCA6IGQgLyBtYXg7XG5cbiAgICBpZihtYXggPT0gbWluKSB7XG4gICAgICAgIGggPSAwOyAvLyBhY2hyb21hdGljXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzd2l0Y2gobWF4KSB7XG4gICAgICAgICAgICBjYXNlIHI6IGggPSAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKTsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGc6IGggPSAoYiAtIHIpIC8gZCArIDI7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiOiBoID0gKHIgLSBnKSAvIGQgKyA0OyBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBoIC89IDY7XG4gICAgfVxuICAgIHJldHVybiB7IGg6IGgsIHM6IHMsIHY6IHYgfTtcbn1cblxuLy8gYGhzdlRvUmdiYFxuLy8gQ29udmVydHMgYW4gSFNWIGNvbG9yIHZhbHVlIHRvIFJHQi5cbi8vICpBc3N1bWVzOiogaCBpcyBjb250YWluZWQgaW4gWzAsIDFdIG9yIFswLCAzNjBdIGFuZCBzIGFuZCB2IGFyZSBjb250YWluZWQgaW4gWzAsIDFdIG9yIFswLCAxMDBdXG4vLyAqUmV0dXJuczoqIHsgciwgZywgYiB9IGluIHRoZSBzZXQgWzAsIDI1NV1cbiBmdW5jdGlvbiBoc3ZUb1JnYihoLCBzLCB2KSB7XG5cbiAgICBoID0gYm91bmQwMShoLCAzNjApICogNjtcbiAgICBzID0gYm91bmQwMShzLCAxMDApO1xuICAgIHYgPSBib3VuZDAxKHYsIDEwMCk7XG5cbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoaCksXG4gICAgICAgIGYgPSBoIC0gaSxcbiAgICAgICAgcCA9IHYgKiAoMSAtIHMpLFxuICAgICAgICBxID0gdiAqICgxIC0gZiAqIHMpLFxuICAgICAgICB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpLFxuICAgICAgICBtb2QgPSBpICUgNixcbiAgICAgICAgciA9IFt2LCBxLCBwLCBwLCB0LCB2XVttb2RdLFxuICAgICAgICBnID0gW3QsIHYsIHYsIHEsIHAsIHBdW21vZF0sXG4gICAgICAgIGIgPSBbcCwgcCwgdCwgdiwgdiwgcV1bbW9kXTtcblxuICAgIHJldHVybiB7IHI6IHIgKiAyNTUsIGc6IGcgKiAyNTUsIGI6IGIgKiAyNTUgfTtcbn1cblxuLy8gYHJnYlRvSGV4YFxuLy8gQ29udmVydHMgYW4gUkdCIGNvbG9yIHRvIGhleFxuLy8gQXNzdW1lcyByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV1cbi8vIFJldHVybnMgYSAzIG9yIDYgY2hhcmFjdGVyIGhleFxuZnVuY3Rpb24gcmdiVG9IZXgociwgZywgYiwgYWxsb3czQ2hhcikge1xuXG4gICAgdmFyIGhleCA9IFtcbiAgICAgICAgcGFkMihtYXRoUm91bmQocikudG9TdHJpbmcoMTYpKSxcbiAgICAgICAgcGFkMihtYXRoUm91bmQoZykudG9TdHJpbmcoMTYpKSxcbiAgICAgICAgcGFkMihtYXRoUm91bmQoYikudG9TdHJpbmcoMTYpKVxuICAgIF07XG5cbiAgICAvLyBSZXR1cm4gYSAzIGNoYXJhY3RlciBoZXggaWYgcG9zc2libGVcbiAgICBpZiAoYWxsb3czQ2hhciAmJiBoZXhbMF0uY2hhckF0KDApID09IGhleFswXS5jaGFyQXQoMSkgJiYgaGV4WzFdLmNoYXJBdCgwKSA9PSBoZXhbMV0uY2hhckF0KDEpICYmIGhleFsyXS5jaGFyQXQoMCkgPT0gaGV4WzJdLmNoYXJBdCgxKSkge1xuICAgICAgICByZXR1cm4gaGV4WzBdLmNoYXJBdCgwKSArIGhleFsxXS5jaGFyQXQoMCkgKyBoZXhbMl0uY2hhckF0KDApO1xuICAgIH1cblxuICAgIHJldHVybiBoZXguam9pbihcIlwiKTtcbn1cblxuLy8gYHJnYmFUb0hleGBcbi8vIENvbnZlcnRzIGFuIFJHQkEgY29sb3IgcGx1cyBhbHBoYSB0cmFuc3BhcmVuY3kgdG8gaGV4XG4vLyBBc3N1bWVzIHIsIGcsIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdIGFuZFxuLy8gYSBpbiBbMCwgMV0uIFJldHVybnMgYSA0IG9yIDggY2hhcmFjdGVyIHJnYmEgaGV4XG5mdW5jdGlvbiByZ2JhVG9IZXgociwgZywgYiwgYSwgYWxsb3c0Q2hhcikge1xuXG4gICAgdmFyIGhleCA9IFtcbiAgICAgICAgcGFkMihtYXRoUm91bmQocikudG9TdHJpbmcoMTYpKSxcbiAgICAgICAgcGFkMihtYXRoUm91bmQoZykudG9TdHJpbmcoMTYpKSxcbiAgICAgICAgcGFkMihtYXRoUm91bmQoYikudG9TdHJpbmcoMTYpKSxcbiAgICAgICAgcGFkMihjb252ZXJ0RGVjaW1hbFRvSGV4KGEpKVxuICAgIF07XG5cbiAgICAvLyBSZXR1cm4gYSA0IGNoYXJhY3RlciBoZXggaWYgcG9zc2libGVcbiAgICBpZiAoYWxsb3c0Q2hhciAmJiBoZXhbMF0uY2hhckF0KDApID09IGhleFswXS5jaGFyQXQoMSkgJiYgaGV4WzFdLmNoYXJBdCgwKSA9PSBoZXhbMV0uY2hhckF0KDEpICYmIGhleFsyXS5jaGFyQXQoMCkgPT0gaGV4WzJdLmNoYXJBdCgxKSAmJiBoZXhbM10uY2hhckF0KDApID09IGhleFszXS5jaGFyQXQoMSkpIHtcbiAgICAgICAgcmV0dXJuIGhleFswXS5jaGFyQXQoMCkgKyBoZXhbMV0uY2hhckF0KDApICsgaGV4WzJdLmNoYXJBdCgwKSArIGhleFszXS5jaGFyQXQoMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgcmdiYVRvQXJnYkhleGBcbi8vIENvbnZlcnRzIGFuIFJHQkEgY29sb3IgdG8gYW4gQVJHQiBIZXg4IHN0cmluZ1xuLy8gUmFyZWx5IHVzZWQsIGJ1dCByZXF1aXJlZCBmb3IgXCJ0b0ZpbHRlcigpXCJcbmZ1bmN0aW9uIHJnYmFUb0FyZ2JIZXgociwgZywgYiwgYSkge1xuXG4gICAgdmFyIGhleCA9IFtcbiAgICAgICAgcGFkMihjb252ZXJ0RGVjaW1hbFRvSGV4KGEpKSxcbiAgICAgICAgcGFkMihtYXRoUm91bmQocikudG9TdHJpbmcoMTYpKSxcbiAgICAgICAgcGFkMihtYXRoUm91bmQoZykudG9TdHJpbmcoMTYpKSxcbiAgICAgICAgcGFkMihtYXRoUm91bmQoYikudG9TdHJpbmcoMTYpKVxuICAgIF07XG5cbiAgICByZXR1cm4gaGV4LmpvaW4oXCJcIik7XG59XG5cbi8vIGBlcXVhbHNgXG4vLyBDYW4gYmUgY2FsbGVkIHdpdGggYW55IHRpbnljb2xvciBpbnB1dFxudGlueWNvbG9yLmVxdWFscyA9IGZ1bmN0aW9uIChjb2xvcjEsIGNvbG9yMikge1xuICAgIGlmICghY29sb3IxIHx8ICFjb2xvcjIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgcmV0dXJuIHRpbnljb2xvcihjb2xvcjEpLnRvUmdiU3RyaW5nKCkgPT0gdGlueWNvbG9yKGNvbG9yMikudG9SZ2JTdHJpbmcoKTtcbn07XG5cbnRpbnljb2xvci5yYW5kb20gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGlueWNvbG9yLmZyb21SYXRpbyh7XG4gICAgICAgIHI6IG1hdGhSYW5kb20oKSxcbiAgICAgICAgZzogbWF0aFJhbmRvbSgpLFxuICAgICAgICBiOiBtYXRoUmFuZG9tKClcbiAgICB9KTtcbn07XG5cblxuLy8gTW9kaWZpY2F0aW9uIEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhhbmtzIHRvIGxlc3MuanMgZm9yIHNvbWUgb2YgdGhlIGJhc2ljcyBoZXJlXG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkaGVhZC9sZXNzLmpzL2Jsb2IvbWFzdGVyL2xpYi9sZXNzL2Z1bmN0aW9ucy5qcz5cblxuZnVuY3Rpb24gZGVzYXR1cmF0ZShjb2xvciwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCAxMCk7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICBoc2wucyAtPSBhbW91bnQgLyAxMDA7XG4gICAgaHNsLnMgPSBjbGFtcDAxKGhzbC5zKTtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbmZ1bmN0aW9uIHNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgICBhbW91bnQgPSAoYW1vdW50ID09PSAwKSA/IDAgOiAoYW1vdW50IHx8IDEwKTtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5zICs9IGFtb3VudCAvIDEwMDtcbiAgICBoc2wucyA9IGNsYW1wMDEoaHNsLnMpO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuZnVuY3Rpb24gZ3JleXNjYWxlKGNvbG9yKSB7XG4gICAgcmV0dXJuIHRpbnljb2xvcihjb2xvcikuZGVzYXR1cmF0ZSgxMDApO1xufVxuXG5mdW5jdGlvbiBsaWdodGVuIChjb2xvciwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCAxMCk7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICBoc2wubCArPSBhbW91bnQgLyAxMDA7XG4gICAgaHNsLmwgPSBjbGFtcDAxKGhzbC5sKTtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbmZ1bmN0aW9uIGJyaWdodGVuKGNvbG9yLCBhbW91bnQpIHtcbiAgICBhbW91bnQgPSAoYW1vdW50ID09PSAwKSA/IDAgOiAoYW1vdW50IHx8IDEwKTtcbiAgICB2YXIgcmdiID0gdGlueWNvbG9yKGNvbG9yKS50b1JnYigpO1xuICAgIHJnYi5yID0gbWF0aE1heCgwLCBtYXRoTWluKDI1NSwgcmdiLnIgLSBtYXRoUm91bmQoMjU1ICogLSAoYW1vdW50IC8gMTAwKSkpKTtcbiAgICByZ2IuZyA9IG1hdGhNYXgoMCwgbWF0aE1pbigyNTUsIHJnYi5nIC0gbWF0aFJvdW5kKDI1NSAqIC0gKGFtb3VudCAvIDEwMCkpKSk7XG4gICAgcmdiLmIgPSBtYXRoTWF4KDAsIG1hdGhNaW4oMjU1LCByZ2IuYiAtIG1hdGhSb3VuZCgyNTUgKiAtIChhbW91bnQgLyAxMDApKSkpO1xuICAgIHJldHVybiB0aW55Y29sb3IocmdiKTtcbn1cblxuZnVuY3Rpb24gZGFya2VuIChjb2xvciwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCAxMCk7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICBoc2wubCAtPSBhbW91bnQgLyAxMDA7XG4gICAgaHNsLmwgPSBjbGFtcDAxKGhzbC5sKTtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbi8vIFNwaW4gdGFrZXMgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBhbW91bnQgd2l0aGluIFstMzYwLCAzNjBdIGluZGljYXRpbmcgdGhlIGNoYW5nZSBvZiBodWUuXG4vLyBWYWx1ZXMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlIHdpbGwgYmUgd3JhcHBlZCBpbnRvIHRoaXMgcmFuZ2UuXG5mdW5jdGlvbiBzcGluKGNvbG9yLCBhbW91bnQpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIHZhciBodWUgPSAoaHNsLmggKyBhbW91bnQpICUgMzYwO1xuICAgIGhzbC5oID0gaHVlIDwgMCA/IDM2MCArIGh1ZSA6IGh1ZTtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbi8vIENvbWJpbmF0aW9uIEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaGFua3MgdG8galF1ZXJ5IHhDb2xvciBmb3Igc29tZSBvZiB0aGUgaWRlYXMgYmVoaW5kIHRoZXNlXG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL2luZnVzaW9uL2pRdWVyeS14Y29sb3IvYmxvYi9tYXN0ZXIvanF1ZXJ5Lnhjb2xvci5qcz5cblxuZnVuY3Rpb24gY29tcGxlbWVudChjb2xvcikge1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLmggPSAoaHNsLmggKyAxODApICUgMzYwO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuZnVuY3Rpb24gdHJpYWQoY29sb3IpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIHZhciBoID0gaHNsLmg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdGlueWNvbG9yKGNvbG9yKSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAxMjApICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmwgfSksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgMjQwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gdGV0cmFkKGNvbG9yKSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgaCA9IGhzbC5oO1xuICAgIHJldHVybiBbXG4gICAgICAgIHRpbnljb2xvcihjb2xvciksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgOTApICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmwgfSksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgMTgwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDI3MCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KVxuICAgIF07XG59XG5cbmZ1bmN0aW9uIHNwbGl0Y29tcGxlbWVudChjb2xvcikge1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIGggPSBoc2wuaDtcbiAgICByZXR1cm4gW1xuICAgICAgICB0aW55Y29sb3IoY29sb3IpLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDcyKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sfSksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgMjE2KSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sfSlcbiAgICBdO1xufVxuXG5mdW5jdGlvbiBhbmFsb2dvdXMoY29sb3IsIHJlc3VsdHMsIHNsaWNlcykge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IDY7XG4gICAgc2xpY2VzID0gc2xpY2VzIHx8IDMwO1xuXG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgcGFydCA9IDM2MCAvIHNsaWNlcztcbiAgICB2YXIgcmV0ID0gW3Rpbnljb2xvcihjb2xvcildO1xuXG4gICAgZm9yIChoc2wuaCA9ICgoaHNsLmggLSAocGFydCAqIHJlc3VsdHMgPj4gMSkpICsgNzIwKSAlIDM2MDsgLS1yZXN1bHRzOyApIHtcbiAgICAgICAgaHNsLmggPSAoaHNsLmggKyBwYXJ0KSAlIDM2MDtcbiAgICAgICAgcmV0LnB1c2godGlueWNvbG9yKGhzbCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBtb25vY2hyb21hdGljKGNvbG9yLCByZXN1bHRzKSB7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgNjtcbiAgICB2YXIgaHN2ID0gdGlueWNvbG9yKGNvbG9yKS50b0hzdigpO1xuICAgIHZhciBoID0gaHN2LmgsIHMgPSBoc3YucywgdiA9IGhzdi52O1xuICAgIHZhciByZXQgPSBbXTtcbiAgICB2YXIgbW9kaWZpY2F0aW9uID0gMSAvIHJlc3VsdHM7XG5cbiAgICB3aGlsZSAocmVzdWx0cy0tKSB7XG4gICAgICAgIHJldC5wdXNoKHRpbnljb2xvcih7IGg6IGgsIHM6IHMsIHY6IHZ9KSk7XG4gICAgICAgIHYgPSAodiArIG1vZGlmaWNhdGlvbikgJSAxO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG59XG5cbi8vIFV0aWxpdHkgRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGlueWNvbG9yLm1peCA9IGZ1bmN0aW9uKGNvbG9yMSwgY29sb3IyLCBhbW91bnQpIHtcbiAgICBhbW91bnQgPSAoYW1vdW50ID09PSAwKSA/IDAgOiAoYW1vdW50IHx8IDUwKTtcblxuICAgIHZhciByZ2IxID0gdGlueWNvbG9yKGNvbG9yMSkudG9SZ2IoKTtcbiAgICB2YXIgcmdiMiA9IHRpbnljb2xvcihjb2xvcjIpLnRvUmdiKCk7XG5cbiAgICB2YXIgcCA9IGFtb3VudCAvIDEwMDtcblxuICAgIHZhciByZ2JhID0ge1xuICAgICAgICByOiAoKHJnYjIuciAtIHJnYjEucikgKiBwKSArIHJnYjEucixcbiAgICAgICAgZzogKChyZ2IyLmcgLSByZ2IxLmcpICogcCkgKyByZ2IxLmcsXG4gICAgICAgIGI6ICgocmdiMi5iIC0gcmdiMS5iKSAqIHApICsgcmdiMS5iLFxuICAgICAgICBhOiAoKHJnYjIuYSAtIHJnYjEuYSkgKiBwKSArIHJnYjEuYVxuICAgIH07XG5cbiAgICByZXR1cm4gdGlueWNvbG9yKHJnYmEpO1xufTtcblxuXG4vLyBSZWFkYWJpbGl0eSBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jY29udHJhc3QtcmF0aW9kZWYgKFdDQUcgVmVyc2lvbiAyKVxuXG4vLyBgY29udHJhc3RgXG4vLyBBbmFseXplIHRoZSAyIGNvbG9ycyBhbmQgcmV0dXJucyB0aGUgY29sb3IgY29udHJhc3QgZGVmaW5lZCBieSAoV0NBRyBWZXJzaW9uIDIpXG50aW55Y29sb3IucmVhZGFiaWxpdHkgPSBmdW5jdGlvbihjb2xvcjEsIGNvbG9yMikge1xuICAgIHZhciBjMSA9IHRpbnljb2xvcihjb2xvcjEpO1xuICAgIHZhciBjMiA9IHRpbnljb2xvcihjb2xvcjIpO1xuICAgIHJldHVybiAoTWF0aC5tYXgoYzEuZ2V0THVtaW5hbmNlKCksYzIuZ2V0THVtaW5hbmNlKCkpKzAuMDUpIC8gKE1hdGgubWluKGMxLmdldEx1bWluYW5jZSgpLGMyLmdldEx1bWluYW5jZSgpKSswLjA1KTtcbn07XG5cbi8vIGBpc1JlYWRhYmxlYFxuLy8gRW5zdXJlIHRoYXQgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvciBjb21iaW5hdGlvbnMgbWVldCBXQ0FHMiBndWlkZWxpbmVzLlxuLy8gVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIE9iamVjdC5cbi8vICAgICAgdGhlICdsZXZlbCcgcHJvcGVydHkgc3RhdGVzICdBQScgb3IgJ0FBQScgLSBpZiBtaXNzaW5nIG9yIGludmFsaWQsIGl0IGRlZmF1bHRzIHRvICdBQSc7XG4vLyAgICAgIHRoZSAnc2l6ZScgcHJvcGVydHkgc3RhdGVzICdsYXJnZScgb3IgJ3NtYWxsJyAtIGlmIG1pc3Npbmcgb3IgaW52YWxpZCwgaXQgZGVmYXVsdHMgdG8gJ3NtYWxsJy5cbi8vIElmIHRoZSBlbnRpcmUgb2JqZWN0IGlzIGFic2VudCwgaXNSZWFkYWJsZSBkZWZhdWx0cyB0byB7bGV2ZWw6XCJBQVwiLHNpemU6XCJzbWFsbFwifS5cblxuLy8gKkV4YW1wbGUqXG4vLyAgICB0aW55Y29sb3IuaXNSZWFkYWJsZShcIiMwMDBcIiwgXCIjMTExXCIpID0+IGZhbHNlXG4vLyAgICB0aW55Y29sb3IuaXNSZWFkYWJsZShcIiMwMDBcIiwgXCIjMTExXCIse2xldmVsOlwiQUFcIixzaXplOlwibGFyZ2VcIn0pID0+IGZhbHNlXG50aW55Y29sb3IuaXNSZWFkYWJsZSA9IGZ1bmN0aW9uKGNvbG9yMSwgY29sb3IyLCB3Y2FnMikge1xuICAgIHZhciByZWFkYWJpbGl0eSA9IHRpbnljb2xvci5yZWFkYWJpbGl0eShjb2xvcjEsIGNvbG9yMik7XG4gICAgdmFyIHdjYWcyUGFybXMsIG91dDtcblxuICAgIG91dCA9IGZhbHNlO1xuXG4gICAgd2NhZzJQYXJtcyA9IHZhbGlkYXRlV0NBRzJQYXJtcyh3Y2FnMik7XG4gICAgc3dpdGNoICh3Y2FnMlBhcm1zLmxldmVsICsgd2NhZzJQYXJtcy5zaXplKSB7XG4gICAgICAgIGNhc2UgXCJBQXNtYWxsXCI6XG4gICAgICAgIGNhc2UgXCJBQUFsYXJnZVwiOlxuICAgICAgICAgICAgb3V0ID0gcmVhZGFiaWxpdHkgPj0gNC41O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBQWxhcmdlXCI6XG4gICAgICAgICAgICBvdXQgPSByZWFkYWJpbGl0eSA+PSAzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBQUFzbWFsbFwiOlxuICAgICAgICAgICAgb3V0ID0gcmVhZGFiaWxpdHkgPj0gNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuXG59O1xuXG4vLyBgbW9zdFJlYWRhYmxlYFxuLy8gR2l2ZW4gYSBiYXNlIGNvbG9yIGFuZCBhIGxpc3Qgb2YgcG9zc2libGUgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kXG4vLyBjb2xvcnMgZm9yIHRoYXQgYmFzZSwgcmV0dXJucyB0aGUgbW9zdCByZWFkYWJsZSBjb2xvci5cbi8vIE9wdGlvbmFsbHkgcmV0dXJucyBCbGFjayBvciBXaGl0ZSBpZiB0aGUgbW9zdCByZWFkYWJsZSBjb2xvciBpcyB1bnJlYWRhYmxlLlxuLy8gKkV4YW1wbGUqXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKHRpbnljb2xvci5tb3N0UmVhZGFibGUoXCIjMTIzXCIsIFtcIiMxMjRcIiwgXCIjMTI1XCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6ZmFsc2V9KS50b0hleFN0cmluZygpOyAvLyBcIiMxMTIyNTVcIlxuLy8gICAgdGlueWNvbG9yLm1vc3RSZWFkYWJsZSh0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiIzEyM1wiLCBbXCIjMTI0XCIsIFwiIzEyNVwiXSx7aW5jbHVkZUZhbGxiYWNrQ29sb3JzOnRydWV9KS50b0hleFN0cmluZygpOyAgLy8gXCIjZmZmZmZmXCJcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUoXCIjYTgwMTVhXCIsIFtcIiNmYWYzZjNcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczp0cnVlLGxldmVsOlwiQUFBXCIsc2l6ZTpcImxhcmdlXCJ9KS50b0hleFN0cmluZygpOyAvLyBcIiNmYWYzZjNcIlxuLy8gICAgdGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiNhODAxNWFcIiwgW1wiI2ZhZjNmM1wiXSx7aW5jbHVkZUZhbGxiYWNrQ29sb3JzOnRydWUsbGV2ZWw6XCJBQUFcIixzaXplOlwic21hbGxcIn0pLnRvSGV4U3RyaW5nKCk7IC8vIFwiI2ZmZmZmZlwiXG50aW55Y29sb3IubW9zdFJlYWRhYmxlID0gZnVuY3Rpb24oYmFzZUNvbG9yLCBjb2xvckxpc3QsIGFyZ3MpIHtcbiAgICB2YXIgYmVzdENvbG9yID0gbnVsbDtcbiAgICB2YXIgYmVzdFNjb3JlID0gMDtcbiAgICB2YXIgcmVhZGFiaWxpdHk7XG4gICAgdmFyIGluY2x1ZGVGYWxsYmFja0NvbG9ycywgbGV2ZWwsIHNpemUgO1xuICAgIGFyZ3MgPSBhcmdzIHx8IHt9O1xuICAgIGluY2x1ZGVGYWxsYmFja0NvbG9ycyA9IGFyZ3MuaW5jbHVkZUZhbGxiYWNrQ29sb3JzIDtcbiAgICBsZXZlbCA9IGFyZ3MubGV2ZWw7XG4gICAgc2l6ZSA9IGFyZ3Muc2l6ZTtcblxuICAgIGZvciAodmFyIGk9IDA7IGkgPCBjb2xvckxpc3QubGVuZ3RoIDsgaSsrKSB7XG4gICAgICAgIHJlYWRhYmlsaXR5ID0gdGlueWNvbG9yLnJlYWRhYmlsaXR5KGJhc2VDb2xvciwgY29sb3JMaXN0W2ldKTtcbiAgICAgICAgaWYgKHJlYWRhYmlsaXR5ID4gYmVzdFNjb3JlKSB7XG4gICAgICAgICAgICBiZXN0U2NvcmUgPSByZWFkYWJpbGl0eTtcbiAgICAgICAgICAgIGJlc3RDb2xvciA9IHRpbnljb2xvcihjb2xvckxpc3RbaV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRpbnljb2xvci5pc1JlYWRhYmxlKGJhc2VDb2xvciwgYmVzdENvbG9yLCB7XCJsZXZlbFwiOmxldmVsLFwic2l6ZVwiOnNpemV9KSB8fCAhaW5jbHVkZUZhbGxiYWNrQ29sb3JzKSB7XG4gICAgICAgIHJldHVybiBiZXN0Q29sb3I7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcmdzLmluY2x1ZGVGYWxsYmFja0NvbG9ycz1mYWxzZTtcbiAgICAgICAgcmV0dXJuIHRpbnljb2xvci5tb3N0UmVhZGFibGUoYmFzZUNvbG9yLFtcIiNmZmZcIiwgXCIjMDAwXCJdLGFyZ3MpO1xuICAgIH1cbn07XG5cblxuLy8gQmlnIExpc3Qgb2YgQ29sb3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNzdmctY29sb3I+XG52YXIgbmFtZXMgPSB0aW55Y29sb3IubmFtZXMgPSB7XG4gICAgYWxpY2VibHVlOiBcImYwZjhmZlwiLFxuICAgIGFudGlxdWV3aGl0ZTogXCJmYWViZDdcIixcbiAgICBhcXVhOiBcIjBmZlwiLFxuICAgIGFxdWFtYXJpbmU6IFwiN2ZmZmQ0XCIsXG4gICAgYXp1cmU6IFwiZjBmZmZmXCIsXG4gICAgYmVpZ2U6IFwiZjVmNWRjXCIsXG4gICAgYmlzcXVlOiBcImZmZTRjNFwiLFxuICAgIGJsYWNrOiBcIjAwMFwiLFxuICAgIGJsYW5jaGVkYWxtb25kOiBcImZmZWJjZFwiLFxuICAgIGJsdWU6IFwiMDBmXCIsXG4gICAgYmx1ZXZpb2xldDogXCI4YTJiZTJcIixcbiAgICBicm93bjogXCJhNTJhMmFcIixcbiAgICBidXJseXdvb2Q6IFwiZGViODg3XCIsXG4gICAgYnVybnRzaWVubmE6IFwiZWE3ZTVkXCIsXG4gICAgY2FkZXRibHVlOiBcIjVmOWVhMFwiLFxuICAgIGNoYXJ0cmV1c2U6IFwiN2ZmZjAwXCIsXG4gICAgY2hvY29sYXRlOiBcImQyNjkxZVwiLFxuICAgIGNvcmFsOiBcImZmN2Y1MFwiLFxuICAgIGNvcm5mbG93ZXJibHVlOiBcIjY0OTVlZFwiLFxuICAgIGNvcm5zaWxrOiBcImZmZjhkY1wiLFxuICAgIGNyaW1zb246IFwiZGMxNDNjXCIsXG4gICAgY3lhbjogXCIwZmZcIixcbiAgICBkYXJrYmx1ZTogXCIwMDAwOGJcIixcbiAgICBkYXJrY3lhbjogXCIwMDhiOGJcIixcbiAgICBkYXJrZ29sZGVucm9kOiBcImI4ODYwYlwiLFxuICAgIGRhcmtncmF5OiBcImE5YTlhOVwiLFxuICAgIGRhcmtncmVlbjogXCIwMDY0MDBcIixcbiAgICBkYXJrZ3JleTogXCJhOWE5YTlcIixcbiAgICBkYXJra2hha2k6IFwiYmRiNzZiXCIsXG4gICAgZGFya21hZ2VudGE6IFwiOGIwMDhiXCIsXG4gICAgZGFya29saXZlZ3JlZW46IFwiNTU2YjJmXCIsXG4gICAgZGFya29yYW5nZTogXCJmZjhjMDBcIixcbiAgICBkYXJrb3JjaGlkOiBcIjk5MzJjY1wiLFxuICAgIGRhcmtyZWQ6IFwiOGIwMDAwXCIsXG4gICAgZGFya3NhbG1vbjogXCJlOTk2N2FcIixcbiAgICBkYXJrc2VhZ3JlZW46IFwiOGZiYzhmXCIsXG4gICAgZGFya3NsYXRlYmx1ZTogXCI0ODNkOGJcIixcbiAgICBkYXJrc2xhdGVncmF5OiBcIjJmNGY0ZlwiLFxuICAgIGRhcmtzbGF0ZWdyZXk6IFwiMmY0ZjRmXCIsXG4gICAgZGFya3R1cnF1b2lzZTogXCIwMGNlZDFcIixcbiAgICBkYXJrdmlvbGV0OiBcIjk0MDBkM1wiLFxuICAgIGRlZXBwaW5rOiBcImZmMTQ5M1wiLFxuICAgIGRlZXBza3libHVlOiBcIjAwYmZmZlwiLFxuICAgIGRpbWdyYXk6IFwiNjk2OTY5XCIsXG4gICAgZGltZ3JleTogXCI2OTY5NjlcIixcbiAgICBkb2RnZXJibHVlOiBcIjFlOTBmZlwiLFxuICAgIGZpcmVicmljazogXCJiMjIyMjJcIixcbiAgICBmbG9yYWx3aGl0ZTogXCJmZmZhZjBcIixcbiAgICBmb3Jlc3RncmVlbjogXCIyMjhiMjJcIixcbiAgICBmdWNoc2lhOiBcImYwZlwiLFxuICAgIGdhaW5zYm9ybzogXCJkY2RjZGNcIixcbiAgICBnaG9zdHdoaXRlOiBcImY4ZjhmZlwiLFxuICAgIGdvbGQ6IFwiZmZkNzAwXCIsXG4gICAgZ29sZGVucm9kOiBcImRhYTUyMFwiLFxuICAgIGdyYXk6IFwiODA4MDgwXCIsXG4gICAgZ3JlZW46IFwiMDA4MDAwXCIsXG4gICAgZ3JlZW55ZWxsb3c6IFwiYWRmZjJmXCIsXG4gICAgZ3JleTogXCI4MDgwODBcIixcbiAgICBob25leWRldzogXCJmMGZmZjBcIixcbiAgICBob3RwaW5rOiBcImZmNjliNFwiLFxuICAgIGluZGlhbnJlZDogXCJjZDVjNWNcIixcbiAgICBpbmRpZ286IFwiNGIwMDgyXCIsXG4gICAgaXZvcnk6IFwiZmZmZmYwXCIsXG4gICAga2hha2k6IFwiZjBlNjhjXCIsXG4gICAgbGF2ZW5kZXI6IFwiZTZlNmZhXCIsXG4gICAgbGF2ZW5kZXJibHVzaDogXCJmZmYwZjVcIixcbiAgICBsYXduZ3JlZW46IFwiN2NmYzAwXCIsXG4gICAgbGVtb25jaGlmZm9uOiBcImZmZmFjZFwiLFxuICAgIGxpZ2h0Ymx1ZTogXCJhZGQ4ZTZcIixcbiAgICBsaWdodGNvcmFsOiBcImYwODA4MFwiLFxuICAgIGxpZ2h0Y3lhbjogXCJlMGZmZmZcIixcbiAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogXCJmYWZhZDJcIixcbiAgICBsaWdodGdyYXk6IFwiZDNkM2QzXCIsXG4gICAgbGlnaHRncmVlbjogXCI5MGVlOTBcIixcbiAgICBsaWdodGdyZXk6IFwiZDNkM2QzXCIsXG4gICAgbGlnaHRwaW5rOiBcImZmYjZjMVwiLFxuICAgIGxpZ2h0c2FsbW9uOiBcImZmYTA3YVwiLFxuICAgIGxpZ2h0c2VhZ3JlZW46IFwiMjBiMmFhXCIsXG4gICAgbGlnaHRza3libHVlOiBcIjg3Y2VmYVwiLFxuICAgIGxpZ2h0c2xhdGVncmF5OiBcIjc4OVwiLFxuICAgIGxpZ2h0c2xhdGVncmV5OiBcIjc4OVwiLFxuICAgIGxpZ2h0c3RlZWxibHVlOiBcImIwYzRkZVwiLFxuICAgIGxpZ2h0eWVsbG93OiBcImZmZmZlMFwiLFxuICAgIGxpbWU6IFwiMGYwXCIsXG4gICAgbGltZWdyZWVuOiBcIjMyY2QzMlwiLFxuICAgIGxpbmVuOiBcImZhZjBlNlwiLFxuICAgIG1hZ2VudGE6IFwiZjBmXCIsXG4gICAgbWFyb29uOiBcIjgwMDAwMFwiLFxuICAgIG1lZGl1bWFxdWFtYXJpbmU6IFwiNjZjZGFhXCIsXG4gICAgbWVkaXVtYmx1ZTogXCIwMDAwY2RcIixcbiAgICBtZWRpdW1vcmNoaWQ6IFwiYmE1NWQzXCIsXG4gICAgbWVkaXVtcHVycGxlOiBcIjkzNzBkYlwiLFxuICAgIG1lZGl1bXNlYWdyZWVuOiBcIjNjYjM3MVwiLFxuICAgIG1lZGl1bXNsYXRlYmx1ZTogXCI3YjY4ZWVcIixcbiAgICBtZWRpdW1zcHJpbmdncmVlbjogXCIwMGZhOWFcIixcbiAgICBtZWRpdW10dXJxdW9pc2U6IFwiNDhkMWNjXCIsXG4gICAgbWVkaXVtdmlvbGV0cmVkOiBcImM3MTU4NVwiLFxuICAgIG1pZG5pZ2h0Ymx1ZTogXCIxOTE5NzBcIixcbiAgICBtaW50Y3JlYW06IFwiZjVmZmZhXCIsXG4gICAgbWlzdHlyb3NlOiBcImZmZTRlMVwiLFxuICAgIG1vY2Nhc2luOiBcImZmZTRiNVwiLFxuICAgIG5hdmFqb3doaXRlOiBcImZmZGVhZFwiLFxuICAgIG5hdnk6IFwiMDAwMDgwXCIsXG4gICAgb2xkbGFjZTogXCJmZGY1ZTZcIixcbiAgICBvbGl2ZTogXCI4MDgwMDBcIixcbiAgICBvbGl2ZWRyYWI6IFwiNmI4ZTIzXCIsXG4gICAgb3JhbmdlOiBcImZmYTUwMFwiLFxuICAgIG9yYW5nZXJlZDogXCJmZjQ1MDBcIixcbiAgICBvcmNoaWQ6IFwiZGE3MGQ2XCIsXG4gICAgcGFsZWdvbGRlbnJvZDogXCJlZWU4YWFcIixcbiAgICBwYWxlZ3JlZW46IFwiOThmYjk4XCIsXG4gICAgcGFsZXR1cnF1b2lzZTogXCJhZmVlZWVcIixcbiAgICBwYWxldmlvbGV0cmVkOiBcImRiNzA5M1wiLFxuICAgIHBhcGF5YXdoaXA6IFwiZmZlZmQ1XCIsXG4gICAgcGVhY2hwdWZmOiBcImZmZGFiOVwiLFxuICAgIHBlcnU6IFwiY2Q4NTNmXCIsXG4gICAgcGluazogXCJmZmMwY2JcIixcbiAgICBwbHVtOiBcImRkYTBkZFwiLFxuICAgIHBvd2RlcmJsdWU6IFwiYjBlMGU2XCIsXG4gICAgcHVycGxlOiBcIjgwMDA4MFwiLFxuICAgIHJlYmVjY2FwdXJwbGU6IFwiNjYzMzk5XCIsXG4gICAgcmVkOiBcImYwMFwiLFxuICAgIHJvc3licm93bjogXCJiYzhmOGZcIixcbiAgICByb3lhbGJsdWU6IFwiNDE2OWUxXCIsXG4gICAgc2FkZGxlYnJvd246IFwiOGI0NTEzXCIsXG4gICAgc2FsbW9uOiBcImZhODA3MlwiLFxuICAgIHNhbmR5YnJvd246IFwiZjRhNDYwXCIsXG4gICAgc2VhZ3JlZW46IFwiMmU4YjU3XCIsXG4gICAgc2Vhc2hlbGw6IFwiZmZmNWVlXCIsXG4gICAgc2llbm5hOiBcImEwNTIyZFwiLFxuICAgIHNpbHZlcjogXCJjMGMwYzBcIixcbiAgICBza3libHVlOiBcIjg3Y2VlYlwiLFxuICAgIHNsYXRlYmx1ZTogXCI2YTVhY2RcIixcbiAgICBzbGF0ZWdyYXk6IFwiNzA4MDkwXCIsXG4gICAgc2xhdGVncmV5OiBcIjcwODA5MFwiLFxuICAgIHNub3c6IFwiZmZmYWZhXCIsXG4gICAgc3ByaW5nZ3JlZW46IFwiMDBmZjdmXCIsXG4gICAgc3RlZWxibHVlOiBcIjQ2ODJiNFwiLFxuICAgIHRhbjogXCJkMmI0OGNcIixcbiAgICB0ZWFsOiBcIjAwODA4MFwiLFxuICAgIHRoaXN0bGU6IFwiZDhiZmQ4XCIsXG4gICAgdG9tYXRvOiBcImZmNjM0N1wiLFxuICAgIHR1cnF1b2lzZTogXCI0MGUwZDBcIixcbiAgICB2aW9sZXQ6IFwiZWU4MmVlXCIsXG4gICAgd2hlYXQ6IFwiZjVkZWIzXCIsXG4gICAgd2hpdGU6IFwiZmZmXCIsXG4gICAgd2hpdGVzbW9rZTogXCJmNWY1ZjVcIixcbiAgICB5ZWxsb3c6IFwiZmYwXCIsXG4gICAgeWVsbG93Z3JlZW46IFwiOWFjZDMyXCJcbn07XG5cbi8vIE1ha2UgaXQgZWFzeSB0byBhY2Nlc3MgY29sb3JzIHZpYSBgaGV4TmFtZXNbaGV4XWBcbnZhciBoZXhOYW1lcyA9IHRpbnljb2xvci5oZXhOYW1lcyA9IGZsaXAobmFtZXMpO1xuXG5cbi8vIFV0aWxpdGllc1xuLy8gLS0tLS0tLS0tXG5cbi8vIGB7ICduYW1lMSc6ICd2YWwxJyB9YCBiZWNvbWVzIGB7ICd2YWwxJzogJ25hbWUxJyB9YFxuZnVuY3Rpb24gZmxpcChvKSB7XG4gICAgdmFyIGZsaXBwZWQgPSB7IH07XG4gICAgZm9yICh2YXIgaSBpbiBvKSB7XG4gICAgICAgIGlmIChvLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICBmbGlwcGVkW29baV1dID0gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmxpcHBlZDtcbn1cblxuLy8gUmV0dXJuIGEgdmFsaWQgYWxwaGEgdmFsdWUgWzAsMV0gd2l0aCBhbGwgaW52YWxpZCB2YWx1ZXMgYmVpbmcgc2V0IHRvIDFcbmZ1bmN0aW9uIGJvdW5kQWxwaGEoYSkge1xuICAgIGEgPSBwYXJzZUZsb2F0KGEpO1xuXG4gICAgaWYgKGlzTmFOKGEpIHx8IGEgPCAwIHx8IGEgPiAxKSB7XG4gICAgICAgIGEgPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xufVxuXG4vLyBUYWtlIGlucHV0IGZyb20gWzAsIG5dIGFuZCByZXR1cm4gaXQgYXMgWzAsIDFdXG5mdW5jdGlvbiBib3VuZDAxKG4sIG1heCkge1xuICAgIGlmIChpc09uZVBvaW50WmVybyhuKSkgeyBuID0gXCIxMDAlXCI7IH1cblxuICAgIHZhciBwcm9jZXNzUGVyY2VudCA9IGlzUGVyY2VudGFnZShuKTtcbiAgICBuID0gbWF0aE1pbihtYXgsIG1hdGhNYXgoMCwgcGFyc2VGbG9hdChuKSkpO1xuXG4gICAgLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHBlcmNlbnRhZ2UgaW50byBudW1iZXJcbiAgICBpZiAocHJvY2Vzc1BlcmNlbnQpIHtcbiAgICAgICAgbiA9IHBhcnNlSW50KG4gKiBtYXgsIDEwKSAvIDEwMDtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzXG4gICAgaWYgKChNYXRoLmFicyhuIC0gbWF4KSA8IDAuMDAwMDAxKSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IGludG8gWzAsIDFdIHJhbmdlIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgICByZXR1cm4gKG4gJSBtYXgpIC8gcGFyc2VGbG9hdChtYXgpO1xufVxuXG4vLyBGb3JjZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDFcbmZ1bmN0aW9uIGNsYW1wMDEodmFsKSB7XG4gICAgcmV0dXJuIG1hdGhNaW4oMSwgbWF0aE1heCgwLCB2YWwpKTtcbn1cblxuLy8gUGFyc2UgYSBiYXNlLTE2IGhleCB2YWx1ZSBpbnRvIGEgYmFzZS0xMCBpbnRlZ2VyXG5mdW5jdGlvbiBwYXJzZUludEZyb21IZXgodmFsKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHZhbCwgMTYpO1xufVxuXG4vLyBOZWVkIHRvIGhhbmRsZSAxLjAgYXMgMTAwJSwgc2luY2Ugb25jZSBpdCBpcyBhIG51bWJlciwgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGl0IGFuZCAxXG4vLyA8aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83NDIyMDcyL2phdmFzY3JpcHQtaG93LXRvLWRldGVjdC1udW1iZXItYXMtYS1kZWNpbWFsLWluY2x1ZGluZy0xLTA+XG5mdW5jdGlvbiBpc09uZVBvaW50WmVybyhuKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBuID09IFwic3RyaW5nXCIgJiYgbi5pbmRleE9mKCcuJykgIT0gLTEgJiYgcGFyc2VGbG9hdChuKSA9PT0gMTtcbn1cblxuLy8gQ2hlY2sgdG8gc2VlIGlmIHN0cmluZyBwYXNzZWQgaW4gaXMgYSBwZXJjZW50YWdlXG5mdW5jdGlvbiBpc1BlcmNlbnRhZ2Uobikge1xuICAgIHJldHVybiB0eXBlb2YgbiA9PT0gXCJzdHJpbmdcIiAmJiBuLmluZGV4T2YoJyUnKSAhPSAtMTtcbn1cblxuLy8gRm9yY2UgYSBoZXggdmFsdWUgdG8gaGF2ZSAyIGNoYXJhY3RlcnNcbmZ1bmN0aW9uIHBhZDIoYykge1xuICAgIHJldHVybiBjLmxlbmd0aCA9PSAxID8gJzAnICsgYyA6ICcnICsgYztcbn1cblxuLy8gUmVwbGFjZSBhIGRlY2ltYWwgd2l0aCBpdCdzIHBlcmNlbnRhZ2UgdmFsdWVcbmZ1bmN0aW9uIGNvbnZlcnRUb1BlcmNlbnRhZ2Uobikge1xuICAgIGlmIChuIDw9IDEpIHtcbiAgICAgICAgbiA9IChuICogMTAwKSArIFwiJVwiO1xuICAgIH1cblxuICAgIHJldHVybiBuO1xufVxuXG4vLyBDb252ZXJ0cyBhIGRlY2ltYWwgdG8gYSBoZXggdmFsdWVcbmZ1bmN0aW9uIGNvbnZlcnREZWNpbWFsVG9IZXgoZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZCkgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbn1cbi8vIENvbnZlcnRzIGEgaGV4IHZhbHVlIHRvIGEgZGVjaW1hbFxuZnVuY3Rpb24gY29udmVydEhleFRvRGVjaW1hbChoKSB7XG4gICAgcmV0dXJuIChwYXJzZUludEZyb21IZXgoaCkgLyAyNTUpO1xufVxuXG52YXIgbWF0Y2hlcnMgPSAoZnVuY3Rpb24oKSB7XG5cbiAgICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy12YWx1ZXMvI2ludGVnZXJzPlxuICAgIHZhciBDU1NfSU5URUdFUiA9IFwiWy1cXFxcK10/XFxcXGQrJT9cIjtcblxuICAgIC8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jbnVtYmVyLXZhbHVlPlxuICAgIHZhciBDU1NfTlVNQkVSID0gXCJbLVxcXFwrXT9cXFxcZCpcXFxcLlxcXFxkKyU/XCI7XG5cbiAgICAvLyBBbGxvdyBwb3NpdGl2ZS9uZWdhdGl2ZSBpbnRlZ2VyL251bWJlci4gIERvbid0IGNhcHR1cmUgdGhlIGVpdGhlci9vciwganVzdCB0aGUgZW50aXJlIG91dGNvbWUuXG4gICAgdmFyIENTU19VTklUID0gXCIoPzpcIiArIENTU19OVU1CRVIgKyBcIil8KD86XCIgKyBDU1NfSU5URUdFUiArIFwiKVwiO1xuXG4gICAgLy8gQWN0dWFsIG1hdGNoaW5nLlxuICAgIC8vIFBhcmVudGhlc2VzIGFuZCBjb21tYXMgYXJlIG9wdGlvbmFsLCBidXQgbm90IHJlcXVpcmVkLlxuICAgIC8vIFdoaXRlc3BhY2UgY2FuIHRha2UgdGhlIHBsYWNlIG9mIGNvbW1hcyBvciBvcGVuaW5nIHBhcmVuXG4gICAgdmFyIFBFUk1JU1NJVkVfTUFUQ0gzID0gXCJbXFxcXHN8XFxcXChdKyhcIiArIENTU19VTklUICsgXCIpWyx8XFxcXHNdKyhcIiArIENTU19VTklUICsgXCIpWyx8XFxcXHNdKyhcIiArIENTU19VTklUICsgXCIpXFxcXHMqXFxcXCk/XCI7XG4gICAgdmFyIFBFUk1JU1NJVkVfTUFUQ0g0ID0gXCJbXFxcXHN8XFxcXChdKyhcIiArIENTU19VTklUICsgXCIpWyx8XFxcXHNdKyhcIiArIENTU19VTklUICsgXCIpWyx8XFxcXHNdKyhcIiArIENTU19VTklUICsgXCIpWyx8XFxcXHNdKyhcIiArIENTU19VTklUICsgXCIpXFxcXHMqXFxcXCk/XCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBDU1NfVU5JVDogbmV3IFJlZ0V4cChDU1NfVU5JVCksXG4gICAgICAgIHJnYjogbmV3IFJlZ0V4cChcInJnYlwiICsgUEVSTUlTU0lWRV9NQVRDSDMpLFxuICAgICAgICByZ2JhOiBuZXcgUmVnRXhwKFwicmdiYVwiICsgUEVSTUlTU0lWRV9NQVRDSDQpLFxuICAgICAgICBoc2w6IG5ldyBSZWdFeHAoXCJoc2xcIiArIFBFUk1JU1NJVkVfTUFUQ0gzKSxcbiAgICAgICAgaHNsYTogbmV3IFJlZ0V4cChcImhzbGFcIiArIFBFUk1JU1NJVkVfTUFUQ0g0KSxcbiAgICAgICAgaHN2OiBuZXcgUmVnRXhwKFwiaHN2XCIgKyBQRVJNSVNTSVZFX01BVENIMyksXG4gICAgICAgIGhzdmE6IG5ldyBSZWdFeHAoXCJoc3ZhXCIgKyBQRVJNSVNTSVZFX01BVENINCksXG4gICAgICAgIGhleDM6IC9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxcbiAgICAgICAgaGV4NjogL14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLFxuICAgICAgICBoZXg0OiAvXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLFxuICAgICAgICBoZXg4OiAvXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvXG4gICAgfTtcbn0pKCk7XG5cbi8vIGBpc1ZhbGlkQ1NTVW5pdGBcbi8vIFRha2UgaW4gYSBzaW5nbGUgc3RyaW5nIC8gbnVtYmVyIGFuZCBjaGVjayB0byBzZWUgaWYgaXQgbG9va3MgbGlrZSBhIENTUyB1bml0XG4vLyAoc2VlIGBtYXRjaGVyc2AgYWJvdmUgZm9yIGRlZmluaXRpb24pLlxuZnVuY3Rpb24gaXNWYWxpZENTU1VuaXQoY29sb3IpIHtcbiAgICByZXR1cm4gISFtYXRjaGVycy5DU1NfVU5JVC5leGVjKGNvbG9yKTtcbn1cblxuLy8gYHN0cmluZ0lucHV0VG9PYmplY3RgXG4vLyBQZXJtaXNzaXZlIHN0cmluZyBwYXJzaW5nLiAgVGFrZSBpbiBhIG51bWJlciBvZiBmb3JtYXRzLCBhbmQgb3V0cHV0IGFuIG9iamVjdFxuLy8gYmFzZWQgb24gZGV0ZWN0ZWQgZm9ybWF0LiAgUmV0dXJucyBgeyByLCBnLCBiIH1gIG9yIGB7IGgsIHMsIGwgfWAgb3IgYHsgaCwgcywgdn1gXG5mdW5jdGlvbiBzdHJpbmdJbnB1dFRvT2JqZWN0KGNvbG9yKSB7XG5cbiAgICBjb2xvciA9IGNvbG9yLnJlcGxhY2UodHJpbUxlZnQsJycpLnJlcGxhY2UodHJpbVJpZ2h0LCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgbmFtZWQgPSBmYWxzZTtcbiAgICBpZiAobmFtZXNbY29sb3JdKSB7XG4gICAgICAgIGNvbG9yID0gbmFtZXNbY29sb3JdO1xuICAgICAgICBuYW1lZCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbG9yID09ICd0cmFuc3BhcmVudCcpIHtcbiAgICAgICAgcmV0dXJuIHsgcjogMCwgZzogMCwgYjogMCwgYTogMCwgZm9ybWF0OiBcIm5hbWVcIiB9O1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBtYXRjaCBzdHJpbmcgaW5wdXQgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucy5cbiAgICAvLyBLZWVwIG1vc3Qgb2YgdGhlIG51bWJlciBib3VuZGluZyBvdXQgb2YgdGhpcyBmdW5jdGlvbiAtIGRvbid0IHdvcnJ5IGFib3V0IFswLDFdIG9yIFswLDEwMF0gb3IgWzAsMzYwXVxuICAgIC8vIEp1c3QgcmV0dXJuIGFuIG9iamVjdCBhbmQgbGV0IHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBoYW5kbGUgdGhhdC5cbiAgICAvLyBUaGlzIHdheSB0aGUgcmVzdWx0IHdpbGwgYmUgdGhlIHNhbWUgd2hldGhlciB0aGUgdGlueWNvbG9yIGlzIGluaXRpYWxpemVkIHdpdGggc3RyaW5nIG9yIG9iamVjdC5cbiAgICB2YXIgbWF0Y2g7XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLnJnYi5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHsgcjogbWF0Y2hbMV0sIGc6IG1hdGNoWzJdLCBiOiBtYXRjaFszXSB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMucmdiYS5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHsgcjogbWF0Y2hbMV0sIGc6IG1hdGNoWzJdLCBiOiBtYXRjaFszXSwgYTogbWF0Y2hbNF0gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzbC5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHsgaDogbWF0Y2hbMV0sIHM6IG1hdGNoWzJdLCBsOiBtYXRjaFszXSB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaHNsYS5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHsgaDogbWF0Y2hbMV0sIHM6IG1hdGNoWzJdLCBsOiBtYXRjaFszXSwgYTogbWF0Y2hbNF0gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzdi5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHsgaDogbWF0Y2hbMV0sIHM6IG1hdGNoWzJdLCB2OiBtYXRjaFszXSB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaHN2YS5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHsgaDogbWF0Y2hbMV0sIHM6IG1hdGNoWzJdLCB2OiBtYXRjaFszXSwgYTogbWF0Y2hbNF0gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDguZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0pLFxuICAgICAgICAgICAgZzogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzJdKSxcbiAgICAgICAgICAgIGI6IHBhcnNlSW50RnJvbUhleChtYXRjaFszXSksXG4gICAgICAgICAgICBhOiBjb252ZXJ0SGV4VG9EZWNpbWFsKG1hdGNoWzRdKSxcbiAgICAgICAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4OFwiXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oZXg2LmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzFdKSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSksXG4gICAgICAgICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10pLFxuICAgICAgICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXhcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4NC5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSArICcnICsgbWF0Y2hbMV0pLFxuICAgICAgICAgICAgZzogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzJdICsgJycgKyBtYXRjaFsyXSksXG4gICAgICAgICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10gKyAnJyArIG1hdGNoWzNdKSxcbiAgICAgICAgICAgIGE6IGNvbnZlcnRIZXhUb0RlY2ltYWwobWF0Y2hbNF0gKyAnJyArIG1hdGNoWzRdKSxcbiAgICAgICAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4OFwiXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oZXgzLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzFdICsgJycgKyBtYXRjaFsxXSksXG4gICAgICAgICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0gKyAnJyArIG1hdGNoWzJdKSxcbiAgICAgICAgICAgIGI6IHBhcnNlSW50RnJvbUhleChtYXRjaFszXSArICcnICsgbWF0Y2hbM10pLFxuICAgICAgICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXhcIlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXQ0FHMlBhcm1zKHBhcm1zKSB7XG4gICAgLy8gcmV0dXJuIHZhbGlkIFdDQUcyIHBhcm1zIGZvciBpc1JlYWRhYmxlLlxuICAgIC8vIElmIGlucHV0IHBhcm1zIGFyZSBpbnZhbGlkLCByZXR1cm4ge1wibGV2ZWxcIjpcIkFBXCIsIFwic2l6ZVwiOlwic21hbGxcIn1cbiAgICB2YXIgbGV2ZWwsIHNpemU7XG4gICAgcGFybXMgPSBwYXJtcyB8fCB7XCJsZXZlbFwiOlwiQUFcIiwgXCJzaXplXCI6XCJzbWFsbFwifTtcbiAgICBsZXZlbCA9IChwYXJtcy5sZXZlbCB8fCBcIkFBXCIpLnRvVXBwZXJDYXNlKCk7XG4gICAgc2l6ZSA9IChwYXJtcy5zaXplIHx8IFwic21hbGxcIikudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobGV2ZWwgIT09IFwiQUFcIiAmJiBsZXZlbCAhPT0gXCJBQUFcIikge1xuICAgICAgICBsZXZlbCA9IFwiQUFcIjtcbiAgICB9XG4gICAgaWYgKHNpemUgIT09IFwic21hbGxcIiAmJiBzaXplICE9PSBcImxhcmdlXCIpIHtcbiAgICAgICAgc2l6ZSA9IFwic21hbGxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHtcImxldmVsXCI6bGV2ZWwsIFwic2l6ZVwiOnNpemV9O1xufVxuXG4vLyBOb2RlOiBFeHBvcnQgZnVuY3Rpb25cbmlmICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSB0aW55Y29sb3I7XG59XG4vLyBBTUQvcmVxdWlyZWpzOiBEZWZpbmUgdGhlIG1vZHVsZVxuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtyZXR1cm4gdGlueWNvbG9yO30pO1xufVxuLy8gQnJvd3NlcjogRXhwb3NlIHRvIHdpbmRvd1xuZWxzZSB7XG4gICAgd2luZG93LnRpbnljb2xvciA9IHRpbnljb2xvcjtcbn1cblxufSkoTWF0aCk7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0UGFuZWxCb2R5LFxuXHRSYW5nZUNvbnRyb2wsXG5cdFBhdGgsXG5cdFNWRyxcblx0UmVjdCxcbn0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQHdvcmRwcmVzcy9pMThuJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7Y3JlYXRlQmxvY2t9IGZyb20gJ0B3b3JkcHJlc3MvYmxvY2tzJztcbmltcG9ydCB7SW5zcGVjdG9yQ29udHJvbHMsSW5uZXJCbG9ja3N9IGZyb20gJ0B3b3JkcHJlc3MvZWRpdG9yJztcbmltcG9ydCB7c2VsZWN0fSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdnZWNrby9ncmlkLWxheW91dC1iYXNpYyc7XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcblx0dGl0bGU6IF9fKCAnQmFzaWMnICksXG5cblx0cGFyZW50OiBbJ2dlY2tvL2dyaWQtbGF5b3V0J10sXG5cblx0aWNvbjogPFNWRyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxQYXRoIGQ9XCJNMCwwaDI0djI0SDBWMHogTTAsMGgyNHYyNEgwVjB6XCIgZmlsbD1cIm5vbmVcIiAvPjxQYXRoIGQ9XCJtMjAgN3YxMGgtMTZ2LTEwaDE2bTAtMmgtMTZjLTEuMSAwLTEuOTkgMC45LTEuOTkgMmwtMC4wMSAxMGMwIDEuMSAwLjkgMiAyIDJoMTZjMS4xIDAgMi0wLjkgMi0ydi0xMGMwLTEuMS0wLjktMi0yLTJ6XCIgLz48UmVjdCB4PVwiMTFcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCIxMVwiIHk9XCIxMVwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCI4XCIgeT1cIjhcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiOFwiIHk9XCIxMVwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCI1XCIgeT1cIjExXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjVcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCI4XCIgeT1cIjE0XCIgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjE0XCIgeT1cIjExXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjE0XCIgeT1cIjhcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiMTdcIiB5PVwiMTFcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiMTdcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjwvU1ZHPixcblxuXHRkZXNjcmlwdGlvbjogX18oICdBbiBpbWFnZSBncmlkIGJsb2NrLicgKSxcblxuXHRjYXRlZ29yeTogJ2NvbW1vbicsXG5cblx0c3VwcG9ydHM6IHtcblx0XHRjbGFzc05hbWU6IHRydWUsXG5cdFx0aW5zZXJ0ZXI6IHRydWUsXG5cdFx0cmV1c2FibGU6IGZhbHNlLFxuXHRcdGh0bWw6IGZhbHNlLFxuXHR9LFxuXG5cdHN0eWxlczogW1xuXHRcdHsgbmFtZTogJ2RlZmF1bHQnLCBsYWJlbDogX18oICdEZWZhdWx0JyksIGlzRGVmYXVsdDogdHJ1ZSB9LFxuXHRdLFxuXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHRoOiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHR3OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0fSxcblxuXHR0cmFuc2Zvcm1zOiB7XG5cdFx0ZnJvbTogW1xuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnYmxvY2snLFxuXHRcdFx0XHRibG9ja3M6IFsnZ2Vja28vZ3JpZC1sYXlvdXQtaW1hZ2UnLCAnZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbSddLFxuXHRcdFx0XHR0cmFuc2Zvcm06IChhdHRyaWJ1dGVzLCBpbm5lckJsb2NrcykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0KCdjb3JlL2VkaXRvcicpLmdldFNlbGVjdGVkQmxvY2soKTsgLy8gYmVjYXVzZSBpbm5lckJsb2NrcyBkb2VzIG5vdCB3b3JrLlxuXHRcdFx0XHRcdC8vIEl0IGFwcGVhcnMgdGhhdCBpbm5lckJsb2NrcyB3aWxsIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuXG5cdFx0XHRcdFx0Y29uc3Qge2gsIHd9ID0gYXR0cmlidXRlcztcblx0XHRcdFx0XHRyZXR1cm4gY3JlYXRlQmxvY2soJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdFx0aDogaCxcblx0XHRcdFx0XHRcdHc6IHcsXG5cdFx0XHRcdFx0fSwgc2VsZWN0ZWQuaW5uZXJCbG9ja3MpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcdFxuXHRcdF0sXG5cdH0sXG5cblx0ZGVwcmVjYXRlZDogW3tcblx0XHRtaWdyYXRlKCkge30sXG5cdFx0c2F2ZSgpIHtcblx0XHRcdHJldHVybiA8SW5uZXJCbG9ja3MuQ29udGVudCAvID4gO1xuXHRcdH0sXG5cdH1dLFxuXG5cdGVkaXQoeyBhdHRyaWJ1dGVzLCBzZXRBdHRyaWJ1dGVzLCBjbGFzc05hbWUsIGluc2VydEJsb2Nrc0FmdGVyIH0pIHtcblx0XHRjb25zdCB7XG5cdFx0XHRoLFxuXHRcdFx0dyxcblx0XHR9ID0gYXR0cmlidXRlcztcblx0XHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0XHRncmlkQ29sdW1uRW5kOiAnc3BhbiAnKyB3LFxuXHRcdFx0Z3JpZFJvd0VuZDogJ3NwYW4gJyArIGgsXG5cdFx0fTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdFx0PFBhbmVsQm9keSB0aXRsZT1cIkdyaWQgSXRlbVwiPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnV2lkdGgnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IHcgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHR3OiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnU3BhbiBSb3dzJyApIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBoIH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIG5leHQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdFx0aDogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW49eyAxIH1cblx0XHRcdFx0XHRcdFx0bWF4PXsgMTIgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblx0XHRcdFx0PC9JbnNwZWN0b3JDb250cm9scz5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9e2BnZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzYH0gc3R5bGU9e3N0eWxlc30+PC9kaXY+XG5cdFx0XHRcdDxkaXYgIGNsYXNzTmFtZT17YHdwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvcl9fd3JhcCBnZWNrby1ncmlkLWxheW91dC1iYXNpYyAke2F0dHJpYnV0ZXMuY2xhc3NOYW1lfWB9PlxuXHRcdFx0XHRcdHsgdHlwZW9mIGluc2VydEJsb2Nrc0FmdGVyID09PSAnZnVuY3Rpb24nIC8vVGhpcyBsaW5lIG1ha2VzIHN1cmUgc3R5bGVzIGRvIG5vdCBicmVha1xuXHRcdFx0XHRcdFx0PyA8SW5uZXJCbG9ja3MgdGVtcGxhdGVMb2NrPXsgZmFsc2UgfS8+XG5cdFx0XHRcdFx0XHQ6IDxwPkxvcmVtIElwc3VtPC9wPiAvLyBUaGlzIGlzIHdoYXQgc2hvd3MgYXMgdGhlIHByZXZpZXcgY29udGVudC5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9LFxuXG5cdHNhdmUoKSB7XG5cdFx0Ly8gSG9uZXN0bHkgSSBkb24ndCB3YW50IHRvIGRvIHRoaXMgYnV0IGNvbnZlbnRpb25zIGFyZSBjb252ZW50aW9ucy5cblx0XHRyZXR1cm4oPGRpdj48SW5uZXJCbG9ja3MuQ29udGVudCAvPjwvZGl2Pik7IFxuXHR9LFxufTtcbiIsIi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcImxvZGFzaC9kZWJvdW5jZVwiO1xuaW1wb3J0IHtcblx0UGFuZWxCb2R5LFxuXHRSYW5nZUNvbnRyb2wsXG5cdFBhdGgsXG5cdFNWRyxcblx0SWNvbkJ1dHRvbixcblx0VG9vbGJhcixcblx0UmVzaXphYmxlQm94LFxufSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgY3JlYXRlQmxvY2sgfSBmcm9tICdAd29yZHByZXNzL2Jsb2Nrcyc7XG5pbXBvcnQge1xuXHRJbnNwZWN0b3JDb250cm9scyxcblx0SW5uZXJCbG9ja3MsXG5cdE1lZGlhVXBsb2FkLFxuXHRNZWRpYVBsYWNlaG9sZGVyLFxuXHRCbG9ja0NvbnRyb2xzLFxufSBmcm9tICdAd29yZHByZXNzL2VkaXRvcic7XG5pbXBvcnQge1xuXHRzZWxlY3Rcbn0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcblxuY29uc3QgQUxMT1dFRF9CTE9DS1MgPSBbJ2NvcmUvcGFyYWdyYXBoJywgJ2NvcmUvaGVhZGluZycsICdjb3JlL2J1dHRvbicsICdjb3JlL2xpc3QnLCAnY29yZS9xdW90ZSddO1xuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdnZWNrby9ncmlkLWxheW91dC1pbWFnZSc7XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcblx0dGl0bGU6IF9fKCAnSW1hZ2UnICksXG5cblx0cGFyZW50OiBbJ2dlY2tvL2dyaWQtbGF5b3V0J10sXG5cblx0aWNvbjogPFNWRyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxQYXRoIGQ9XCJNMCwwaDI0djI0SDBWMHpcIiBmaWxsPVwibm9uZVwiIC8+PFBhdGggZD1cIm0xOSA1djE0aC0xNHYtMTRoMTRtMC0yaC0xNGMtMS4xIDAtMiAwLjktMiAydjE0YzAgMS4xIDAuOSAyIDIgMmgxNGMxLjEgMCAyLTAuOSAyLTJ2LTE0YzAtMS4xLTAuOS0yLTItMnpcIiAvPjxQYXRoIGQ9XCJtMTQuMTQgMTEuODZsLTMgMy44Ny0yLjE0LTIuNTktMyAzLjg2aDEybC0zLjg2LTUuMTR6XCIgLz48L1NWRz4sXG5cblx0ZGVzY3JpcHRpb246IF9fKCAnQW4gaW1hZ2UgR3JpZCBCbG9jay4nICksXG5cblx0Y2F0ZWdvcnk6ICdjb21tb24nLFxuXG5cdHN1cHBvcnRzOiB7XG5cdFx0Y2xhc3NOYW1lOiB0cnVlLFxuXHRcdGluc2VydGVyOiB0cnVlLFxuXHRcdHJldXNhYmxlOiBmYWxzZSxcblx0XHRodG1sOiBmYWxzZSxcblx0fSxcblxuXHRzdHlsZXM6IFtcblx0XHR7IG5hbWU6ICdkZWZhdWx0JywgbGFiZWw6IF9fKCAnRGVmYXVsdCcpLCBpc0RlZmF1bHQ6IHRydWUgfSxcblx0XHR7IG5hbWU6ICdob3ZlcicsIGxhYmVsOiBfXyggJ0hvdmVyJykgfSxcblx0XHR7IG5hbWU6ICduby1jYXB0aW9uJywgbGFiZWw6IF9fKCAnTm8gQ2FwdGlvbicpIH0sXG5cdF0sXG5cblx0YXR0cmlidXRlczoge1xuXHRcdGg6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDF9LFxuXHRcdHc6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDF9LFxuXHRcdG1pbkhlaWdodDogeyB0eXBlOiAnbnVtYmVyJywgZGVmYXVsdDogMjAwLH0sXG5cdFx0aW1nSWQ6IHsgdHlwZTogJ251bWJlcid9LFxuXHRcdGltZ1VybDogeyB0eXBlOiAnc3RyaW5nJ30sXG5cdH0sXG5cblx0dHJhbnNmb3Jtczoge1xuXHRcdGZyb206IFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2Jsb2NrJyxcblx0XHRcdFx0YmxvY2tzOiBbJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywgJ2dlY2tvL2dyaWQtbGF5b3V0LWl0ZW0nXSxcblx0XHRcdFx0dHJhbnNmb3JtOiAoYXR0cmlidXRlcywgaW5uZXJCbG9ja3MpID0+IHtcblx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZCA9IHNlbGVjdCgnY29yZS9lZGl0b3InKS5nZXRTZWxlY3RlZEJsb2NrKCk7IC8vIGJlY2F1c2UgaW5uZXJCbG9ja3MgZG9lcyBub3Qgd29yay5cblx0XHRcdFx0XHQvLyBJdCBhcHBlYXJzIHRoYXQgaW5uZXJCbG9ja3Mgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLlxuXHRcdFx0XHRcdGNvbnN0IHtoLCB3LCBiZ01lZGlhLCBiZ01lZGlhVXJsLCBtZWRpYUlkLCBtZWRpYVVybCwgbWluSGVpZ2h0fSA9IGF0dHJpYnV0ZXM7XG5cdFx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJsb2NrKCdnZWNrby9ncmlkLWxheW91dC1pbWFnZScsIHtcblx0XHRcdFx0XHRcdGg6IGgsXG5cdFx0XHRcdFx0XHR3OiB3LFxuXHRcdFx0XHRcdFx0aW1nSWQ6IGJnTWVkaWEgfHwgbWVkaWFJZCxcblx0XHRcdFx0XHRcdGltZ1VybDogYmdNZWRpYVVybCB8fCBtZWRpYVVybCxcblx0XHRcdFx0XHRcdG1pbkhlaWdodDogbWluSGVpZ2h0LFxuXHRcdFx0XHRcdH0sIHNlbGVjdGVkLmlubmVyQmxvY2tzKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXHRcblx0XHRdXG5cdH0sXG5cblx0ZGVwcmVjYXRlZDogW3tcblx0XHRtaWdyYXRlKCkge30sXG5cdFx0c2F2ZSgpIHtcblx0XHRcdHJldHVybig8SW5uZXJCbG9ja3MuQ29udGVudCAvPik7XG5cdFx0fSxcblx0fV0sXG5cblx0ZWRpdCh7IGF0dHJpYnV0ZXMsIHNldEF0dHJpYnV0ZXMsIGNsYXNzTmFtZSwgaW5zZXJ0QmxvY2tzQWZ0ZXIsIHRvZ2dsZVNlbGVjdGlvbiB9KSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0aCxcblx0XHRcdHcsXG5cdFx0XHRpbWdJZCxcblx0XHRcdGltZ1VybCxcblx0XHRcdG1pbkhlaWdodCxcblx0XHR9ID0gYXR0cmlidXRlcztcblx0XHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0XHRncmlkQ29sdW1uRW5kOiAnc3BhbiAnKyB3LFxuXHRcdFx0Z3JpZFJvd0VuZDogJ3NwYW4gJyArIGgsXG5cdFx0XHRtaW5IZWlnaHQ6IG1pbkhlaWdodCArICdweCcsXG5cdFx0fTtcblx0XHRjb25zdCBvblJlc2l6aW5nID0gKGV2ZW50LCBkaXJlY3Rpb24sIGVsdCwgZGVsdGEpID0+IHtcblx0XHRcdGlmIChkaXJlY3Rpb24gPT09ICdib3R0b20nKXtcblx0XHRcdFx0Y29uc3QgbmV3TWluSGVpZ2h0ID0gKGVsdC5jbGllbnRIZWlnaHQgPiA2MDApID8gNjAwIDogZWx0LmNsaWVudEhlaWdodDtcblx0XHRcdFx0c2V0QXR0cmlidXRlcyh7IG1pbkhlaWdodDogbmV3TWluSGVpZ2h0IH0pO1xuXHRcdFx0XHRlbHQuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGRpcmVjdGlvbiAhPT0gJ3JpZ2h0JykgcmV0dXJuO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coZWx0KTtcblx0XHRcdGNvbnN0IGNvbHVtbldpZHRoID0gTWF0aC5mbG9vcihlbHQucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCAvIHcpO1xuXHRcdFx0Y29uc3QgY3VycmVudFNwYW4gPSBNYXRoLmZsb29yKGVsdC5wYXJlbnROb2RlLm9mZnNldFdpZHRoIC8gY29sdW1uV2lkdGgpO1xuXHRcdFx0Y29uc3QgZWxDb2xXaWR0aCA9IE1hdGguZmxvb3IoZWx0LmNsaWVudFdpZHRoIC8gdyk7XG5cdFx0XHRjb25zdCBzcGFucyA9IE1hdGguZmxvb3IoZWx0LmNsaWVudFdpZHRoIC8gY29sdW1uV2lkdGgpO1xuXHRcdFx0Y29uc3QgdG9VcGRhdGUgPSBNYXRoLmZsb29yKHBhcnNlSW50KGRlbHRhLndpZHRoLCAxMCkgLyBjb2x1bW5XaWR0aCk7XG5cdFx0XHRjb25zdCBvcmlnaW5hbCA9IHcgLSB0b1VwZGF0ZTtcblx0XHRcdGxldCBuZXdXaWR0aCA9IHNwYW5zO1xuXHRcdFx0aWYgKG5ld1dpZHRoID4gMTIpIHtuZXdXaWR0aCA9IDEyfVxuXHRcdFx0aWYgKG5ld1dpZHRoIDwgMSkge25ld1dpZHRoID0gMX1cblx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0dzogbmV3V2lkdGgsXG5cdFx0XHR9ICk7XG5cdFx0XHRlbHQuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcblx0XHRcdC8vIH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PEluc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHRcdDxQYW5lbEJvZHkgdGl0bGU9XCJHcmlkIEl0ZW1cIj5cblx0XHRcdFx0XHRcdDxSYW5nZUNvbnRyb2xcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ01pbmltdW0gSGVpZ2h0JyApIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBtaW5IZWlnaHQgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtaW5IZWlnaHQ6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluID0gXCI1MFwiXG5cdFx0XHRcdFx0XHRcdG1heCA9IFwiNjAwXCJcblx0XHRcdFx0XHRcdFx0c3RlcCA9IFwiMVwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnV2lkdGgnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IHcgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHR3OiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnU3BhbiBSb3dzJyApIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBoIH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIG5leHQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdFx0aDogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW49eyAxIH1cblx0XHRcdFx0XHRcdFx0bWF4PXsgMTIgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblx0XHRcdFx0PC9JbnNwZWN0b3JDb250cm9scz5cblx0XHRcdFx0PEJsb2NrQ29udHJvbHM+XG5cdFx0XHRcdFx0PFRvb2xiYXI+XG5cdFx0XHRcdFx0XHQ8TWVkaWFVcGxvYWRcblx0XHRcdFx0XHRcdFx0b25TZWxlY3Q9eyh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHtcblx0XHRcdFx0XHRcdFx0XHRcdGltZ0lkOiB2YWx1ZS5pZCxcblx0XHRcdFx0XHRcdFx0XHRcdGltZ1VybDogdmFsdWUudXJsLFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0eXBlPXtbJ2ltYWdlJ119XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsoaW1nSWQpPyBpbWdJZDogbnVsbCB9XG5cdFx0XHRcdFx0XHRcdHJlbmRlcj17KHtvcGVufSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybihcblx0XHRcdFx0XHRcdFx0XHRcdDxJY29uQnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImNvbXBvbmVudHMtaWNvbi1idXR0b24gY29tcG9uZW50cy10b29sYmFyX19jb250cm9sXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ0VkaXQgaW1hZ2UnICkgfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvcGVufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPVwiZWRpdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvVG9vbGJhcj5cblx0XHRcdFx0PC8gQmxvY2tDb250cm9scz5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9e2BnZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzYH0gc3R5bGU9e3N0eWxlc30+PC9kaXY+XG5cdFx0XHRcdDxSZXNpemFibGVCb3hcblx0XHRcdFx0XHRcdHNpemUgPSB7e1xuXHRcdFx0XHRcdFx0XHR3aWR0aDogJycsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogJzEwMCUnLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8vIG1pbkhlaWdodCA9IFwiNTBcIlxuXHRcdFx0XHRcdFx0Ly8gbWluV2lkdGggPSBcIjEwMCVcIlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0ge1xuXHRcdFx0XHRcdFx0XHRgd3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yX193cmFwIGdlY2tvLWdyaWQtbGF5b3V0LWltYWdlICR7YXR0cmlidXRlcy5jbGFzc05hbWV9YFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gbWluSGVpZ2h0PXsgbWluSGVpZ2h0IH1cblx0XHRcdFx0XHRcdC8vIG1heEhlaWdodD17NjAwfVxuXHRcdFx0XHRcdFx0Ly8gbG9ja0FzcGVjdFJhdGlvXG5cdFx0XHRcdFx0XHRlbmFibGU9eyB7XG5cdFx0XHRcdFx0XHRcdHRvcDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHJpZ2h0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRib3R0b206IHRydWUsXG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRvblJlc2l6ZVN0YXJ0PXsgKGV2ZW50LCBkaXJlY3Rpb24sIGVsdCwgZGVsdGEpID0+IHtcblx0XHRcdFx0XHRcdFx0dG9nZ2xlU2VsZWN0aW9uKCBmYWxzZSApO1xuXHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRvblJlc2l6ZT17IFx0ZGVib3VuY2Uob25SZXNpemluZywgMjUwKSB9XG5cdFx0XHRcdFx0XHRvblJlc2l6ZVN0b3A9eyAoIGV2ZW50LCBkaXJlY3Rpb24sIGVsdCwgZGVsdGEgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGVsdC5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuXHRcdFx0XHRcdFx0XHRpZiAoZGlyZWN0aW9uICE9PSAnYm90dG9tJykgcmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdNaW5IZWlnaHQgPSAoZWx0LmNsaWVudEhlaWdodCA+IDYwMCk/IDYwMCA6IGVsdC5jbGllbnRIZWlnaHQ7XG5cdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRtaW5IZWlnaHQ6IG5ld01pbkhlaWdodCxcblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR0b2dnbGVTZWxlY3Rpb24oIHRydWUgKTtcblx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQhaW1nSWQgJiZcblx0XHRcdFx0XHRcdDxNZWRpYVBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0PXsodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbWdJZDogdmFsdWUuaWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltZ1VybDogdmFsdWUudXJsLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0YWxsb3dlZFR5cGVzPXtbJ2ltYWdlJ119XG5cdFx0XHRcdFx0XHRcdGFjY2VwdD1cImltYWdlLypcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aW1nVXJsICYmXG5cdFx0XHRcdFx0XHQ8aW1nIGNsYXNzTmFtZT1cImdlY2tvLWdyaWQtbGF5b3V0LWltYWdlX19pbWFnZVwiIHNyYz17aW1nVXJsfSAvPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpbWdJZCAmJlxuXHRcdFx0XHRcdFx0PGZpZ2NhcHRpb24gY2xhc3NOYW1lPVwiZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb25cIj5cblx0XHRcdFx0XHRcdFx0eyB0eXBlb2YgaW5zZXJ0QmxvY2tzQWZ0ZXIgPT09ICdmdW5jdGlvbicgLy9UaGlzIGxpbmUgbWFrZXMgc3VyZSBzdHlsZXMgZG8gbm90IGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0PyA8SW5uZXJCbG9ja3MgdGVtcGxhdGVMb2NrPXsgZmFsc2UgfSBhbGxvd2VkQmxvY2tzPXtBTExPV0VEX0JMT0NLU30vPlxuXHRcdFx0XHRcdFx0XHRcdDogPHA+TG9yZW0gSXBzdW08L3A+IC8vIFRoaXMgaXMgd2hhdCBzaG93cyBhcyB0aGUgcHJldmlldyBjb250ZW50LlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQ8L2ZpZ2NhcHRpb24+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L1Jlc2l6YWJsZUJveD5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblxuXHRzYXZlKCkge1xuXHRcdC8vIEhvbmVzdGx5IEkgZG9uJ3Qgd2FudCB0byBkbyB0aGlzIGJ1dCBjb252ZW50aW9ucyBhcmUgY29udmVudGlvbnMuXG5cdFx0cmV0dXJuKDxkaXY+PElubmVyQmxvY2tzLkNvbnRlbnQgLz48L2Rpdj4pOyBcblx0fSxcbn07XG4iLCJpbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInO1xuXG4vKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0UGFuZWxCb2R5LFxuXHRSYW5nZUNvbnRyb2wsXG5cdFBhdGgsXG5cdFNWRyxcbn0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQHdvcmRwcmVzcy9pMThuJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7Y3JlYXRlQmxvY2t9IGZyb20gJ0B3b3JkcHJlc3MvYmxvY2tzJztcbmltcG9ydCB7XG5cdEluc3BlY3RvckNvbnRyb2xzLFxuXHRJbm5lckJsb2Nrcyxcblx0TWVkaWFVcGxvYWQsXG5cdE1lZGlhUGxhY2Vob2xkZXIsXG5cdENvbG9yUGFsZXR0ZSxcblx0Z2V0Q29sb3JPYmplY3RCeUNvbG9yVmFsdWUsXG59IGZyb20gJ0B3b3JkcHJlc3MvZWRpdG9yJztcbmltcG9ydCB7XG5cdHNlbGVjdFxufSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IGRlcHJlY2F0ZWQgZnJvbSAnQHdvcmRwcmVzcy9kZXByZWNhdGVkJztcblxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbSc7XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcblx0dGl0bGU6IF9fKCdJdGVtIChkZXByZWNhdGVkKScpLFxuXG5cdHBhcmVudDogWydnZWNrby9ncmlkLWxheW91dCddLFxuXG5cdGljb246IDxTVkcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48UGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIiAvPjxQYXRoIGQ9XCJNMTEuOTkgMTguNTRsLTcuMzctNS43M0wzIDE0LjA3bDkgNyA5LTctMS42My0xLjI3ek0xMiAxNmw3LjM2LTUuNzNMMjEgOWwtOS03LTkgNyAxLjYzIDEuMjdMMTIgMTZ6bTAtMTEuNDdMMTcuNzQgOSAxMiAxMy40NyA2LjI2IDkgMTIgNC41M3pcIiAvPjwvU1ZHPixcblxuXHRkZXNjcmlwdGlvbjogX18oJ1RoaXMgYmxvY2sgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBiYXNpYyBvciBpbWFnZSBibG9jayBpbnN0ZWFkLicpLFxuXG5cdGNhdGVnb3J5OiAnY29tbW9uJyxcblxuXHRzdXBwb3J0czoge1xuXHRcdGluc2VydGVyOiBmYWxzZSxcblx0fSxcblxuXHRzdHlsZXM6IFtcblx0XHR7IG5hbWU6ICdkZWZhdWx0JywgbGFiZWw6IF9fKCAnRGVmYXVsdCcpLCBpc0RlZmF1bHQ6IHRydWUgfSxcblx0XHR7IG5hbWU6ICdob3ZlcicsIGxhYmVsOiBfXyggJ0hvdmVyJykgfSxcblx0XSxcblxuXHRhdHRyaWJ1dGVzOiB7XG5cdFx0dHlwZTp7IHR5cGU6ICdzdHJpbmcnLGRlZmF1bHQ6IHVuZGVmaW5lZCwgfSwgLy9zb2xpZCwgaW1hZ2UsIGltYWdlLWNvbnRlbnRcblx0XHRoOiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxLH0sXG5cdFx0dzogeyB0eXBlOiAnbnVtYmVyJ30sXG5cdFx0bWluSGVpZ2h0OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAyMDAsfSxcblx0XHRvcGFjaXR5OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHRiZ01lZGlhOiB7IHR5cGU6ICdudW1iZXInfSxcblx0XHRiZ01lZGlhVXJsOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0XHRiZ0NvbG9yOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0XHRiZ0NvbG9yU2x1ZzogeyB0eXBlOiAnc3RyaW5nJ30sXG5cdFx0YmdDb2xvckJyaWdodG5lc3M6IHt0eXBlOiAnbnVtYmVyJ30sLy9saWdodCBvciBkYXJrXG5cdH0sXG5cblx0ZGVwcmVjYXRlZDogW1xuXHRcdHtcblx0XHRcdG1pZ3JhdGUoYXR0cmlidXRlcywgaW5uZXJCbG9ja3MpIHtcblx0XHRcdFx0Ly8gY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9jaygpOyAvLyBiZWNhdXNlIGlubmVyQmxvY2tzIGRvZXMgbm90IHdvcmsuXG5cdFx0XHRcdC8vIEl0IGFwcGVhcnMgdGhhdCBpbm5lckJsb2NrcyB3aWxsIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuXG5cdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRoLFxuXHRcdFx0XHRcdHcsXG5cdFx0XHRcdFx0YmdNZWRpYSxcblx0XHRcdFx0XHRiZ01lZGlhVXJsLFxuXHRcdFx0XHRcdG1pbkhlaWdodFxuXHRcdFx0XHR9ID0gYXR0cmlidXRlcztcblx0XHRcdFx0aWYgKGJnTWVkaWEpIHtcblx0XHRcdFx0XHRyZXR1cm4gY3JlYXRlQmxvY2soJ2dlY2tvL2dyaWQtbGF5b3V0LWltYWdlJywge1xuXHRcdFx0XHRcdFx0aDogaCxcblx0XHRcdFx0XHRcdHc6IHcsXG5cdFx0XHRcdFx0XHRpbWdJZDogYmdNZWRpYSxcblx0XHRcdFx0XHRcdGltZ1VybDogYmdNZWRpYVVybCxcblx0XHRcdFx0XHRcdG1pbkhlaWdodDogbWluSGVpZ2h0LFxuXHRcdFx0XHRcdH0sIGlubmVyQmxvY2tzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQmxvY2soJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdGg6IGgsXG5cdFx0XHRcdFx0dzogdyxcblx0XHRcdFx0fSwgaW5uZXJCbG9ja3MpO1xuXHRcdFx0fSxcblx0XHRcdHNhdmUoKSB7XG5cdFx0XHRcdHJldHVybig8SW5uZXJCbG9ja3MuQ29udGVudCAvPik7XG5cdFx0XHR9LFxuXHRcdH1cblx0XSxcblxuXHRlZGl0KHsgYXR0cmlidXRlcywgc2V0QXR0cmlidXRlcywgY2xhc3NOYW1lLCBpbnNlcnRCbG9ja3NBZnRlciB9KSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0b3BhY2l0eSxcblx0XHRcdGgsXG5cdFx0XHR3LFxuXHRcdFx0dHlwZSxcblx0XHRcdHBhZGRpbmcsXG5cdFx0XHRiZ01lZGlhLFxuXHRcdFx0YmdNZWRpYVVybCxcblx0XHRcdGJnQ29sb3IsXG5cdFx0XHRiZ0NvbG9yQnJpZ2h0bmVzcyxcblx0XHRcdGJnQ29sb3JTbHVnLFxuXHRcdFx0bWluSGVpZ2h0LFxuXHRcdH0gPSBhdHRyaWJ1dGVzO1xuXHRcdGRlcHJlY2F0ZWQoJ0dyaWQgTGF5b3V0IElkZW0nLCB7XG5cdFx0XHRhbHRlcm5hdGl2ZTogJ0Jhc2ljIG9yIEltYWdlJyxcblx0XHRcdHBsdWdpbjogJ0dlY2tvIEdyaWQgTGF5b3V0Jyxcblx0XHR9KTtcblx0XHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0XHQnLS1iYWNrZ3JvdW5kJzogYmdDb2xvcixcblx0XHRcdCctLW9wYWNpdHknOiBvcGFjaXR5LFxuXHRcdFx0Z3JpZENvbHVtbkVuZDogJ3NwYW4gJysgdyxcblx0XHRcdGdyaWRSb3dFbmQ6ICdzcGFuICcgKyBoLFxuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBiZ0NvbG9yLFxuXHRcdFx0YmFja2dyb3VuZEltYWdlOiAndXJsKCcgKyBiZ01lZGlhVXJsICsgJyknLFxuXHRcdFx0bWluSGVpZ2h0OiBtaW5IZWlnaHQgKyAncHgnLFxuXHRcdH07XG5cdFx0bGV0IGxpZ2h0T3JEYXJrID0gJ2xpZ2h0Jztcblx0XHRpZiAoYmdDb2xvckJyaWdodG5lc3MgPCAxMzApIGxpZ2h0T3JEYXJrID0gJ2RhcmsnO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdDxJbnNwZWN0b3JDb250cm9scz5cblx0XHRcdFx0XHQ8UGFuZWxCb2R5ICB0aXRsZT1cIlNldHRpbmdzXCI+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdXaWR0aCcgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgdyB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdHc6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluPXsgMSB9XG5cdFx0XHRcdFx0XHRcdG1heD17IDEyIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdTcGFuIFJvd3MnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IGggfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRoOiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHRcdDxQYW5lbEJvZHkgdGl0bGU9XCJTdHlsZVwiPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnTWluaW11bSBIZWlnaHQnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IG1pbkhlaWdodCB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1pbkhlaWdodDogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW4gPSBcIjUwXCJcblx0XHRcdFx0XHRcdFx0bWF4ID0gXCI2MDBcIlxuXHRcdFx0XHRcdFx0XHRzdGVwID0gXCIxXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHR7IHR5cGUgIT09IFwic29saWRcIiAmJlxuXHRcdFx0XHRcdFx0XHQ8TWVkaWFVcGxvYWRcblx0XHRcdFx0XHRcdFx0XHRvblNlbGVjdD17KHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YmdNZWRpYTogdmFsdWUuaWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJnTWVkaWFVcmw6IHZhbHVlLnVybCxcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0dHlwZT17WydpbWFnZScsICd2aWRlbyddfVxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXsoYmdNZWRpYSk/IGJnTWVkaWE6IG51bGwgfVxuXHRcdFx0XHRcdFx0XHRcdHJlbmRlcj17KHtvcGVufSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtiZ01lZGlhVXJsICYmIDxpbWcgc3JjPXtiZ01lZGlhVXJsfSBvbkNsaWNrPXtvcGVufSB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCJhdXRvXCIgc3R5bGU9e3tjdXJzb3I6IFwicG9pbnRlclwifX0vPn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IWJnTWVkaWFVcmwgJiYgPGRpdiBjbGFzc05hbWU9eydidXR0b24gYnV0dG9uLWxhcmdlJ30gb25DbGljaz17b3Blbn0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRDaG9vc2UgQmFja2dyb3VuZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Pn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQ8aHIgLz5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8Q29sb3JQYWxldHRlXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD0nQmFja2dyb3VuZCBDb2xvcidcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXsoYmdDb2xvcikgPyBiZ0NvbG9yLmNvbG9yIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2UgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNldHRpbmdzID0gc2VsZWN0KCdjb3JlL2VkaXRvcicpLmdldEVkaXRvclNldHRpbmdzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgY29sb3JTbHVnID0gKHZhbHVlKSA/IGdldENvbG9yT2JqZWN0QnlDb2xvclZhbHVlKHNldHRpbmdzLmNvbG9ycywgdmFsdWUpLnNsdWcgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7YmdDb2xvclNsdWc6IGNvbG9yU2x1Z30pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGJyaWdodG5lc3MgPSAodmFsdWUpID8gdGlueWNvbG9yKHZhbHVlKS5nZXRCcmlnaHRuZXNzKCk6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHtiZ0NvbG9yQnJpZ2h0bmVzczogYnJpZ2h0bmVzc30pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe2JnQ29sb3I6IHZhbHVlfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDxociAvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblx0XHRcdFx0PC9JbnNwZWN0b3JDb250cm9scz5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9e2BnZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzYH0gc3R5bGU9e3N0eWxlc30+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXtgd3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yX193cmFwJHt0eXBlfSAke2F0dHJpYnV0ZXMuY2xhc3NOYW1lfSBoYXMtJHtiZ0NvbG9yU2x1Z30tYmFja2dyb3VuZC1jb2xvciBpcy0ke2xpZ2h0T3JEYXJrfS1iYWNrZ3JvdW5kYH0+XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0KHR5cGUgPT09ICdpbWFnZScgfHwgdHlwZSA9PT0gJ2ltYWdlLWNvbnRlbnQnKSAmJlxuXHRcdFx0XHRcdFx0IWJnTWVkaWEgJiZcblx0XHRcdFx0XHRcdDxNZWRpYVBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0PXsodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRiZ01lZGlhOiB2YWx1ZS5pZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0YmdNZWRpYVVybDogdmFsdWUudXJsLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0YWxsb3dlZFR5cGVzPXtbJ2ltYWdlJ119XG5cdFx0XHRcdFx0XHRcdGFjY2VwdD1cImltYWdlLypcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0eyBcblx0XHRcdFx0XHRcdCh0eXBlb2YgaW5zZXJ0QmxvY2tzQWZ0ZXIgPT09ICdmdW5jdGlvbicpICYmIC8vVGhpcyBsaW5lIG1ha2VzIHN1cmUgc3R5bGVzIGRvIG5vdCBicmVha1xuXHRcdFx0XHRcdFx0PElubmVyQmxvY2tzIHRlbXBsYXRlTG9jaz17IGZhbHNlIH0gLz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH0sXG5cblx0c2F2ZSgpIHtcblx0XHQvLyBIb25lc3RseSBJIGRvbid0IHdhbnQgdG8gZG8gdGhpcyBidXQgY29udmVudGlvbnMgYXJlIGNvbnZlbnRpb25zLlxuXHRcdHJldHVybig8ZGl2PjxJbm5lckJsb2Nrcy5Db250ZW50IC8+PC9kaXY+KTtcblx0fSxcbn07XG4iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuaW1wb3J0IHsgRywgU1ZHLCBQYXRoIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7IElubmVyQmxvY2tzIH0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCB7Y3JlYXRlQmxvY2t9IGZyb20gJ0B3b3JkcHJlc3MvYmxvY2tzJztcbmltcG9ydCBUZW1wbGF0ZVBpY2tlciBmcm9tICcuL3RlbXBsYXRlLXNlbGVjdCc7XG5cbi8qKlxuICogQWxsb3dlZCBibG9ja3MgY29uc3RhbnQgaXMgcGFzc2VkIHRvIElubmVyQmxvY2tzIHByZWNpc2VseSBhcyBzcGVjaWZpZWQgaGVyZS5cbiAqIFRoZSBjb250ZW50cyBvZiB0aGUgYXJyYXkgc2hvdWxkIG5ldmVyIGNoYW5nZS5cbiAqIFRoZSBhcnJheSBzaG91bGQgY29udGFpbiB0aGUgbmFtZSBvZiBlYWNoIGJsb2NrIHRoYXQgaXMgYWxsb3dlZC5cbiAqXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmdbXX1cbiovXG5jb25zdCBBTExPV0VEX0JMT0NLUyA9IFsnZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbScsICdnZWNrby9ncmlkLWxheW91dC1pbWFnZScsICdnZWNrby9ncmlkLWxheW91dC1iYXNpYyddO1xuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdnZWNrby9ncmlkLWxheW91dCc7XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcblx0dGl0bGU6IF9fKCAnR3JpZCcgKSxcblxuXHRpY29uOiA8U1ZHIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PFBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIgLz48Rz48UGF0aCBkPVwiTTQsMTMgTDgsMTMgTDgsMTAgTDQsMTAgTDQsMTMgWiBNNCwxNSBMNCwxOCBMOCwxOCBMOCwxNSBMNCwxNSBaIE0xMCwxMyBMMTQsMTMgTDE0LDEwIEwxMCwxMCBMMTAsMTMgWiBNMTAsMTUgTDEwLDE4IEwxNCwxOCBMMTQsMTUgTDEwLDE1IFogTTIwLDEzIEwyMCwxMCBMMTYsMTAgTDE2LDEzIEwyMCwxMyBaIE0yMCwxNSBMMTYsMTUgTDE2LDE4IEwyMCwxOCBMMjAsMTUgWiBNNCw4IEw4LDggTDgsNSBMNCw1IEw0LDggWiBNMTAsOCBMMTQsOCBMMTQsNSBMMTAsNSBMMTAsOCBaIE0yMCw4IEwyMCw1IEwxNiw1IEwxNiw4IEwyMCw4IFogTTQsMyBMMjAsMyBDMjEuMTA0NTY5NSwzIDIyLDMuOTUxMzk0OTEgMjIsNS4xMjUgTDIyLDE3Ljg3NSBDMjIsMTkuMDQ4NjA1MSAyMS4xMDQ1Njk1LDIwIDIwLDIwIEw0LDIwIEMyLjg5NTQzMDUsMjAgMiwxOS4wNDg2MDUxIDIsMTcuODc1IEwyLDUuMTI1IEMyLDMuOTUxMzk0OTEgMi44OTU0MzA1LDMgNCwzIFpcIiAvPjwvRz48L1NWRz4sXG5cblx0Y2F0ZWdvcnk6ICdsYXlvdXQnLFxuXG5cdGRlc2NyaXB0aW9uOiBfXyggJ1VzZSBDU1MgR3JpZCB0byBidWlsZCBsYXlvdXRzIGFuZCwgdGhlbiBhZGQgd2hhdGV2ZXIgY29udGVudCBibG9ja3MgeW914oCZZCBsaWtlLicgKSxcblxuXHRzdXBwb3J0czoge1xuXHRcdGFsaWduOiBbICd3aWRlJywgJ2Z1bGwnIF0sXG5cdFx0aHRtbDogZmFsc2UsXG5cdH0sXG5cblx0ZGVwcmVjYXRlZDogW1xuXHRcdHtcblx0XHRcdG1pZ3JhdGUoKSB7fSxcblx0XHRcdHNhdmUoKSB7XG5cdFx0XHRcdHJldHVybiA8SW5uZXJCbG9ja3MuQ29udGVudCAvPjtcblx0XHRcdH0sXG5cdFx0fVxuXHRdLFxuXG5cdHRyYW5zZm9ybXM6IHtcblx0XHRmcm9tOiBbe1xuXHRcdFx0dHlwZTogJ2Jsb2NrJyxcblx0XHRcdGJsb2NrczogWydjb3JlL2NvbHVtbnMnXSxcblx0XHRcdHRyYW5zZm9ybTogKGF0dHJpYnV0ZXMpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9jaygpOyAvLyBiZWNhdXNlIGlubmVyQmxvY2tzIGRvZXMgbm90IHdvcmsuXG5cdFx0XHRcdGNvbnN0IGNvbHVtbnMgPSBzZWxlY3RlZC5pbm5lckJsb2Nrcztcblx0XHRcdFx0Y29uc3QgY291bnQgPSBjb2x1bW5zLmxlbmd0aDtcblx0XHRcdFx0Y29uc3QgdyA9IE1hdGguZmxvb3IoMTIvY291bnQpO1xuXHRcdFx0XHRjb25zdCBpbm5lckJsb2NrcyA9IFtdO1xuXHRcdFx0XHRjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYmxvY2sgPSBjcmVhdGVCbG9jaygnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7dzp3fSwgY29sdW1uLmlubmVyQmxvY2tzKTtcblx0XHRcdFx0XHRpbm5lckJsb2Nrcy5wdXNoKGJsb2NrKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJsb2NrKCdnZWNrby9ncmlkLWxheW91dCcsIHt9LCBpbm5lckJsb2Nrcyk7XG5cdFx0XHR9LFxuXHRcdH0sIF1cblx0fSxcblxuXHRzdHlsZXM6IFtcblx0XHR7IG5hbWU6ICdkZWZhdWx0JywgbGFiZWw6IF9fKCAnRGVmYXVsdCcpLCBpc0RlZmF1bHQ6IHRydWUgfSxcblx0XHR7IG5hbWU6ICduby1nYXAnLCBsYWJlbDogX18oICdObyBHYXAnKSB9LFxuXHRdLFxuXG5cdGVkaXQoIHsgaW5zZXJ0QmxvY2tzQWZ0ZXIsIGNsaWVudElkIH0gKSB7XG5cdFx0Ly8gR2V0IHRoZSBibG9jayBzbyB3ZSBjYW4gc2VlIGlmIGl0IGhhZCBpbm5lcmJsb2Nrc1xuXHRcdGNvbnN0IGJsb2NrID0gc2VsZWN0KCdjb3JlL2VkaXRvcicpLmdldEJsb2Nrc0J5Q2xpZW50SWQoY2xpZW50SWQpWzBdO1xuXHRcdGNvbnN0IGhhc0lubmVyQmxvY2tzID0gKGJsb2NrICYmIGJsb2NrLmlubmVyQmxvY2tzKSA/IGJsb2NrLmlubmVyQmxvY2tzLmxlbmd0aCA+IDAgOiBmYWxzZTtcblx0XHRcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvclwiPlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHR5cGVvZiBpbnNlcnRCbG9ja3NBZnRlciA9PT0gJ2Z1bmN0aW9uJyA/XG5cdFx0XHRcdFx0XHQ8VGVtcGxhdGVQaWNrZXIgaGFzSW5ubmVyQmxvY2tzPXtoYXNJbm5lckJsb2Nrc30gYWxsb3dlZEJsb2Nrcz17IEFMTE9XRURfQkxPQ0tTIH0+PC9UZW1wbGF0ZVBpY2tlcj4gOlxuXHRcdFx0XHRcdFx0PHA+e19fKCdQcmV2aWV3IE5vdCBBdmFpbGFibGUnKX08L3A+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblxuXHRzYXZlKCkge1xuXHRcdC8vIEhvbmVzdGx5IEkgZG9uJ3Qgd2FudCB0byBkbyB0aGlzIGJ1dCBjb252ZW50aW9ucyBhcmUgY29udmVudGlvbnMuXG5cdFx0cmV0dXJuKDxkaXY+PElubmVyQmxvY2tzLkNvbnRlbnQgLz48L2Rpdj4pOyBcblx0fSxcbn07XG4iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtyZWdpc3RlckJsb2NrVHlwZX0gZnJvbSAnQHdvcmRwcmVzcy9ibG9ja3MnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgKiBhcyBncmlkIGZyb20gJy4vZ3JpZC1sYXlvdXQnO1xuaW1wb3J0ICogYXMgZ3JpZEl0ZW0gZnJvbSAnLi9ncmlkLWxheW91dC1pdGVtJztcbmltcG9ydCAqIGFzIGdyaWRJdGVtSW1hZ2UgZnJvbSAnLi9ncmlkLWxheW91dC1pbWFnZSc7XG5pbXBvcnQgKiBhcyBncmlkSXRlbUJhc2ljIGZyb20gJy4vZ3JpZC1sYXlvdXQtYmFzaWMnO1xuXG5yZWdpc3RlckJsb2NrVHlwZShncmlkLm5hbWUsIGdyaWQuc2V0dGluZ3MpO1xucmVnaXN0ZXJCbG9ja1R5cGUoZ3JpZEl0ZW1CYXNpYy5uYW1lLCBncmlkSXRlbUJhc2ljLnNldHRpbmdzKTtcbnJlZ2lzdGVyQmxvY2tUeXBlKGdyaWRJdGVtSW1hZ2UubmFtZSwgZ3JpZEl0ZW1JbWFnZS5zZXR0aW5ncyk7XG5yZWdpc3RlckJsb2NrVHlwZShncmlkSXRlbS5uYW1lLCBncmlkSXRlbS5zZXR0aW5ncyk7XG5cbi8qKlxuICogVGhpcyBtYWtlIHN1cmUgdGhlIGdyaWQgd29ya3MgaW4gdGhlIGVkaXRvci5cbiAqL1xuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuXHQvLyBDcmVhdGUgdGhlIG9ic2VydmVyXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdG11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuXHRcdFx0Ly8gT24gc3R5bGUgbXV0YXRpb24gdXBkYXRlIGJsb2NrcyBzdHlsZXMuXG5cdFx0XHRjb25zdCBibG9jayA9IG11dGF0aW9uLnRhcmdldC5jbG9zZXN0KCdbZGF0YS10eXBlXj1cImdlY2tvL2dyaWQtbGF5b3V0LVwiXScpO1xuXHRcdFx0aWYoIWJsb2NrKSByZXR1cm47XG5cdFx0XHRjb25zdCBzdHlsZXMgPSBtdXRhdGlvbi50YXJnZXQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHRcdFx0YmxvY2suc3R5bGUgPSBzdHlsZXM7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdC8vIEFkZCBzdHlsZSBlbGVtZW50cyB0byB0aGUgb2JzZXJ2ZXJcblx0Y29uc3QgYWRkU3R5bGVFbGVtZW50c1RvT2JzZXJ2ZXIgPSAoKSA9PiB7XG5cdFx0Y29uc3Qgc3R5bGVFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzJyk7XG5cdFx0aWYgKCFzdHlsZUVsZW1lbnRzLmxlbmd0aCA+IDApIHJldHVybjtcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc3R5bGVFbGVtZW50cykge1xuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCB7XG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogWydzdHlsZSddXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvLyBBZGQgdGhlIHN0eWxlcyB0byBncmlkIGxheW91dCBpdGVtcyBmb3IgZWRpdG9yLlxuXHRmdW5jdGlvbiBhcHBseUFsbEdyaWRJdGVtU3R5bGVzKCkge1xuXHRcdGNvbnN0IGJsb2NrcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXR5cGVePVwiZ2Vja28vZ3JpZC1sYXlvdXQtXCJdJyk7XG5cdFx0aWYoIWJsb2Nrcy5sZW5ndGggPiAwKSByZXR1cm47XG5cdFx0Zm9yIChjb25zdCBibG9jayBvZiBibG9ja3MpIHtcblx0XHRcdGFwcGx5R3JpZEl0ZW1TdHlsZShibG9jayk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYXBwbHlHcmlkSXRlbVN0eWxlKGJsb2NrKXtcblx0XHRjb25zdCBzdHlsZXMgPSBibG9jay5xdWVyeVNlbGVjdG9yKCcuZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yLXN0eWxlcycpLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblx0XHRibG9jay5zdHlsZSA9IHN0eWxlcztcblx0fVxuXG5cdC8vIEFkZCB0aGUgc3R5bGVzIHRvIGdyaWQgbGF5b3V0IGl0ZW1zIGZvciBlZGl0b3IuXG5cdGZ1bmN0aW9uIG5ld0dyaWRJbnNlcnRlZChlKSB7XG5cdFx0aWYgKHR5cGVvZiBlLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG5cdFx0Y29uc3QgYmxvY2tzID0gZS50YXJnZXQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdHlwZV49XCJnZWNrby9ncmlkLWxheW91dC1cIl0nKTtcblx0XHRpZiAoIWJsb2Nrcy5sZW5ndGggPiAwKSByZXR1cm47XG5cdFx0Zm9yIChjb25zdCBibG9jayBvZiBibG9ja3MpIHtcblx0XHRcdGFwcGx5R3JpZEl0ZW1TdHlsZShibG9jayk7XG5cdFx0fVxuXHR9XG5cblx0YXBwbHlBbGxHcmlkSXRlbVN0eWxlcygpO1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NTm9kZUluc2VydGVkXCIsIGFkZFN0eWxlRWxlbWVudHNUb09ic2VydmVyKTtcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTU5vZGVJbnNlcnRlZFwiLCBuZXdHcmlkSW5zZXJ0ZWQpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuXG4vLyBpbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZXZpZXcgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2xheW91dH0gPSB0aGlzLnByb3BzO1xuXHRcdHJldHVybihcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlld1wiPlxuXHRcdFx0XHR7bGF5b3V0Lm1hcCgoYmxvY2ssa2V5KT0+e1xuXHRcdFx0XHRcdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRcdFx0XHRcdGdyaWRDb2x1bW5FbmQ6ICdzcGFuICcgKyBibG9ja1sxXS53LFxuXHRcdFx0XHRcdFx0Z3JpZFJvd0VuZDogJ3NwYW4gJyArIGJsb2NrWzFdLmgsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRyZXR1cm4oPGRpdiBrZXk9e2tleX0gY2xhc3NOYW1lPVwiZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlld19faXRlbVwiIHN0eWxlPXtzdHlsZXN9PjwvZGl2Pik7XG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQHdvcmRwcmVzcy9pMThuJztcbmltcG9ydCB7IElubmVyQmxvY2tzIH0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHRlbXBsYXRlcyBmcm9tICcuL3RlbXBsYXRlcyc7IC8vIEN1c3RvbSBUZW1wbGF0ZXMgdG8gY2hvb3NlIGZyb20uXG5pbXBvcnQgUHJldmlldyBmcm9tICcuL3RlbXBsYXRlLXByZXZpZXcnOyAvLyBDdXN0b20gVGVtcGxhdGVzIHRvIGNob29zZSBmcm9tLlxuXG4vLyBpbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblx0Y29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdHNlbGVjdGVkOiBudWxsLFxuXHRcdH1cblx0fVxuXHRzZXRUZW1wbGF0ZSA9ICh0ZW1wbGF0ZSkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0c2VsZWN0ZWQ6IHRlbXBsYXRlLFxuXHRcdH0pXG5cdH1cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2hhc0lubm5lckJsb2NrcywgYWxsb3dlZEJsb2Nrc30gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IHtzZWxlY3RlZH0gPSB0aGlzLnN0YXRlO1xuXHRcdGNvbnN0IGJsYW5rVGVtcGxhdGUgPSBbWydnZWNrby9ncmlkLWxheW91dC1iYXNpYycsIHtcblx0XHRcdFx0XHR3OiA2XG5cdFx0XHRcdH1dXTtcblx0XHRpZiAoIWhhc0lubm5lckJsb2NrcyAmJiAhc2VsZWN0ZWQpIHtcblx0XHRcdHJldHVybihcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RcIj5cblx0XHRcdFx0XHQ8aDI+e19fKCdDaG9vc2UgYSBUZW1wbGF0ZScpfTwvaDI+XG5cdFx0XHRcdFx0PHA+e19fKCdUaGlzIGlzIGEgc3RhcnRpbmcgcG9pbnQuIFRlbXBsYXRlcyBtYWtlIGl0IGVhc3kgdG8gY2hvb3NlIGEgbGF5b3V0LiBCbG9ja3MgY2FuIGJlIGNoYW5nZWQgb25jZSB0aGV5IGFyZSBzZWxlY3RlZC4nKX08L3A+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlc1wiPlxuXHRcdFx0XHRcdFx0e3RlbXBsYXRlcygpLm1hcCgodGVtcGxhdGUsIGtleSk9Pntcblx0XHRcdFx0XHRcdFx0cmV0dXJuKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXYga2V5PXtrZXl9IGNsYXNzTmFtZT1cImdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGVcIiBvbkNsaWNrPXsoKT0+dGhpcy5zZXRUZW1wbGF0ZSh0ZW1wbGF0ZS5sYXlvdXQpfT5cblx0XHRcdFx0XHRcdFx0XHRcdDxQcmV2aWV3IGxheW91dD17dGVtcGxhdGUubGF5b3V0fSAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHA+e3RlbXBsYXRlLmxhYmVsfTwvcD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlXCIgb25DbGljaz17KCk9PnRoaXMuc2V0VGVtcGxhdGUoYmxhbmtUZW1wbGF0ZSl9PjxQcmV2aWV3IGxheW91dD17YmxhbmtUZW1wbGF0ZX0gLz48cD57X18oJ0NyZWF0ZSBOZXcnKX08L3A+PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH1cblx0XHRyZXR1cm4oXG5cdFx0XHQ8SW5uZXJCbG9ja3Ncblx0XHRcdFx0dGVtcGxhdGU9e3NlbGVjdGVkfVxuXHRcdFx0XHR0ZW1wbGF0ZUxvY2s9e2ZhbHNlfVxuXHRcdFx0XHRhbGxvd2VkQmxvY2tzPXthbGxvd2VkQmxvY2tzfVxuXHRcdFx0Lz5cblx0XHQpXG5cdH1cbn0iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuaW1wb3J0IHthcHBseUZpbHRlcnN9IGZyb20gJ0B3b3JkcHJlc3MvaG9va3MnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVzKCkge1xuXHRjb25zdCB0ZW1wbGF0ZXMgPSBbe1xuXHRcdFx0bGFiZWw6IF9fKCcyIENvbHVtbnMnKSxcblx0XHRcdGxheW91dDogW1xuXHRcdFx0XHRbJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdHc6IDZcblx0XHRcdFx0fV0sXG5cdFx0XHRcdFsnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0dzogNlxuXHRcdFx0XHR9XSxcblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiBfXygnMyBDb2x1bW5zJyksXG5cdFx0XHRsYXlvdXQ6IFtcblx0XHRcdFx0WydnZWNrby9ncmlkLWxheW91dC1iYXNpYycsIHtcblx0XHRcdFx0XHR3OiA0XG5cdFx0XHRcdH1dLFxuXHRcdFx0XHRbJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdHc6IDRcblx0XHRcdFx0fV0sXG5cdFx0XHRcdFsnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0dzogNFxuXHRcdFx0XHR9XSxcblx0XHRcdF1cblx0XHR9LFxuXHRdO1xuXHRyZXR1cm4gYXBwbHlGaWx0ZXJzKCdnZWNrby5ncmlkLWxheW91dC50ZW1wbGF0ZXMnLCB0ZW1wbGF0ZXMpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuYmxvY2tzOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LndwLmNvbXBvbmVudHM7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuZGF0YTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5kZXByZWNhdGVkOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LndwLmVkaXRvcjsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5lbGVtZW50OyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LndwLmhvb2tzOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LndwLmkxOG47IiwibW9kdWxlLmV4cG9ydHMgPSBSZWFjdDsiXSwic291cmNlUm9vdCI6IiJ9
  • gecko-grid-layout/trunk/dist/public.bundle.js

    r2048530 r2048552  
    1 !function(n){var o={};function r(e){if(o[e])return o[e].exports;var t=o[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,r),t.l=!0,t.exports}r.m=n,r.c=o,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/wp-content/plugins/gecko-grid-layout/dist/",r(r.s=32)}({32:function(e,t){document.addEventListener("DOMContentLoaded",function(){var n=[].slice.call(document.querySelectorAll("img.lazy")),t=!1,e=function e(){!1===t&&(t=!0,setTimeout(function(){n.forEach(function(t){t.getBoundingClientRect().top<=window.innerHeight&&0<=t.getBoundingClientRect().bottom&&"none"!==getComputedStyle(t).display&&(t.src=t.dataset.src,t.srcset=t.dataset.srcset,t.classList.remove("lazy"),0===(n=n.filter(function(e){return e!==t})).length&&(document.removeEventListener("scroll",e),window.removeEventListener("resize",e),window.removeEventListener("orientationchange",e)))}),t=!1},200))};document.addEventListener("scroll",e),window.addEventListener("DOMContentLoaded",e),window.addEventListener("resize",e),window.addEventListener("orientationchange",e)})}});
     1/******/ (function(modules) { // webpackBootstrap
     2/******/    // The module cache
     3/******/    var installedModules = {};
     4/******/
     5/******/    // The require function
     6/******/    function __webpack_require__(moduleId) {
     7/******/
     8/******/        // Check if module is in cache
     9/******/        if(installedModules[moduleId]) {
     10/******/            return installedModules[moduleId].exports;
     11/******/        }
     12/******/        // Create a new module (and put it into the cache)
     13/******/        var module = installedModules[moduleId] = {
     14/******/            i: moduleId,
     15/******/            l: false,
     16/******/            exports: {}
     17/******/        };
     18/******/
     19/******/        // Execute the module function
     20/******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
     21/******/
     22/******/        // Flag the module as loaded
     23/******/        module.l = true;
     24/******/
     25/******/        // Return the exports of the module
     26/******/        return module.exports;
     27/******/    }
     28/******/
     29/******/
     30/******/    // expose the modules object (__webpack_modules__)
     31/******/    __webpack_require__.m = modules;
     32/******/
     33/******/    // expose the module cache
     34/******/    __webpack_require__.c = installedModules;
     35/******/
     36/******/    // define getter function for harmony exports
     37/******/    __webpack_require__.d = function(exports, name, getter) {
     38/******/        if(!__webpack_require__.o(exports, name)) {
     39/******/            Object.defineProperty(exports, name, { enumerable: true, get: getter });
     40/******/        }
     41/******/    };
     42/******/
     43/******/    // define __esModule on exports
     44/******/    __webpack_require__.r = function(exports) {
     45/******/        if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
     46/******/            Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
     47/******/        }
     48/******/        Object.defineProperty(exports, '__esModule', { value: true });
     49/******/    };
     50/******/
     51/******/    // create a fake namespace object
     52/******/    // mode & 1: value is a module id, require it
     53/******/    // mode & 2: merge all properties of value into the ns
     54/******/    // mode & 4: return value when already ns object
     55/******/    // mode & 8|1: behave like require
     56/******/    __webpack_require__.t = function(value, mode) {
     57/******/        if(mode & 1) value = __webpack_require__(value);
     58/******/        if(mode & 8) return value;
     59/******/        if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
     60/******/        var ns = Object.create(null);
     61/******/        __webpack_require__.r(ns);
     62/******/        Object.defineProperty(ns, 'default', { enumerable: true, value: value });
     63/******/        if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
     64/******/        return ns;
     65/******/    };
     66/******/
     67/******/    // getDefaultExport function for compatibility with non-harmony modules
     68/******/    __webpack_require__.n = function(module) {
     69/******/        var getter = module && module.__esModule ?
     70/******/            function getDefault() { return module['default']; } :
     71/******/            function getModuleExports() { return module; };
     72/******/        __webpack_require__.d(getter, 'a', getter);
     73/******/        return getter;
     74/******/    };
     75/******/
     76/******/    // Object.prototype.hasOwnProperty.call
     77/******/    __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
     78/******/
     79/******/    // __webpack_public_path__
     80/******/    __webpack_require__.p = "/wp-content/plugins/gecko-grid-layout/dist/";
     81/******/
     82/******/
     83/******/    // Load entry module and return exports
     84/******/    return __webpack_require__(__webpack_require__.s = "./src/public.js");
     85/******/ })
     86/************************************************************************/
     87/******/ ({
     88
     89/***/ "./src/public.js":
     90/*!***********************!*\
     91  !*** ./src/public.js ***!
     92  \***********************/
     93/*! no static exports found */
     94/***/ (function(module, exports) {
     95
     96// https://developers.google.com/web/fundamentals/performance/lazy-loading-guidance/images-and-video/
     97// IntersectionObserver if supported
     98// document.addEventListener("DOMContentLoaded", function () {
     99//  var lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
     100//  if ("IntersectionObserver" in window) {
     101//      let lazyImageObserver = new IntersectionObserver(function (entries, observer) {
     102//          entries.forEach(function (entry) {
     103//              if (entry.isIntersecting) {
     104//                  let lazyImage = entry.target;
     105//                  lazyImage.src = lazyImage.dataset.src;
     106//                  lazyImage.srcset = lazyImage.dataset.srcset;
     107//                  lazyImage.classList.remove("lazy");
     108//                  lazyImageObserver.unobserve(lazyImage);
     109//              }
     110//          });
     111//      });
     112//      lazyImages.forEach(function (lazyImage) {
     113//          lazyImageObserver.observe(lazyImage);
     114//      });
     115//  } else {
     116//      // Possibly fall back to a more compatible method here
     117//  }
     118// });
     119document.addEventListener("DOMContentLoaded", function () {
     120  var lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
     121  var active = false;
     122
     123  var lazyLoad = function lazyLoad() {
     124    if (active === false) {
     125      active = true;
     126      setTimeout(function () {
     127        lazyImages.forEach(function (lazyImage) {
     128          if (lazyImage.getBoundingClientRect().top <= window.innerHeight && lazyImage.getBoundingClientRect().bottom >= 0 && getComputedStyle(lazyImage).display !== "none") {
     129            lazyImage.src = lazyImage.dataset.src;
     130            lazyImage.srcset = lazyImage.dataset.srcset;
     131            lazyImage.classList.remove("lazy");
     132            lazyImages = lazyImages.filter(function (image) {
     133              return image !== lazyImage;
     134            });
     135
     136            if (lazyImages.length === 0) {
     137              document.removeEventListener("scroll", lazyLoad);
     138              window.removeEventListener("resize", lazyLoad);
     139              window.removeEventListener("orientationchange", lazyLoad);
     140            }
     141          }
     142        });
     143        active = false;
     144      }, 200);
     145    }
     146  };
     147
     148  document.addEventListener("scroll", lazyLoad);
     149  window.addEventListener("DOMContentLoaded", lazyLoad);
     150  window.addEventListener("resize", lazyLoad);
     151  window.addEventListener("orientationchange", lazyLoad);
     152});
     153
     154/***/ })
     155
     156/******/ });
     157//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3B1YmxpYy5qcyJdLCJuYW1lcyI6WyJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJsYXp5SW1hZ2VzIiwic2xpY2UiLCJjYWxsIiwicXVlcnlTZWxlY3RvckFsbCIsImFjdGl2ZSIsImxhenlMb2FkIiwic2V0VGltZW91dCIsImZvckVhY2giLCJsYXp5SW1hZ2UiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsImJvdHRvbSIsImdldENvbXB1dGVkU3R5bGUiLCJkaXNwbGF5Iiwic3JjIiwiZGF0YXNldCIsInNyY3NldCIsImNsYXNzTGlzdCIsInJlbW92ZSIsImZpbHRlciIsImltYWdlIiwibGVuZ3RoIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixrQkFBMUIsRUFBOEMsWUFBWTtBQUN6RCxNQUFJQyxVQUFVLEdBQUcsR0FBR0MsS0FBSCxDQUFTQyxJQUFULENBQWNKLFFBQVEsQ0FBQ0ssZ0JBQVQsQ0FBMEIsVUFBMUIsQ0FBZCxDQUFqQjtBQUNBLE1BQUlDLE1BQU0sR0FBRyxLQUFiOztBQUVBLE1BQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFXLEdBQVk7QUFDNUIsUUFBSUQsTUFBTSxLQUFLLEtBQWYsRUFBc0I7QUFDckJBLFlBQU0sR0FBRyxJQUFUO0FBRUFFLGdCQUFVLENBQUMsWUFBWTtBQUN0Qk4sa0JBQVUsQ0FBQ08sT0FBWCxDQUFtQixVQUFVQyxTQUFWLEVBQXFCO0FBQ3ZDLGNBQUtBLFNBQVMsQ0FBQ0MscUJBQVYsR0FBa0NDLEdBQWxDLElBQXlDQyxNQUFNLENBQUNDLFdBQWhELElBQStESixTQUFTLENBQUNDLHFCQUFWLEdBQWtDSSxNQUFsQyxJQUE0QyxDQUE1RyxJQUFrSEMsZ0JBQWdCLENBQUNOLFNBQUQsQ0FBaEIsQ0FBNEJPLE9BQTVCLEtBQXdDLE1BQTlKLEVBQXNLO0FBQ3JLUCxxQkFBUyxDQUFDUSxHQUFWLEdBQWdCUixTQUFTLENBQUNTLE9BQVYsQ0FBa0JELEdBQWxDO0FBQ0FSLHFCQUFTLENBQUNVLE1BQVYsR0FBbUJWLFNBQVMsQ0FBQ1MsT0FBVixDQUFrQkMsTUFBckM7QUFDQVYscUJBQVMsQ0FBQ1csU0FBVixDQUFvQkMsTUFBcEIsQ0FBMkIsTUFBM0I7QUFFQXBCLHNCQUFVLEdBQUdBLFVBQVUsQ0FBQ3FCLE1BQVgsQ0FBa0IsVUFBVUMsS0FBVixFQUFpQjtBQUMvQyxxQkFBT0EsS0FBSyxLQUFLZCxTQUFqQjtBQUNBLGFBRlksQ0FBYjs7QUFJQSxnQkFBSVIsVUFBVSxDQUFDdUIsTUFBWCxLQUFzQixDQUExQixFQUE2QjtBQUM1QnpCLHNCQUFRLENBQUMwQixtQkFBVCxDQUE2QixRQUE3QixFQUF1Q25CLFFBQXZDO0FBQ0FNLG9CQUFNLENBQUNhLG1CQUFQLENBQTJCLFFBQTNCLEVBQXFDbkIsUUFBckM7QUFDQU0sb0JBQU0sQ0FBQ2EsbUJBQVAsQ0FBMkIsbUJBQTNCLEVBQWdEbkIsUUFBaEQ7QUFDQTtBQUNEO0FBQ0QsU0FoQkQ7QUFrQkFELGNBQU0sR0FBRyxLQUFUO0FBQ0EsT0FwQlMsRUFvQlAsR0FwQk8sQ0FBVjtBQXFCQTtBQUNELEdBMUJEOztBQTRCQU4sVUFBUSxDQUFDQyxnQkFBVCxDQUEwQixRQUExQixFQUFvQ00sUUFBcEM7QUFDQU0sUUFBTSxDQUFDWixnQkFBUCxDQUF3QixrQkFBeEIsRUFBNENNLFFBQTVDO0FBQ0FNLFFBQU0sQ0FBQ1osZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0NNLFFBQWxDO0FBQ0FNLFFBQU0sQ0FBQ1osZ0JBQVAsQ0FBd0IsbUJBQXhCLEVBQTZDTSxRQUE3QztBQUNBLENBcENELEUiLCJmaWxlIjoicHVibGljLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL3dwLWNvbnRlbnQvcGx1Z2lucy9nZWNrby1ncmlkLWxheW91dC9kaXN0L1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9wdWJsaWMuanNcIik7XG4iLCIvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWIvZnVuZGFtZW50YWxzL3BlcmZvcm1hbmNlL2xhenktbG9hZGluZy1ndWlkYW5jZS9pbWFnZXMtYW5kLXZpZGVvL1xuLy8gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaWYgc3VwcG9ydGVkXG4vLyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4vLyBcdHZhciBsYXp5SW1hZ2VzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nLmxhenlcIikpO1xuXG4vLyBcdGlmIChcIkludGVyc2VjdGlvbk9ic2VydmVyXCIgaW4gd2luZG93KSB7XG4vLyBcdFx0bGV0IGxhenlJbWFnZU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzLCBvYnNlcnZlcikge1xuLy8gXHRcdFx0ZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuLy8gXHRcdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbi8vIFx0XHRcdFx0XHRsZXQgbGF6eUltYWdlID0gZW50cnkudGFyZ2V0O1xuLy8gXHRcdFx0XHRcdGxhenlJbWFnZS5zcmMgPSBsYXp5SW1hZ2UuZGF0YXNldC5zcmM7XG4vLyBcdFx0XHRcdFx0bGF6eUltYWdlLnNyY3NldCA9IGxhenlJbWFnZS5kYXRhc2V0LnNyY3NldDtcbi8vIFx0XHRcdFx0XHRsYXp5SW1hZ2UuY2xhc3NMaXN0LnJlbW92ZShcImxhenlcIik7XG4vLyBcdFx0XHRcdFx0bGF6eUltYWdlT2JzZXJ2ZXIudW5vYnNlcnZlKGxhenlJbWFnZSk7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pO1xuLy8gXHRcdH0pO1xuXG4vLyBcdFx0bGF6eUltYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChsYXp5SW1hZ2UpIHtcbi8vIFx0XHRcdGxhenlJbWFnZU9ic2VydmVyLm9ic2VydmUobGF6eUltYWdlKTtcbi8vIFx0XHR9KTtcbi8vIFx0fSBlbHNlIHtcbi8vIFx0XHQvLyBQb3NzaWJseSBmYWxsIGJhY2sgdG8gYSBtb3JlIGNvbXBhdGlibGUgbWV0aG9kIGhlcmVcbi8vIFx0fVxuLy8gfSk7XG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdGxldCBsYXp5SW1hZ2VzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nLmxhenlcIikpO1xuXHRsZXQgYWN0aXZlID0gZmFsc2U7XG5cblx0Y29uc3QgbGF6eUxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKGFjdGl2ZSA9PT0gZmFsc2UpIHtcblx0XHRcdGFjdGl2ZSA9IHRydWU7XG5cblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsYXp5SW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxhenlJbWFnZSkge1xuXHRcdFx0XHRcdGlmICgobGF6eUltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQgJiYgbGF6eUltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA+PSAwKSAmJiBnZXRDb21wdXRlZFN0eWxlKGxhenlJbWFnZSkuZGlzcGxheSAhPT0gXCJub25lXCIpIHtcblx0XHRcdFx0XHRcdGxhenlJbWFnZS5zcmMgPSBsYXp5SW1hZ2UuZGF0YXNldC5zcmM7XG5cdFx0XHRcdFx0XHRsYXp5SW1hZ2Uuc3Jjc2V0ID0gbGF6eUltYWdlLmRhdGFzZXQuc3Jjc2V0O1xuXHRcdFx0XHRcdFx0bGF6eUltYWdlLmNsYXNzTGlzdC5yZW1vdmUoXCJsYXp5XCIpO1xuXG5cdFx0XHRcdFx0XHRsYXp5SW1hZ2VzID0gbGF6eUltYWdlcy5maWx0ZXIoZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbWFnZSAhPT0gbGF6eUltYWdlO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChsYXp5SW1hZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGxhenlMb2FkKTtcblx0XHRcdFx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgbGF6eUxvYWQpO1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGxhenlMb2FkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9XG5cdH07XG5cblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBsYXp5TG9hZCk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBsYXp5TG9hZCk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGxhenlMb2FkKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBsYXp5TG9hZCk7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
  • gecko-grid-layout/trunk/dist/style.css

    r2048530 r2048552  
    8585  opacity: 1;
    8686}
     87
     88/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3R5bGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGFBQWE7RUFDYixvREFBb0Q7RUFDcEQsY0FBYztFQUNkLDRDQUE0QztFQUM1QyxxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLFdBQVc7QUFDYjtBQUNBO0VBQ0U7SUFDRSxrREFBa0Q7SUFDbEQsNENBQTRDO0VBQzlDO0FBQ0Y7QUFDQTtFQUNFO0lBQ0Usa0RBQWtEO0lBQ2xELDRDQUE0QztFQUM5QztBQUNGO0FBQ0E7RUFDRSx1QkFBdUI7RUFDdkIsb0JBQW9CO0FBQ3RCO0FBQ0E7RUFDRTtJQUNFLDRCQUE0QjtFQUM5QjtBQUNGOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLFVBQVU7QUFDWjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsVUFBVTtFQUNWLGlCQUFpQjtBQUNuQjtBQUNBO0VBQ0Usa0JBQWtCO0VBQ2xCLHVCQUF1QjtFQUN2QixzQkFBc0I7RUFDdEIsb0JBQWlCO0tBQWpCLGlCQUFpQjtFQUNqQiwwQkFBdUI7S0FBdkIsdUJBQXVCO0VBQ3ZCLFdBQVc7QUFDYjtBQUNBO0VBQ0UsYUFBYTtFQUNiLGtCQUFrQjtFQUNsQixvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLDRCQUFzQjtFQUF0Qiw2QkFBc0I7TUFBdEIsMEJBQXNCO1VBQXRCLHNCQUFzQjtFQUN0Qix3QkFBdUI7TUFBdkIscUJBQXVCO1VBQXZCLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsWUFBWTtFQUNaLFdBQVc7RUFDWCwyQ0FBMkM7QUFDN0M7QUFDQTtFQUNFLFVBQVU7QUFDWjtBQUNBO0VBQ0UsVUFBVTtFQUNWLHlDQUFpQztFQUFqQyxpQ0FBaUM7QUFDbkM7QUFDQTtFQUNFLFVBQVU7QUFDWixDIiwiZmlsZSI6InN0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEyLCBtaW5tYXgoMXJlbSwgMWZyKSk7XG4gIGdyaWQtZ2FwOiAxcmVtO1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KGNhbGMoMTAwdncvMTIpLCBhdXRvKTtcbiAgZ3JpZC1hdXRvLWZsb3c6IGRlbnNlO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LmlzLXN0eWxlLW5vLWdhcCB7XG4gIGdyaWQtZ2FwOiAwO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDk2MHB4KSB7XG4gIC53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMHB4LCAxZnIpICFpbXBvcnRhbnQ7XG4gICAgZ3JpZC1hdXRvLXJvd3M6IG1pbm1heCgxcHgsIGF1dG8pICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDBweCwgMWZyKSAhaW1wb3J0YW50O1xuICAgIGdyaWQtYXV0by1yb3dzOiBtaW5tYXgoMXB4LCBhdXRvKSAhaW1wb3J0YW50O1xuICB9XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXRfX2l0ZW0ge1xuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gNDtcbiAgZ3JpZC1yb3ctZW5kOiBzcGFuIDE7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0X19pdGVtIHtcbiAgICBncmlkLWNvbHVtbjogMS8tMSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtYmFzaWMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWluLWhlaWdodDogMjAwcHg7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2ltYWdlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIG9iamVjdC1wb3NpdGlvbjogY2VudGVyO1xuICB6LWluZGV4OiAtMTtcbn1cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIHBhZGRpbmc6IDFyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UuaXMtc3R5bGUtbm8tY2FwdGlvbiAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAwO1xufVxuLmdlY2tvLWdyaWQtbGF5b3V0LWltYWdlLmlzLXN0eWxlLWhvdmVyIC5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IGFsbCAyNTBtcyBlYXNlLWluLW91dDtcbn1cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZS5pcy1zdHlsZS1ob3Zlcjpob3ZlciAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAxO1xufSJdLCJzb3VyY2VSb290IjoiIn0=*/
  • gecko-grid-layout/trunk/gecko-grid-layout.php

    r2048530 r2048552  
    44 * Plugin URI:  https://github.com/gecko-designs/gecko-grid-layout
    55 * Description: Grid Layout block uses CSS grid to create grid layouts in gutenberg.
    6  * Version: 1.1.4
     6 * Version: 1.1.5
    77 * Author: Gecko Designs
    88 * Author URI: https://geckodesigns.com
  • gecko-grid-layout/trunk/readme.txt

    r2048530 r2048552  
    55Requires at least: 5.0
    66Tested up to: 5.1
    7 Stable tag: 1.1.4
     7Stable tag: 1.1.5
    88Requires PHP: 5.6
    99License: GPLv2 or later
     
    3636
    3737== Changelog ==
     38= 1.1.5 =
     39* Bug Fix
    3840= 1.1.4 =
    3941* Added ResizeableBox for adjusting width and minHeight
     
    8183
    8284== Upgrade Notice ==
     85= 1.1.5 =
     86* Bug Fix
    8387= 1.1.4 =
    8488* Added ResizeableBox for adjusting width and minHeight
Note: See TracChangeset for help on using the changeset viewer.