{
  "_format": "hh-sol-artifact-1",
  "contractName": "ActionSwapPTV3",
  "sourceName": "contracts/router/ActionSwapPTV3.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": "exactPtIn",
          "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": "swapExactPtForSy",
      "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": "exactPtIn",
          "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": "swapExactPtForToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "netTokenOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "market",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "exactSyIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minPtOut",
          "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": "guessPtOut",
          "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": "swapExactSyForPt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "netPtOut",
          "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": "minPtOut",
          "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": "guessPtOut",
          "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": "swapExactTokenForPt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "netPtOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "netSyInterm",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60808060405234601557614795908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80632a50917c146100545780633346d3a31461004f578063594a88cc1461004a5763c81f847a14610045575f80fd5b6103c9565b610312565b61015c565b346100f0576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f057600435610090816100f4565b6024359061009d826100f4565b6044356064356100ac3661011f565b91610124359467ffffffffffffffff86116100f0576100d26100d896369060040161014e565b9461055d565b604080519283526020830191909152819081015b0390f35b5f80fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100f057565b359061011d826100f4565b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c60a09101126100f057608490565b908160a09103126100f05790565b346100f05760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f057600435610197816100f4565b602435906101a4826100f4565b6044359060643560843567ffffffffffffffff81116100f0576101cb90369060040161014e565b9073ffffffffffffffffffffffffffffffffffffffff851691604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481875afa92831561030d57610276976102688861026e9681945f916102db575b5061024a6102446102408961199b565b1590565b85611a68565b9073ffffffffffffffffffffffffffffffffffffffff339116610a53565b8661109c565b949093610ed2565b7f3f5e2944826baeaed8eb77f0f74e6088a154a0fc1317f062fd984585607b473973ffffffffffffffffffffffffffffffffffffffff6102b586610e12565b6040805194855260208501919091529416933392a4604080519182526020820192909252f35b6102fd915060603d606011610306575b6102f581836104db565b81019061051c565b5090505f610230565b503d6102eb565b610552565b346100f05760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f05760043561034d816100f4565b6024359061035a826100f4565b6044359060643567ffffffffffffffff81116100f05761037e90369060040161014e565b6084359267ffffffffffffffff84116100f0576100ec946103a66103ac95369060040161014e565b93610690565b604080519384526020840192909252908201529081906060820190565b6101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f057600435610400816100f4565b60243561040c816100f4565b6044359160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126100f0576101043567ffffffffffffffff81116100f05761045b90369060040161014e565b6101243567ffffffffffffffff81116100f0576100ec946103ac94610486606493369060040161014e565b946107f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610120810190811067ffffffffffffffff8211176104d657604052565b61048c565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104d657604052565b908160609103126100f0578051610532816100f4565b9160406020830151610543816100f4565b92015161054f816100f4565b90565b6040513d5f823e3d90fd5b9295939490919461056e8282610937565b6106735773ffffffffffffffffffffffffffffffffffffffff8316966040517f2c8ce6bc0000000000000000000000000000000000000000000000000000000081526060816004818c5afa94851561030d576105e1896105e79781945f91610652575b5061024a6102446102408a61199b565b86610bc1565b949094937f3f5e2944826baeaed8eb77f0f74e6088a154a0fc1317f062fd984585607b473973ffffffffffffffffffffffffffffffffffffffff61063361062d89610e12565b93610ed2565b604080519485526020850191909152941693339290819081015b0390a4565b61066b915060603d606011610306576102f581836104db565b50505f6105d1565b5050610682939194929461099a565b9091565b3561054f816100f4565b94919390929473ffffffffffffffffffffffffffffffffffffffff8416906040517f2c8ce6bc000000000000000000000000000000000000000000000000000000008152606081600481865afa90811561030d5773ffffffffffffffffffffffffffffffffffffffff9488867fd3c1d9b397236779b29ee5b5b150c1110fc8221b6b6ec0be49c9f4860ceb20369461075b94838c5f925f946107c8575b509261074961075393946107436102408a61199b565b90611a68565b9085339116610a53565b169889610f02565b9490949761064d61078161077b6107758d8a809d8a611437565b9c610686565b92610ed2565b9661078b8c610e12565b60405194859416983397859094939260609273ffffffffffffffffffffffffffffffffffffffff6080840197168352602083015260408201520152565b610749945061075393506107ea9060603d606011610306576102f581836104db565b509490935061072d565b94959295939190936108068188610937565b6109225773ffffffffffffffffffffffffffffffffffffffff851696604051927f2c8ce6bc0000000000000000000000000000000000000000000000000000000084526060846004818c5afa801561030d578561089b916108a3965f91610901575b5073ffffffffffffffffffffffffffffffffffffffff61089361088d6102408961199b565b8c611a68565b911690611782565b809789610bc1565b959095947fd3c1d9b397236779b29ee5b5b150c1110fc8221b6b6ec0be49c9f4860ceb203673ffffffffffffffffffffffffffffffffffffffff8861064d8861078b60206108f96108f38b610686565b95610e12565b990135610ed2565b61091a915060603d606011610306576102f581836104db565b50505f610868565b50919450916109309361163c565b9192909190565b60400135159081610946575090565b61054f915061199b565b1561095757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b91908260409103126100f0576020825192015190565b6040517f40a169f900000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9182166024820152911660448201526064810191909152608481019190915261068290610a4490610a3d90610a388160a481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826104db565b611a33565b9190610950565b60208082518301019101610984565b92919082610a62575b50505050565b610a6b93611a73565b5f808080610a5c565b6040519061011d610120836104db565b91908260a09103126100f05760405160a0810181811067ffffffffffffffff8211176104d6576040526080808294803584526020810135602085015260408101356040850152606081013560608501520135910152565b6040515f815261054f6020826104db565b5f5b838110610afd5750505f910152565b8181015183820152602001610aee565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610b4981518092818752878088019101610aec565b0116010190565b61054f939273ffffffffffffffffffffffffffffffffffffffff60609316825260208201528160408201520190610b0d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908201809211610bbc57565b610b82565b909195935f965f9673ffffffffffffffffffffffffffffffffffffffff8516946040517f2c8ce6bc0000000000000000000000000000000000000000000000000000000081526060816004818a5afa93841561030d575f915f95610ded575b508093600192610c326102408361199b565b610d90575b505050610cb1575b5050505050508310610c4d57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f50545f4f5554000000604482015280606481015b0390fd5b92610d28969899959492610ce692610cde610cd6610cd0604098612559565b93612652565b933690610a84565b9242926126d5565b5092835f610cf2610adb565b938551988995869485937f5b709f1700000000000000000000000000000000000000000000000000000000855260048501610b50565b03925af190811561030d57610d4f935f92610d5b575b50610d499192610baf565b94610baf565b915f8080808080610c3f565b610d499250610d819060403d604011610d89575b610d7981836104db565b810190610984565b905091610d3e565b503d610d6f565b919b50929b50610dbb935073ffffffffffffffffffffffffffffffffffffffff915016988986612107565b919a90999091908383888415610ddd5750610dd5926123ba565b5f8080610c37565b9050610de8926123ba565b610dd5565b909450610e09915060603d606011610306576102f581836104db565b9490505f610c20565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05790565b90815f03918083057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1490151715610bbc57565b90670de0b6b3a7640000820291808305670de0b6b3a76400001490151715610bbc57565b81810292915f82127f8000000000000000000000000000000000000000000000000000000000000000821416610bbc578184051490151715610bbc57565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f90610e3c565b90939192935f945f9473ffffffffffffffffffffffffffffffffffffffff831692604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481885afa92831561030d575f93611078575b508093600193610f736102408361199b565b61101c575b50505050610f86575b505050565b91604091610fd0949596935f610f9a610adb565b938551978895869485937f29910b1100000000000000000000000000000000000000000000000000000000855260048501610b50565b03925af1801561030d5761054f925f905f92610ff8575b50610ff29192610baf565b93610baf565b610ff29250611016915060403d604011610d8957610d7981836104db565b91610fe7565b919850925073ffffffffffffffffffffffffffffffffffffffff919850611047935016958685612107565b91979096908390868415611068575061105f926123ba565b5f808080610f78565b9050611073926123ba565b61105f565b61109291935060603d606011610306576102f581836104db565b509050915f610f61565b9094929193945f955f9573ffffffffffffffffffffffffffffffffffffffff831692604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481885afa92831561030d575f93611244575b50809360019361110e6102408361199b565b6111e8575b50505050611186575b505050831061112757565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f55540000006044820152606490fd5b9160409161119a949697935f610f9a610adb565b03925af1801561030d576111bb925f905f926111c45750610d499192610baf565b915f808061111c565b610d4992506111e2915060403d604011610d8957610d7981836104db565b91610d3e565b919950925073ffffffffffffffffffffffffffffffffffffffff919950611213935016968785612107565b91989097908390868415611234575061122b926123ba565b5f808080611113565b905061123f926123ba565b61122b565b61125e91935060603d606011610306576102f581836104db565b509050915f6110fc565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81813603018212156100f0570190565b600b11156100f057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b11156112dc57565b6112a5565b3561054f8161129b565b5f9103126100f057565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156100f057016020813591019167ffffffffffffffff82116100f05781360383136100f057565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b801515036100f057565b9081356113998161129b565b600b8110156112dc57815273ffffffffffffffffffffffffffffffffffffffff60208301356113c7816100f4565b1660208201526060806113f16113e060408601866112f5565b608060408701526080860191611345565b9301356113fd81611383565b151591015290565b61054f939273ffffffffffffffffffffffffffffffffffffffff6060931682526020820152816040820152019061138d565b9392936080850161145061144b8288611268565b6112e1565b611459816112d2565b806114da5750508460209361146f935f9361283d565b925b0135821061147b57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f536c6970706167653a20494e53554646494349454e545f544f4b454e5f4f55546044820152606490fd5b806114eb60039298959694986112d2565b0361153757506115035f83611532936020963061283d565b80956115248261151560408701610686565b61151e87610686565b90612954565b61152d84610686565b6123ba565b611471565b9061156061156061155a5f866115799560608201996115558b610686565b61283d565b95610686565b73ffffffffffffffffffffffffffffffffffffffff1690565b61158f61158860408501610686565b9284611268565b90803b156100f0576115d4945f8094604051978895869485937f2bdb823c00000000000000000000000000000000000000000000000000000000855260048501611405565b03925af191821561030d57602092611607575b506115326115fc6115f783610686565b6128ec565b809561152d84610686565b806116155f61161b936104db565b806112eb565b5f6115e7565b908160609103126100f0578051916040602083015192015190565b92919073ffffffffffffffffffffffffffffffffffffffff9081604051957ffeb9d1d200000000000000000000000000000000000000000000000000000000602088015216602486015216604484015260648301526080608483015273ffffffffffffffffffffffffffffffffffffffff81356116b8816100f4565b1660a4830152602081013560c483015273ffffffffffffffffffffffffffffffffffffffff60408201356116eb816100f4565b1660e483015273ffffffffffffffffffffffffffffffffffffffff6060820135611714816100f4565b1661010483015260808101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81823603018112156100f05782610a3881610a0c610a3d946117739660a06101246109309a01526101448401910161138d565b60208082518301019101611621565b91906117916080830183611268565b3561179b8161129b565b6117a4816112d2565b806117d1575061054f926001916117ba84610686565b6117cb602086013580923390612a91565b91612acf565b806117dd6003926112d2565b0361181c5761054f926001916117f284610686565b611803602086013580923390612a91565b6117cb8161181087610686565b61151e60408901610686565b73ffffffffffffffffffffffffffffffffffffffff61183a83610686565b1661191a5761184d602083013533612a2a565b61185f61156061156060608501610686565b9261186c61156084610686565b611913576020830135935b61188084610686565b906020850135906118946080870187611268565b91813b156100f0576118d8975f94604051998a95869485937f2bdb823c00000000000000000000000000000000000000000000000000000000855260048501611405565b03925af191821561030d5761054f946001936118ff575b506117cb6115f760408601610686565b806116155f61190d936104db565b5f6118ef565b5f93611877565b61194261192961156084610686565b61193560608501610686565b6020850135913390610a53565b61184d565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100f0570180359067ffffffffffffffff82116100f057602001918160051b360383136100f057565b6119a86040820182611947565b90501590816119b5575090565b6119c491506060810190611947565b90501590565b67ffffffffffffffff81116104d657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b3d15611a2e573d90611a15826119ca565b91611a2360405193846104db565b82523d5f602084013e565b606090565b5f8091602081519101305af490611a48611a04565b90821580611a60575b611a5757565b50805190602001fd5b506001611a51565b901561054f57503090565b90919273ffffffffffffffffffffffffffffffffffffffff61011d9481604051957f23b872dd000000000000000000000000000000000000000000000000000000006020880152166024860152166044840152606483015260648252611ada6084836104db565b612bba565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100f0570180359067ffffffffffffffff82116100f0576020019181360383136100f057565b929192611b3c826119ca565b91611b4a60405193846104db565b8294818452818301116100f0578281602093845f960137010152565b81601f820112156100f0578051611b7c816119ca565b92611b8a60405194856104db565b818452602082840101116100f05761054f9160208085019101610aec565b906080828203126100f057815192602083015192604081015192606082015167ffffffffffffffff81116100f05761054f9201611b66565b600411156100f057565b359061011d82611be0565b9060048210156112dc5752565b9391959492908660a0860160a087525260c0850160c08860051b87010197825f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603015b838310611cc35750505050505094611cb591611c8261054f9697602087019073ffffffffffffffffffffffffffffffffffffffff169052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60408601528482036060860152610b0d565b916080818403910152610b0d565b90919293949a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408a82030186528b35828112156100f05783019081357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81833603018112156100f05782602092604080611e86611e6d611e5960019989980160608752803560608801528881013560808801528481013560a0880152611d77611d6d60608301611bea565b60c0890190611bf5565b611da3611d8660808301610112565b73ffffffffffffffffffffffffffffffffffffffff1660e0890152565b611dd0611db260a08301610112565b73ffffffffffffffffffffffffffffffffffffffff16610100890152565b611dfd611ddf60c08301610112565b73ffffffffffffffffffffffffffffffffffffffff16610120890152565b611e2a611e0c60e08301610112565b73ffffffffffffffffffffffffffffffffffffffff16610140890152565b6101008101356101608801526101208101356101808801526101408101356101a08801526101608101906112f5565b6101806101c08801526101e0870191611345565b611e79878701876112f5565b9086830389880152611345565b9301359101529d0196019493019190611c49565b94929096959391968760a0870160a088525260c0860160c08960051b88010198825f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603015b838310611f2f575050505050509161054f959691611f1d611cb594602088019073ffffffffffffffffffffffffffffffffffffffff169052565b60408601528482036060860152610b0d565b90919293949b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408b82030186528c35828112156100f05783019081357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81833603018112156100f05782602092604080611fd9611e6d611e5960019989980160608752803560608801528881013560808801528481013560a0880152611d77611d6d60608301611bea565b9301359101529e0196019493019190611ee3565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610bbc57565b91908203918211610bbc57565b9015612060578035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603018212156100f0570190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81813603018212156100f0570190565b3561054f81611be0565b929373ffffffffffffffffffffffffffffffffffffffff919594826060946120f687608081019a611bf5565b166020860152604085015216910152565b9390915f935f9361211a61156083610686565b839761213b61213661212f6080870187611adf565b3691611b30565b612d25565b93604086019061214b8288611947565b90506122cf575b505050606084016121638186611947565b9050612182575b5050505090602061217d92013590612ef6565b841190565b916121fc915f73ffffffffffffffffffffffffffffffffffffffff8c612244878a9d9f9e9b9a80610a0c6121d860a06121d26121cc8b9f6121c69061220e98611947565b90612027565b8061208d565b01610686565b9a8b946121f660606121f06121cc6121c68589611947565b016120c0565b93611947565b999096604051958694602086016120ca565b604051998a98899788957f6122b17300000000000000000000000000000000000000000000000000000000875260048701611c02565b0393165af192831561030d5761217d93602092612291925f915f9361229b575b5061228561227e84878061228b9697518301019101610984565b9092610baf565b9961201a565b98610baf565b9491925f8061216a565b61227e935061228b92506122c3612285913d805f833e6122bb81836104db565b810190611ba8565b96509450612264915050565b5f949b50839a506123509399509061230961230f9273ffffffffffffffffffffffffffffffffffffffff6123028a610686565b9116612e19565b86611947565b92909161231a610adb565b90886040519c8d9687967f6122b17300000000000000000000000000000000000000000000000000000000885260048801611e9a565b03818373ffffffffffffffffffffffffffffffffffffffff8c165af196871561030d575f5f975f99612393575b5061238990978561201a565b97955f8080612152565b905061238998506123af9197503d805f833e6122bb81836104db565b50989097919061237d565b821580156124bb575b610f815773ffffffffffffffffffffffffffffffffffffffff168061245957505f80809381935af16123f3611a04565b50156123fb57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448083019390935291815261011d91611ada6064836104db565b503073ffffffffffffffffffffffffffffffffffffffff8316146123c3565b519061011d826100f4565b90816101209103126100f0576101006124fc610a74565b91805183526020810151602084015260408101516040840152612521606082016124da565b60608401526080810151608084015260a081015160a084015260c081015160c084015260e081015160e0840152015161010082015290565b5f610100604051612569816104b9565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152015261012060405180927f794052f30000000000000000000000000000000000000000000000000000000082528173ffffffffffffffffffffffffffffffffffffffff81612604306004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0392165afa90811561030d575f9161261a575090565b61054f91506101203d811161263c575b61263481836104db565b8101906124e5565b503d61262a565b908160209103126100f0575190565b602073ffffffffffffffffffffffffffffffffffffffff60045f9360405194859384927f1d52edc4000000000000000000000000000000000000000000000000000000008452165af190811561030d575f916126ac575090565b61054f915060203d6020116126ce575b6126c681836104db565b810190612643565b503d6126bc565b926126e69095919492958585612f42565b604083015115612813575b6126fa836131d3565b935f945b6060850151861015612806576127168188858561321c565b5090919089878185116127f0576127339150608001518b8561336e565b6127e2575085518114612779578589928282525b600289116127645760019361275b936133dd565b955b01946126fe565b506001925061277391506133bc565b9561275d565b5050505050505050505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536c6970706167653a20415050524f585f4558484155535445440000000000006044820152606490fd5b985095505050509250509190565b9150926127fc83611fed565b6020830152612747565b5050505050505050612783565b6020830161282d8151612827875185613096565b90613136565b905261283883613148565b6126f1565b5f73ffffffffffffffffffffffffffffffffffffffff809260406020976080996128d3575b01359061286e826100f4565b6001604051998a98899788957f769f8e5d00000000000000000000000000000000000000000000000000000000875260048701928260a08501971684528d84015216604082015286606082015201520393165af190811561030d575f916126ac575090565b8715612862576128e7888833878216611a73565b612862565b73ffffffffffffffffffffffffffffffffffffffff168061290c57504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa90811561030d575f916126ac575090565b73ffffffffffffffffffffffffffffffffffffffff1690816129da5773ffffffffffffffffffffffffffffffffffffffff915016803b156100f0575f906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1801561030d576129cc5750565b806116155f61011d936104db565b50803b156100f0576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092525f908290602490829084905af1801561030d576129cc5750565b503403612a3357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b90919073ffffffffffffffffffffffffffffffffffffffff1680612aba575090503403612a3357565b81612ac457505050565b61011d923091611a73565b6040602094950173ffffffffffffffffffffffffffffffffffffffff612b1b823592612afa846100f4565b838316612b9a57612b168688955b612b11816100f4565b612e19565b610686565b92612b84604051988997889687947f20e8c565000000000000000000000000000000000000000000000000000000008652600486019094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0393165af190811561030d575f916126ac575090565b612b16865f95612b08565b908160209103126100f0575161054f81611383565b9073ffffffffffffffffffffffffffffffffffffffff612c2892165f8060405193612be66040866104db565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1612c22611a04565b9161404a565b8051908115918215612cc2575b505015612c3e57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b612cd59250602080918301019101612ba5565b5f80612c35565b9190916040818403126100f057805167ffffffffffffffff81116100f05783612d06918301611b66565b92602082015167ffffffffffffffff81116100f05761054f9201611b66565b606091606091805180612d36575050565b919350809250016040828203126100f05760208201519160408101519067ffffffffffffffff82116100f0576020612d75928160019501920101611b66565b9103612d8e578060208061068293518301019101612cdc565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9073ffffffffffffffffffffffffffffffffffffffff82168015610f81576040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316602482015290602090829060449082905afa90811561030d575f91612ec4575b506b7fffffffffffffffffffffff11612eb1575050565b81612ebf8261011d9461340d565b613517565b612edd915060203d6020116126ce576126c681836104db565b5f612e9a565b81810292918115918404141715610bbc57565b670de0b6b3a764000091612f0991612ee3565b0490565b604051906080820182811067ffffffffffffffff8211176104d6576040525f6060838281528260208201528260408201520152565b929192612f4d612f0d565b9360a08201612f5d828251111590565b61300957612f8791612f6f915161201a565b92612f7a84846135ee565b8652602083015190613668565b6020850190808252825180158015613001575b612fd357505081612fc08460c093612fcc969551906101008501519051908a51926136e9565b60408701520151613790565b6060830152565b7fb1c4aefb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b508115612f9a565b7fb2094b59000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f82670de0b6b3a7640000039212670de0b6b3a76400008312811690670de0b6b3a7640000841390151617610bbc57565b81810392915f138015828513169184121617610bbc57565b9190915f8382019384129112908015821691151617610bbc57565b906130c7670de0b6b3a76400006130c16130b96060860151604087015190613063565b855190610e94565b05613871565b91670de0b6b3a7640000830190670de0b6b3a764000082125f8512908015821691151617610bbc5761310d60206131046131139461311997613d39565b9201518461307b565b906137f5565b90613063565b6103e78102908082046103e71490151715610bbc576103e8900490565b9080821015613143575090565b905090565b80516020820151109081156131bd575b5061315f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e7465726e616c3a20494e56414c49445f415050524f585f504152414d53006044820152fd5b670de0b6b3a7640000915060800151115f613158565b604081018051909190156131e657505190565b61054f91506133bc565b7f80000000000000000000000000000000000000000000000000000000000000008114610bbc575f0390565b909193926132398183516020860151865190604088015192613dcf565b5f60606132566132518461324c87610e70565b6137eb565b610e3c565b95015192131561332d578161324c61326d92610e70565b670de0b6b3a76400008112613302575060e093926132e16132c76132ed946132c16132ba6132b46132a96132a36132e799613031565b886137f5565b9a8b945b0151610e12565b83610e94565b6064900590565b93613063565b5f8112156132f2576132d99088613f81565b955b87613eec565b95613eec565b926131f0565b929190565b6132fc9088613eec565b956132db565b7fca78c8a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b5060e093926132e16132c76132ed946132c16132ba6132b46133666132518961336161335b6132e79c613031565b8b610e94565b613599565b9a8b946132ad565b90808211159283613380575b50505090565b90919250670de0b6b3a76400000390670de0b6b3a76400008211610bbc57670de0b6b3a7640000916133b191612ee3565b0411155f808061337a565b602081519101518101809111610bbc5760018101809111610bbc5760011c90565b906133e791612ee3565b811561340857049060208101518210156131e65780518211156131e6575090565b612dec565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201525f604482018190529283929183906134708160648101610a0c565b51925af161347c611a04565b816134e8575b501561348a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b80518015925082156134fd575b50505f613482565b6135109250602080918301019101612ba5565b5f806134f5565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201525f9283929183906134708160648101610a0c565b8115613408577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82147f8000000000000000000000000000000000000000000000000000000000000000821416610bbc570590565b608001516301e1338061360091610e94565b907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761363191613599565b905f82131561363c57565b507f1ca41876000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6136ad670de0b6b3a7640000915f84125f146136de576136a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94613d42565b612ee3565b047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f91610e94565b6136a8600194613d42565b91936136f491612ee3565b6301e1338090047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761372b90613871565b92670de0b6b3a76400008412613764579161375f61375a8361375461054f97966131139661307b565b90613d39565b613d56565b613d39565b837fca78c8a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9061379a91612ee3565b6301e1338090047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f90613871565b8015613408576ec097ce7bc90715b34b9f10000000000590565b8115613408570590565b670de0b6b3a76400009161380891610e94565b0590565b1561381357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081121580613d26575b6138a49061380c565b5f8112613d125761054f906806f05b59d3b20000008112613cbb577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e00000001613a846064770195e54c5dd42177f53a27172fa9ec630262827000000000925b0268056bc75e2d631000009068ad78ebc5ac62000000811215613c82575b6856bc75e2d631000000811215613c38575b682b5e3af16b18800000811215613bf0575b6815af1d78b58c400000811215613ba8575b680ad78ebc5ac6200000811215613b61575b68056bc75e2d63100000811215613b1a575b6802b5e3af16b1880000811215613ad3575b68015af1d78b58c40000811215613a8c575b600268056bc75e2d631000008280020505600368056bc75e2d631000008383020505600468056bc75e2d631000008483020505600568056bc75e2d631000008583020505600668056bc75e2d631000008683020505600768056bc75e2d63100000878302050590600868056bc75e2d63100000888402050592600968056bc75e2d6310000089860205059468056bc75e2d63100000600a8a88028290050597613a5568056bc75e2d631000008c8b02055b600b900590565b99600c68056bc75e2d631000008d8d0205059b0101010101010101010101010268056bc75e2d63100000900590565b026064900590565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000613acd9201920268056bc75e2d63100000900590565b9061399d565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000613b149201920268056bc75e2d63100000900590565b9061398b565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000613b5b9201920268056bc75e2d63100000900590565b90613979565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000613ba29201920268056bc75e2d63100000900590565b90613967565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00000613bea9201920268056bc75e2d63100000900590565b90613955565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800000613c329201920268056bc75e2d63100000900590565b90613943565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000000613c7c9201920268056bc75e2d63100000900590565b90613931565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000000161391f565b6803782dace9d90000008112613d05577ffffffffffffffffffffffffffffffffffffffffffffffffc87d253162700000001613a8460646b1425982cf597cd205cef738092613901565b613a846064600192613901565b613d1d905f03613871565b61054f906137d1565b5068070c1cc73b00c8000081131561389b565b6137eb90610e70565b5f811315613d4d5790565b61054f906131f0565b670de0b6b3a76400008114613da75780670de0b6b3a764000003905f8112670de0b6b3a76400008312811690670de0b6b3a7640000841390151617610bbc5761054f91613da291613d39565b614116565b7fa9c8b14d000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919493808212613e8e57613df192613deb6137549284613063565b9261307b565b92670d529ae9e86000008413613e5657613e129061375f613e179495613d56565b61307b565b90670de0b6b3a76400008212613e2957565b7fca78c8a4000000000000000000000000000000000000000000000000000000005f52600482905260245ffd5b837ffc68d09e000000000000000000000000000000000000000000000000000000005f52600452670d529ae9e860000060245260445ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e656761746976650000000000000000000000000000000000000000000000006044820152fd5b5f821215613f7657613f1e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92613d42565b670de0b6b3a7640000810290808204670de0b6b3a76400001490151715610bbc57811561340857047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f91610e94565b613f1e600192613d42565b5f82121561403f57613fb37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92613d42565b670de0b6b3a7640000810290808204670de0b6b3a76400001490151715610bbc57818101809111610bbc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610bbc57811561340857047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f91610e94565b613fb3600192613d42565b919290156140c5575081511561405e575090565b3b156140675790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156140d85750805190602001fd5b610cad906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610b0d565b5f8113156142c45780670c7d713b49da000012806142b3575b156142aa57670de0b6b3a7640000026ec097ce7bc90715b34b9f100000000081019081156134085761429861429161421d61427461420061425761054f976ec097ce7bc90715b34b9f10000000007fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000006141e89901020561423a6ec097ce7bc90715b34b9f100000000082800205809681809681866141df828099026ec097ce7bc90715b34b9f1000000000900590565b9e8f6003900590565b019d026ec097ce7bc90715b34b9f1000000000900590565b9b60058d05019b026ec097ce7bc90715b34b9f1000000000900590565b9960078b050199026ec097ce7bc90715b34b9f1000000000900590565b97600989050197026ec097ce7bc90715b34b9f1000000000900590565b95600b87050195026ec097ce7bc90715b34b9f1000000000900590565b93600d85050193026ec097ce7bc90715b34b9f1000000000900590565b600f900590565b0160011b670de0b6b3a7640000900590565b61054f90614322565b50670f43fc2c04ee0000811261412f565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f7574206f6620626f756e6473000000000000000000000000000000000000006044820152fd5b670de0b6b3a764000081126147495761054f905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000082121561471e575b73011798004d755d3c8bc8e03204cf44619e0000008212156146f1575b61447e906064808492029302906e01855144814a7ff805980ff00840008212156146b7575b506b02df0ab5a80a22c61ab5a700811215614684575b693f1fce3da636ea5cf850811215614653575b690127fa27722cc06cc5e2811215614622575b68280e60114edb805d038112156145f2575b680ebc5fb417461211108112156145d2575b6808f00f760a4b2db55d8112156145a2575b6806f5f1775788937937811215614572575b6806248f33704b286603811215614543575b6805c548670b9510e7ac811215614514575b68056bc75e2d631000007ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000008183019201026137eb565b614508613a4e68056bc75e2d63100000838002056144f1816144da816144c38168056bc75e2d631000008a8202059960038b0501990268056bc75e2d63100000900590565b976005890501970268056bc75e2d63100000900590565b956007870501950268056bc75e2d63100000900590565b936009850501930268056bc75e2d63100000900590565b0160011b016064900590565b61453b68056bc75e2d631000006756bc75e2d631000092026805c548670b9510e7ac900590565b920191614448565b61456a68056bc75e2d6310000067ad78ebc5ac62000092026806248f33704b286603900590565b920191614436565b61459a68056bc75e2d6310000068015af1d78b58c4000092026806f5f1775788937937900590565b920191614424565b6145ca68056bc75e2d631000006802b5e3af16b188000092026808f00f760a4b2db55d900590565b920191614412565b68056bc75e2d6310000092830192680ebc5fb41746121110910205614400565b61461a68056bc75e2d63100000680ad78ebc5ac6200000920268280e60114edb805d03900590565b9201916143ee565b61464b68056bc75e2d631000006815af1d78b58c4000009202690127fa27722cc06cc5e2900590565b9201916143dc565b61467c68056bc75e2d63100000682b5e3af16b188000009202693f1fce3da636ea5cf850900590565b9201916143c9565b6146af68056bc75e2d631000006856bc75e2d63100000092026b02df0ab5a80a22c61ab5a700900590565b9201916143b6565b68ad78ebc5ac62000000915069021e19e0c9bab24000006146e891026e01855144814a7ff805980ff0084000900590565b9201915f6143a0565b906803782dace9d900000061471561447e926b1425982cf597cd205cef7380900590565b9201905061437b565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b200000061435e565b61475561475a916137d1565b614322565b5f039056fea2646970667358221220e4ca3e7ae3e2b598408508e0785dc404a1fdc2cae5f4d6291a0c92519a47a59964736f6c634300081e0033",
  "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c80632a50917c146100545780633346d3a31461004f578063594a88cc1461004a5763c81f847a14610045575f80fd5b6103c9565b610312565b61015c565b346100f0576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f057600435610090816100f4565b6024359061009d826100f4565b6044356064356100ac3661011f565b91610124359467ffffffffffffffff86116100f0576100d26100d896369060040161014e565b9461055d565b604080519283526020830191909152819081015b0390f35b5f80fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100f057565b359061011d826100f4565b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c60a09101126100f057608490565b908160a09103126100f05790565b346100f05760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f057600435610197816100f4565b602435906101a4826100f4565b6044359060643560843567ffffffffffffffff81116100f0576101cb90369060040161014e565b9073ffffffffffffffffffffffffffffffffffffffff851691604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481875afa92831561030d57610276976102688861026e9681945f916102db575b5061024a6102446102408961199b565b1590565b85611a68565b9073ffffffffffffffffffffffffffffffffffffffff339116610a53565b8661109c565b949093610ed2565b7f3f5e2944826baeaed8eb77f0f74e6088a154a0fc1317f062fd984585607b473973ffffffffffffffffffffffffffffffffffffffff6102b586610e12565b6040805194855260208501919091529416933392a4604080519182526020820192909252f35b6102fd915060603d606011610306575b6102f581836104db565b81019061051c565b5090505f610230565b503d6102eb565b610552565b346100f05760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f05760043561034d816100f4565b6024359061035a826100f4565b6044359060643567ffffffffffffffff81116100f05761037e90369060040161014e565b6084359267ffffffffffffffff84116100f0576100ec946103a66103ac95369060040161014e565b93610690565b604080519384526020840192909252908201529081906060820190565b6101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f057600435610400816100f4565b60243561040c816100f4565b6044359160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126100f0576101043567ffffffffffffffff81116100f05761045b90369060040161014e565b6101243567ffffffffffffffff81116100f0576100ec946103ac94610486606493369060040161014e565b946107f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610120810190811067ffffffffffffffff8211176104d657604052565b61048c565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104d657604052565b908160609103126100f0578051610532816100f4565b9160406020830151610543816100f4565b92015161054f816100f4565b90565b6040513d5f823e3d90fd5b9295939490919461056e8282610937565b6106735773ffffffffffffffffffffffffffffffffffffffff8316966040517f2c8ce6bc0000000000000000000000000000000000000000000000000000000081526060816004818c5afa94851561030d576105e1896105e79781945f91610652575b5061024a6102446102408a61199b565b86610bc1565b949094937f3f5e2944826baeaed8eb77f0f74e6088a154a0fc1317f062fd984585607b473973ffffffffffffffffffffffffffffffffffffffff61063361062d89610e12565b93610ed2565b604080519485526020850191909152941693339290819081015b0390a4565b61066b915060603d606011610306576102f581836104db565b50505f6105d1565b5050610682939194929461099a565b9091565b3561054f816100f4565b94919390929473ffffffffffffffffffffffffffffffffffffffff8416906040517f2c8ce6bc000000000000000000000000000000000000000000000000000000008152606081600481865afa90811561030d5773ffffffffffffffffffffffffffffffffffffffff9488867fd3c1d9b397236779b29ee5b5b150c1110fc8221b6b6ec0be49c9f4860ceb20369461075b94838c5f925f946107c8575b509261074961075393946107436102408a61199b565b90611a68565b9085339116610a53565b169889610f02565b9490949761064d61078161077b6107758d8a809d8a611437565b9c610686565b92610ed2565b9661078b8c610e12565b60405194859416983397859094939260609273ffffffffffffffffffffffffffffffffffffffff6080840197168352602083015260408201520152565b610749945061075393506107ea9060603d606011610306576102f581836104db565b509490935061072d565b94959295939190936108068188610937565b6109225773ffffffffffffffffffffffffffffffffffffffff851696604051927f2c8ce6bc0000000000000000000000000000000000000000000000000000000084526060846004818c5afa801561030d578561089b916108a3965f91610901575b5073ffffffffffffffffffffffffffffffffffffffff61089361088d6102408961199b565b8c611a68565b911690611782565b809789610bc1565b959095947fd3c1d9b397236779b29ee5b5b150c1110fc8221b6b6ec0be49c9f4860ceb203673ffffffffffffffffffffffffffffffffffffffff8861064d8861078b60206108f96108f38b610686565b95610e12565b990135610ed2565b61091a915060603d606011610306576102f581836104db565b50505f610868565b50919450916109309361163c565b9192909190565b60400135159081610946575090565b61054f915061199b565b1561095757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b91908260409103126100f0576020825192015190565b6040517f40a169f900000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9182166024820152911660448201526064810191909152608481019190915261068290610a4490610a3d90610a388160a481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826104db565b611a33565b9190610950565b60208082518301019101610984565b92919082610a62575b50505050565b610a6b93611a73565b5f808080610a5c565b6040519061011d610120836104db565b91908260a09103126100f05760405160a0810181811067ffffffffffffffff8211176104d6576040526080808294803584526020810135602085015260408101356040850152606081013560608501520135910152565b6040515f815261054f6020826104db565b5f5b838110610afd5750505f910152565b8181015183820152602001610aee565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610b4981518092818752878088019101610aec565b0116010190565b61054f939273ffffffffffffffffffffffffffffffffffffffff60609316825260208201528160408201520190610b0d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908201809211610bbc57565b610b82565b909195935f965f9673ffffffffffffffffffffffffffffffffffffffff8516946040517f2c8ce6bc0000000000000000000000000000000000000000000000000000000081526060816004818a5afa93841561030d575f915f95610ded575b508093600192610c326102408361199b565b610d90575b505050610cb1575b5050505050508310610c4d57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f50545f4f5554000000604482015280606481015b0390fd5b92610d28969899959492610ce692610cde610cd6610cd0604098612559565b93612652565b933690610a84565b9242926126d5565b5092835f610cf2610adb565b938551988995869485937f5b709f1700000000000000000000000000000000000000000000000000000000855260048501610b50565b03925af190811561030d57610d4f935f92610d5b575b50610d499192610baf565b94610baf565b915f8080808080610c3f565b610d499250610d819060403d604011610d89575b610d7981836104db565b810190610984565b905091610d3e565b503d610d6f565b919b50929b50610dbb935073ffffffffffffffffffffffffffffffffffffffff915016988986612107565b919a90999091908383888415610ddd5750610dd5926123ba565b5f8080610c37565b9050610de8926123ba565b610dd5565b909450610e09915060603d606011610306576102f581836104db565b9490505f610c20565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05790565b90815f03918083057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1490151715610bbc57565b90670de0b6b3a7640000820291808305670de0b6b3a76400001490151715610bbc57565b81810292915f82127f8000000000000000000000000000000000000000000000000000000000000000821416610bbc578184051490151715610bbc57565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f90610e3c565b90939192935f945f9473ffffffffffffffffffffffffffffffffffffffff831692604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481885afa92831561030d575f93611078575b508093600193610f736102408361199b565b61101c575b50505050610f86575b505050565b91604091610fd0949596935f610f9a610adb565b938551978895869485937f29910b1100000000000000000000000000000000000000000000000000000000855260048501610b50565b03925af1801561030d5761054f925f905f92610ff8575b50610ff29192610baf565b93610baf565b610ff29250611016915060403d604011610d8957610d7981836104db565b91610fe7565b919850925073ffffffffffffffffffffffffffffffffffffffff919850611047935016958685612107565b91979096908390868415611068575061105f926123ba565b5f808080610f78565b9050611073926123ba565b61105f565b61109291935060603d606011610306576102f581836104db565b509050915f610f61565b9094929193945f955f9573ffffffffffffffffffffffffffffffffffffffff831692604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481885afa92831561030d575f93611244575b50809360019361110e6102408361199b565b6111e8575b50505050611186575b505050831061112757565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f55540000006044820152606490fd5b9160409161119a949697935f610f9a610adb565b03925af1801561030d576111bb925f905f926111c45750610d499192610baf565b915f808061111c565b610d4992506111e2915060403d604011610d8957610d7981836104db565b91610d3e565b919950925073ffffffffffffffffffffffffffffffffffffffff919950611213935016968785612107565b91989097908390868415611234575061122b926123ba565b5f808080611113565b905061123f926123ba565b61122b565b61125e91935060603d606011610306576102f581836104db565b509050915f6110fc565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81813603018212156100f0570190565b600b11156100f057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b11156112dc57565b6112a5565b3561054f8161129b565b5f9103126100f057565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156100f057016020813591019167ffffffffffffffff82116100f05781360383136100f057565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b801515036100f057565b9081356113998161129b565b600b8110156112dc57815273ffffffffffffffffffffffffffffffffffffffff60208301356113c7816100f4565b1660208201526060806113f16113e060408601866112f5565b608060408701526080860191611345565b9301356113fd81611383565b151591015290565b61054f939273ffffffffffffffffffffffffffffffffffffffff6060931682526020820152816040820152019061138d565b9392936080850161145061144b8288611268565b6112e1565b611459816112d2565b806114da5750508460209361146f935f9361283d565b925b0135821061147b57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f536c6970706167653a20494e53554646494349454e545f544f4b454e5f4f55546044820152606490fd5b806114eb60039298959694986112d2565b0361153757506115035f83611532936020963061283d565b80956115248261151560408701610686565b61151e87610686565b90612954565b61152d84610686565b6123ba565b611471565b9061156061156061155a5f866115799560608201996115558b610686565b61283d565b95610686565b73ffffffffffffffffffffffffffffffffffffffff1690565b61158f61158860408501610686565b9284611268565b90803b156100f0576115d4945f8094604051978895869485937f2bdb823c00000000000000000000000000000000000000000000000000000000855260048501611405565b03925af191821561030d57602092611607575b506115326115fc6115f783610686565b6128ec565b809561152d84610686565b806116155f61161b936104db565b806112eb565b5f6115e7565b908160609103126100f0578051916040602083015192015190565b92919073ffffffffffffffffffffffffffffffffffffffff9081604051957ffeb9d1d200000000000000000000000000000000000000000000000000000000602088015216602486015216604484015260648301526080608483015273ffffffffffffffffffffffffffffffffffffffff81356116b8816100f4565b1660a4830152602081013560c483015273ffffffffffffffffffffffffffffffffffffffff60408201356116eb816100f4565b1660e483015273ffffffffffffffffffffffffffffffffffffffff6060820135611714816100f4565b1661010483015260808101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81823603018112156100f05782610a3881610a0c610a3d946117739660a06101246109309a01526101448401910161138d565b60208082518301019101611621565b91906117916080830183611268565b3561179b8161129b565b6117a4816112d2565b806117d1575061054f926001916117ba84610686565b6117cb602086013580923390612a91565b91612acf565b806117dd6003926112d2565b0361181c5761054f926001916117f284610686565b611803602086013580923390612a91565b6117cb8161181087610686565b61151e60408901610686565b73ffffffffffffffffffffffffffffffffffffffff61183a83610686565b1661191a5761184d602083013533612a2a565b61185f61156061156060608501610686565b9261186c61156084610686565b611913576020830135935b61188084610686565b906020850135906118946080870187611268565b91813b156100f0576118d8975f94604051998a95869485937f2bdb823c00000000000000000000000000000000000000000000000000000000855260048501611405565b03925af191821561030d5761054f946001936118ff575b506117cb6115f760408601610686565b806116155f61190d936104db565b5f6118ef565b5f93611877565b61194261192961156084610686565b61193560608501610686565b6020850135913390610a53565b61184d565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100f0570180359067ffffffffffffffff82116100f057602001918160051b360383136100f057565b6119a86040820182611947565b90501590816119b5575090565b6119c491506060810190611947565b90501590565b67ffffffffffffffff81116104d657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b3d15611a2e573d90611a15826119ca565b91611a2360405193846104db565b82523d5f602084013e565b606090565b5f8091602081519101305af490611a48611a04565b90821580611a60575b611a5757565b50805190602001fd5b506001611a51565b901561054f57503090565b90919273ffffffffffffffffffffffffffffffffffffffff61011d9481604051957f23b872dd000000000000000000000000000000000000000000000000000000006020880152166024860152166044840152606483015260648252611ada6084836104db565b612bba565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100f0570180359067ffffffffffffffff82116100f0576020019181360383136100f057565b929192611b3c826119ca565b91611b4a60405193846104db565b8294818452818301116100f0578281602093845f960137010152565b81601f820112156100f0578051611b7c816119ca565b92611b8a60405194856104db565b818452602082840101116100f05761054f9160208085019101610aec565b906080828203126100f057815192602083015192604081015192606082015167ffffffffffffffff81116100f05761054f9201611b66565b600411156100f057565b359061011d82611be0565b9060048210156112dc5752565b9391959492908660a0860160a087525260c0850160c08860051b87010197825f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603015b838310611cc35750505050505094611cb591611c8261054f9697602087019073ffffffffffffffffffffffffffffffffffffffff169052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60408601528482036060860152610b0d565b916080818403910152610b0d565b90919293949a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408a82030186528b35828112156100f05783019081357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81833603018112156100f05782602092604080611e86611e6d611e5960019989980160608752803560608801528881013560808801528481013560a0880152611d77611d6d60608301611bea565b60c0890190611bf5565b611da3611d8660808301610112565b73ffffffffffffffffffffffffffffffffffffffff1660e0890152565b611dd0611db260a08301610112565b73ffffffffffffffffffffffffffffffffffffffff16610100890152565b611dfd611ddf60c08301610112565b73ffffffffffffffffffffffffffffffffffffffff16610120890152565b611e2a611e0c60e08301610112565b73ffffffffffffffffffffffffffffffffffffffff16610140890152565b6101008101356101608801526101208101356101808801526101408101356101a08801526101608101906112f5565b6101806101c08801526101e0870191611345565b611e79878701876112f5565b9086830389880152611345565b9301359101529d0196019493019190611c49565b94929096959391968760a0870160a088525260c0860160c08960051b88010198825f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603015b838310611f2f575050505050509161054f959691611f1d611cb594602088019073ffffffffffffffffffffffffffffffffffffffff169052565b60408601528482036060860152610b0d565b90919293949b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408b82030186528c35828112156100f05783019081357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81833603018112156100f05782602092604080611fd9611e6d611e5960019989980160608752803560608801528881013560808801528481013560a0880152611d77611d6d60608301611bea565b9301359101529e0196019493019190611ee3565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610bbc57565b91908203918211610bbc57565b9015612060578035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603018212156100f0570190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81813603018212156100f0570190565b3561054f81611be0565b929373ffffffffffffffffffffffffffffffffffffffff919594826060946120f687608081019a611bf5565b166020860152604085015216910152565b9390915f935f9361211a61156083610686565b839761213b61213661212f6080870187611adf565b3691611b30565b612d25565b93604086019061214b8288611947565b90506122cf575b505050606084016121638186611947565b9050612182575b5050505090602061217d92013590612ef6565b841190565b916121fc915f73ffffffffffffffffffffffffffffffffffffffff8c612244878a9d9f9e9b9a80610a0c6121d860a06121d26121cc8b9f6121c69061220e98611947565b90612027565b8061208d565b01610686565b9a8b946121f660606121f06121cc6121c68589611947565b016120c0565b93611947565b999096604051958694602086016120ca565b604051998a98899788957f6122b17300000000000000000000000000000000000000000000000000000000875260048701611c02565b0393165af192831561030d5761217d93602092612291925f915f9361229b575b5061228561227e84878061228b9697518301019101610984565b9092610baf565b9961201a565b98610baf565b9491925f8061216a565b61227e935061228b92506122c3612285913d805f833e6122bb81836104db565b810190611ba8565b96509450612264915050565b5f949b50839a506123509399509061230961230f9273ffffffffffffffffffffffffffffffffffffffff6123028a610686565b9116612e19565b86611947565b92909161231a610adb565b90886040519c8d9687967f6122b17300000000000000000000000000000000000000000000000000000000885260048801611e9a565b03818373ffffffffffffffffffffffffffffffffffffffff8c165af196871561030d575f5f975f99612393575b5061238990978561201a565b97955f8080612152565b905061238998506123af9197503d805f833e6122bb81836104db565b50989097919061237d565b821580156124bb575b610f815773ffffffffffffffffffffffffffffffffffffffff168061245957505f80809381935af16123f3611a04565b50156123fb57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448083019390935291815261011d91611ada6064836104db565b503073ffffffffffffffffffffffffffffffffffffffff8316146123c3565b519061011d826100f4565b90816101209103126100f0576101006124fc610a74565b91805183526020810151602084015260408101516040840152612521606082016124da565b60608401526080810151608084015260a081015160a084015260c081015160c084015260e081015160e0840152015161010082015290565b5f610100604051612569816104b9565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152015261012060405180927f794052f30000000000000000000000000000000000000000000000000000000082528173ffffffffffffffffffffffffffffffffffffffff81612604306004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0392165afa90811561030d575f9161261a575090565b61054f91506101203d811161263c575b61263481836104db565b8101906124e5565b503d61262a565b908160209103126100f0575190565b602073ffffffffffffffffffffffffffffffffffffffff60045f9360405194859384927f1d52edc4000000000000000000000000000000000000000000000000000000008452165af190811561030d575f916126ac575090565b61054f915060203d6020116126ce575b6126c681836104db565b810190612643565b503d6126bc565b926126e69095919492958585612f42565b604083015115612813575b6126fa836131d3565b935f945b6060850151861015612806576127168188858561321c565b5090919089878185116127f0576127339150608001518b8561336e565b6127e2575085518114612779578589928282525b600289116127645760019361275b936133dd565b955b01946126fe565b506001925061277391506133bc565b9561275d565b5050505050505050505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536c6970706167653a20415050524f585f4558484155535445440000000000006044820152606490fd5b985095505050509250509190565b9150926127fc83611fed565b6020830152612747565b5050505050505050612783565b6020830161282d8151612827875185613096565b90613136565b905261283883613148565b6126f1565b5f73ffffffffffffffffffffffffffffffffffffffff809260406020976080996128d3575b01359061286e826100f4565b6001604051998a98899788957f769f8e5d00000000000000000000000000000000000000000000000000000000875260048701928260a08501971684528d84015216604082015286606082015201520393165af190811561030d575f916126ac575090565b8715612862576128e7888833878216611a73565b612862565b73ffffffffffffffffffffffffffffffffffffffff168061290c57504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa90811561030d575f916126ac575090565b73ffffffffffffffffffffffffffffffffffffffff1690816129da5773ffffffffffffffffffffffffffffffffffffffff915016803b156100f0575f906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1801561030d576129cc5750565b806116155f61011d936104db565b50803b156100f0576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092525f908290602490829084905af1801561030d576129cc5750565b503403612a3357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b90919073ffffffffffffffffffffffffffffffffffffffff1680612aba575090503403612a3357565b81612ac457505050565b61011d923091611a73565b6040602094950173ffffffffffffffffffffffffffffffffffffffff612b1b823592612afa846100f4565b838316612b9a57612b168688955b612b11816100f4565b612e19565b610686565b92612b84604051988997889687947f20e8c565000000000000000000000000000000000000000000000000000000008652600486019094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0393165af190811561030d575f916126ac575090565b612b16865f95612b08565b908160209103126100f0575161054f81611383565b9073ffffffffffffffffffffffffffffffffffffffff612c2892165f8060405193612be66040866104db565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1612c22611a04565b9161404a565b8051908115918215612cc2575b505015612c3e57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b612cd59250602080918301019101612ba5565b5f80612c35565b9190916040818403126100f057805167ffffffffffffffff81116100f05783612d06918301611b66565b92602082015167ffffffffffffffff81116100f05761054f9201611b66565b606091606091805180612d36575050565b919350809250016040828203126100f05760208201519160408101519067ffffffffffffffff82116100f0576020612d75928160019501920101611b66565b9103612d8e578060208061068293518301019101612cdc565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9073ffffffffffffffffffffffffffffffffffffffff82168015610f81576040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316602482015290602090829060449082905afa90811561030d575f91612ec4575b506b7fffffffffffffffffffffff11612eb1575050565b81612ebf8261011d9461340d565b613517565b612edd915060203d6020116126ce576126c681836104db565b5f612e9a565b81810292918115918404141715610bbc57565b670de0b6b3a764000091612f0991612ee3565b0490565b604051906080820182811067ffffffffffffffff8211176104d6576040525f6060838281528260208201528260408201520152565b929192612f4d612f0d565b9360a08201612f5d828251111590565b61300957612f8791612f6f915161201a565b92612f7a84846135ee565b8652602083015190613668565b6020850190808252825180158015613001575b612fd357505081612fc08460c093612fcc969551906101008501519051908a51926136e9565b60408701520151613790565b6060830152565b7fb1c4aefb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b508115612f9a565b7fb2094b59000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f82670de0b6b3a7640000039212670de0b6b3a76400008312811690670de0b6b3a7640000841390151617610bbc57565b81810392915f138015828513169184121617610bbc57565b9190915f8382019384129112908015821691151617610bbc57565b906130c7670de0b6b3a76400006130c16130b96060860151604087015190613063565b855190610e94565b05613871565b91670de0b6b3a7640000830190670de0b6b3a764000082125f8512908015821691151617610bbc5761310d60206131046131139461311997613d39565b9201518461307b565b906137f5565b90613063565b6103e78102908082046103e71490151715610bbc576103e8900490565b9080821015613143575090565b905090565b80516020820151109081156131bd575b5061315f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e7465726e616c3a20494e56414c49445f415050524f585f504152414d53006044820152fd5b670de0b6b3a7640000915060800151115f613158565b604081018051909190156131e657505190565b61054f91506133bc565b7f80000000000000000000000000000000000000000000000000000000000000008114610bbc575f0390565b909193926132398183516020860151865190604088015192613dcf565b5f60606132566132518461324c87610e70565b6137eb565b610e3c565b95015192131561332d578161324c61326d92610e70565b670de0b6b3a76400008112613302575060e093926132e16132c76132ed946132c16132ba6132b46132a96132a36132e799613031565b886137f5565b9a8b945b0151610e12565b83610e94565b6064900590565b93613063565b5f8112156132f2576132d99088613f81565b955b87613eec565b95613eec565b926131f0565b929190565b6132fc9088613eec565b956132db565b7fca78c8a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b5060e093926132e16132c76132ed946132c16132ba6132b46133666132518961336161335b6132e79c613031565b8b610e94565b613599565b9a8b946132ad565b90808211159283613380575b50505090565b90919250670de0b6b3a76400000390670de0b6b3a76400008211610bbc57670de0b6b3a7640000916133b191612ee3565b0411155f808061337a565b602081519101518101809111610bbc5760018101809111610bbc5760011c90565b906133e791612ee3565b811561340857049060208101518210156131e65780518211156131e6575090565b612dec565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201525f604482018190529283929183906134708160648101610a0c565b51925af161347c611a04565b816134e8575b501561348a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b80518015925082156134fd575b50505f613482565b6135109250602080918301019101612ba5565b5f806134f5565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201525f9283929183906134708160648101610a0c565b8115613408577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82147f8000000000000000000000000000000000000000000000000000000000000000821416610bbc570590565b608001516301e1338061360091610e94565b907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761363191613599565b905f82131561363c57565b507f1ca41876000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6136ad670de0b6b3a7640000915f84125f146136de576136a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94613d42565b612ee3565b047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f91610e94565b6136a8600194613d42565b91936136f491612ee3565b6301e1338090047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761372b90613871565b92670de0b6b3a76400008412613764579161375f61375a8361375461054f97966131139661307b565b90613d39565b613d56565b613d39565b837fca78c8a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9061379a91612ee3565b6301e1338090047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f90613871565b8015613408576ec097ce7bc90715b34b9f10000000000590565b8115613408570590565b670de0b6b3a76400009161380891610e94565b0590565b1561381357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081121580613d26575b6138a49061380c565b5f8112613d125761054f906806f05b59d3b20000008112613cbb577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e00000001613a846064770195e54c5dd42177f53a27172fa9ec630262827000000000925b0268056bc75e2d631000009068ad78ebc5ac62000000811215613c82575b6856bc75e2d631000000811215613c38575b682b5e3af16b18800000811215613bf0575b6815af1d78b58c400000811215613ba8575b680ad78ebc5ac6200000811215613b61575b68056bc75e2d63100000811215613b1a575b6802b5e3af16b1880000811215613ad3575b68015af1d78b58c40000811215613a8c575b600268056bc75e2d631000008280020505600368056bc75e2d631000008383020505600468056bc75e2d631000008483020505600568056bc75e2d631000008583020505600668056bc75e2d631000008683020505600768056bc75e2d63100000878302050590600868056bc75e2d63100000888402050592600968056bc75e2d6310000089860205059468056bc75e2d63100000600a8a88028290050597613a5568056bc75e2d631000008c8b02055b600b900590565b99600c68056bc75e2d631000008d8d0205059b0101010101010101010101010268056bc75e2d63100000900590565b026064900590565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000613acd9201920268056bc75e2d63100000900590565b9061399d565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000613b149201920268056bc75e2d63100000900590565b9061398b565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000613b5b9201920268056bc75e2d63100000900590565b90613979565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000613ba29201920268056bc75e2d63100000900590565b90613967565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00000613bea9201920268056bc75e2d63100000900590565b90613955565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800000613c329201920268056bc75e2d63100000900590565b90613943565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000000613c7c9201920268056bc75e2d63100000900590565b90613931565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000000161391f565b6803782dace9d90000008112613d05577ffffffffffffffffffffffffffffffffffffffffffffffffc87d253162700000001613a8460646b1425982cf597cd205cef738092613901565b613a846064600192613901565b613d1d905f03613871565b61054f906137d1565b5068070c1cc73b00c8000081131561389b565b6137eb90610e70565b5f811315613d4d5790565b61054f906131f0565b670de0b6b3a76400008114613da75780670de0b6b3a764000003905f8112670de0b6b3a76400008312811690670de0b6b3a7640000841390151617610bbc5761054f91613da291613d39565b614116565b7fa9c8b14d000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919493808212613e8e57613df192613deb6137549284613063565b9261307b565b92670d529ae9e86000008413613e5657613e129061375f613e179495613d56565b61307b565b90670de0b6b3a76400008212613e2957565b7fca78c8a4000000000000000000000000000000000000000000000000000000005f52600482905260245ffd5b837ffc68d09e000000000000000000000000000000000000000000000000000000005f52600452670d529ae9e860000060245260445ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e656761746976650000000000000000000000000000000000000000000000006044820152fd5b5f821215613f7657613f1e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92613d42565b670de0b6b3a7640000810290808204670de0b6b3a76400001490151715610bbc57811561340857047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f91610e94565b613f1e600192613d42565b5f82121561403f57613fb37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92613d42565b670de0b6b3a7640000810290808204670de0b6b3a76400001490151715610bbc57818101809111610bbc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610bbc57811561340857047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116100f05761054f91610e94565b613fb3600192613d42565b919290156140c5575081511561405e575090565b3b156140675790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156140d85750805190602001fd5b610cad906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610b0d565b5f8113156142c45780670c7d713b49da000012806142b3575b156142aa57670de0b6b3a7640000026ec097ce7bc90715b34b9f100000000081019081156134085761429861429161421d61427461420061425761054f976ec097ce7bc90715b34b9f10000000007fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000006141e89901020561423a6ec097ce7bc90715b34b9f100000000082800205809681809681866141df828099026ec097ce7bc90715b34b9f1000000000900590565b9e8f6003900590565b019d026ec097ce7bc90715b34b9f1000000000900590565b9b60058d05019b026ec097ce7bc90715b34b9f1000000000900590565b9960078b050199026ec097ce7bc90715b34b9f1000000000900590565b97600989050197026ec097ce7bc90715b34b9f1000000000900590565b95600b87050195026ec097ce7bc90715b34b9f1000000000900590565b93600d85050193026ec097ce7bc90715b34b9f1000000000900590565b600f900590565b0160011b670de0b6b3a7640000900590565b61054f90614322565b50670f43fc2c04ee0000811261412f565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f7574206f6620626f756e6473000000000000000000000000000000000000006044820152fd5b670de0b6b3a764000081126147495761054f905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000082121561471e575b73011798004d755d3c8bc8e03204cf44619e0000008212156146f1575b61447e906064808492029302906e01855144814a7ff805980ff00840008212156146b7575b506b02df0ab5a80a22c61ab5a700811215614684575b693f1fce3da636ea5cf850811215614653575b690127fa27722cc06cc5e2811215614622575b68280e60114edb805d038112156145f2575b680ebc5fb417461211108112156145d2575b6808f00f760a4b2db55d8112156145a2575b6806f5f1775788937937811215614572575b6806248f33704b286603811215614543575b6805c548670b9510e7ac811215614514575b68056bc75e2d631000007ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000008183019201026137eb565b614508613a4e68056bc75e2d63100000838002056144f1816144da816144c38168056bc75e2d631000008a8202059960038b0501990268056bc75e2d63100000900590565b976005890501970268056bc75e2d63100000900590565b956007870501950268056bc75e2d63100000900590565b936009850501930268056bc75e2d63100000900590565b0160011b016064900590565b61453b68056bc75e2d631000006756bc75e2d631000092026805c548670b9510e7ac900590565b920191614448565b61456a68056bc75e2d6310000067ad78ebc5ac62000092026806248f33704b286603900590565b920191614436565b61459a68056bc75e2d6310000068015af1d78b58c4000092026806f5f1775788937937900590565b920191614424565b6145ca68056bc75e2d631000006802b5e3af16b188000092026808f00f760a4b2db55d900590565b920191614412565b68056bc75e2d6310000092830192680ebc5fb41746121110910205614400565b61461a68056bc75e2d63100000680ad78ebc5ac6200000920268280e60114edb805d03900590565b9201916143ee565b61464b68056bc75e2d631000006815af1d78b58c4000009202690127fa27722cc06cc5e2900590565b9201916143dc565b61467c68056bc75e2d63100000682b5e3af16b188000009202693f1fce3da636ea5cf850900590565b9201916143c9565b6146af68056bc75e2d631000006856bc75e2d63100000092026b02df0ab5a80a22c61ab5a700900590565b9201916143b6565b68ad78ebc5ac62000000915069021e19e0c9bab24000006146e891026e01855144814a7ff805980ff0084000900590565b9201915f6143a0565b906803782dace9d900000061471561447e926b1425982cf597cd205cef7380900590565b9201905061437b565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b200000061435e565b61475561475a916137d1565b614322565b5f039056fea2646970667358221220e4ca3e7ae3e2b598408508e0785dc404a1fdc2cae5f4d6291a0c92519a47a59964736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
