608060405267016345785d8a000060095566b1a2bc2ec50000600a556032600b556000600c5560c8600d556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506107d06010553480156200007357600080fd5b5060405162004e3e38038062004e3e83398181016040528101906200009991906200051a565b6040518060400160405280600f81526020017f44616e6765726f75732044696e6f7300000000000000000000000000000000008152506040518060400160405280600281526020017f444400000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200011d929190620002cd565b50806001908051906020019062000136929190620002cd565b505050620001596200014d6200017160201b60201c565b6200017960201b60201c565b6200016a816200023f60201b60201c565b50620005d0565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff1662000266620002a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200028757600080fd5b80600e90805190602001906200029f929190620002cd565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002db906200059a565b90600052602060002090601f016020900481019282620002ff57600085556200034b565b82601f106200031a57805160ff19168380011785556200034b565b828001600101855582156200034b579182015b828111156200034a5782518255916020019190600101906200032d565b5b5090506200035a91906200035e565b5090565b5b80821115620003795760008160009055506001016200035f565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003e6826200039b565b810181811067ffffffffffffffff82111715620004085762000407620003ac565b5b80604052505050565b60006200041d6200037d565b90506200042b8282620003db565b919050565b600067ffffffffffffffff8211156200044e576200044d620003ac565b5b62000459826200039b565b9050602081019050919050565b60005b838110156200048657808201518184015260208101905062000469565b8381111562000496576000848401525b50505050565b6000620004b3620004ad8462000430565b62000411565b905082815260208101848484011115620004d257620004d162000396565b5b620004df84828562000466565b509392505050565b600082601f830112620004ff57620004fe62000391565b5b8151620005118482602086016200049c565b91505092915050565b60006020828403121562000533576200053262000387565b5b600082015167ffffffffffffffff8111156200055457620005536200038c565b5b6200056284828501620004e7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005b357607f821691505b60208210811415620005ca57620005c96200056b565b5b50919050565b61485e80620005e06000396000f3fe6080604052600436106102395760003560e01c8063715018a61161012e578063a22cb465116100ab578063e7b62d961161006f578063e7b62d9614610803578063e82b2a711461082e578063e985e9c514610857578063f2fde38b14610894578063f6c9d9e3146108bd57610239565b8063a22cb46514610734578063a51312c81461075d578063b88d4fde14610786578063c323286f146107af578063c87b56dd146107c657610239565b80637835c635116100f25780637835c6351461067d5780638da5cb5b1461069957806391b7f5ed146106c457806395d89b41146106ed578063a0712d681461071857610239565b8063715018a6146105e657806371e3500c146105fd5780637263cfe2146106145780637389fbb71461063d578063760a8c2a1461066657610239565b80633549345e116101bc57806360d938dc1161018057806360d938dc146104eb5780636352211e146105165780636817c76c146105535780636de9f32b1461057e57806370a08231146105a957610239565b80633549345e146104305780633ccfd60b1461045957806342842e0e1461047057806355f804b31461049957806356a87caa146104c257610239565b8063095ea7b311610203578063095ea7b31461034b57806322f3e2d41461037457806323b872dd1461039f5780632c1205f4146103c857806332cb6b0c1461040557610239565b806208ffdd1461023e5780620e7fa81461027b57806301ffc9a7146102a657806306fdde03146102e3578063081812fc1461030e575b600080fd5b34801561024a57600080fd5b5061026560048036038101906102609190612f88565b6108e6565b6040516102729190612fce565b60405180910390f35b34801561028757600080fd5b5061029061099e565b60405161029d9190612fce565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190613041565b6109a4565b6040516102da9190613089565b60405180910390f35b3480156102ef57600080fd5b506102f8610a86565b604051610305919061313d565b60405180910390f35b34801561031a57600080fd5b506103356004803603810190610330919061318b565b610b18565b60405161034291906131c7565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d91906131e2565b610b9d565b005b34801561038057600080fd5b50610389610cb5565b6040516103969190613089565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190613222565b610cc8565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190612f88565b610d28565b6040516103fc9190613089565b60405180910390f35b34801561041157600080fd5b5061041a610d7e565b6040516104279190612fce565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061318b565b610d84565b005b34801561046557600080fd5b5061046e610dcd565b005b34801561047c57600080fd5b5061049760048036038101906104929190613222565b610e62565b005b3480156104a557600080fd5b506104c060048036038101906104bb91906133aa565b610e82565b005b3480156104ce57600080fd5b506104e960048036038101906104e4919061318b565b610edb565b005b3480156104f757600080fd5b50610500610f24565b60405161050d9190613089565b60405180910390f35b34801561052257600080fd5b5061053d6004803603810190610538919061318b565b610f37565b60405161054a91906131c7565b60405180910390f35b34801561055f57600080fd5b50610568610fe9565b6040516105759190612fce565b60405180910390f35b34801561058a57600080fd5b50610593610fef565b6040516105a09190612fce565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190612f88565b611000565b6040516105dd9190612fce565b60405180910390f35b3480156105f257600080fd5b506105fb6110b8565b005b34801561060957600080fd5b50610612611140565b005b34801561062057600080fd5b5061063b60048036038101906106369190613453565b61121e565b005b34801561064957600080fd5b50610664600480360381019061065f919061318b565b611477565b005b34801561067257600080fd5b5061067b6114c0565b005b6106976004803603810190610692919061318b565b61152b565b005b3480156106a557600080fd5b506106ae611736565b6040516106bb91906131c7565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e6919061318b565b611760565b005b3480156106f957600080fd5b506107026117a9565b60405161070f919061313d565b60405180910390f35b610732600480360381019061072d919061318b565b61183b565b005b34801561074057600080fd5b5061075b600480360381019061075691906134cc565b611a01565b005b34801561076957600080fd5b50610784600480360381019061077f9190613453565b611a17565b005b34801561079257600080fd5b506107ad60048036038101906107a891906135ad565b611b92565b005b3480156107bb57600080fd5b506107c4611bf4565b005b3480156107d257600080fd5b506107ed60048036038101906107e8919061318b565b611c5f565b6040516107fa919061313d565b60405180910390f35b34801561080f57600080fd5b50610818611d06565b6040516108259190612fce565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190613630565b611d10565b005b34801561086357600080fd5b5061087e60048036038101906108799190613690565b611f14565b60405161088b9190613089565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b69190612f88565b611fa8565b005b3480156108c957600080fd5b506108e460048036038101906108df919061318b565b6120a0565b005b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061371c565b60405180910390fd5b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a7f5750610a7e826120e9565b5b9050919050565b606060008054610a959061376b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac19061376b565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b6000610b2382612153565b610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b599061380f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ba882610f37565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c10906138a1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c386121bf565b73ffffffffffffffffffffffffffffffffffffffff161480610c675750610c6681610c616121bf565b611f14565b5b610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90613933565b60405180910390fd5b610cb083836121c7565b505050565b600f60009054906101000a900460ff1681565b610cd9610cd36121bf565b82612280565b610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f906139c5565b60405180910390fd5b610d2383838361235e565b505050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b3373ffffffffffffffffffffffffffffffffffffffff16610da3611736565b73ffffffffffffffffffffffffffffffffffffffff1614610dc357600080fd5b80600a8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16610dec611736565b73ffffffffffffffffffffffffffffffffffffffff1614610e0c57600080fd5b6000479050610e19611736565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e5e573d6000803e3d6000fd5b5050565b610e7d83838360405180602001604052806000815250611b92565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610ea1611736565b73ffffffffffffffffffffffffffffffffffffffff1614610ec157600080fd5b80600e9080519060200190610ed7929190612e73565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16610efa611736565b73ffffffffffffffffffffffffffffffffffffffff1614610f1a57600080fd5b80600d8190555050565b600f60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790613a57565b60405180910390fd5b80915050919050565b60095481565b6000610ffb60076125c5565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613ae9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c06121bf565b73ffffffffffffffffffffffffffffffffffffffff166110de611736565b73ffffffffffffffffffffffffffffffffffffffff1614611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90613b55565b60405180910390fd5b61113e60006125d3565b565b3373ffffffffffffffffffffffffffffffffffffffff1661115f611736565b73ffffffffffffffffffffffffffffffffffffffff161461117f57600080fd5b600d54600c5411156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613bc1565b60405180910390fd5b60005b600b5481101561121b576111dd6007612699565b6111f0336111eb60076125c5565b6126af565b600c600081548092919061120390613c10565b9190505550808061121390613c10565b9150506111c9565b50565b3373ffffffffffffffffffffffffffffffffffffffff1661123d611736565b73ffffffffffffffffffffffffffffffffffffffff161461125d57600080fd5b60005b8282905081101561147257600073ffffffffffffffffffffffffffffffffffffffff1683838381811061129657611295613c59565b5b90506020020160208101906112ab9190612f88565b73ffffffffffffffffffffffffffffffffffffffff161415611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f990613cd4565b60405180910390fd5b60016011600085858581811061131b5761131a613c59565b5b90506020020160208101906113309190612f88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006012600085858581811061139a57611399613c59565b5b90506020020160208101906113af9190612f88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116113f657600061145e565b6012600084848481811061140d5761140c613c59565b5b90506020020160208101906114229190612f88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b50808061146a90613c10565b915050611260565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16611496611736565b73ffffffffffffffffffffffffffffffffffffffff16146114b657600080fd5b8060108190555050565b3373ffffffffffffffffffffffffffffffffffffffff166114df611736565b73ffffffffffffffffffffffffffffffffffffffff16146114ff57600080fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b60105461153860076125c5565b1115611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090613d40565b60405180910390fd5b600061158560076125c5565b9050600f60019054906101000a900460ff166115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90613dac565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613e18565b60405180910390fd5b60105481106116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90613e84565b60405180910390fd5b81600a546116b49190613ea4565b3410156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90613f4a565b60405180910390fd5b60005b828110156117315761170b6007612699565b61171e3361171960076125c5565b6126af565b808061172990613c10565b9150506116f9565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff1661177f611736565b73ffffffffffffffffffffffffffffffffffffffff161461179f57600080fd5b8060098190555050565b6060600180546117b89061376b565b80601f01602080910402602001604051908101604052809291908181526020018280546117e49061376b565b80156118315780601f1061180657610100808354040283529160200191611831565b820191906000526020600020905b81548152906001019060200180831161181457829003601f168201915b5050505050905090565b60105461184860076125c5565b1115611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090613d40565b60405180910390fd5b600061189560076125c5565b905061189f611736565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461192157600f60009054906101000a900460ff16611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790613fb6565b60405180910390fd5b5b60105482826119309190613fd6565b1115611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614078565b60405180910390fd5b8160095461197f9190613ea4565b3410156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b8906140e4565b60405180910390fd5b60005b828110156119fc576119d66007612699565b6119e9336119e460076125c5565b6126af565b80806119f490613c10565b9150506119c4565b505050565b611a13611a0c6121bf565b83836126cd565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16611a36611736565b73ffffffffffffffffffffffffffffffffffffffff1614611a5657600080fd5b60005b82829050811015611b8d57600073ffffffffffffffffffffffffffffffffffffffff16838383818110611a8f57611a8e613c59565b5b9050602002016020810190611aa49190612f88565b73ffffffffffffffffffffffffffffffffffffffff161415611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613cd4565b60405180910390fd5b600060116000858585818110611b1457611b13613c59565b5b9050602002016020810190611b299190612f88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b8590613c10565b915050611a59565b505050565b611ba3611b9d6121bf565b83612280565b611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906139c5565b60405180910390fd5b611bee8484848461283a565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16611c13611736565b73ffffffffffffffffffffffffffffffffffffffff1614611c3357600080fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6060611c6a82612153565b611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca090614176565b60405180910390fd5b6000611cb3612896565b90506000815111611cd35760405180602001604052806000815250611cfe565b80611cdd84612928565b604051602001611cee9291906141d2565b6040516020818303038152906040525b915050919050565b6000600b54905090565b3373ffffffffffffffffffffffffffffffffffffffff16611d2f611736565b73ffffffffffffffffffffffffffffffffffffffff1614611d4f57600080fd5b6000611d5b60076125c5565b90506010548482611d6c9190613fd6565b1115611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da490614078565b60405180910390fd5b601054811115611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990614242565b60405180910390fd5b60005b83839050811015611f0d57600073ffffffffffffffffffffffffffffffffffffffff16848483818110611e2b57611e2a613c59565b5b9050602002016020810190611e409190612f88565b73ffffffffffffffffffffffffffffffffffffffff161415611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e90613cd4565b60405180910390fd5b60005b85811015611ef957611eac6007612699565b611ee6858584818110611ec257611ec1613c59565b5b9050602002016020810190611ed79190612f88565b611ee160076125c5565b6126af565b8080611ef190613c10565b915050611e9a565b508080611f0590613c10565b915050611df5565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fb06121bf565b73ffffffffffffffffffffffffffffffffffffffff16611fce611736565b73ffffffffffffffffffffffffffffffffffffffff1614612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b90613b55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b906142d4565b60405180910390fd5b61209d816125d3565b50565b3373ffffffffffffffffffffffffffffffffffffffff166120bf611736565b73ffffffffffffffffffffffffffffffffffffffff16146120df57600080fd5b80600b8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661223a83610f37565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061228b82612153565b6122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614366565b60405180910390fd5b60006122d583610f37565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061231757506123168185611f14565b5b8061235557508373ffffffffffffffffffffffffffffffffffffffff1661233d84610b18565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661237e82610f37565b73ffffffffffffffffffffffffffffffffffffffff16146123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb906143f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b9061448a565b60405180910390fd5b61244f838383612a89565b61245a6000826121c7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124aa91906144aa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125019190613fd6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125c0838383612a8e565b505050565b600081600001549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b6126c9828260405180602001604052806000815250612a93565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127339061452a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161282d9190613089565b60405180910390a3505050565b61284584848461235e565b61285184848484612aee565b612890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612887906145bc565b60405180910390fd5b50505050565b6060600e80546128a59061376b565b80601f01602080910402602001604051908101604052809291908181526020018280546128d19061376b565b801561291e5780601f106128f35761010080835404028352916020019161291e565b820191906000526020600020905b81548152906001019060200180831161290157829003601f168201915b5050505050905090565b60606000821415612970576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a84565b600082905060005b600082146129a257808061298b90613c10565b915050600a8261299b919061460b565b9150612978565b60008167ffffffffffffffff8111156129be576129bd61327f565b5b6040519080825280601f01601f1916602001820160405280156129f05781602001600182028036833780820191505090505b5090505b60008514612a7d57600182612a0991906144aa565b9150600a85612a18919061463c565b6030612a249190613fd6565b60f81b818381518110612a3a57612a39613c59565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a76919061460b565b94506129f4565b8093505050505b919050565b505050565b505050565b612a9d8383612c76565b612aaa6000848484612aee565b612ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae0906145bc565b60405180910390fd5b505050565b6000612b0f8473ffffffffffffffffffffffffffffffffffffffff16612e50565b15612c69578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b386121bf565b8786866040518563ffffffff1660e01b8152600401612b5a94939291906146c2565b6020604051808303816000875af1925050508015612b9657506040513d601f19601f82011682018060405250810190612b939190614723565b60015b612c19573d8060008114612bc6576040519150601f19603f3d011682016040523d82523d6000602084013e612bcb565b606091505b50600081511415612c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c08906145bc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c6e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdd9061479c565b60405180910390fd5b612cef81612153565b15612d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2690614808565b60405180910390fd5b612d3b60008383612a89565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d8b9190613fd6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e4c60008383612a8e565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612e7f9061376b565b90600052602060002090601f016020900481019282612ea15760008555612ee8565b82601f10612eba57805160ff1916838001178555612ee8565b82800160010185558215612ee8579182015b82811115612ee7578251825591602001919060010190612ecc565b5b509050612ef59190612ef9565b5090565b5b80821115612f12576000816000905550600101612efa565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f5582612f2a565b9050919050565b612f6581612f4a565b8114612f7057600080fd5b50565b600081359050612f8281612f5c565b92915050565b600060208284031215612f9e57612f9d612f20565b5b6000612fac84828501612f73565b91505092915050565b6000819050919050565b612fc881612fb5565b82525050565b6000602082019050612fe36000830184612fbf565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61301e81612fe9565b811461302957600080fd5b50565b60008135905061303b81613015565b92915050565b60006020828403121561305757613056612f20565b5b60006130658482850161302c565b91505092915050565b60008115159050919050565b6130838161306e565b82525050565b600060208201905061309e600083018461307a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130de5780820151818401526020810190506130c3565b838111156130ed576000848401525b50505050565b6000601f19601f8301169050919050565b600061310f826130a4565b61311981856130af565b93506131298185602086016130c0565b613132816130f3565b840191505092915050565b600060208201905081810360008301526131578184613104565b905092915050565b61316881612fb5565b811461317357600080fd5b50565b6000813590506131858161315f565b92915050565b6000602082840312156131a1576131a0612f20565b5b60006131af84828501613176565b91505092915050565b6131c181612f4a565b82525050565b60006020820190506131dc60008301846131b8565b92915050565b600080604083850312156131f9576131f8612f20565b5b600061320785828601612f73565b925050602061321885828601613176565b9150509250929050565b60008060006060848603121561323b5761323a612f20565b5b600061324986828701612f73565b935050602061325a86828701612f73565b925050604061326b86828701613176565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132b7826130f3565b810181811067ffffffffffffffff821117156132d6576132d561327f565b5b80604052505050565b60006132e9612f16565b90506132f582826132ae565b919050565b600067ffffffffffffffff8211156133155761331461327f565b5b61331e826130f3565b9050602081019050919050565b82818337600083830152505050565b600061334d613348846132fa565b6132df565b9050828152602081018484840111156133695761336861327a565b5b61337484828561332b565b509392505050565b600082601f83011261339157613390613275565b5b81356133a184826020860161333a565b91505092915050565b6000602082840312156133c0576133bf612f20565b5b600082013567ffffffffffffffff8111156133de576133dd612f25565b5b6133ea8482850161337c565b91505092915050565b600080fd5b600080fd5b60008083601f84011261341357613412613275565b5b8235905067ffffffffffffffff8111156134305761342f6133f3565b5b60208301915083602082028301111561344c5761344b6133f8565b5b9250929050565b6000806020838503121561346a57613469612f20565b5b600083013567ffffffffffffffff81111561348857613487612f25565b5b613494858286016133fd565b92509250509250929050565b6134a98161306e565b81146134b457600080fd5b50565b6000813590506134c6816134a0565b92915050565b600080604083850312156134e3576134e2612f20565b5b60006134f185828601612f73565b9250506020613502858286016134b7565b9150509250929050565b600067ffffffffffffffff8211156135275761352661327f565b5b613530826130f3565b9050602081019050919050565b600061355061354b8461350c565b6132df565b90508281526020810184848401111561356c5761356b61327a565b5b61357784828561332b565b509392505050565b600082601f83011261359457613593613275565b5b81356135a484826020860161353d565b91505092915050565b600080600080608085870312156135c7576135c6612f20565b5b60006135d587828801612f73565b94505060206135e687828801612f73565b93505060406135f787828801613176565b925050606085013567ffffffffffffffff81111561361857613617612f25565b5b6136248782880161357f565b91505092959194509250565b60008060006040848603121561364957613648612f20565b5b600061365786828701613176565b935050602084013567ffffffffffffffff81111561367857613677612f25565b5b613684868287016133fd565b92509250509250925092565b600080604083850312156136a7576136a6612f20565b5b60006136b585828601612f73565b92505060206136c685828601612f73565b9150509250929050565b7f5a65726f2061646472657373206e6f74206f6e20416c6c6f77204c6973740000600082015250565b6000613706601e836130af565b9150613711826136d0565b602082019050919050565b60006020820190508181036000830152613735816136f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061378357607f821691505b602082108114156137975761379661373c565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006137f9602c836130af565b91506138048261379d565b604082019050919050565b60006020820190508181036000830152613828816137ec565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061388b6021836130af565b91506138968261382f565b604082019050919050565b600060208201905081810360008301526138ba8161387e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061391d6038836130af565b9150613928826138c1565b604082019050919050565b6000602082019050818103600083015261394c81613910565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006139af6031836130af565b91506139ba82613953565b604082019050919050565b600060208201905081810360008301526139de816139a2565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613a416029836130af565b9150613a4c826139e5565b604082019050919050565b60006020820190508181036000830152613a7081613a34565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613ad3602a836130af565b9150613ade82613a77565b604082019050919050565b60006020820190508181036000830152613b0281613ac6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b3f6020836130af565b9150613b4a82613b09565b602082019050919050565b60006020820190508181036000830152613b6e81613b32565b9050919050565b7f4d61782052657365727665732074616b656e20616c7265616479210000000000600082015250565b6000613bab601b836130af565b9150613bb682613b75565b602082019050919050565b60006020820190508181036000830152613bda81613b9e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c1b82612fb5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c4e57613c4d613be1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e2774206164642061206e756c6c20616464726573730000000000000000600082015250565b6000613cbe6018836130af565b9150613cc982613c88565b602082019050919050565b60006020820190508181036000830152613ced81613cb1565b9050919050565b7f53616c652068617320656e6465642e0000000000000000000000000000000000600082015250565b6000613d2a600f836130af565b9150613d3582613cf4565b602082019050919050565b60006020820190508181036000830152613d5981613d1d565b9050919050565b7f416c6c6f77204c697374206973206e6f74206163746976650000000000000000600082015250565b6000613d966018836130af565b9150613da182613d60565b602082019050919050565b60006020820190508181036000830152613dc581613d89565b9050919050565b7f596f7520617265206e6f74206f6e2074686520416c6c6f77204c697374000000600082015250565b6000613e02601d836130af565b9150613e0d82613dcc565b602082019050919050565b60006020820190508181036000830152613e3181613df5565b9050919050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000613e6e601b836130af565b9150613e7982613e38565b602082019050919050565b60006020820190508181036000830152613e9d81613e61565b9050919050565b6000613eaf82612fb5565b9150613eba83612fb5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ef357613ef2613be1565b5b828202905092915050565b7f496e7375666669656e742045544820616d6f756e742073656e742e0000000000600082015250565b6000613f34601b836130af565b9150613f3f82613efe565b602082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b7f53616c65206973206e6f74206163746976652063757272656e746c792e000000600082015250565b6000613fa0601d836130af565b9150613fab82613f6a565b602082019050919050565b60006020820190508181036000830152613fcf81613f93565b9050919050565b6000613fe182612fb5565b9150613fec83612fb5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561402157614020613be1565b5b828201905092915050565b7f546f74616c20737570706c792065786365656465642e00000000000000000000600082015250565b60006140626016836130af565b915061406d8261402c565b602082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f496e73756666696369656e742045544820616d6f756e742073656e742e000000600082015250565b60006140ce601d836130af565b91506140d982614098565b602082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614160602f836130af565b915061416b82614104565b604082019050919050565b6000602082019050818103600083015261418f81614153565b9050919050565b600081905092915050565b60006141ac826130a4565b6141b68185614196565b93506141c68185602086016130c0565b80840191505092915050565b60006141de82856141a1565b91506141ea82846141a1565b91508190509392505050565b7f546f74616c20737570706c79207370656e742e00000000000000000000000000600082015250565b600061422c6013836130af565b9150614237826141f6565b602082019050919050565b6000602082019050818103600083015261425b8161421f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142be6026836130af565b91506142c982614262565b604082019050919050565b600060208201905081810360008301526142ed816142b1565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614350602c836130af565b915061435b826142f4565b604082019050919050565b6000602082019050818103600083015261437f81614343565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006143e26025836130af565b91506143ed82614386565b604082019050919050565b60006020820190508181036000830152614411816143d5565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006144746024836130af565b915061447f82614418565b604082019050919050565b600060208201905081810360008301526144a381614467565b9050919050565b60006144b582612fb5565b91506144c083612fb5565b9250828210156144d3576144d2613be1565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006145146019836130af565b915061451f826144de565b602082019050919050565b6000602082019050818103600083015261454381614507565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006145a66032836130af565b91506145b18261454a565b604082019050919050565b600060208201905081810360008301526145d581614599565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061461682612fb5565b915061462183612fb5565b925082614631576146306145dc565b5b828204905092915050565b600061464782612fb5565b915061465283612fb5565b925082614662576146616145dc565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006146948261466d565b61469e8185614678565b93506146ae8185602086016130c0565b6146b7816130f3565b840191505092915050565b60006080820190506146d760008301876131b8565b6146e460208301866131b8565b6146f16040830185612fbf565b81810360608301526147038184614689565b905095945050505050565b60008151905061471d81613015565b92915050565b60006020828403121561473957614738612f20565b5b60006147478482850161470e565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006147866020836130af565b915061479182614750565b602082019050919050565b600060208201905081810360008301526147b581614779565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006147f2601c836130af565b91506147fd826147bc565b602082019050919050565b60006020820190508181036000830152614821816147e5565b905091905056fea2646970667358221220350110fa767b568e8b7a572a7aef3e4a36a8c073ecdd647b25eebdfdbc51f32d64736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000