{
  "_format": "hh-sol-artifact-1",
  "contractName": "ActionSwapYTV3",
  "sourceName": "contracts/router/ActionSwapYTV3.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "exchangeRate",
          "type": "int256"
        }
      ],
      "name": "MarketExchangeRateBelowOne",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MarketExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MarketProportionMustNotEqualOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "proportion",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "maxProportion",
          "type": "int256"
        }
      ],
      "name": "MarketProportionTooHigh",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "rateScalar",
          "type": "int256"
        }
      ],
      "name": "MarketRateScalarBelowZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "totalPt",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "totalAsset",
          "type": "int256"
        }
      ],
      "name": "MarketZeroTotalPtOrTotalAsset",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyUsed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPtUsed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpOut",
          "type": "uint256"
        }
      ],
      "name": "AddLiquidityDualSyAndPt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netTokenUsed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPtUsed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "name": "AddLiquidityDualTokenAndPt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPtIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpOut",
          "type": "uint256"
        }
      ],
      "name": "AddLiquiditySinglePt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpOut",
          "type": "uint256"
        }
      ],
      "name": "AddLiquiditySingleSy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyMintPy",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netYtOut",
          "type": "uint256"
        }
      ],
      "name": "AddLiquiditySingleSyKeepYt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netTokenIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "name": "AddLiquiditySingleToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netTokenIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netYtOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyMintPy",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "name": "AddLiquiditySingleTokenKeepYt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpIn",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "netPtFromRemove",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromRemove",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netPtRedeem",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromRedeem",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSyOut",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct ExitPostExpReturnParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "ExitPostExpToSy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalTokenOut",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "netPtFromRemove",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromRemove",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netPtRedeem",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromRedeem",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSyOut",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct ExitPostExpReturnParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "ExitPostExpToToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpIn",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "netPtFromRemove",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromRemove",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netPyRedeem",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromRedeem",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netPtSwap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netYtSwap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromSwap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSyOut",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct ExitPreExpReturnParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "ExitPreExpToSy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalTokenOut",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "netPtFromRemove",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromRemove",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netPyRedeem",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromRedeem",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netPtSwap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netYtSwap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFromSwap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "netSyFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSyOut",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct ExitPreExpReturnParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "ExitPreExpToToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "YT",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPyOut",
          "type": "uint256"
        }
      ],
      "name": "MintPyFromSy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "YT",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netTokenIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPyOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "name": "MintPyFromToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "SY",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netTokenIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyOut",
          "type": "uint256"
        }
      ],
      "name": "MintSyFromToken",
      "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": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "YT",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPyIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyOut",
          "type": "uint256"
        }
      ],
      "name": "RedeemPyToSy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "YT",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPyIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netTokenOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "name": "RedeemPyToToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "SY",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netTokenOut",
          "type": "uint256"
        }
      ],
      "name": "RedeemSyToToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpToRemove",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPtOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyOut",
          "type": "uint256"
        }
      ],
      "name": "RemoveLiquidityDualSyAndPt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpToRemove",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPtOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netTokenOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "name": "RemoveLiquidityDualTokenAndPt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpToRemove",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netPtOut",
          "type": "uint256"
        }
      ],
      "name": "RemoveLiquiditySinglePt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpToRemove",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyOut",
          "type": "uint256"
        }
      ],
      "name": "RemoveLiquiditySingleSy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netLpToRemove",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netTokenOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "name": "RemoveLiquiditySingleToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "facet",
          "type": "address"
        }
      ],
      "name": "SelectorToFacetSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "netPtToAccount",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "netSyToAccount",
          "type": "int256"
        }
      ],
      "name": "SwapPtAndSy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "netPtToAccount",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "netTokenToAccount",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "name": "SwapPtAndToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "netYtToAccount",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "netSyToAccount",
          "type": "int256"
        }
      ],
      "name": "SwapYtAndSy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "netYtToAccount",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "netTokenToAccount",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "name": "SwapYtAndToken",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "exactSyIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minYtOut",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "guessMin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "guessMax",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "guessOffchain",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxIteration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "eps",
              "type": "uint256"
            }
          ],
          "internalType": "struct ApproxParams",
          "name": "guessYtOut",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "limitRouter",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "epsSkipMarket",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "salt",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "expiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "enum IPLimitOrderType.OrderType",
                      "name": "orderType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "YT",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "maker",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "receiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "makingAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lnImpliedRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "failSafeRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes",
                      "name": "permit",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Order",
                  "name": "order",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "makingAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FillOrderParams[]",
              "name": "normalFills",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "salt",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "expiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "enum IPLimitOrderType.OrderType",
                      "name": "orderType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "YT",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "maker",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "receiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "makingAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lnImpliedRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "failSafeRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes",
                      "name": "permit",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Order",
                  "name": "order",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "makingAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FillOrderParams[]",
              "name": "flashFills",
              "type": "tuple[]"
            },
            {
              "internalType": "bytes",
              "name": "optData",
              "type": "bytes"
            }
          ],
          "internalType": "struct LimitOrderData",
          "name": "limit",
          "type": "tuple"
        }
      ],
      "name": "swapExactSyForYt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "netYtOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minYtOut",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "guessMin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "guessMax",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "guessOffchain",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxIteration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "eps",
              "type": "uint256"
            }
          ],
          "internalType": "struct ApproxParams",
          "name": "guessYtOut",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "netTokenIn",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "tokenMintSy",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "pendleSwap",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "enum SwapType",
                  "name": "swapType",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "extRouter",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "extCalldata",
                  "type": "bytes"
                },
                {
                  "internalType": "bool",
                  "name": "needScale",
                  "type": "bool"
                }
              ],
              "internalType": "struct SwapData",
              "name": "swapData",
              "type": "tuple"
            }
          ],
          "internalType": "struct TokenInput",
          "name": "input",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "limitRouter",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "epsSkipMarket",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "salt",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "expiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "enum IPLimitOrderType.OrderType",
                      "name": "orderType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "YT",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "maker",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "receiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "makingAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lnImpliedRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "failSafeRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes",
                      "name": "permit",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Order",
                  "name": "order",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "makingAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FillOrderParams[]",
              "name": "normalFills",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "salt",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "expiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "enum IPLimitOrderType.OrderType",
                      "name": "orderType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "YT",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "maker",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "receiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "makingAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lnImpliedRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "failSafeRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes",
                      "name": "permit",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Order",
                  "name": "order",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "makingAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FillOrderParams[]",
              "name": "flashFills",
              "type": "tuple[]"
            },
            {
              "internalType": "bytes",
              "name": "optData",
              "type": "bytes"
            }
          ],
          "internalType": "struct LimitOrderData",
          "name": "limit",
          "type": "tuple"
        }
      ],
      "name": "swapExactTokenForYt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "netYtOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "exactYtIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minSyOut",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "limitRouter",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "epsSkipMarket",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "salt",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "expiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "enum IPLimitOrderType.OrderType",
                      "name": "orderType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "YT",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "maker",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "receiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "makingAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lnImpliedRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "failSafeRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes",
                      "name": "permit",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Order",
                  "name": "order",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "makingAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FillOrderParams[]",
              "name": "normalFills",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "salt",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "expiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "enum IPLimitOrderType.OrderType",
                      "name": "orderType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "YT",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "maker",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "receiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "makingAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lnImpliedRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "failSafeRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes",
                      "name": "permit",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Order",
                  "name": "order",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "makingAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FillOrderParams[]",
              "name": "flashFills",
              "type": "tuple[]"
            },
            {
              "internalType": "bytes",
              "name": "optData",
              "type": "bytes"
            }
          ],
          "internalType": "struct LimitOrderData",
          "name": "limit",
          "type": "tuple"
        }
      ],
      "name": "swapExactYtForSy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "netSyOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "exactYtIn",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "minTokenOut",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "tokenRedeemSy",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "pendleSwap",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "enum SwapType",
                  "name": "swapType",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "extRouter",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "extCalldata",
                  "type": "bytes"
                },
                {
                  "internalType": "bool",
                  "name": "needScale",
                  "type": "bool"
                }
              ],
              "internalType": "struct SwapData",
              "name": "swapData",
              "type": "tuple"
            }
          ],
          "internalType": "struct TokenOutput",
          "name": "output",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "limitRouter",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "epsSkipMarket",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "salt",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "expiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "enum IPLimitOrderType.OrderType",
                      "name": "orderType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "YT",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "maker",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "receiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "makingAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lnImpliedRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "failSafeRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes",
                      "name": "permit",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Order",
                  "name": "order",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "makingAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FillOrderParams[]",
              "name": "normalFills",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "salt",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "expiry",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "nonce",
                      "type": "uint256"
                    },
                    {
                      "internalType": "enum IPLimitOrderType.OrderType",
                      "name": "orderType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "YT",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "maker",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "receiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "makingAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lnImpliedRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "failSafeRate",
                      "type": "uint256"
                    },
                    {
                      "internalType": "bytes",
                      "name": "permit",
                      "type": "bytes"
                    }
                  ],
                  "internalType": "struct Order",
                  "name": "order",
                  "type": "tuple"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "makingAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FillOrderParams[]",
              "name": "flashFills",
              "type": "tuple[]"
            },
            {
              "internalType": "bytes",
              "name": "optData",
              "type": "bytes"
            }
          ],
          "internalType": "struct LimitOrderData",
          "name": "limit",
          "type": "tuple"
        }
      ],
      "name": "swapExactYtForToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "netTokenOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60808060405234601557614b00908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806305eb5327146100545780637b8b4b951461004f57806380c4d5661461004a5763ed48907e14610045575f80fd5b6103bf565b610205565b61014c565b3461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f5760043561008f81610113565b6024359061009c82610113565b6044359060643567ffffffffffffffff811161010f576100c090369060040161013e565b6084359267ffffffffffffffff841161010f5761010b946100e86100ee95369060040161013e565b9361055d565b604080519384526020840192909252908201529081906060820190565b0390f35b5f80fd5b73ffffffffffffffffffffffffffffffffffffffff81160361010f57565b359061013c82610113565b565b908160a091031261010f5790565b3461010f576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f5760043561018881610113565b6024359061019582610113565b60443560643560a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261010f57610124359167ffffffffffffffff831161010f576101f3946101ed608494369060040161013e565b946106b9565b60408051928352602083019190915290f35b3461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f5760043561024081610113565b6024359061024d82610113565b6044359060643560843567ffffffffffffffff811161010f5761027490369060040161013e565b9073ffffffffffffffffffffffffffffffffffffffff851691604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481875afa9687156103ba57610320976103189488925f915f93610385575b50610312846102f56102ef6102eb8a611b2f565b1590565b86611b5e565b3373ffffffffffffffffffffffffffffffffffffffff8716610957565b88610d2d565b9490936113fe565b7f05499aba408f669fb848399c146fad5bd604d50b15566bdc19e81c40922fab8d73ffffffffffffffffffffffffffffffffffffffff61035f8661142e565b6040805194855260208501919091529416933392a4604080519182526020820192909252f35b9092506103aa915060603d6060116103b3575b6103a281836104d1565b810190610512565b9290505f6102d7565b503d610398565b610548565b6101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f576004356103f681610113565b60243561040281610113565b6044359160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261010f576101043567ffffffffffffffff811161010f5761045190369060040161013e565b6101243567ffffffffffffffff811161010f5761010b946100ee9461047c606493369060040161013e565b94610804565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610120810190811067ffffffffffffffff8211176104cc57604052565b610482565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104cc57604052565b9081606091031261010f57805161052881610113565b916040602083015161053981610113565b92015161054581610113565b90565b6040513d5f823e3d90fd5b3561054581610113565b94919390929473ffffffffffffffffffffffffffffffffffffffff8416906040517f2c8ce6bc000000000000000000000000000000000000000000000000000000008152606081600481865afa80156103ba5773ffffffffffffffffffffffffffffffffffffffff9488610623927fa3a2846538c60e47775faa60c6ae79b67dee6d97bb70e386ebbaf4c3a38e8b81945f905f92610695575b506106198361061061060a6102eb88611b2f565b85611b5e565b338c8616610957565b8881169a8b610aac565b9490949761069061064961064361063d8d8a809d8a61117e565b9c610553565b926113fe565b966106538c61142e565b60405194859416983397859094939260609273ffffffffffffffffffffffffffffffffffffffff6080840197168352602083015260408201520152565b0390a4565b90506106b0915060603d6060116103b3576103a281836104d1565b9190505f6105f6565b929593949091946106ca8282611458565b6107f15773ffffffffffffffffffffffffffffffffffffffff831696604051937f2c8ce6bc0000000000000000000000000000000000000000000000000000000085526060856004818c5afa80156103ba576107629589925f915f936107cc575b5061075c8461073f6102ef6102eb8b611b2f565b3373ffffffffffffffffffffffffffffffffffffffff8616610957565b886115c5565b949094937f05499aba408f669fb848399c146fad5bd604d50b15566bdc19e81c40922fab8d73ffffffffffffffffffffffffffffffffffffffff6107ae6107a88961142e565b936113fe565b60408051948552602085019190915294169333929081908101610690565b9092506107e8915060603d6060116103b3576103a281836104d1565b9290505f61072b565b505061080093919492946114a5565b9091565b94959192959390936108168188611458565b6109425773ffffffffffffffffffffffffffffffffffffffff851696604051947f2c8ce6bc0000000000000000000000000000000000000000000000000000000086526060866004818c5afa80156103ba575f965f91610917575b5096849596976108b06108b99661089361088d6102eb89611b2f565b84611b5e565b73ffffffffffffffffffffffffffffffffffffffff8c1690611916565b9889928b6115c5565b959095947fa3a2846538c60e47775faa60c6ae79b67dee6d97bb70e386ebbaf4c3a38e8b8173ffffffffffffffffffffffffffffffffffffffff8861069088610653602061090f6109098b610553565b9561142e565b9901356113fe565b6108b995969750610937915060603d6060116103b3576103a281836104d1565b919796959050610871565b5092909450610950936117d0565b9192909190565b92919082610966575b50505050565b61096f93611b69565b5f808080610960565b9081602091031261010f575190565b919082604091031261010f576020825192015190565b5f5b8381106109ae5750505f910152565b818101518382015260200161099f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936109fa8151809281875287808801910161099d565b0116010190565b610545939273ffffffffffffffffffffffffffffffffffffffff606093168252602082015281604082015201906109be565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908201809211610a6d57565b610a33565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610a6d57565b91908203918211610a6d57565b9593929091955f965f9685600191610ac66102eb82611b2f565b610cd0575b5050610ad9575b5050505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015296989190961696909492939092906020876024818b5afa9687156103ba575f97610caa575b509060409173ffffffffffffffffffffffffffffffffffffffff5f81610b678988612661565b98610ba187519a8b97889687947f5b709f170000000000000000000000000000000000000000000000000000000086521660048501610a01565b0393165af19283156103ba57610c1793602093610bc5925f92610c77575b50610a60565b9560405180809581947f70a082310000000000000000000000000000000000000000000000000000000083526004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03915afa9283156103ba57610c3d93610c37925f91610c48575b50610a9f565b90610a60565b915f80808080610ad2565b610c6a915060203d602011610c70575b610c6281836104d1565b810190610978565b5f610c31565b503d610c58565b610c9a91925060403d604011610ca3575b610c9281836104d1565b810190610987565b9050905f610bbf565b503d610c88565b604092919750610cc89060203d602011610c7057610c6281836104d1565b969091610b41565b929950975050610cfb91945073ffffffffffffffffffffffffffffffffffffffff831696878661221a565b9592989197869198998481985f14610d1f575081610d18926124fc565b5f80610acb565b610d28926124fc565b610d18565b969493929091965f975f9785600191610d486102eb82611b2f565b610f52575b5050610dc5575b50505050508310610d6157565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f5554000000604482015280606481015b0390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015296999190961697909492939092906020876024818c5afa9687156103ba575f97610f2c575b509060409173ffffffffffffffffffffffffffffffffffffffff5f81610e538988612661565b98610e8d87519a8b97889687947f5b709f170000000000000000000000000000000000000000000000000000000086521660048501610a01565b0393165af19283156103ba57610f0293602093610eb0925f92610c775750610a60565b9660405180809581947f70a082310000000000000000000000000000000000000000000000000000000083526004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03915afa9283156103ba57610f2193610c37925f91610c485750610a9f565b925f80808080610d54565b604092919750610f4a9060203d602011610c7057610c6281836104d1565b969091610e2d565b929a50985050610f7d91945073ffffffffffffffffffffffffffffffffffffffff831697888661221a565b95929991988691999a8481985f14610fa1575081610f9a926124fc565b5f80610d4d565b610faa926124fc565b610f9a565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818136030182121561010f570190565b600b111561010f57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b111561102357565b610fec565b3561054581610fe2565b5f91031261010f57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561010f57016020813591019167ffffffffffffffff821161010f57813603831361010f57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b8015150361010f57565b9081356110e081610fe2565b600b81101561102357815273ffffffffffffffffffffffffffffffffffffffff602083013561110e81610113565b166020820152606080611138611127604086018661103c565b60806040870152608086019161108c565b930135611144816110ca565b151591015290565b610545939273ffffffffffffffffffffffffffffffffffffffff606093168252602082015281604082015201906110d4565b939293608085016111976111928288610faf565b611028565b6111a081611019565b80611221575050846020936111b6935f9361267f565b925b013582106111c257565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f536c6970706167653a20494e53554646494349454e545f544f4b454e5f4f55546044820152606490fd5b806112326003929895969498611019565b0361127e575061124a5f83611279936020963061267f565b809561126b8261125c60408701610553565b61126587610553565b906127af565b61127484610553565b6124fc565b6111b8565b906112a76112a76112a15f866112c095606082019961129c8b610553565b61267f565b95610553565b73ffffffffffffffffffffffffffffffffffffffff1690565b6112d66112cf60408501610553565b9284610faf565b90803b1561010f5761131b945f8094604051978895869485937f2bdb823c0000000000000000000000000000000000000000000000000000000085526004850161114c565b03925af19182156103ba5760209261134e575b5061127961134361133e83610553565b612747565b809561127484610553565b8061135c5f611362936104d1565b80611032565b5f61132e565b90815f03918083057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1490151715610a6d57565b90670de0b6b3a7640000820291808305670de0b6b3a76400001490151715610a6d57565b81810292915f82127f8000000000000000000000000000000000000000000000000000000000000000821416610a6d578184051490151715610a6d57565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5761054590611368565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5790565b60400135159081611467575090565b6105459150611b2f565b1561147857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b6040517f6afe699800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff918216602482015291166044820152606481019190915260848101919091526108009061154f90611548906115438160a481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826104d1565b612885565b9190611471565b60208082518301019101610987565b6040519061013c610120836104d1565b91908260a091031261010f5760405160a0810181811067ffffffffffffffff8211176104cc576040526080808294803584526020810135602085015260408101356040850152606081013560608501520135910152565b92939697959091975f985f9880926001926115e26102eb83611b2f565b611744575b50505061165b575b505050505083106115fc57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f59545f4f55540000006044820152606490fd5b9173ffffffffffffffffffffffffffffffffffffffff5f816116b26116a9899a9c9d99989660409861168c88612939565b906116a16116998d612a23565b93369061156e565b924292612a7d565b50978896612c0e565b986116ec87519a8b97889687947f29910b110000000000000000000000000000000000000000000000000000000086521660048501610a01565b0393165af19081156103ba57611714935f9261171f575b5061170e9192610a60565b94610a60565b915f808080806115ef565b61170e925061173c9060403d604011610ca357610c9281836104d1565b905091611703565b73ffffffffffffffffffffffffffffffffffffffff169b5093995061176e9392509050898561221a565b91999098929190828683156117a7575061179f9173ffffffffffffffffffffffffffffffffffffffff8916906124fc565b5f80806115e7565b6117b0926124fc565b61179f565b9081606091031261010f578051916040602083015192015190565b92919073ffffffffffffffffffffffffffffffffffffffff9081604051957f22bfddd000000000000000000000000000000000000000000000000000000000602088015216602486015216604484015260648301526080608483015273ffffffffffffffffffffffffffffffffffffffff813561184c81610113565b1660a4830152602081013560c483015273ffffffffffffffffffffffffffffffffffffffff604082013561187f81610113565b1660e483015273ffffffffffffffffffffffffffffffffffffffff60608201356118a881610113565b1661010483015260808101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818236030181121561010f578261154381611517611548946119079660a06101246109509a0152610144840191016110d4565b602080825183010191016117b5565b91906119256080830183610faf565b3561192f81610fe2565b61193881611019565b8061196557506105459260019161194e84610553565b61195f602086013580923390612c92565b91612cd0565b80611971600392611019565b036119b0576105459260019161198684610553565b611997602086013580923390612c92565b61195f816119a487610553565b61126560408901610553565b73ffffffffffffffffffffffffffffffffffffffff6119ce83610553565b16611aae576119e1602083013533612c2b565b6119f36112a76112a760608501610553565b92611a006112a784610553565b611aa7576020830135935b611a1484610553565b90602085013590611a286080870187610faf565b91813b1561010f57611a6c975f94604051998a95869485937f2bdb823c0000000000000000000000000000000000000000000000000000000085526004850161114c565b03925af19182156103ba5761054594600193611a93575b5061195f61133e60408601610553565b8061135c5f611aa1936104d1565b5f611a83565b5f93611a0b565b611ad6611abd6112a784610553565b611ac960608501610553565b6020850135913390610957565b6119e1565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561010f570180359067ffffffffffffffff821161010f57602001918160051b3603831361010f57565b611b3c6040820182611adb565b9050159081611b49575090565b611b5891506060810190611adb565b90501590565b90156112a757503090565b90919273ffffffffffffffffffffffffffffffffffffffff61013c9481604051957f23b872dd000000000000000000000000000000000000000000000000000000006020880152166024860152166044840152606483015260648252611bd06084836104d1565b612dbb565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561010f570180359067ffffffffffffffff821161010f5760200191813603831361010f57565b67ffffffffffffffff81116104cc57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192611c6c82611c26565b91611c7a60405193846104d1565b82948184528183011161010f578281602093845f960137010152565b6040515f81526105456020826104d1565b81601f8201121561010f578051611cbd81611c26565b92611ccb60405194856104d1565b8184526020828401011161010f57610545916020808501910161099d565b9060808282031261010f57815192602083015192604081015192606082015167ffffffffffffffff811161010f576105459201611ca7565b6004111561010f57565b359061013c82611d21565b6004111561102357565b90611d4a82611d36565b52565b9391959492908660a0860160a087525260c0850160c08860051b87010197825f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603015b838310611e0e5750505050505094611e0091611dcd6105459697602087019073ffffffffffffffffffffffffffffffffffffffff169052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604086015284820360608601526109be565b9160808184039101526109be565b90919293949a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408a82030186528b358281121561010f5783019081357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818336030181121561010f5782602092604080611fd1611fb8611fa460019989980160608752803560608801528881013560808801528481013560a0880152611ec2611eb860608301611d2b565b60c0890190611d40565b611eee611ed160808301610131565b73ffffffffffffffffffffffffffffffffffffffff1660e0890152565b611f1b611efd60a08301610131565b73ffffffffffffffffffffffffffffffffffffffff16610100890152565b611f48611f2a60c08301610131565b73ffffffffffffffffffffffffffffffffffffffff16610120890152565b611f75611f5760e08301610131565b73ffffffffffffffffffffffffffffffffffffffff16610140890152565b6101008101356101608801526101208101356101808801526101408101356101a088015261016081019061103c565b6101806101c08801526101e087019161108c565b611fc48787018761103c565b908683038988015261108c565b9301359101529d0196019493019190611d94565b94929096959391968760a0870160a088525260c0860160c08960051b88010198825f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603015b83831061207a5750505050505091610545959691612068611e0094602088019073ffffffffffffffffffffffffffffffffffffffff169052565b604086015284820360608601526109be565b90919293949b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408b82030186528c358281121561010f5783019081357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818336030181121561010f5782602092604080612124611fb8611fa460019989980160608752803560608801528881013560808801528481013560a0880152611ec2611eb860608301611d2b565b9301359101529e019601949301919061202e565b9015612171578035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561010f570190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818136030182121561010f570190565b3561054581611d21565b929373ffffffffffffffffffffffffffffffffffffffff91959482606094608087019861220781611d36565b8752166020860152604085015216910152565b9390915f935f9361222d6112a783610553565b839761224e6122496122426080870187611bd5565b3691611c60565b612f26565b93604086019061225e8288611adb565b90506123e2575b505050606084016122768186611adb565b9050612295575b50505050906020612290920135906130f7565b841190565b9161230f915f73ffffffffffffffffffffffffffffffffffffffff8c612357878a9d9f9e9b9a806115176122eb60a06122e56122df8b9f6122d99061232198611adb565b90612138565b8061219e565b01610553565b9a8b9461230960606123036122df6122d98589611adb565b016121d1565b93611adb565b999096604051958694602086016121db565b604051998a98899788957f6122b17300000000000000000000000000000000000000000000000000000000875260048701611d4d565b0393165af19283156103ba57612290936020926123a4925f915f936123ae575b5061239861239184878061239e9697518301019101610987565b9092610a60565b99610a9f565b98610a60565b9491925f8061227d565b612391935061239e92506123d6612398913d805f833e6123ce81836104d1565b810190611ce9565b96509450612377915050565b5f949b50839a506124639399509061241c6124229273ffffffffffffffffffffffffffffffffffffffff6124158a610553565b911661301a565b86611adb565b92909161242d611c96565b90886040519c8d9687967f6122b17300000000000000000000000000000000000000000000000000000000885260048801611fe5565b03818373ffffffffffffffffffffffffffffffffffffffff8c165af19687156103ba575f5f975f996124a6575b5061249c909785610a9f565b97955f8080612265565b905061249c98506124c29197503d805f833e6123ce81836104d1565b509890979190612490565b3d156124f7573d906124de82611c26565b916124ec60405193846104d1565b82523d5f602084013e565b606090565b82158015612602575b6125fd5773ffffffffffffffffffffffffffffffffffffffff168061259b57505f80809381935af16125356124cd565b501561253d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448083019390935291815261013c91611bd06064836104d1565b505050565b503073ffffffffffffffffffffffffffffffffffffffff831614612505565b6040516080919061263283826104d1565b60608152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b919061266b612621565b926001602085015260408401526060830152565b5f73ffffffffffffffffffffffffffffffffffffffff8092604060209760809961272e575b0135906126b082610113565b6001604051998a98899788957f769f8e5d00000000000000000000000000000000000000000000000000000000875260048701928260a08501971684528d84015216604082015286606082015201520393165af19081156103ba575f91612715575090565b610545915060203d602011610c7057610c6281836104d1565b87156126a457612742888833878216611b69565b6126a4565b73ffffffffffffffffffffffffffffffffffffffff168061276757504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9081156103ba575f91612715575090565b73ffffffffffffffffffffffffffffffffffffffff1690816128355773ffffffffffffffffffffffffffffffffffffffff915016803b1561010f575f906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af180156103ba576128275750565b8061135c5f61013c936104d1565b50803b1561010f576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092525f908290602490829084905af180156103ba576128275750565b5f8091602081519101305af49061289a6124cd565b908215806128b2575b6128a957565b50805190602001fd5b5060016128a3565b519061013c82610113565b908161012091031261010f576101006128dc61155e565b91805183526020810151602084015260408101516040840152612901606082016128ba565b60608401526080810151608084015260a081015160a084015260c081015160c084015260e081015160e0840152015161010082015290565b5f610100604051612949816104af565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152015261012060405180927f794052f30000000000000000000000000000000000000000000000000000000082528173ffffffffffffffffffffffffffffffffffffffff816129e4306004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0392165afa9081156103ba575f916129fa575090565b61054591506101203d8111612a1c575b612a1481836104d1565b8101906128c5565b503d612a0a565b602073ffffffffffffffffffffffffffffffffffffffff60045f9360405194859384927f1d52edc4000000000000000000000000000000000000000000000000000000008452165af19081156103ba575f91612715575090565b92612a8e9095919492958585613143565b604083015115612bce575b612aa2836133f1565b935f945b6060850151861015612bc15780612ac2612ad49289868661343a565b509290612acf838b613b54565b610a9f565b918987818511612bab57612aee9150608001518b8561358a565b612b9d575080865114612b34578589928282525b60028911612b1f57600193612b16936135f9565b955b0194612aa6565b5060019250612b2e91506135d8565b95612b18565b5050505050505050505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536c6970706167653a20415050524f585f4558484155535445440000000000006044820152606490fd5b985095505050509250509190565b915092612bb783610a72565b6020830152612b02565b5050505050505050612b3e565b612be38351612bdd88886139f3565b90613232565b835260208301612bfe8151612bf884886132a9565b90613359565b9052612c0983613366565b612a99565b9190612c18612621565b925f602085015260408401526060830152565b503403612c3457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b90919073ffffffffffffffffffffffffffffffffffffffff1680612cbb575090503403612c3457565b81612cc557505050565b61013c923091611b69565b6040602094950173ffffffffffffffffffffffffffffffffffffffff612d1c823592612cfb84610113565b838316612d9b57612d178688955b612d1281610113565b61301a565b610553565b92612d85604051988997889687947f20e8c565000000000000000000000000000000000000000000000000000000008652600486019094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0393165af19081156103ba575f91612715575090565b612d17865f95612d09565b9081602091031261010f5751610545816110ca565b9073ffffffffffffffffffffffffffffffffffffffff612e2992165f8060405193612de76040866104d1565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1612e236124cd565b916145c1565b8051908115918215612ec3575b505015612e3f57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b612ed69250602080918301019101612da6565b5f80612e36565b91909160408184031261010f57805167ffffffffffffffff811161010f5783612f07918301611ca7565b92602082015167ffffffffffffffff811161010f576105459201611ca7565b606091606091805180612f37575050565b9193508092500160408282031261010f5760208201519160408101519067ffffffffffffffff821161010f576020612f76928160019501920101611ca7565b9103612f8f578060208061080093518301019101612edd565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9073ffffffffffffffffffffffffffffffffffffffff821680156125fd576040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316602482015290602090829060449082905afa9081156103ba575f916130c5575b506b7fffffffffffffffffffffff116130b2575050565b816130c08261013c94613629565b613733565b6130de915060203d602011610c7057610c6281836104d1565b5f61309b565b81810292918115918404141715610a6d57565b670de0b6b3a76400009161310a916130e4565b0490565b604051906080820182811067ffffffffffffffff8211176104cc576040525f6060838281528260208201528260408201520152565b92919261314e61310e565b9360a0820161315e828251111590565b61320a57613188916131709151610a9f565b9261317b848461380a565b8652602083015190613884565b6020850190808252825180158015613202575b6131d4575050816131c18460c0936131cd969551906101008501519051908a5192613905565b604087015201516139b2565b6060830152565b7fb1c4aefb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b50811561319b565b7fb2094b59000000000000000000000000000000000000000000000000000000005f5260045ffd5b908082111561323f575090565b905090565b9190915f8382019384129112908015821691151617610a6d57565b905f82670de0b6b3a7640000039212670de0b6b3a76400008312811690670de0b6b3a7640000841390151617610a6d57565b81810392915f138015828513169184121617610a6d57565b91905f90602081019081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610a6d575b80840361331657505061331184613309613304612bf894610545979851905190613244565b613b18565b905190613291565b613b4a565b808401808511610a6d5760018101809111610a6d5760011c905f61333c83895186613a06565b1215613351575061334c90610a72565b6132df565b9350926132df565b908082101561323f575090565b80516020820151109081156133db575b5061337d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e7465726e616c3a20494e56414c49445f415050524f585f504152414d53006044820152fd5b670de0b6b3a7640000915060800151115f613376565b6040810180519091901561340457505190565b61054591506135d8565b7f80000000000000000000000000000000000000000000000000000000000000008114610a6d575f0390565b909193926134479061340e565b6134608183516020860151865190604088015192614398565b5f606061347d613478846134738761139c565b613b0e565b611368565b95015192131561354c57816134736134949261139c565b670de0b6b3a764000081126135215750916135056134eb61350b936134e56134de6134d86134cd6134c760e09b9a61325f565b88613b37565b998a945b015161142e565b836113c0565b6064900590565b93613291565b5f811215613511576134fd908761454a565b945b866144b5565b946144b5565b91929190565b61351b90876144b5565b946134ff565b7fca78c8a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50916135056134eb61350b936134e56134de6134d86135826134788a61357d61357760e09e9d61325f565b8b6113c0565b6137b5565b998a946134d1565b9080821115928361359c575b50505090565b90919250670de0b6b3a76400000390670de0b6b3a76400008211610a6d57670de0b6b3a7640000916135cd916130e4565b0411155f8080613596565b602081519101518101809111610a6d5760018101809111610a6d5760011c90565b90613603916130e4565b81156136245704906020810151821015613404578051821115613404575090565b612fed565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201525f6044820181905292839291839061368c8160648101611517565b51925af16136986124cd565b81613704575b50156136a657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b8051801592508215613719575b50505f61369e565b61372c9250602080918301019101612da6565b5f80613711565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201525f92839291839061368c8160648101611517565b8115613624577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82147f8000000000000000000000000000000000000000000000000000000000000000821416610a6d570590565b608001516301e1338061381c916113c0565b907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5761384d916137b5565b905f82131561385857565b507f1ca41876000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6138c9670de0b6b3a7640000915f84125f146138fa576138c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94613bb4565b6130e4565b047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f57610545916113c0565b6138c4600194613bb4565b9193613910916130e4565b6301e1338090047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5761394790613cc4565b92670de0b6b3a76400008412613986579161397b61397683613970610545979661398096613244565b90613be2565b613beb565b613be2565b90613291565b837fca78c8a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b906139bc916130e4565b6301e1338090047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5761054590613cc4565b61310a90670de0b6b3a7640000926130e4565b90916020820191613a18828451613291565b91613a238582613244565b935f841380613aeb575b15613a8d57613a6e61398094613473613a68613a5e613a8896613a586105459c613a73985190613244565b906113c0565b613970848b6113c0565b9761139c565b61418c565b6040613a7f8451613bc8565b93015194613291565b613b37565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964207074546f4d61726b657400000000000000000000000000006044820152fd5b505f8513613a2d565b8015613624576ec097ce7bc90715b34b9f10000000000590565b8115613624570590565b613b33670de0b6b3a764000091670d529ae9e86000006113c0565b0590565b670de0b6b3a764000091613b33916113c0565b5f811261010f5790565b90670de0b6b3a7640000810290808204670de0b6b3a76400001490151715610a6d57818101809111610a6d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610a6d578115613624570490565b5f811315613bbf5790565b6105459061340e565b6ec097ce7bc90715b34b9f10000000008115613624570590565b613b0e9061139c565b670de0b6b3a76400008114613c375780670de0b6b3a764000003905f8112670de0b6b3a76400008312811690670de0b6b3a7640000841390151617610a6d5761054591613a6e91613be2565b7fa9c8b14d000000000000000000000000000000000000000000000000000000005f5260045ffd5b15613c6657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081121580614179575b613cf790613c5f565b5f811261416557610545906806f05b59d3b2000000811261410e577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e00000001613ed76064770195e54c5dd42177f53a27172fa9ec630262827000000000925b0268056bc75e2d631000009068ad78ebc5ac620000008112156140d5575b6856bc75e2d63100000081121561408b575b682b5e3af16b18800000811215614043575b6815af1d78b58c400000811215613ffb575b680ad78ebc5ac6200000811215613fb4575b68056bc75e2d63100000811215613f6d575b6802b5e3af16b1880000811215613f26575b68015af1d78b58c40000811215613edf575b600268056bc75e2d631000008280020505600368056bc75e2d631000008383020505600468056bc75e2d631000008483020505600568056bc75e2d631000008583020505600668056bc75e2d631000008683020505600768056bc75e2d63100000878302050590600868056bc75e2d63100000888402050592600968056bc75e2d6310000089860205059468056bc75e2d63100000600a8a88028290050597613ea868056bc75e2d631000008c8b02055b600b900590565b99600c68056bc75e2d631000008d8d0205059b0101010101010101010101010268056bc75e2d63100000900590565b026064900590565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000613f209201920268056bc75e2d63100000900590565b90613df0565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000613f679201920268056bc75e2d63100000900590565b90613dde565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000613fae9201920268056bc75e2d63100000900590565b90613dcc565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000613ff59201920268056bc75e2d63100000900590565b90613dba565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000061403d9201920268056bc75e2d63100000900590565b90613da8565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000006140859201920268056bc75e2d63100000900590565b90613d96565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000006140cf9201920268056bc75e2d63100000900590565b90613d84565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001613d72565b6803782dace9d90000008112614158577ffffffffffffffffffffffffffffffffffffffffffffffffc87d253162700000001613ed760646b1425982cf597cd205cef738092613d54565b613ed76064600192613d54565b614170905f03613cc4565b61054590613af4565b5068070c1cc73b00c80000811315613cee565b5f81131561433a5780670c7d713b49da00001280614329575b1561432057670de0b6b3a7640000026ec097ce7bc90715b34b9f100000000081019081156136245761430e6143076142936142ea6142766142cd610545976ec097ce7bc90715b34b9f10000000007fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f00000000061425e990102056142b06ec097ce7bc90715b34b9f10000000008280020580968180968186614255828099026ec097ce7bc90715b34b9f1000000000900590565b9e8f6003900590565b019d026ec097ce7bc90715b34b9f1000000000900590565b9b60058d05019b026ec097ce7bc90715b34b9f1000000000900590565b9960078b050199026ec097ce7bc90715b34b9f1000000000900590565b97600989050197026ec097ce7bc90715b34b9f1000000000900590565b95600b87050195026ec097ce7bc90715b34b9f1000000000900590565b93600d85050193026ec097ce7bc90715b34b9f1000000000900590565b600f900590565b0160011b670de0b6b3a7640000900590565b6105459061468d565b50670f43fc2c04ee000081126141a5565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f7574206f6620626f756e6473000000000000000000000000000000000000006044820152fd5b90919493808212614457576143ba926143b46139709284613291565b92613244565b92670d529ae9e8600000841361441f576143db9061397b6143e09495613beb565b613244565b90670de0b6b3a764000082126143f257565b7fca78c8a4000000000000000000000000000000000000000000000000000000005f52600482905260245ffd5b837ffc68d09e000000000000000000000000000000000000000000000000000000005f52600452670d529ae9e860000060245260445ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e656761746976650000000000000000000000000000000000000000000000006044820152fd5b5f82121561453f576144e77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92613bb4565b670de0b6b3a7640000810290808204670de0b6b3a76400001490151715610a6d57811561362457047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f57610545916113c0565b6144e7600192613bb4565b614586905f8312156145b6576145807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93613bb4565b90613b54565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f57610545916113c0565b614580600193613bb4565b9192901561463c57508151156145d5575090565b3b156145de5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561464f5750805190602001fd5b610dc1906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906109be565b670de0b6b3a76400008112614ab457610545905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215614a89575b73011798004d755d3c8bc8e03204cf44619e000000821215614a5c575b6147e9906064808492029302906e01855144814a7ff805980ff0084000821215614a22575b506b02df0ab5a80a22c61ab5a7008112156149ef575b693f1fce3da636ea5cf8508112156149be575b690127fa27722cc06cc5e281121561498d575b68280e60114edb805d0381121561495d575b680ebc5fb4174612111081121561493d575b6808f00f760a4b2db55d81121561490d575b6806f5f17757889379378112156148dd575b6806248f33704b2866038112156148ae575b6805c548670b9510e7ac81121561487f575b68056bc75e2d631000007ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102613b0e565b614873613ea168056bc75e2d631000008380020561485c816148458161482e8168056bc75e2d631000008a8202059960038b0501990268056bc75e2d63100000900590565b976005890501970268056bc75e2d63100000900590565b956007870501950268056bc75e2d63100000900590565b936009850501930268056bc75e2d63100000900590565b0160011b016064900590565b6148a668056bc75e2d631000006756bc75e2d631000092026805c548670b9510e7ac900590565b9201916147b3565b6148d568056bc75e2d6310000067ad78ebc5ac62000092026806248f33704b286603900590565b9201916147a1565b61490568056bc75e2d6310000068015af1d78b58c4000092026806f5f1775788937937900590565b92019161478f565b61493568056bc75e2d631000006802b5e3af16b188000092026808f00f760a4b2db55d900590565b92019161477d565b68056bc75e2d6310000092830192680ebc5fb4174612111091020561476b565b61498568056bc75e2d63100000680ad78ebc5ac6200000920268280e60114edb805d03900590565b920191614759565b6149b668056bc75e2d631000006815af1d78b58c4000009202690127fa27722cc06cc5e2900590565b920191614747565b6149e768056bc75e2d63100000682b5e3af16b188000009202693f1fce3da636ea5cf850900590565b920191614734565b614a1a68056bc75e2d631000006856bc75e2d63100000092026b02df0ab5a80a22c61ab5a700900590565b920191614721565b68ad78ebc5ac62000000915069021e19e0c9bab2400000614a5391026e01855144814a7ff805980ff0084000900590565b9201915f61470b565b906803782dace9d9000000614a806147e9926b1425982cf597cd205cef7380900590565b920190506146e6565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b20000006146c9565b614ac0614ac591613af4565b61468d565b5f039056fea26469706673582212202ab1e17a52bab7f4529bc31462345cc58ba7796edc3719b0ab0a75e303a7ce9f64736f6c634300081e0033",
  "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c806305eb5327146100545780637b8b4b951461004f57806380c4d5661461004a5763ed48907e14610045575f80fd5b6103bf565b610205565b61014c565b3461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f5760043561008f81610113565b6024359061009c82610113565b6044359060643567ffffffffffffffff811161010f576100c090369060040161013e565b6084359267ffffffffffffffff841161010f5761010b946100e86100ee95369060040161013e565b9361055d565b604080519384526020840192909252908201529081906060820190565b0390f35b5f80fd5b73ffffffffffffffffffffffffffffffffffffffff81160361010f57565b359061013c82610113565b565b908160a091031261010f5790565b3461010f576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f5760043561018881610113565b6024359061019582610113565b60443560643560a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261010f57610124359167ffffffffffffffff831161010f576101f3946101ed608494369060040161013e565b946106b9565b60408051928352602083019190915290f35b3461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f5760043561024081610113565b6024359061024d82610113565b6044359060643560843567ffffffffffffffff811161010f5761027490369060040161013e565b9073ffffffffffffffffffffffffffffffffffffffff851691604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481875afa9687156103ba57610320976103189488925f915f93610385575b50610312846102f56102ef6102eb8a611b2f565b1590565b86611b5e565b3373ffffffffffffffffffffffffffffffffffffffff8716610957565b88610d2d565b9490936113fe565b7f05499aba408f669fb848399c146fad5bd604d50b15566bdc19e81c40922fab8d73ffffffffffffffffffffffffffffffffffffffff61035f8661142e565b6040805194855260208501919091529416933392a4604080519182526020820192909252f35b9092506103aa915060603d6060116103b3575b6103a281836104d1565b810190610512565b9290505f6102d7565b503d610398565b610548565b6101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f576004356103f681610113565b60243561040281610113565b6044359160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261010f576101043567ffffffffffffffff811161010f5761045190369060040161013e565b6101243567ffffffffffffffff811161010f5761010b946100ee9461047c606493369060040161013e565b94610804565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610120810190811067ffffffffffffffff8211176104cc57604052565b610482565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104cc57604052565b9081606091031261010f57805161052881610113565b916040602083015161053981610113565b92015161054581610113565b90565b6040513d5f823e3d90fd5b3561054581610113565b94919390929473ffffffffffffffffffffffffffffffffffffffff8416906040517f2c8ce6bc000000000000000000000000000000000000000000000000000000008152606081600481865afa80156103ba5773ffffffffffffffffffffffffffffffffffffffff9488610623927fa3a2846538c60e47775faa60c6ae79b67dee6d97bb70e386ebbaf4c3a38e8b81945f905f92610695575b506106198361061061060a6102eb88611b2f565b85611b5e565b338c8616610957565b8881169a8b610aac565b9490949761069061064961064361063d8d8a809d8a61117e565b9c610553565b926113fe565b966106538c61142e565b60405194859416983397859094939260609273ffffffffffffffffffffffffffffffffffffffff6080840197168352602083015260408201520152565b0390a4565b90506106b0915060603d6060116103b3576103a281836104d1565b9190505f6105f6565b929593949091946106ca8282611458565b6107f15773ffffffffffffffffffffffffffffffffffffffff831696604051937f2c8ce6bc0000000000000000000000000000000000000000000000000000000085526060856004818c5afa80156103ba576107629589925f915f936107cc575b5061075c8461073f6102ef6102eb8b611b2f565b3373ffffffffffffffffffffffffffffffffffffffff8616610957565b886115c5565b949094937f05499aba408f669fb848399c146fad5bd604d50b15566bdc19e81c40922fab8d73ffffffffffffffffffffffffffffffffffffffff6107ae6107a88961142e565b936113fe565b60408051948552602085019190915294169333929081908101610690565b9092506107e8915060603d6060116103b3576103a281836104d1565b9290505f61072b565b505061080093919492946114a5565b9091565b94959192959390936108168188611458565b6109425773ffffffffffffffffffffffffffffffffffffffff851696604051947f2c8ce6bc0000000000000000000000000000000000000000000000000000000086526060866004818c5afa80156103ba575f965f91610917575b5096849596976108b06108b99661089361088d6102eb89611b2f565b84611b5e565b73ffffffffffffffffffffffffffffffffffffffff8c1690611916565b9889928b6115c5565b959095947fa3a2846538c60e47775faa60c6ae79b67dee6d97bb70e386ebbaf4c3a38e8b8173ffffffffffffffffffffffffffffffffffffffff8861069088610653602061090f6109098b610553565b9561142e565b9901356113fe565b6108b995969750610937915060603d6060116103b3576103a281836104d1565b919796959050610871565b5092909450610950936117d0565b9192909190565b92919082610966575b50505050565b61096f93611b69565b5f808080610960565b9081602091031261010f575190565b919082604091031261010f576020825192015190565b5f5b8381106109ae5750505f910152565b818101518382015260200161099f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936109fa8151809281875287808801910161099d565b0116010190565b610545939273ffffffffffffffffffffffffffffffffffffffff606093168252602082015281604082015201906109be565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908201809211610a6d57565b610a33565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610a6d57565b91908203918211610a6d57565b9593929091955f965f9685600191610ac66102eb82611b2f565b610cd0575b5050610ad9575b5050505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015296989190961696909492939092906020876024818b5afa9687156103ba575f97610caa575b509060409173ffffffffffffffffffffffffffffffffffffffff5f81610b678988612661565b98610ba187519a8b97889687947f5b709f170000000000000000000000000000000000000000000000000000000086521660048501610a01565b0393165af19283156103ba57610c1793602093610bc5925f92610c77575b50610a60565b9560405180809581947f70a082310000000000000000000000000000000000000000000000000000000083526004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03915afa9283156103ba57610c3d93610c37925f91610c48575b50610a9f565b90610a60565b915f80808080610ad2565b610c6a915060203d602011610c70575b610c6281836104d1565b810190610978565b5f610c31565b503d610c58565b610c9a91925060403d604011610ca3575b610c9281836104d1565b810190610987565b9050905f610bbf565b503d610c88565b604092919750610cc89060203d602011610c7057610c6281836104d1565b969091610b41565b929950975050610cfb91945073ffffffffffffffffffffffffffffffffffffffff831696878661221a565b9592989197869198998481985f14610d1f575081610d18926124fc565b5f80610acb565b610d28926124fc565b610d18565b969493929091965f975f9785600191610d486102eb82611b2f565b610f52575b5050610dc5575b50505050508310610d6157565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f5554000000604482015280606481015b0390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015296999190961697909492939092906020876024818c5afa9687156103ba575f97610f2c575b509060409173ffffffffffffffffffffffffffffffffffffffff5f81610e538988612661565b98610e8d87519a8b97889687947f5b709f170000000000000000000000000000000000000000000000000000000086521660048501610a01565b0393165af19283156103ba57610f0293602093610eb0925f92610c775750610a60565b9660405180809581947f70a082310000000000000000000000000000000000000000000000000000000083526004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03915afa9283156103ba57610f2193610c37925f91610c485750610a9f565b925f80808080610d54565b604092919750610f4a9060203d602011610c7057610c6281836104d1565b969091610e2d565b929a50985050610f7d91945073ffffffffffffffffffffffffffffffffffffffff831697888661221a565b95929991988691999a8481985f14610fa1575081610f9a926124fc565b5f80610d4d565b610faa926124fc565b610f9a565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818136030182121561010f570190565b600b111561010f57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b111561102357565b610fec565b3561054581610fe2565b5f91031261010f57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561010f57016020813591019167ffffffffffffffff821161010f57813603831361010f57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b8015150361010f57565b9081356110e081610fe2565b600b81101561102357815273ffffffffffffffffffffffffffffffffffffffff602083013561110e81610113565b166020820152606080611138611127604086018661103c565b60806040870152608086019161108c565b930135611144816110ca565b151591015290565b610545939273ffffffffffffffffffffffffffffffffffffffff606093168252602082015281604082015201906110d4565b939293608085016111976111928288610faf565b611028565b6111a081611019565b80611221575050846020936111b6935f9361267f565b925b013582106111c257565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f536c6970706167653a20494e53554646494349454e545f544f4b454e5f4f55546044820152606490fd5b806112326003929895969498611019565b0361127e575061124a5f83611279936020963061267f565b809561126b8261125c60408701610553565b61126587610553565b906127af565b61127484610553565b6124fc565b6111b8565b906112a76112a76112a15f866112c095606082019961129c8b610553565b61267f565b95610553565b73ffffffffffffffffffffffffffffffffffffffff1690565b6112d66112cf60408501610553565b9284610faf565b90803b1561010f5761131b945f8094604051978895869485937f2bdb823c0000000000000000000000000000000000000000000000000000000085526004850161114c565b03925af19182156103ba5760209261134e575b5061127961134361133e83610553565b612747565b809561127484610553565b8061135c5f611362936104d1565b80611032565b5f61132e565b90815f03918083057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1490151715610a6d57565b90670de0b6b3a7640000820291808305670de0b6b3a76400001490151715610a6d57565b81810292915f82127f8000000000000000000000000000000000000000000000000000000000000000821416610a6d578184051490151715610a6d57565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5761054590611368565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5790565b60400135159081611467575090565b6105459150611b2f565b1561147857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b6040517f6afe699800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff918216602482015291166044820152606481019190915260848101919091526108009061154f90611548906115438160a481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826104d1565b612885565b9190611471565b60208082518301019101610987565b6040519061013c610120836104d1565b91908260a091031261010f5760405160a0810181811067ffffffffffffffff8211176104cc576040526080808294803584526020810135602085015260408101356040850152606081013560608501520135910152565b92939697959091975f985f9880926001926115e26102eb83611b2f565b611744575b50505061165b575b505050505083106115fc57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f59545f4f55540000006044820152606490fd5b9173ffffffffffffffffffffffffffffffffffffffff5f816116b26116a9899a9c9d99989660409861168c88612939565b906116a16116998d612a23565b93369061156e565b924292612a7d565b50978896612c0e565b986116ec87519a8b97889687947f29910b110000000000000000000000000000000000000000000000000000000086521660048501610a01565b0393165af19081156103ba57611714935f9261171f575b5061170e9192610a60565b94610a60565b915f808080806115ef565b61170e925061173c9060403d604011610ca357610c9281836104d1565b905091611703565b73ffffffffffffffffffffffffffffffffffffffff169b5093995061176e9392509050898561221a565b91999098929190828683156117a7575061179f9173ffffffffffffffffffffffffffffffffffffffff8916906124fc565b5f80806115e7565b6117b0926124fc565b61179f565b9081606091031261010f578051916040602083015192015190565b92919073ffffffffffffffffffffffffffffffffffffffff9081604051957f22bfddd000000000000000000000000000000000000000000000000000000000602088015216602486015216604484015260648301526080608483015273ffffffffffffffffffffffffffffffffffffffff813561184c81610113565b1660a4830152602081013560c483015273ffffffffffffffffffffffffffffffffffffffff604082013561187f81610113565b1660e483015273ffffffffffffffffffffffffffffffffffffffff60608201356118a881610113565b1661010483015260808101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818236030181121561010f578261154381611517611548946119079660a06101246109509a0152610144840191016110d4565b602080825183010191016117b5565b91906119256080830183610faf565b3561192f81610fe2565b61193881611019565b8061196557506105459260019161194e84610553565b61195f602086013580923390612c92565b91612cd0565b80611971600392611019565b036119b0576105459260019161198684610553565b611997602086013580923390612c92565b61195f816119a487610553565b61126560408901610553565b73ffffffffffffffffffffffffffffffffffffffff6119ce83610553565b16611aae576119e1602083013533612c2b565b6119f36112a76112a760608501610553565b92611a006112a784610553565b611aa7576020830135935b611a1484610553565b90602085013590611a286080870187610faf565b91813b1561010f57611a6c975f94604051998a95869485937f2bdb823c0000000000000000000000000000000000000000000000000000000085526004850161114c565b03925af19182156103ba5761054594600193611a93575b5061195f61133e60408601610553565b8061135c5f611aa1936104d1565b5f611a83565b5f93611a0b565b611ad6611abd6112a784610553565b611ac960608501610553565b6020850135913390610957565b6119e1565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561010f570180359067ffffffffffffffff821161010f57602001918160051b3603831361010f57565b611b3c6040820182611adb565b9050159081611b49575090565b611b5891506060810190611adb565b90501590565b90156112a757503090565b90919273ffffffffffffffffffffffffffffffffffffffff61013c9481604051957f23b872dd000000000000000000000000000000000000000000000000000000006020880152166024860152166044840152606483015260648252611bd06084836104d1565b612dbb565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561010f570180359067ffffffffffffffff821161010f5760200191813603831361010f57565b67ffffffffffffffff81116104cc57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192611c6c82611c26565b91611c7a60405193846104d1565b82948184528183011161010f578281602093845f960137010152565b6040515f81526105456020826104d1565b81601f8201121561010f578051611cbd81611c26565b92611ccb60405194856104d1565b8184526020828401011161010f57610545916020808501910161099d565b9060808282031261010f57815192602083015192604081015192606082015167ffffffffffffffff811161010f576105459201611ca7565b6004111561010f57565b359061013c82611d21565b6004111561102357565b90611d4a82611d36565b52565b9391959492908660a0860160a087525260c0850160c08860051b87010197825f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603015b838310611e0e5750505050505094611e0091611dcd6105459697602087019073ffffffffffffffffffffffffffffffffffffffff169052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604086015284820360608601526109be565b9160808184039101526109be565b90919293949a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408a82030186528b358281121561010f5783019081357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818336030181121561010f5782602092604080611fd1611fb8611fa460019989980160608752803560608801528881013560808801528481013560a0880152611ec2611eb860608301611d2b565b60c0890190611d40565b611eee611ed160808301610131565b73ffffffffffffffffffffffffffffffffffffffff1660e0890152565b611f1b611efd60a08301610131565b73ffffffffffffffffffffffffffffffffffffffff16610100890152565b611f48611f2a60c08301610131565b73ffffffffffffffffffffffffffffffffffffffff16610120890152565b611f75611f5760e08301610131565b73ffffffffffffffffffffffffffffffffffffffff16610140890152565b6101008101356101608801526101208101356101808801526101408101356101a088015261016081019061103c565b6101806101c08801526101e087019161108c565b611fc48787018761103c565b908683038988015261108c565b9301359101529d0196019493019190611d94565b94929096959391968760a0870160a088525260c0860160c08960051b88010198825f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603015b83831061207a5750505050505091610545959691612068611e0094602088019073ffffffffffffffffffffffffffffffffffffffff169052565b604086015284820360608601526109be565b90919293949b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408b82030186528c358281121561010f5783019081357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818336030181121561010f5782602092604080612124611fb8611fa460019989980160608752803560608801528881013560808801528481013560a0880152611ec2611eb860608301611d2b565b9301359101529e019601949301919061202e565b9015612171578035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561010f570190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818136030182121561010f570190565b3561054581611d21565b929373ffffffffffffffffffffffffffffffffffffffff91959482606094608087019861220781611d36565b8752166020860152604085015216910152565b9390915f935f9361222d6112a783610553565b839761224e6122496122426080870187611bd5565b3691611c60565b612f26565b93604086019061225e8288611adb565b90506123e2575b505050606084016122768186611adb565b9050612295575b50505050906020612290920135906130f7565b841190565b9161230f915f73ffffffffffffffffffffffffffffffffffffffff8c612357878a9d9f9e9b9a806115176122eb60a06122e56122df8b9f6122d99061232198611adb565b90612138565b8061219e565b01610553565b9a8b9461230960606123036122df6122d98589611adb565b016121d1565b93611adb565b999096604051958694602086016121db565b604051998a98899788957f6122b17300000000000000000000000000000000000000000000000000000000875260048701611d4d565b0393165af19283156103ba57612290936020926123a4925f915f936123ae575b5061239861239184878061239e9697518301019101610987565b9092610a60565b99610a9f565b98610a60565b9491925f8061227d565b612391935061239e92506123d6612398913d805f833e6123ce81836104d1565b810190611ce9565b96509450612377915050565b5f949b50839a506124639399509061241c6124229273ffffffffffffffffffffffffffffffffffffffff6124158a610553565b911661301a565b86611adb565b92909161242d611c96565b90886040519c8d9687967f6122b17300000000000000000000000000000000000000000000000000000000885260048801611fe5565b03818373ffffffffffffffffffffffffffffffffffffffff8c165af19687156103ba575f5f975f996124a6575b5061249c909785610a9f565b97955f8080612265565b905061249c98506124c29197503d805f833e6123ce81836104d1565b509890979190612490565b3d156124f7573d906124de82611c26565b916124ec60405193846104d1565b82523d5f602084013e565b606090565b82158015612602575b6125fd5773ffffffffffffffffffffffffffffffffffffffff168061259b57505f80809381935af16125356124cd565b501561253d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448083019390935291815261013c91611bd06064836104d1565b505050565b503073ffffffffffffffffffffffffffffffffffffffff831614612505565b6040516080919061263283826104d1565b60608152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b919061266b612621565b926001602085015260408401526060830152565b5f73ffffffffffffffffffffffffffffffffffffffff8092604060209760809961272e575b0135906126b082610113565b6001604051998a98899788957f769f8e5d00000000000000000000000000000000000000000000000000000000875260048701928260a08501971684528d84015216604082015286606082015201520393165af19081156103ba575f91612715575090565b610545915060203d602011610c7057610c6281836104d1565b87156126a457612742888833878216611b69565b6126a4565b73ffffffffffffffffffffffffffffffffffffffff168061276757504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9081156103ba575f91612715575090565b73ffffffffffffffffffffffffffffffffffffffff1690816128355773ffffffffffffffffffffffffffffffffffffffff915016803b1561010f575f906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af180156103ba576128275750565b8061135c5f61013c936104d1565b50803b1561010f576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092525f908290602490829084905af180156103ba576128275750565b5f8091602081519101305af49061289a6124cd565b908215806128b2575b6128a957565b50805190602001fd5b5060016128a3565b519061013c82610113565b908161012091031261010f576101006128dc61155e565b91805183526020810151602084015260408101516040840152612901606082016128ba565b60608401526080810151608084015260a081015160a084015260c081015160c084015260e081015160e0840152015161010082015290565b5f610100604051612949816104af565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152015261012060405180927f794052f30000000000000000000000000000000000000000000000000000000082528173ffffffffffffffffffffffffffffffffffffffff816129e4306004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0392165afa9081156103ba575f916129fa575090565b61054591506101203d8111612a1c575b612a1481836104d1565b8101906128c5565b503d612a0a565b602073ffffffffffffffffffffffffffffffffffffffff60045f9360405194859384927f1d52edc4000000000000000000000000000000000000000000000000000000008452165af19081156103ba575f91612715575090565b92612a8e9095919492958585613143565b604083015115612bce575b612aa2836133f1565b935f945b6060850151861015612bc15780612ac2612ad49289868661343a565b509290612acf838b613b54565b610a9f565b918987818511612bab57612aee9150608001518b8561358a565b612b9d575080865114612b34578589928282525b60028911612b1f57600193612b16936135f9565b955b0194612aa6565b5060019250612b2e91506135d8565b95612b18565b5050505050505050505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536c6970706167653a20415050524f585f4558484155535445440000000000006044820152606490fd5b985095505050509250509190565b915092612bb783610a72565b6020830152612b02565b5050505050505050612b3e565b612be38351612bdd88886139f3565b90613232565b835260208301612bfe8151612bf884886132a9565b90613359565b9052612c0983613366565b612a99565b9190612c18612621565b925f602085015260408401526060830152565b503403612c3457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b90919073ffffffffffffffffffffffffffffffffffffffff1680612cbb575090503403612c3457565b81612cc557505050565b61013c923091611b69565b6040602094950173ffffffffffffffffffffffffffffffffffffffff612d1c823592612cfb84610113565b838316612d9b57612d178688955b612d1281610113565b61301a565b610553565b92612d85604051988997889687947f20e8c565000000000000000000000000000000000000000000000000000000008652600486019094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0393165af19081156103ba575f91612715575090565b612d17865f95612d09565b9081602091031261010f5751610545816110ca565b9073ffffffffffffffffffffffffffffffffffffffff612e2992165f8060405193612de76040866104d1565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1612e236124cd565b916145c1565b8051908115918215612ec3575b505015612e3f57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b612ed69250602080918301019101612da6565b5f80612e36565b91909160408184031261010f57805167ffffffffffffffff811161010f5783612f07918301611ca7565b92602082015167ffffffffffffffff811161010f576105459201611ca7565b606091606091805180612f37575050565b9193508092500160408282031261010f5760208201519160408101519067ffffffffffffffff821161010f576020612f76928160019501920101611ca7565b9103612f8f578060208061080093518301019101612edd565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9073ffffffffffffffffffffffffffffffffffffffff821680156125fd576040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316602482015290602090829060449082905afa9081156103ba575f916130c5575b506b7fffffffffffffffffffffff116130b2575050565b816130c08261013c94613629565b613733565b6130de915060203d602011610c7057610c6281836104d1565b5f61309b565b81810292918115918404141715610a6d57565b670de0b6b3a76400009161310a916130e4565b0490565b604051906080820182811067ffffffffffffffff8211176104cc576040525f6060838281528260208201528260408201520152565b92919261314e61310e565b9360a0820161315e828251111590565b61320a57613188916131709151610a9f565b9261317b848461380a565b8652602083015190613884565b6020850190808252825180158015613202575b6131d4575050816131c18460c0936131cd969551906101008501519051908a5192613905565b604087015201516139b2565b6060830152565b7fb1c4aefb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b50811561319b565b7fb2094b59000000000000000000000000000000000000000000000000000000005f5260045ffd5b908082111561323f575090565b905090565b9190915f8382019384129112908015821691151617610a6d57565b905f82670de0b6b3a7640000039212670de0b6b3a76400008312811690670de0b6b3a7640000841390151617610a6d57565b81810392915f138015828513169184121617610a6d57565b91905f90602081019081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610a6d575b80840361331657505061331184613309613304612bf894610545979851905190613244565b613b18565b905190613291565b613b4a565b808401808511610a6d5760018101809111610a6d5760011c905f61333c83895186613a06565b1215613351575061334c90610a72565b6132df565b9350926132df565b908082101561323f575090565b80516020820151109081156133db575b5061337d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e7465726e616c3a20494e56414c49445f415050524f585f504152414d53006044820152fd5b670de0b6b3a7640000915060800151115f613376565b6040810180519091901561340457505190565b61054591506135d8565b7f80000000000000000000000000000000000000000000000000000000000000008114610a6d575f0390565b909193926134479061340e565b6134608183516020860151865190604088015192614398565b5f606061347d613478846134738761139c565b613b0e565b611368565b95015192131561354c57816134736134949261139c565b670de0b6b3a764000081126135215750916135056134eb61350b936134e56134de6134d86134cd6134c760e09b9a61325f565b88613b37565b998a945b015161142e565b836113c0565b6064900590565b93613291565b5f811215613511576134fd908761454a565b945b866144b5565b946144b5565b91929190565b61351b90876144b5565b946134ff565b7fca78c8a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50916135056134eb61350b936134e56134de6134d86135826134788a61357d61357760e09e9d61325f565b8b6113c0565b6137b5565b998a946134d1565b9080821115928361359c575b50505090565b90919250670de0b6b3a76400000390670de0b6b3a76400008211610a6d57670de0b6b3a7640000916135cd916130e4565b0411155f8080613596565b602081519101518101809111610a6d5760018101809111610a6d5760011c90565b90613603916130e4565b81156136245704906020810151821015613404578051821115613404575090565b612fed565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201525f6044820181905292839291839061368c8160648101611517565b51925af16136986124cd565b81613704575b50156136a657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b8051801592508215613719575b50505f61369e565b61372c9250602080918301019101612da6565b5f80613711565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201525f92839291839061368c8160648101611517565b8115613624577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82147f8000000000000000000000000000000000000000000000000000000000000000821416610a6d570590565b608001516301e1338061381c916113c0565b907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5761384d916137b5565b905f82131561385857565b507f1ca41876000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6138c9670de0b6b3a7640000915f84125f146138fa576138c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94613bb4565b6130e4565b047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f57610545916113c0565b6138c4600194613bb4565b9193613910916130e4565b6301e1338090047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5761394790613cc4565b92670de0b6b3a76400008412613986579161397b61397683613970610545979661398096613244565b90613be2565b613beb565b613be2565b90613291565b837fca78c8a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b906139bc916130e4565b6301e1338090047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f5761054590613cc4565b61310a90670de0b6b3a7640000926130e4565b90916020820191613a18828451613291565b91613a238582613244565b935f841380613aeb575b15613a8d57613a6e61398094613473613a68613a5e613a8896613a586105459c613a73985190613244565b906113c0565b613970848b6113c0565b9761139c565b61418c565b6040613a7f8451613bc8565b93015194613291565b613b37565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964207074546f4d61726b657400000000000000000000000000006044820152fd5b505f8513613a2d565b8015613624576ec097ce7bc90715b34b9f10000000000590565b8115613624570590565b613b33670de0b6b3a764000091670d529ae9e86000006113c0565b0590565b670de0b6b3a764000091613b33916113c0565b5f811261010f5790565b90670de0b6b3a7640000810290808204670de0b6b3a76400001490151715610a6d57818101809111610a6d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610a6d578115613624570490565b5f811315613bbf5790565b6105459061340e565b6ec097ce7bc90715b34b9f10000000008115613624570590565b613b0e9061139c565b670de0b6b3a76400008114613c375780670de0b6b3a764000003905f8112670de0b6b3a76400008312811690670de0b6b3a7640000841390151617610a6d5761054591613a6e91613be2565b7fa9c8b14d000000000000000000000000000000000000000000000000000000005f5260045ffd5b15613c6657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081121580614179575b613cf790613c5f565b5f811261416557610545906806f05b59d3b2000000811261410e577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e00000001613ed76064770195e54c5dd42177f53a27172fa9ec630262827000000000925b0268056bc75e2d631000009068ad78ebc5ac620000008112156140d5575b6856bc75e2d63100000081121561408b575b682b5e3af16b18800000811215614043575b6815af1d78b58c400000811215613ffb575b680ad78ebc5ac6200000811215613fb4575b68056bc75e2d63100000811215613f6d575b6802b5e3af16b1880000811215613f26575b68015af1d78b58c40000811215613edf575b600268056bc75e2d631000008280020505600368056bc75e2d631000008383020505600468056bc75e2d631000008483020505600568056bc75e2d631000008583020505600668056bc75e2d631000008683020505600768056bc75e2d63100000878302050590600868056bc75e2d63100000888402050592600968056bc75e2d6310000089860205059468056bc75e2d63100000600a8a88028290050597613ea868056bc75e2d631000008c8b02055b600b900590565b99600c68056bc75e2d631000008d8d0205059b0101010101010101010101010268056bc75e2d63100000900590565b026064900590565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000613f209201920268056bc75e2d63100000900590565b90613df0565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000613f679201920268056bc75e2d63100000900590565b90613dde565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000613fae9201920268056bc75e2d63100000900590565b90613dcc565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000613ff59201920268056bc75e2d63100000900590565b90613dba565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000061403d9201920268056bc75e2d63100000900590565b90613da8565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000006140859201920268056bc75e2d63100000900590565b90613d96565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000006140cf9201920268056bc75e2d63100000900590565b90613d84565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001613d72565b6803782dace9d90000008112614158577ffffffffffffffffffffffffffffffffffffffffffffffffc87d253162700000001613ed760646b1425982cf597cd205cef738092613d54565b613ed76064600192613d54565b614170905f03613cc4565b61054590613af4565b5068070c1cc73b00c80000811315613cee565b5f81131561433a5780670c7d713b49da00001280614329575b1561432057670de0b6b3a7640000026ec097ce7bc90715b34b9f100000000081019081156136245761430e6143076142936142ea6142766142cd610545976ec097ce7bc90715b34b9f10000000007fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f00000000061425e990102056142b06ec097ce7bc90715b34b9f10000000008280020580968180968186614255828099026ec097ce7bc90715b34b9f1000000000900590565b9e8f6003900590565b019d026ec097ce7bc90715b34b9f1000000000900590565b9b60058d05019b026ec097ce7bc90715b34b9f1000000000900590565b9960078b050199026ec097ce7bc90715b34b9f1000000000900590565b97600989050197026ec097ce7bc90715b34b9f1000000000900590565b95600b87050195026ec097ce7bc90715b34b9f1000000000900590565b93600d85050193026ec097ce7bc90715b34b9f1000000000900590565b600f900590565b0160011b670de0b6b3a7640000900590565b6105459061468d565b50670f43fc2c04ee000081126141a5565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f7574206f6620626f756e6473000000000000000000000000000000000000006044820152fd5b90919493808212614457576143ba926143b46139709284613291565b92613244565b92670d529ae9e8600000841361441f576143db9061397b6143e09495613beb565b613244565b90670de0b6b3a764000082126143f257565b7fca78c8a4000000000000000000000000000000000000000000000000000000005f52600482905260245ffd5b837ffc68d09e000000000000000000000000000000000000000000000000000000005f52600452670d529ae9e860000060245260445ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e656761746976650000000000000000000000000000000000000000000000006044820152fd5b5f82121561453f576144e77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92613bb4565b670de0b6b3a7640000810290808204670de0b6b3a76400001490151715610a6d57811561362457047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f57610545916113c0565b6144e7600192613bb4565b614586905f8312156145b6576145807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93613bb4565b90613b54565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161010f57610545916113c0565b614580600193613bb4565b9192901561463c57508151156145d5575090565b3b156145de5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561464f5750805190602001fd5b610dc1906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906109be565b670de0b6b3a76400008112614ab457610545905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215614a89575b73011798004d755d3c8bc8e03204cf44619e000000821215614a5c575b6147e9906064808492029302906e01855144814a7ff805980ff0084000821215614a22575b506b02df0ab5a80a22c61ab5a7008112156149ef575b693f1fce3da636ea5cf8508112156149be575b690127fa27722cc06cc5e281121561498d575b68280e60114edb805d0381121561495d575b680ebc5fb4174612111081121561493d575b6808f00f760a4b2db55d81121561490d575b6806f5f17757889379378112156148dd575b6806248f33704b2866038112156148ae575b6805c548670b9510e7ac81121561487f575b68056bc75e2d631000007ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102613b0e565b614873613ea168056bc75e2d631000008380020561485c816148458161482e8168056bc75e2d631000008a8202059960038b0501990268056bc75e2d63100000900590565b976005890501970268056bc75e2d63100000900590565b956007870501950268056bc75e2d63100000900590565b936009850501930268056bc75e2d63100000900590565b0160011b016064900590565b6148a668056bc75e2d631000006756bc75e2d631000092026805c548670b9510e7ac900590565b9201916147b3565b6148d568056bc75e2d6310000067ad78ebc5ac62000092026806248f33704b286603900590565b9201916147a1565b61490568056bc75e2d6310000068015af1d78b58c4000092026806f5f1775788937937900590565b92019161478f565b61493568056bc75e2d631000006802b5e3af16b188000092026808f00f760a4b2db55d900590565b92019161477d565b68056bc75e2d6310000092830192680ebc5fb4174612111091020561476b565b61498568056bc75e2d63100000680ad78ebc5ac6200000920268280e60114edb805d03900590565b920191614759565b6149b668056bc75e2d631000006815af1d78b58c4000009202690127fa27722cc06cc5e2900590565b920191614747565b6149e768056bc75e2d63100000682b5e3af16b188000009202693f1fce3da636ea5cf850900590565b920191614734565b614a1a68056bc75e2d631000006856bc75e2d63100000092026b02df0ab5a80a22c61ab5a700900590565b920191614721565b68ad78ebc5ac62000000915069021e19e0c9bab2400000614a5391026e01855144814a7ff805980ff0084000900590565b9201915f61470b565b906803782dace9d9000000614a806147e9926b1425982cf597cd205cef7380900590565b920190506146e6565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b20000006146c9565b614ac0614ac591613af4565b61468d565b5f039056fea26469706673582212202ab1e17a52bab7f4529bc31462345cc58ba7796edc3719b0ab0a75e303a7ce9f64736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
