UNPKG

randomness-js

Version:

A library for consuming, verifying and using randomness from the dcipher network

511 lines 182 kB
import { ContractFactory, ContractTransactionResponse } from "ethers";
import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
import type { NonPayableOverrides } from "../../common";
import type { ChainlinkVRFV2_5Integration_SubscriptionTest, ChainlinkVRFV2_5Integration_SubscriptionTestInterface } from "../../ChainlinkVRFV2_5Integration_Subscription.t.sol/ChainlinkVRFV2_5Integration_SubscriptionTest";
type ChainlinkVRFV2_5Integration_SubscriptionTestConstructorParams = [signer?: Signer] | ConstructorParameters<typeof ContractFactory>;
export declare class ChainlinkVRFV2_5Integration_SubscriptionTest__factory extends ContractFactory {
    constructor(...args: ChainlinkVRFV2_5Integration_SubscriptionTestConstructorParams);
    getDeployTransaction(overrides?: NonPayableOverrides & {
        from?: string;
    }): Promise<ContractDeployTransaction>;
    deploy(overrides?: NonPayableOverrides & {
        from?: string;
    }): Promise<ChainlinkVRFV2_5Integration_SubscriptionTest & {
        deploymentTransaction(): ContractTransactionResponse;
    }>;
    connect(runner: ContractRunner | null): ChainlinkVRFV2_5Integration_SubscriptionTest__factory;
    static readonly bytecode = "0x600c8054600160ff199182168117909255601f8054909116909117905561012060405260808080528062013f6d60a03960229061003c908261012a565b5060405180606001604052806040815260200162013f2d60409139602390610064908261012a565b5060408051602081019091525f8152602490610080908261012a565b5034801561008c575f5ffd5b506101e4565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806100ba57607f821691505b6020821081036100d857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561012557805f5260205f20601f840160051c810160208510156101035750805b601f840160051c820191505b81811015610122575f815560010161010f565b50505b505050565b81516001600160401b0381111561014357610143610092565b6101578161015184546100a6565b846100de565b6020601f821160018114610189575f83156101725750848201515b5f19600385901b1c1916600184901b178455610122565b5f84815260208120601f198516915b828110156101b85787850151825560209485019460019092019101610198565b50848210156101d557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b62013d3a80620001f35f395ff3fe608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c806385226c8111610088578063b5508aa911610063578063b5508aa914610185578063ba414fa61461018d578063e20c9f71146101a5578063fa7626d4146101ad575f5ffd5b806385226c8114610153578063916a17c614610168578063b0464fdc1461017d575f5ffd5b80632ade3880116100c35780632ade3880146101195780633e5e3c231461012e5780633f7286f41461013657806366d9a9a01461013e575f5ffd5b80630a9254e4146100e95780631ed7831c146100f357806327f7e56f14610111575b5f5ffd5b6100f16101ba565b005b6100fb610241565b6040516101089190612ac0565b60405180910390f35b6100f16102ae565b610121611484565b6040516101089190612b64565b6100fb6115cd565b6100fb611638565b6101466116a3565b6040516101089190612cd2565b61015b61181c565b6040516101089190612d6e565b6101706118e7565b6040516101089190612de3565b6101706119ea565b61015b611aed565b610195611bb8565b6040519015158152602001610108565b6100fb611c88565b601f546101959060ff1681565b6101c2611cf3565b6101ca611cfd565b602780547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560288054821693831693909317909255602680548316938216939093179092556025805490911692909116919091179055565b606060168054806020026020016040519081016040528092919081815260200182805480156102a457602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610279575b5050505050905090565b6028546040805180820190915260208082527f52616e646f6d6e65737353656e646572206973206e6f74206465706c6f796564908201526103079173ffffffffffffffffffffffffffffffffffffffff16151590612317565b601f5460285460405161010090920473ffffffffffffffffffffffffffffffffffffffff90811692911690620186a0905f908490849061034690612a5e565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103905ff080158015610383573d5f5f3e3d5ffd5b506040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b1580156103ff575f5ffd5b505af1158015610411573d5f5f3e3d5ffd5b50506040517f86b9620d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506386b9620d91506024015f604051808303815f87803b15801561048d575f5ffd5b505af115801561049f573d5f5f3e3d5ffd5b505060405163ffffffff851681527f06072508f4be461bb306c2111807a859ab85e8ae617fbb868cb18a078665072d9250602001905060405180910390a16040517fc40684f000000000000000000000000000000000000000000000000000000000815263ffffffff8316600482015273ffffffffffffffffffffffffffffffffffffffff82169063c40684f0906024015f604051808303815f87803b158015610547575f5ffd5b505af1158015610559573d5f5f3e3d5ffd5b50506020546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015f604051808303815f87803b1580156105d9575f5ffd5b505af11580156105eb573d5f5f3e3d5ffd5b505050505f5f826040516105fe90612a6c565b91825273ffffffffffffffffffffffffffffffffffffffff166020820152604001604051809103905ff080158015610638573d5f5f3e3d5ffd5b5090505f8173ffffffffffffffffffffffffffffffffffffffff1663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610686573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106aa9190612e85565b6040517f13c34b7f00000000000000000000000000000000000000000000000000000000815262061a8060048201819052600160248301529192505f9073ffffffffffffffffffffffffffffffffffffffff8616906313c34b7f90604401602060405180830381865afa158015610723573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107479190612e85565b9050670de0b6b3a764000073ffffffffffffffffffffffffffffffffffffffff85166395b55cfc6107788385612e9c565b866040518363ffffffff1660e01b815260040161079791815260200190565b5f604051808303818588803b1580156107ae575f5ffd5b505af11580156107c0573d5f5f3e3d5ffd5b50506020546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063ca669fa7925060240190505f604051808303815f87803b158015610842575f5ffd5b505af1158015610854573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff1663bec4c08c856108b36040518060400160405280600c81526020017f6e65772d636f6e73756d65720000000000000000000000000000000000000000815250612399565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925273ffffffffffffffffffffffffffffffffffffffff1660248201526044015f604051808303815f87803b15801561091c575f5ffd5b505af115801561092e573d5f5f3e3d5ffd5b505050505f5f5f8873ffffffffffffffffffffffffffffffffffffffff1663dc311dd3886040518263ffffffff1660e01b815260040161097091815260200190565b5f60405180830381865afa15801561098a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526109cf9190810190612fe5565b9450945050935050610a288973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161460405180608001604052806041815260200162013c2e60419139612317565b610a4f815160021460405180606001604052806040815260200162013cc560409139612317565b610a8b610a5c8587612e9c565b846bffffffffffffffffffffffff161460405180606001604052806028815260200162013af760289139612317565b610b1b8873ffffffffffffffffffffffffffffffffffffffff16626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610afa9190612e85565b5f1460405180606001604052806028815260200162013b1f60289139612317565b6020546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526001908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015610b9c575f5ffd5b505af1158015610bae573d5f5f3e3d5ffd5b50506040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190525f60448301526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063491cc7c291506084015f604051808303815f87803b158015610c29575f5ffd5b505af1158015610c3b573d5f5f3e3d5ffd5b505050508a73ffffffffffffffffffffffffffffffffffffffff1681837feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda6442604051610c8991815260200190565b60405180910390a46040517fe726f2e100000000000000000000000000000000000000000000000000000000815263ffffffff8916600482015273ffffffffffffffffffffffffffffffffffffffff8b169063e726f2e1906024016020604051808303815f875af1158015610d00573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d249190612e85565b50610db5828b73ffffffffffffffffffffffffffffffffffffffff16626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d959190612e85565b1460405180606001604052806029815260200162013c6f60299139612317565b6040517f4b3c08f300000000000000000000000000000000000000000000000000000000815260048101839052610e889073ffffffffffffffffffffffffffffffffffffffff8c1690634b3c08f3906024015f60405180830381865afa158015610e21573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610e6691908101906130d3565b515f146040518060800160405280604a815260200162013b81604a9139612317565b6040517f48f50c0f000000000000000000000000000000000000000000000000000000008152620186a06004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906348f50c0f906024015f604051808303815f87803b158015610eed575f5ffd5b505af1158015610eff573d5f5f3e3d5ffd5b50506027546040517fda82811600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116925063da8281169150610f5c9085906023906004016131b5565b5f604051808303815f87803b158015610f73575f5ffd5b505af1158015610f85573d5f5f3e3d5ffd5b5050505061104960285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633bc32c756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101a919061329e565b6bffffffffffffffffffffffff165f146040518060600160405280603a815260200162013b47603a9139612317565b6111b25f60285f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663995cb36e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110db919061329e565b6bffffffffffffffffffffffff161180156111935750602854604080517f995cb36e00000000000000000000000000000000000000000000000000000000815290518a9273ffffffffffffffffffffffffffffffffffffffff169163995cb36e9160048083019260209291908290030181865afa15801561115e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611182919061329e565b6bffffffffffffffffffffffff1611155b60405180606001604052806040815260200162013bcb60409139612317565b6040517f4b3c08f3000000000000000000000000000000000000000000000000000000008152600481018390526112869073ffffffffffffffffffffffffffffffffffffffff8c1690634b3c08f3906024015f60405180830381865afa15801561121e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261126391908101906130d3565b5160011460405180606001604052806036815260200162013a9360369139612317565b6040517f4b3c08f3000000000000000000000000000000000000000000000000000000008152600481018390526113729073ffffffffffffffffffffffffffffffffffffffff8c1690634b3c08f3906024015f60405180830381865afa1580156112f2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261133791908101906130d3565b5f81518110611348576113486132be565b60200260200101515f141560405180606001604052806023815260200162013c0b60239139612317565b604080518082018252601381527f72656365697665642072616e646f6d6e65737300000000000000000000000000602082015290517f4b3c08f300000000000000000000000000000000000000000000000000000000815260048101849052611474919073ffffffffffffffffffffffffffffffffffffffff8d1690634b3c08f3906024015f60405180830381865afa158015611411573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261145691908101906130d3565b5f81518110611467576114676132be565b60200260200101516123aa565b5050505050505050505050505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b828210156115c4575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b828210156115ad578382905f5260205f2001805461152290613164565b80601f016020809104026020016040519081016040528092919081815260200182805461154e90613164565b80156115995780601f1061157057610100808354040283529160200191611599565b820191905f5260205f20905b81548152906001019060200180831161157c57829003601f168201915b505050505081526020019060010190611505565b5050505081525050815260200190600101906114a7565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156102a457602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610279575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156102a457602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610279575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020015f905b828210156115c4578382905f5260205f2090600202016040518060400160405290815f820180546116f690613164565b80601f016020809104026020016040519081016040528092919081815260200182805461172290613164565b801561176d5780601f106117445761010080835404028352916020019161176d565b820191905f5260205f20905b81548152906001019060200180831161175057829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561180457602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117b15790505b505050505081525050815260200190600101906116c6565b6060601a805480602002602001604051908101604052809291908181526020015f905b828210156115c4578382905f5260205f2001805461185c90613164565b80601f016020809104026020016040519081016040528092919081815260200182805461188890613164565b80156118d35780601f106118aa576101008083540402835291602001916118d3565b820191905f5260205f20905b8154815290600101906020018083116118b657829003601f168201915b50505050508152602001906001019061183f565b6060601d805480602002602001604051908101604052809291908181526020015f905b828210156115c4575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001810180548351818702810187019094528084529394919385830193928301828280156119d257602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161197f5790505b5050505050815250508152602001906001019061190a565b6060601c805480602002602001604051908101604052809291908181526020015f905b828210156115c4575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015611ad557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611a825790505b50505050508152505081526020019060010190611a0d565b60606019805480602002602001604051908101604052809291908181526020015f905b828210156115c4578382905f5260205f20018054611b2d90613164565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5990613164565b8015611ba45780601f10611b7b57610100808354040283529160200191611ba4565b820191905f5260205f20905b815481529060010190602001808311611b8757829003601f168201915b505050505081526020019060010190611b10565b6008545f9060ff1615611bcf575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015611c5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c819190612e85565b1415905090565b606060158054806020026020016040519081016040528092919081815260200182805480156102a457602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610279575050505050905090565b611cfb61243f565b565b601f546040517f06447d5600000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1660048201525f90819081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015611d85575f5ffd5b505af1158015611d97573d5f5f3e3d5ffd5b505050505f60228054611da990613164565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd590613164565b8015611e205780601f10611df757610100808354040283529160200191611e20565b820191905f5260205f20905b815481529060010190602001808311611e0357829003601f168201915b5050505050806020019051810190611e38919061332d565b90505f604051611e4790612a7a565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611e7d573d5f5f3e3d5ffd5b5094506040518060400160405280825f0151600160028110611ea157611ea16132be565b60200201518152602001825f01515f60028110611ec057611ec06132be565b602002015181525060405180604001604052808360200151600160028110611eea57611eea6132be565b6020020151815260200183602001515f60028110611f0a57611f0a6132be565b60200201519052604051611f1d90612a88565b611f2892919061338e565b604051809103905ff080158015611f41573d5f5f3e3d5ffd5b50604080518082018252600581527f424e323534000000000000000000000000000000000000000000000000000000602082015290517fbab867da00000000000000000000000000000000000000000000000000000000815291955073ffffffffffffffffffffffffffffffffffffffff87169163bab867da91611fc99188906004016133a9565b5f604051808303815f87803b158015611fe0575f5ffd5b505af1158015611ff2573d5f5f3e3d5ffd5b505050505f60405161200390612a96565b604051809103905ff08015801561201c573d5f5f3e3d5ffd5b5090505f60405161202c90612aa4565b604051809103905ff080158015612045573d5f5f3e3d5ffd5b5090505f8260405161205690612ab2565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff08015801561209a573d5f5f3e3d5ffd5b5090506120c06040518060600160405280602d815260200162013c98602d91398261278c565b5f826040516120ce90612ab2565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff080158015612112573d5f5f3e3d5ffd5b5090506121386040518060600160405280602e815260200162013ac9602e91398261278c565b601f546040517f485cc95500000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff90811660048301528a811660248301529197509195508591879183169063485cc955906044015f604051808303815f87803b1580156121b9575f5ffd5b505af11580156121cb573d5f5f3e3d5ffd5b5050601f546040517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015261010090920482166024820152908a16925063485cc95591506044015f604051808303815f87803b158015612246575f5ffd5b505af1158015612258573d5f5f3e3d5ffd5b506207a120925062061a809150620f42409050622dc6c0620c3500600a6113886122888e8888888888888861281d565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156122ef575f5ffd5b505af1158015612301573d5f5f3e3d5ffd5b5050505050505050505050505050505090919293565b6040517fa34edc03000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a34edc039061236990859085906004016133e0565b5f6040518083038186803b15801561237f575f5ffd5b505afa158015612391573d5f5f3e3d5ffd5b505050505050565b5f6123a3826128d8565b5092915050565b61243b82826040516024016123c0929190613402565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc00000000000000000000000000000000000000000000000000000000179052612a33565b5050565b61247d6040518060400160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250612399565b601f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506124fb6040518060400160405280600581526020017f616c696365000000000000000000000000000000000000000000000000000000815250612399565b60205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506125786040518060400160405280600381526020017f626f620000000000000000000000000000000000000000000000000000000000815250612399565b602180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091049091166004820152678ac7230489e800006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b158015612634575f5ffd5b505af1158015612646573d5f5f3e3d5ffd5b50506020546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152678ac7230489e800006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d91506044015f604051808303815f87803b1580156126d4575f5ffd5b505af11580156126e6573d5f5f3e3d5ffd5b50506021546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152678ac7230489e800006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d91506044015f604051808303815f87803b158015612774575f5ffd5b505af1158015612786573d5f5f3e3d5ffd5b50505050565b61243b82826040516024016127a29291906133a9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af33300000000000000000000000000000000000000000000000000000000179052612a33565b6040517f45fa435400000000000000000000000000000000000000000000000000000000815263ffffffff8089166004830152808816602483015280871660448301528086166064830152808516608483015260ff841660a4830152821660c482015273ffffffffffffffffffffffffffffffffffffffff8916906345fa43549060e4015f604051808303815f87803b1580156128b8575f5ffd5b505af11580156128ca573d5f5f3e3d5ffd5b505050505050505050505050565b5f5f826040516020016128eb9190613423565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020909101207fffa18649000000000000000000000000000000000000000000000000000000008252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015612988573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ac9190613439565b6040517fc657c718000000000000000000000000000000000000000000000000000000008152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890612a019085908790600401613452565b5f604051808303815f87803b158015612a18575f5ffd5b505af1158015612a2a573d5f5f3e3d5ffd5b50505050915091565b612a3c81612a3f565b50565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b612195806200348183390190565b610ffd806200561683390190565b610cb6806200661383390190565b612d5280620072c983390190565b613bca806200a01b83390190565b615a68806200dbe583390190565b610446806201364d83390190565b602080825282518282018190525f918401906040840190835b81811015612b0d57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612ad9565b509095945050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612c6a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b81811015612c50577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352612c3a848651612b18565b6020958601959094509290920191600101612c00565b509197505050602094850194929092019150600101612b8a565b50929695505050505050565b5f8151808452602084019350602083015f5b82811015612cc85781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101612c88565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612c6a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752612d3c6040880182612b18565b9050602082015191508681036020880152612d578183612c76565b965050506020938401939190910190600101612cf8565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612c6a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452612dce858351612b18565b94506020938401939190910190600101612d94565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612c6a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff81511686526020810151905060406020870152612e6f6040870182612c76565b9550506020938401939190910190600101612e09565b5f60208284031215612e95575f5ffd5b5051919050565b80820180821115612ed4577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b92915050565b80516bffffffffffffffffffffffff81168114612ef5575f5ffd5b919050565b805173ffffffffffffffffffffffffffffffffffffffff81168114612ef5575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715612f6d57612f6d612f1d565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612fba57612fba612f1d565b604052919050565b5f67ffffffffffffffff821115612fdb57612fdb612f1d565b5060051b60200190565b5f5f5f5f5f60a08688031215612ff9575f5ffd5b61300286612eda565b945061301060208701612eda565b9350604086015167ffffffffffffffff8116811461302c575f5ffd5b925061303a60608701612efa565b9150608086015167ffffffffffffffff811115613055575f5ffd5b8601601f81018813613065575f5ffd5b805161307861307382612fc2565b612f73565b8082825260208201915060208360051b85010192508a831115613099575f5ffd5b6020840193505b828410156130c2576130b184612efa565b8252602093840193909101906130a0565b809450505050509295509295909350565b5f602082840312156130e3575f5ffd5b815167ffffffffffffffff8111156130f9575f5ffd5b8201601f81018413613109575f5ffd5b805161311761307382612fc2565b8082825260208201915060208360051b850101925086831115613138575f5ffd5b6020840193505b8284101561315a57835182526020938401939091019061313f565b9695505050505050565b600181811c9082168061317857607f821691505b6020821081036131af577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b828152604060208201525f5f83545f8160011c905060018216806131da57607f821691505b602082108103613211577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b6040860182905260608601818015613230576001811461326457613290565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516825283151560051b82019550613290565b5f898152602090205f5b8581101561328a5781548482015260019091019060200161326e565b83019650505b509398975050505050505050565b5f602082840312156132ae575f5ffd5b6132b782612eda565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82601f8301126132fa575f5ffd5b613302612f4a565b806040840185811115613313575f5ffd5b845b81811015612b0d578051845260209384019301613315565b5f608082840312801561333e575f5ffd5b50613347612f4a565b61335184846132eb565b815261336084604085016132eb565b60208201529392505050565b805f5b600281101561278657815184526020938401939091019060010161336f565b6080810161339c828561336c565b6132b7604083018461336c565b604081525f6133bb6040830185612b18565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b8215158152604060208201525f6133fa6040830184612b18565b949350505050565b604081525f6134146040830185612b18565b90508260208301529392505050565b5f82518060208501845e5f920191825250919050565b5f60208284031215613449575f5ffd5b6132b782612efa565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6133fa6040830184612b1856fe60806040526003805463ffffffff60a01b1916610c3560a51b179055348015610026575f5ffd5b50604051612195380380612195833981016040819052610045916101c9565b60015f908155829081906001600160a01b0382166100aa5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156100da576100da81610105565b5050600380546001600160a01b0319166001600160a01b039390931692909217909155506101fa9050565b336001600160a01b0382160361015d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016100a1565b600280546001600160a01b0319166001600160a01b03838116918217909255600154604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278905f90a350565b80516001600160a01b03811681146101c4575f5ffd5b919050565b5f5f604083850312156101da575f5ffd5b6101e3836101ae565b91506101f1602084016101ae565b90509250929050565b611f8e806102075f395ff3fe60806040526004361061016d575f3560e01c8063aefb212f116100c6578063dac83d291161007c578063e1cab74511610057578063e1cab745146104cc578063f2fde38b146104eb578063fc2a88c31461050a575f5ffd5b8063dac83d2914610451578063dc311dd314610470578063df3fafe8146104a0575f5ffd5b8063bec4c08c116100ac578063bec4c08c146103f4578063c40684f014610413578063cb63179714610432575f5ffd5b8063aefb212f146103a9578063b2a7cac5146103d5575f5ffd5b806348baa1c51161012657806395b55cfc1161010157806395b55cfc146103635780639b1c385e14610376578063a21a23e414610395575f5ffd5b806348baa1c51461023b57806379ba5097146103045780638da5cb5b14610318575f5ffd5b806340d6bb821161015657806340d6bb82146101c457806341af6c87146101ed578063431ac6571461021c575f5ffd5b80630ae095401461017157806313c34b7f14610192575b5f5ffd5b34801561017c575f5ffd5b5061019061018b366004611a0c565b61051f565b005b34801561019d575f5ffd5b506101b16101ac366004611a4d565b61063f565b6040519081526020015b60405180910390f35b3480156101cf575f5ffd5b506101d8600181565b60405163ffffffff90911681526020016101bb565b3480156101f8575f5ffd5b5061020c610207366004611a7e565b61070f565b60405190151581526020016101bb565b348015610227575f5ffd5b50610190610236366004611a95565b6107a0565b348015610246575f5ffd5b506102c3610255366004611a7e565b60066020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000810463ffffffff16907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1683565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845263ffffffff909216602084015267ffffffffffffffff16908201526060016101bb565b34801561030f575f5ffd5b50610190610839565b348015610323575f5ffd5b5060015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bb565b610190610371366004611a7e565b610939565b348015610381575f5ffd5b506101b1610390366004611ab5565b6109be565b3480156103a0575f5ffd5b506101b1610d50565b3480156103b4575f5ffd5b506103c86103c3366004611a95565b610ea1565b6040516101bb9190611b2d565b3480156103e0575f5ffd5b506101906103ef366004611a7e565b610f5a565b3480156103ff575f5ffd5b5061019061040e366004611a0c565b611052565b34801561041e575f5ffd5b5061019061042d366004611b3f565b61113f565b34801561043d575f5ffd5b5061019061044c366004611a0c565b6111cd565b34801561045c575f5ffd5b5061019061046b366004611a0c565b6112ba565b34801561047b575f5ffd5b5061048f61048a366004611a7e565b611319565b6040516101bb959493929190611b58565b3480156104ab575f5ffd5b5060035461033e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104d7575f5ffd5b506101b16104e6366004611c0c565b6113f0565b3480156104f6575f5ffd5b50610190610505366004611c46565b6114c6565b348015610515575f5ffd5b506101b160045481565b5f82815260056020526040902054829073ffffffffffffffffffffffffffffffffffffffff1633146105b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43616c6c6572206973206e6f7420737562736372697074696f6e206f776e657260448201526064015b60405180910390fd5b6003546040517f0ae095400000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff848116602483015290911690630ae09540906044015b5f604051808303815f87803b158015610624575f5ffd5b505af1158015610636573d5f5f3e3d5ffd5b50505050505050565b6003545f9073ffffffffffffffffffffffffffffffffffffffff811690634b1609359061068a9074010000000000000000000000000000000000000000900463ffffffff1686611c61565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff919091166004820152602401602060405180830381865afa1580156106e2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107069190611ca2565b90505b92915050565b6003546040517f41af6c87000000000000000000000000000000000000000000000000000000008152600481018390525f9173ffffffffffffffffffffffffffffffffffffffff16906341af6c8790602401602060405180830381865afa15801561077c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107099190611cb9565b60035473ffffffffffffffffffffffffffffffffffffffff163314610821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f6e6c792072616e646f6d6e65737353656e6465722063616e2063616c6c000060448201526064016105a9565b610835826108308360016114da565b611585565b5050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146108ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016105a9565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560028054909116905560405173ffffffffffffffffffffffffffffffffffffffff909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b6003546040517f95b55cfc0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff909116906395b55cfc9034906024015f604051808303818588803b1580156109a4575f5ffd5b505af11580156109b6573d5f5f3e3d5ffd5b505050505050565b5f6109c76117bf565b6003546040517fdc311dd3000000000000000000000000000000000000000000000000000000008152602084013560048201819052915f9173ffffffffffffffffffffffffffffffffffffffff9091169063dc311dd3906024015f60405180830381865afa158015610a3b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a809190810190611d77565b5f8681526005602052604090205490945073ffffffffffffffffffffffffffffffffffffffff1633149250829150610abf90505750610abf3382611800565b610b4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43616c6c6572206973206e6f7420737562736372697074696f6e206f776e657260448201527f206f7220617070726f76656420636f6e73756d6572000000000000000000000060648201526084016105a9565b60035473ffffffffffffffffffffffffffffffffffffffff811690631da53c9f9074010000000000000000000000000000000000000000900463ffffffff16610b9a6080880160608901611b3f565b610ba49190611c61565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff919091166004820152602087013560248201526044016020604051808303815f875af1158015610c07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2b9190611ca2565b925060405180606001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001856060016020810190610c679190611b3f565b63ffffffff908116825267ffffffffffffffff3a81166020938401525f878152600684526040908190208551815495870151969092015190921678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff9590931674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff90911617929092179290921691909117905560048390555050610d4b60015f55565b919050565b600354604080517fa21a23e400000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163a21a23e4916004808301926020929190829003018187875af1158015610dbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de29190611ca2565b5f818152600560205260409081902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317905560035490517fbec4c08c0000000000000000000000000000000000000000000000000000000081526004810183905230602482015291925073ffffffffffffffffffffffffffffffffffffffff169063bec4c08c906044015f604051808303815f87803b158015610e88575f5ffd5b505af1158015610e9a573d5f5f3e3d5ffd5b5050505090565b6003546040517faefb212f000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260609173ffffffffffffffffffffffffffffffffffffffff169063aefb212f906044015f60405180830381865afa158015610f15573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107069190810190611e6c565b5f81815260056020526040902054819073ffffffffffffffffffffffffffffffffffffffff163314610fe8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43616c6c6572206973206e6f7420737562736372697074696f6e206f776e657260448201526064016105a9565b6003546040517fb2a7cac50000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063b2a7cac5906024015b5f604051808303815f87803b1580156109a4575f5ffd5b5f82815260056020526040902054829073ffffffffffffffffffffffffffffffffffffffff1633146110e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43616c6c6572206973206e6f7420737562736372697074696f6e206f776e657260448201526064016105a9565b6003546040517fbec4c08c0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff84811660248301529091169063bec4c08c9060440161060d565b611147611873565b600380547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8481168202929092179283905560405192041681527f06072508f4be461bb306c2111807a859ab85e8ae617fbb868cb18a078665072d9060200160405180910390a150565b5f82815260056020526040902054829073ffffffffffffffffffffffffffffffffffffffff16331461125b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43616c6c6572206973206e6f7420737562736372697074696f6e206f776e657260448201526064016105a9565b6003546040517fcb6317970000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff84811660248301529091169063cb6317979060440161060d565b6003546040517fdac83d290000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff83811660248301529091169063dac83d299060440161103b565b6003546040517fdc311dd3000000000000000000000000000000000000000000000000000000008152600481018390525f91829182918291606091839182918291829173ffffffffffffffffffffffffffffffffffffffff169063dc311dd3906024015f60405180830381865afa158015611396573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113db9190810190611d77565b5f9e939d50919b509950975095505050505050565b6003545f9073ffffffffffffffffffffffffffffffffffffffff811690633255c4569061143b9074010000000000000000000000000000000000000000900463ffffffff1687611c61565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff91909116600482015260248101859052604401602060405180830381865afa15801561149a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114be9190611ca2565b949350505050565b6114ce611873565b6114d7816118f6565b50565b60605f8267ffffffffffffffff8111156114f6576114f6611cd8565b60405190808252806020026020018201604052801561151f578160200160208202803683370190505b5090505f5b8381101561157d576040805160208101879052908101829052606001604051602081830303815290604052805190602001205f1c82828151811061156a5761156a611efd565b6020908102919091010152600101611524565b509392505050565b5f8281526006602081815260408084208151606081018352815473ffffffffffffffffffffffffffffffffffffffff808216835274010000000000000000000000000000000000000000820463ffffffff1683870152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16938201939093528786529390925292905580519091811661167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f72657175657374206e6f7420666f756e6400000000000000000000000000000060448201526064016105a9565b5f5f631fe543e360e01b868660405160240161169c929190611f2a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8373ffffffffffffffffffffffffffffffffffffffff16856020015163ffffffff168360405161172c9190611f42565b5f604051808303815f8787f1925050503d805f8114611766576040519150601f19603f3d011682016040523d82523d5f602084013e61176b565b606091505b50509050806106365760405173ffffffffffffffffffffffffffffffffffffffff85169088907fc551b83c151f2d1c7eeb938ac59008e0409f1c1dc1e2f112449d4d79b4589022905f90a350505050505050565b60025f54036117fa576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b5f805b825181101561186a578373ffffffffffffffffffffffffffffffffffffffff1683828151811061183557611835611efd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611862576001915050610709565b600101611803565b505f9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146118f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016105a9565b565b3373ffffffffffffffffffffffffffffffffffffffff821603611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016105a9565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600154604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278905f90a350565b73ffffffffffffffffffffffffffffffffffffffff811681146114d7575f5ffd5b5f5f60408385031215611a1d575f5ffd5b823591506020830135611a2f816119eb565b809150509250929050565b803563ffffffff81168114610d4b575f5ffd5b5f5f60408385031215611a5e575f5ffd5b611a6783611a3a565b9150611a7560208401611a3a565b90509250929050565b5f60208284031215611a8e575f5ffd5b5035919050565b5f5f60408385031215611aa6575f5ffd5b50508035926020909101359150565b5f60208284031215611ac5575f5ffd5b813567ffffffffffffffff811115611adb575f5ffd5b820160c08185031215611aec575f5ffd5b9392505050565b5f8151808452602084019350602083015f5b82811015611b23578151865260209586019590910190600101611b05565b5093949350505050565b602081525f6107066020830184611af3565b5f60208284031215611b4f575f5ffd5b61070682611a3a565b5f60a082016bffffffffffffffffffffffff881683526bffffffffffffffffffffffff8716602084015267ffffffffffffffff8616604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260a0608084015280845180835260c0850191506020860192505f5b81811015611bfd57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101611bc9565b50909998505050505050505050565b5f5f5f60608486031215611c1e575f5ffd5b611c2784611a3a565b9250611c3560208501611a3a565b929592945050506040919091013590565b5f60208284031215611c56575f5ffd5b8135611aec816119eb565b63ffffffff8181168382160190811115610709577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60208284031215611cb2575f5ffd5b5051919050565b5f60208284031215611cc9575f5ffd5b81518015158114611aec575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d4c57611d4c611cd8565b604052919050565b5f67ffffffffffffffff821115611d6d57611d6d611cd8565b5060051b60200190565b5f5f5f5f60808587031215611d8a575f5ffd5b84516bffffffffffffffffffffffff81168114611da5575f5ffd5b602086015190945067ffffffffffffffff81168114611dc2575f5ffd5b6040860151909350611dd3816119eb565b606086015190925067ffffffffffffffff811115611def575f5ffd5b8501601f81018713611dff575f5ffd5b8051611e12611e0d82611d54565b611d05565b8082825260208201915060208360051b850101925089831115611e33575f5ffd5b6020840193505b82841015611e5e578351611e4d816119eb565b825260209384019390910190611e3a565b969995985093965050505050565b5f60208284031215611e7c575f5ffd5b815167ffffffffffffffff811115611e92575f5ffd5b8201601f81018413611ea2575f5ffd5b8051611eb0611e0d82611d54565b8082825260208201915060208360051b850101925086831115611ed1575f5ffd5b6020840193505b82841015611ef3578351825260209384019390910190611ed8565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b828152604060208201525f6114be6040830184611af3565b5f82518060208501845e5f92019182525091905056fea2646970667358221220a8ac9a21208416d556424d3fd9cb5fe0fa2bc028c32368330767c267a1913a1064736f6c634300081c0033608060405234801561000f575f5ffd5b50604051610ffd380380610ffd83398101604081905261002e916101ae565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b381610106565b5050506001600160a01b0381166100dd5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055506005556101e8565b336001600160a01b0382160361015e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f5f604083850312156101bf575f5ffd5b825160208401519092506001600160a01b03811681146101dd575f5ffd5b809150509250929050565b610e08806101f55f395ff3fe6080604052600436106100d8575f3560e01c80638ea981171161007c578063a21a23e411610057578063a21a23e41461024b578063bec4c08c1461025f578063e726f2e11461027e578063f2fde38b1461029d575f5ffd5b80638ea98117146101ed57806395b55cfc1461020c5780639eccacf61461021f575f5ffd5b80634b3c08f3116100b75780634b3c08f31461014457806379ba50971461017057806388b660a6146101845780638da5cb5b146101a3575f5ffd5b80626d6cae146100dc578063064e96a0146101045780631fe543e314610125575b5f5ffd5b3480156100e7575f5ffd5b506100f160035481565b6040519081526020015b60405180910390f35b34801561010f575f5ffd5b5061012361011e366004610b92565b600555565b005b348015610130575f5ffd5b5061012361013f366004610ba9565b6102bc565b34801561014f575f5ffd5b5061016361015e366004610b92565b610344565b6040516100fb9190610c23565b34801561017b575f5ffd5b506101236103a3565b34801561018f575f5ffd5b506100f161019e366004610c65565b61049f565b3480156101ae575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100fb565b3480156101f8575f5ffd5b50610123610207366004610cad565b6104ca565b61012361021a366004610b92565b610652565b34801561022a575f5ffd5b506002546101c89073ffffffffffffffffffffffffffffffffffffffff1681565b348015610256575f5ffd5b506100f16106d7565b34801561026a575f5ffd5b50610123610279366004610ccd565b610773565b348015610289575f5ffd5b506100f1610298366004610cf7565b6107ec565b3480156102a8575f5ffd5b506101236102b7366004610cad565b6108d1565b60025473ffffffffffffffffffffffffffffffffffffffff163314610334576002546040517f1cf993f400000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b61033f8383836108e5565b505050565b5f8181526004602090815260409182902080548351818402810184019094528084526060939283018282801561039757602002820191905f5260205f20905b815481526020019060010190808311610383575b50505050509050919050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161032b565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6004602052815f5260405f2081815481106104b8575f80fd5b905f5260205f20015f91509150505481565b5f5473ffffffffffffffffffffffffffffffffffffffff163314801590610509575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561058c573361052d5f5473ffffffffffffffffffffffffffffffffffffffff1690565b6002546040517f061db9c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015291909116604482015260640161032b565b73ffffffffffffffffffffffffffffffffffffffff81166105d9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be69060200160405180910390a150565b6002546040517f95b55cfc0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff909116906395b55cfc9034906024015f604051808303818588803b1580156106bd575f5ffd5b505af11580156106cf573d5f5f3e3d5ffd5b505050505050565b600254604080517fa21a23e400000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163a21a23e4916004808301926020929190829003018187875af1158015610745573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107699190610d1a565b6005819055919050565b61077b610903565b6002546040517fbec4c08c0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff83811660248301529091169063bec4c08c906044015f604051808303815f87803b1580156106bd575f5ffd5b5f6107f5610903565b6002546040805160c0810182525f8152600554602080830191909152600382840181905263ffffffff8716606084015260016080840181905284519283019094528382529373ffffffffffffffffffffffffffffffffffffffff1691639b1c385e9160a082019061086590610985565b8152506040518263ffffffff1660e01b81526004016108849190610d31565b6020604051808303815f875af11580156108a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c49190610d1a565b6003819055949350505050565b6108d9610903565b6108e281610a41565b50565b5f8381526004602052604090206108fd908383610b35565b50505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161032b565b565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa826040516024016109be91511515815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915292915050565b3373ffffffffffffffffffffffffffffffffffffffff821603610ac0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161032b565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b828054828255905f5260205f20908101928215610b6e579160200282015b82811115610b6e578235825591602001919060010190610b53565b50610b7a929150610b7e565b5090565b5b80821115610b7a575f8155600101610b7f565b5f60208284031215610ba2575f5ffd5b5035919050565b5f5f5f60408486031215610bbb575f5ffd5b83359250602084013567ffffffffffffffff811115610bd8575f5ffd5b8401601f81018613610be8575f5ffd5b803567ffffffffffffffff811115610bfe575f5ffd5b8660208260051b8401011115610c12575f5ffd5b939660209190910195509293505050565b602080825282518282018190525f918401906040840190835b81811015610c5a578351835260209384019390920191600101610c3c565b509095945050505050565b5f5f60408385031215610c76575f5ffd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ca8575f5ffd5b919050565b5f60208284031215610cbd575f5ffd5b610cc682610c85565b9392505050565b5f5f60408385031215610cde575f5ffd5b82359150610cee60208401610c85565b90509250929050565b5f60208284031215610d07575f5ffd5b813563ffffffff81168114610cc6575f5ffd5b5f60208284031215610d2a575f5ffd5b5051919050565b60208152815160208201526020820151604082015261ffff604083015116606082015263ffffffff606083015116608082015263ffffffff60808301511660a08201525f60a083015160c08084015280518060e0850152806020830161010086015e5f61010082860101526101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509291505056fea2646970667358221220b371f1d9e18829e41d1e00e5faeb7b80c17d346a187a975c52545a1c3810df5c64736f6c634300081c0033608060405234801561000f575f5ffd5b50604051610cb6380380610cb683398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b610ad5806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100c4575f3560e01c80635bb09cf81161007d578063a217fddf11610058578063a217fddf146101fd578063bab867da14610204578063d547741f14610217575f5ffd5b80635bb09cf81461015b57806375b238fc1461019357806391d14854146101ba575f5ffd5b80632f2ff15d116100ad5780632f2ff15d146101205780632fc9fa331461013557806336568abe14610148575f5ffd5b806301ffc9a7146100c8578063248a9ca3146100f0575b5f5ffd5b6100db6100d636600461090d565b61022a565b60405190151581526020015b60405180910390f35b6101126100fe366004610953565b5f9081526020819052604090206001015490565b6040519081526020016100e7565b61013361012e366004610992565b6102c2565b005b6100db610143366004610a01565b6102ec565b610133610156366004610992565b610346565b61016e610169366004610a01565b6103a4565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e7565b6101127fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100db6101c8366004610992565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101125f81565b610133610212366004610a40565b6103e5565b610133610225366004610992565b6106a1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102bc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f828152602081905260409020600101546102dc816106c5565b6102e683836106d2565b50505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff1660018484604051610316929190610a90565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff161415905092915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610395576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039f82826107cb565b505050565b5f600183836040516103b7929190610a90565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff16905092915050565b61040e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106c5565b73ffffffffffffffffffffffffffffffffffffffff811615801590610449575073ffffffffffffffffffffffffffffffffffffffff81163b15155b6104da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d65416464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660018484604051610503929190610a90565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff16146105b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d654960448201527f440000000000000000000000000000000000000000000000000000000000000060648201526084016104d1565b80600184846040516105c9929190610a90565b908152604051908190036020018120805473ffffffffffffffffffffffffffffffffffffffff939093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915560019061062e9085908590610a90565b9081526040519081900360200181205473ffffffffffffffffffffffffffffffffffffffff16906106629085908590610a90565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546106bb816106c5565b6102e683836107cb565b6106cf8133610884565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166107c4575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556107623390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102bc565b505f6102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156107c4575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610909576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016104d1565b5050565b5f6020828403121561091d575f5ffd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461094c575f5ffd5b9392505050565b5f60208284031215610963575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461098d575f5ffd5b919050565b5f5f604083850312156109a3575f5ffd5b823591506109b36020840161096a565b90509250929050565b5f5f83601f8401126109cc575f5ffd5b50813567ffffffffffffffff8111156109e3575f5ffd5b6020830191508360208285010111156109fa575f5ffd5b9250929050565b5f5f60208385031215610a12575f5ffd5b823567ffffffffffffffff811115610a28575f5ffd5b610a34858286016109bc565b90969095509350505050565b5f5f5f60408486031215610a52575f5ffd5b833567ffffffffffffffff811115610a68575f5ffd5b610a74868287016109bc565b9094509250610a8790506020850161096a565b90509250925092565b818382375f910190815291905056fea2646970667358221220494820d46e1f78bcf8e52638cf1f300983bdb28b1178bafc45528216306e873064736f6c634300081c00335f60c081815260e0829052608081815261014060405261010083815261012084905260a052919061003390829060026102cd565b50602082015161004990600280840191906102cd565b505050348015610057575f5ffd5b50604051612d52380380612d528339810160408190526100769161039f565b6040805180820190915282815260208101829052829082905f61009b818560026102cd565b5060208201516100b190600280840191906102cd565b5090505050506100cd6100c861010260201b60201c565b610106565b6040516020016100dd91906103d2565b604051602081830303815290604052600490816100fa91906104c4565b5050506105d6565b4690565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106101665761016661057e565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106101945761019461057e565b60200101906001600160f81b03191690815f1a9053505f5b60208110156102c5578260048683602081106101ca576101ca61057e565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106101f0576101f061057e565b01602001516001600160f81b0319168261020b8360026105a6565b6102169060026105c3565b815181106102265761022661057e565b60200101906001600160f81b03191690815f1a9053508285826020811061024f5761024f61057e565b825191901a600f169081106102665761026661057e565b01602001516001600160f81b031916826102818360026105a6565b61028c9060026105c3565b6102979060016105c3565b815181106102a7576102a761057e565b60200101906001600160f81b03191690815f1a9053506001016101ac565b509392505050565b82600281019282156102fb579160200282015b828111156102fb5782518255916020019190600101906102e0565b5061030792915061030b565b5090565b5b80821115610307575f815560010161030c565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610342575f5ffd5b604080519081016001600160401b03811182821017156103645761036461031f565b806040525080604084018581111561037a575f5ffd5b845b8181101561039457805183526020928301920161037c565b509195945050505050565b5f5f608083850312156103b0575f5ffd5b6103ba8484610333565b91506103c98460408501610333565b90509250929050565b7f646369706865722d72616e646f6d6e6573732d7630312d424e32353447315f5881527f4d443a4b454343414b2d3235365f535644575f524f5f0000000000000000000060208201525f82518060208501603685015e605f60f81b6036939091019283015250603701919050565b600181811c9082168061045457607f821691505b60208210810361047257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104bf57805f5260205f20601f840160051c8101602085101561049d5750805b601f840160051c820191505b818110156104bc575f81556001016104a9565b50505b505050565b81516001600160401b038111156104dd576104dd61031f565b6104f1816104eb8454610440565b84610478565b6020601f821160018114610523575f831561050c5750848201515b5f19600385901b1c1916600184901b1784556104bc565b5f84815260208120601f198516915b828110156105525787850151825560209485019460019092019101610532565b508482101561056f57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105bd576105bd610592565b92915050565b808201808211156105bd576105bd610592565b61276f806105e35f395ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638a1f165a116100585780638a1f165a146100f3578063acae9fee1461012f578063eae1e15b14610137578063f6e548e91461014a575f5ffd5b80632e334452146100895780633033cc51146100a85780633408e470146100d05780635f7c7522146100de575b5f5ffd5b61009161016d565b60405161009f929190612300565b60405180910390f35b6100bb6100b6366004612360565b6101e6565b6040805192835260208301919091520161009f565b60405146815260200161009f565b6100e66102c6565b60405161009f91906123eb565b6100e66040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b6100e6610352565b6100e6610145366004612360565b6103d1565b61015d6101583660046123fd565b61040b565b604051901515815260200161009f565b610175612259565b61017d612259565b60408051808201918290525f91600291908390839082845b815481526020019060010190808311610195575050604080518082019182905294965085935060029250905082845b8154815260200190600101908083116101c45750505050509050915091509091565b5f5f5f6102b0600480546101f99061249c565b80601f01602080910402602001604051908101604052809291908181526020018280546102259061249c565b80156102705780601f1061024757610100808354040283529160200191610270565b820191905f5260205f20905b81548152906001019060200180831161025357829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104fa92505050565b80516020909101519093509150505b9250929050565b600480546102d39061249c565b80601f01602080910402602001604051908101604052809291908181526020018280546102ff9061249c565b801561034a5780601f106103215761010080835404028352916020019161034a565b820191905f5260205f20905b81548152906001019060200180831161032d57829003601f168201915b505050505081565b60408051608081018083526060926103cc92915f91839190820190839060029082845b81548152602001906001019080831161037557505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116103ab575050505050815250506105df565b905090565b60605f5f6103df85856101e6565b9150915061040060405180604001604052808481526020018381525061063b565b925050505b92915050565b5f5f61044b88888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061067492505050565b90505f61048c87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061067492505050565b90505f6104cd86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061071192505050565b90505f5f6104dc8484876107cc565b915091508180156104ea5750805b9c9b505050505050505050505050565b604080518082019091525f80825260208201525f610518848461093f565b90505f61052b82825b6020020151610a8a565b90505f610539836001610521565b9050610543612277565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa9050806105b757816040517f128e3f080000000000000000000000000000000000000000000000000000000081526004016105ae919061251a565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f808252602082015281516040146106f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204731206279746573206c656e67746800000000000000000060448201526064016105ae565b5060208181015160409283015183518085019094529083529082015290565b610719612295565b8151608014610784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204732206279746573206c656e67746800000000000000000060448201526064016105ae565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106108af576108af6124ed565b60200201518152602001865f01515f600281106108ce576108ce6124ed565b6020020151815260200186602001516001600281106108ef576108ef6124ed565b6020020151815260200186602001515f6002811061090f5761090f6124ed565b6020020151905290506109206122ba565b6020816101808460086107d05a03fa9051151597909650945050505050565b610947612259565b5f6109528484610f32565b90505f5f5f5f6018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709086048870151606088015177ffffffffffffffffffffffffffffffffffffffffffffffff908116975016945092507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905084817801000000000000000000000000000000000000000000000000860908604080518082019091529283526020830152509695505050505050565b610a92612259565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610aee576040517fd53e9415000000000000000000000000000000000000000000000000000000008152600481018390526024016105ae565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760047f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478586090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260010890507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610bac837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612577565b60010891505f610bde7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4783850961111c565b90505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47888b09090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610cb2837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612577565b7f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47837f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786830990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47807f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610dec610de788611126565b611198565b5f0b600103610e5557868c52610e0187611126565b9050610e0c81611248565b60208e0191909152915081610e50576040517f396ec771000000000000000000000000000000000000000000000000000000008152600481018290526024016105ae565b610ed1565b610e61610de787611126565b5f0b600103610e7657858c52610e0186611126565b828c52610e8283611126565b9050610e8d81611248565b60208e0191909152915081610ed1576040517f396ec771000000000000000000000000000000000000000000000000000000008152600481018290526024016105ae565b60208c0151610edf90611282565b610ee88e611282565b14610f225760208c0151610f1c907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612577565b60208d01525b5050505050505050505050919050565b815160609060ff811115610f7457836040517f26e4f9ba0000000000000000000000000000000000000000000000000000000081526004016105ae91906123eb565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610fb497969594939291906125a1565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610fe9949392919061267c565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b818110156110e05785841861105a8260016126ee565b8d8b60405160200161106f949392919061267c565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181028501810195909552805194810194909420939450600101611044565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016020908102820101919091529550505050505092915050565b5f6104058261128e565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47868709090892915050565b5f5f6111a3836119e6565b90506111d060017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612577565b81036111fe57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b801580159061120e575080600114155b15610405576040517f396ec771000000000000000000000000000000000000000000000000000000008152600481018490526024016105ae565b5f5f61125383611b13565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838409149050915091565b5f610405600283612701565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360a08401527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760c0808501919091529293505f92839160055afa90505f51925080611b0c576040517fc6daf7ab000000000000000000000000000000000000000000000000000000008152600481018590527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360248201527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760448201526064016105ae565b5050919050565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806122a8612259565b81526020016122b5612259565b905290565b60405180602001604052806001906020820280368337509192915050565b805f5b60028110156122fa5781518452602093840193909101906001016122db565b50505050565b6080810161230e82856122d8565b61231b60408301846122d8565b9392505050565b5f5f83601f840112612332575f5ffd5b50813567ffffffffffffffff811115612349575f5ffd5b6020830191508360208285010111156102bf575f5ffd5b5f5f60208385031215612371575f5ffd5b823567ffffffffffffffff811115612387575f5ffd5b61239385828601612322565b90969095509350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61231b602083018461239f565b5f5f5f5f5f5f60608789031215612412575f5ffd5b863567ffffffffffffffff811115612428575f5ffd5b61243489828a01612322565b909750955050602087013567ffffffffffffffff811115612453575f5ffd5b61245f89828a01612322565b909550935050604087013567ffffffffffffffff81111561247e575f5ffd5b61248a89828a01612322565b979a9699509497509295939492505050565b600181811c908216806124b057607f821691505b6020821081036124e7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6080810181835f5b6004811015612541578151835260209283019290910190600101612522565b50505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156104055761040561254a565b5f81518060208401855e5f93019283525090919050565b5f6125b56125af838b61258a565b8961258a565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681527fff000000000000000000000000000000000000000000000000000000000000008760f81b1660018201527fff000000000000000000000000000000000000000000000000000000000000008660f81b166002820152612640600382018661258a565b60f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016845250506001909101979650505050505050565b8481527fff000000000000000000000000000000000000000000000000000000000000008460f81b1660208201525f6126b8602183018561258a565b60f89390931b7fff0000000000000000000000000000000000000000000000000000000000000016835250506001019392505050565b808201808211156104055761040561254a565b5f82612734577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50069056fea264697066735822122028d20a5d414f9aeeef1fff1ecfa26af3f5e307f772c317fd3dad1f62e0eaf87164736f6c634300081c003360a0604052306080525f8055348015610016575f5ffd5b5061001f610024565b6100d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100745760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613ace6100fc5f395f81816123f50152818161241e015261263d0152613ace5ff3fe6080604052600436106101c5575f3560e01c80639010d07c116100f2578063b094728911610092578063d547741f11610062578063d547741f1461061c578063da8281161461063b578063e63b5d581461065a578063e6b3ca711461066e575f5ffd5b8063b094728914610593578063c58343ef146105b2578063ca15c873146105de578063cd802c91146105fd575f5ffd5b8063a217fddf116100cd578063a217fddf146104e0578063a3246ad3146104f3578063ac9650d81461051f578063ad3cb1cc1461054b575f5ffd5b80639010d07c1461040d57806391d148541461045157806395b8d073146104c1575f5ffd5b80634b96e16611610168578063571d708711610138578063571d7087146103805780636f421ea91461039457806375b238fc146103a857806381d12c58146103db575f5ffd5b80634b96e166146102ea5780634f1ef2861461030b57806352d1902d1461031e57806354fd4d5014610332575f5ffd5b80632f2ff15d116101a35780632f2ff15d1461027957806336568abe1461029857806347c03186146102b7578063485cc955146102cb575f5ffd5b806301ffc9a7146101c957806316cc9a98146101fd578063248a9ca31461021e575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e3366004612f81565b61069a565b60405190151581526020015b60405180910390f35b348015610208575f5ffd5b5061021c610217366004612fe1565b6106f5565b005b348015610229575f5ffd5b5061026b610238366004612ffc565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f4565b348015610284575f5ffd5b5061021c610293366004613013565b61078c565b3480156102a3575f5ffd5b5061021c6102b2366004613013565b6107d5565b3480156102c2575f5ffd5b5061026b5f5481565b3480156102d6575f5ffd5b5061021c6102e5366004613041565b610833565b3480156102f5575f5ffd5b506102fe610afe565b6040516101f4919061306d565b61021c610319366004613134565b610b0f565b348015610329575f5ffd5b5061026b610b2e565b34801561033d575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516101f491906131ef565b34801561038b575f5ffd5b506102fe610b5c565b34801561039f575f5ffd5b506102fe610b68565b3480156103b3575f5ffd5b5061026b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156103e6575f5ffd5b506103fa6103f5366004612ffc565b610b74565b6040516101f49796959493929190613201565b348015610418575f5ffd5b5061042c610427366004613294565b610e6a565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b34801561045c575f5ffd5b506101e861046b366004613013565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156104cc575f5ffd5b5061026b6104db3660046132f9565b610eaa565b3480156104eb575f5ffd5b5061026b5f81565b3480156104fe575f5ffd5b5061051261050d366004612ffc565b6115af565b6040516101f49190613398565b34801561052a575f5ffd5b5061053e6105393660046133e5565b6115f2565b6040516101f49190613456565b348015610556575f5ffd5b506103736040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561059e575f5ffd5b506101e86105ad366004612ffc565b6116d8565b3480156105bd575f5ffd5b506105d16105cc366004612ffc565b6116e4565b6040516101f491906134d7565b3480156105e9575f5ffd5b5061026b6105f8366004612ffc565b611a5c565b348015610608575f5ffd5b506101e8610617366004612ffc565b611a93565b348015610627575f5ffd5b5061021c610636366004613013565b611ab0565b348015610646575f5ffd5b5061021c6106553660046135a8565b611af3565b348015610665575f5ffd5b5061026b612278565b348015610679575f5ffd5b5060025461042c9073ffffffffffffffffffffffffffffffffffffffff1681565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806106ef57506106ef82612283565b92915050565b61071e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612319565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546107c581612319565b6107cf8383612326565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610824576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61082e828261237b565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f8115801561087d5750825b90505f8267ffffffffffffffff1660011480156108995750303b155b9050811580156108a7575080155b156108de576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561093f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6109476123c7565b61094f6123c7565b6109797fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177588612326565b6109e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064015b60405180910390fd5b6109ee5f88612326565b610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4772616e7420726f6c652072657665727473000000000000000000000000000060448201526064016109db565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790558315610af55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6060610b0a60056123d1565b905090565b610b176123dd565b610b20826124e1565b610b2a828261250a565b5050565b5f610b37612625565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6060610b0a60036123d1565b6060610b0a60076123d1565b60016020525f9081526040902080548190610b8e906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610bba906135f0565b8015610c055780601f10610bdc57610100808354040283529160200191610c05565b820191905f5260205f20905b815481529060010190602001808311610be857829003601f168201915b505050505090806001018054610c1a906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c46906135f0565b8015610c915780601f10610c6857610100808354040283529160200191610c91565b820191905f5260205f20905b815481529060010190602001808311610c7457829003601f168201915b505050505090806002018054610ca6906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd2906135f0565b8015610d1d5780601f10610cf457610100808354040283529160200191610d1d565b820191905f5260205f20905b815481529060010190602001808311610d0057829003601f168201915b505050505090806003018054610d32906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5e906135f0565b8015610da95780601f10610d8057610100808354040283529160200191610da9565b820191905f5260205f20905b815481529060010190602001808311610d8c57829003601f168201915b5050506004840154600585018054949573ffffffffffffffffffffffffffffffffffffffff909216949193509150610de0906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0c906135f0565b8015610e575780601f10610e2e57610100808354040283529160200191610e57565b820191905f5260205f20905b815481529060010190602001808311610e3a57829003601f168201915b5050506006909301549192505060ff1687565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610ea29084612694565b949350505050565b5f60015f5f828254610ebc919061366e565b90915550506002546040517f2fc9fa3300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632fc9fa3390610f19908a908a906004016136aa565b602060405180830381865afa158015610f34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5891906136bd565b610fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016109db565b611005600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061269f9050565b611091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4d657373616765206661696c6564206c656e67746820626f756e64732063686560448201527f636b00000000000000000000000000000000000000000000000000000000000060648201526084016109db565b6110d75f61100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061269f9050565b611162576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e6473206360448201527f6865636b0000000000000000000000000000000000000000000000000000000060648201526084016109db565b818015611234576111a784848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061274b92505050565b15611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a6560448201527f726f73000000000000000000000000000000000000000000000000000000000060648201526084016109db565b6002546040517f5bb09cf80000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf89061128c908c908c906004016136aa565b602060405180830381865afa1580156112a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cb91906136dc565b6040517feae1e15b00000000000000000000000000000000000000000000000000000000815290915081905f9073ffffffffffffffffffffffffffffffffffffffff83169063eae1e15b90611326908c908c906004016136aa565b5f60405180830381865afa158015611340573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261136791908101906136f7565b604080516101006020601f8d01819004028201810190925260e081018b81529293509182918c908c90819085018382808284375f92019190915250505090825250602080820184905260408051601f8b0183900483028101830182528a8152920191908a908a90819084018382808284375f92019190915250505090825250604080516020601f8f018190048102820181019092528d815291810191908e908e90819084018382808284375f920182905250938552505033602080850191909152604080518083018252848152818601526060909401839052825483526001905250208151819061145890826137b7565b506020820151600182019061146d90826137b7565b506040820151600282019061148290826137b7565b506060820151600382019061149790826137b7565b5060808201516004820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560a082015160058201906114f790826137b7565b5060c09190910151600690910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f5461153f906005906127ae565b503373ffffffffffffffffffffffffffffffffffffffff165f547ff0a5ef4bc87d6534674b1469f4b31d03c6510d0f7ab353f3e53f9d1d87ead02b8d8d8d8d878e8e426040516115969897969594939291906138b0565b60405180910390a350505f549998505050505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060208190526040909120606091906115eb906123d1565b9392505050565b604080515f8152602081019091526060908267ffffffffffffffff81111561161c5761161c6130af565b60405190808252806020026020018201604052801561164f57816020015b606081526020019060019003908161163a5790505b5091505f5b838110156116d0576116ab3086868481811061167257611672613928565b90506020028101906116849190613955565b85604051602001611697939291906139cd565b6040516020818303038152906040526127b9565b8382815181106116bd576116bd613928565b6020908102919091010152600101611654565b505092915050565b5f6106ef60078361282f565b61173a6040518060e00160405280606081526020016060815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f151581525090565b5f8281526001602052604090819020815160e08101909252805482908290611761906135f0565b80601f016020809104026020016040519081016040528092919081815260200182805461178d906135f0565b80156117d85780601f106117af576101008083540402835291602001916117d8565b820191905f5260205f20905b8154815290600101906020018083116117bb57829003601f168201915b505050505081526020016001820180546117f1906135f0565b80601f016020809104026020016040519081016040528092919081815260200182805461181d906135f0565b80156118685780601f1061183f57610100808354040283529160200191611868565b820191905f5260205f20905b81548152906001019060200180831161184b57829003601f168201915b50505050508152602001600282018054611881906135f0565b80601f01602080910402602001604051908101604052809291908181526020018280546118ad906135f0565b80156118f85780601f106118cf576101008083540402835291602001916118f8565b820191905f5260205f20905b8154815290600101906020018083116118db57829003601f168201915b50505050508152602001600382018054611911906135f0565b80601f016020809104026020016040519081016040528092919081815260200182805461193d906135f0565b80156119885780601f1061195f57610100808354040283529160200191611988565b820191905f5260205f20905b81548152906001019060200180831161196b57829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff1660208201526005820180546040909201916119c5906135f0565b80601f01602080910402602001604051908101604052809291908181526020018280546119f1906135f0565b8015611a3c5780601f10611a1357610100808354040283529160200191611a3c565b820191905f5260205f20905b815481529060010190602001808311611a1f57829003601f168201915b50505091835250506006919091015460ff16151560209091015292915050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206115eb90612846565b5f611a9f60058361282f565b806106ef57506106ef60078361282f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611ae981612319565b6107cf838361237b565b611afc83611a93565b611b88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f744944000000000000000000000000000000000000000000000000000000000060648201526084016109db565b5f83815260016020526040808220815160e08101909252805482908290611bae906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611bda906135f0565b8015611c255780601f10611bfc57610100808354040283529160200191611c25565b820191905f5260205f20905b815481529060010190602001808311611c0857829003601f168201915b50505050508152602001600182018054611c3e906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6a906135f0565b8015611cb55780601f10611c8c57610100808354040283529160200191611cb5565b820191905f5260205f20905b815481529060010190602001808311611c9857829003601f168201915b50505050508152602001600282018054611cce906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611cfa906135f0565b8015611d455780601f10611d1c57610100808354040283529160200191611d45565b820191905f5260205f20905b815481529060010190602001808311611d2857829003601f168201915b50505050508152602001600382018054611d5e906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611d8a906135f0565b8015611dd55780601f10611dac57610100808354040283529160200191611dd5565b820191905f5260205f20905b815481529060010190602001808311611db857829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff166020820152600582018054604090920191611e12906135f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3e906135f0565b8015611e895780601f10611e6057610100808354040283529160200191611e89565b820191905f5260205f20905b815481529060010190602001808311611e6c57829003601f168201915b50505091835250506006919091015460ff16151560209091015260608101516002546040517f5bb09cf800000000000000000000000000000000000000000000000000000000815292935090915f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890611f039085906004016131ef565b602060405180830381865afa158015611f1e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4291906136dc565b90505f8190508073ffffffffffffffffffffffffffffffffffffffff1663f6e548e9856020015188888573ffffffffffffffffffffffffffffffffffffffff1663acae9fee6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611fb3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fda91908101906136f7565b6040518563ffffffff1660e01b8152600401611ff994939291906139ec565b602060405180830381865afa158015612014573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061203891906136bd565b61209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016109db565b5f846080015173ffffffffffffffffffffffffffffffffffffffff1663c8db658260e01b8989896040516024016120d793929190613a30565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516121429190613a49565b5f604051808303815f865af19150503d805f811461217b576040519150601f19603f3d011682016040523d82523d5f602084013e612180565b606091505b50505f89815260016020819052604090912060060180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905590506121cb60058961284f565b508061220c576121dc6007896127ae565b5060405188907fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde3167905f90a261226e565b612215886116d8565b156122275761222560078961284f565b505b6122326003896127ae565b50877f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b3695588886040516122659291906136aa565b60405180910390a25b5050505050505050565b5f610b0a6005612846565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106ef57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106ef565b612323813361285a565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816123538585612900565b90508015610ea2575f8581526020839052604090206123729085612a1e565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816123a88585612a3f565b90508015610ea2575f8581526020839052604090206123729085612b1b565b6123cf612b3c565b565b60605f6115eb83612ba3565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806124aa57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166124917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b156123cf576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123237fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612319565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612571575060408051601f3d908101601f1916820190925261256e91810190613a54565b60015b6125bf576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016109db565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461261b576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016109db565b61082e8383612bfc565b3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146123cf576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6115eb8383612c5e565b5f81831115612730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016109db565b83518381108015906127425750828111155b95945050505050565b5f805b82518110156127a55782818151811061276957612769613928565b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561279d57505f92915050565b60010161274e565b50600192915050565b5f6115eb8383612c84565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff16846040516127e29190613a49565b5f60405180830381855af49150503d805f811461281a576040519150601f19603f3d011682016040523d82523d5f602084013e61281f565b606091505b5091509150612742858383612cd0565b5f81815260018301602052604081205415156115eb565b5f6106ef825490565b5f6115eb8383612d5f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610b2a576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016109db565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16612a15575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556129b13390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106ef565b5f9150506106ef565b5f6115eb8373ffffffffffffffffffffffffffffffffffffffff8416612c84565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615612a15575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106ef565b5f6115eb8373ffffffffffffffffffffffffffffffffffffffff8416612d5f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166123cf576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060815f01805480602002602001604051908101604052809291908181526020018280548015612bf057602002820191905f5260205f20905b815481526020019060010190808311612bdc575b50505050509050919050565b612c0582612e39565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612c565761082e82826127b9565b610b2a612f07565b5f825f018281548110612c7357612c73613928565b905f5260205f200154905092915050565b5f818152600183016020526040812054612cc957508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556106ef565b505f6106ef565b606082612ce557612ce082612f3f565b6115eb565b8151158015612d09575073ffffffffffffffffffffffffffffffffffffffff84163b155b15612d58576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109db565b50806115eb565b5f8181526001830160205260408120548015612a15575f612d81600183613915565b85549091505f90612d9490600190613915565b9050808214612df3575f865f018281548110612db257612db2613928565b905f5260205f200154905080875f018481548110612dd257612dd2613928565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612e0457612e04613a6b565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506106ef565b8073ffffffffffffffffffffffffffffffffffffffff163b5f03612ea1576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016109db565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b34156123cf576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805115612f4f5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60208284031215612f91575f5ffd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146115eb575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114612323575f5ffd5b5f60208284031215612ff1575f5ffd5b81356115eb81612fc0565b5f6020828403121561300c575f5ffd5b5035919050565b5f5f60408385031215613024575f5ffd5b82359150602083013561303681612fc0565b809150509250929050565b5f5f60408385031215613052575f5ffd5b823561305d81612fc0565b9150602083013561303681612fc0565b602080825282518282018190525f918401906040840190835b818110156130a4578351835260209384019390920191600101613086565b509095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613105576131056130af565b604052919050565b5f67ffffffffffffffff821115613126576131266130af565b50601f01601f191660200190565b5f5f60408385031215613145575f5ffd5b823561315081612fc0565b9150602083013567ffffffffffffffff81111561316b575f5ffd5b8301601f8101851361317b575f5ffd5b803561318e6131898261310d565b6130dc565b8181528660208385010111156131a2575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6115eb60208301846131c1565b60e081525f61321360e083018a6131c1565b8281036020840152613225818a6131c1565b9050828103604084015261323981896131c1565b9050828103606084015261324d81886131c1565b905073ffffffffffffffffffffffffffffffffffffffff8616608084015282810360a084015261327d81866131c1565b91505082151560c083015298975050505050505050565b5f5f604083850312156132a5575f5ffd5b50508035926020909101359150565b5f5f83601f8401126132c4575f5ffd5b50813567ffffffffffffffff8111156132db575f5ffd5b6020830191508360208285010111156132f2575f5ffd5b9250929050565b5f5f5f5f5f5f6060878903121561330e575f5ffd5b863567ffffffffffffffff811115613324575f5ffd5b61333089828a016132b4565b909750955050602087013567ffffffffffffffff81111561334f575f5ffd5b61335b89828a016132b4565b909550935050604087013567ffffffffffffffff81111561337a575f5ffd5b61338689828a016132b4565b979a9699509497509295939492505050565b602080825282518282018190525f918401906040840190835b818110156130a457835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016133b1565b5f5f602083850312156133f6575f5ffd5b823567ffffffffffffffff81111561340c575f5ffd5b8301601f8101851361341c575f5ffd5b803567ffffffffffffffff811115613432575f5ffd5b8560208260051b8401011115613446575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156134cb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526134b68583516131c1565b9450602093840193919091019060010161347c565b50929695505050505050565b602081525f825160e060208401526134f36101008401826131c1565b90506020840151601f1984830301604085015261351082826131c1565b9150506040840151601f1984830301606085015261352e82826131c1565b9150506060840151601f1984830301608085015261354c82826131c1565b91505073ffffffffffffffffffffffffffffffffffffffff60808501511660a084015260a0840151601f198483030160c085015261358a82826131c1565b91505060c08401516135a060e085018215159052565b509392505050565b5f5f5f604084860312156135ba575f5ffd5b83359250602084013567ffffffffffffffff8111156135d7575f5ffd5b6135e3868287016132b4565b9497909650939450505050565b600181811c9082168061360457607f821691505b60208210810361363b577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106ef576106ef613641565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b602081525f610ea2602083018486613681565b5f602082840312156136cd575f5ffd5b815180151581146115eb575f5ffd5b5f602082840312156136ec575f5ffd5b81516115eb81612fc0565b5f60208284031215613707575f5ffd5b815167ffffffffffffffff81111561371d575f5ffd5b8201601f8101841361372d575f5ffd5b805161373b6131898261310d565b81815285602083850101111561374f575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b601f82111561082e57805f5260205f20601f840160051c810160208510156137915750805b601f840160051c820191505b818110156137b0575f815560010161379d565b5050505050565b815167ffffffffffffffff8111156137d1576137d16130af565b6137e5816137df84546135f0565b8461376c565b6020601f821160018114613836575f83156138005750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1784556137b0565b5f84815260208120601f198516915b828110156138655787850151825560209485019460019092019101613845565b50848210156138a157868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60a081525f6138c360a083018a8c613681565b82810360208401526138d681898b613681565b905082810360408401526138ea81886131c1565b905082810360608401526138ff818688613681565b9150508260808301529998505050505050505050565b818103818111156106ef576106ef613641565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613988575f5ffd5b83018035915067ffffffffffffffff8211156139a2575f5ffd5b6020019150368190038213156132f2575f5ffd5b5f81518060208401855e5f93019283525090919050565b828482375f8382015f81526139e281856139b6565b9695505050505050565b606081525f6139fe60608301876131c1565b8281036020840152613a11818688613681565b90508281036040840152613a2581856131c1565b979650505050505050565b838152604060208201525f612742604083018486613681565b5f6115eb82846139b6565b5f60208284031215613a64575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220b7e5c8f9420b08d55db7dda8c9d5fee88d48d70e540731a5bcc902d4bbc3955b64736f6c634300081c003360a0604052306080525f600c55348015610017575f5ffd5b5060015f55610024610029565b6100db565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100795760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d85780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516159676101015f395f8181613a0a01528181613a330152613c7001526159675ff3fe608060405260043610610345575f3560e01c806391d14854116101b2578063b2a7cac5116100f2578063cb63179711610092578063dac83d291161006d578063dac83d2914610c09578063dc311dd314610c28578063f8fa0d6614610c57578063fb1a002a14610c76575f5ffd5b8063cb63179714610bac578063cd802c9114610bcb578063d547741f14610bea575f5ffd5b8063c3f909d4116100cd578063c3f909d414610aaa578063c58343ef14610b42578063c8db658214610b6e578063ca15c87314610b8d575f5ffd5b8063b2a7cac514610a4d578063bd18636b14610a6c578063bec4c08c14610a8b575f5ffd5b8063a3246ad31161015d578063aa433aff11610138578063aa433aff146109a5578063ad3cb1cc146109c4578063aefb212f14610a0c578063affed0e014610a38575f5ffd5b8063a3246ad314610947578063a3907d7114610973578063a608a1e114610987575f5ffd5b80639d40a6fd1161018d5780639d40a6fd146108e7578063a217fddf14610920578063a21a23e414610933575f5ffd5b806391d148541461084057806395b55cfc146108b0578063995cb36e146108c3575f5ffd5b8063485cc9551161028857806364d51a2a116102285780637d468106116102035780637d46810614610775578063811ee32a146107c65780638a1f165a146107d95780639010d07c14610821575f5ffd5b806364d51a2a146106fc57806375b238fc14610723578063775b839c14610756575f5ffd5b806352d1902d1161026357806352d1902d1461066257806354236fb31461067657806354fd4d501461069557806357a8070a146106e3575f5ffd5b8063485cc955146106115780634b160935146106305780634f1ef2861461064f575f5ffd5b80632f2770db116102f357806336568abe116102ce57806336568abe146105805780633bc32c751461059f57806341af6c87146105d357806345fa4354146105f2575f5ffd5b80632f2770db1461052e5780632f2ff15d146105425780633255c45614610561575f5ffd5b806318e3dd271161032357806318e3dd271461047f5780631da53c9f146104c0578063248a9ca3146104e1575f5ffd5b806301ffc9a714610349578063088070f51461037d5780630ae095401461045e575b5f5ffd5b348015610354575f5ffd5b50610368610363366004614cc2565b610c97565b60405190151581526020015b60405180910390f35b348015610388575f5ffd5b50600a546104179063ffffffff8082169164010000000081048216916801000000000000000082048116916c010000000000000000000000008104821691700100000000000000000000000000000000820481169160ff740100000000000000000000000000000000000000008204169175010000000000000000000000000000000000000000009091041687565b6040805163ffffffff988916815296881660208801529487169486019490945291851660608501528416608084015260ff1660a083015290911660c082015260e001610374565b348015610469575f5ffd5b5061047d610478366004614d22565b610cf2565b005b34801561048a575f5ffd5b506008546104a3906bffffffffffffffffffffffff1681565b6040516bffffffffffffffffffffffff9091168152602001610374565b6104d36104ce366004614d68565b610d5c565b604051908152602001610374565b3480156104ec575f5ffd5b506104d36104fb366004614d90565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b348015610539575f5ffd5b5061047d6112c0565b34801561054d575f5ffd5b5061047d61055c366004614d22565b61133f565b34801561056c575f5ffd5b506104d361057b366004614d68565b611388565b34801561058b575f5ffd5b5061047d61059a366004614d22565b6113a0565b3480156105aa575f5ffd5b506008546104a3906c0100000000000000000000000090046bffffffffffffffffffffffff1681565b3480156105de575f5ffd5b506103686105ed366004614d90565b6113f9565b3480156105fd575f5ffd5b5061047d61060c366004614da7565b6114a2565b34801561061c575f5ffd5b5061047d61062b366004614e2f565b61175d565b34801561063b575f5ffd5b506104d361064a366004614e5b565b611ac2565b61047d61065d366004614ef0565b611ad3565b34801561066d575f5ffd5b506104d3611af2565b348015610681575f5ffd5b5061047d610690366004614fb5565b611b21565b3480156106a0575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b604051610374919061501c565b3480156106ee575f5ffd5b50600b546103689060ff1681565b348015610707575f5ffd5b50610710606481565b60405161ffff9091168152602001610374565b34801561072e575f5ffd5b506104d37fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b348015610761575f5ffd5b506106d661077036600461502e565b611bcb565b348015610780575f5ffd5b506001546107a19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610374565b6104d36107d4366004614e5b565b611c34565b3480156107e4575f5ffd5b506106d66040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b34801561082c575f5ffd5b506107a161083b366004615084565b611d1e565b34801561084b575f5ffd5b5061036861085a366004614d22565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61047d6108be366004614d90565b611d5e565b3480156108ce575f5ffd5b506009546104a3906bffffffffffffffffffffffff1681565b3480156108f2575f5ffd5b506005546109079067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610374565b34801561092b575f5ffd5b506104d35f81565b34801561093e575f5ffd5b506104d3611e94565b348015610952575f5ffd5b50610966610961366004614d90565b6120d8565b60405161037491906150f4565b34801561097e575f5ffd5b5061047d612114565b348015610992575f5ffd5b50600b5461036890610100900460ff1681565b3480156109b0575f5ffd5b5061047d6109bf366004614d90565b61218f565b3480156109cf575f5ffd5b506106d66040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b348015610a17575f5ffd5b50610a2b610a26366004615084565b6121ef565b6040516103749190615106565b348015610a43575f5ffd5b506104d3600c5481565b348015610a58575f5ffd5b5061047d610a67366004614d90565b6122fe565b348015610a77575f5ffd5b5061047d610a86366004614fb5565b61244e565b348015610a96575f5ffd5b5061047d610aa5366004614d22565b61252b565b348015610ab5575f5ffd5b50600a5463ffffffff8082169164010000000081048216916801000000000000000082048116916c010000000000000000000000008104821691700100000000000000000000000000000000820481169160ff7401000000000000000000000000000000000000000082041691750100000000000000000000000000000000000000000090910416610417565b348015610b4d575f5ffd5b50610b61610b5c366004614d90565b6126a6565b6040516103749190615205565b348015610b79575f5ffd5b5061047d610b88366004615217565b61293a565b348015610b98575f5ffd5b506104d3610ba7366004614d90565b6129c6565b348015610bb7575f5ffd5b5061047d610bc6366004614d22565b6129fd565b348015610bd6575f5ffd5b50610368610be5366004614d90565b612cd8565b348015610bf5575f5ffd5b5061047d610c04366004614d22565b612d69565b348015610c14575f5ffd5b5061047d610c23366004614d22565b612dac565b348015610c33575f5ffd5b50610c47610c42366004614d90565b612e7b565b604051610374949392919061528e565b348015610c62575f5ffd5b5061047d610c71366004614fb5565b612f63565b348015610c81575f5ffd5b50610c8a612ffa565b60405161037491906152ea565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610cec5750610cec8261326a565b92915050565b81610cfc81613300565b610d04613394565b610d0d836113f9565b15610d44576040517fb42f66e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4e83836133d5565b610d5760015f55565b505050565b600b545f9060ff16610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e6669677572656400000000000060448201526064015b60405180910390fd5b600b54610100900460ff1615610e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e74726163742069732064697361626c65640000000000000000000000006044820152606401610dc6565b81151580610e4e57505f34115b610eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4469726563742066756e64696e6720726571756972656420666f72207265717560448201527f6573742066756c66696c6c6d656e742063616c6c6261636b00000000000000006064820152608401610dc6565b610ee4838361345c565b6001600c5f828254610ef69190615398565b909155505060408051610120810182528381523460208083019190915263ffffffff8616828401525f606083018190528351808301855281815260808401528351808301855281815260a08401528351808301855281815260c0840152600c5460e084018190523361010085018190528551808701909652908552918401919091529091610f8390611bcb565b60408051602080820183525f82528251808401909352600583527f424e32353400000000000000000000000000000000000000000000000000000090830152919250610fd0908383613758565b606084018181526080850184815260a086018490525f838152600d602090815260409182902088518155908801516001820155908701516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9092169190911790559151600383015551919550849160048201906110599082615447565b5060a0820151600582019061106e9082615447565b5060c082015160068201906110839082615447565b5060e0820151600782015561010090910151600890910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055600e80546001810182555f9190915283517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd600990920291820190815560208501517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fe83015560408501517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3ff830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff90921691909117905560608501517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c400830155608085015185927fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40101906111f99082615447565b5060a0820151600582019061120e9082615447565b5060c082015160068201906112239082615447565b5060e0820151600782015561010090910151600890910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055600c5460405142815233919086907feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda649060200160405180910390a450505092915050565b6112e97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756137f2565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556040517f75884cdadc4a89e8b545db800057f06ec7f5338a08183c7ba515f2bfdd9fe1e1905f90a1565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611378816137f2565b61138283836137fc565b50505050565b5f6113998363ffffffff1683613851565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811633146113ef576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d57828261399c565b5f8181526003602052604081206002018054825b81811015611498575f60025f85848154811061142b5761142b61555e565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352828101939093526040918201812089825290925290205467ffffffffffffffff690100000000000000000090910416111561149057506001949350505050565b60010161140d565b505f949350505050565b6114cb7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756137f2565b60ff8216609b11611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964205072656d69756d2050657263656e746167650000000000006044820152606401610dc6565b6040805160e0808201835263ffffffff8a81168084528a821660208086018290528b84168688018190528b851660608089018290528c87166080808b0182905260ff8e1660a0808d01829052998e1660c09c8d01819052600a80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000168b176401000000008b02177fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000089027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16176c010000000000000000000000008802177fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000086027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1617740100000000000000000000000000000000000000008402177fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000008302179055600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558d51998a52968901979097529a8701939093528501529683019690965291810191909152918201929092527f55a28fde295f482c9f32d670c116103bca15724bcef4f18b35542e0553c35ad591015b60405180910390a150505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156117a75750825b90505f8267ffffffffffffffff1660011480156117c35750303b155b9050811580156117d1575080155b15611808576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118695784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6118716139e8565b6118796139e8565b6118a37fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775876137fc565b611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c65640000000000000000000000000000006044820152606401610dc6565b6119135f876137fc565b611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c65640000000000000000000000000000006044820152606401610dc6565b73ffffffffffffffffffffffffffffffffffffffff8716611a1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f747572652073656e6465720000000000000000000000000000000000000000006064820152608401610dc6565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558315611ab95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200161174c565b50505050505050565b5f610cec8263ffffffff163a613851565b611adb6139f2565b611ae482613af6565b611aee8282613b1f565b5050565b5f611afb613c58565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b90565b611b29613394565b611b527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756137f2565b6008546c0100000000000000000000000090046bffffffffffffffffffffffff16611b7e811515613cc7565b600880547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff169055611bbe826bffffffffffffffffffffffff8316613cfe565b50611bc860015f55565b50565b8051604051606091611be39160200190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040529050919050565b600b545f9060ff16611ca2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e666967757265640000000000006044820152606401610dc6565b600b54610100900460ff1615611d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e74726163742069732064697361626c65640000000000000000000000006044820152606401610dc6565b610cec825f610d5c565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220611d569084613d94565b949350505050565b611d66613394565b5f81815260036020526040902054611d939073ffffffffffffffffffffffffffffffffffffffff16613d9f565b5f81815260046020526040812080546bffffffffffffffffffffffff1691349190611dbe838561558b565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055503460085f8282829054906101000a90046bffffffffffffffffffffffff16611e14919061558b565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550817f7603b205d03651ee812f803fccde89f1012e545a9c99f0abfea9cedd0fd8e902823484611e719190615398565b604080519283526020830191909152015b60405180910390a250611bc860015f55565b5f611e9d613394565b60055467ffffffffffffffff1633611eb66001436155af565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b81166020830152914060348201523090921b1660548201527fffffffffffffffff00000000000000000000000000000000000000000000000060c083901b166068820152607001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209150611f698160016155c2565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff928316179055604080515f808252606080830184526020808401838152848601848152898552600483528685209151825491516bffffffffffffffffffffffff9091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316176c01000000000000000000000000919099160297909717905584519182018552338252818101838152828601858152898552600383529590932082518154881673ffffffffffffffffffffffffffffffffffffffff918216178255935160018201805490981694169390931790955592518051929491926120879260028501920190614c0f565b5061209791506006905084613dec565b5060405133815283907f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d9060200160405180910390a25050611b1e60015f55565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260409091206060919061139990613df7565b61213d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756137f2565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690556040517fc0f961051f97b04c496472d11cb6170d844e4b2c9dfd3b602a4fa0139712d484905f90a1565b6121b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756137f2565b5f8181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff166121e581613d9f565b611aee82826133d5565b60605f6121fc6006613e03565b9050808410612237576040517f1390f2a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6122428486615398565b905081811180612250575083155b61225a578061225c565b815b90505f61226986836155af565b90508067ffffffffffffffff81111561228457612284614e74565b6040519080825280602002602001820160405280156122ad578160200160208202803683370190505b5093505f5b818110156122f4576122cf6122c78883615398565b600690613d94565b8582815181106122e1576122e161555e565b60209081029190910101526001016122b2565b5050505092915050565b612306613394565b5f8181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1661233381613d9f565b5f8281526003602052604090206001015473ffffffffffffffffffffffffffffffffffffffff1633146123bd575f82815260036020526040908190206001015490517fd084e97500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610dc6565b5f828152600360209081526040918290208054337fffffffffffffffffffffffff000000000000000000000000000000000000000091821681178355600190920180549091169055825173ffffffffffffffffffffffffffffffffffffffff851681529182015283917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c93869101611e82565b612456613394565b61247f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756137f2565b6009546bffffffffffffffffffffffff1661249b811515613cc7565b600980547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169055600880548291905f906124e59084906bffffffffffffffffffffffff166155e2565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550611bbe82826bffffffffffffffffffffffff16613cfe565b8161253581613300565b61253d613394565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602090815260408083208684529091529020805460ff161561257c5750610d4e565b5f84815260036020526040902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c016125e6576040517f05a48e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911681178355815490810182555f82815260209081902090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915560405190815286917f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e191015b60405180910390a25050610d5760015f55565b61270b6040518061012001604052805f81526020015f81526020015f63ffffffff1681526020015f81526020016060815260200160608152602001606081526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b5f828152600d602090815260409182902082516101208101845281548152600182015492810192909252600281015463ffffffff169282019290925260038201546060820152600482018054919291608084019190612769906153ab565b80601f0160208091040260200160405190810160405280929190818152602001828054612795906153ab565b80156127e05780601f106127b7576101008083540402835291602001916127e0565b820191905f5260205f20905b8154815290600101906020018083116127c357829003601f168201915b505050505081526020016005820180546127f9906153ab565b80601f0160208091040260200160405190810160405280929190818152602001828054612825906153ab565b80156128705780601f1061284757610100808354040283529160200191612870565b820191905f5260205f20905b81548152906001019060200180831161285357829003601f168201915b50505050508152602001600682018054612889906153ab565b80601f01602080910402602001604051908101604052809291908181526020018280546128b5906153ab565b80156129005780601f106128d757610100808354040283529160200191612900565b820191905f5260205f20905b8154815290600101906020018083116128e357829003601f168201915b50505091835250506007820154602082015260089091015473ffffffffffffffffffffffffffffffffffffffff1660409091015292915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146129bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79207369676e617475726553656e6465722063616e2063616c6c0000006044820152606401610dc6565b610d57838383613e0c565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060208190526040822061139990613e03565b81612a0781613300565b612a0f613394565b612a18836113f9565b15612a4f576040517fb42f66e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020908152604080832086845290915290205460ff16612ad7576040517f79bfd4010000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff83166024820152604401610dc6565b5f838152600360205260408120600201805490915b81811015612c52578473ffffffffffffffffffffffffffffffffffffffff16838281548110612b1d57612b1d61555e565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603612c4a5782612b4f6001846155af565b81548110612b5f57612b5f61555e565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281548110612b9957612b9961555e565b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082805480612bee57612bee615606565b5f8281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055612c52565b600101612aec565b5073ffffffffffffffffffffffffffffffffffffffff84165f81815260026020908152604080832089845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055905191825286917f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a79101612693565b6001546040517fcd802c91000000000000000000000000000000000000000000000000000000008152600481018390525f9173ffffffffffffffffffffffffffffffffffffffff169063cd802c9190602401602060405180830381865afa158015612d45573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cec9190615633565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154612da2816137f2565b611382838361399c565b81612db681613300565b612dbe613394565b5f838152600360205260409020600181015473ffffffffffffffffffffffffffffffffffffffff848116911614612e71576001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851690811790915560408051338152602081019290925285917f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a1910160405180910390a25b50610d5760015f55565b5f81815260036020526040812054819073ffffffffffffffffffffffffffffffffffffffff166060612eac82613d9f565b5f85815260046020908152604080832054600383529281902060020180548251818502810185019093528083526bffffffffffffffffffffffff8516946c01000000000000000000000000900467ffffffffffffffff16938793918391830182828015612f4d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311612f22575b5050505050905093509350935093509193509193565b612f8c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756137f2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f229f6c3b095d683755a99ab458956747a8b7066c3dd42927d850631c34c238f1905f90a250565b6060600e805480602002602001604051908101604052809291908181526020015f905b82821015613261575f84815260209081902060408051610120810182526009860290920180548352600181015493830193909352600283015463ffffffff169082015260038201546060820152600482018054919291608084019190613082906153ab565b80601f01602080910402602001604051908101604052809291908181526020018280546130ae906153ab565b80156130f95780601f106130d0576101008083540402835291602001916130f9565b820191905f5260205f20905b8154815290600101906020018083116130dc57829003601f168201915b50505050508152602001600582018054613112906153ab565b80601f016020809104026020016040519081016040528092919081815260200182805461313e906153ab565b80156131895780601f1061316057610100808354040283529160200191613189565b820191905f5260205f20905b81548152906001019060200180831161316c57829003601f168201915b505050505081526020016006820180546131a2906153ab565b80601f01602080910402602001604051908101604052809291908181526020018280546131ce906153ab565b80156132195780601f106131f057610100808354040283529160200191613219565b820191905f5260205f20905b8154815290600101906020018083116131fc57829003601f168201915b5050509183525050600782015460208083019190915260089092015473ffffffffffffffffffffffffffffffffffffffff16604090910152908252600192909201910161301d565b50505050905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610cec57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610cec565b5f8181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1661332d81613d9f565b3373ffffffffffffffffffffffffffffffffffffffff821614611aee576040517fd8a3fb5200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610dc6565b60025f54036133cf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b5f6133df83614004565b90506133f982826bffffffffffffffffffffffff16613cfe565b6040805173ffffffffffffffffffffffffffffffffffffffff841681526bffffffffffffffffffffffff8316602082015284917f3784f77e8e883de95b5d47cd713ced01229fa74d118c0a462224bcb0516d43f1910160405180910390a2505050565b600a5463ffffffff90811690831611156134d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f43616c6c6261636b206761734c696d697420746f6f20686967680000000000006044820152606401610dc6565b80156136db575f8181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1661350581613d9f565b335f908152600260209081526040808320858452808352928190208151606081018352905460ff8116151580835267ffffffffffffffff6101008304811695840195909552690100000000000000000090910490931691810191909152906135ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e6f2061637469766520737562736372697074696f6e20666f722063616c6c6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610dc6565b8060200180516135fe90615652565b67ffffffffffffffff16905260408101805161361990615652565b67ffffffffffffffff9081169091525f85815260209384526040908190208351815495850151929094015183166901000000000000000000027fffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffff92909316610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921791909116179055505050565b5f6136ec8363ffffffff163a613851565b905080341015610d57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f46656520746f6f206c6f770000000000000000000000000000000000000000006044820152606401610dc6565b6001546040517f95b8d0730000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff16906395b8d073906137b29087908790879060040161567e565b6020604051808303815f875af11580156137ce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d5691906156b6565b611bc881336141ba565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816138298585614260565b90508015611d56575f858152602083905260409020613848908561437e565b50949350505050565b6040805160e081018252600a5463ffffffff80821683526401000000008204811660208401526801000000000000000082048116938301939093526c0100000000000000000000000081048316606083015270010000000000000000000000000000000081048316608083015260ff7401000000000000000000000000000000000000000082041660a08301527501000000000000000000000000000000000000000000900490911660c08201525f90818361391757816060015163ffffffff16613919565b835b90505f6139258661439f565b63ffffffff16836080015163ffffffff1687856020015163ffffffff16010101820290505f6139515f90565b90505f8460a0015160640160ff1690505f856040015163ffffffff1664e8d4a510000290505f81606484878701028161398c5761398c6156cd565b04019a9950505050505050505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816139c985856143b6565b90508015611d56575f8581526020839052604090206138489085614492565b6139f06144b3565b565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480613abf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16613aa67f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b156139f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bc87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756137f2565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613ba4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613ba1918101906156b6565b60015b613bf2576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610dc6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613c4e576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610dc6565b610d57838361451a565b3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146139f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80611bc8576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114613d54576040519150601f19603f3d011682016040523d82523d5f602084013e613d59565b606091505b5050905080610d57576040517f950b247900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611399838361457c565b73ffffffffffffffffffffffffffffffffffffffff8116611bc8576040517f1f6a65b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61139983836145a2565b60605f611399836145ee565b5f610cec825490565b5f5a5f858152600d60205260409020600781015491925090613e8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4e6f207265717565737420666f722072657175657374206964000000000000006044820152606401610dc6565b5f8484604051613e9b9291906156fa565b604080519182900382206024830189905260448084018290528251808503909101815260649093019091526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f431ac6570000000000000000000000000000000000000000000000000000000017905260088401546002850154600a549294505f92613f6b92859273ffffffffffffffffffffffffffffffffffffffff9091169163ffffffff91821691750100000000000000000000000000000000000000000090910481169061464716565b5090508015613fc55760068401613f83878983615709565b50877fb74b3204a538cd8021662d42e794681ddc339924ef675b8fd11e9eaf6aa19eb5848989604051613fb89392919061581f565b60405180910390a2613ff0565b60405188907f8f67472dde2126ccd0315b75dc482a5a73acb228a395553f8ae6edde5a0ca4fa905f90a25b613ffa888661467e565b5050505050505050565b5f8181526003602090815260408083206004909252822054600290910180546bffffffffffffffffffffffff909216929091905b818110156140be5760025f8483815481106140555761405561555e565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1683528281019390935260409182018120888252909252902080547fffffffffffffffffffffffffffffff0000000000000000000000000000000000169055600101614038565b505f84815260036020526040812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116825560018201805490911690559061410d6002830182614c97565b50505f84815260046020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561414d60068561478d565b506bffffffffffffffffffffffff8316156141b357600880548491905f906141849084906bffffffffffffffffffffffff166155e2565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505b5050919050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611aee576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610dc6565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16614375575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556143113390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cec565b5f915050610cec565b5f6113998373ffffffffffffffffffffffffffffffffffffffff84166145a2565b5f6143ab603f83615872565b610cec9060016158be565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615614375575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cec565b5f6113998373ffffffffffffffffffffffffffffffffffffffff8416614794565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166139f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6145238261486e565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561457457610d57828261493c565b611aee6149bb565b5f825f0182815481106145915761459161555e565b905f5260205f200154905092915050565b5f8181526001830160205260408120546145e757508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610cec565b505f610cec565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561463b57602002820191905f5260205f20905b815481526020019060010190808311614627575b50505050509050919050565b5f5f5a83811061467457839003604081048103851015614674575f5f885160208a015f8a8af19250600191505b5094509492505050565b5f614688836126a6565b80519091501561477c5780515f9081526004602052604090208054600c906146c9906c01000000000000000000000000900467ffffffffffffffff16615652565b825467ffffffffffffffff91821661010093840a908102908302199091161790925582015173ffffffffffffffffffffffffffffffffffffffff165f9081526002602090815260408083208551845290915290208054909160099161473c916901000000000000000000909104166158da565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f61476d833a6149f3565b905061138281835f0151614a61565b610d578160200151825f0151614a61565b5f61139983835b5f8181526001830160205260408120548015614375575f6147b66001836155af565b85549091505f906147c9906001906155af565b9050808214614828575f865f0182815481106147e7576147e761555e565b905f5260205f200154905080875f0184815481106148075761480761555e565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061483957614839615606565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610cec565b8073ffffffffffffffffffffffffffffffffffffffff163b5f036148d6576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610dc6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051614965919061591b565b5f60405180830381855af49150503d805f811461499d576040519150601f19603f3d011682016040523d82523d5f602084013e6149a2565b606091505b50915091506149b2858383614b3e565b95945050505050565b34156139f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5a600a54640100000000900463ffffffff1685010390508281025f600a5460649190920160ff740100000000000000000000000000000000000000008404168201020464e8d4a5100063ffffffff68010000000000000000909304929092169190910201949350505050565b8015614ae9575f81815260046020526040902080546bffffffffffffffffffffffff90811690614a95908516821015613cc7565b81546bffffffffffffffffffffffff9185900382167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000091821617909255600980548083168601909216919092161790555050565b600880546bffffffffffffffffffffffff6c0100000000000000000000000080830482168601909116027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff9091161790555050565b606082614b5357614b4e82614bcd565b611399565b8151158015614b77575073ffffffffffffffffffffffffffffffffffffffff84163b155b15614bc6576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610dc6565b5080611399565b805115614bdd5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f20908101928215614c87579160200282015b82811115614c8757825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614c2d565b50614c93929150614cae565b5090565b5080545f8255905f5260205f2090810190611bc891905b5b80821115614c93575f8155600101614caf565b5f60208284031215614cd2575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611399575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114611bc8575f5ffd5b5f5f60408385031215614d33575f5ffd5b823591506020830135614d4581614d01565b809150509250929050565b803563ffffffff81168114614d63575f5ffd5b919050565b5f5f60408385031215614d79575f5ffd5b614d8283614d50565b946020939093013593505050565b5f60208284031215614da0575f5ffd5b5035919050565b5f5f5f5f5f5f5f60e0888a031215614dbd575f5ffd5b614dc688614d50565b9650614dd460208901614d50565b9550614de260408901614d50565b9450614df060608901614d50565b9350614dfe60808901614d50565b925060a088013560ff81168114614e13575f5ffd5b9150614e2160c08901614d50565b905092959891949750929550565b5f5f60408385031215614e40575f5ffd5b8235614e4b81614d01565b91506020830135614d4581614d01565b5f60208284031215614e6b575f5ffd5b61139982614d50565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ee857614ee8614e74565b604052919050565b5f5f60408385031215614f01575f5ffd5b8235614f0c81614d01565b9150602083013567ffffffffffffffff811115614f27575f5ffd5b8301601f81018513614f37575f5ffd5b803567ffffffffffffffff811115614f5157614f51614e74565b614f8260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614ea1565b818152866020838501011115614f96575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215614fc5575f5ffd5b813561139981614d01565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6113996020830184614fd0565b5f604082840312801561503f575f5ffd5b506040805190810167ffffffffffffffff8111828210171561506357615063614e74565b60405282358152602083013561507881614d01565b60208201529392505050565b5f5f60408385031215615095575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b828110156150ea57815173ffffffffffffffffffffffffffffffffffffffff168652602095860195909101906001016150b6565b5093949350505050565b602081525f61139960208301846150a4565b602080825282518282018190525f918401906040840190835b8181101561513d57835183526020938401939092019160010161511f565b509095945050505050565b80518252602081015160208301525f604082015161516e604085018263ffffffff169052565b506060820151606084015260808201516101206080850152615194610120850182614fd0565b905060a083015184820360a08601526151ad8282614fd0565b91505060c083015184820360c08601526151c78282614fd0565b91505060e083015160e08501526101008301516151fd61010086018273ffffffffffffffffffffffffffffffffffffffff169052565b509392505050565b602081525f6113996020830184615148565b5f5f5f60408486031215615229575f5ffd5b83359250602084013567ffffffffffffffff811115615246575f5ffd5b8401601f81018613615256575f5ffd5b803567ffffffffffffffff81111561526c575f5ffd5b86602082840101111561527d575f5ffd5b939660209190910195509293505050565b6bffffffffffffffffffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f6152e060808301846150a4565b9695505050505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561535f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261534a858351615148565b94506020938401939190910190600101615310565b50929695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610cec57610cec61536b565b600181811c908216806153bf57607f821691505b6020821081036153f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b601f821115610d5757805f5260205f20601f840160051c810160208510156154215750805b601f840160051c820191505b81811015615440575f815560010161542d565b5050505050565b815167ffffffffffffffff81111561546157615461614e74565b6154758161546f84546153ab565b846153fc565b6020601f8211600181146154c6575f83156154905750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455615440565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b8281101561551357878501518255602094850194600190920191016154f3565b508482101561554f57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6bffffffffffffffffffffffff8181168382160190811115610cec57610cec61536b565b81810381811115610cec57610cec61536b565b67ffffffffffffffff8181168382160190811115610cec57610cec61536b565b6bffffffffffffffffffffffff8281168282160390811115610cec57610cec61536b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f60208284031215615643575f5ffd5b81518015158114611399575f5ffd5b5f67ffffffffffffffff821667ffffffffffffffff81036156755761567561536b565b60010192915050565b606081525f6156906060830186614fd0565b82810360208401526156a28186614fd0565b905082810360408401526152e08185614fd0565b5f602082840312156156c6575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b818382375f9101908152919050565b67ffffffffffffffff83111561572157615721614e74565b6157358361572f83546153ab565b836153fc565b5f601f841160018114615785575f851561574f5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355615440565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b828110156157d257868501358255602094850194600190920191016157b2565b508682101561580d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f63ffffffff8316806158ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610cec57610cec61536b565b5f67ffffffffffffffff8216806158f3576158f361536b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b5f82518060208501845e5f92019182525091905056fea26469706673582212200f4b10858582ff865ecdf9cf11f77cc923fb2ac799cf583fc61cd848236a376764736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161044638038061044683398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b6101088061033e5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b6021605d565b005b348015602d575f5ffd5b506034606b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b606960656077565b60b5565b565b5f60726077565b905090565b5f60727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b365f5f375f5f365f845af43d5f5f3e80801560ce573d5ff35b3d5ffdfea2646970667358221220a2794c0267cf527d31047d962f7ac722795c9e78659f2050eab808c7bd3b060064736f6c634300081c003352616e646f6d6e6573732061727261792073686f756c6420626520706f70756c617465642061667465722066756c66696c6c6d656e7452616e646f6d6e6573732053656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a20537562736372697074696f6e206e61746976652062616c616e636520697320696e636f72726563747265717565737449642073686f756c64206265207a65726f20706f7374206465706c6f796d656e744e6f206469726563742066756e64696e67206665652073686f756c6420626520636f6c6c656374656420666f7220737562736372697074696f6e72616e646f6d6e65737320617272617920666f72207265717565737449642073686f756c6420626520656d707479206265666f726520726571756573742069732066756c66696c6c6564537562736372697074696f6e206665652073686f756c64206265206e6f6e2d7a65726f20616e64206e6f7420657863656564207265717565737420707269636552616e646f6d6e6573732076616c75652073686f756c64206e6f74206265207a65726f537562736372697074696f6e206f776e657220696e2052616e646f6d6e65737353656e6465722073686f756c64206265207772617070657220636f6e74726163747265717565737449642073686f756c64206265207570646174656420616674657220726571756573745369676e61747572652053656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a2054686572652073686f756c64206265203220636f6e73756d6572732c207772617070657220636f6e747261637420616e6420616464656420636f6e73756d6572a2646970667358221220928ebb913ce9e8ca7421e60a9eecca1599ed5ba2090b81069d856b6729b8409964736f6c634300081c00330d1a2ccd46cb80f94b40809dbd638b44c78e456a4e06b886e8c8f300fa4073950b438ea53140bb1bc93a1c632ab4df0a07d702f34e48ecb7d31da7762a320ad5204a5468e6d01b87c07655eebbb1d43913e197f53281a7d56e2b1a0beac194aa00899f6a3998ecb2f832d35025bf38bef7429005e6b591d9e0ffb10078409f220a6758eec538bb8a511eed78c922a213e4cc06743aeb10ed77f63416fe964c3505d04df1d2daeefa07790b41a9e0ab762e264798bc36340dc3a0cc5654cefa4b";
    static readonly abi: readonly [{
        readonly type: "function";
        readonly name: "IS_TEST";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "";
            readonly type: "bool";
            readonly internalType: "bool";
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "excludeArtifacts";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "excludedArtifacts_";
            readonly type: "string[]";
            readonly internalType: "string[]";
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "excludeContracts";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "excludedContracts_";
            readonly type: "address[]";
            readonly internalType: "address[]";
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "excludeSelectors";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "excludedSelectors_";
            readonly type: "tuple[]";
            readonly internalType: "struct StdInvariant.FuzzSelector[]";
            readonly components: readonly [{
                readonly name: "addr";
                readonly type: "address";
                readonly internalType: "address";
            }, {
                readonly name: "selectors";
                readonly type: "bytes4[]";
                readonly internalType: "bytes4[]";
            }];
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "excludeSenders";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "excludedSenders_";
            readonly type: "address[]";
            readonly internalType: "address[]";
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "failed";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "";
            readonly type: "bool";
            readonly internalType: "bool";
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "setUp";
        readonly inputs: readonly [];
        readonly outputs: readonly [];
        readonly stateMutability: "nonpayable";
    }, {
        readonly type: "function";
        readonly name: "targetArtifactSelectors";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "targetedArtifactSelectors_";
            readonly type: "tuple[]";
            readonly internalType: "struct StdInvariant.FuzzArtifactSelector[]";
            readonly components: readonly [{
                readonly name: "artifact";
                readonly type: "string";
                readonly internalType: "string";
            }, {
                readonly name: "selectors";
                readonly type: "bytes4[]";
                readonly internalType: "bytes4[]";
            }];
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "targetArtifacts";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "targetedArtifacts_";
            readonly type: "string[]";
            readonly internalType: "string[]";
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "targetContracts";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "targetedContracts_";
            readonly type: "address[]";
            readonly internalType: "address[]";
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "targetInterfaces";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "targetedInterfaces_";
            readonly type: "tuple[]";
            readonly internalType: "struct StdInvariant.FuzzInterface[]";
            readonly components: readonly [{
                readonly name: "addr";
                readonly type: "address";
                readonly internalType: "address";
            }, {
                readonly name: "artifacts";
                readonly type: "string[]";
                readonly internalType: "string[]";
            }];
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "targetSelectors";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "targetedSelectors_";
            readonly type: "tuple[]";
            readonly internalType: "struct StdInvariant.FuzzSelector[]";
            readonly components: readonly [{
                readonly name: "addr";
                readonly type: "address";
                readonly internalType: "address";
            }, {
                readonly name: "selectors";
                readonly type: "bytes4[]";
                readonly internalType: "bytes4[]";
            }];
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "targetSenders";
        readonly inputs: readonly [];
        readonly outputs: readonly [{
            readonly name: "targetedSenders_";
            readonly type: "address[]";
            readonly internalType: "address[]";
        }];
        readonly stateMutability: "view";
    }, {
        readonly type: "function";
        readonly name: "test_chainlinkFulfillSignatureRequest_WithSubscription_Successfully";
        readonly inputs: readonly [];
        readonly outputs: readonly [];
        readonly stateMutability: "nonpayable";
    }, {
        readonly type: "event";
        readonly name: "RandomnessRequested";
        readonly inputs: readonly [{
            readonly name: "requestID";
            readonly type: "uint256";
            readonly indexed: true;
            readonly internalType: "uint256";
        }, {
            readonly name: "nonce";
            readonly type: "uint256";
            readonly indexed: true;
            readonly internalType: "uint256";
        }, {
            readonly name: "requester";
            readonly type: "address";
            readonly indexed: true;
            readonly internalType: "address";
        }, {
            readonly name: "requestedAt";
            readonly type: "uint256";
            readonly indexed: false;
            readonly internalType: "uint256";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "WrapperGasOverheadUpdated";
        readonly inputs: readonly [{
            readonly name: "newWrapperGasOverhead";
            readonly type: "uint32";
            readonly indexed: false;
            readonly internalType: "uint32";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log";
        readonly inputs: readonly [{
            readonly name: "";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_address";
        readonly inputs: readonly [{
            readonly name: "";
            readonly type: "address";
            readonly indexed: false;
            readonly internalType: "address";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_array";
        readonly inputs: readonly [{
            readonly name: "val";
            readonly type: "uint256[]";
            readonly indexed: false;
            readonly internalType: "uint256[]";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_array";
        readonly inputs: readonly [{
            readonly name: "val";
            readonly type: "int256[]";
            readonly indexed: false;
            readonly internalType: "int256[]";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_array";
        readonly inputs: readonly [{
            readonly name: "val";
            readonly type: "address[]";
            readonly indexed: false;
            readonly internalType: "address[]";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_bytes";
        readonly inputs: readonly [{
            readonly name: "";
            readonly type: "bytes";
            readonly indexed: false;
            readonly internalType: "bytes";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_bytes32";
        readonly inputs: readonly [{
            readonly name: "";
            readonly type: "bytes32";
            readonly indexed: false;
            readonly internalType: "bytes32";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_int";
        readonly inputs: readonly [{
            readonly name: "";
            readonly type: "int256";
            readonly indexed: false;
            readonly internalType: "int256";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_address";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "address";
            readonly indexed: false;
            readonly internalType: "address";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_array";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "uint256[]";
            readonly indexed: false;
            readonly internalType: "uint256[]";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_array";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "int256[]";
            readonly indexed: false;
            readonly internalType: "int256[]";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_array";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "address[]";
            readonly indexed: false;
            readonly internalType: "address[]";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_bytes";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "bytes";
            readonly indexed: false;
            readonly internalType: "bytes";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_bytes32";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "bytes32";
            readonly indexed: false;
            readonly internalType: "bytes32";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_decimal_int";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "int256";
            readonly indexed: false;
            readonly internalType: "int256";
        }, {
            readonly name: "decimals";
            readonly type: "uint256";
            readonly indexed: false;
            readonly internalType: "uint256";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_decimal_uint";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "uint256";
            readonly indexed: false;
            readonly internalType: "uint256";
        }, {
            readonly name: "decimals";
            readonly type: "uint256";
            readonly indexed: false;
            readonly internalType: "uint256";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_int";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "int256";
            readonly indexed: false;
            readonly internalType: "int256";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_string";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_named_uint";
        readonly inputs: readonly [{
            readonly name: "key";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }, {
            readonly name: "val";
            readonly type: "uint256";
            readonly indexed: false;
            readonly internalType: "uint256";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_string";
        readonly inputs: readonly [{
            readonly name: "";
            readonly type: "string";
            readonly indexed: false;
            readonly internalType: "string";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "log_uint";
        readonly inputs: readonly [{
            readonly name: "";
            readonly type: "uint256";
            readonly indexed: false;
            readonly internalType: "uint256";
        }];
        readonly anonymous: false;
    }, {
        readonly type: "event";
        readonly name: "logs";
        readonly inputs: readonly [{
            readonly name: "";
            readonly type: "bytes";
            readonly indexed: false;
            readonly internalType: "bytes";
        }];
        readonly anonymous: false;
    }];
    static createInterface(): ChainlinkVRFV2_5Integration_SubscriptionTestInterface;
    static connect(address: string, runner?: ContractRunner | null): ChainlinkVRFV2_5Integration_SubscriptionTest;
}
export {};