60806040523480156200001157600080fd5b506040518060400160405280600e81526020017f436f736d696320416464726573730000000000000000000000000000000000008152506040518060400160405280600a81526020017f434f534d49434144445200000000000000000000000000000000000000000000815250816002908051906020019062000096929190620001dc565b508060039080519060200190620000af929190620001dc565b50620000c06200010960201b60201c565b6000819055505050620000e8620000dc6200010e60201b60201c565b6200011660201b60201c565b6000600a60006101000a81548160ff021916908315150217905550620002f1565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ea90620002bb565b90600052602060002090601f0160209004810192826200020e57600085556200025a565b82601f106200022957805160ff19168380011785556200025a565b828001600101855582156200025a579182015b82811115620002595782518255916020019190600101906200023c565b5b5090506200026991906200026d565b5090565b5b80821115620002885760008160009055506001016200026e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002d457607f821691505b60208210811415620002eb57620002ea6200028c565b5b50919050565b6125da80620003016000396000f3fe6080604052600436106101355760003560e01c80636352211e116100ab578063a22cb4651161006f578063a22cb465146103e3578063a854ffba1461040c578063b88d4fde14610435578063c87b56dd1461045e578063e985e9c51461049b578063f2fde38b146104d857610135565b80636352211e146102fc57806370a0823114610339578063715018a6146103765780638da5cb5b1461038d57806395d89b41146103b857610135565b806318160ddd116100fd57806318160ddd1461021257806322ef69751461023d57806323b872dd146102685780633ccfd60b1461029157806342842e0e146102a85780635c474f9e146102d157610135565b806301ffc9a71461013a57806306fdde0314610177578063081812fc146101a2578063095ea7b3146101df5780631249c58b14610208575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190611a75565b610501565b60405161016e9190611abd565b60405180910390f35b34801561018357600080fd5b5061018c610593565b6040516101999190611b71565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190611bc9565b610625565b6040516101d69190611c37565b60405180910390f35b3480156101eb57600080fd5b5061020660048036038101906102019190611c7e565b6106a1565b005b6102106107e2565b005b34801561021e57600080fd5b50610227610991565b6040516102349190611ccd565b60405180910390f35b34801561024957600080fd5b506102526109a8565b60405161025f9190611abd565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a9190611ce8565b6109ba565b005b34801561029d57600080fd5b506102a6610cdf565b005b3480156102b457600080fd5b506102cf60048036038101906102ca9190611ce8565b610d37565b005b3480156102dd57600080fd5b506102e6610d57565b6040516102f39190611abd565b60405180910390f35b34801561030857600080fd5b50610323600480360381019061031e9190611bc9565b610d6a565b6040516103309190611c37565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190611d3b565b610d7c565b60405161036d9190611ccd565b60405180910390f35b34801561038257600080fd5b5061038b610e35565b005b34801561039957600080fd5b506103a2610e49565b6040516103af9190611c37565b60405180910390f35b3480156103c457600080fd5b506103cd610e73565b6040516103da9190611b71565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190611d94565b610f05565b005b34801561041857600080fd5b50610433600480360381019061042e9190611dd4565b61107d565b005b34801561044157600080fd5b5061045c60048036038101906104579190611f36565b6110a2565b005b34801561046a57600080fd5b5061048560048036038101906104809190611bc9565b611115565b6040516104929190611b71565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd9190611fb9565b6111f5565b6040516104cf9190611abd565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190611d3b565b611289565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061058c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546105a290612028565b80601f01602080910402602001604051908101604052809291908181526020018280546105ce90612028565b801561061b5780601f106105f05761010080835404028352916020019161061b565b820191906000526020600020905b8154815290600101906020018083116105fe57829003601f168201915b5050505050905090565b60006106308261130d565b610666576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106ac82610d6a565b90508073ffffffffffffffffffffffffffffffffffffffff166106cd61136c565b73ffffffffffffffffffffffffffffffffffffffff1614610730576106f9816106f461136c565b6111f5565b61072f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600a60009054906101000a900460ff16610831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610828906120a6565b60405180910390fd5b61271061ffff16610840611374565b1115610881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087890612112565b60405180910390fd5b600161088c33611387565b106108cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c39061217e565b60405180910390fd5b662386f26fc1000073ffffffffffffffffffffffffffffffffffffffff16341461092b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610922906121ea565b60405180910390fd5b33600960006109386113de565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061098f3360016113e7565b565b600061099b6115bb565b6001546000540303905090565b6000806109b433611387565b11905090565b60006109c5826115c0565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a2c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610a388461168e565b91509150610a4e8187610a4961136c565b6116b0565b610a9a57610a6386610a5e61136c565b6111f5565b610a99576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610b01576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0e86868660016116f4565b8015610b1957600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610be785610bc38888876116fa565b7c020000000000000000000000000000000000000000000000000000000017611722565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610c6f576000600185019050600060046000838152602001908152602001600020541415610c6d576000548114610c6c578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610cd7868686600161174d565b505050505050565b610ce7611753565b610cef610e49565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d34573d6000803e3d6000fd5b50565b610d52838383604051806020016040528060008152506110a2565b505050565b600a60009054906101000a900460ff1681565b6000610d75826115c0565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610de4576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610e3d611753565b610e4760006117d1565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610e8290612028565b80601f0160208091040260200160405190810160405280929190818152602001828054610eae90612028565b8015610efb5780601f10610ed057610100808354040283529160200191610efb565b820191906000526020600020905b815481529060010190602001808311610ede57829003601f168201915b5050505050905090565b610f0d61136c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f72576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610f7f61136c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661102c61136c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110719190611abd565b60405180910390a35050565b611085611753565b80600a60006101000a81548160ff02191690831515021790555050565b6110ad8484846109ba565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461110f576110d884848484611897565b61110e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60608060006009600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200161115e9190612252565b604051602081830303815290604052905073e6a30c7ea7e1cd5124e8ed3e5a8ab0abd1801b2f63316df61e826040518263ffffffff1660e01b81526004016111a691906122c2565b600060405180830381865af41580156111c3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906111ec9190612385565b92505050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611291611753565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890612440565b60405180910390fd5b61130a816117d1565b50565b6000816113186115bb565b11158015611327575060005482105b8015611365575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b600061137e6115bb565b60005403905090565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b60008054905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611454576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082141561148f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61149c60008483856116f4565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506115138361150460008660006116fa565b61150d856119e8565b17611722565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210611537578060008190555050506115b6600084838561174d565b505050565b600090565b600080829050806115cf6115bb565b11611657576000548110156116565760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611654575b600081141561164a57600460008360019003935083815260200190815260200160002054905061161f565b8092505050611689565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86117118686846119f8565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b61175b611a01565b73ffffffffffffffffffffffffffffffffffffffff16611779610e49565b73ffffffffffffffffffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906124ac565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026118bd61136c565b8786866040518563ffffffff1660e01b81526004016118df9493929190612516565b6020604051808303816000875af192505050801561191b57506040513d601f19601f820116820180604052508101906119189190612577565b60015b611995573d806000811461194b576040519150601f19603f3d011682016040523d82523d6000602084013e611950565b606091505b5060008151141561198d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60006001821460e11b9050919050565b60009392505050565b600033905090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a5281611a1d565b8114611a5d57600080fd5b50565b600081359050611a6f81611a49565b92915050565b600060208284031215611a8b57611a8a611a13565b5b6000611a9984828501611a60565b91505092915050565b60008115159050919050565b611ab781611aa2565b82525050565b6000602082019050611ad26000830184611aae565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b12578082015181840152602081019050611af7565b83811115611b21576000848401525b50505050565b6000601f19601f8301169050919050565b6000611b4382611ad8565b611b4d8185611ae3565b9350611b5d818560208601611af4565b611b6681611b27565b840191505092915050565b60006020820190508181036000830152611b8b8184611b38565b905092915050565b6000819050919050565b611ba681611b93565b8114611bb157600080fd5b50565b600081359050611bc381611b9d565b92915050565b600060208284031215611bdf57611bde611a13565b5b6000611bed84828501611bb4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c2182611bf6565b9050919050565b611c3181611c16565b82525050565b6000602082019050611c4c6000830184611c28565b92915050565b611c5b81611c16565b8114611c6657600080fd5b50565b600081359050611c7881611c52565b92915050565b60008060408385031215611c9557611c94611a13565b5b6000611ca385828601611c69565b9250506020611cb485828601611bb4565b9150509250929050565b611cc781611b93565b82525050565b6000602082019050611ce26000830184611cbe565b92915050565b600080600060608486031215611d0157611d00611a13565b5b6000611d0f86828701611c69565b9350506020611d2086828701611c69565b9250506040611d3186828701611bb4565b9150509250925092565b600060208284031215611d5157611d50611a13565b5b6000611d5f84828501611c69565b91505092915050565b611d7181611aa2565b8114611d7c57600080fd5b50565b600081359050611d8e81611d68565b92915050565b60008060408385031215611dab57611daa611a13565b5b6000611db985828601611c69565b9250506020611dca85828601611d7f565b9150509250929050565b600060208284031215611dea57611de9611a13565b5b6000611df884828501611d7f565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e4382611b27565b810181811067ffffffffffffffff82111715611e6257611e61611e0b565b5b80604052505050565b6000611e75611a09565b9050611e818282611e3a565b919050565b600067ffffffffffffffff821115611ea157611ea0611e0b565b5b611eaa82611b27565b9050602081019050919050565b82818337600083830152505050565b6000611ed9611ed484611e86565b611e6b565b905082815260208101848484011115611ef557611ef4611e06565b5b611f00848285611eb7565b509392505050565b600082601f830112611f1d57611f1c611e01565b5b8135611f2d848260208601611ec6565b91505092915050565b60008060008060808587031215611f5057611f4f611a13565b5b6000611f5e87828801611c69565b9450506020611f6f87828801611c69565b9350506040611f8087828801611bb4565b925050606085013567ffffffffffffffff811115611fa157611fa0611a18565b5b611fad87828801611f08565b91505092959194509250565b60008060408385031215611fd057611fcf611a13565b5b6000611fde85828601611c69565b9250506020611fef85828601611c69565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061204057607f821691505b6020821081141561205457612053611ff9565b5b50919050565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b6000612090601083611ae3565b915061209b8261205a565b602082019050919050565b600060208201905081810360008301526120bf81612083565b9050919050565b7f4d6178206d696e74207265616368656400000000000000000000000000000000600082015250565b60006120fc601083611ae3565b9150612107826120c6565b602082019050919050565b6000602082019050818103600083015261212b816120ef565b9050919050565b7f31206d696e74206f6e6c79207361646c79000000000000000000000000000000600082015250565b6000612168601183611ae3565b915061217382612132565b602082019050919050565b600060208201905081810360008301526121978161215b565b9050919050565b7f57726f6e6720616d6f756e742070616964000000000000000000000000000000600082015250565b60006121d4601183611ae3565b91506121df8261219e565b602082019050919050565b60006020820190508181036000830152612203816121c7565b9050919050565b60008160601b9050919050565b60006122228261220a565b9050919050565b600061223482612217565b9050919050565b61224c61224782611c16565b612229565b82525050565b600061225e828461223b565b60148201915081905092915050565b600081519050919050565b600082825260208201905092915050565b60006122948261226d565b61229e8185612278565b93506122ae818560208601611af4565b6122b781611b27565b840191505092915050565b600060208201905081810360008301526122dc8184612289565b905092915050565b600067ffffffffffffffff8211156122ff576122fe611e0b565b5b61230882611b27565b9050602081019050919050565b6000612328612323846122e4565b611e6b565b90508281526020810184848401111561234457612343611e06565b5b61234f848285611af4565b509392505050565b600082601f83011261236c5761236b611e01565b5b815161237c848260208601612315565b91505092915050565b60006020828403121561239b5761239a611a13565b5b600082015167ffffffffffffffff8111156123b9576123b8611a18565b5b6123c584828501612357565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061242a602683611ae3565b9150612435826123ce565b604082019050919050565b600060208201905081810360008301526124598161241d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612496602083611ae3565b91506124a182612460565b602082019050919050565b600060208201905081810360008301526124c581612489565b9050919050565b600082825260208201905092915050565b60006124e88261226d565b6124f281856124cc565b9350612502818560208601611af4565b61250b81611b27565b840191505092915050565b600060808201905061252b6000830187611c28565b6125386020830186611c28565b6125456040830185611cbe565b818103606083015261255781846124dd565b905095945050505050565b60008151905061257181611a49565b92915050565b60006020828403121561258d5761258c611a13565b5b600061259b84828501612562565b9150509291505056fea26469706673582212201c17ff091f483d4f27e87675d7190615800c189c77bfa31358ce91105a9f8ee764736f6c634300080c0033