{
  "contractName": "CERTFEngine",
  "abi": [
    {
      "inputs": [],
      "name": "MAX_CYCLE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_EVENT_SCHEDULE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ONE_POINT_ZERO",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PRECISION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "eomc",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "enum S",
              "name": "s",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IPS",
          "name": "cycle",
          "type": "tuple"
        }
      ],
      "name": "adjustEndOfMonthConvention",
      "outputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfCoupon",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CERTFTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "segmentStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "segmentEnd",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "computeCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "bdc",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "computeEventTimeForEvent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfCoupon",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CERTFTerms",
          "name": "terms",
          "type": "tuple"
        }
      ],
      "name": "computeInitialState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfCoupon",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CERTFTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "lastScheduleTime",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "computeNextCyclicEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfCoupon",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CERTFTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "segmentStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "segmentEnd",
          "type": "uint256"
        }
      ],
      "name": "computeNonCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfCoupon",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CERTFTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computePayoffForEvent",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfCoupon",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CERTFTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computeStateForEvent",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractType",
      "outputs": [
        {
          "internalType": "enum ContractType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "decodeEvent",
      "outputs": [
        {
          "internalType": "enum EventType",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "scheduleTime",
          "type": "uint256"
        }
      ],
      "name": "encodeEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "getEpochOffset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfCoupon",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CERTFTerms",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "name": "isEventScheduled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftCalcTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftEventTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061389b806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063c40c5a98116100ad578063ebbf552611610071578063ebbf55261461025c578063edc0465f14610206578063f52355861461027c578063f5586e051461028f578063ffcbfc65146102a257610121565b8063c40c5a9814610206578063cb2ef6f71461020e578063d115612f14610223578063e05a66e014610236578063e726d6801461024957610121565b80636f37e55b116100f45780636f37e55b146101a257806372540003146101aa578063811322fb146101cb578063aaf5eb68146101de578063bccf8f31146101e657610121565b8063179331f3146101265780631a2e165d1461014f57806334a64ea21461016f5780636021c23b14610182575b600080fd5b610139610134366004612b3e565b6102b5565b60405161014691906130c7565b60405180910390f35b61016261015d366004612a76565b610385565b60405161014691906130aa565b61016261017d366004612c29565b6103ac565b610195610190366004612c6c565b61060b565b604051610146919061305b565b61016261078b565b6101bd6101b8366004612a5e565b610797565b6040516101469291906130d5565b6101626101d9366004612b7c565b6107c0565b6101626107d6565b6101f96101f4366004612bc6565b6107db565b6040516101469190613714565b610162610839565b61021661083e565b60405161014691906130b3565b610195610231366004612ca2565b610843565b610162610244366004612b9b565b610d85565b610162610257366004613038565b610da5565b61026f61026a366004612abc565b610ef8565b604051610146919061309f565b6101f961028a366004612be2565b610f03565b61016261029d366004613038565b610f3c565b6101626102b0366004612be2565b610fa7565b600060018460018111156102c557fe5b1415610341576102d48361106b565b6102dd8461108d565b14801561032c57506002826020015160058111156102f757fe5b1480610312575060038260200151600581111561031057fe5b145b8061032c575060048260200151600581111561032a57fe5b145b156103395750600161037e565b50600061037e565b600084600181111561034f57fe5b141561035d5750600061037e565b60405162461bcd60e51b8152600401610375906135c4565b60405180910390fd5b9392505050565b60008061039186610797565b9150506103a081868686610da5565b9150505b949350505050565b6000601582601c8111156103bc57fe5b141561042557610200840135156104255760006104016103e53687900387016105a08801612f05565b6103f560c0880160a08901612b22565b8761020001358761109c565b90508061041257506000905061037e565b61041d601582610d85565b91505061037e565b601682601c81111561043357fe5b14156104a157610200840135156104a157600061045c6103e53687900387016105a08801612f05565b90508061046d57506000905061037e565b600061048b6104853688900388016103808901612f20565b836110fc565b9050610498601582610d85565b9250505061037e565b601782601c8111156104af57fe5b1415610510576101c0840135156105105760006104f46104d83687900387016104a08801612f05565b6104e860c0880160a08901612b22565b876101c001358761109c565b90508061050557506000905061037e565b61041d601782610d85565b601882601c81111561051e57fe5b141561057d576101c08401351561057d5760006105476104d83687900387016104a08801612f05565b90508061055857506000905061037e565b60006105706104853688900388016103808901612f20565b9050610498601882610d85565b601a82601c81111561058b57fe5b1415610601576101c0840135156106015760006105b46104d83687900387016104a08801612f05565b9050806105c557506000905061037e565b8461018001358114156105dc57506000905061037e565b60006105f46104853688900388016104408901612f20565b9050610498601a82610d85565b5060009392505050565b60606106156127fe565b60006101a08601351561066057610632866101a001358686611228565b15610660576106476001876101a00135610d85565b828261ffff166078811061065757fe5b60200201526001015b610160860135156106a95761067b8661016001358686611228565b156106a9576106906002876101600135610d85565b828261ffff16607881106106a057fe5b60200201526001015b610180860135156106f7576106c48661018001358686611228565b1515600114156106f7576106de6014876101800135610d85565b828261ffff16607881106106ee57fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561071457600080fd5b5060405190808252806020026020018201604052801561073e578160200160208202803683370190505b50905060005b8261ffff168110156107805783816078811061075c57fe5b602002015182828151811061076d57fe5b6020908102919091010152600101610744565b509695505050505050565b670de0b6b3a764000081565b6000808060f884901c601c8111156107ab57fe5b92505067ffffffffffffffff83169050915091565b600081601c8111156107ce57fe5b90505b919050565b601281565b6107e361281d565b6107eb61281d565b600061020082018190526101e08201819052670de0b6b3a764000061024083018190526102608301526101a084013560c0830152610220820181905281526101409092013560208301525090565b607881565b601290565b606061084d6127fe565b6000601584601c81111561085d57fe5b14156109705761020087013515610970576108766127fe565b6108da88610200013560008a6101800135116108925787610899565b8961018001355b6108ac368c90038c016105a08d01612f05565b6108bc60c08d0160a08e01612b22565b60008d6101800135116108d05760006108d3565b60015b8c8c611257565b905060005b60788160ff16101561096d57818160ff16607881106108fa57fe5b60200201516109085761096d565b610926828260ff166078811061091a57fe5b60200201518989611228565b61092f57610965565b61094d6015838360ff166078811061094357fe5b6020020151610d85565b84846078811061095957fe5b60200201526001909201915b6001016108df565b50505b601684601c81111561097e57fe5b1415610a585761020087013515610a58576109976127fe565b6109b388610200013560008a6101800135116108925787610899565b905060005b60788160ff161015610a5557818160ff16607881106109d357fe5b60200201516109e157610a55565b6000610a126109f9368c90038c016103808d01612f20565b848460ff1660788110610a0857fe5b60200201516110fc565b9050610a1f818a8a611228565b610a295750610a4d565b610a34601582610d85565b858560788110610a4057fe5b6020020152506001909201915b6001016109b8565b50505b601784601c811115610a6657fe5b1415610b35576101c087013515610b3557610a7f6127fe565b610ab5886101c0013560008a610180013511610a9b5787610aa2565b8961018001355b6108ac368c90038c016104a08d01612f05565b905060005b60788160ff161015610b3257818160ff1660788110610ad557fe5b6020020151610ae357610b32565b610af5828260ff166078811061091a57fe5b610afe57610b2a565b610b126017838360ff166078811061094357fe5b848460788110610b1e57fe5b60200201526001909201915b600101610aba565b50505b601884601c811115610b4357fe5b1415610c04576101c087013515610c0457610b5c6127fe565b610b78886101c0013560008a610180013511610a9b5787610aa2565b905060005b60788160ff161015610c0157818160ff1660788110610b9857fe5b6020020151610ba657610c01565b6000610bbe6109f9368c90038c016103808d01612f20565b9050610bcb818a8a611228565b610bd55750610bf9565b610be0601882610d85565b858560788110610bec57fe5b6020020152506001909201915b600101610b7d565b50505b601a84601c811115610c1257fe5b1415610cf8576101c087013515610cf857610c2b6127fe565b610c47886101c0013560008a610180013511610a9b5787610aa2565b905060005b60788160ff161015610cf557818160ff1660788110610c6757fe5b6020020151610c7557610cf5565b886101800135828260ff1660788110610c8a57fe5b60200201511415610c9a57610ced565b6000610cb26109f9368c90038c016104408d01612f20565b9050610cbf818a8a611228565b610cc95750610ced565b610cd4601a82610d85565b858560788110610ce057fe5b6020020152506001909201915b600101610c4c565b50505b60608167ffffffffffffffff81118015610d1157600080fd5b50604051908082528060200260200182016040528015610d3b578160200160208202803683370190505b50905060005b82811015610d7957838160788110610d5557fe5b6020020151828281518110610d6657fe5b6020908102919091010152600101610d41565b50979650505050505050565b60008160f884601c811115610d9657fe5b60ff16901b1790505b92915050565b600081851415610db65750836103a4565b6001846008811115610dc457fe5b1480610ddb57506003846008811115610dd957fe5b145b15610df157610dea858461143c565b90506103a4565b6002846008811115610dff57fe5b1480610e1657506004846008811115610e1457fe5b145b15610e5a576000610e27868561143c565b9050610e3286611498565b610e3b82611498565b1415610e485790506103a4565b610e5286856114af565b9150506103a4565b6005846008811115610e6857fe5b1480610e7f57506007846008811115610e7d57fe5b145b15610e8e57610dea85846114af565b6006846008811115610e9c57fe5b1480610eb357506008846008811115610eb157fe5b145b15610eef576000610ec486856114af565b9050610ecf86611498565b610ed882611498565b1415610ee55790506103a4565b610e52868561143c565b50929392505050565b600195945050505050565b610f0b61281d565b610f33610f1d36879003870187612cee565b610f2c36879003870187612f3b565b85856114fd565b95945050505050565b60006003846008811115610f4c57fe5b1480610f6357506004846008811115610f6157fe5b145b80610f7957506007846008811115610f7757fe5b145b80610f8f57506008846008811115610f8d57fe5b145b15610f9b5750836103a4565b610f3385858585610da5565b600080610fbc61012087016101008801612a43565b6001600160a01b0316141580156110065750610fe061012086016101008701612a43565b6001600160a01b0316610ffa610100870160e08801612a43565b6001600160a01b031614155b1561104357610dea8261103761102136899003890189612cee565b61103036899003890189612f3b565b8787611677565b9063ffffffff6117dc16565b610f3361105536879003870187612cee565b61106436879003870187612f3b565b8585611677565b6000808061107e62015180855b0461187a565b50915091506103a48282611910565b60006103a46201518083611078565b606084015160009015806110ae575081155b156110ba5750816103a4565b60016110c78585886102b5565b60018111156110d257fe5b146110e8576110e385836001611996565b610f33565b610f336110f786846001611996565b611ac7565b600080808460200151600581111561111057fe5b141561113057835161112990849063ffffffff611b0016565b905061037e565b60018460200151600581111561114257fe5b141561115e57835161112990849060070263ffffffff611b0016565b60028460200151600581111561117057fe5b141561118957835161112990849063ffffffff611b1516565b60038460200151600581111561119b57fe5b14156111b757835161112990849060030263ffffffff611b1516565b6004846020015160058111156111c957fe5b14156111e557835161112990849060060263ffffffff611b1516565b6005846020015160058111156111f757fe5b141561121057835161112990849063ffffffff611b8f16565b60405162461bcd60e51b815260040161037590613567565b60008183111561123a5750600061037e565b83831115801561124a5750818411155b156106015750600161037e565b61125f6127fe565b6112676127fe565b60608701516000906112cf5761127e8a8686611228565b15611299578982826078811061129057fe5b60200201526001015b6112a4898686611228565b156112c757600186151514156112c757888282607881106112c157fe5b60200201525b509050611431565b896000806112de8a848d6102b5565b90505b8b83101561136e576112f4838989611228565b1561133257607684106113195760405162461bcd60e51b815260040161037590613140565b8285856078811061132657fe5b60200201526001909301925b60019182019181600181111561134457fe5b14611359576113548b8e84611996565b611367565b6113676110f78c8f85611996565b92506112e1565b6001891515141561139c576113848c8989611228565b1561139c578b85856078811061139657fe5b60200201525b6000841180156113b957506113b985600186036078811061091a57fe5b156114295760008b6040015160018111156113d057fe5b1480156113dd5750600184115b80156113e95750828c14155b15611429578484607881106113fa57fe5b602002015185600186036078811061140e57fe5b602002015284846078811061141f57fe5b6020020160008152505b509293505050505b979650505050505050565b6000600182600181111561144c57fe5b14156114915761145b83611bb6565b600614156114755761146e836002611b00565b9050610d9f565b61147e83611bb6565b600714156114915761146e836001611b00565b5090919050565b60006114a76201518083611078565b509392505050565b600060018260018111156114bf57fe5b1415611491576114ce83611bb6565b600614156114e15761146e836001611bc9565b6114ea83611bb6565b600714156114915761146e836002611bc9565b61150561281d565b60008061151185610797565b9092509050600182601c81111561152457fe5b141561153f5761153687878387611bde565b925050506103a4565b600282601c81111561154d57fe5b141561155f5761153687878387611c01565b601582601c81111561156d57fe5b141561157f5761153687878387611c15565b601682601c81111561158d57fe5b141561159f5761153687878387611caa565b601782601c8111156115ad57fe5b14156115bf5761153687878387611cc6565b601a82601c8111156115cd57fe5b14156115df5761153687878387611d0d565b601882601c8111156115ed57fe5b14156115ff5761153687878387611d26565b601182601c81111561160d57fe5b141561161f5761153687878387611d95565b601482601c81111561162d57fe5b141561163f5761153687878387611db8565b600b82601c81111561164d57fe5b141561165f5761153687878387611dd3565b60405162461bcd60e51b815260040161037590613673565b600080600061168585610797565b9092509050600182601c81111561169857fe5b14156116a9576000925050506103a4565b601582601c8111156116b757fe5b14156116c8576000925050506103a4565b601782601c8111156116d657fe5b14156116e7576000925050506103a4565b601a82601c8111156116f557fe5b1415611706576000925050506103a4565b601482601c81111561171457fe5b1415611725576000925050506103a4565b600b82601c81111561173357fe5b1415611744576000925050506103a4565b600282601c81111561175257fe5b14156117645761153687878387611ebe565b601682601c81111561177257fe5b14156117845761153687878387611ef7565b601882601c81111561179257fe5b14156117a45761153687878387611f16565b601182601c8111156117b257fe5b14156117c45761153687878387611f35565b60405162461bcd60e51b8152600401610375906131dc565b60008215806117e9575081155b156117f657506000610d9f565b8260001914801561180a5750600160ff1b82145b156118275760405162461bcd60e51b81526004016103759061339e565b8282028284828161183457fe5b05146118525760405162461bcd60e51b81526004016103759061339e565b670de0b6b3a76400008105806103a45760405162461bcd60e51b8152600401610375906132b7565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816118d157fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806119215750816003145b8061192c5750816005145b806119375750816007145b806119425750816008145b8061194d575081600a145b80611958575081600c145b156119655750601f610d9f565b816002146119755750601e610d9f565b61197e83611f54565b61198957601c61198c565b601d5b60ff169392505050565b60008080856020015160058111156119aa57fe5b14156119c5578451610dea908590850263ffffffff611b0016565b6001856020015160058111156119d757fe5b14156119f5578451610dea908590850260070263ffffffff611b0016565b600285602001516005811115611a0757fe5b1415611a22578451610dea908590850263ffffffff611b1516565b600385602001516005811115611a3457fe5b1415611a52578451610dea908590850260030263ffffffff611b1516565b600485602001516005811115611a6457fe5b1415611a82578451610dea908590850260060263ffffffff611b1516565b600585602001516005811115611a9457fe5b1415611aaf578451610dea908590850263ffffffff611b8f16565b60405162461bcd60e51b81526004016103759061318e565b600080600080611ad685611f79565b919450925090506000611ae98484611910565b9050611af6848483611f97565b9695505050505050565b620151808102820182811015610d9f57600080fd5b6000808080611b276201518087611078565b600c918801600019810183810494909401965094509250900660010191506000611b518484611910565b905080821115611b5f578091505b62015180870662015180611b74868686611fb1565b0201945086851015611b8557600080fd5b5050505092915050565b6000808080611ba16201518087611078565b9187019450925090506000611b518484611910565b6007620151809091046003010660010190565b620151808102820382811115610d9f57600080fd5b611be661281d565b50506102609290920151610200820152602081019190915290565b611c0961281d565b50506020820152919050565b611c1d61281d565b60018560c001516003811115611c2f57fe5b1415611c9757611c90856102a00151611037876102200151611037611c678960c001518b608001518c602001518d6101800151610f3c565b611c80898c608001518d602001518e6101800151610f3c565b8b606001518c610180015161202d565b6102208501525b505060c082018190526020820152919050565b611cb261281d565b505060006102208301526020820152919050565b611cce61281d565b611cfb8461026001516110378661024001516110378961022001518760001c6117dc90919063ffffffff16565b6101c085015250506020820152919050565b611d1561281d565b506101e08301526020820152919050565b611d2e61281d565b6101e0840151610200850151611d499163ffffffff61212a16565b61020085015260006101e085018190526101c0850152602084018390526060840151831415611d7b5760048452611d8c565b8360a00151831415611d8c57600584525b50919392505050565b611d9d61281d565b5050600061020083015260a082018190526020820152919050565b611dc061281d565b5050606082018190526020820152919050565b611ddb61281d565b60008460400151600014611df3578460400151611e0c565b611e0c8487608001518860200151896101800151610da5565b6102c087015160400151909150839060009015611e47576000611e34896102c00151856110fc565b9050808311611e4557600180895291505b505b876102e00151604001518015611e5b575080155b15611e8a576000611e71896102e00151856110fc565b9050808311611e835760028852611e88565b600388525b505b6040870151611eb257611eac8689608001518a602001518b6101800151610da5565b60408801525b50949695505050505050565b6000611edd8561024001518561020001516117dc90919063ffffffff16565b611eea8660400151612170565b60000b0295945050505050565b6000611edd8461022001518561020001516117dc90919063ffffffff16565b6000611edd846101c00151856101e001516117dc90919063ffffffff16565b6000611edd846101c001518561020001516117dc90919063ffffffff16565b600060048206158015611f6957506064820615155b806107ce57505061019090061590565b60008080611f8a6201518085611078565b9196909550909350915050565b600062015180611fa8858585611fb1565b02949350505050565b60006107b2841015611fc257600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281611ffe57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b60008484101561204f5760405162461bcd60e51b815260040161037590613493565b600083600581111561205d57fe5b141561206d57610dea8585612234565b600183600581111561207b57fe5b141561208b57610dea8585612354565b600283600581111561209957fe5b14156120a957610dea858561237f565b60048360058111156120b757fe5b14156120c757610dea858561239e565b60038360058111156120d557fe5b14156120e657610dea85858461245f565b60058360058111156120f457fe5b14156121125760405162461bcd60e51b8152600401610375906133e5565b60405162461bcd60e51b81526004016103759061322b565b600081830381831280159061213f5750838113155b80612154575060008312801561215457508381135b61037e5760405162461bcd60e51b81526004016103759061362f565b60008082600c81111561217f57fe5b141561218d575060016107d1565b600182600c81111561219b57fe5b14156121aa57506000196107d1565b600682600c8111156121b857fe5b14156121c6575060016107d1565b600782600c8111156121d457fe5b14156121e357506000196107d1565b600282600c8111156121f157fe5b14156121ff575060016107d1565b600382600c81111561220d57fe5b141561221c57506000196107d1565b60405162461bcd60e51b81526004016103759061334a565b60008061224084612535565b9050600061224d84612535565b9050600061225a8661254d565b6122665761016d61226a565b61016e5b61ffff1690508183141561229c5761229281612286888861256a565b9063ffffffff61258516565b9350505050610d9f565b60006122a78661254d565b6122b35761016d6122b7565b61016e5b61ffff16905060006122e8836122868a6122e36122db8a600163ffffffff61264116565b600180611f97565b61256a565b90506000612305836122866122ff88600180611f97565b8b61256a565b905061234761232b600161231f888a63ffffffff61266616565b9063ffffffff61266616565b61233b848463ffffffff6126a816565b9063ffffffff6126a816565b9998505050505050505050565b600061037e61016861228662015180612373868863ffffffff61266616565b9063ffffffff6126ee16565b600061037e61016d61228662015180612373868863ffffffff61266616565b60008060008060008060006123b289611f79565b9750955093506123c188611f79565b945092509050601f8614156123d557601e95505b82601f14156123e357601e92505b60006123f5848863ffffffff61212a16565b90506000612409848863ffffffff61212a16565b9050600061241d848863ffffffff61212a16565b905061244f6101686122868561233b61243d87601e63ffffffff61273016565b61233b8761016863ffffffff61273016565b9c9b505050505050505050505050565b60008060008060008060006124738a611f79565b97509550935061248289611f79565b9450925090506124918a61106b565b86141561249d57601e95505b87891480156124ac5750816002145b1580156124c057506124bd8961106b565b83145b156124ca57601e92505b60006124dc848863ffffffff61212a16565b905060006124f0848863ffffffff61212a16565b90506000612504848863ffffffff61212a16565b90506125246101686122868561233b61243d87601e63ffffffff61273016565b9d9c50505050505050505050505050565b60006125446201518083611078565b50909392505050565b60008061255d6201518084611078565b5050905061037e81611f54565b60008183111561257957600080fd5b50620151809190030490565b6000816125a45760405162461bcd60e51b8152600401610375906136d0565b826125b157506000610d9f565b670de0b6b3a7640000838102908482816125c757fe5b05146125e55760405162461bcd60e51b815260040161037590613521565b826000191480156125f95750600160ff1b84145b156126165760405162461bcd60e51b815260040161037590613521565b600083828161262157fe5b059050806103a45760405162461bcd60e51b815260040161037590613442565b60008282018381101561037e5760405162461bcd60e51b815260040161037590613280565b600061037e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279b565b60008282018183128015906126bd5750838112155b806126d257506000831280156126d257508381125b61037e5760405162461bcd60e51b815260040161037590613309565b600061037e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127c7565b60008261273f57506000610d9f565b826000191480156127535750600160ff1b82145b156127705760405162461bcd60e51b8152600401610375906134da565b8282028284828161277d57fe5b051461037e5760405162461bcd60e51b8152600401610375906134da565b600081848411156127bf5760405162461bcd60e51b815260040161037591906130ed565b505050900390565b600081836127e85760405162461bcd60e51b815260040161037591906130ed565b5060008385816127f457fe5b0495945050505050565b60405180610f0001604052806078906020820280368337509192915050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b0381168114610d9f57600080fd5b803560098110610d9f57600080fd5b8035610d9f81613831565b8035610d9f8161383e565b8035600d8110610d9f57600080fd5b803560138110610d9f57600080fd5b803560048110610d9f57600080fd5b60006107208284031215612932578081fd5b50919050565b600060808284031215612949578081fd5b61295360806137f9565b9050813581526020820135602082015260408201356129718161384b565b604082015260608201356129848161384b565b606082015292915050565b6000608082840312156129a0578081fd5b6129aa60806137f9565b90508135815260208201356129be8161383e565b602082015260408201356129d181613831565b6040820152606082013561298481613820565b6000606082840312156129f5578081fd5b6129ff60606137f9565b9050813581526020820135612a138161383e565b60208201526040820135612a2681613820565b604082015292915050565b60006102808284031215612932578081fd5b600060208284031215612a54578081fd5b61037e83836128b7565b600060208284031215612a6f578081fd5b5035919050565b60008060008060808587031215612a8b578283fd5b84359350612a9c86602087016128ce565b92506040850135612aac81613831565b9396929550929360600135925050565b6000806000806000610c608688031215612ad4578283fd5b85359450612ae58760208801612920565b9350612af5876107408801612a31565b92506109c0860135612b0681613820565b9150612b16876109e08801612a31565b90509295509295909350565b600060208284031215612b33578081fd5b813561037e81613831565b600080600060c08486031215612b52578081fd5b8335612b5d81613831565b925060208401359150612b73856040860161298f565b90509250925092565b600060208284031215612b8d578081fd5b8135601d811061037e578182fd5b60008060408385031215612bad578182fd5b8235612bb881613858565b946020939093013593505050565b60006107208284031215612bd8578081fd5b61037e8383612920565b6000806000806109e08587031215612bf8578182fd5b612c028686612920565b9350612c12866107208701612a31565b93969395505050506109a0820135916109c0013590565b60008060006107608486031215612c3e578081fd5b612c488585612920565b92506107208401359150610740840135612c6181613858565b809150509250925092565b60008060006107608486031215612c81578081fd5b612c8b8585612920565b956107208501359550610740909401359392505050565b6000806000806107808587031215612cb8578182fd5b612cc28686612920565b935061072085013592506107408501359150610760850135612ce381613858565b939692955090935050565b60006107208284031215612d00578081fd5b612d0b6104006137f9565b612d158484612902565b8152612d2484602085016128dd565b6020820152612d3684604085016128f3565b6040820152612d4884606085016128e8565b6060820152612d5a84608085016128ce565b6080820152612d6c8460a085016128dd565b60a0820152612d7e8460c08501612911565b60c0820152612d908460e085016128b7565b60e0820152610100612da4858286016128b7565b9082015261012083810135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013590820152610260808401359082015261028080840135908201526102a080840135908201526102c0612e46858286016129e4565b90820152610320612e59858583016129e4565b6102e0830152610380612e6e868287016129e4565b6103008401526103e0612e83878288016129e4565b83850152612e958761044088016129e4565b610340850152612ea9876104a0880161298f565b610360850152612ebd87610520880161298f565b82850152612ecf876105a0880161298f565b6103a0850152612ee3876106208801612938565b6103c0850152612ef7876106a08801612938565b908401525090949350505050565b600060808284031215612f16578081fd5b61037e838361298f565b600060608284031215612f31578081fd5b61037e83836129e4565b6000610280808385031215612f4e578182fd5b612f57816137f9565b612f6185856128e8565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215612a8b578182fd5b6006811061305757fe5b9052565b6020808252825182820181905260009190848201906040850190845b8181101561309357835183529284019291840191600101613077565b50909695505050505050565b901515815260200190565b90815260200190565b60208101601383106130c157fe5b91905290565b60208101600283106130c157fe5b60408101601d84106130e357fe5b9281526020015290565b6000602080835283518082850152825b81811015613119578581018301518582016040015282016130fd565b8181111561312a5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b6020808252602f908201527f4345525446456e67696e652e7061796f666646756e6374696f6e3a204154545260408201526e125095551157d393d517d193d55391608a1b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526038908201527f4345525446456e67696e652e73746174655472616e736974696f6e46756e637460408201527f696f6e3a204154545249425554455f4e4f545f464f554e440000000000000000606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b60006102808201905061372882845161304d565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff8111828210171561381857600080fd5b604052919050565b801515811461382e57600080fd5b50565b6002811061382e57600080fd5b6006811061382e57600080fd5b6005811061382e57600080fd5b601d811061382e57600080fdfea2646970667358221220bbd9ba355181c21fb2260a99b3eb64a50ef72b3da1be3cedea89a9981ea9f7a264736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063c40c5a98116100ad578063ebbf552611610071578063ebbf55261461025c578063edc0465f14610206578063f52355861461027c578063f5586e051461028f578063ffcbfc65146102a257610121565b8063c40c5a9814610206578063cb2ef6f71461020e578063d115612f14610223578063e05a66e014610236578063e726d6801461024957610121565b80636f37e55b116100f45780636f37e55b146101a257806372540003146101aa578063811322fb146101cb578063aaf5eb68146101de578063bccf8f31146101e657610121565b8063179331f3146101265780631a2e165d1461014f57806334a64ea21461016f5780636021c23b14610182575b600080fd5b610139610134366004612b3e565b6102b5565b60405161014691906130c7565b60405180910390f35b61016261015d366004612a76565b610385565b60405161014691906130aa565b61016261017d366004612c29565b6103ac565b610195610190366004612c6c565b61060b565b604051610146919061305b565b61016261078b565b6101bd6101b8366004612a5e565b610797565b6040516101469291906130d5565b6101626101d9366004612b7c565b6107c0565b6101626107d6565b6101f96101f4366004612bc6565b6107db565b6040516101469190613714565b610162610839565b61021661083e565b60405161014691906130b3565b610195610231366004612ca2565b610843565b610162610244366004612b9b565b610d85565b610162610257366004613038565b610da5565b61026f61026a366004612abc565b610ef8565b604051610146919061309f565b6101f961028a366004612be2565b610f03565b61016261029d366004613038565b610f3c565b6101626102b0366004612be2565b610fa7565b600060018460018111156102c557fe5b1415610341576102d48361106b565b6102dd8461108d565b14801561032c57506002826020015160058111156102f757fe5b1480610312575060038260200151600581111561031057fe5b145b8061032c575060048260200151600581111561032a57fe5b145b156103395750600161037e565b50600061037e565b600084600181111561034f57fe5b141561035d5750600061037e565b60405162461bcd60e51b8152600401610375906135c4565b60405180910390fd5b9392505050565b60008061039186610797565b9150506103a081868686610da5565b9150505b949350505050565b6000601582601c8111156103bc57fe5b141561042557610200840135156104255760006104016103e53687900387016105a08801612f05565b6103f560c0880160a08901612b22565b8761020001358761109c565b90508061041257506000905061037e565b61041d601582610d85565b91505061037e565b601682601c81111561043357fe5b14156104a157610200840135156104a157600061045c6103e53687900387016105a08801612f05565b90508061046d57506000905061037e565b600061048b6104853688900388016103808901612f20565b836110fc565b9050610498601582610d85565b9250505061037e565b601782601c8111156104af57fe5b1415610510576101c0840135156105105760006104f46104d83687900387016104a08801612f05565b6104e860c0880160a08901612b22565b876101c001358761109c565b90508061050557506000905061037e565b61041d601782610d85565b601882601c81111561051e57fe5b141561057d576101c08401351561057d5760006105476104d83687900387016104a08801612f05565b90508061055857506000905061037e565b60006105706104853688900388016103808901612f20565b9050610498601882610d85565b601a82601c81111561058b57fe5b1415610601576101c0840135156106015760006105b46104d83687900387016104a08801612f05565b9050806105c557506000905061037e565b8461018001358114156105dc57506000905061037e565b60006105f46104853688900388016104408901612f20565b9050610498601a82610d85565b5060009392505050565b60606106156127fe565b60006101a08601351561066057610632866101a001358686611228565b15610660576106476001876101a00135610d85565b828261ffff166078811061065757fe5b60200201526001015b610160860135156106a95761067b8661016001358686611228565b156106a9576106906002876101600135610d85565b828261ffff16607881106106a057fe5b60200201526001015b610180860135156106f7576106c48661018001358686611228565b1515600114156106f7576106de6014876101800135610d85565b828261ffff16607881106106ee57fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561071457600080fd5b5060405190808252806020026020018201604052801561073e578160200160208202803683370190505b50905060005b8261ffff168110156107805783816078811061075c57fe5b602002015182828151811061076d57fe5b6020908102919091010152600101610744565b509695505050505050565b670de0b6b3a764000081565b6000808060f884901c601c8111156107ab57fe5b92505067ffffffffffffffff83169050915091565b600081601c8111156107ce57fe5b90505b919050565b601281565b6107e361281d565b6107eb61281d565b600061020082018190526101e08201819052670de0b6b3a764000061024083018190526102608301526101a084013560c0830152610220820181905281526101409092013560208301525090565b607881565b601290565b606061084d6127fe565b6000601584601c81111561085d57fe5b14156109705761020087013515610970576108766127fe565b6108da88610200013560008a6101800135116108925787610899565b8961018001355b6108ac368c90038c016105a08d01612f05565b6108bc60c08d0160a08e01612b22565b60008d6101800135116108d05760006108d3565b60015b8c8c611257565b905060005b60788160ff16101561096d57818160ff16607881106108fa57fe5b60200201516109085761096d565b610926828260ff166078811061091a57fe5b60200201518989611228565b61092f57610965565b61094d6015838360ff166078811061094357fe5b6020020151610d85565b84846078811061095957fe5b60200201526001909201915b6001016108df565b50505b601684601c81111561097e57fe5b1415610a585761020087013515610a58576109976127fe565b6109b388610200013560008a6101800135116108925787610899565b905060005b60788160ff161015610a5557818160ff16607881106109d357fe5b60200201516109e157610a55565b6000610a126109f9368c90038c016103808d01612f20565b848460ff1660788110610a0857fe5b60200201516110fc565b9050610a1f818a8a611228565b610a295750610a4d565b610a34601582610d85565b858560788110610a4057fe5b6020020152506001909201915b6001016109b8565b50505b601784601c811115610a6657fe5b1415610b35576101c087013515610b3557610a7f6127fe565b610ab5886101c0013560008a610180013511610a9b5787610aa2565b8961018001355b6108ac368c90038c016104a08d01612f05565b905060005b60788160ff161015610b3257818160ff1660788110610ad557fe5b6020020151610ae357610b32565b610af5828260ff166078811061091a57fe5b610afe57610b2a565b610b126017838360ff166078811061094357fe5b848460788110610b1e57fe5b60200201526001909201915b600101610aba565b50505b601884601c811115610b4357fe5b1415610c04576101c087013515610c0457610b5c6127fe565b610b78886101c0013560008a610180013511610a9b5787610aa2565b905060005b60788160ff161015610c0157818160ff1660788110610b9857fe5b6020020151610ba657610c01565b6000610bbe6109f9368c90038c016103808d01612f20565b9050610bcb818a8a611228565b610bd55750610bf9565b610be0601882610d85565b858560788110610bec57fe5b6020020152506001909201915b600101610b7d565b50505b601a84601c811115610c1257fe5b1415610cf8576101c087013515610cf857610c2b6127fe565b610c47886101c0013560008a610180013511610a9b5787610aa2565b905060005b60788160ff161015610cf557818160ff1660788110610c6757fe5b6020020151610c7557610cf5565b886101800135828260ff1660788110610c8a57fe5b60200201511415610c9a57610ced565b6000610cb26109f9368c90038c016104408d01612f20565b9050610cbf818a8a611228565b610cc95750610ced565b610cd4601a82610d85565b858560788110610ce057fe5b6020020152506001909201915b600101610c4c565b50505b60608167ffffffffffffffff81118015610d1157600080fd5b50604051908082528060200260200182016040528015610d3b578160200160208202803683370190505b50905060005b82811015610d7957838160788110610d5557fe5b6020020151828281518110610d6657fe5b6020908102919091010152600101610d41565b50979650505050505050565b60008160f884601c811115610d9657fe5b60ff16901b1790505b92915050565b600081851415610db65750836103a4565b6001846008811115610dc457fe5b1480610ddb57506003846008811115610dd957fe5b145b15610df157610dea858461143c565b90506103a4565b6002846008811115610dff57fe5b1480610e1657506004846008811115610e1457fe5b145b15610e5a576000610e27868561143c565b9050610e3286611498565b610e3b82611498565b1415610e485790506103a4565b610e5286856114af565b9150506103a4565b6005846008811115610e6857fe5b1480610e7f57506007846008811115610e7d57fe5b145b15610e8e57610dea85846114af565b6006846008811115610e9c57fe5b1480610eb357506008846008811115610eb157fe5b145b15610eef576000610ec486856114af565b9050610ecf86611498565b610ed882611498565b1415610ee55790506103a4565b610e52868561143c565b50929392505050565b600195945050505050565b610f0b61281d565b610f33610f1d36879003870187612cee565b610f2c36879003870187612f3b565b85856114fd565b95945050505050565b60006003846008811115610f4c57fe5b1480610f6357506004846008811115610f6157fe5b145b80610f7957506007846008811115610f7757fe5b145b80610f8f57506008846008811115610f8d57fe5b145b15610f9b5750836103a4565b610f3385858585610da5565b600080610fbc61012087016101008801612a43565b6001600160a01b0316141580156110065750610fe061012086016101008701612a43565b6001600160a01b0316610ffa610100870160e08801612a43565b6001600160a01b031614155b1561104357610dea8261103761102136899003890189612cee565b61103036899003890189612f3b565b8787611677565b9063ffffffff6117dc16565b610f3361105536879003870187612cee565b61106436879003870187612f3b565b8585611677565b6000808061107e62015180855b0461187a565b50915091506103a48282611910565b60006103a46201518083611078565b606084015160009015806110ae575081155b156110ba5750816103a4565b60016110c78585886102b5565b60018111156110d257fe5b146110e8576110e385836001611996565b610f33565b610f336110f786846001611996565b611ac7565b600080808460200151600581111561111057fe5b141561113057835161112990849063ffffffff611b0016565b905061037e565b60018460200151600581111561114257fe5b141561115e57835161112990849060070263ffffffff611b0016565b60028460200151600581111561117057fe5b141561118957835161112990849063ffffffff611b1516565b60038460200151600581111561119b57fe5b14156111b757835161112990849060030263ffffffff611b1516565b6004846020015160058111156111c957fe5b14156111e557835161112990849060060263ffffffff611b1516565b6005846020015160058111156111f757fe5b141561121057835161112990849063ffffffff611b8f16565b60405162461bcd60e51b815260040161037590613567565b60008183111561123a5750600061037e565b83831115801561124a5750818411155b156106015750600161037e565b61125f6127fe565b6112676127fe565b60608701516000906112cf5761127e8a8686611228565b15611299578982826078811061129057fe5b60200201526001015b6112a4898686611228565b156112c757600186151514156112c757888282607881106112c157fe5b60200201525b509050611431565b896000806112de8a848d6102b5565b90505b8b83101561136e576112f4838989611228565b1561133257607684106113195760405162461bcd60e51b815260040161037590613140565b8285856078811061132657fe5b60200201526001909301925b60019182019181600181111561134457fe5b14611359576113548b8e84611996565b611367565b6113676110f78c8f85611996565b92506112e1565b6001891515141561139c576113848c8989611228565b1561139c578b85856078811061139657fe5b60200201525b6000841180156113b957506113b985600186036078811061091a57fe5b156114295760008b6040015160018111156113d057fe5b1480156113dd5750600184115b80156113e95750828c14155b15611429578484607881106113fa57fe5b602002015185600186036078811061140e57fe5b602002015284846078811061141f57fe5b6020020160008152505b509293505050505b979650505050505050565b6000600182600181111561144c57fe5b14156114915761145b83611bb6565b600614156114755761146e836002611b00565b9050610d9f565b61147e83611bb6565b600714156114915761146e836001611b00565b5090919050565b60006114a76201518083611078565b509392505050565b600060018260018111156114bf57fe5b1415611491576114ce83611bb6565b600614156114e15761146e836001611bc9565b6114ea83611bb6565b600714156114915761146e836002611bc9565b61150561281d565b60008061151185610797565b9092509050600182601c81111561152457fe5b141561153f5761153687878387611bde565b925050506103a4565b600282601c81111561154d57fe5b141561155f5761153687878387611c01565b601582601c81111561156d57fe5b141561157f5761153687878387611c15565b601682601c81111561158d57fe5b141561159f5761153687878387611caa565b601782601c8111156115ad57fe5b14156115bf5761153687878387611cc6565b601a82601c8111156115cd57fe5b14156115df5761153687878387611d0d565b601882601c8111156115ed57fe5b14156115ff5761153687878387611d26565b601182601c81111561160d57fe5b141561161f5761153687878387611d95565b601482601c81111561162d57fe5b141561163f5761153687878387611db8565b600b82601c81111561164d57fe5b141561165f5761153687878387611dd3565b60405162461bcd60e51b815260040161037590613673565b600080600061168585610797565b9092509050600182601c81111561169857fe5b14156116a9576000925050506103a4565b601582601c8111156116b757fe5b14156116c8576000925050506103a4565b601782601c8111156116d657fe5b14156116e7576000925050506103a4565b601a82601c8111156116f557fe5b1415611706576000925050506103a4565b601482601c81111561171457fe5b1415611725576000925050506103a4565b600b82601c81111561173357fe5b1415611744576000925050506103a4565b600282601c81111561175257fe5b14156117645761153687878387611ebe565b601682601c81111561177257fe5b14156117845761153687878387611ef7565b601882601c81111561179257fe5b14156117a45761153687878387611f16565b601182601c8111156117b257fe5b14156117c45761153687878387611f35565b60405162461bcd60e51b8152600401610375906131dc565b60008215806117e9575081155b156117f657506000610d9f565b8260001914801561180a5750600160ff1b82145b156118275760405162461bcd60e51b81526004016103759061339e565b8282028284828161183457fe5b05146118525760405162461bcd60e51b81526004016103759061339e565b670de0b6b3a76400008105806103a45760405162461bcd60e51b8152600401610375906132b7565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816118d157fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806119215750816003145b8061192c5750816005145b806119375750816007145b806119425750816008145b8061194d575081600a145b80611958575081600c145b156119655750601f610d9f565b816002146119755750601e610d9f565b61197e83611f54565b61198957601c61198c565b601d5b60ff169392505050565b60008080856020015160058111156119aa57fe5b14156119c5578451610dea908590850263ffffffff611b0016565b6001856020015160058111156119d757fe5b14156119f5578451610dea908590850260070263ffffffff611b0016565b600285602001516005811115611a0757fe5b1415611a22578451610dea908590850263ffffffff611b1516565b600385602001516005811115611a3457fe5b1415611a52578451610dea908590850260030263ffffffff611b1516565b600485602001516005811115611a6457fe5b1415611a82578451610dea908590850260060263ffffffff611b1516565b600585602001516005811115611a9457fe5b1415611aaf578451610dea908590850263ffffffff611b8f16565b60405162461bcd60e51b81526004016103759061318e565b600080600080611ad685611f79565b919450925090506000611ae98484611910565b9050611af6848483611f97565b9695505050505050565b620151808102820182811015610d9f57600080fd5b6000808080611b276201518087611078565b600c918801600019810183810494909401965094509250900660010191506000611b518484611910565b905080821115611b5f578091505b62015180870662015180611b74868686611fb1565b0201945086851015611b8557600080fd5b5050505092915050565b6000808080611ba16201518087611078565b9187019450925090506000611b518484611910565b6007620151809091046003010660010190565b620151808102820382811115610d9f57600080fd5b611be661281d565b50506102609290920151610200820152602081019190915290565b611c0961281d565b50506020820152919050565b611c1d61281d565b60018560c001516003811115611c2f57fe5b1415611c9757611c90856102a00151611037876102200151611037611c678960c001518b608001518c602001518d6101800151610f3c565b611c80898c608001518d602001518e6101800151610f3c565b8b606001518c610180015161202d565b6102208501525b505060c082018190526020820152919050565b611cb261281d565b505060006102208301526020820152919050565b611cce61281d565b611cfb8461026001516110378661024001516110378961022001518760001c6117dc90919063ffffffff16565b6101c085015250506020820152919050565b611d1561281d565b506101e08301526020820152919050565b611d2e61281d565b6101e0840151610200850151611d499163ffffffff61212a16565b61020085015260006101e085018190526101c0850152602084018390526060840151831415611d7b5760048452611d8c565b8360a00151831415611d8c57600584525b50919392505050565b611d9d61281d565b5050600061020083015260a082018190526020820152919050565b611dc061281d565b5050606082018190526020820152919050565b611ddb61281d565b60008460400151600014611df3578460400151611e0c565b611e0c8487608001518860200151896101800151610da5565b6102c087015160400151909150839060009015611e47576000611e34896102c00151856110fc565b9050808311611e4557600180895291505b505b876102e00151604001518015611e5b575080155b15611e8a576000611e71896102e00151856110fc565b9050808311611e835760028852611e88565b600388525b505b6040870151611eb257611eac8689608001518a602001518b6101800151610da5565b60408801525b50949695505050505050565b6000611edd8561024001518561020001516117dc90919063ffffffff16565b611eea8660400151612170565b60000b0295945050505050565b6000611edd8461022001518561020001516117dc90919063ffffffff16565b6000611edd846101c00151856101e001516117dc90919063ffffffff16565b6000611edd846101c001518561020001516117dc90919063ffffffff16565b600060048206158015611f6957506064820615155b806107ce57505061019090061590565b60008080611f8a6201518085611078565b9196909550909350915050565b600062015180611fa8858585611fb1565b02949350505050565b60006107b2841015611fc257600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281611ffe57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b60008484101561204f5760405162461bcd60e51b815260040161037590613493565b600083600581111561205d57fe5b141561206d57610dea8585612234565b600183600581111561207b57fe5b141561208b57610dea8585612354565b600283600581111561209957fe5b14156120a957610dea858561237f565b60048360058111156120b757fe5b14156120c757610dea858561239e565b60038360058111156120d557fe5b14156120e657610dea85858461245f565b60058360058111156120f457fe5b14156121125760405162461bcd60e51b8152600401610375906133e5565b60405162461bcd60e51b81526004016103759061322b565b600081830381831280159061213f5750838113155b80612154575060008312801561215457508381135b61037e5760405162461bcd60e51b81526004016103759061362f565b60008082600c81111561217f57fe5b141561218d575060016107d1565b600182600c81111561219b57fe5b14156121aa57506000196107d1565b600682600c8111156121b857fe5b14156121c6575060016107d1565b600782600c8111156121d457fe5b14156121e357506000196107d1565b600282600c8111156121f157fe5b14156121ff575060016107d1565b600382600c81111561220d57fe5b141561221c57506000196107d1565b60405162461bcd60e51b81526004016103759061334a565b60008061224084612535565b9050600061224d84612535565b9050600061225a8661254d565b6122665761016d61226a565b61016e5b61ffff1690508183141561229c5761229281612286888861256a565b9063ffffffff61258516565b9350505050610d9f565b60006122a78661254d565b6122b35761016d6122b7565b61016e5b61ffff16905060006122e8836122868a6122e36122db8a600163ffffffff61264116565b600180611f97565b61256a565b90506000612305836122866122ff88600180611f97565b8b61256a565b905061234761232b600161231f888a63ffffffff61266616565b9063ffffffff61266616565b61233b848463ffffffff6126a816565b9063ffffffff6126a816565b9998505050505050505050565b600061037e61016861228662015180612373868863ffffffff61266616565b9063ffffffff6126ee16565b600061037e61016d61228662015180612373868863ffffffff61266616565b60008060008060008060006123b289611f79565b9750955093506123c188611f79565b945092509050601f8614156123d557601e95505b82601f14156123e357601e92505b60006123f5848863ffffffff61212a16565b90506000612409848863ffffffff61212a16565b9050600061241d848863ffffffff61212a16565b905061244f6101686122868561233b61243d87601e63ffffffff61273016565b61233b8761016863ffffffff61273016565b9c9b505050505050505050505050565b60008060008060008060006124738a611f79565b97509550935061248289611f79565b9450925090506124918a61106b565b86141561249d57601e95505b87891480156124ac5750816002145b1580156124c057506124bd8961106b565b83145b156124ca57601e92505b60006124dc848863ffffffff61212a16565b905060006124f0848863ffffffff61212a16565b90506000612504848863ffffffff61212a16565b90506125246101686122868561233b61243d87601e63ffffffff61273016565b9d9c50505050505050505050505050565b60006125446201518083611078565b50909392505050565b60008061255d6201518084611078565b5050905061037e81611f54565b60008183111561257957600080fd5b50620151809190030490565b6000816125a45760405162461bcd60e51b8152600401610375906136d0565b826125b157506000610d9f565b670de0b6b3a7640000838102908482816125c757fe5b05146125e55760405162461bcd60e51b815260040161037590613521565b826000191480156125f95750600160ff1b84145b156126165760405162461bcd60e51b815260040161037590613521565b600083828161262157fe5b059050806103a45760405162461bcd60e51b815260040161037590613442565b60008282018381101561037e5760405162461bcd60e51b815260040161037590613280565b600061037e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279b565b60008282018183128015906126bd5750838112155b806126d257506000831280156126d257508381125b61037e5760405162461bcd60e51b815260040161037590613309565b600061037e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127c7565b60008261273f57506000610d9f565b826000191480156127535750600160ff1b82145b156127705760405162461bcd60e51b8152600401610375906134da565b8282028284828161277d57fe5b051461037e5760405162461bcd60e51b8152600401610375906134da565b600081848411156127bf5760405162461bcd60e51b815260040161037591906130ed565b505050900390565b600081836127e85760405162461bcd60e51b815260040161037591906130ed565b5060008385816127f457fe5b0495945050505050565b60405180610f0001604052806078906020820280368337509192915050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b0381168114610d9f57600080fd5b803560098110610d9f57600080fd5b8035610d9f81613831565b8035610d9f8161383e565b8035600d8110610d9f57600080fd5b803560138110610d9f57600080fd5b803560048110610d9f57600080fd5b60006107208284031215612932578081fd5b50919050565b600060808284031215612949578081fd5b61295360806137f9565b9050813581526020820135602082015260408201356129718161384b565b604082015260608201356129848161384b565b606082015292915050565b6000608082840312156129a0578081fd5b6129aa60806137f9565b90508135815260208201356129be8161383e565b602082015260408201356129d181613831565b6040820152606082013561298481613820565b6000606082840312156129f5578081fd5b6129ff60606137f9565b9050813581526020820135612a138161383e565b60208201526040820135612a2681613820565b604082015292915050565b60006102808284031215612932578081fd5b600060208284031215612a54578081fd5b61037e83836128b7565b600060208284031215612a6f578081fd5b5035919050565b60008060008060808587031215612a8b578283fd5b84359350612a9c86602087016128ce565b92506040850135612aac81613831565b9396929550929360600135925050565b6000806000806000610c608688031215612ad4578283fd5b85359450612ae58760208801612920565b9350612af5876107408801612a31565b92506109c0860135612b0681613820565b9150612b16876109e08801612a31565b90509295509295909350565b600060208284031215612b33578081fd5b813561037e81613831565b600080600060c08486031215612b52578081fd5b8335612b5d81613831565b925060208401359150612b73856040860161298f565b90509250925092565b600060208284031215612b8d578081fd5b8135601d811061037e578182fd5b60008060408385031215612bad578182fd5b8235612bb881613858565b946020939093013593505050565b60006107208284031215612bd8578081fd5b61037e8383612920565b6000806000806109e08587031215612bf8578182fd5b612c028686612920565b9350612c12866107208701612a31565b93969395505050506109a0820135916109c0013590565b60008060006107608486031215612c3e578081fd5b612c488585612920565b92506107208401359150610740840135612c6181613858565b809150509250925092565b60008060006107608486031215612c81578081fd5b612c8b8585612920565b956107208501359550610740909401359392505050565b6000806000806107808587031215612cb8578182fd5b612cc28686612920565b935061072085013592506107408501359150610760850135612ce381613858565b939692955090935050565b60006107208284031215612d00578081fd5b612d0b6104006137f9565b612d158484612902565b8152612d2484602085016128dd565b6020820152612d3684604085016128f3565b6040820152612d4884606085016128e8565b6060820152612d5a84608085016128ce565b6080820152612d6c8460a085016128dd565b60a0820152612d7e8460c08501612911565b60c0820152612d908460e085016128b7565b60e0820152610100612da4858286016128b7565b9082015261012083810135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013590820152610260808401359082015261028080840135908201526102a080840135908201526102c0612e46858286016129e4565b90820152610320612e59858583016129e4565b6102e0830152610380612e6e868287016129e4565b6103008401526103e0612e83878288016129e4565b83850152612e958761044088016129e4565b610340850152612ea9876104a0880161298f565b610360850152612ebd87610520880161298f565b82850152612ecf876105a0880161298f565b6103a0850152612ee3876106208801612938565b6103c0850152612ef7876106a08801612938565b908401525090949350505050565b600060808284031215612f16578081fd5b61037e838361298f565b600060608284031215612f31578081fd5b61037e83836129e4565b6000610280808385031215612f4e578182fd5b612f57816137f9565b612f6185856128e8565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215612a8b578182fd5b6006811061305757fe5b9052565b6020808252825182820181905260009190848201906040850190845b8181101561309357835183529284019291840191600101613077565b50909695505050505050565b901515815260200190565b90815260200190565b60208101601383106130c157fe5b91905290565b60208101600283106130c157fe5b60408101601d84106130e357fe5b9281526020015290565b6000602080835283518082850152825b81811015613119578581018301518582016040015282016130fd565b8181111561312a5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b6020808252602f908201527f4345525446456e67696e652e7061796f666646756e6374696f6e3a204154545260408201526e125095551157d393d517d193d55391608a1b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526038908201527f4345525446456e67696e652e73746174655472616e736974696f6e46756e637460408201527f696f6e3a204154545249425554455f4e4f545f464f554e440000000000000000606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b60006102808201905061372882845161304d565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff8111828210171561381857600080fd5b604052919050565b801515811461382e57600080fd5b50565b6002811061382e57600080fd5b6006811061382e57600080fd5b6005811061382e57600080fd5b601d811061382e57600080fdfea2646970667358221220bbd9ba355181c21fb2260a99b3eb64a50ef72b3da1be3cedea89a9981ea9f7a264736f6c634300060b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
