ETH Price: $2,916.72 (+2.66%)
 

Overview

Max Total Supply

3,175 OCM Dessert

Holders

1,048

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xcde4fc0df2f81fc6b3e920ac64017cdaeb8e2cc1
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The OnChainMonkey Desserts are 100% ON CHAIN and in ONE transaction! These Desserts will stand the test of time. Or they can be eaten (burned) to create the Karma collection.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
OCMDesserts

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 9 of 10: OCMDesserts.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

import "./ERC1155.sol";
import "./Ownable.sol";

//   
//    ______     __   __     ______     __  __     ______     __     __   __    
//   /\  __ \   /\ "-.\ \   /\  ___\   /\ \_\ \   /\  __ \   /\ \   /\ "-.\ \   
//   \ \ \/\ \  \ \ \-.  \  \ \ \____  \ \  __ \  \ \  __ \  \ \ \  \ \ \-.  \  
//    \ \_____\  \ \_\\"\_\  \ \_____\  \ \_\ \_\  \ \_\ \_\  \ \_\  \ \_\\"\_\ 
//     \/_____/   \/_/ \/_/   \/_____/   \/_/\/_/   \/_/\/_/   \/_/   \/_/ \/_/ 
//                                                                              
//    __    __     ______     __   __     __  __     ______     __  __          
//   /\ "-./  \   /\  __ \   /\ "-.\ \   /\ \/ /    /\  ___\   /\ \_\ \         
//   \ \ \-./\ \  \ \ \/\ \  \ \ \-.  \  \ \  _"-.  \ \  __\   \ \____ \        
//    \ \_\ \ \_\  \ \_____\  \ \_\\"\_\  \ \_\ \_\  \ \_____\  \/\_____\       
//     \/_/  \/_/   \/_____/   \/_/ \/_/   \/_/\/_/   \/_____/   \/_____/       
//                                                                              
//   
// 
// OnChainMonkey (OCM) Genesis was the first 100% On-Chain PFP collection in 1 transaction 
// (contract: 0x960b7a6BCD451c9968473f7bbFd9Be826EFd549A)
// 
// created by Metagood
//
// OCM Desserts is a 100% On-Chain collection in 1 transaction too! It is one that OCM Genesis 
// can eat (burn) to create the new Karma collection.
//
// OCM Desserts, being On-Chain, will also live forever, just like OCM Genesis. However,
// the Desserts will need to be burned to create Karma, so the Dessert supply will be 
// decreasing over time as people burn their Desserts.
//
//
//                            .';cllllc;'.                               
//                       .;dOXMMMMMMMMMMMMXOl'                           
//                     ,xNMMMMMMMMMMMMMMMMMMMMNk,                        
//                   ;0MMMMMMMMMMMMMMMMMMMMMMMMMM0;                      
//                 .kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMk.                    
//                .KMMMMMMMMMMMMMMMMMMMXo;',c0MMMMMMK.                   
//               ;NMMMMMMMMMMMMMMMMMMM0.      :NMMMMMK.                  
//              lWMMMMMMNd:,;ckWMMMMMMd        oMMMMMMd                  
//             xXWMMMMM0.      ;WMMMMMX.       .XMMMMMWlclll:,.          
//           .Ox;MMMMMMo        dMMMMMMd        cMMMMMMMMMMMMMW0o'       
//          .0d 'MMMMMMK.       .NMMMMMN.        0MMMMMMMMMMMMMMMMO.     
//          Ox   XMMMMMMl        lMMMMMMx        ;MMMMMMMOxkXMMMMMMN'    
//         :N.   lMMMMMMN.       .KMMMMMW,        kMMMMMMc   :NMMMMM0    
//         lK   .cWMMMMMMd        :MMMMMMO        ,WMMMMMX.   cMMMMMM'   
//         ;N:lKWMMMMMMMMW'        0MMMMMM:        xMMMMMMl   xMMMMMN.   
//          KWMMMMMMMMMMMMk        ;WMMMMMK        .NMMMMMN,;OMMMMMMd    
//        .kMMMMMMXOWMMMMMW;        kMMMMMMl        oMMMMMMMMMMMMMMd     
//       ,KMMMMMNc  kMMMMMM0        'WMMMMMX.       .XMMMMMMMMMMMWl      
//      :NWMMMMMd   'WMMMMMMd        dMMMMMMd        cMMMMMMW0OWN:       
//     oK,OMMMMM0.   dMMMMMMW;       .NMMMMMW.        0MMMMMWoK0.        
//    d0. .XMMMMMXl'.;WMMMMMM0        lMMMMMMx        ;MMMMMMMk.         
//   ;W'   .KMMMMMMMMMMMMMMMMMc       .KMMMMMWc        kMMMMMMc          
//   oX      cKMMMMMMMMMMMMMMMK.       :MMMMMMN.       ,WMMMMMX.         
//   :W'       'lx0XNXNMMMMMMMMl        0MMMMMMk       'WMMMMMMo         
//    k0.            .OOKMMMMMMN.       ;MMMMMMMx.    ;KMMMMMMMN'        
//     dK;          .0x ;WMMMMMMd       'WMMMMMMMMX00NMMMMMMMMMMK.       
//      'x0d,.     'Kl   kMMMMMMWd.    ,KMMMMMMMMMMMMMMMMMMMMMMMMo       
//         'lddddooKO    'WMMMMMMMWKO0NMMMMMMMMMMMMMMMMMMMWX0xdNN:       
//                 ,N,    dMMMMMMMMMMMMMMMMMMMMMMMMWXOdl;'.  .OO.        
//                  x0    .NMMMMMMMMMMMMMMMMN0kdc;..        .0x          
//                  .Nc    lMMMMMMMMWX0xo:'.  .';:     .';ldKl           
//                   lX.   'WWXOxl;'.   ,:ok0NMMMMdoxxxxo:,.             
//                   .Ko  'Kk.         .0MMMMMMMMMN,.                    
//                    :N.;Kc    .';ldxxxkWMMMMMMMMMl                     
//                     OXWkcoxxxxo:,.    xMMMMMMMMMX.                    
//                     'xo:,..           .NMMMMMMMMMo                    
//                                        oMMMMMMMMMN.                   
//                                        .XMMMMMMMMM;                   
//                                         ,XMMMMMMWd                    
//                                           ;oxkxl.                     
//                                                                       
//                                                                       
//
//

/// [MIT License]
/// @title Base64
/// @notice Provides a function for encoding some bytes in base64
/// @author Brecht Devos <[email protected]>
library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);
        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)
            for {
                let i := 0
            } lt(i, len) {
            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)
                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)
                mstore(resultPtr, out)
                resultPtr := add(resultPtr, 4)
            }
            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
            mstore(result, encodedLen)
        }
        return string(result);
    }
}

contract OCMDesserts is ERC1155, Ownable {
    string private svg1='<svg xmlns="http://www.w3.org/2000/svg" width="999" height="999"><path fill="#fff61d" d="M0 0h999v999H0z"/><g><path d="M0-45V0v-45" id="a"/><animateMotion dur="5s" repeatCount="indefinite" keyPoints="0;.50;1;.50;0" keyTimes="0;.25;.50;.75;1" keySplines="0.5 0 0.5 1; 0.5 0 0.5 1; 0.5 0 0.5 1; 0.5 0 0.5 1" calcMode="spline"><mpath href="#a"/></animateMotion><g fill="#ff8ff9"><path d="m310 443-30 53 42-11-12-42z"/><circle cx="346" cy="532" r="74" transform="rotate(344 346 532)"/></g><path d="m429 667 257-71-30 54-257 72 30-55zm190-204 78-21-38 69-78 21 38-69z" fill="#d0b"/><path d="m399 722 30-55 39-11-103-369-31 54c-13 24-28 46-16 91l81 290z" fill="#ff8ff9"/><path fill="#af8200" d="m506 675 70.172-20.122 28.115 98.049-70.172 20.122z"/><circle cx="376" cy="477" transform="rotate(344 376 477)" fill="#f0f" r="74"/><circle cx="568" cy="765" transform="rotate(344 568 765)" fill="#af8200" r="35"/><g fill="#f0f"><circle cx="632" cy="406" transform="rotate(344 632 406)" r="74"/><circle cx="481" cy="354" r="133" transform="rotate(344 481 354)"/></g><g fill="#d0b"><circle transform="scale(1 -1) rotate(15.543 1935.567 1139.037)" r="30"/><circle transform="scale(1 -1) rotate(15.543 1803.447 2112.435)" r="30"/></g><path fill="#f0f" d="m352 389 257.289-71.353 77.232 278.489-257.289 71.353z"/><path fill="#ffe386" d="m528 728 68.404-19.025 10.45 37.574-68.404 19.025z"/><path fill="#dab754" d="m511 666 68.25-19.57 17.916 62.482-68.25 19.57z"/><circle cx="573" cy="757" transform="rotate(344 573 757)" fill="#ffe386" r="35"/><path d="m511 666-5 9 7-2-2-7z" fill="#af8200"/><g fill="#ff8ff9"><rect x="390" y="325" width="59" height="290" rx="29" transform="rotate(344 390 325)"/><rect x="494" y="296" width="59" height="290" rx="29" transform="rotate(344 494 296)"/></g><path fill-rule="evenodd" d="M365 604c-23 6-47 0-65-14l31-54c18 14 41 19 65 13l-31 55z" fill="#d0b"/></g><ellipse cx="521" cy="895" rx="73" ry="11" fill-opacity=".2"><animate values="73;90;73" keyTimes="0;.50;1" dur="2.5s" attributeName="rx" fill="freeze" keySplines="0.5 0 0.5 1; 0.5 0 0.5 1" calcMode="spline" repeatCount="indefinite"/></ellipse></svg>';
    string private svg2='<svg xmlns="http://www.w3.org/2000/svg" width="999" height="999"><path fill="#f0f" d="M0 0h999v999H0z"/><g><path d="M0-70V0v-70z" id="a"/><animateMotion dur="6s" repeatCount="indefinite" keyPoints="0;.50;1;.50;0" keyTimes="0;.25;.50;.75;1" keySplines="0.5 0 0.5 1; 0.5 0 0.5 1; 0.5 0 0.5 1; 0.5 0 0.5 1" calcMode="spline"><mpath href="#a"/></animateMotion><circle cx="496" cy="526" transform="rotate(351 496 526)" fill="#db5" r="245"/><mask id="b" maskUnits="userSpaceOnUse" x="256" y="262" width="491" height="491" mask-type="alpha"><circle cx="501" cy="508" r="245" transform="rotate(351 501 508)" fill="#db5"/></mask><g mask="url(#b)"><circle cx="499" cy="496" transform="rotate(351 499 496)" fill="#fe8" r="246"/></g><mask id="c" maskUnits="userSpaceOnUse" x="185" y="439" width="229" height="230" mask-type="alpha"><circle cx="300" cy="554" transform="rotate(351 300 554)" fill="#db5" r="114"/></mask><g mask="url(#c)"><circle cx="297" cy="541" transform="rotate(351 297 541)" fill="#fe8" r="113"/><circle cx="301" cy="527" transform="rotate(351 301 527)" fill="#5cf" r="96"/></g><mask id="d" maskUnits="userSpaceOnUse" x="621" y="371" width="227" height="226" mask-type="alpha"><circle cx="734" cy="484" transform="rotate(351 734 484)" fill="#db5" r="113"/></mask><g mask="url(#d)"><circle cx="705" cy="486" transform="rotate(351 705 486)" fill="#fe8" r="111"/><circle cx="711" cy="467" transform="rotate(351 711 467)" fill="#5cf" r="95"/></g><mask id="e" maskUnits="userSpaceOnUse" x="257" y="267" width="491" height="491" mask-type="alpha"><path d="M744 473c21 134-69 259-203 281-133 21-259-69-281-203-21-133 69-259 203-281 134-21 259 70 281 203z" fill="#db5"/></mask><g mask="url(#e)"><circle cx="502" cy="473" transform="rotate(351 502 473)" fill="#5cf" r="221"/><circle cx="504" cy="455" transform="rotate(351 504 455)" fill="#67d9fd" r="203"/></g><g fill="#67d9fd"><circle cx="306" cy="509" transform="rotate(351 306 509)" r="71"/><circle cx="711" cy="443" transform="rotate(351 711 443)" r="71"/></g><circle cx="500" cy="466" transform="rotate(351 500 466)" fill="#fe8" r="50"/><mask id="f" maskUnits="userSpaceOnUse" x="450" y="415" width="101" height="102" mask-type="alpha"><circle cx="500" cy="466" r="50" transform="rotate(351 500 466)" fill="#fe8"/></mask><g mask="url(#f)"><circle cx="483" cy="504" transform="rotate(351 483 504)" fill="#db5" r="60"/><circle cx="479" cy="510" transform="rotate(351 479 510)" fill="#f0f" r="43"/></g><path fill-rule="evenodd" d="M540 498c11-11 16-27 13-43-4-28-31-48-59-43-24 4-41 23-43 45 6-16 20-28 37-31 27-4 53 14 57 41 2 11 0 22-5 31z" fill="#5cf"/><path d="m369 367 33.871 2.963-.61 6.973-33.871-2.963zm168-51-32.54 9.856-2.029-6.699 32.54-9.856z" fill="#f0f"/><path d="m431 319 27.507 19.985-4.114 5.663-27.507-19.985zm79 51 31.016-13.928 2.867 6.386-31.016 13.928zm-96 137-11.721-31.916 6.571-2.413 11.721 31.916z" fill="#fe0"/><path d="m458 393-29 17-4-7 29-17 4 7z" fill="#75cc0a"/><path d="m650 467 13.928 31.017-6.386 2.867-13.928-31.017zm-48 116 8.8-32.841 6.761 1.812-8.8 32.841zm1-177-33.129-7.648 1.575-6.821 33.129 7.648z" fill="#f0f"/><path d="m744 434-27.57-19.897 4.096-5.676 27.57 19.897zm-141 14 27.889-19.448 4.004 5.742-27.889 19.448z" fill="#fe0"/><path d="m579 500 32 8-1 7-33-8 2-7zm20-157 24 24-5 5-24-24 5-5zm97 111 31-14 3 7-31 14-3-7z" fill="#75cc0a"/><path d="m502 562-33.871-2.963.61-6.973 33.871 2.963zM368 438l-17 29.445-6.062-3.5 17-29.445z" fill="#f0f"/><path d="m423 596 2.963-33.871 6.973.61-2.963 33.871zm-124-60-27.923-19.399 3.994-5.749 27.923 19.399zm271 16-21.307 26.495-5.455-4.387 21.307-26.495z" fill="#fe0"/><path d="m385 550-17-29 7-4 17 29-7 4zm-88-46 31-14 3 7-31 13-3-6zm226 116-29-17 3-7 30 17-4 7z" fill="#75cc0a"/><g fill="#fff"><path d="M582 298c13 1 42 42 42 42-11-17-27-43-26-53 2-10 13-23 18-26 0 0-19 12-29 9-11-2-39-40-39-40 9 13 26 43 23 52s-16 22-23 28c0 0 22-13 34-12z"><animate attributeName="opacity" values="1;0;1" dur="1s" repeatCount="indefinite"/></path><path d="M236 510c13 2 41 41 41 41-11-16-26-41-25-51 2-10 13-22 17-25 0 0-18 11-28 8-10-2-38-39-38-39 9 13 25 43 22 51-2 9-15 21-22 27 0 0 21-13 33-12z"><animate attributeName="opacity" values="0;1;0" dur="1s" repeatCount="indefinite"/></path></g></g><ellipse cx="500" cy="880" rx="149" ry="17" fill-opacity=".2"><animate values="149;190;149" keyTimes="0;.50;1" dur="3s" attributeName="rx" fill="freeze" keySplines="0.5 0 0.5 1; 0.5 0 0.5 1" calcMode="spline" repeatCount="indefinite"/></ellipse></svg>';
    string private svg3='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="999" height="999"><style>.B{fill:#fc0}.C{fill:#fff}.D{fill-rule:evenodd}</style><path fill="#0a4" d="M0 0h999v999H0z"/><path d="M293 0h402l224 919H79L293 0Z" fill="#7c0"/><ellipse cx="499" cy="920" rx="420" ry="44" fill="#bf4"/><g><path d="M0-30V0v-30z" id="a"/><animateMotion dur="8s" repeatCount="indefinite" keyPoints="0;.50;1;.50;0" keyTimes="0;.25;.50;.75;1" keySplines="0.5 0 0.5 1; 0.5 0 0.5 1; 0.5 0 0.5 1; 0.5 0 0.5 1" calcMode="spline"><mpath href="#a"/></animateMotion><g fill="#083"><path d="m350 225 42 14 10-20-11-18-45-8-13 14-7 28 20-11 2-9 2 10zm94-95 3 60 30 3 17-24-12-59-25-10-38 5 23 19 14-1-12 7z"/><path d="m495 211 8 35 18-1 8-16-14-34-15-3-22 7 16 9 7-2-6 5zm-100 20-21 19 36-4 32-37-20-33-29-12-32 12 20 17 5 16c4 9 9 22 9 22z"/><path d="m522 178-13 20-27-8-7-26 19-47 29 1 23 21-23 8-7 21 6 10zm31 71-17 22-30-11-6-31 26-53 33 3 26 27-28 7-11 24 7 12z"/><path d="m550 147 32 29-29-2-3-12-1 13-26 7-8-13 5 15-17 20-7-3 13-43 41-11zm11 68 48 29-33 4-9-15 5 17-27 13-14-14 11 17-10 29-9-2-3-56 41-22zm-201 16-32 44 36-10v-17l4 17 34 2 7-18-2 20 26 22 8-6-27-51-54-3zm44-113-57 32 41 7 10-18-5 20 32 17 17-15-14 19 14 35 11-2 2-67-51-28zm75 91-32 14 23 7 6-10-3 11 19 12 9-8-7 10 8 21 6-1 1-37-30-19z"/></g><g class="B D"><path d="M365 214c43 5 83-22 94-65 1-4 2-7 3-11 11 15 15 34 10 53-8 33-42 53-74 44-14-3-25-11-33-21z"/><path d="M378 254c49-8 86-52 85-103 0-5-1-9-1-13 17 13 28 33 28 56 1 39-30 72-69 73-16 0-31-5-43-13z"/></g><path d="M472 217c11-26-2-58-10-75 6 23-7 56-19 71-8 9-16 26-60 39 41 11 76-6 89-35zm-27-18c7-9 15-28 15-53-6 30-21 42-33 52-9 5-20 15-61 16 35 12 65 2 79-15z" fill="#ff2"/><g class="D"><path d="M451 280c38-32 46-89 18-132-2-3-4-6-7-10 21 2 41 13 53 32 22 33 13 77-20 99-14 9-29 12-44 11z" class="B"/><path d="M459 260c28-23 34-69 12-109-2-5-5-9-7-12 19 4 37 20 45 43 12 33 1 68-25 77-8 3-17 3-25 1z" fill="#ff2"/></g><path d="m586 177 14-1-12 86-14-2 12-83z" fill="#b80"/><g fill="#0a3"><path d="m570 175 30-3-44 37 14-34z"/><path d="m617 175-29-3 33 37-4-34z"/><path d="m587 154 9 21-52-7 43-14z"/><path d="m604 154-15 21 53-8-38-13z"/></g><path fill="#b80" d="m336 203-11.6 3.071 27.01 69.968 11.6-3.071z"/><g fill="#0a3"><path d="m349 199-25 4 44 22-19-26z"/><path d="m310 209 24-9-20 39-4-30z"/><path d="m331 184-3 21 41-19-38-2z"/><path d="m317 188 17 15-46 5 29-20z"/></g><path d="M566.19 244.48h-27.48v10.99h27.48v-10.99z" class="C"/><g class="B"><use xlink:href="#B"/><use xlink:href="#B" x="10.99"/></g><use xlink:href="#C" class="C"/><path d="M538.73 232.32a1.89 1.89 0 1 0 0-3.79 1.89 1.89 0 1 0 0 3.79z" class="B"/><use xlink:href="#C" x="27.48" class="C"/><path d="M566.17 232.32a1.895 1.895 0 0 0 0-3.79 1.89 1.89 0 1 0 0 3.79z" class="B"/><path d="M552.45 244.48a13.74 13.74 0 0 0 0-27.48 13.74 13.74 0 1 0 0 27.48z" class="C"/><path d="M552.45 241.78a10.88 10.88 0 1 0 0-21.76 10.88 10.88 0 1 0 0 21.76z" class="B"/><g class="C"><use xlink:href="#D"/><use xlink:href="#D" x="9.46"/></g><path d="M547.32 228.68a1.965 1.965 0 1 0-1.97-1.97 1.97 1.97 0 0 0 1.97 1.97zm9.39-.14a1.895 1.895 0 1 0-1.9-1.9 1.9 1.9 0 0 0 1.9 1.9z" class="B"/><use xlink:href="#E"/><use xlink:href="#E" x="9.46"/><path d="M560.49 223.8h-16.08v2.84h16.08v-2.84z" class="B"/><path d="M552.45 239.77c4.12 0 7.46-1.41 7.46-3.14 0-1.74-3.34-3.14-7.46-3.14s-7.46 1.4-7.46 3.14c0 1.73 3.34 3.14 7.46 3.14z" class="C"/><g fill="#caa000"><use xlink:href="#F"/><use xlink:href="#F" x="-3.14"/></g><path d="M557.65 237.05h-10.4v.95h10.4v-.95z" class="B"/><g class="C"><path d="m322 290 276.942-24.229 9.936 113.566-276.942 24.229z"/><ellipse cx="460" cy="278" rx="139" ry="21" transform="rotate(355 460 278)"/></g><g class="B"><ellipse cx="468" cy="366" rx="139" ry="21" transform="rotate(355 468 366)"/><path d="m330 378 276.942-24.229 4.794 54.791-276.942 24.229z"/><circle cx="237" cy="743" transform="rotate(355 237 743)" r="73"/><circle cx="763" cy="696" transform="rotate(175 763 696)" r="73"/></g><g fill="#da0"><circle transform="scale(1 -1) rotate(5.064 8519.427 2308.205)" r="29"/><circle transform="matrix(-.9961 .08827 .08827 .9961 763 696)" r="29"/></g><path d="m228.481 640.757 525.991-46.018 16.908 193.262-525.991 46.018z" class="C"/><path d="M202 679c-24 13-39 40-37 70 3 29 23 53 49 62l-12-132zm597 80c25-14 40-40 38-70-3-29-22-53-49-63l11 133z" fill="#ff2" class="D"/><g class="C"><path d="m275 448 399.474-34.949 14.206 162.38-399.474 34.949z"/><ellipse cx="475" cy="430" rx="200" ry="31" transform="rotate(355 475 430)"/></g><g class="B"><ellipse cx="484" cy="540" rx="200" ry="29" transform="rotate(355 484 540)"/><path d="m285 559 399.474-34.949 5.055 57.779-399.474 34.949z"/></g><ellipse cx="491" cy="616" rx="264" ry="41" transform="rotate(355 491 616)" class="C"/><g class="B"><ellipse cx="503" cy="745" rx="264" ry="43" transform="rotate(355 503 745)"/><path d="m240 771 525.991-46.018 5.317 60.768-525.991 46.018z"/></g><ellipse cx="509" cy="811" rx="264" ry="41" transform="rotate(355 509 811)" fill="#da0"/><path d="m434 134 18-19 15 24-7 7-26-12z" class="B"/><path d="m233 689 32-76m-32 76 32-76m13 129 71-148m-71 148 71-148m19 126 66-139m-66 139 66-139m24 126 64-135m-64 135 64-135m32 127 59-130m-59 130 59-130m31 128 60-123m-60 123 60-123m24 130 29-65m-29 65 29-65m4.616 44.32-94.797-113.655m94.797 113.655-94.797-113.655M688 700 577 570m111 130L577 570m18 128L488 576m107 122L488 576m11 126L395 586m104 116L395 586m14 128L307 601m102 113L307 601m12 130-88-98m88 98-88-98" stroke="#da0"/><g class="B"><circle cx="384" cy="685" r="6"/><circle cx="419" cy="613" r="6"/><circle cx="510" cy="601" r="6"/><circle cx="601" cy="598" r="6"/><circle cx="692" cy="601" r="6"/><circle cx="474" cy="673" r="6"/><circle cx="568" cy="666" r="6"/><circle cx="660" cy="664" r="6"/><circle cx="746" cy="666" r="6"/><circle cx="297" cy="705" r="6"/><circle cx="333" cy="629" r="6"/><circle cx="248" cy="654" r="6"/></g><path d="m327 348 36-77m-36 77 36-77m34 82 41-94m-41 94 41-94m49 83 33-88m-33 88 33-88m48 88 28-79m-28 79 28-79m-219 95-56-70m56 70-56-70m133.595 58.294-59.323-81.742m59.323 81.742-59.323-81.742M536 341l-56-86m56 86-56-86m124 75-50-76m50 76-50-76" stroke="#da0"/><g class="B"><circle cx="343" cy="314" r="6"/><circle cx="421" cy="300" r="6"/><circle cx="505" cy="293" r="6"/><circle cx="584" cy="298" r="6"/></g><path d="m336 533 51-8 10 67-53 7-8-66zm-31 200 51-10 9 65-52 11-8-66zm75-377 51-8 8 56-53 7-6-55z" fill-opacity=".3" class="C"/><path d="m481 705 45-5 8 67-47 4-6-66z" fill="#ff2"/><path d="m487 764 46-4 1 7-47 4v-7z" fill="#da0"/><g class="B"><path d="m624 677-48 2 10 57 49-2-11-57z"/><ellipse cx="596" cy="684" rx="29" ry="14" transform="rotate(352 596 684)"/></g><g fill="#da0"><ellipse cx="608" cy="740" rx="28" ry="10" transform="rotate(345 608 740)"/><path d="m605 752-79 14 60-28 19 14z"/></g><g class="B"><path d="m576 676-49 24 7 62 53-26-11-60zm-193 28 40-11 3 61-40 9-3-59z"/><ellipse rx="28" ry="11" transform="matrix(-.99462 .1036 .10703 .99426 412 702)"/></g><g fill="#da0"><ellipse rx="28" ry="10" transform="matrix(-.99987 -.01602 -.0042 .99999 414 763)"/><path d="m420 773 83-6-79-14-4 20z"/></g><path d="m423 691 59 14 6 60-63-12-2-62z" class="B"/><g><animate attributeName="opacity" values="0;1;0" dur="1s" repeatCount="indefinite"/><g class="C"><path d="M436 137c4 0 13 13 13 13-3-5-8-13-8-17 1-3 4-7 6-8 0 0-6 4-9 3-4-1-13-13-13-13 3 4 8 14 7 17 0 3-5 7-7 9 0 0 7-5 11-4zM283 561c7 1 23 23 23 23-6-9-15-23-14-29s7-12 10-14c0 0-11 6-17 5-5-2-21-23-21-23 5 8 14 25 13 30-2 5-9 12-13 15 0 0 12-7 19-7zm15 247c7 1 23 23 23 23-6-8-15-23-14-29s7-13 10-14c0 0-11 6-16 5-6-2-22-23-22-23 5 7 14 25 13 30-2 5-9 12-13 15 0 0 12-7 19-7zm493-175c5 0 16 16 16 16-4-6-10-17-10-21 1-4 5-9 7-10 0 0-7 5-11 4s-16-17-16-17c4 6 10 18 9 21-1 4-6 9-9 12 0 0 9-6 14-5z"/><use xlink:href="#A"/></g></g><g><animate attributeName="opacity" values="1;0;1" dur="1s" repeatCount="indefinite"/><g class="C"><path d="M605 732c5 1 18 18 18 18-5-7-11-18-11-22 1-5 6-10 8-11 0 0-9 4-13 3s-17-17-17-17c4 6 11 19 10 23-1 3-7 9-10 12 0 0 10-6 15-6zm80-204c5 0 17 18 17 18-4-7-11-18-10-23 0-4 5-10 7-11 0 0-8 5-12 4-5-1-17-17-17-17 4 5 11 18 10 22-2 4-7 10-10 12 0 0 9-6 15-5zM167 729c6 0 20 20 20 20-6-8-13-21-13-26 1-4 7-10 9-12 0 0-9 6-14 4-5-1-19-19-19-19 5 6 13 21 11 25-1 5-7 11-11 14 0 0 11-7 17-6z"/><use xlink:href="#A" x="-224" y="-135"/><path d="M502 180c8 0 26 25 26 25-7-10-17-26-16-32 1-7 8-14 11-16 0 0-12 7-18 5-7-1-25-25-25-25 7 8 17 27 15 33-2 5-10 13-15 17 0 0 14-8 22-7z"/></g></g></g><ellipse cx="499" cy="922" rx="215" ry="24" fill="#0a4"><animate values="230;250;230" keyTimes="0;.50;1" dur="4s" attributeName="rx" fill="freeze" keySplines="0.5 0 0.5 1; 0.5 0 0.5 1" calcMode="spline" repeatCount="indefinite"/></ellipse><defs><path id="A" d="M605 358c5 0 17 17 17 17-4-7-11-18-10-22 0-4 5-10 7-11 0 0-8 5-12 4-5-1-17-17-17-17 4 5 11 18 10 22s-7 9-10 12c0 0 9-6 15-5z"/><path id="B" d="M547.06 250.81c.28 0 .5-.22.5-.5a.5.5 0 0 0-.5-.5.51.51 0 0 0-.5.5.5.5 0 0 0 .5.5z"/><path id="C" d="M538.71 235.06c2.6 0 4.71-2.11 4.71-4.71 0-2.61-2.11-4.71-4.71-4.71s-4.71 2.1-4.71 4.71c0 2.6 2.11 4.71 4.71 4.71z"/><path id="D" d="M547.72 230.43c1.83 0 3.31-1.27 3.31-2.84s-1.48-2.84-3.31-2.84-3.31 1.27-3.31 2.84 1.48 2.84 3.31 2.84z"/><path id="E" d="M547.25 227.59a.94.94 0 1 0 0-1.89.94.94 0 0 0-.95.94c0 .53.42.95.95.95z"/><path id="F" d="M554.02 235.06c.22 0 .39-.18.39-.4a.39.39 0 0 0-.78 0c0 .22.17.4.39.4z"/></defs></svg>';

    address public eatingContract; // allowed to eat/burn Desserts
    address public randomizerContract;
    uint256 private dessertCount = 0; // maximum of 10,000 Desserts can be minted

    constructor() ERC1155("") {}

    // owner will air drop Desserts via this mint function, designed to minimize gas used for multiple mints
    // if ads.length > quantity.length, transaction will fail and no mints will go through
    // if ads.length < quantity.length, the extra values in quantity will be ignored
    function ownerMint(address[] calldata ads, uint256[] calldata quantity, uint256 typeId) external onlyOwner {
        require(typeId>0 && typeId<4, "type err");
        for (uint256 i=0; i<ads.length; i++) {
          require(dessertCount+quantity[i] < 10001, "10k");
          _mint(ads[i], typeId, quantity[i], "");
          dessertCount += quantity[i];
        }
    }

    // owner will air drop Desserts via this mint function, designed to minimize gas used for single mints
    function ownerMint1(address[] calldata ads, uint256 typeId) external onlyOwner {
        require(typeId>0 && typeId<4, "type err");
        require(dessertCount+ads.length < 10001, "10k");
        for (uint256 i=0; i<ads.length; i++) {
          _mint(ads[i], typeId, 1, "");
        }
        dessertCount += ads.length;
    }    

    function setEatingContractAddress(address eatingContractAddress) external onlyOwner {
        eatingContract = eatingContractAddress;
    }

    function setRandomizerContractAddress(address randomizerContractAddress) external onlyOwner {
        randomizerContract = randomizerContractAddress;
    }

    function burnDessertForAddress(uint256 typeId, address burnTokenAddress) external {
        require(msg.sender == eatingContract, "ad err");
        _burn(burnTokenAddress, typeId, 1);
    }

    function uri(uint256 typeId) public view override returns (string memory) {
        require(typeId>0 && typeId<4, "type err");
        bytes memory svg;
        string memory num;
        if (typeId == 1) {
            svg = bytes(svg1);
            num = '1 Incredible Ice Pop","attributes":[{"trait_type": "Dessert Type", "value": "D1';
        } else if (typeId == 2) {
            svg = bytes(svg2);
            num = '2 Divine Donut","attributes":[{"trait_type": "Dessert Type", "value": "D2';
        } else {
            svg = bytes(svg3);
            num = '3 Celestial Cake","attributes":[{"trait_type": "Dessert Type", "value": "D3';
        }
        return string(abi.encodePacked('data:application/json;base64,', Base64.encode(abi.encodePacked(
            '{"name": "D', num, '"}],"image": "data:image/svg+xml;base64,',
            Base64.encode(svg),'"}'))));
    }
}

File 1 of 10: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 10: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 10: ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 4 of 10: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 5 of 10: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 6 of 10: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "../IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 7 of 10: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 8 of 10: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 10 of 10: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"address","name":"burnTokenAddress","type":"address"}],"name":"burnDessertForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eatingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"ads","type":"address[]"},{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"ads","type":"address[]"},{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"ownerMint1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"randomizerContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"eatingContractAddress","type":"address"}],"name":"setEatingContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"randomizerContractAddress","type":"address"}],"name":"setRandomizerContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

61090060405261084f608081815290620025c160a03980516200002b916004916020909101906200013e565b50604051806111a0016040528061117f815260200162002e1061117f913980516200005f916005916020909101906200013e565b5060405180612540016040528061251c815260200162003f8f61251c9139805162000093916006916020909101906200013e565b506000600955348015620000a657600080fd5b50604080516020810190915260008152620000c181620000d3565b50620000cd33620000ec565b62000221565b8051620000e89060029060208401906200013e565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014c90620001e4565b90600052602060002090601f016020900481019282620001705760008555620001bb565b82601f106200018b57805160ff1916838001178555620001bb565b82800160010185558215620001bb579182015b82811115620001bb5782518255916020019190600101906200019e565b50620001c9929150620001cd565b5090565b5b80821115620001c95760008155600101620001ce565b600181811c90821680620001f957607f821691505b602082108114156200021b57634e487b7160e01b600052602260045260246000fd5b50919050565b61239080620002316000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c8063707599a2116100a2578063bee0e2fd11610071578063bee0e2fd1461025b578063d39d71ef1461026e578063e985e9c514610281578063f242432a146102bd578063f2fde38b146102d057600080fd5b8063707599a21461021c578063715018a61461022f5780638da5cb5b14610237578063a22cb4651461024857600080fd5b8063265c2b5a116100e9578063265c2b5a146101985780632eb2c2d6146101ab5780633078f6fd146101be57806336c7c12c146101d15780634e1273f4146101fc57600080fd5b8062fdd58e1461011a57806301ffc9a7146101405780630e89341c1461016357806314ab563314610183575b600080fd5b61012d610128366004611a77565b6102e3565b6040519081526020015b60405180910390f35b61015361014e366004611c32565b61037a565b6040519015158152602001610137565b610176610171366004611c6c565b6103cc565b6040516101379190611ec8565b6101966101913660046118d7565b61066c565b005b6101966101a6366004611b15565b6106b8565b6101966101b936600461192c565b6107d2565b6101966101cc366004611c85565b610869565b6008546101e4906001600160a01b031681565b6040516001600160a01b039091168152602001610137565b61020f61020a366004611b61565b6108bc565b6040516101379190611e87565b61019661022a3660046118d7565b6109e6565b610196610a32565b6003546001600160a01b03166101e4565b610196610256366004611a3b565b610a68565b610196610269366004611aa1565b610a73565b6007546101e4906001600160a01b031681565b61015361028f3660046118f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101966102cb3660046119d6565b610bd3565b6101966102de3660046118d7565b610c5a565b60006001600160a01b0383166103545760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806103ab57506001600160e01b031982166303a24d0760e21b145b806103c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000821180156103de5750600482105b6103fa5760405162461bcd60e51b815260040161034b90611f68565b60608083600114156104b35760048054610413906120b6565b80601f016020809104026020016040519081016040528092919081815260200182805461043f906120b6565b801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b505050505091506040518060800160405280604f8152602001612238604f91399050610612565b836002141561056957600580546104c9906120b6565b80601f01602080910402602001604051908101604052809291908181526020018280546104f5906120b6565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b505050505091506040518060800160405280604981526020016122d2604991399050610612565b60068054610576906120b6565b80601f01602080910402602001604051908101604052809291908181526020018280546105a2906120b6565b80156105ef5780601f106105c4576101008083540402835291602001916105ef565b820191906000526020600020905b8154815290600101906020018083116105d257829003601f168201915b505050505091506040518060800160405280604b8152602001612287604b913990505b6106448161061f84610cf5565b604051602001610630929190611d0f565b604051602081830303815290604052610cf5565b6040516020016106549190611d9f565b60405160208183030381529060405292505050919050565b6003546001600160a01b031633146106965760405162461bcd60e51b815260040161034b90611fd4565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146106e25760405162461bcd60e51b815260040161034b90611fd4565b6000811180156106f25750600481105b61070e5760405162461bcd60e51b815260040161034b90611f68565b6009546127119061072090849061202d565b106107535760405162461bcd60e51b815260206004820152600360248201526231306b60e81b604482015260640161034b565b60005b828110156107b2576107a08484838181106107735761077361214f565b905060200201602081019061078891906118d7565b83600160405180602001604052806000815250610e5b565b806107aa8161211e565b915050610756565b5082829050600960008282546107c8919061202d565b9091555050505050565b6001600160a01b0385163314806107ee57506107ee853361028f565b6108555760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161034b565b6108628585858585610f65565b5050505050565b6007546001600160a01b031633146108ac5760405162461bcd60e51b815260206004820152600660248201526530b21032b93960d11b604482015260640161034b565b6108b88183600161113a565b5050565b606081518351146109215760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161034b565b6000835167ffffffffffffffff81111561093d5761093d612165565b604051908082528060200260200182016040528015610966578160200160208202803683370190505b50905060005b84518110156109de576109b185828151811061098a5761098a61214f565b60200260200101518583815181106109a4576109a461214f565b60200260200101516102e3565b8282815181106109c3576109c361214f565b60209081029190910101526109d78161211e565b905061096c565b509392505050565b6003546001600160a01b03163314610a105760405162461bcd60e51b815260040161034b90611fd4565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314610a5c5760405162461bcd60e51b815260040161034b90611fd4565b610a6660006112b4565b565b6108b8338383611306565b6003546001600160a01b03163314610a9d5760405162461bcd60e51b815260040161034b90611fd4565b600081118015610aad5750600481105b610ac95760405162461bcd60e51b815260040161034b90611f68565b60005b84811015610bcb57612711848483818110610ae957610ae961214f565b90506020020135600954610afd919061202d565b10610b305760405162461bcd60e51b815260206004820152600360248201526231306b60e81b604482015260640161034b565b610b89868683818110610b4557610b4561214f565b9050602002016020810190610b5a91906118d7565b83868685818110610b6d57610b6d61214f565b9050602002013560405180602001604052806000815250610e5b565b838382818110610b9b57610b9b61214f565b9050602002013560096000828254610bb3919061202d565b90915550819050610bc38161211e565b915050610acc565b505050505050565b6001600160a01b038516331480610bef5750610bef853361028f565b610c4d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161034b565b61086285858585856113e7565b6003546001600160a01b03163314610c845760405162461bcd60e51b815260040161034b90611fd4565b6001600160a01b038116610ce95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161034b565b610cf2816112b4565b50565b805160609080610d15575050604080516020810190915260008152919050565b60006003610d2483600261202d565b610d2e9190612045565b610d39906004612067565b90506000610d4882602061202d565b67ffffffffffffffff811115610d6057610d60612165565b6040519080825280601f01601f191660200182016040528015610d8a576020820181803683370190505b509050600060405180606001604052806040815260200161231b604091399050600181016020830160005b86811015610e16576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101610db5565b506003860660018114610e305760028114610e4157610e4d565b613d3d60f01b600119830152610e4d565b603d60f81b6000198301525b505050918152949350505050565b6001600160a01b038416610ebb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161034b565b33610ed581600087610ecc88611504565b61086288611504565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610f0590849061202d565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108628160008787878761154f565b8151835114610fc75760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161034b565b6001600160a01b038416610fed5760405162461bcd60e51b815260040161034b90611f23565b3360005b84518110156110d457600085828151811061100e5761100e61214f565b60200260200101519050600085838151811061102c5761102c61214f565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561107c5760405162461bcd60e51b815260040161034b90611f8a565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110b990849061202d565b92505081905550505050806110cd9061211e565b9050610ff1565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611124929190611e9a565b60405180910390a4610bcb8187878787876116ba565b6001600160a01b03831661119c5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b606482015260840161034b565b336111cc818560006111ad87611504565b6111b687611504565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156112495760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b606482015260840161034b565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561137a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161034b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661140d5760405162461bcd60e51b815260040161034b90611f23565b3361141d818787610ecc88611504565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561145e5760405162461bcd60e51b815260040161034b90611f8a565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061149b90849061202d565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46114fb82888888888861154f565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061153e5761153e61214f565b602090810291909101015292915050565b6001600160a01b0384163b15610bcb5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906115939089908990889088908890600401611e42565b602060405180830381600087803b1580156115ad57600080fd5b505af19250505080156115dd575060408051601f3d908101601f191682019092526115da91810190611c4f565b60015b61168a576115e961217b565b806308c379a0141561162357506115fe612197565b806116095750611625565b8060405162461bcd60e51b815260040161034b9190611ec8565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161034b565b6001600160e01b0319811663f23a6e6160e01b146114fb5760405162461bcd60e51b815260040161034b90611edb565b6001600160a01b0384163b15610bcb5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906116fe9089908990889088908890600401611de4565b602060405180830381600087803b15801561171857600080fd5b505af1925050508015611748575060408051601f3d908101601f1916820190925261174591810190611c4f565b60015b611754576115e961217b565b6001600160e01b0319811663bc197c8160e01b146114fb5760405162461bcd60e51b815260040161034b90611edb565b80356001600160a01b038116811461179b57600080fd5b919050565b60008083601f8401126117b257600080fd5b50813567ffffffffffffffff8111156117ca57600080fd5b6020830191508360208260051b85010111156117e557600080fd5b9250929050565b600082601f8301126117fd57600080fd5b8135602061180a82612009565b60405161181782826120f1565b8381528281019150858301600585901b8701840188101561183757600080fd5b60005b858110156118565781358452928401929084019060010161183a565b5090979650505050505050565b600082601f83011261187457600080fd5b813567ffffffffffffffff81111561188e5761188e612165565b6040516118a5601f8301601f1916602001826120f1565b8181528460208386010111156118ba57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156118e957600080fd5b6118f282611784565b9392505050565b6000806040838503121561190c57600080fd5b61191583611784565b915061192360208401611784565b90509250929050565b600080600080600060a0868803121561194457600080fd5b61194d86611784565b945061195b60208701611784565b9350604086013567ffffffffffffffff8082111561197857600080fd5b61198489838a016117ec565b9450606088013591508082111561199a57600080fd5b6119a689838a016117ec565b935060808801359150808211156119bc57600080fd5b506119c988828901611863565b9150509295509295909350565b600080600080600060a086880312156119ee57600080fd5b6119f786611784565b9450611a0560208701611784565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a2f57600080fd5b6119c988828901611863565b60008060408385031215611a4e57600080fd5b611a5783611784565b915060208301358015158114611a6c57600080fd5b809150509250929050565b60008060408385031215611a8a57600080fd5b611a9383611784565b946020939093013593505050565b600080600080600060608688031215611ab957600080fd5b853567ffffffffffffffff80821115611ad157600080fd5b611add89838a016117a0565b90975095506020880135915080821115611af657600080fd5b50611b03888289016117a0565b96999598509660400135949350505050565b600080600060408486031215611b2a57600080fd5b833567ffffffffffffffff811115611b4157600080fd5b611b4d868287016117a0565b909790965060209590950135949350505050565b60008060408385031215611b7457600080fd5b823567ffffffffffffffff80821115611b8c57600080fd5b818501915085601f830112611ba057600080fd5b81356020611bad82612009565b604051611bba82826120f1565b8381528281019150858301600585901b870184018b1015611bda57600080fd5b600096505b84871015611c0457611bf081611784565b835260019690960195918301918301611bdf565b5096505086013592505080821115611c1b57600080fd5b50611c28858286016117ec565b9150509250929050565b600060208284031215611c4457600080fd5b81356118f281612221565b600060208284031215611c6157600080fd5b81516118f281612221565b600060208284031215611c7e57600080fd5b5035919050565b60008060408385031215611c9857600080fd5b8235915061192360208401611784565b600081518084526020808501945080840160005b83811015611cd857815187529582019590820190600101611cbc565b509495945050505050565b60008151808452611cfb816020860160208601612086565b601f01601f19169290920160200192915050565b6a1ec89b985b59488e88089160aa1b81528251600090611d3681600b850160208801612086565b7f227d5d2c22696d616765223a2022646174613a696d6167652f7376672b786d6c600b91840191820152670ed8985cd94d8d0b60c21b602b8201528351611d84816033840160208801612086565b61227d60f01b60339290910191820152603501949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611dd781601d850160208701612086565b91909101601d0192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611e1090830186611ca8565b8281036060840152611e228186611ca8565b90508281036080840152611e368185611ce3565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611e7c90830184611ce3565b979650505050505050565b6020815260006118f26020830184611ca8565b604081526000611ead6040830185611ca8565b8281036020840152611ebf8185611ca8565b95945050505050565b6020815260006118f26020830184611ce3565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600890820152673a3cb8329032b93960c11b604082015260600190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff82111561202357612023612165565b5060051b60200190565b6000821982111561204057612040612139565b500190565b60008261206257634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561208157612081612139565b500290565b60005b838110156120a1578181015183820152602001612089565b838111156120b0576000848401525b50505050565b600181811c908216806120ca57607f821691505b602082108114156120eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561211757612117612165565b6040525050565b600060001982141561213257612132612139565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156121945760046000803e5060005160e01c5b90565b600060443d10156121a55790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156121d557505050505090565b82850191508151818111156121ed5750505050505090565b843d87010160208285010111156122075750505050505090565b612216602082860101876120f1565b509095945050505050565b6001600160e01b031981168114610cf257600080fdfe3120496e6372656469626c652049636520506f70222c2261747472696275746573223a5b7b2274726169745f74797065223a2022446573736572742054797065222c202276616c7565223a20224431332043656c65737469616c2043616b65222c2261747472696275746573223a5b7b2274726169745f74797065223a2022446573736572742054797065222c202276616c7565223a202244333220446976696e6520446f6e7574222c2261747472696275746573223a5b7b2274726169745f74797065223a2022446573736572742054797065222c202276616c7565223a202244324142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212203ff9d3bb0c53b458bf1f6b5ded3812c2859a0c8bf159f7eccb031951abfcdeb364736f6c634300080600333c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222077696474683d2239393922206865696768743d22393939223e3c706174682066696c6c3d22236666663631642220643d224d302030683939397639393948307a222f3e3c673e3c7061746820643d224d302d34355630762d3435222069643d2261222f3e3c616e696d6174654d6f74696f6e206475723d2235732220726570656174436f756e743d22696e646566696e69746522206b6579506f696e74733d22303b2e35303b313b2e35303b3022206b657954696d65733d22303b2e32353b2e35303b2e37353b3122206b657953706c696e65733d22302e35203020302e3520313b20302e35203020302e3520313b20302e35203020302e3520313b20302e35203020302e352031222063616c634d6f64653d2273706c696e65223e3c6d7061746820687265663d222361222f3e3c2f616e696d6174654d6f74696f6e3e3c672066696c6c3d2223666638666639223e3c7061746820643d226d333130203434332d33302035332034322d31312d31322d34327a222f3e3c636972636c652063783d22333436222063793d223533322220723d22373422207472616e73666f726d3d22726f7461746528333434203334362035333229222f3e3c2f673e3c7061746820643d226d34323920363637203235372d37312d33302035342d3235372037322033302d35357a6d3139302d3230342037382d32312d33382036392d37382032312033382d36397a222066696c6c3d2223643062222f3e3c7061746820643d226d333939203732322033302d35352033392d31312d3130332d3336392d3331203534632d31332032342d32382034362d31362039316c3831203239307a222066696c6c3d2223666638666639222f3e3c706174682066696c6c3d22236166383230302220643d226d353036203637352037302e3137322d32302e3132322032382e3131352039382e3034392d37302e3137322032302e3132327a222f3e3c636972636c652063783d22333736222063793d2234373722207472616e73666f726d3d22726f7461746528333434203337362034373729222066696c6c3d22236630662220723d223734222f3e3c636972636c652063783d22353638222063793d2237363522207472616e73666f726d3d22726f7461746528333434203536382037363529222066696c6c3d22236166383230302220723d223335222f3e3c672066696c6c3d2223663066223e3c636972636c652063783d22363332222063793d2234303622207472616e73666f726d3d22726f74617465283334342036333220343036292220723d223734222f3e3c636972636c652063783d22343831222063793d223335342220723d2231333322207472616e73666f726d3d22726f7461746528333434203438312033353429222f3e3c2f673e3c672066696c6c3d2223643062223e3c636972636c65207472616e73666f726d3d227363616c652831202d312920726f746174652831352e35343320313933352e35363720313133392e303337292220723d223330222f3e3c636972636c65207472616e73666f726d3d227363616c652831202d312920726f746174652831352e35343320313830332e34343720323131322e343335292220723d223330222f3e3c2f673e3c706174682066696c6c3d22236630662220643d226d33353220333839203235372e3238392d37312e3335332037372e323332203237382e3438392d3235372e3238392037312e3335337a222f3e3c706174682066696c6c3d22236666653338362220643d226d353238203732382036382e3430342d31392e3032352031302e34352033372e3537342d36382e3430342031392e3032357a222f3e3c706174682066696c6c3d22236461623735342220643d226d353131203636362036382e32352d31392e35372031372e3931362036322e3438322d36382e32352031392e35377a222f3e3c636972636c652063783d22353733222063793d2237353722207472616e73666f726d3d22726f7461746528333434203537332037353729222066696c6c3d22236666653338362220723d223335222f3e3c7061746820643d226d353131203636362d35203920372d322d322d377a222066696c6c3d2223616638323030222f3e3c672066696c6c3d2223666638666639223e3c7265637420783d223339302220793d22333235222077696474683d22353922206865696768743d22323930222072783d22323922207472616e73666f726d3d22726f7461746528333434203339302033323529222f3e3c7265637420783d223439342220793d22323936222077696474683d22353922206865696768743d22323930222072783d22323922207472616e73666f726d3d22726f7461746528333434203439342032393629222f3e3c2f673e3c706174682066696c6c2d72756c653d226576656e6f64642220643d224d33363520363034632d323320362d343720302d36352d31346c33312d35346331382031342034312031392036352031336c2d33312035357a222066696c6c3d2223643062222f3e3c2f673e3c656c6c697073652063783d22353231222063793d22383935222072783d223733222072793d223131222066696c6c2d6f7061636974793d222e32223e3c616e696d6174652076616c7565733d2237333b39303b373322206b657954696d65733d22303b2e35303b3122206475723d22322e357322206174747269627574654e616d653d227278222066696c6c3d22667265657a6522206b657953706c696e65733d22302e35203020302e3520313b20302e35203020302e352031222063616c634d6f64653d2273706c696e652220726570656174436f756e743d22696e646566696e697465222f3e3c2f656c6c697073653e3c2f7376673e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222077696474683d2239393922206865696768743d22393939223e3c706174682066696c6c3d22236630662220643d224d302030683939397639393948307a222f3e3c673e3c7061746820643d224d302d37305630762d37307a222069643d2261222f3e3c616e696d6174654d6f74696f6e206475723d2236732220726570656174436f756e743d22696e646566696e69746522206b6579506f696e74733d22303b2e35303b313b2e35303b3022206b657954696d65733d22303b2e32353b2e35303b2e37353b3122206b657953706c696e65733d22302e35203020302e3520313b20302e35203020302e3520313b20302e35203020302e3520313b20302e35203020302e352031222063616c634d6f64653d2273706c696e65223e3c6d7061746820687265663d222361222f3e3c2f616e696d6174654d6f74696f6e3e3c636972636c652063783d22343936222063793d2235323622207472616e73666f726d3d22726f7461746528333531203439362035323629222066696c6c3d22236462352220723d22323435222f3e3c6d61736b2069643d226222206d61736b556e6974733d227573657253706163654f6e5573652220783d223235362220793d22323632222077696474683d2234393122206865696768743d2234393122206d61736b2d747970653d22616c706861223e3c636972636c652063783d22353031222063793d223530382220723d2232343522207472616e73666f726d3d22726f7461746528333531203530312035303829222066696c6c3d2223646235222f3e3c2f6d61736b3e3c67206d61736b3d2275726c28236229223e3c636972636c652063783d22343939222063793d2234393622207472616e73666f726d3d22726f7461746528333531203439392034393629222066696c6c3d22236665382220723d22323436222f3e3c2f673e3c6d61736b2069643d226322206d61736b556e6974733d227573657253706163654f6e5573652220783d223138352220793d22343339222077696474683d2232323922206865696768743d2232333022206d61736b2d747970653d22616c706861223e3c636972636c652063783d22333030222063793d2235353422207472616e73666f726d3d22726f7461746528333531203330302035353429222066696c6c3d22236462352220723d22313134222f3e3c2f6d61736b3e3c67206d61736b3d2275726c28236329223e3c636972636c652063783d22323937222063793d2235343122207472616e73666f726d3d22726f7461746528333531203239372035343129222066696c6c3d22236665382220723d22313133222f3e3c636972636c652063783d22333031222063793d2235323722207472616e73666f726d3d22726f7461746528333531203330312035323729222066696c6c3d22233563662220723d223936222f3e3c2f673e3c6d61736b2069643d226422206d61736b556e6974733d227573657253706163654f6e5573652220783d223632312220793d22333731222077696474683d2232323722206865696768743d2232323622206d61736b2d747970653d22616c706861223e3c636972636c652063783d22373334222063793d2234383422207472616e73666f726d3d22726f7461746528333531203733342034383429222066696c6c3d22236462352220723d22313133222f3e3c2f6d61736b3e3c67206d61736b3d2275726c28236429223e3c636972636c652063783d22373035222063793d2234383622207472616e73666f726d3d22726f7461746528333531203730352034383629222066696c6c3d22236665382220723d22313131222f3e3c636972636c652063783d22373131222063793d2234363722207472616e73666f726d3d22726f7461746528333531203731312034363729222066696c6c3d22233563662220723d223935222f3e3c2f673e3c6d61736b2069643d226522206d61736b556e6974733d227573657253706163654f6e5573652220783d223235372220793d22323637222077696474683d2234393122206865696768743d2234393122206d61736b2d747970653d22616c706861223e3c7061746820643d224d37343420343733633231203133342d3639203235392d323033203238312d3133332032312d3235392d36392d3238312d3230332d32312d3133332036392d323539203230332d323831203133342d32312032353920373020323831203230337a222066696c6c3d2223646235222f3e3c2f6d61736b3e3c67206d61736b3d2275726c28236529223e3c636972636c652063783d22353032222063793d2234373322207472616e73666f726d3d22726f7461746528333531203530322034373329222066696c6c3d22233563662220723d22323231222f3e3c636972636c652063783d22353034222063793d2234353522207472616e73666f726d3d22726f7461746528333531203530342034353529222066696c6c3d22233637643966642220723d22323033222f3e3c2f673e3c672066696c6c3d2223363764396664223e3c636972636c652063783d22333036222063793d2235303922207472616e73666f726d3d22726f74617465283335312033303620353039292220723d223731222f3e3c636972636c652063783d22373131222063793d2234343322207472616e73666f726d3d22726f74617465283335312037313120343433292220723d223731222f3e3c2f673e3c636972636c652063783d22353030222063793d2234363622207472616e73666f726d3d22726f7461746528333531203530302034363629222066696c6c3d22236665382220723d223530222f3e3c6d61736b2069643d226622206d61736b556e6974733d227573657253706163654f6e5573652220783d223435302220793d22343135222077696474683d2231303122206865696768743d2231303222206d61736b2d747970653d22616c706861223e3c636972636c652063783d22353030222063793d223436362220723d22353022207472616e73666f726d3d22726f7461746528333531203530302034363629222066696c6c3d2223666538222f3e3c2f6d61736b3e3c67206d61736b3d2275726c28236629223e3c636972636c652063783d22343833222063793d2235303422207472616e73666f726d3d22726f7461746528333531203438332035303429222066696c6c3d22236462352220723d223630222f3e3c636972636c652063783d22343739222063793d2235313022207472616e73666f726d3d22726f7461746528333531203437392035313029222066696c6c3d22236630662220723d223433222f3e3c2f673e3c706174682066696c6c2d72756c653d226576656e6f64642220643d224d353430203439386331312d31312031362d32372031332d34332d342d32382d33312d34382d35392d34332d323420342d34312032332d343320343520362d31362032302d32382033372d33312032372d34203533203134203537203431203220313120302032322d352033317a222066696c6c3d2223356366222f3e3c7061746820643d226d333639203336372033332e38373120322e3936332d2e363120362e3937332d33332e3837312d322e3936337a6d3136382d35312d33322e353420392e3835362d322e3032392d362e3639392033322e35342d392e3835367a222066696c6c3d2223663066222f3e3c7061746820643d226d343331203331392032372e3530372031392e3938352d342e31313420352e3636332d32372e3530372d31392e3938357a6d37392035312033312e3031362d31332e39323820322e38363720362e3338362d33312e3031362031332e3932387a6d2d3936203133372d31312e3732312d33312e39313620362e3537312d322e3431332031312e3732312033312e3931367a222066696c6c3d2223666530222f3e3c7061746820643d226d343538203339332d32392031372d342d372032392d3137203420377a222066696c6c3d2223373563633061222f3e3c7061746820643d226d363530203436372031332e3932382033312e3031372d362e33383620322e3836372d31332e3932382d33312e3031377a6d2d34382031313620382e382d33322e38343120362e37363120312e3831322d382e382033322e3834317a6d312d3137372d33332e3132392d372e36343820312e3537352d362e3832312033332e31323920372e3634387a222066696c6c3d2223663066222f3e3c7061746820643d226d373434203433342d32372e35372d31392e38393720342e3039362d352e3637362032372e35372031392e3839377a6d2d3134312031342032372e3838392d31392e34343820342e30303420352e3734322d32372e3838392031392e3434387a222066696c6c3d2223666530222f3e3c7061746820643d226d3537392035303020333220382d3120372d33332d3820322d377a6d32302d3135372032342032342d3520352d32342d323420352d357a6d3937203131312033312d3134203320372d33312031342d332d377a222066696c6c3d2223373563633061222f3e3c7061746820643d226d353032203536322d33332e3837312d322e3936332e36312d362e3937332033332e38373120322e3936337a4d333638203433386c2d31372032392e3434352d362e3036322d332e352031372d32392e3434357a222066696c6c3d2223663066222f3e3c7061746820643d226d3432332035393620322e3936332d33332e38373120362e3937332e36312d322e3936332033332e3837317a6d2d3132342d36302d32372e3932332d31392e33393920332e3939342d352e3734392032372e3932332031392e3339397a6d3237312031362d32312e3330372032362e3439352d352e3435352d342e3338372032312e3330372d32362e3439357a222066696c6c3d2223666530222f3e3c7061746820643d226d333835203535302d31372d323920372d342031372032392d3720347a6d2d38382d34362033312d3134203320372d33312031332d332d367a6d323236203131362d32392d313720332d372033302031372d3420377a222066696c6c3d2223373563633061222f3e3c672066696c6c3d2223666666223e3c7061746820643d224d3538322032393863313320312034322034322034322034322d31312d31372d32372d34332d32362d353320322d31302031332d32332031382d3236203020302d31392031322d323920392d31312d322d33392d34302d33392d34302039203133203236203433203233203532732d31362032322d3233203238633020302032322d31332033342d31327a223e3c616e696d617465206174747269627574654e616d653d226f706163697479222076616c7565733d22313b303b3122206475723d2231732220726570656174436f756e743d22696e646566696e697465222f3e3c2f706174683e3c7061746820643d224d3233362035313063313320322034312034312034312034312d31312d31362d32362d34312d32352d353120322d31302031332d32322031372d3235203020302d31382031312d323820382d31302d322d33382d33392d33382d333920392031332032352034332032322035312d3220392d31352032312d3232203237203020302032312d31332033332d31327a223e3c616e696d617465206174747269627574654e616d653d226f706163697479222076616c7565733d22303b313b3022206475723d2231732220726570656174436f756e743d22696e646566696e697465222f3e3c2f706174683e3c2f673e3c2f673e3c656c6c697073652063783d22353030222063793d22383830222072783d22313439222072793d223137222066696c6c2d6f7061636974793d222e32223e3c616e696d6174652076616c7565733d223134393b3139303b31343922206b657954696d65733d22303b2e35303b3122206475723d22337322206174747269627574654e616d653d227278222066696c6c3d22667265657a6522206b657953706c696e65733d22302e35203020302e3520313b20302e35203020302e352031222063616c634d6f64653d2273706c696e652220726570656174436f756e743d22696e646566696e697465222f3e3c2f656c6c697073653e3c2f7376673e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b222077696474683d2239393922206865696768743d22393939223e3c7374796c653e2e427b66696c6c3a236663307d2e437b66696c6c3a236666667d2e447b66696c6c2d72756c653a6576656e6f64647d3c2f7374796c653e3c706174682066696c6c3d22233061342220643d224d302030683939397639393948307a222f3e3c7061746820643d224d3239332030683430326c323234203931394837394c32393320305a222066696c6c3d2223376330222f3e3c656c6c697073652063783d22343939222063793d22393230222072783d22343230222072793d223434222066696c6c3d2223626634222f3e3c673e3c7061746820643d224d302d33305630762d33307a222069643d2261222f3e3c616e696d6174654d6f74696f6e206475723d2238732220726570656174436f756e743d22696e646566696e69746522206b6579506f696e74733d22303b2e35303b313b2e35303b3022206b657954696d65733d22303b2e32353b2e35303b2e37353b3122206b657953706c696e65733d22302e35203020302e3520313b20302e35203020302e3520313b20302e35203020302e3520313b20302e35203020302e352031222063616c634d6f64653d2273706c696e65223e3c6d7061746820687265663d222361222f3e3c2f616e696d6174654d6f74696f6e3e3c672066696c6c3d2223303833223e3c7061746820643d226d333530203232352034322031342031302d32302d31312d31382d34352d382d31332031342d372032382032302d313120322d3920322031307a6d39342d3935203320363020333020332031372d32342d31322d35392d32352d31302d333820352032332031392031342d312d313220377a222f3e3c7061746820643d226d3439352032313120382033352031382d3120382d31362d31342d33342d31352d332d32322037203136203920372d322d3620357a6d2d3130302032302d32312031392033362d342033322d33372d32302d33332d32392d31322d3332203132203230203137203520313663342039203920323220392032327a222f3e3c7061746820643d226d353232203137382d31332032302d32372d382d372d32362031392d343720323920312032332032312d323320382d3720323120362031307a6d33312037312d31372032322d33302d31312d362d33312032362d353320333320332032362032372d323820372d313120323420372031327a222f3e3c7061746820643d226d353530203134372033322032392d32392d322d332d31322d312031332d323620372d382d313320352031352d31372032302d372d332031332d34332034312d31317a6d31312036382034382032392d333320342d392d313520352031372d32372031332d31342d31342031312031372d31302032392d392d322d332d35362034312d32327a6d2d3230312031362d33322034342033362d3130762d31376c34203137203334203220372d31382d3220323020323620323220382d362d32372d35312d35342d337a6d34342d3131332d353720333220343120372031302d31382d352032302033322031372031372d31352d31342031392031342033352031312d3220322d36372d35312d32387a6d37352039312d3332203134203233203720362d31302d3320313120313920313220392d382d37203130203820323120362d3120312d33372d33302d31397a222f3e3c2f673e3c6720636c6173733d22422044223e3c7061746820643d224d3336352032313463343320352038332d32322039342d363520312d3420322d3720332d31312031312031352031352033342031302035332d382033332d34322035332d37342034342d31342d332d32352d31312d33332d32317a222f3e3c7061746820643d224d333738203235346334392d382038362d35322038352d31303320302d352d312d392d312d313320313720313320323820333320323820353620312033392d33302037322d36392037332d313620302d33312d352d34332d31337a222f3e3c2f673e3c7061746820643d224d343732203231376331312d32362d322d35382d31302d373520362032332d372035362d31392037312d3820392d31362032362d36302033392034312031312037362d362038392d33357a6d2d32372d313863372d392031352d32382031352d35332d362033302d32312034322d33332035322d3920352d32302031352d363120313620333520313220363520322037392d31357a222066696c6c3d2223666632222f3e3c6720636c6173733d2244223e3c7061746820643d224d343531203238306333382d33322034362d38392031382d3133322d322d332d342d362d372d313020323120322034312031332035332033322032322033332031332037372d32302039392d313420392d32392031322d34342031317a2220636c6173733d2242222f3e3c7061746820643d224d343539203236306332382d32332033342d36392031322d3130392d322d352d352d392d372d3132203139203420333720323020343520343320313220333320312036382d32352037372d3820332d313720332d323520317a222066696c6c3d2223666632222f3e3c2f673e3c7061746820643d226d353836203137372031342d312d31322038362d31342d322031322d38337a222066696c6c3d2223623830222f3e3c672066696c6c3d2223306133223e3c7061746820643d226d353730203137352033302d332d34342033372031342d33347a222f3e3c7061746820643d226d363137203137352d32392d332033332033372d342d33347a222f3e3c7061746820643d226d3538372031353420392032312d35322d372034332d31347a222f3e3c7061746820643d226d363034203135342d31352032312035332d382d33382d31337a222f3e3c2f673e3c706174682066696c6c3d22236238302220643d226d333336203230332d31312e3620332e3037312032372e30312036392e3936382031312e362d332e3037317a222f3e3c672066696c6c3d2223306133223e3c7061746820643d226d333439203139392d323520342034342032322d31392d32367a222f3e3c7061746820643d226d333130203230392032342d392d32302033392d342d33307a222f3e3c7061746820643d226d333331203138342d332032312034312d31392d33382d327a222f3e3c7061746820643d226d333137203138382031372031352d343620352032392d32307a222f3e3c2f673e3c7061746820643d224d3536362e3139203234342e3438682d32372e34387631302e39396832372e3438762d31302e39397a2220636c6173733d2243222f3e3c6720636c6173733d2242223e3c75736520786c696e6b3a687265663d222342222f3e3c75736520786c696e6b3a687265663d2223422220783d2231302e3939222f3e3c2f673e3c75736520786c696e6b3a687265663d2223432220636c6173733d2243222f3e3c7061746820643d224d3533382e3733203233322e333261312e383920312e383920302031203020302d332e373920312e383920312e3839203020312030203020332e37397a2220636c6173733d2242222f3e3c75736520786c696e6b3a687265663d2223432220783d2232372e34382220636c6173733d2243222f3e3c7061746820643d224d3536362e3137203233322e333261312e38393520312e38393520302030203020302d332e373920312e383920312e3839203020312030203020332e37397a2220636c6173733d2242222f3e3c7061746820643d224d3535322e3435203234342e34386131332e37342031332e373420302030203020302d32372e34382031332e37342031332e373420302031203020302032372e34387a2220636c6173733d2243222f3e3c7061746820643d224d3535322e3435203234312e37386131302e38382031302e383820302031203020302d32312e37362031302e38382031302e383820302031203020302032312e37367a2220636c6173733d2242222f3e3c6720636c6173733d2243223e3c75736520786c696e6b3a687265663d222344222f3e3c75736520786c696e6b3a687265663d2223442220783d22392e3436222f3e3c2f673e3c7061746820643d224d3534372e3332203232382e363861312e39363520312e3936352030203120302d312e39372d312e393720312e393720312e393720302030203020312e393720312e39377a6d392e33392d2e313461312e38393520312e3839352030203120302d312e392d312e3920312e3920312e3920302030203020312e3920312e397a2220636c6173733d2242222f3e3c75736520786c696e6b3a687265663d222345222f3e3c75736520786c696e6b3a687265663d2223452220783d22392e3436222f3e3c7061746820643d224d3536302e3439203232332e38682d31362e303876322e38346831362e3038762d322e38347a2220636c6173733d2242222f3e3c7061746820643d224d3535322e3435203233392e373763342e3132203020372e34362d312e343120372e34362d332e313420302d312e37342d332e33342d332e31342d372e34362d332e3134732d372e343620312e342d372e343620332e3134633020312e373320332e333420332e313420372e343620332e31347a2220636c6173733d2243222f3e3c672066696c6c3d2223636161303030223e3c75736520786c696e6b3a687265663d222346222f3e3c75736520786c696e6b3a687265663d2223462220783d222d332e3134222f3e3c2f673e3c7061746820643d224d3535372e3635203233372e3035682d31302e34762e39356831302e34762d2e39357a2220636c6173733d2242222f3e3c6720636c6173733d2243223e3c7061746820643d226d33323220323930203237362e3934322d32342e32323920392e393336203131332e3536362d3237362e3934322032342e3232397a222f3e3c656c6c697073652063783d22343630222063793d22323738222072783d22313339222072793d22323122207472616e73666f726d3d22726f7461746528333535203436302032373829222f3e3c2f673e3c6720636c6173733d2242223e3c656c6c697073652063783d22343638222063793d22333636222072783d22313339222072793d22323122207472616e73666f726d3d22726f7461746528333535203436382033363629222f3e3c7061746820643d226d33333020333738203237362e3934322d32342e32323920342e3739342035342e3739312d3237362e3934322032342e3232397a222f3e3c636972636c652063783d22323337222063793d2237343322207472616e73666f726d3d22726f74617465283335352032333720373433292220723d223733222f3e3c636972636c652063783d22373633222063793d2236393622207472616e73666f726d3d22726f74617465283137352037363320363936292220723d223733222f3e3c2f673e3c672066696c6c3d2223646130223e3c636972636c65207472616e73666f726d3d227363616c652831202d312920726f7461746528352e30363420383531392e34323720323330382e323035292220723d223239222f3e3c636972636c65207472616e73666f726d3d226d6174726978282d2e39393631202e3038383237202e3038383237202e393936312037363320363936292220723d223239222f3e3c2f673e3c7061746820643d226d3232382e343831203634302e373537203532352e3939312d34362e3031382031362e393038203139332e3236322d3532352e3939312034362e3031387a2220636c6173733d2243222f3e3c7061746820643d224d32303220363739632d32342031332d33392034302d333720373020332032392032332035332034392036326c2d31322d3133327a6d3539372038306332352d31342034302d34302033382d37302d332d32392d32322d35332d34392d36336c3131203133337a222066696c6c3d22236666322220636c6173733d2244222f3e3c6720636c6173733d2243223e3c7061746820643d226d32373520343438203339392e3437342d33342e3934392031342e323036203136322e33382d3339392e3437342033342e3934397a222f3e3c656c6c697073652063783d22343735222063793d22343330222072783d22323030222072793d22333122207472616e73666f726d3d22726f7461746528333535203437352034333029222f3e3c2f673e3c6720636c6173733d2242223e3c656c6c697073652063783d22343834222063793d22353430222072783d22323030222072793d22323922207472616e73666f726d3d22726f7461746528333535203438342035343029222f3e3c7061746820643d226d32383520353539203339392e3437342d33342e39343920352e3035352035372e3737392d3339392e3437342033342e3934397a222f3e3c2f673e3c656c6c697073652063783d22343931222063793d22363136222072783d22323634222072793d22343122207472616e73666f726d3d22726f74617465283335352034393120363136292220636c6173733d2243222f3e3c6720636c6173733d2242223e3c656c6c697073652063783d22353033222063793d22373435222072783d22323634222072793d22343322207472616e73666f726d3d22726f7461746528333535203530332037343529222f3e3c7061746820643d226d32343020373731203532352e3939312d34362e30313820352e3331372036302e3736382d3532352e3939312034362e3031387a222f3e3c2f673e3c656c6c697073652063783d22353039222063793d22383131222072783d22323634222072793d22343122207472616e73666f726d3d22726f7461746528333535203530392038313129222066696c6c3d2223646130222f3e3c7061746820643d226d343334203133342031382d31392031352032342d3720372d32362d31327a2220636c6173733d2242222f3e3c7061746820643d226d323333203638392033322d37366d2d33322037362033322d37366d3133203132392037312d3134386d2d3731203134382037312d3134386d3139203132362036362d3133396d2d3636203133392036362d3133396d3234203132362036342d3133356d2d3634203133352036342d3133356d3332203132372035392d3133306d2d3539203133302035392d3133306d3331203132382036302d3132336d2d3630203132332036302d3132336d3234203133302032392d36356d2d32392036352032392d36356d342e3631362034342e33322d39342e3739372d3131332e3635356d39342e373937203131332e3635352d39342e3739372d3131332e3635354d3638382037303020353737203537306d313131203133304c353737203537306d3138203132384c343838203537366d313037203132324c343838203537366d3131203132364c333935203538366d313034203131364c333935203538366d3134203132384c333037203630316d313032203131334c333037203630316d3132203133302d38382d39386d38382039382d38382d393822207374726f6b653d2223646130222f3e3c6720636c6173733d2242223e3c636972636c652063783d22333834222063793d223638352220723d2236222f3e3c636972636c652063783d22343139222063793d223631332220723d2236222f3e3c636972636c652063783d22353130222063793d223630312220723d2236222f3e3c636972636c652063783d22363031222063793d223539382220723d2236222f3e3c636972636c652063783d22363932222063793d223630312220723d2236222f3e3c636972636c652063783d22343734222063793d223637332220723d2236222f3e3c636972636c652063783d22353638222063793d223636362220723d2236222f3e3c636972636c652063783d22363630222063793d223636342220723d2236222f3e3c636972636c652063783d22373436222063793d223636362220723d2236222f3e3c636972636c652063783d22323937222063793d223730352220723d2236222f3e3c636972636c652063783d22333333222063793d223632392220723d2236222f3e3c636972636c652063783d22323438222063793d223635342220723d2236222f3e3c2f673e3c7061746820643d226d333237203334382033362d37376d2d33362037372033362d37376d33342038322034312d39346d2d34312039342034312d39346d34392038332033332d38386d2d33332038382033332d38386d34382038382032382d37396d2d32382037392032382d37396d2d3231392039352d35362d37306d35362037302d35362d37306d3133332e3539352035382e3239342d35392e3332332d38312e3734326d35392e3332332038312e3734322d35392e3332332d38312e3734324d353336203334316c2d35362d38366d35362038362d35362d38366d3132342037352d35302d37366d35302037362d35302d373622207374726f6b653d2223646130222f3e3c6720636c6173733d2242223e3c636972636c652063783d22333433222063793d223331342220723d2236222f3e3c636972636c652063783d22343231222063793d223330302220723d2236222f3e3c636972636c652063783d22353035222063793d223239332220723d2236222f3e3c636972636c652063783d22353834222063793d223239382220723d2236222f3e3c2f673e3c7061746820643d226d333336203533332035312d382031302036372d353320372d382d36367a6d2d3331203230302035312d313020392036352d35322031312d382d36367a6d37352d3337372035312d3820382035362d353320372d362d35357a222066696c6c2d6f7061636974793d222e332220636c6173733d2243222f3e3c7061746820643d226d343831203730352034352d3520382036372d343720342d362d36367a222066696c6c3d2223666632222f3e3c7061746820643d226d343837203736342034362d34203120372d34372034762d377a222066696c6c3d2223646130222f3e3c6720636c6173733d2242223e3c7061746820643d226d363234203637372d343820322031302035372034392d322d31312d35377a222f3e3c656c6c697073652063783d22353936222063793d22363834222072783d223239222072793d22313422207472616e73666f726d3d22726f7461746528333532203539362036383429222f3e3c2f673e3c672066696c6c3d2223646130223e3c656c6c697073652063783d22363038222063793d22373430222072783d223238222072793d22313022207472616e73666f726d3d22726f7461746528333435203630382037343029222f3e3c7061746820643d226d363035203735322d37392031342036302d32382031392031347a222f3e3c2f673e3c6720636c6173733d2242223e3c7061746820643d226d353736203637362d343920323420372036322035332d32362d31312d36307a6d2d3139332032382034302d313120332036312d343020392d332d35397a222f3e3c656c6c697073652072783d223238222072793d22313122207472616e73666f726d3d226d6174726978282d2e3939343632202e31303336202e3130373033202e3939343236203431322037303229222f3e3c2f673e3c672066696c6c3d2223646130223e3c656c6c697073652072783d223238222072793d22313022207472616e73666f726d3d226d6174726978282d2e3939393837202d2e3031363032202d2e30303432202e3939393939203431342037363329222f3e3c7061746820643d226d343230203737332038332d362d37392d31342d342032307a222f3e3c2f673e3c7061746820643d226d3432332036393120353920313420362036302d36332d31322d322d36327a2220636c6173733d2242222f3e3c673e3c616e696d617465206174747269627574654e616d653d226f706163697479222076616c7565733d22303b313b3022206475723d2231732220726570656174436f756e743d22696e646566696e697465222f3e3c6720636c6173733d2243223e3c7061746820643d224d34333620313337633420302031332031332031332031332d332d352d382d31332d382d313720312d3320342d3720362d38203020302d3620342d3920332d342d312d31332d31332d31332d31332033203420382031342037203137203020332d3520372d3720392030203020372d352031312d347a4d32383320353631633720312032332032332032332032332d362d392d31352d32332d31342d323973372d31322031302d3134633020302d313120362d313720352d352d322d32312d32332d32312d3233203520382031342032352031332033302d3220352d392031322d3133203135203020302031322d372031392d377a6d313520323437633720312032332032332032332032332d362d382d31352d32332d31342d323973372d31332031302d3134633020302d313120362d313620352d362d322d32322d32332d32322d3233203520372031342032352031332033302d3220352d392031322d3133203135203020302031322d372031392d377a6d3439332d313735633520302031362031362031362031362d342d362d31302d31372d31302d323120312d3420352d3920372d3130203020302d3720352d31312034732d31362d31372d31362d31376334203620313020313820392032312d3120342d3620392d392031322030203020392d362031342d357a222f3e3c75736520786c696e6b3a687265663d222341222f3e3c2f673e3c2f673e3c673e3c616e696d617465206174747269627574654e616d653d226f706163697479222076616c7565733d22313b303b3122206475723d2231732220726570656174436f756e743d22696e646566696e697465222f3e3c6720636c6173733d2243223e3c7061746820643d224d36303520373332633520312031382031382031382031382d352d372d31312d31382d31312d323220312d3520362d313020382d3131203020302d3920342d31332033732d31372d31372d31372d3137633420362031312031392031302032332d3120332d3720392d3130203132203020302031302d362031352d367a6d38302d323034633520302031372031382031372031382d342d372d31312d31382d31302d323320302d3420352d313020372d3131203020302d3820352d313220342d352d312d31372d31372d31372d3137203420352031312031382031302032322d3220342d372031302d31302031322030203020392d362031352d357a4d31363720373239633620302032302032302032302032302d362d382d31332d32312d31332d323620312d3420372d313020392d3132203020302d3920362d313420342d352d312d31392d31392d31392d3139203520362031332032312031312032352d3120352d372031312d3131203134203020302031312d372031372d367a222f3e3c75736520786c696e6b3a687265663d2223412220783d222d3232342220793d222d313335222f3e3c7061746820643d224d35303220313830633820302032362032352032362032352d372d31302d31372d32362d31362d333220312d3720382d31342031312d3136203020302d313220372d313820352d372d312d32352d32352d32352d3235203720382031372032372031352033332d3220352d31302031332d3135203137203020302031342d382032322d377a222f3e3c2f673e3c2f673e3c2f673e3c656c6c697073652063783d22343939222063793d22393232222072783d22323135222072793d223234222066696c6c3d2223306134223e3c616e696d6174652076616c7565733d223233303b3235303b32333022206b657954696d65733d22303b2e35303b3122206475723d22347322206174747269627574654e616d653d227278222066696c6c3d22667265657a6522206b657953706c696e65733d22302e35203020302e3520313b20302e35203020302e352031222063616c634d6f64653d2273706c696e652220726570656174436f756e743d22696e646566696e697465222f3e3c2f656c6c697073653e3c646566733e3c706174682069643d22412220643d224d36303520333538633520302031372031372031372031372d342d372d31312d31382d31302d323220302d3420352d313020372d3131203020302d3820352d313220342d352d312d31372d31372d31372d313720342035203131203138203130203232732d3720392d31302031326330203020392d362031352d357a222f3e3c706174682069643d22422220643d224d3534372e3036203235302e3831632e32382030202e352d2e32322e352d2e35612e352e352030203020302d2e352d2e352e35312e35312030203020302d2e352e352e352e35203020302030202e352e357a222f3e3c706174682069643d22432220643d224d3533382e3731203233352e303663322e36203020342e37312d322e313120342e37312d342e373120302d322e36312d322e31312d342e37312d342e37312d342e3731732d342e373120322e312d342e373120342e3731633020322e3620322e313120342e373120342e373120342e37317a222f3e3c706174682069643d22442220643d224d3534372e3732203233302e343363312e3833203020332e33312d312e323720332e33312d322e3834732d312e34382d322e38342d332e33312d322e38342d332e333120312e32372d332e333120322e383420312e343820322e383420332e333120322e38347a222f3e3c706174682069643d22452220643d224d3534372e3235203232372e3539612e39342e393420302031203020302d312e38392e39342e39342030203020302d2e39352e39346330202e35332e34322e39352e39352e39357a222f3e3c706174682069643d22462220643d224d3535342e3032203233352e3036632e32322030202e33392d2e31382e33392d2e34612e33392e33392030203020302d2e373820306330202e32322e31372e342e33392e347a222f3e3c2f646566733e3c2f7376673e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101155760003560e01c8063707599a2116100a2578063bee0e2fd11610071578063bee0e2fd1461025b578063d39d71ef1461026e578063e985e9c514610281578063f242432a146102bd578063f2fde38b146102d057600080fd5b8063707599a21461021c578063715018a61461022f5780638da5cb5b14610237578063a22cb4651461024857600080fd5b8063265c2b5a116100e9578063265c2b5a146101985780632eb2c2d6146101ab5780633078f6fd146101be57806336c7c12c146101d15780634e1273f4146101fc57600080fd5b8062fdd58e1461011a57806301ffc9a7146101405780630e89341c1461016357806314ab563314610183575b600080fd5b61012d610128366004611a77565b6102e3565b6040519081526020015b60405180910390f35b61015361014e366004611c32565b61037a565b6040519015158152602001610137565b610176610171366004611c6c565b6103cc565b6040516101379190611ec8565b6101966101913660046118d7565b61066c565b005b6101966101a6366004611b15565b6106b8565b6101966101b936600461192c565b6107d2565b6101966101cc366004611c85565b610869565b6008546101e4906001600160a01b031681565b6040516001600160a01b039091168152602001610137565b61020f61020a366004611b61565b6108bc565b6040516101379190611e87565b61019661022a3660046118d7565b6109e6565b610196610a32565b6003546001600160a01b03166101e4565b610196610256366004611a3b565b610a68565b610196610269366004611aa1565b610a73565b6007546101e4906001600160a01b031681565b61015361028f3660046118f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101966102cb3660046119d6565b610bd3565b6101966102de3660046118d7565b610c5a565b60006001600160a01b0383166103545760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806103ab57506001600160e01b031982166303a24d0760e21b145b806103c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000821180156103de5750600482105b6103fa5760405162461bcd60e51b815260040161034b90611f68565b60608083600114156104b35760048054610413906120b6565b80601f016020809104026020016040519081016040528092919081815260200182805461043f906120b6565b801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b505050505091506040518060800160405280604f8152602001612238604f91399050610612565b836002141561056957600580546104c9906120b6565b80601f01602080910402602001604051908101604052809291908181526020018280546104f5906120b6565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b505050505091506040518060800160405280604981526020016122d2604991399050610612565b60068054610576906120b6565b80601f01602080910402602001604051908101604052809291908181526020018280546105a2906120b6565b80156105ef5780601f106105c4576101008083540402835291602001916105ef565b820191906000526020600020905b8154815290600101906020018083116105d257829003601f168201915b505050505091506040518060800160405280604b8152602001612287604b913990505b6106448161061f84610cf5565b604051602001610630929190611d0f565b604051602081830303815290604052610cf5565b6040516020016106549190611d9f565b60405160208183030381529060405292505050919050565b6003546001600160a01b031633146106965760405162461bcd60e51b815260040161034b90611fd4565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146106e25760405162461bcd60e51b815260040161034b90611fd4565b6000811180156106f25750600481105b61070e5760405162461bcd60e51b815260040161034b90611f68565b6009546127119061072090849061202d565b106107535760405162461bcd60e51b815260206004820152600360248201526231306b60e81b604482015260640161034b565b60005b828110156107b2576107a08484838181106107735761077361214f565b905060200201602081019061078891906118d7565b83600160405180602001604052806000815250610e5b565b806107aa8161211e565b915050610756565b5082829050600960008282546107c8919061202d565b9091555050505050565b6001600160a01b0385163314806107ee57506107ee853361028f565b6108555760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161034b565b6108628585858585610f65565b5050505050565b6007546001600160a01b031633146108ac5760405162461bcd60e51b815260206004820152600660248201526530b21032b93960d11b604482015260640161034b565b6108b88183600161113a565b5050565b606081518351146109215760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161034b565b6000835167ffffffffffffffff81111561093d5761093d612165565b604051908082528060200260200182016040528015610966578160200160208202803683370190505b50905060005b84518110156109de576109b185828151811061098a5761098a61214f565b60200260200101518583815181106109a4576109a461214f565b60200260200101516102e3565b8282815181106109c3576109c361214f565b60209081029190910101526109d78161211e565b905061096c565b509392505050565b6003546001600160a01b03163314610a105760405162461bcd60e51b815260040161034b90611fd4565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314610a5c5760405162461bcd60e51b815260040161034b90611fd4565b610a6660006112b4565b565b6108b8338383611306565b6003546001600160a01b03163314610a9d5760405162461bcd60e51b815260040161034b90611fd4565b600081118015610aad5750600481105b610ac95760405162461bcd60e51b815260040161034b90611f68565b60005b84811015610bcb57612711848483818110610ae957610ae961214f565b90506020020135600954610afd919061202d565b10610b305760405162461bcd60e51b815260206004820152600360248201526231306b60e81b604482015260640161034b565b610b89868683818110610b4557610b4561214f565b9050602002016020810190610b5a91906118d7565b83868685818110610b6d57610b6d61214f565b9050602002013560405180602001604052806000815250610e5b565b838382818110610b9b57610b9b61214f565b9050602002013560096000828254610bb3919061202d565b90915550819050610bc38161211e565b915050610acc565b505050505050565b6001600160a01b038516331480610bef5750610bef853361028f565b610c4d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161034b565b61086285858585856113e7565b6003546001600160a01b03163314610c845760405162461bcd60e51b815260040161034b90611fd4565b6001600160a01b038116610ce95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161034b565b610cf2816112b4565b50565b805160609080610d15575050604080516020810190915260008152919050565b60006003610d2483600261202d565b610d2e9190612045565b610d39906004612067565b90506000610d4882602061202d565b67ffffffffffffffff811115610d6057610d60612165565b6040519080825280601f01601f191660200182016040528015610d8a576020820181803683370190505b509050600060405180606001604052806040815260200161231b604091399050600181016020830160005b86811015610e16576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101610db5565b506003860660018114610e305760028114610e4157610e4d565b613d3d60f01b600119830152610e4d565b603d60f81b6000198301525b505050918152949350505050565b6001600160a01b038416610ebb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161034b565b33610ed581600087610ecc88611504565b61086288611504565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610f0590849061202d565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108628160008787878761154f565b8151835114610fc75760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161034b565b6001600160a01b038416610fed5760405162461bcd60e51b815260040161034b90611f23565b3360005b84518110156110d457600085828151811061100e5761100e61214f565b60200260200101519050600085838151811061102c5761102c61214f565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561107c5760405162461bcd60e51b815260040161034b90611f8a565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110b990849061202d565b92505081905550505050806110cd9061211e565b9050610ff1565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611124929190611e9a565b60405180910390a4610bcb8187878787876116ba565b6001600160a01b03831661119c5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b606482015260840161034b565b336111cc818560006111ad87611504565b6111b687611504565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156112495760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b606482015260840161034b565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561137a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161034b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661140d5760405162461bcd60e51b815260040161034b90611f23565b3361141d818787610ecc88611504565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561145e5760405162461bcd60e51b815260040161034b90611f8a565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061149b90849061202d565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46114fb82888888888861154f565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061153e5761153e61214f565b602090810291909101015292915050565b6001600160a01b0384163b15610bcb5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906115939089908990889088908890600401611e42565b602060405180830381600087803b1580156115ad57600080fd5b505af19250505080156115dd575060408051601f3d908101601f191682019092526115da91810190611c4f565b60015b61168a576115e961217b565b806308c379a0141561162357506115fe612197565b806116095750611625565b8060405162461bcd60e51b815260040161034b9190611ec8565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161034b565b6001600160e01b0319811663f23a6e6160e01b146114fb5760405162461bcd60e51b815260040161034b90611edb565b6001600160a01b0384163b15610bcb5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906116fe9089908990889088908890600401611de4565b602060405180830381600087803b15801561171857600080fd5b505af1925050508015611748575060408051601f3d908101601f1916820190925261174591810190611c4f565b60015b611754576115e961217b565b6001600160e01b0319811663bc197c8160e01b146114fb5760405162461bcd60e51b815260040161034b90611edb565b80356001600160a01b038116811461179b57600080fd5b919050565b60008083601f8401126117b257600080fd5b50813567ffffffffffffffff8111156117ca57600080fd5b6020830191508360208260051b85010111156117e557600080fd5b9250929050565b600082601f8301126117fd57600080fd5b8135602061180a82612009565b60405161181782826120f1565b8381528281019150858301600585901b8701840188101561183757600080fd5b60005b858110156118565781358452928401929084019060010161183a565b5090979650505050505050565b600082601f83011261187457600080fd5b813567ffffffffffffffff81111561188e5761188e612165565b6040516118a5601f8301601f1916602001826120f1565b8181528460208386010111156118ba57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156118e957600080fd5b6118f282611784565b9392505050565b6000806040838503121561190c57600080fd5b61191583611784565b915061192360208401611784565b90509250929050565b600080600080600060a0868803121561194457600080fd5b61194d86611784565b945061195b60208701611784565b9350604086013567ffffffffffffffff8082111561197857600080fd5b61198489838a016117ec565b9450606088013591508082111561199a57600080fd5b6119a689838a016117ec565b935060808801359150808211156119bc57600080fd5b506119c988828901611863565b9150509295509295909350565b600080600080600060a086880312156119ee57600080fd5b6119f786611784565b9450611a0560208701611784565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a2f57600080fd5b6119c988828901611863565b60008060408385031215611a4e57600080fd5b611a5783611784565b915060208301358015158114611a6c57600080fd5b809150509250929050565b60008060408385031215611a8a57600080fd5b611a9383611784565b946020939093013593505050565b600080600080600060608688031215611ab957600080fd5b853567ffffffffffffffff80821115611ad157600080fd5b611add89838a016117a0565b90975095506020880135915080821115611af657600080fd5b50611b03888289016117a0565b96999598509660400135949350505050565b600080600060408486031215611b2a57600080fd5b833567ffffffffffffffff811115611b4157600080fd5b611b4d868287016117a0565b909790965060209590950135949350505050565b60008060408385031215611b7457600080fd5b823567ffffffffffffffff80821115611b8c57600080fd5b818501915085601f830112611ba057600080fd5b81356020611bad82612009565b604051611bba82826120f1565b8381528281019150858301600585901b870184018b1015611bda57600080fd5b600096505b84871015611c0457611bf081611784565b835260019690960195918301918301611bdf565b5096505086013592505080821115611c1b57600080fd5b50611c28858286016117ec565b9150509250929050565b600060208284031215611c4457600080fd5b81356118f281612221565b600060208284031215611c6157600080fd5b81516118f281612221565b600060208284031215611c7e57600080fd5b5035919050565b60008060408385031215611c9857600080fd5b8235915061192360208401611784565b600081518084526020808501945080840160005b83811015611cd857815187529582019590820190600101611cbc565b509495945050505050565b60008151808452611cfb816020860160208601612086565b601f01601f19169290920160200192915050565b6a1ec89b985b59488e88089160aa1b81528251600090611d3681600b850160208801612086565b7f227d5d2c22696d616765223a2022646174613a696d6167652f7376672b786d6c600b91840191820152670ed8985cd94d8d0b60c21b602b8201528351611d84816033840160208801612086565b61227d60f01b60339290910191820152603501949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611dd781601d850160208701612086565b91909101601d0192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611e1090830186611ca8565b8281036060840152611e228186611ca8565b90508281036080840152611e368185611ce3565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611e7c90830184611ce3565b979650505050505050565b6020815260006118f26020830184611ca8565b604081526000611ead6040830185611ca8565b8281036020840152611ebf8185611ca8565b95945050505050565b6020815260006118f26020830184611ce3565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600890820152673a3cb8329032b93960c11b604082015260600190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff82111561202357612023612165565b5060051b60200190565b6000821982111561204057612040612139565b500190565b60008261206257634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561208157612081612139565b500290565b60005b838110156120a1578181015183820152602001612089565b838111156120b0576000848401525b50505050565b600181811c908216806120ca57607f821691505b602082108114156120eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561211757612117612165565b6040525050565b600060001982141561213257612132612139565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156121945760046000803e5060005160e01c5b90565b600060443d10156121a55790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156121d557505050505090565b82850191508151818111156121ed5750505050505090565b843d87010160208285010111156122075750505050505090565b612216602082860101876120f1565b509095945050505050565b6001600160e01b031981168114610cf257600080fdfe3120496e6372656469626c652049636520506f70222c2261747472696275746573223a5b7b2274726169745f74797065223a2022446573736572742054797065222c202276616c7565223a20224431332043656c65737469616c2043616b65222c2261747472696275746573223a5b7b2274726169745f74797065223a2022446573736572742054797065222c202276616c7565223a202244333220446976696e6520446f6e7574222c2261747472696275746573223a5b7b2274726169745f74797065223a2022446573736572742054797065222c202276616c7565223a202244324142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212203ff9d3bb0c53b458bf1f6b5ded3812c2859a0c8bf159f7eccb031951abfcdeb364736f6c63430008060033

Deployed Bytecode Sourcemap

6669:18951:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2115:228:2;;;;;;:::i;:::-;;:::i;:::-;;;20225:25:10;;;20213:2;20198:18;2115:228:2;;;;;;;;1166:305;;;;;;:::i;:::-;;:::i;:::-;;;12731:14:10;;12724:22;12706:41;;12694:2;12679:18;1166:305:2;12661:92:10;24738:880:8;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24236:139::-;;;;;;:::i;:::-;;:::i;:::-;;23899:327;;;;;;:::i;:::-;;:::i;3990:430:2:-;;;;;;:::i;:::-;;:::i;24542:190:8:-;;;;;;:::i;:::-;;:::i;22974:33::-;;;;;-1:-1:-1;;;;;22974:33:8;;;;;;-1:-1:-1;;;;;10390:32:10;;;10372:51;;10360:2;10345:18;22974:33:8;10327:102:10;2500:508:2;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24381:155:8:-;;;;;;:::i;:::-;;:::i;1661:101:9:-;;;:::i;1029:85::-;1101:6;;-1:-1:-1;;;;;1101:6:9;1029:85;;3076:153:2;;;;;;:::i;:::-;;:::i;23415:371:8:-;;;;;;:::i;:::-;;:::i;22907:29::-;;;;;-1:-1:-1;;;;;22907:29:8;;;3296:166:2;;;;;;:::i;:::-;-1:-1:-1;;;;;3418:27:2;;;3395:4;3418:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3296:166;3529:389;;;;;;:::i;:::-;;:::i;1911:198:9:-;;;;;;:::i;:::-;;:::i;2115:228:2:-;2201:7;-1:-1:-1;;;;;2228:21:2;;2220:77;;;;-1:-1:-1;;;2220:77:2;;14014:2:10;2220:77:2;;;13996:21:10;14053:2;14033:18;;;14026:30;14092:34;14072:18;;;14065:62;-1:-1:-1;;;14143:18:10;;;14136:41;14194:19;;2220:77:2;;;;;;;;;-1:-1:-1;2314:9:2;:13;;;;;;;;;;;-1:-1:-1;;;;;2314:22:2;;;;;;;;;;;;2115:228::o;1166:305::-;1268:4;-1:-1:-1;;;;;;1303:41:2;;-1:-1:-1;;;1303:41:2;;:109;;-1:-1:-1;;;;;;;1360:52:2;;-1:-1:-1;;;1360:52:2;1303:109;:161;;;-1:-1:-1;;;;;;;;;;937:40:3;;;1428:36:2;1284:180;1166:305;-1:-1:-1;;1166:305:2:o;24738:880:8:-;24797:13;24837:1;24830:6;:8;:20;;;;;24849:1;24842:6;:8;24830:20;24822:41;;;;-1:-1:-1;;;24822:41:8;;;;;;;:::i;:::-;24873:16;24899:17;24930:6;24940:1;24930:11;24926:465;;;24969:4;24957:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24988:87;;;;;;;;;;;;;;;;;;;24926:465;;;25096:6;25106:1;25096:11;25092:299;;;25135:4;25123:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25154:81;;;;;;;;;;;;;;;;;;;25092:299;;;25278:4;25266:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25297:83;;;;;;;;;;;;;;;;;;;25092:299;25464:145;25523:3;25584:18;25598:3;25584:13;:18::i;:::-;25478:130;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25464:13;:145::i;:::-;25414:196;;;;;;;;:::i;:::-;;;;;;;;;;;;;25400:211;;;;24738:880;;;:::o;24236:139::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;24330:14:8::1;:38:::0;;-1:-1:-1;;;;;;24330:38:8::1;-1:-1:-1::0;;;;;24330:38:8;;;::::1;::::0;;;::::1;::::0;;24236:139::o;23899:327::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;24003:1:8::1;23996:6;:8;:20;;;;;24015:1;24008:6;:8;23996:20;23988:41;;;;-1:-1:-1::0;;;23988:41:8::1;;;;;;;:::i;:::-;24047:12;::::0;24073:5:::1;::::0;24047:23:::1;::::0;24060:3;;24047:23:::1;:::i;:::-;:31;24039:47;;;::::0;-1:-1:-1;;;24039:47:8;;17985:2:10;24039:47:8::1;::::0;::::1;17967:21:10::0;18024:1;18004:18;;;17997:29;-1:-1:-1;;;18042:18:10;;;18035:33;18085:18;;24039:47:8::1;17957:152:10::0;24039:47:8::1;24101:9;24096:88;24114:12:::0;;::::1;24096:88;;;24145:28;24151:3;;24155:1;24151:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;24159;24167:1;24145:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;24128:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24096:88;;;;24209:3;;:10;;24193:12;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;23899:327:8:o;3990:430:2:-;-1:-1:-1;;;;;4215:20:2;;719:10:1;4215:20:2;;:60;;-1:-1:-1;4239:36:2;4256:4;719:10:1;3296:166:2;:::i;4239:36::-;4194:157;;;;-1:-1:-1;;;4194:157:2;;16390:2:10;4194:157:2;;;16372:21:10;16429:2;16409:18;;;16402:30;16468:34;16448:18;;;16441:62;-1:-1:-1;;;16519:18:10;;;16512:48;16577:19;;4194:157:2;16362:240:10;4194:157:2;4361:52;4384:4;4390:2;4394:3;4399:7;4408:4;4361:22;:52::i;:::-;3990:430;;;;;:::o;24542:190:8:-;24656:14;;-1:-1:-1;;;;;24656:14:8;24642:10;:28;24634:47;;;;-1:-1:-1;;;24634:47:8;;19136:2:10;24634:47:8;;;19118:21:10;19175:1;19155:18;;;19148:29;-1:-1:-1;;;19193:18:10;;;19186:36;19239:18;;24634:47:8;19108:155:10;24634:47:8;24691:34;24697:16;24715:6;24723:1;24691:5;:34::i;:::-;24542:190;;:::o;2500:508:2:-;2651:16;2710:3;:10;2691:8;:15;:29;2683:83;;;;-1:-1:-1;;;2683:83:2;;18726:2:10;2683:83:2;;;18708:21:10;18765:2;18745:18;;;18738:30;18804:34;18784:18;;;18777:62;-1:-1:-1;;;18855:18:10;;;18848:39;18904:19;;2683:83:2;18698:231:10;2683:83:2;2777:30;2824:8;:15;2810:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2810:30:2;;2777:63;;2856:9;2851:120;2875:8;:15;2871:1;:19;2851:120;;;2930:30;2940:8;2949:1;2940:11;;;;;;;;:::i;:::-;;;;;;;2953:3;2957:1;2953:6;;;;;;;;:::i;:::-;;;;;;;2930:9;:30::i;:::-;2911:13;2925:1;2911:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;2892:3;;;:::i;:::-;;;2851:120;;;-1:-1:-1;2988:13:2;2500:508;-1:-1:-1;;;2500:508:2:o;24381:155:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;24483:18:8::1;:46:::0;;-1:-1:-1;;;;;;24483:46:8::1;-1:-1:-1::0;;;;;24483:46:8;;;::::1;::::0;;;::::1;::::0;;24381:155::o;1661:101:9:-;1101:6;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;3076:153:2:-;3170:52;719:10:1;3203:8:2;3213;3170:18;:52::i;23415:371:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;23547:1:8::1;23540:6;:8;:20;;;;;23559:1;23552:6;:8;23540:20;23532:41;;;;-1:-1:-1::0;;;23532:41:8::1;;;;;;;:::i;:::-;23588:9;23583:197;23601:12:::0;;::::1;23583:197;;;23667:5;23653:8;;23662:1;23653:11;;;;;;;:::i;:::-;;;;;;;23640:12;;:24;;;;:::i;:::-;:32;23632:48;;;::::0;-1:-1:-1;;;23632:48:8;;17985:2:10;23632:48:8::1;::::0;::::1;17967:21:10::0;18024:1;18004:18;;;17997:29;-1:-1:-1;;;18042:18:10;;;18035:33;18085:18;;23632:48:8::1;17957:152:10::0;23632:48:8::1;23692:38;23698:3;;23702:1;23698:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;23706;23714:8;;23723:1;23714:11;;;;;;;:::i;:::-;;;;;;;23692:38;;;;;;;;;;;::::0;:5:::1;:38::i;:::-;23758:8;;23767:1;23758:11;;;;;;;:::i;:::-;;;;;;;23742:12;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;23615:3:8;;-1:-1:-1;23615:3:8::1;::::0;::::1;:::i;:::-;;;;23583:197;;;;23415:371:::0;;;;;:::o;3529:389:2:-;-1:-1:-1;;;;;3729:20:2;;719:10:1;3729:20:2;;:60;;-1:-1:-1;3753:36:2;3770:4;719:10:1;3296:166:2;:::i;3753:36::-;3708:148;;;;-1:-1:-1;;;3708:148:2;;15238:2:10;3708:148:2;;;15220:21:10;15277:2;15257:18;;;15250:30;15316:34;15296:18;;;15289:62;-1:-1:-1;;;15367:18:10;;;15360:39;15416:19;;3708:148:2;15210:231:10;3708:148:2;3866:45;3884:4;3890:2;3894;3898:6;3906:4;3866:17;:45::i;1911:198:9:-;1101:6;;-1:-1:-1;;;;;1101:6:9;719:10:1;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:9;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:9;;14426:2:10;1991:73:9::1;::::0;::::1;14408:21:10::0;14465:2;14445:18;;;14438:30;14504:34;14484:18;;;14477:62;-1:-1:-1;;;14555:18:10;;;14548:36;14601:19;;1991:73:9::1;14398:228:10::0;1991:73:9::1;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;5117:1548:8:-;5214:11;;5175:13;;5239:8;5235:23;;-1:-1:-1;;5249:9:8;;;;;;;;;-1:-1:-1;5249:9:8;;;5117:1548;-1:-1:-1;5117:1548:8:o;5235:23::-;5307:18;5345:1;5334:7;:3;5340:1;5334:7;:::i;:::-;5333:13;;;;:::i;:::-;5328:19;;:1;:19;:::i;:::-;5307:40;-1:-1:-1;5402:19:8;5434:15;5307:40;5447:2;5434:15;:::i;:::-;5424:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5424:26:8;;5402:48;;5460:18;5481:5;;;;;;;;;;;;;;;;;5460:26;;5547:1;5540:5;5536:13;5591:2;5583:6;5579:15;5638:1;5607:753;5660:3;5657:1;5654:10;5607:753;;;5711:1;5753:12;;;;;5747:19;5845:4;5833:2;5829:14;;;;;5811:40;;5805:47;5952:2;5948:14;;;5944:25;;5930:40;;5924:47;6079:1;6075:13;;;6071:24;;6057:39;;6051:46;6197:16;;;;6183:31;;6177:38;5880:1;5876:11;;;5973:4;5920:58;;;5911:68;6003:11;;6047:57;;;6038:67;;;;6129:11;;6173:49;;6164:59;6251:3;6247:13;6277:22;;6344:1;6329:17;;;;5704:9;5607:753;;;5611:42;6389:1;6384:3;6380:11;6409:1;6404:82;;;;6504:1;6499:80;;;;6373:206;;6404:82;-1:-1:-1;;;;;6436:17:8;;6429:43;6404:82;;6499:80;-1:-1:-1;;;;;6531:17:8;;6524:41;6373:206;-1:-1:-1;;;6592:26:8;;;6599:6;5117:1548;-1:-1:-1;;;;5117:1548:8:o;8340:553:2:-;-1:-1:-1;;;;;8487:16:2;;8479:62;;;;-1:-1:-1;;;8479:62:2;;19879:2:10;8479:62:2;;;19861:21:10;19918:2;19898:18;;;19891:30;19957:34;19937:18;;;19930:62;-1:-1:-1;;;20008:18:10;;;20001:31;20049:19;;8479:62:2;19851:223:10;8479:62:2;719:10:1;8594:102:2;719:10:1;8552:16:2;8637:2;8641:21;8659:2;8641:17;:21::i;:::-;8664:25;8682:6;8664:17;:25::i;8594:102::-;8707:9;:13;;;;;;;;;;;-1:-1:-1;;;;;8707:17:2;;;;;;;;;:27;;8728:6;;8707:9;:27;;8728:6;;8707:27;:::i;:::-;;;;-1:-1:-1;;8749:52:2;;;20435:25:10;;;20491:2;20476:18;;20469:34;;;-1:-1:-1;;;;;8749:52:2;;;;8782:1;;8749:52;;;;;;20408:18:10;8749:52:2;;;;;;;8812:74;8843:8;8861:1;8865:2;8869;8873:6;8881:4;8812:30;:74::i;6013:1045::-;6233:7;:14;6219:3;:10;:28;6211:81;;;;-1:-1:-1;;;6211:81:2;;19470:2:10;6211:81:2;;;19452:21:10;19509:2;19489:18;;;19482:30;19548:34;19528:18;;;19521:62;-1:-1:-1;;;19599:18:10;;;19592:38;19647:19;;6211:81:2;19442:230:10;6211:81:2;-1:-1:-1;;;;;6310:16:2;;6302:66;;;;-1:-1:-1;;;6302:66:2;;;;;;;:::i;:::-;719:10:1;6379:16:2;6492:411;6516:3;:10;6512:1;:14;6492:411;;;6547:10;6560:3;6564:1;6560:6;;;;;;;;:::i;:::-;;;;;;;6547:19;;6580:14;6597:7;6605:1;6597:10;;;;;;;;:::i;:::-;;;;;;;;;;;;6622:19;6644:13;;;;;;;;;;-1:-1:-1;;;;;6644:19:2;;;;;;;;;;;;6597:10;;-1:-1:-1;6685:21:2;;;;6677:76;;;;-1:-1:-1;;;6677:76:2;;;;;;;:::i;:::-;6795:9;:13;;;;;;;;;;;-1:-1:-1;;;;;6795:19:2;;;;;;;;;;6817:20;;;6795:42;;6865:17;;;;;;;:27;;6817:20;;6795:9;6865:27;;6817:20;;6865:27;:::i;:::-;;;;;;;;6533:370;;;6528:3;;;;:::i;:::-;;;6492:411;;;;6948:2;-1:-1:-1;;;;;6918:47:2;6942:4;-1:-1:-1;;;;;6918:47:2;6932:8;-1:-1:-1;;;;;6918:47:2;;6952:3;6957:7;6918:47;;;;;;;:::i;:::-;;;;;;;;6976:75;7012:8;7022:4;7028:2;7032:3;7037:7;7046:4;6976:35;:75::i;10193:630::-;-1:-1:-1;;;;;10315:18:2;;10307:66;;;;-1:-1:-1;;;10307:66:2;;16809:2:10;10307:66:2;;;16791:21:10;16848:2;16828:18;;;16821:30;16887:34;16867:18;;;16860:62;-1:-1:-1;;;16938:18:10;;;16931:33;16981:19;;10307:66:2;16781:225:10;10307:66:2;719:10:1;10426:102:2;719:10:1;10457:4:2;10384:16;10475:21;10493:2;10475:17;:21::i;:::-;10498:25;10516:6;10498:17;:25::i;:::-;-1:-1:-1;;10426:102:2;;;;;;;;;-1:-1:-1;10426:102:2;;-1:-1:-1;;;23415:371:8;10426:102:2;10539:19;10561:13;;;;;;;;;;;-1:-1:-1;;;;;10561:19:2;;;;;;;;;;10598:21;;;;10590:70;;;;-1:-1:-1;;;10590:70:2;;14833:2:10;10590:70:2;;;14815:21:10;14872:2;14852:18;;;14845:30;14911:34;14891:18;;;14884:62;-1:-1:-1;;;14962:18:10;;;14955:34;15006:19;;10590:70:2;14805:226:10;10590:70:2;10694:9;:13;;;;;;;;;;;-1:-1:-1;;;;;10694:19:2;;;;;;;;;;;;10716:20;;;10694:42;;10762:54;;20435:25:10;;;20476:18;;;20469:34;;;10694:19:2;;10762:54;;;;;;20408:18:10;10762:54:2;;;;;;;10297:526;;10193:630;;;:::o;2263:187:9:-;2355:6;;;-1:-1:-1;;;;;2371:17:9;;;-1:-1:-1;;;;;;2371:17:9;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;12019:323:2:-;12169:8;-1:-1:-1;;;;;12160:17:2;:5;-1:-1:-1;;;;;12160:17:2;;;12152:71;;;;-1:-1:-1;;;12152:71:2;;18316:2:10;12152:71:2;;;18298:21:10;18355:2;18335:18;;;18328:30;18394:34;18374:18;;;18367:62;-1:-1:-1;;;18445:18:10;;;18438:39;18494:19;;12152:71:2;18288:231:10;12152:71:2;-1:-1:-1;;;;;12233:25:2;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;12233:46:2;;;;;;;;;;12294:41;;12706::10;;;12294::2;;12679:18:10;12294:41:2;;;;;;;12019:323;;;:::o;4870:797::-;-1:-1:-1;;;;;5051:16:2;;5043:66;;;;-1:-1:-1;;;5043:66:2;;;;;;;:::i;:::-;719:10:1;5162:96:2;719:10:1;5193:4:2;5199:2;5203:21;5221:2;5203:17;:21::i;5162:96::-;5269:19;5291:13;;;;;;;;;;;-1:-1:-1;;;;;5291:19:2;;;;;;;;;;5328:21;;;;5320:76;;;;-1:-1:-1;;;5320:76:2;;;;;;;:::i;:::-;5430:9;:13;;;;;;;;;;;-1:-1:-1;;;;;5430:19:2;;;;;;;;;;5452:20;;;5430:42;;5492:17;;;;;;;:27;;5452:20;;5430:9;5492:27;;5452:20;;5492:27;:::i;:::-;;;;-1:-1:-1;;5535:46:2;;;20435:25:10;;;20491:2;20476:18;;20469:34;;;-1:-1:-1;;;;;5535:46:2;;;;;;;;;;;;;;20408:18:10;5535:46:2;;;;;;;5592:68;5623:8;5633:4;5639:2;5643;5647:6;5655:4;5592:30;:68::i;:::-;5033:634;;4870:797;;;;;:::o;15025:193::-;15144:16;;;15158:1;15144:16;;;;;;;;;15091;;15119:22;;15144:16;;;;;;;;;;;;-1:-1:-1;15144:16:2;15119:41;;15181:7;15170:5;15176:1;15170:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;15206:5;15025:193;-1:-1:-1;;15025:193:2:o;13496:725::-;-1:-1:-1;;;;;13703:13:2;;1465:19:0;:23;13699:516:2;;13738:72;;-1:-1:-1;;;13738:72:2;;-1:-1:-1;;;;;13738:38:2;;;;;:72;;13777:8;;13787:4;;13793:2;;13797:6;;13805:4;;13738:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13738:72:2;;;;;;;;-1:-1:-1;;13738:72:2;;;;;;;;;;;;:::i;:::-;;;13734:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14081:6;14074:14;;-1:-1:-1;;;14074:14:2;;;;;;;;:::i;13734:471::-;;;14128:62;;-1:-1:-1;;;14128:62:2;;13184:2:10;14128:62:2;;;13166:21:10;13223:2;13203:18;;;13196:30;13262:34;13242:18;;;13235:62;-1:-1:-1;;;13313:18:10;;;13306:50;13373:19;;14128:62:2;13156:242:10;13734:471:2;-1:-1:-1;;;;;;13859:55:2;;-1:-1:-1;;;13859:55:2;13855:152;;13938:50;;-1:-1:-1;;;13938:50:2;;;;;;;:::i;14227:792::-;-1:-1:-1;;;;;14459:13:2;;1465:19:0;:23;14455:558:2;;14494:79;;-1:-1:-1;;;14494:79:2;;-1:-1:-1;;;;;14494:43:2;;;;;:79;;14538:8;;14548:4;;14554:3;;14559:7;;14568:4;;14494:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14494:79:2;;;;;;;;-1:-1:-1;;14494:79:2;;;;;;;;;;;;:::i;:::-;;;14490:513;;;;:::i;:::-;-1:-1:-1;;;;;;14652:60:2;;-1:-1:-1;;;14652:60:2;14648:157;;14736:50;;-1:-1:-1;;;14736:50:2;;;;;;;:::i;14:173:10:-;82:20;;-1:-1:-1;;;;;131:31:10;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:367::-;255:8;265:6;319:3;312:4;304:6;300:17;296:27;286:2;;337:1;334;327:12;286:2;-1:-1:-1;360:20:10;;403:18;392:30;;389:2;;;435:1;432;425:12;389:2;472:4;464:6;460:17;448:29;;532:3;525:4;515:6;512:1;508:14;500:6;496:27;492:38;489:47;486:2;;;549:1;546;539:12;486:2;276:283;;;;;:::o;564:735::-;618:5;671:3;664:4;656:6;652:17;648:27;638:2;;689:1;686;679:12;638:2;725:6;712:20;751:4;774:43;814:2;774:43;:::i;:::-;846:2;840:9;858:31;886:2;878:6;858:31;:::i;:::-;924:18;;;958:15;;;;-1:-1:-1;993:15:10;;;1043:1;1039:10;;;1027:23;;1023:32;;1020:41;-1:-1:-1;1017:2:10;;;1074:1;1071;1064:12;1017:2;1096:1;1106:163;1120:2;1117:1;1114:9;1106:163;;;1177:17;;1165:30;;1215:12;;;;1247;;;;1138:1;1131:9;1106:163;;;-1:-1:-1;1287:6:10;;628:671;-1:-1:-1;;;;;;;628:671:10:o;1304:555::-;1346:5;1399:3;1392:4;1384:6;1380:17;1376:27;1366:2;;1417:1;1414;1407:12;1366:2;1453:6;1440:20;1479:18;1475:2;1472:26;1469:2;;;1501:18;;:::i;:::-;1550:2;1544:9;1562:67;1617:2;1598:13;;-1:-1:-1;;1594:27:10;1623:4;1590:38;1544:9;1562:67;:::i;:::-;1653:2;1645:6;1638:18;1699:3;1692:4;1687:2;1679:6;1675:15;1671:26;1668:35;1665:2;;;1716:1;1713;1706:12;1665:2;1780;1773:4;1765:6;1761:17;1754:4;1746:6;1742:17;1729:54;1827:1;1803:15;;;1820:4;1799:26;1792:37;;;;1807:6;1356:503;-1:-1:-1;;;1356:503:10:o;1864:186::-;1923:6;1976:2;1964:9;1955:7;1951:23;1947:32;1944:2;;;1992:1;1989;1982:12;1944:2;2015:29;2034:9;2015:29;:::i;:::-;2005:39;1934:116;-1:-1:-1;;;1934:116:10:o;2055:260::-;2123:6;2131;2184:2;2172:9;2163:7;2159:23;2155:32;2152:2;;;2200:1;2197;2190:12;2152:2;2223:29;2242:9;2223:29;:::i;:::-;2213:39;;2271:38;2305:2;2294:9;2290:18;2271:38;:::i;:::-;2261:48;;2142:173;;;;;:::o;2320:943::-;2474:6;2482;2490;2498;2506;2559:3;2547:9;2538:7;2534:23;2530:33;2527:2;;;2576:1;2573;2566:12;2527:2;2599:29;2618:9;2599:29;:::i;:::-;2589:39;;2647:38;2681:2;2670:9;2666:18;2647:38;:::i;:::-;2637:48;;2736:2;2725:9;2721:18;2708:32;2759:18;2800:2;2792:6;2789:14;2786:2;;;2816:1;2813;2806:12;2786:2;2839:61;2892:7;2883:6;2872:9;2868:22;2839:61;:::i;:::-;2829:71;;2953:2;2942:9;2938:18;2925:32;2909:48;;2982:2;2972:8;2969:16;2966:2;;;2998:1;2995;2988:12;2966:2;3021:63;3076:7;3065:8;3054:9;3050:24;3021:63;:::i;:::-;3011:73;;3137:3;3126:9;3122:19;3109:33;3093:49;;3167:2;3157:8;3154:16;3151:2;;;3183:1;3180;3173:12;3151:2;;3206:51;3249:7;3238:8;3227:9;3223:24;3206:51;:::i;:::-;3196:61;;;2517:746;;;;;;;;:::o;3268:606::-;3372:6;3380;3388;3396;3404;3457:3;3445:9;3436:7;3432:23;3428:33;3425:2;;;3474:1;3471;3464:12;3425:2;3497:29;3516:9;3497:29;:::i;:::-;3487:39;;3545:38;3579:2;3568:9;3564:18;3545:38;:::i;:::-;3535:48;;3630:2;3619:9;3615:18;3602:32;3592:42;;3681:2;3670:9;3666:18;3653:32;3643:42;;3736:3;3725:9;3721:19;3708:33;3764:18;3756:6;3753:30;3750:2;;;3796:1;3793;3786:12;3750:2;3819:49;3860:7;3851:6;3840:9;3836:22;3819:49;:::i;3879:347::-;3944:6;3952;4005:2;3993:9;3984:7;3980:23;3976:32;3973:2;;;4021:1;4018;4011:12;3973:2;4044:29;4063:9;4044:29;:::i;:::-;4034:39;;4123:2;4112:9;4108:18;4095:32;4170:5;4163:13;4156:21;4149:5;4146:32;4136:2;;4192:1;4189;4182:12;4136:2;4215:5;4205:15;;;3963:263;;;;;:::o;4231:254::-;4299:6;4307;4360:2;4348:9;4339:7;4335:23;4331:32;4328:2;;;4376:1;4373;4366:12;4328:2;4399:29;4418:9;4399:29;:::i;:::-;4389:39;4475:2;4460:18;;;;4447:32;;-1:-1:-1;;;4318:167:10:o;4490:841::-;4621:6;4629;4637;4645;4653;4706:2;4694:9;4685:7;4681:23;4677:32;4674:2;;;4722:1;4719;4712:12;4674:2;4762:9;4749:23;4791:18;4832:2;4824:6;4821:14;4818:2;;;4848:1;4845;4838:12;4818:2;4887:70;4949:7;4940:6;4929:9;4925:22;4887:70;:::i;:::-;4976:8;;-1:-1:-1;4861:96:10;-1:-1:-1;5064:2:10;5049:18;;5036:32;;-1:-1:-1;5080:16:10;;;5077:2;;;5109:1;5106;5099:12;5077:2;;5148:72;5212:7;5201:8;5190:9;5186:24;5148:72;:::i;:::-;4664:667;;;;-1:-1:-1;5239:8:10;5321:2;5306:18;5293:32;;4664:667;-1:-1:-1;;;;4664:667:10:o;5336:505::-;5431:6;5439;5447;5500:2;5488:9;5479:7;5475:23;5471:32;5468:2;;;5516:1;5513;5506:12;5468:2;5556:9;5543:23;5589:18;5581:6;5578:30;5575:2;;;5621:1;5618;5611:12;5575:2;5660:70;5722:7;5713:6;5702:9;5698:22;5660:70;:::i;:::-;5749:8;;5634:96;;-1:-1:-1;5831:2:10;5816:18;;;;5803:32;;5458:383;-1:-1:-1;;;;5458:383:10:o;5846:1219::-;5964:6;5972;6025:2;6013:9;6004:7;6000:23;5996:32;5993:2;;;6041:1;6038;6031:12;5993:2;6081:9;6068:23;6110:18;6151:2;6143:6;6140:14;6137:2;;;6167:1;6164;6157:12;6137:2;6205:6;6194:9;6190:22;6180:32;;6250:7;6243:4;6239:2;6235:13;6231:27;6221:2;;6272:1;6269;6262:12;6221:2;6308;6295:16;6330:4;6353:43;6393:2;6353:43;:::i;:::-;6425:2;6419:9;6437:31;6465:2;6457:6;6437:31;:::i;:::-;6503:18;;;6537:15;;;;-1:-1:-1;6572:11:10;;;6614:1;6610:10;;;6602:19;;6598:28;;6595:41;-1:-1:-1;6592:2:10;;;6649:1;6646;6639:12;6592:2;6671:1;6662:10;;6681:169;6695:2;6692:1;6689:9;6681:169;;;6752:23;6771:3;6752:23;:::i;:::-;6740:36;;6713:1;6706:9;;;;;6796:12;;;;6828;;6681:169;;;-1:-1:-1;6869:6:10;-1:-1:-1;;6913:18:10;;6900:32;;-1:-1:-1;;6944:16:10;;;6941:2;;;6973:1;6970;6963:12;6941:2;;6996:63;7051:7;7040:8;7029:9;7025:24;6996:63;:::i;:::-;6986:73;;;5983:1082;;;;;:::o;7070:245::-;7128:6;7181:2;7169:9;7160:7;7156:23;7152:32;7149:2;;;7197:1;7194;7187:12;7149:2;7236:9;7223:23;7255:30;7279:5;7255:30;:::i;7320:249::-;7389:6;7442:2;7430:9;7421:7;7417:23;7413:32;7410:2;;;7458:1;7455;7448:12;7410:2;7490:9;7484:16;7509:30;7533:5;7509:30;:::i;7574:180::-;7633:6;7686:2;7674:9;7665:7;7661:23;7657:32;7654:2;;;7702:1;7699;7692:12;7654:2;-1:-1:-1;7725:23:10;;7644:110;-1:-1:-1;7644:110:10:o;7759:254::-;7827:6;7835;7888:2;7876:9;7867:7;7863:23;7859:32;7856:2;;;7904:1;7901;7894:12;7856:2;7940:9;7927:23;7917:33;;7969:38;8003:2;7992:9;7988:18;7969:38;:::i;8018:435::-;8071:3;8109:5;8103:12;8136:6;8131:3;8124:19;8162:4;8191:2;8186:3;8182:12;8175:19;;8228:2;8221:5;8217:14;8249:1;8259:169;8273:6;8270:1;8267:13;8259:169;;;8334:13;;8322:26;;8368:12;;;;8403:15;;;;8295:1;8288:9;8259:169;;;-1:-1:-1;8444:3:10;;8079:374;-1:-1:-1;;;;;8079:374:10:o;8458:257::-;8499:3;8537:5;8531:12;8564:6;8559:3;8552:19;8580:63;8636:6;8629:4;8624:3;8620:14;8613:4;8606:5;8602:16;8580:63;:::i;:::-;8697:2;8676:15;-1:-1:-1;;8672:29:10;8663:39;;;;8704:4;8659:50;;8507:208;-1:-1:-1;;8507:208:10:o;8720:1048::-;-1:-1:-1;;;9220:47:10;;9290:13;;9202:3;;9312:62;9290:13;9362:2;9353:12;;9346:4;9334:17;;9312:62;:::i;:::-;9438:66;9433:2;9393:16;;;9425:11;;;9418:87;-1:-1:-1;;;9529:2:10;9521:11;;9514:31;9570:13;;9592:63;9570:13;9641:2;9633:11;;9626:4;9614:17;;9592:63;:::i;:::-;-1:-1:-1;;;9715:2:10;9674:17;;;;9707:11;;;9700:35;9759:2;9751:11;;9210:558;-1:-1:-1;;;;9210:558:10:o;9773:448::-;10035:31;10030:3;10023:44;10005:3;10096:6;10090:13;10112:62;10167:6;10162:2;10157:3;10153:12;10146:4;10138:6;10134:17;10112:62;:::i;:::-;10194:16;;;;10212:2;10190:25;;10013:208;-1:-1:-1;;10013:208:10:o;10434:826::-;-1:-1:-1;;;;;10831:15:10;;;10813:34;;10883:15;;10878:2;10863:18;;10856:43;10793:3;10930:2;10915:18;;10908:31;;;10756:4;;10962:57;;10999:19;;10991:6;10962:57;:::i;:::-;11067:9;11059:6;11055:22;11050:2;11039:9;11035:18;11028:50;11101:44;11138:6;11130;11101:44;:::i;:::-;11087:58;;11194:9;11186:6;11182:22;11176:3;11165:9;11161:19;11154:51;11222:32;11247:6;11239;11222:32;:::i;:::-;11214:40;10765:495;-1:-1:-1;;;;;;;;10765:495:10:o;11265:560::-;-1:-1:-1;;;;;11562:15:10;;;11544:34;;11614:15;;11609:2;11594:18;;11587:43;11661:2;11646:18;;11639:34;;;11704:2;11689:18;;11682:34;;;11524:3;11747;11732:19;;11725:32;;;11487:4;;11774:45;;11799:19;;11791:6;11774:45;:::i;:::-;11766:53;11496:329;-1:-1:-1;;;;;;;11496:329:10:o;11830:261::-;12009:2;11998:9;11991:21;11972:4;12029:56;12081:2;12070:9;12066:18;12058:6;12029:56;:::i;12096:465::-;12353:2;12342:9;12335:21;12316:4;12379:56;12431:2;12420:9;12416:18;12408:6;12379:56;:::i;:::-;12483:9;12475:6;12471:22;12466:2;12455:9;12451:18;12444:50;12511:44;12548:6;12540;12511:44;:::i;:::-;12503:52;12325:236;-1:-1:-1;;;;;12325:236:10:o;12758:219::-;12907:2;12896:9;12889:21;12870:4;12927:44;12967:2;12956:9;12952:18;12944:6;12927:44;:::i;13403:404::-;13605:2;13587:21;;;13644:2;13624:18;;;13617:30;13683:34;13678:2;13663:18;;13656:62;-1:-1:-1;;;13749:2:10;13734:18;;13727:38;13797:3;13782:19;;13577:230::o;15446:401::-;15648:2;15630:21;;;15687:2;15667:18;;;15660:30;15726:34;15721:2;15706:18;;15699:62;-1:-1:-1;;;15792:2:10;15777:18;;15770:35;15837:3;15822:19;;15620:227::o;15852:331::-;16054:2;16036:21;;;16093:1;16073:18;;;16066:29;-1:-1:-1;;;16126:2:10;16111:18;;16104:38;16174:2;16159:18;;16026:157::o;17011:406::-;17213:2;17195:21;;;17252:2;17232:18;;;17225:30;17291:34;17286:2;17271:18;;17264:62;-1:-1:-1;;;17357:2:10;17342:18;;17335:40;17407:3;17392:19;;17185:232::o;17422:356::-;17624:2;17606:21;;;17643:18;;;17636:30;17702:34;17697:2;17682:18;;17675:62;17769:2;17754:18;;17596:182::o;20514:183::-;20574:4;20607:18;20599:6;20596:30;20593:2;;;20629:18;;:::i;:::-;-1:-1:-1;20674:1:10;20670:14;20686:4;20666:25;;20583:114::o;20702:128::-;20742:3;20773:1;20769:6;20766:1;20763:13;20760:2;;;20779:18;;:::i;:::-;-1:-1:-1;20815:9:10;;20750:80::o;20835:217::-;20875:1;20901;20891:2;;20945:10;20940:3;20936:20;20933:1;20926:31;20980:4;20977:1;20970:15;21008:4;21005:1;20998:15;20891:2;-1:-1:-1;21037:9:10;;20881:171::o;21057:168::-;21097:7;21163:1;21159;21155:6;21151:14;21148:1;21145:21;21140:1;21133:9;21126:17;21122:45;21119:2;;;21170:18;;:::i;:::-;-1:-1:-1;21210:9:10;;21109:116::o;21230:258::-;21302:1;21312:113;21326:6;21323:1;21320:13;21312:113;;;21402:11;;;21396:18;21383:11;;;21376:39;21348:2;21341:10;21312:113;;;21443:6;21440:1;21437:13;21434:2;;;21478:1;21469:6;21464:3;21460:16;21453:27;21434:2;;21283:205;;;:::o;21493:380::-;21572:1;21568:12;;;;21615;;;21636:2;;21690:4;21682:6;21678:17;21668:27;;21636:2;21743;21735:6;21732:14;21712:18;21709:38;21706:2;;;21789:10;21784:3;21780:20;21777:1;21770:31;21824:4;21821:1;21814:15;21852:4;21849:1;21842:15;21706:2;;21548:325;;;:::o;21878:249::-;21988:2;21969:13;;-1:-1:-1;;21965:27:10;21953:40;;22023:18;22008:34;;22044:22;;;22005:62;22002:2;;;22070:18;;:::i;:::-;22106:2;22099:22;-1:-1:-1;;21925:202:10:o;22132:135::-;22171:3;-1:-1:-1;;22192:17:10;;22189:2;;;22212:18;;:::i;:::-;-1:-1:-1;22259:1:10;22248:13;;22179:88::o;22272:127::-;22333:10;22328:3;22324:20;22321:1;22314:31;22364:4;22361:1;22354:15;22388:4;22385:1;22378:15;22404:127;22465:10;22460:3;22456:20;22453:1;22446:31;22496:4;22493:1;22486:15;22520:4;22517:1;22510:15;22536:127;22597:10;22592:3;22588:20;22585:1;22578:31;22628:4;22625:1;22618:15;22652:4;22649:1;22642:15;22668:179;22703:3;22745:1;22727:16;22724:23;22721:2;;;22791:1;22788;22785;22770:23;-1:-1:-1;22828:1:10;22822:8;22817:3;22813:18;22721:2;22711:136;:::o;22852:671::-;22891:3;22933:4;22915:16;22912:26;22909:2;;;22899:624;:::o;22909:2::-;22975;22969:9;-1:-1:-1;;23040:16:10;23036:25;;23033:1;22969:9;23012:50;23091:4;23085:11;23115:16;23150:18;23221:2;23214:4;23206:6;23202:17;23199:25;23194:2;23186:6;23183:14;23180:45;23177:2;;;23228:5;;;;;22899:624;:::o;23177:2::-;23265:6;23259:4;23255:17;23244:28;;23301:3;23295:10;23328:2;23320:6;23317:14;23314:2;;;23334:5;;;;;;22899:624;:::o;23314:2::-;23418;23399:16;23393:4;23389:27;23385:36;23378:4;23369:6;23364:3;23360:16;23356:27;23353:69;23350:2;;;23425:5;;;;;;22899:624;:::o;23350:2::-;23441:57;23492:4;23483:6;23475;23471:19;23467:30;23461:4;23441:57;:::i;:::-;-1:-1:-1;23514:3:10;;22899:624;-1:-1:-1;;;;;22899:624:10:o;23528:131::-;-1:-1:-1;;;;;;23602:32:10;;23592:43;;23582:2;;23649:1;23646;23639:12

Swarm Source

ipfs://3ff9d3bb0c53b458bf1f6b5ded3812c2859a0c8bf159f7eccb031951abfcdeb3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.