{
  "contractName": "ANNRegistry",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        }
      ],
      "name": "GrantedAccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "RegisteredAsset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        }
      ],
      "name": "RevokedAccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevActor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newActor",
          "type": "address"
        }
      ],
      "name": "UpdatedActor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevBeneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newBeneficiary",
          "type": "address"
        }
      ],
      "name": "UpdatedBeneficiary",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevEngine",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newEngine",
          "type": "address"
        }
      ],
      "name": "UpdatedEngine",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "statusDate",
          "type": "uint256"
        }
      ],
      "name": "UpdatedFinalizedState",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevObligor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newObligor",
          "type": "address"
        }
      ],
      "name": "UpdatedObligor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "statusDate",
          "type": "uint256"
        }
      ],
      "name": "UpdatedState",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "UpdatedTerms",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        }
      ],
      "name": "approveActor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "approvedActors",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getActor",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getAddressValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getBytes32ValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getContractReferenceValueForTermsAttribute",
      "outputs": [
        {
          "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": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getCycleValueForTermsAttribute",
      "outputs": [
        {
          "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": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getEngine",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getEnumValueForStateAttribute",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getEnumValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "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": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getEventAtIndex",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getFinalizedState",
      "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": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getIntValueForStateAttribute",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getIntValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getNextScheduleIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getNextScheduledEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getNextUnderlyingEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getOwnership",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "creatorObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creatorBeneficiary",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyBeneficiary",
              "type": "address"
            }
          ],
          "internalType": "struct AssetOwnership",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getPendingEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getPeriodValueForTermsAttribute",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IP",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getSchedule",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getScheduleLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getState",
      "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": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getTerms",
      "outputs": [
        {
          "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 ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "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": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "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": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "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": "cycleOfRateReset",
              "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": "cycleOfScalingIndex",
              "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": "cycleOfFee",
              "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": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getUIntValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getUintValueForStateAttribute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantAccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasAccess",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRootAccess",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "isEventSettled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "int256",
          "name": "_payoff",
          "type": "int256"
        }
      ],
      "name": "markEventAsSettled",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "popNextScheduledEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "popPendingEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "pendingEvent",
          "type": "bytes32"
        }
      ],
      "name": "pushPendingEvent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "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 ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "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": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "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": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "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": "cycleOfRateReset",
              "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": "cycleOfScalingIndex",
              "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": "cycleOfFee",
              "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": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "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": "schedule",
          "type": "bytes32[]"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "creatorObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creatorBeneficiary",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyBeneficiary",
              "type": "address"
            }
          ],
          "internalType": "struct AssetOwnership",
          "name": "ownership",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "registerAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeAccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        }
      ],
      "name": "setActor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCounterpartyBeneficiary",
          "type": "address"
        }
      ],
      "name": "setCounterpartyBeneficiary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCounterpartyObligor",
          "type": "address"
        }
      ],
      "name": "setCounterpartyObligor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCreatorBeneficiary",
          "type": "address"
        }
      ],
      "name": "setCreatorBeneficiary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCreatorObligor",
          "type": "address"
        }
      ],
      "name": "setCreatorObligor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        }
      ],
      "name": "setEngine",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "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"
        }
      ],
      "name": "setFinalizedState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "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"
        }
      ],
      "name": "setState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "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 ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "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": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfPrincipalRedemption",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "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": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "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": "cycleOfRateReset",
              "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": "cycleOfScalingIndex",
              "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": "cycleOfFee",
              "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": "cycleOfPrincipalRedemption",
              "type": "tuple"
            }
          ],
          "internalType": "struct ANNTerms",
          "name": "terms",
          "type": "tuple"
        }
      ],
      "name": "setTerms",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506000620000276001600160e01b036200007716565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200007b565b3390565b6155fe806200008b6000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c8063a17b75b51161019d578063d51dc3dc116100e9578063e7dc3188116100a2578063ecef55771161007c578063ecef55771461072e578063ee43eda114610741578063f2fde38b14610754578063f52f84e1146107675761030c565b8063e7dc3188146106f5578063e8f7ca3e14610708578063eb0125591461071b5761030c565b8063d51dc3dc14610676578063d981e77314610689578063de07a1731461069c578063e05a66e0146106af578063e4d063d5146106c2578063e50e0ef7146106d55761030c565b8063ba4d2d2811610156578063c0d9429311610130578063c0d942931461061d578063c3b6e7c214610630578063ccfc347e14610643578063cf5aed12146106565761030c565b8063ba4d2d28146105c9578063bc6a7d76146105ea578063bd1f0a6c1461060a5761030c565b8063a17b75b51461054a578063b02ca0c01461055d578063b0b4888f14610570578063b3c45ebe14610590578063b461dd4f146105a3578063b8282041146105b65761030c565b8063512872f41161025c5780636fe55baa1161021557806375e86ae4116101ef57806375e86ae4146104fc5780637d870dd41461050f578063811322fb146105225780638da5cb5b146105355761030c565b80636fe55baa146104b3578063715018a6146104d357806372540003146104db5761030c565b8063512872f4146104475780636031a0941461045a578063606aa07e1461046d57806367fe5d70146104805780636a899b9b1461046d5780636be39bda146104935761030c565b80631b126815116102c95780633549d08d116102a35780633549d08d146103ee57806337462dba1461040157806339262e87146104145780633adc277a146104275761030c565b80631b126815146103a857806327258b22146103c857806328e0f8a9146103db5761030c565b806303a81a2a1461031157806309648a9d146103265780630c5b75a41461034f5780630d62037a1461036f578063135b9f4d146103825780631717e86714610395575b600080fd5b61032461031f366004613e7f565b61077a565b005b610339610334366004613e4f565b61084f565b60405161034691906153b7565b60405180910390f35b61036261035d366004613e4f565b610876565b60405161034691906149eb565b61032461037d366004613e7f565b6108ed565b610362610390366004613eae565b610992565b6103246103a3366004613efa565b610a31565b6103bb6103b6366004613efa565b610ae7565b60405161034691906149d0565b6103bb6103d6366004613e4f565b610b64565b6103626103e9366004613e4f565b610b79565b6103246103fc366004613e7f565b610b8e565b61033961040f366004613e4f565b610c69565b610324610422366004613efa565b610c88565b61043a610435366004613e4f565b610d2d565b604051610346919061498c565b610324610455366004613e7f565b610d47565b610324610468366004613e7f565b610e0e565b61036261047b366004613eae565b610ee9565b61032461048e36600461405b565b610f07565b6104a66104a1366004613e4f565b610fcd565b6040516103469190614fb2565b6104c66104c1366004613eae565b61106b565b60405161034691906153a9565b61032461110a565b6104ee6104e9366004613e4f565b611189565b604051610346929190614ab0565b61036261050a366004613e4f565b6111b2565b61032461051d36600461405b565b611586565b61036261053036600461407f565b61163f565b61053d61164d565b604051610346919061495e565b610362610558366004613e4f565b61165c565b61036261056b366004613eae565b611671565b61058361057e366004613eae565b611692565b604051610346919061539b565b61053d61059e366004613e4f565b611731565b6103626105b1366004613eae565b611750565b6103626105c4366004613e4f565b611796565b6105dc6105d7366004613eae565b611869565b6040516103469291906149db565b6105fd6105f8366004613eae565b611893565b604051610346919061535a565b610324610618366004613e7f565b611932565b61032461062b366004613f47565b6119ca565b61036261063e366004613e4f565b611aca565b6103bb610651366004613dfb565b611cc7565b610669610664366004613eae565b611cdc565b604051610346919061549c565b610362610684366004613eae565b611cfa565b610324610697366004613eae565b611d40565b6103246106aa366004613ecf565b611daf565b6103626106bd36600461409e565b611e4b565b6103246106d0366004613f74565b611e69565b6106e86106e3366004613e4f565b611f78565b6040516103469190614fef565b610324610703366004613dfb565b611fd6565b6103bb610716366004613e7f565b61202f565b61053d610729366004613eae565b612065565b61066961073c366004613eae565b6120fb565b61053d61074f366004613e4f565b612191565b610324610762366004613dfb565b6121b1565b610362610775366004613e4f565b612267565b6000828152600160208190526040909120015482906001600160a01b03163314806107b757506107b7816000356001600160e01b03191633610ae7565b6107dc5760405162461bcd60e51b81526004016107d390614c24565b60405180910390fd5b6000838152600160208190526040918290200180546001600160a01b038581166001600160a01b0319831617909255915191169084907f6baefd4565218ab73b43cb6b1019ca3a06161c4fcaef25cd665aacddabc44a20906108419084908790614972565b60405180910390a250505050565b6108576139ea565b600082815260016020526040902061086e9061227c565b90505b919050565b60008181526001602081905260408220015482906001600160a01b03163314806108b257506108b2816000356001600160e01b03191633610ae7565b6108ce5760405162461bcd60e51b81526004016107d390614c24565b6000838152600160205260408120600601805491905591505b50919050565b610904826000356001600160e01b03191633610ae7565b6109205760405162461bcd60e51b81526004016107d390614ef6565b6000828152600160205260409081902060070180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906149f4565b60405180910390a1505050565b6000828152600160205260408082209051639151ef2360e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91639151ef23916109d89190869060040161502a565b60206040518083038186803b1580156109f057600080fd5b505af4158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613e67565b90505b92915050565b610a48836000356001600160e01b03191633610ae7565b610a645760405162461bcd60e51b81526004016107d390614ea7565b60008381526001602081815260408084206001600160e01b031987168552600c0182528084206001600160a01b038616808652925292839020805460ff1916909217909155905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb4786590610ada908690614a9b565b60405180910390a3505050565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff1680610b5a57506000848152600160209081526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b90505b9392505050565b60009081526001602052604090205460ff1690565b60009081526001602052604090206005015490565b6000828152600160205260409020600a01546001600160a01b031680610bc65760405162461bcd60e51b81526004016107d390614ac7565b336001600160a01b0382161480610bef5750610bef836000356001600160e01b03191633610ae7565b610c0b5760405162461bcd60e51b81526004016107d390614b24565b60008381526001602052604090819020600a0180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906149f4565b610c716139ea565b600082815260016020526040902061086e90612574565b610c9f836000356001600160e01b03191633610ae7565b610cbb5760405162461bcd60e51b81526004016107d390614ea7565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa90610ada908690614a9b565b600081815260016020526040902060609061086e90612896565b6000828152600160208190526040909120015482906001600160a01b0316331480610d845750610d84816000356001600160e01b03191633610ae7565b610da05760405162461bcd60e51b81526004016107d390614c24565b6000838152600160205260409081902080546001600160a01b03858116610100908102610100600160a81b03198416179093559251919004919091169084907fdaa92ae0693b6616f14ef5db4b7ee053d3234c0d03f7a1885589c6a6c2c75bdb906108419084908790614972565b6000828152600160205260409020600801546001600160a01b031680610e465760405162461bcd60e51b81526004016107d390614e4a565b336001600160a01b0382161480610e6f5750610e6f836000356001600160e01b03191633610ae7565b610e8b5760405162461bcd60e51b81526004016107d390614d12565b6000838152600160205260409081902060080180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906149f4565b6000828152600160205260408120610a28908363ffffffff61292c16565b6000828152600160208190526040909120015482906001600160a01b0316331480610f445750610f44816000356001600160e01b03191633610ae7565b610f605760405162461bcd60e51b81526004016107d390614c24565b610f8c610f7236849003840184614464565b60008581526001602052604090209063ffffffff61294216565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f8360200135604051610fc091906149eb565b60405180910390a2505050565b610fd5613a84565b6000828152600160205260409081902090516379d346b760e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__916379d346b79161101a91906004016149eb565b6108406040518083038186803b15801561103357600080fd5b505af4158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e91906140cc565b611073613c19565b600083815260016020526040908190209051633542f3e360e11b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91636a85e7c6916110ba9190869060040161502a565b60606040518083038186803b1580156110d257600080fd5b505af41580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190614449565b611112612c70565b6000546001600160a01b0390811691161461113f5760405162461bcd60e51b81526004016107d390614db8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c81111561119d57fe5b92505067ffffffffffffffff83169050915091565b60006111bc613c3c565b6111dc8372636f6e74726163745265666572656e63655f3160681b611893565b8051909150158015906111fe57506003816060015160048111156111fc57fe5b145b1561157d5780516020820151604051631392c59160e11b81526001600160a01b038216906327258b22906112369085906004016149eb565b60206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112869190613e33565b6112a25760405162461bcd60e51b81526004016107d390614f4a565b60006112bd866b65786572636973654461746560a01b610ee9565b905060006112e4877518dc99591a5d115d995b9d151e5c1950dbdd995c995960521b6120fb565b60ff1660058111156112f257fe5b90506000836001600160a01b031663cf5aed12866040518263ffffffff1660e01b81526004016113229190614a76565b60206040518083038186803b15801561133a57600080fd5b505afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190614561565b60ff16600581111561138057fe5b90506000846001600160a01b031663606aa07e876040518263ffffffff1660e01b81526004016113b09190614a53565b60206040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190613e67565b9050831561142157611413601b42611e4b565b975050505050505050610871565b600083600581111561142f57fe5b14158015611452575082600581111561144457fe5b82600581111561145057fe5b145b1561157657600182600581111561146557fe5b141561147657611413601a82611e4b565b600282600581111561148457fe5b141561152e57611492613c19565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a90600401614a13565b60606040518083038186803b1580156114d657600080fd5b505afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e9190614449565b905061151f601a6106bd8385612c74565b98505050505050505050610871565b600382600581111561153c57fe5b14156115765761154a613c19565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a90600401614a30565b5050505050505b50600092915050565b6000828152600160208190526040909120015482906001600160a01b03163314806115c357506115c3816000356001600160e01b03191633610ae7565b6115df5760405162461bcd60e51b81526004016107d390614c24565b61160b6115f136849003840184614464565b60008581526001602052604090209063ffffffff612da016565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec68360200135604051610fc091906149eb565b600081601c81111561086e57fe5b6000546001600160a01b031690565b60009081526001602052604090206004015490565b60009182526001602090815260408084209284526003909201905290205490565b61169a613c63565b6000838152600160205260409081902090516323c352cb60e11b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91634786a596916116e19190869060040161502a565b60806040518083038186803b1580156116f957600080fd5b505af415801561170d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a28919061442e565b600090815260016020819052604090912001546001600160a01b031690565b60008281526001602052604080822090516313d0ad6960e31b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91639e856b48916109d89190869060040161502a565b6000818152600160205260408120816117ae84613096565b600583015460009081526003840160205260409020546004840154919250901580156117d8575081155b156117ea575060009250610871915050565b6000806117f684611189565b9150915060008061180685611189565b9150915080600014806118225750821580159061182257508083105b8061184657508083148015611846575061183b8261163f565b6118448561163f565b105b1561185a5785975050505050505050610871565b84975050505050505050610871565b6000918252600160208181526040808520938552600f90930190529120805491015460ff90911691565b61189b613c3c565b600083815260016020526040908190209051632fbc709f60e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91632fbc709f916118e29190869060040161502a565b60806040518083038186803b1580156118fa57600080fd5b505af415801561190e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906143e4565b611949826000356001600160e01b03191633610ae7565b6119655760405162461bcd60e51b81526004016107d390614bc7565b6000828152600160205260409081902060090180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906149f4565b6000828152600160208190526040909120015482906001600160a01b0316331480611a075750611a07816000356001600160e01b03191633610ae7565b611a235760405162461bcd60e51b81526004016107d390614c24565b600083815260016020526040908190209051638198ef6d60e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91638198ef6d91611a6a91908690600401615038565b60006040518083038186803b158015611a8257600080fd5b505af4158015611a96573d6000803e3d6000fd5b50506040518592507fb777acf68d226f3c8ab6f398cfb9a320e6fe8e92f5d2f0b4f69bc8ebab3b70cb9150600090a2505050565b60008181526001602081905260408220015482906001600160a01b0316331480611b065750611b06816000356001600160e01b03191633610ae7565b611b225760405162461bcd60e51b81526004016107d390614c24565b600083815260016020526040812090611b3a85613096565b60058301546000908152600384016020526040902054600484015491925090158015611b64575081155b15611b765750600093506108e7915050565b600080611b8284611189565b91509150600080611b9285611189565b9150915084861415611c07578260028801600086601c811115611bb157fe5b601c811115611bbc57fe5b8152602081019190915260400160002055600487015460058801541415611bee5750600097506108e795505050505050565b5050506005909301805460010190555092506108e79050565b801580611c1d57508215801590611c1d57508083105b80611c4157508083148015611c415750611c368261163f565b611c3f8561163f565b105b15611c84578260028801600086601c811115611c5957fe5b601c811115611c6457fe5b8152602081019190915260400160002055509396506108e7945050505050565b801580611c98575060048701546005880154145b15611cae5750600097506108e795505050505050565b50505060059093018054600101905593506108e7915050565b60026020526000908152604090205460ff1681565b6000828152600160205260408120610a28908363ffffffff61342f16565b600082815260016020526040808220905163ee6a446f60e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__9163ee6a446f916109d89190869060040161502a565b6000828152600160208190526040909120015482906001600160a01b0316331480611d7d5750611d7d816000356001600160e01b03191633610ae7565b611d995760405162461bcd60e51b81526004016107d390614c24565b5060009182526001602052604090912060060155565b6000838152600160208190526040909120015483906001600160a01b0316331480611dec5750611dec816000356001600160e01b03191633610ae7565b611e085760405162461bcd60e51b81526004016107d390614c24565b50604080518082018252600180825260208083019485526000968752818152838720958752600f90950190945293209251835460ff191690151517835551910155565b60008160f884601c811115611e5c57fe5b60ff16901b179392505050565b3360009081526002602052604090205460ff16611e985760405162461bcd60e51b81526004016107d390614cbe565b611ef689611eab368a90038a018a614464565b888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611eee925050503689900389018961437c565b8787876134db565b600089815260016020526040908190209051638198ef6d60e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91638198ef6d91611f3d91908c90600401615038565b60006040518083038186803b158015611f5557600080fd5b505af4158015611f69573d6000803e3d6000fd5b50505050505050505050505050565b611f80613c84565b50600090815260016020908152604091829020825160808101845260078201546001600160a01b03908116825260088301548116938201939093526009820154831693810193909352600a015416606082015290565b611fde612c70565b6000546001600160a01b0390811691161461200b5760405162461bcd60e51b81526004016107d390614db8565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000918252600160209081526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b6000828152600160205260408082209051637154b74160e11b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__9163e2a96e82916120ab9190869060040161502a565b60206040518083038186803b1580156120c357600080fd5b505af41580156120d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613e17565b6000828152600160205260408082209051630ac097cd60e21b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91632b025f34916121419190869060040161502a565b60206040518083038186803b15801561215957600080fd5b505af415801561216d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190614561565b60009081526001602052604090205461010090046001600160a01b031690565b6121b9612c70565b6000546001600160a01b039081169116146121e65760405162461bcd60e51b81526004016107d390614db8565b6001600160a01b03811661220c5760405162461bcd60e51b81526004016107d390614b81565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526001602052604090206006015490565b6122846139ea565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c60058111156122c757fe5b60058111156122d257fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b61257c6139ea565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156125c157fe5b60058111156125cc57fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b606080826002016002015467ffffffffffffffff811180156128b757600080fd5b506040519080825280602002602001820160405280156128e1578160200160208202803683370190505b50905060005b6004840154811015612925576000818152600385016020526040902054825183908390811061291257fe5b60209081029190910101526001016128e7565b5092915050565b6000908152600e91909101602052604090205490565b61297b8274465f636f6e7472616374506572666f726d616e636560581b60f88460000151600581111561297157fe5b60ff16901b613660565b61299c826b465f7374617475734461746560a01b836020015160001b613660565b6129c48272465f6e6f6e506572666f726d696e674461746560681b836040015160001b613660565b6129e7826d465f6d617475726974794461746560901b836060015160001b613660565b612a0a826d465f65786572636973654461746560901b836080015160001b613660565b612a308270465f7465726d696e6174696f6e4461746560781b8360a0015160001b613660565b612a5882721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b613660565b612a7f82701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b613660565b612aa1826b1197d999595058d8dc9d595960a21b83610120015160001b613660565b612acc8274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b613660565b612aff827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b613660565b612b32827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b613660565b612b65827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b613660565b612b8b826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b613660565b612bb38271465f65786572636973655175616e7469747960701b836101e0015160001b613660565b612bd38269465f7175616e7469747960b01b83610200015160001b613660565b612bfc82721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b613660565b612c20826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b613660565b612c488271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b613660565b612c6c826e465f6c617374436f75706f6e44617960881b8360c0015160001b613660565b5050565b3390565b6000808084602001516005811115612c8857fe5b1415612ca8578351612ca190849063ffffffff61369616565b9050610a28565b600184602001516005811115612cba57fe5b1415612cd6578351612ca190849060070263ffffffff61369616565b600284602001516005811115612ce857fe5b1415612d01578351612ca190849063ffffffff6136ab16565b600384602001516005811115612d1357fe5b1415612d2f578351612ca190849060030263ffffffff6136ab16565b600484602001516005811115612d4157fe5b1415612d5d578351612ca190849060060263ffffffff6136ab16565b600584602001516005811115612d6f57fe5b1415612d88578351612ca190849063ffffffff61372716565b60405162461bcd60e51b81526004016107d390614ded565b612dcd8272636f6e7472616374506572666f726d616e636560681b60f88460000151600581111561297157fe5b612dec82697374617475734461746560b01b836020015160001b613660565b612e1282706e6f6e506572666f726d696e674461746560781b836040015160001b613660565b612e33826b6d617475726974794461746560a01b836060015160001b613660565b612e54826b65786572636973654461746560a01b836080015160001b613660565b612e78826e7465726d696e6174696f6e4461746560881b8360a0015160001b613660565b612e9e82701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b613660565b612ec3826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b613660565b612ee382691999595058d8dc9d595960b21b83610120015160001b613660565b612f0c82726e6f6d696e616c496e7465726573745261746560681b83610140015160001b613660565b612f3b827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b613660565b612f6a82783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b613660565b612f9d827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b613660565b612fc1826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b613660565b612fe7826f65786572636973655175616e7469747960801b836101e0015160001b613660565b61300582677175616e7469747960c01b83610200015160001b613660565b61302c827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b613660565b61304e826b36b0b933b4b72330b1ba37b960a11b83610240015160001b613660565b613074826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b613660565b612c6c826c6c617374436f75706f6e44617960981b8360c0015160001b613660565b60008181526001602052604081206130ac613a84565b6040516379d346b760e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__906379d346b7906130e39085906004016149eb565b6108406040518083038186803b1580156130fc57600080fd5b505af4158015613110573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313491906140cc565b82549091506000908190819081906131e09061010090046001600160a01b0316632249a3618760028a0185600981526020019081526020016000205460096040518463ffffffff1660e01b815260040161319093929190614fc1565b60206040518083038186803b1580156131a857600080fd5b505afa1580156131bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190613e67565b9150915082600014806131f257508281105b8061321657508083148015613216575061320b8461163f565b6132148361163f565b105b15613222578092508193505b50508354600a6000818152600287016020526040808220549051632249a36160e01b815291938493613273936101009092046001600160a01b031692632249a36192613190928b9291600401614fc1565b91509150826000148061328f5750801580159061328f57508281105b806132be575080158015906132a357508083145b80156132be57506132b38461163f565b6132bc8361163f565b105b156132ca578092508193505b5050835460036000818152600287016020526040808220549051632249a36160e01b81529193849361331b936101009092046001600160a01b031692632249a36192613190928b9291600401614fc1565b9150915082600014806133375750801580159061333757508281105b806133665750801580159061334b57508083145b8015613366575061335b8461163f565b6133648361163f565b105b15613372578092508193505b5050835460046000818152600287016020526040808220549051632249a36160e01b8152919384936133c2936101009092046001600160a01b031692632249a36192613190928b92918101614fc1565b9150915082600014806133de575080158015906133de57508281105b8061340d575080158015906133f257508083145b801561340d57506134028461163f565b61340b8361163f565b105b15613419578092508193505b50506134258282611e4b565b9695505050505050565b600072636f6e7472616374506572666f726d616e636560681b821415613480575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c610a2b565b74465f636f6e7472616374506572666f726d616e636560581b8214156134d3575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c610a2b565b506000610a2b565b6000878152600160205260409020805460ff161561350b5760405162461bcd60e51b81526004016107d390614c73565b6001600160a01b03831660009081526002602052604090205460ff1615156001146135485760405162461bcd60e51b81526004016107d390614d6f565b805485516007830180546001600160a01b03199081166001600160a01b039384161790915560208801516008850180548316918416919091179055604088015160098501805483169184169190911790556060880151600a85018054831691841691909117905560ff199092166001908117610100600160a81b03191661010088841602178455830180549092169085161790556135e68188612da0565b6135f6818863ffffffff61294216565b613606818763ffffffff61374e16565b6001600160a01b0382161561361f5761361f88836137b6565b7f5e73a3e4a3f69f1056f05ffd00ff11bf3835158ba0ebd5ad3b994065fcd896468860405161364e91906149eb565b60405180910390a15050505050505050565b6000828152600e8401602052604090205481141561367d57613691565b6000828152600e8401602052604090208190555b505050565b620151808102820182811015610a2b57600080fd5b60008080806136bf62015180875b0461382d565b600c9188016000198101838104949094019650945092509006600101915060006136e984846138c3565b9050808211156136f7578091505b6201518087066201518061370c868686613949565b020194508685101561371d57600080fd5b5050505092915050565b600080808061373962015180876136b9565b91870194509250905060006136e984846138c3565b60005b8151811015613691576000801b82828151811061376a57fe5b6020026020010151141561377d57613691565b81818151811061378957fe5b60209081029190910181015160008381526003860190925260409091205560010160048301819055613751565b6000828152600160208181526040808420848052600c0182528084206001600160a01b0386168086529252808420805460ff19169093179092559051909184917face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb478659161382191614a9b565b60405180910390a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161388457fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806138d45750816003145b806138df5750816005145b806138ea5750816007145b806138f55750816008145b80613900575081600a145b8061390b575081600c145b156139185750601f610a2b565b816002146139285750601e610a2b565b613931836139c5565b61393c57601c61393f565b601d5b60ff169392505050565b60006107b284101561395a57600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f028161399657fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000600482061580156139da57506064820615155b8061086e57505061019090061590565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516105e081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613bc6613c19565b8152602001613bd3613c19565b8152602001613be0613c63565b8152602001613bed613c63565b8152602001613bfa613c63565b8152602001613c07613c63565b8152602001613c14613c63565b905290565b6040805160608101909152600080825260208201905b8152600060209091015290565b60408051608081018252600080825260208201819052909182019081526020016000613c14565b60408051608081019091526000808252602082019081526020016000613c2f565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8035610a2b8161554a565b8051610a2b8161554a565b8051610a2b8161556d565b8051610a2b8161557a565b8035610a2b81615587565b8051610a2b816155a1565b8035610a2b816155ae565b8051610a2b816155ae565b8051610a2b81615587565b8051610a2b816155bb565b600061084082840312156108e7578081fd5b6000608082840312156108e7578081fd5b600060808284031215613d4d578081fd5b613d5760806154aa565b9050815181526020820151613d6b81615587565b60208201526040820151613d7e8161557a565b60408201526060820151613d918161555f565b606082015292915050565b600060608284031215613dad578081fd5b613db760606154aa565b9050815181526020820151613dcb81615587565b60208201526040820151613dde8161555f565b604082015292915050565b600061028082840312156108e7578081fd5b600060208284031215613e0c578081fd5b8135610a288161554a565b600060208284031215613e28578081fd5b8151610a288161554a565b600060208284031215613e44578081fd5b8151610a288161555f565b600060208284031215613e60578081fd5b5035919050565b600060208284031215613e78578081fd5b5051919050565b60008060408385031215613e91578081fd5b823591506020830135613ea38161554a565b809150509250929050565b60008060408385031215613ec0578182fd5b50508035926020909101359150565b600080600060608486031215613ee3578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613f0e578081fd5b8335925060208401356001600160e01b031981168114613f2c578182fd5b91506040840135613f3c8161554a565b809150509250925092565b6000806108608385031215613f5a578182fd5b82359150613f6b8460208501613d19565b90509250929050565b6000806000806000806000806000610be08a8c031215613f92578687fd5b89359850613fa38b60208c01613d19565b9750613fb38b6108608c01613de9565b9650610ae08a013567ffffffffffffffff80821115613fd0578687fd5b818c018d601f820112613fe1578788fd5b8035925081831115613ff1578788fd5b8d60208085028301011115614004578788fd5b602001975090955061401c90508b610b008c01613d2b565b935061402c8b610b808c01613cab565b925061403c8b610ba08c01613cab565b915061404c8b610bc08c01613cab565b90509295985092959850929598565b6000806102a0838503121561406e578182fd5b82359150613f6b8460208501613de9565b600060208284031215614090578081fd5b8135601d8110610a28578182fd5b600080604083850312156140b0578182fd5b8235601d81106140be578283fd5b946020939093013593505050565b600061084082840312156140de578081fd5b6140e96105e06154aa565b6140f38484613cf8565b81526141028460208501613ccc565b60208201526141148460408501613ce2565b60408201526141268460608501613d03565b60608201526141388460808501613cc1565b608082015261414a8460a08501613ccc565b60a082015261415c8460c08501613d0e565b60c082015261416e8460e08501613d0e565b60e082015261010061418285828601613ccc565b9082015261012061419585858301613cb6565b908201526101406141a885858301613cb6565b90820152610160838101519082015261018080840151908201526101a080840151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015190820152610260808401519082015261028080840151908201526102a080840151908201526102c080840151908201526102e08084015190820152610300808401519082015261032080840151908201526103408084015190820152610360808401519082015261038080840151908201526103a080840151908201526103c080840151908201526103e08084015190820152610400808401519082015261042080840151908201526104408084015190820152610460808401519082015261048080840151908201526104a080840151908201526104c080840151908201526104e080840151908201526105006142fa85828601613d9c565b9082015261056061430d85858301613d9c565b6105208301526105c061432286828701613d3c565b610540840152614336866106408701613d3c565b82840152614348866106c08701613d3c565b61058084015261435c866107408701613d3c565b6105a0840152614370866107c08701613d3c565b90830152509392505050565b60006080828403121561438d578081fd5b61439760806154aa565b82356143a28161554a565b815260208301356143b28161554a565b602082015260408301356143c58161554a565b604082015260608301356143d88161554a565b60608201529392505050565b6000608082840312156143f5578081fd5b6143ff60806154aa565b8251815260208301516020820152604083015161441b81615594565b604082015260608301516143d881615594565b60006080828403121561443f578081fd5b610a288383613d3c565b60006060828403121561445a578081fd5b610a288383613d9c565b6000610280808385031215614477578182fd5b614480816154aa565b61448a8585613cd7565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b600060208284031215614572578081fd5b815160ff81168114610a28578182fd5b6001600160a01b03169052565b6009811061459957fe5b9052565b6145998161551f565b6145998161552c565b600d811061459957fe5b6013811061459957fe5b6004811061459957fe5b6145d88282516145b9565b60208101516145ea602084018261459d565b5060408101516145fd60408401826145af565b50606081015161461060608401826145a6565b506080810151614623608084018261458f565b5060a081015161463660a084018261459d565b5060c081015161464960c08401826145c3565b5060e081015161465c60e08401826145c3565b50610100808201516146708285018261459d565b50506101208082015161468582850182614582565b50506101408082015161469a82850182614582565b5050610160818101519083015261018080820151908301526101a080820151908301526101c080820151908301526101e08082015190830152610200808201519083015261022080820151908301526102408082015190830152610260808201519083015261028080820151908301526102a080820151908301526102c080820151908301526102e08082015190830152610300808201519083015261032080820151908301526103408082015190830152610360808201519083015261038080820151908301526103a080820151908301526103c080820151908301526103e08082015190830152610400808201519083015261042080820151908301526104408082015190830152610460808201519083015261048080820151908301526104a080820151908301526104c080820151908301526104e08082015190830152610500808201516147ee8285018261493a565b50506105208101516105606148058185018361493a565b61054083015191506105c061481c818601846148c8565b8184015192506148306106408601846148c8565b61058084015192506148466106c08601846148c8565b6105a0840151925061485c6107408601846148c8565b830151915061369190506107c08401826148c8565b80358252602081013561488381615587565b61488c8161552c565b6020830152604081013561489f8161557a565b6148a88161551f565b604083015260608101356148bb8161555f565b8015156060840152505050565b8051825260208101516148da8161552c565b602083015260408101516148ed8161551f565b60408301526060908101511515910152565b80358252602081013561491181615587565b61491a8161552c565b6020830152604081013561492d8161555f565b8015156040840152505050565b80518252602081015161494c8161552c565b60208301526040908101511515910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156149c4578351835292840192918401916001016149a8565b50909695505050505050565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9081526a19dc9858d954195c9a5bd960aa1b602082015260400190565b9081527019195b1a5b9c5d595b98de54195c9a5bd9607a1b602082015260400190565b908152706e6f6e506572666f726d696e674461746560781b602082015260400190565b90815272636f6e7472616374506572666f726d616e636560681b602082015260400190565b6001600160e01b031991909116815260200190565b60408101614abd84615540565b9281526020015290565b6020808252603e908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20454e5452595f444f45535f4e4f545f45584953540000606082015260800190565b6020808252603d908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20554e415554484f52495a45445f53454e444552000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f417373657452656769737472792e736574436f756e74657270617274794f626c60408201527f69676f723a20554e415554484f52495a45445f53454e44455200000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602b908201527f4261736552656769737472792e73657441737365743a2041535345545f414c5260408201526a454144595f45584953545360a81b606082015260800190565b60208082526034908201527f4261736552656769737472792e6f6e6c79417070726f7665644163746f72733a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526038908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20554e415554484f52495a45445f53454e4445520000000000000000606082015260800190565b60208082526029908201527f4261736552656769737472792e73657441737365743a204143544f525f4e4f5460408201526817d054141493d5915160ba1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526039908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20454e5452595f444f45535f4e4f545f455849535400000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60208082526034908201527f417373657452656769737472792e73657443726561746f724f626c69676f723a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526042908201527f41737365744163746f722e6765744e657874556e6465726c79696e674576656e60408201527f743a20554e4445524c59494e475f41535345545f444f45535f4e4f545f45584960608201526114d560f21b608082015260a00190565b6108408101610a2b82846145cd565b6108808101614fd082866145cd565b83610840830152614fe083615540565b82610860830152949350505050565b81516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b918252602082015260400190565b828152610860810160208381019061505b9084016150568387613ced565b6145b9565b61506581856154eb565b615072604085018261459d565b505061508160408401846154f8565b61508e60608401826145af565b5061509c6060840184615505565b6150a960808401826145a6565b506150b760808401846154de565b6150c460a084018261458f565b506150d260a08401846154eb565b6150df60c084018261459d565b506150ed60c0840184615512565b6150fa60e08401826145c3565b5061510860e0840184615512565b610100615117818501836145c3565b615123818601866154eb565b9150506101206151358185018361459d565b615141818601866154d1565b91505061014061515381850183614582565b61515f818601866154d1565b91505061016061517181850183614582565b61018091508085013582850152506101a081850135818501526101c091508085013582850152506101e08185013581850152610200915080850135828501525061022081850135818501526102409150808501358285015250610260818501358185015261028091508085013582850152506102a081850135818501526102c091508085013582850152506102e08185013581850152610300915080850135828501525061032081850135818501526103409150808501358285015250610360818501358185015261038091508085013582850152506103a081850135818501526103c091508085013582850152506103e08185013581850152610400915080850135828501525061042081850135818501526104409150808501358285015250610460818501358185015261048091508085013582850152506104a081850135818501526104c091508085013582850152506104e0818501358185015261050091508085013582850152506152ed61052084018286016148ff565b50615300610580830161056085016148ff565b6153126105e083016105c08501614871565b61532461066083016106408501614871565b6153366106e083016106c08501614871565b61534861076083016107408501614871565b610b5d6107e083016107c08501614871565b81518152602080830151908201526040820151608082019061537b81615536565b6040830152606083015161538e81615536565b8060608401525092915050565b60808101610a2b82846148c8565b60608101610a2b828461493a565b6000610280820190506153cb8284516145a6565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156154c957600080fd5b604052919050565b60008235610a288161554a565b60008235610a288161556d565b60008235610a288161557a565b60008235610a28816155a1565b60008235610a2881615587565b60008235610a28816155bb565b6002811061552957fe5b50565b6006811061552957fe5b6005811061552957fe5b601d811061552957fe5b6001600160a01b038116811461552957600080fd5b801515811461552957600080fd5b6009811061552957600080fd5b6002811061552957600080fd5b6006811061552957600080fd5b6005811061552957600080fd5b600d811061552957600080fd5b6013811061552957600080fd5b6004811061552957600080fdfea264697066735822122093944925e5e83896d30244065982048cb0b41c08cb72f378825d6084d7cc9dff64736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061030c5760003560e01c8063a17b75b51161019d578063d51dc3dc116100e9578063e7dc3188116100a2578063ecef55771161007c578063ecef55771461072e578063ee43eda114610741578063f2fde38b14610754578063f52f84e1146107675761030c565b8063e7dc3188146106f5578063e8f7ca3e14610708578063eb0125591461071b5761030c565b8063d51dc3dc14610676578063d981e77314610689578063de07a1731461069c578063e05a66e0146106af578063e4d063d5146106c2578063e50e0ef7146106d55761030c565b8063ba4d2d2811610156578063c0d9429311610130578063c0d942931461061d578063c3b6e7c214610630578063ccfc347e14610643578063cf5aed12146106565761030c565b8063ba4d2d28146105c9578063bc6a7d76146105ea578063bd1f0a6c1461060a5761030c565b8063a17b75b51461054a578063b02ca0c01461055d578063b0b4888f14610570578063b3c45ebe14610590578063b461dd4f146105a3578063b8282041146105b65761030c565b8063512872f41161025c5780636fe55baa1161021557806375e86ae4116101ef57806375e86ae4146104fc5780637d870dd41461050f578063811322fb146105225780638da5cb5b146105355761030c565b80636fe55baa146104b3578063715018a6146104d357806372540003146104db5761030c565b8063512872f4146104475780636031a0941461045a578063606aa07e1461046d57806367fe5d70146104805780636a899b9b1461046d5780636be39bda146104935761030c565b80631b126815116102c95780633549d08d116102a35780633549d08d146103ee57806337462dba1461040157806339262e87146104145780633adc277a146104275761030c565b80631b126815146103a857806327258b22146103c857806328e0f8a9146103db5761030c565b806303a81a2a1461031157806309648a9d146103265780630c5b75a41461034f5780630d62037a1461036f578063135b9f4d146103825780631717e86714610395575b600080fd5b61032461031f366004613e7f565b61077a565b005b610339610334366004613e4f565b61084f565b60405161034691906153b7565b60405180910390f35b61036261035d366004613e4f565b610876565b60405161034691906149eb565b61032461037d366004613e7f565b6108ed565b610362610390366004613eae565b610992565b6103246103a3366004613efa565b610a31565b6103bb6103b6366004613efa565b610ae7565b60405161034691906149d0565b6103bb6103d6366004613e4f565b610b64565b6103626103e9366004613e4f565b610b79565b6103246103fc366004613e7f565b610b8e565b61033961040f366004613e4f565b610c69565b610324610422366004613efa565b610c88565b61043a610435366004613e4f565b610d2d565b604051610346919061498c565b610324610455366004613e7f565b610d47565b610324610468366004613e7f565b610e0e565b61036261047b366004613eae565b610ee9565b61032461048e36600461405b565b610f07565b6104a66104a1366004613e4f565b610fcd565b6040516103469190614fb2565b6104c66104c1366004613eae565b61106b565b60405161034691906153a9565b61032461110a565b6104ee6104e9366004613e4f565b611189565b604051610346929190614ab0565b61036261050a366004613e4f565b6111b2565b61032461051d36600461405b565b611586565b61036261053036600461407f565b61163f565b61053d61164d565b604051610346919061495e565b610362610558366004613e4f565b61165c565b61036261056b366004613eae565b611671565b61058361057e366004613eae565b611692565b604051610346919061539b565b61053d61059e366004613e4f565b611731565b6103626105b1366004613eae565b611750565b6103626105c4366004613e4f565b611796565b6105dc6105d7366004613eae565b611869565b6040516103469291906149db565b6105fd6105f8366004613eae565b611893565b604051610346919061535a565b610324610618366004613e7f565b611932565b61032461062b366004613f47565b6119ca565b61036261063e366004613e4f565b611aca565b6103bb610651366004613dfb565b611cc7565b610669610664366004613eae565b611cdc565b604051610346919061549c565b610362610684366004613eae565b611cfa565b610324610697366004613eae565b611d40565b6103246106aa366004613ecf565b611daf565b6103626106bd36600461409e565b611e4b565b6103246106d0366004613f74565b611e69565b6106e86106e3366004613e4f565b611f78565b6040516103469190614fef565b610324610703366004613dfb565b611fd6565b6103bb610716366004613e7f565b61202f565b61053d610729366004613eae565b612065565b61066961073c366004613eae565b6120fb565b61053d61074f366004613e4f565b612191565b610324610762366004613dfb565b6121b1565b610362610775366004613e4f565b612267565b6000828152600160208190526040909120015482906001600160a01b03163314806107b757506107b7816000356001600160e01b03191633610ae7565b6107dc5760405162461bcd60e51b81526004016107d390614c24565b60405180910390fd5b6000838152600160208190526040918290200180546001600160a01b038581166001600160a01b0319831617909255915191169084907f6baefd4565218ab73b43cb6b1019ca3a06161c4fcaef25cd665aacddabc44a20906108419084908790614972565b60405180910390a250505050565b6108576139ea565b600082815260016020526040902061086e9061227c565b90505b919050565b60008181526001602081905260408220015482906001600160a01b03163314806108b257506108b2816000356001600160e01b03191633610ae7565b6108ce5760405162461bcd60e51b81526004016107d390614c24565b6000838152600160205260408120600601805491905591505b50919050565b610904826000356001600160e01b03191633610ae7565b6109205760405162461bcd60e51b81526004016107d390614ef6565b6000828152600160205260409081902060070180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906149f4565b60405180910390a1505050565b6000828152600160205260408082209051639151ef2360e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91639151ef23916109d89190869060040161502a565b60206040518083038186803b1580156109f057600080fd5b505af4158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613e67565b90505b92915050565b610a48836000356001600160e01b03191633610ae7565b610a645760405162461bcd60e51b81526004016107d390614ea7565b60008381526001602081815260408084206001600160e01b031987168552600c0182528084206001600160a01b038616808652925292839020805460ff1916909217909155905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb4786590610ada908690614a9b565b60405180910390a3505050565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff1680610b5a57506000848152600160209081526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b90505b9392505050565b60009081526001602052604090205460ff1690565b60009081526001602052604090206005015490565b6000828152600160205260409020600a01546001600160a01b031680610bc65760405162461bcd60e51b81526004016107d390614ac7565b336001600160a01b0382161480610bef5750610bef836000356001600160e01b03191633610ae7565b610c0b5760405162461bcd60e51b81526004016107d390614b24565b60008381526001602052604090819020600a0180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906149f4565b610c716139ea565b600082815260016020526040902061086e90612574565b610c9f836000356001600160e01b03191633610ae7565b610cbb5760405162461bcd60e51b81526004016107d390614ea7565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa90610ada908690614a9b565b600081815260016020526040902060609061086e90612896565b6000828152600160208190526040909120015482906001600160a01b0316331480610d845750610d84816000356001600160e01b03191633610ae7565b610da05760405162461bcd60e51b81526004016107d390614c24565b6000838152600160205260409081902080546001600160a01b03858116610100908102610100600160a81b03198416179093559251919004919091169084907fdaa92ae0693b6616f14ef5db4b7ee053d3234c0d03f7a1885589c6a6c2c75bdb906108419084908790614972565b6000828152600160205260409020600801546001600160a01b031680610e465760405162461bcd60e51b81526004016107d390614e4a565b336001600160a01b0382161480610e6f5750610e6f836000356001600160e01b03191633610ae7565b610e8b5760405162461bcd60e51b81526004016107d390614d12565b6000838152600160205260409081902060080180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906149f4565b6000828152600160205260408120610a28908363ffffffff61292c16565b6000828152600160208190526040909120015482906001600160a01b0316331480610f445750610f44816000356001600160e01b03191633610ae7565b610f605760405162461bcd60e51b81526004016107d390614c24565b610f8c610f7236849003840184614464565b60008581526001602052604090209063ffffffff61294216565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f8360200135604051610fc091906149eb565b60405180910390a2505050565b610fd5613a84565b6000828152600160205260409081902090516379d346b760e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__916379d346b79161101a91906004016149eb565b6108406040518083038186803b15801561103357600080fd5b505af4158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e91906140cc565b611073613c19565b600083815260016020526040908190209051633542f3e360e11b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91636a85e7c6916110ba9190869060040161502a565b60606040518083038186803b1580156110d257600080fd5b505af41580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190614449565b611112612c70565b6000546001600160a01b0390811691161461113f5760405162461bcd60e51b81526004016107d390614db8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c81111561119d57fe5b92505067ffffffffffffffff83169050915091565b60006111bc613c3c565b6111dc8372636f6e74726163745265666572656e63655f3160681b611893565b8051909150158015906111fe57506003816060015160048111156111fc57fe5b145b1561157d5780516020820151604051631392c59160e11b81526001600160a01b038216906327258b22906112369085906004016149eb565b60206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112869190613e33565b6112a25760405162461bcd60e51b81526004016107d390614f4a565b60006112bd866b65786572636973654461746560a01b610ee9565b905060006112e4877518dc99591a5d115d995b9d151e5c1950dbdd995c995960521b6120fb565b60ff1660058111156112f257fe5b90506000836001600160a01b031663cf5aed12866040518263ffffffff1660e01b81526004016113229190614a76565b60206040518083038186803b15801561133a57600080fd5b505afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190614561565b60ff16600581111561138057fe5b90506000846001600160a01b031663606aa07e876040518263ffffffff1660e01b81526004016113b09190614a53565b60206040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190613e67565b9050831561142157611413601b42611e4b565b975050505050505050610871565b600083600581111561142f57fe5b14158015611452575082600581111561144457fe5b82600581111561145057fe5b145b1561157657600182600581111561146557fe5b141561147657611413601a82611e4b565b600282600581111561148457fe5b141561152e57611492613c19565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a90600401614a13565b60606040518083038186803b1580156114d657600080fd5b505afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e9190614449565b905061151f601a6106bd8385612c74565b98505050505050505050610871565b600382600581111561153c57fe5b14156115765761154a613c19565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a90600401614a30565b5050505050505b50600092915050565b6000828152600160208190526040909120015482906001600160a01b03163314806115c357506115c3816000356001600160e01b03191633610ae7565b6115df5760405162461bcd60e51b81526004016107d390614c24565b61160b6115f136849003840184614464565b60008581526001602052604090209063ffffffff612da016565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec68360200135604051610fc091906149eb565b600081601c81111561086e57fe5b6000546001600160a01b031690565b60009081526001602052604090206004015490565b60009182526001602090815260408084209284526003909201905290205490565b61169a613c63565b6000838152600160205260409081902090516323c352cb60e11b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91634786a596916116e19190869060040161502a565b60806040518083038186803b1580156116f957600080fd5b505af415801561170d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a28919061442e565b600090815260016020819052604090912001546001600160a01b031690565b60008281526001602052604080822090516313d0ad6960e31b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91639e856b48916109d89190869060040161502a565b6000818152600160205260408120816117ae84613096565b600583015460009081526003840160205260409020546004840154919250901580156117d8575081155b156117ea575060009250610871915050565b6000806117f684611189565b9150915060008061180685611189565b9150915080600014806118225750821580159061182257508083105b8061184657508083148015611846575061183b8261163f565b6118448561163f565b105b1561185a5785975050505050505050610871565b84975050505050505050610871565b6000918252600160208181526040808520938552600f90930190529120805491015460ff90911691565b61189b613c3c565b600083815260016020526040908190209051632fbc709f60e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91632fbc709f916118e29190869060040161502a565b60806040518083038186803b1580156118fa57600080fd5b505af415801561190e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906143e4565b611949826000356001600160e01b03191633610ae7565b6119655760405162461bcd60e51b81526004016107d390614bc7565b6000828152600160205260409081902060090180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906149f4565b6000828152600160208190526040909120015482906001600160a01b0316331480611a075750611a07816000356001600160e01b03191633610ae7565b611a235760405162461bcd60e51b81526004016107d390614c24565b600083815260016020526040908190209051638198ef6d60e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91638198ef6d91611a6a91908690600401615038565b60006040518083038186803b158015611a8257600080fd5b505af4158015611a96573d6000803e3d6000fd5b50506040518592507fb777acf68d226f3c8ab6f398cfb9a320e6fe8e92f5d2f0b4f69bc8ebab3b70cb9150600090a2505050565b60008181526001602081905260408220015482906001600160a01b0316331480611b065750611b06816000356001600160e01b03191633610ae7565b611b225760405162461bcd60e51b81526004016107d390614c24565b600083815260016020526040812090611b3a85613096565b60058301546000908152600384016020526040902054600484015491925090158015611b64575081155b15611b765750600093506108e7915050565b600080611b8284611189565b91509150600080611b9285611189565b9150915084861415611c07578260028801600086601c811115611bb157fe5b601c811115611bbc57fe5b8152602081019190915260400160002055600487015460058801541415611bee5750600097506108e795505050505050565b5050506005909301805460010190555092506108e79050565b801580611c1d57508215801590611c1d57508083105b80611c4157508083148015611c415750611c368261163f565b611c3f8561163f565b105b15611c84578260028801600086601c811115611c5957fe5b601c811115611c6457fe5b8152602081019190915260400160002055509396506108e7945050505050565b801580611c98575060048701546005880154145b15611cae5750600097506108e795505050505050565b50505060059093018054600101905593506108e7915050565b60026020526000908152604090205460ff1681565b6000828152600160205260408120610a28908363ffffffff61342f16565b600082815260016020526040808220905163ee6a446f60e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__9163ee6a446f916109d89190869060040161502a565b6000828152600160208190526040909120015482906001600160a01b0316331480611d7d5750611d7d816000356001600160e01b03191633610ae7565b611d995760405162461bcd60e51b81526004016107d390614c24565b5060009182526001602052604090912060060155565b6000838152600160208190526040909120015483906001600160a01b0316331480611dec5750611dec816000356001600160e01b03191633610ae7565b611e085760405162461bcd60e51b81526004016107d390614c24565b50604080518082018252600180825260208083019485526000968752818152838720958752600f90950190945293209251835460ff191690151517835551910155565b60008160f884601c811115611e5c57fe5b60ff16901b179392505050565b3360009081526002602052604090205460ff16611e985760405162461bcd60e51b81526004016107d390614cbe565b611ef689611eab368a90038a018a614464565b888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611eee925050503689900389018961437c565b8787876134db565b600089815260016020526040908190209051638198ef6d60e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91638198ef6d91611f3d91908c90600401615038565b60006040518083038186803b158015611f5557600080fd5b505af4158015611f69573d6000803e3d6000fd5b50505050505050505050505050565b611f80613c84565b50600090815260016020908152604091829020825160808101845260078201546001600160a01b03908116825260088301548116938201939093526009820154831693810193909352600a015416606082015290565b611fde612c70565b6000546001600160a01b0390811691161461200b5760405162461bcd60e51b81526004016107d390614db8565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000918252600160209081526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b6000828152600160205260408082209051637154b74160e11b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__9163e2a96e82916120ab9190869060040161502a565b60206040518083038186803b1580156120c357600080fd5b505af41580156120d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613e17565b6000828152600160205260408082209051630ac097cd60e21b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__91632b025f34916121419190869060040161502a565b60206040518083038186803b15801561215957600080fd5b505af415801561216d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190614561565b60009081526001602052604090205461010090046001600160a01b031690565b6121b9612c70565b6000546001600160a01b039081169116146121e65760405162461bcd60e51b81526004016107d390614db8565b6001600160a01b03811661220c5760405162461bcd60e51b81526004016107d390614b81565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526001602052604090206006015490565b6122846139ea565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c60058111156122c757fe5b60058111156122d257fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b61257c6139ea565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156125c157fe5b60058111156125cc57fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b606080826002016002015467ffffffffffffffff811180156128b757600080fd5b506040519080825280602002602001820160405280156128e1578160200160208202803683370190505b50905060005b6004840154811015612925576000818152600385016020526040902054825183908390811061291257fe5b60209081029190910101526001016128e7565b5092915050565b6000908152600e91909101602052604090205490565b61297b8274465f636f6e7472616374506572666f726d616e636560581b60f88460000151600581111561297157fe5b60ff16901b613660565b61299c826b465f7374617475734461746560a01b836020015160001b613660565b6129c48272465f6e6f6e506572666f726d696e674461746560681b836040015160001b613660565b6129e7826d465f6d617475726974794461746560901b836060015160001b613660565b612a0a826d465f65786572636973654461746560901b836080015160001b613660565b612a308270465f7465726d696e6174696f6e4461746560781b8360a0015160001b613660565b612a5882721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b613660565b612a7f82701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b613660565b612aa1826b1197d999595058d8dc9d595960a21b83610120015160001b613660565b612acc8274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b613660565b612aff827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b613660565b612b32827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b613660565b612b65827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b613660565b612b8b826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b613660565b612bb38271465f65786572636973655175616e7469747960701b836101e0015160001b613660565b612bd38269465f7175616e7469747960b01b83610200015160001b613660565b612bfc82721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b613660565b612c20826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b613660565b612c488271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b613660565b612c6c826e465f6c617374436f75706f6e44617960881b8360c0015160001b613660565b5050565b3390565b6000808084602001516005811115612c8857fe5b1415612ca8578351612ca190849063ffffffff61369616565b9050610a28565b600184602001516005811115612cba57fe5b1415612cd6578351612ca190849060070263ffffffff61369616565b600284602001516005811115612ce857fe5b1415612d01578351612ca190849063ffffffff6136ab16565b600384602001516005811115612d1357fe5b1415612d2f578351612ca190849060030263ffffffff6136ab16565b600484602001516005811115612d4157fe5b1415612d5d578351612ca190849060060263ffffffff6136ab16565b600584602001516005811115612d6f57fe5b1415612d88578351612ca190849063ffffffff61372716565b60405162461bcd60e51b81526004016107d390614ded565b612dcd8272636f6e7472616374506572666f726d616e636560681b60f88460000151600581111561297157fe5b612dec82697374617475734461746560b01b836020015160001b613660565b612e1282706e6f6e506572666f726d696e674461746560781b836040015160001b613660565b612e33826b6d617475726974794461746560a01b836060015160001b613660565b612e54826b65786572636973654461746560a01b836080015160001b613660565b612e78826e7465726d696e6174696f6e4461746560881b8360a0015160001b613660565b612e9e82701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b613660565b612ec3826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b613660565b612ee382691999595058d8dc9d595960b21b83610120015160001b613660565b612f0c82726e6f6d696e616c496e7465726573745261746560681b83610140015160001b613660565b612f3b827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b613660565b612f6a82783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b613660565b612f9d827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b613660565b612fc1826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b613660565b612fe7826f65786572636973655175616e7469747960801b836101e0015160001b613660565b61300582677175616e7469747960c01b83610200015160001b613660565b61302c827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b613660565b61304e826b36b0b933b4b72330b1ba37b960a11b83610240015160001b613660565b613074826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b613660565b612c6c826c6c617374436f75706f6e44617960981b8360c0015160001b613660565b60008181526001602052604081206130ac613a84565b6040516379d346b760e01b815273__$5640c45a0bbbda400e9750313f59ad8ae1$__906379d346b7906130e39085906004016149eb565b6108406040518083038186803b1580156130fc57600080fd5b505af4158015613110573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313491906140cc565b82549091506000908190819081906131e09061010090046001600160a01b0316632249a3618760028a0185600981526020019081526020016000205460096040518463ffffffff1660e01b815260040161319093929190614fc1565b60206040518083038186803b1580156131a857600080fd5b505afa1580156131bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190613e67565b9150915082600014806131f257508281105b8061321657508083148015613216575061320b8461163f565b6132148361163f565b105b15613222578092508193505b50508354600a6000818152600287016020526040808220549051632249a36160e01b815291938493613273936101009092046001600160a01b031692632249a36192613190928b9291600401614fc1565b91509150826000148061328f5750801580159061328f57508281105b806132be575080158015906132a357508083145b80156132be57506132b38461163f565b6132bc8361163f565b105b156132ca578092508193505b5050835460036000818152600287016020526040808220549051632249a36160e01b81529193849361331b936101009092046001600160a01b031692632249a36192613190928b9291600401614fc1565b9150915082600014806133375750801580159061333757508281105b806133665750801580159061334b57508083145b8015613366575061335b8461163f565b6133648361163f565b105b15613372578092508193505b5050835460046000818152600287016020526040808220549051632249a36160e01b8152919384936133c2936101009092046001600160a01b031692632249a36192613190928b92918101614fc1565b9150915082600014806133de575080158015906133de57508281105b8061340d575080158015906133f257508083145b801561340d57506134028461163f565b61340b8361163f565b105b15613419578092508193505b50506134258282611e4b565b9695505050505050565b600072636f6e7472616374506572666f726d616e636560681b821415613480575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c610a2b565b74465f636f6e7472616374506572666f726d616e636560581b8214156134d3575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c610a2b565b506000610a2b565b6000878152600160205260409020805460ff161561350b5760405162461bcd60e51b81526004016107d390614c73565b6001600160a01b03831660009081526002602052604090205460ff1615156001146135485760405162461bcd60e51b81526004016107d390614d6f565b805485516007830180546001600160a01b03199081166001600160a01b039384161790915560208801516008850180548316918416919091179055604088015160098501805483169184169190911790556060880151600a85018054831691841691909117905560ff199092166001908117610100600160a81b03191661010088841602178455830180549092169085161790556135e68188612da0565b6135f6818863ffffffff61294216565b613606818763ffffffff61374e16565b6001600160a01b0382161561361f5761361f88836137b6565b7f5e73a3e4a3f69f1056f05ffd00ff11bf3835158ba0ebd5ad3b994065fcd896468860405161364e91906149eb565b60405180910390a15050505050505050565b6000828152600e8401602052604090205481141561367d57613691565b6000828152600e8401602052604090208190555b505050565b620151808102820182811015610a2b57600080fd5b60008080806136bf62015180875b0461382d565b600c9188016000198101838104949094019650945092509006600101915060006136e984846138c3565b9050808211156136f7578091505b6201518087066201518061370c868686613949565b020194508685101561371d57600080fd5b5050505092915050565b600080808061373962015180876136b9565b91870194509250905060006136e984846138c3565b60005b8151811015613691576000801b82828151811061376a57fe5b6020026020010151141561377d57613691565b81818151811061378957fe5b60209081029190910181015160008381526003860190925260409091205560010160048301819055613751565b6000828152600160208181526040808420848052600c0182528084206001600160a01b0386168086529252808420805460ff19169093179092559051909184917face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb478659161382191614a9b565b60405180910390a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161388457fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806138d45750816003145b806138df5750816005145b806138ea5750816007145b806138f55750816008145b80613900575081600a145b8061390b575081600c145b156139185750601f610a2b565b816002146139285750601e610a2b565b613931836139c5565b61393c57601c61393f565b601d5b60ff169392505050565b60006107b284101561395a57600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f028161399657fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000600482061580156139da57506064820615155b8061086e57505061019090061590565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516105e081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613bc6613c19565b8152602001613bd3613c19565b8152602001613be0613c63565b8152602001613bed613c63565b8152602001613bfa613c63565b8152602001613c07613c63565b8152602001613c14613c63565b905290565b6040805160608101909152600080825260208201905b8152600060209091015290565b60408051608081018252600080825260208201819052909182019081526020016000613c14565b60408051608081019091526000808252602082019081526020016000613c2f565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8035610a2b8161554a565b8051610a2b8161554a565b8051610a2b8161556d565b8051610a2b8161557a565b8035610a2b81615587565b8051610a2b816155a1565b8035610a2b816155ae565b8051610a2b816155ae565b8051610a2b81615587565b8051610a2b816155bb565b600061084082840312156108e7578081fd5b6000608082840312156108e7578081fd5b600060808284031215613d4d578081fd5b613d5760806154aa565b9050815181526020820151613d6b81615587565b60208201526040820151613d7e8161557a565b60408201526060820151613d918161555f565b606082015292915050565b600060608284031215613dad578081fd5b613db760606154aa565b9050815181526020820151613dcb81615587565b60208201526040820151613dde8161555f565b604082015292915050565b600061028082840312156108e7578081fd5b600060208284031215613e0c578081fd5b8135610a288161554a565b600060208284031215613e28578081fd5b8151610a288161554a565b600060208284031215613e44578081fd5b8151610a288161555f565b600060208284031215613e60578081fd5b5035919050565b600060208284031215613e78578081fd5b5051919050565b60008060408385031215613e91578081fd5b823591506020830135613ea38161554a565b809150509250929050565b60008060408385031215613ec0578182fd5b50508035926020909101359150565b600080600060608486031215613ee3578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613f0e578081fd5b8335925060208401356001600160e01b031981168114613f2c578182fd5b91506040840135613f3c8161554a565b809150509250925092565b6000806108608385031215613f5a578182fd5b82359150613f6b8460208501613d19565b90509250929050565b6000806000806000806000806000610be08a8c031215613f92578687fd5b89359850613fa38b60208c01613d19565b9750613fb38b6108608c01613de9565b9650610ae08a013567ffffffffffffffff80821115613fd0578687fd5b818c018d601f820112613fe1578788fd5b8035925081831115613ff1578788fd5b8d60208085028301011115614004578788fd5b602001975090955061401c90508b610b008c01613d2b565b935061402c8b610b808c01613cab565b925061403c8b610ba08c01613cab565b915061404c8b610bc08c01613cab565b90509295985092959850929598565b6000806102a0838503121561406e578182fd5b82359150613f6b8460208501613de9565b600060208284031215614090578081fd5b8135601d8110610a28578182fd5b600080604083850312156140b0578182fd5b8235601d81106140be578283fd5b946020939093013593505050565b600061084082840312156140de578081fd5b6140e96105e06154aa565b6140f38484613cf8565b81526141028460208501613ccc565b60208201526141148460408501613ce2565b60408201526141268460608501613d03565b60608201526141388460808501613cc1565b608082015261414a8460a08501613ccc565b60a082015261415c8460c08501613d0e565b60c082015261416e8460e08501613d0e565b60e082015261010061418285828601613ccc565b9082015261012061419585858301613cb6565b908201526101406141a885858301613cb6565b90820152610160838101519082015261018080840151908201526101a080840151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015190820152610260808401519082015261028080840151908201526102a080840151908201526102c080840151908201526102e08084015190820152610300808401519082015261032080840151908201526103408084015190820152610360808401519082015261038080840151908201526103a080840151908201526103c080840151908201526103e08084015190820152610400808401519082015261042080840151908201526104408084015190820152610460808401519082015261048080840151908201526104a080840151908201526104c080840151908201526104e080840151908201526105006142fa85828601613d9c565b9082015261056061430d85858301613d9c565b6105208301526105c061432286828701613d3c565b610540840152614336866106408701613d3c565b82840152614348866106c08701613d3c565b61058084015261435c866107408701613d3c565b6105a0840152614370866107c08701613d3c565b90830152509392505050565b60006080828403121561438d578081fd5b61439760806154aa565b82356143a28161554a565b815260208301356143b28161554a565b602082015260408301356143c58161554a565b604082015260608301356143d88161554a565b60608201529392505050565b6000608082840312156143f5578081fd5b6143ff60806154aa565b8251815260208301516020820152604083015161441b81615594565b604082015260608301516143d881615594565b60006080828403121561443f578081fd5b610a288383613d3c565b60006060828403121561445a578081fd5b610a288383613d9c565b6000610280808385031215614477578182fd5b614480816154aa565b61448a8585613cd7565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b600060208284031215614572578081fd5b815160ff81168114610a28578182fd5b6001600160a01b03169052565b6009811061459957fe5b9052565b6145998161551f565b6145998161552c565b600d811061459957fe5b6013811061459957fe5b6004811061459957fe5b6145d88282516145b9565b60208101516145ea602084018261459d565b5060408101516145fd60408401826145af565b50606081015161461060608401826145a6565b506080810151614623608084018261458f565b5060a081015161463660a084018261459d565b5060c081015161464960c08401826145c3565b5060e081015161465c60e08401826145c3565b50610100808201516146708285018261459d565b50506101208082015161468582850182614582565b50506101408082015161469a82850182614582565b5050610160818101519083015261018080820151908301526101a080820151908301526101c080820151908301526101e08082015190830152610200808201519083015261022080820151908301526102408082015190830152610260808201519083015261028080820151908301526102a080820151908301526102c080820151908301526102e08082015190830152610300808201519083015261032080820151908301526103408082015190830152610360808201519083015261038080820151908301526103a080820151908301526103c080820151908301526103e08082015190830152610400808201519083015261042080820151908301526104408082015190830152610460808201519083015261048080820151908301526104a080820151908301526104c080820151908301526104e08082015190830152610500808201516147ee8285018261493a565b50506105208101516105606148058185018361493a565b61054083015191506105c061481c818601846148c8565b8184015192506148306106408601846148c8565b61058084015192506148466106c08601846148c8565b6105a0840151925061485c6107408601846148c8565b830151915061369190506107c08401826148c8565b80358252602081013561488381615587565b61488c8161552c565b6020830152604081013561489f8161557a565b6148a88161551f565b604083015260608101356148bb8161555f565b8015156060840152505050565b8051825260208101516148da8161552c565b602083015260408101516148ed8161551f565b60408301526060908101511515910152565b80358252602081013561491181615587565b61491a8161552c565b6020830152604081013561492d8161555f565b8015156040840152505050565b80518252602081015161494c8161552c565b60208301526040908101511515910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156149c4578351835292840192918401916001016149a8565b50909695505050505050565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9081526a19dc9858d954195c9a5bd960aa1b602082015260400190565b9081527019195b1a5b9c5d595b98de54195c9a5bd9607a1b602082015260400190565b908152706e6f6e506572666f726d696e674461746560781b602082015260400190565b90815272636f6e7472616374506572666f726d616e636560681b602082015260400190565b6001600160e01b031991909116815260200190565b60408101614abd84615540565b9281526020015290565b6020808252603e908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20454e5452595f444f45535f4e4f545f45584953540000606082015260800190565b6020808252603d908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20554e415554484f52495a45445f53454e444552000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f417373657452656769737472792e736574436f756e74657270617274794f626c60408201527f69676f723a20554e415554484f52495a45445f53454e44455200000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602b908201527f4261736552656769737472792e73657441737365743a2041535345545f414c5260408201526a454144595f45584953545360a81b606082015260800190565b60208082526034908201527f4261736552656769737472792e6f6e6c79417070726f7665644163746f72733a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526038908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20554e415554484f52495a45445f53454e4445520000000000000000606082015260800190565b60208082526029908201527f4261736552656769737472792e73657441737365743a204143544f525f4e4f5460408201526817d054141493d5915160ba1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526039908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20454e5452595f444f45535f4e4f545f455849535400000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60208082526034908201527f417373657452656769737472792e73657443726561746f724f626c69676f723a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526042908201527f41737365744163746f722e6765744e657874556e6465726c79696e674576656e60408201527f743a20554e4445524c59494e475f41535345545f444f45535f4e4f545f45584960608201526114d560f21b608082015260a00190565b6108408101610a2b82846145cd565b6108808101614fd082866145cd565b83610840830152614fe083615540565b82610860830152949350505050565b81516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b918252602082015260400190565b828152610860810160208381019061505b9084016150568387613ced565b6145b9565b61506581856154eb565b615072604085018261459d565b505061508160408401846154f8565b61508e60608401826145af565b5061509c6060840184615505565b6150a960808401826145a6565b506150b760808401846154de565b6150c460a084018261458f565b506150d260a08401846154eb565b6150df60c084018261459d565b506150ed60c0840184615512565b6150fa60e08401826145c3565b5061510860e0840184615512565b610100615117818501836145c3565b615123818601866154eb565b9150506101206151358185018361459d565b615141818601866154d1565b91505061014061515381850183614582565b61515f818601866154d1565b91505061016061517181850183614582565b61018091508085013582850152506101a081850135818501526101c091508085013582850152506101e08185013581850152610200915080850135828501525061022081850135818501526102409150808501358285015250610260818501358185015261028091508085013582850152506102a081850135818501526102c091508085013582850152506102e08185013581850152610300915080850135828501525061032081850135818501526103409150808501358285015250610360818501358185015261038091508085013582850152506103a081850135818501526103c091508085013582850152506103e08185013581850152610400915080850135828501525061042081850135818501526104409150808501358285015250610460818501358185015261048091508085013582850152506104a081850135818501526104c091508085013582850152506104e0818501358185015261050091508085013582850152506152ed61052084018286016148ff565b50615300610580830161056085016148ff565b6153126105e083016105c08501614871565b61532461066083016106408501614871565b6153366106e083016106c08501614871565b61534861076083016107408501614871565b610b5d6107e083016107c08501614871565b81518152602080830151908201526040820151608082019061537b81615536565b6040830152606083015161538e81615536565b8060608401525092915050565b60808101610a2b82846148c8565b60608101610a2b828461493a565b6000610280820190506153cb8284516145a6565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156154c957600080fd5b604052919050565b60008235610a288161554a565b60008235610a288161556d565b60008235610a288161557a565b60008235610a28816155a1565b60008235610a2881615587565b60008235610a28816155bb565b6002811061552957fe5b50565b6006811061552957fe5b6005811061552957fe5b601d811061552957fe5b6001600160a01b038116811461552957600080fd5b801515811461552957600080fd5b6009811061552957600080fd5b6002811061552957600080fd5b6006811061552957600080fd5b6005811061552957600080fd5b600d811061552957600080fd5b6013811061552957600080fd5b6004811061552957600080fdfea264697066735822122093944925e5e83896d30244065982048cb0b41c08cb72f378825d6084d7cc9dff64736f6c634300060b0033",
  "linkReferences": {
    "contracts/Core/ANN/ANNEncoder.sol": {
      "ANNEncoder": [
        {
          "length": 20,
          "start": 2618
        },
        {
          "length": 20,
          "start": 4222
        },
        {
          "length": 20,
          "start": 4380
        },
        {
          "length": 20,
          "start": 5955
        },
        {
          "length": 20,
          "start": 6136
        },
        {
          "length": 20,
          "start": 6468
        },
        {
          "length": 20,
          "start": 6860
        },
        {
          "length": 20,
          "start": 7586
        },
        {
          "length": 20,
          "start": 8095
        },
        {
          "length": 20,
          "start": 8461
        },
        {
          "length": 20,
          "start": 8611
        },
        {
          "length": 20,
          "start": 12614
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/Core/ANN/ANNEncoder.sol": {
      "ANNEncoder": [
        {
          "length": 20,
          "start": 2479
        },
        {
          "length": 20,
          "start": 4083
        },
        {
          "length": 20,
          "start": 4241
        },
        {
          "length": 20,
          "start": 5816
        },
        {
          "length": 20,
          "start": 5997
        },
        {
          "length": 20,
          "start": 6329
        },
        {
          "length": 20,
          "start": 6721
        },
        {
          "length": 20,
          "start": 7447
        },
        {
          "length": 20,
          "start": 7956
        },
        {
          "length": 20,
          "start": 8322
        },
        {
          "length": 20,
          "start": 8472
        },
        {
          "length": 20,
          "start": 12475
        }
      ]
    }
  }
}
